2000-08-18 05:24:22 +02:00
|
|
|
|
phpGroupWare Application Development
|
|
|
|
|
Dan Kuykendall <dan@kuykendall.org>
|
2000-09-29 07:24:18 +02:00
|
|
|
|
v0.9 29 September 2000
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
2000-09-26 17:56:24 +02:00
|
|
|
|
This document explains phpGroupWare's infrastructure and API, along
|
2000-08-31 08:05:46 +02:00
|
|
|
|
with what is required to integrate applications into it.
|
2000-08-18 05:24:22 +02:00
|
|
|
|
______________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Table of Contents
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1. Introduction
|
|
|
|
|
|
|
|
|
|
1.1 Overview of application writing
|
|
|
|
|
1.2 What does the phpGroupWare API provide?
|
|
|
|
|
|
|
|
|
|
2. Guidelines
|
|
|
|
|
|
|
|
|
|
2.1 Requirements
|
|
|
|
|
2.2 Writing/porting your application
|
|
|
|
|
2.2.1 Include files
|
|
|
|
|
|
|
|
|
|
3. Installing your application
|
|
|
|
|
|
|
|
|
|
3.1 Overview
|
|
|
|
|
3.2 Automatic features
|
|
|
|
|
3.3 Adding files, directories and icons.
|
|
|
|
|
3.4 Making phpGroupWare aware of your application
|
2000-09-26 17:56:24 +02:00
|
|
|
|
3.5 Hooking into Administration page
|
|
|
|
|
3.5.1 section_start
|
|
|
|
|
3.5.2 section_end
|
|
|
|
|
3.6 Hooking into Preferences page
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
2000-09-26 17:56:24 +02:00
|
|
|
|
4. Infrastructure
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
|
|
|
|
4.1 Overview
|
|
|
|
|
4.2 Directory tree
|
2000-08-31 08:05:46 +02:00
|
|
|
|
4.3 Translations
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
|
|
|
|
5. The API
|
|
|
|
|
|
|
|
|
|
5.1 Introduction
|
|
|
|
|
5.2 Basic functions
|
|
|
|
|
5.2.1 $phpgw->link
|
|
|
|
|
5.3 Application Functions
|
2000-09-29 07:24:18 +02:00
|
|
|
|
5.3.1 $phpgw->common->phpgw_header
|
|
|
|
|
5.3.2 $phpgw->common->phpgw_footer
|
|
|
|
|
5.3.3 $phpgw->common->appsession
|
2000-08-18 05:24:22 +02:00
|
|
|
|
5.4 File functions
|
|
|
|
|
5.4.1 $phpgw->vfs->read_file
|
|
|
|
|
5.4.2 $phpgw->vfs->write_file
|
|
|
|
|
5.4.3 $phpgw->vfs->read_userfile
|
|
|
|
|
5.4.4 $phpgw->vfs->write_userfile
|
|
|
|
|
5.4.5 $phpgw->vfs->list_userfiles
|
|
|
|
|
5.5 Email/NNTP Functions
|
|
|
|
|
5.5.1 $phpgw->send->msg
|
|
|
|
|
|
|
|
|
|
6. Configuration Variables
|
|
|
|
|
|
|
|
|
|
6.1 Introduction
|
|
|
|
|
6.2 User information
|
|
|
|
|
6.3 Group information
|
|
|
|
|
6.4 Server information
|
|
|
|
|
6.5 Database information
|
|
|
|
|
6.6 Mail information
|
|
|
|
|
6.7 NNTP information
|
|
|
|
|
6.8 Application information
|
|
|
|
|
|
|
|
|
|
7. Using Language Support
|
|
|
|
|
|
|
|
|
|
7.1 Overview
|
|
|
|
|
7.2 How to use lang support
|
2000-09-26 17:56:24 +02:00
|
|
|
|
7.2.1 The lang function
|
|
|
|
|
7.2.2 Adding translation data
|
|
|
|
|
7.2.2.1 The lang table
|
|
|
|
|
7.2.2.2 lang.sql
|
|
|
|
|
7.3 Common return codes
|
2000-08-18 05:24:22 +02:00
|
|
|
|
8. Using Templates
|
2000-09-29 07:24:18 +02:00
|
|
|
|
|
2000-08-18 05:24:22 +02:00
|
|
|
|
8.1 Overview
|
|
|
|
|
8.2 How to use templates
|
|
|
|
|
|
|
|
|
|
9. About this document
|
|
|
|
|
|
|
|
|
|
9.1 New versions
|
|
|
|
|
9.2 Comments
|
|
|
|
|
9.3 History
|
|
|
|
|
9.4 Copyrights and Trademarks
|
2000-09-26 17:56:24 +02:00
|
|
|
|
9.5 Acknowledgments and Thanks
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
______________________________________________________________________
|
|
|
|
|
|
|
|
|
|
11.. IInnttrroodduuccttiioonn
|
|
|
|
|
|
|
|
|
|
phpGroupWare is a web based groupware application framework (API), for
|
|
|
|
|
writing applications. Integrated applications such as email, calendar,
|
2000-08-31 08:05:46 +02:00
|
|
|
|
todo list, address book, and file manager are included.
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
|
|
|
|
11..11.. OOvveerrvviieeww ooff aapppplliiccaattiioonn wwrriittiinngg
|
|
|
|
|
|
|
|
|
|
We have attempted to make writing application for phpGroupWare as
|
|
|
|
|
painless as possible. We hope any pain and suffering is cause by
|
|
|
|
|
making your application work, but not dealing with phpGroupWare
|
|
|
|
|
itself.
|
|
|
|
|
|
|
|
|
|
11..22.. WWhhaatt ddooeess tthhee pphhppGGrroouuppWWaarree AAPPII pprroovviiddee??
|
|
|
|
|
|
|
|
|
|
The phpGroupWare API handles session management, user/group
|
|
|
|
|
management, has support for multiple databases, using the PHPLIB
|
|
|
|
|
database abstraction method, we support templates using the PHPLIB
|
|
|
|
|
Templates class, a file system interface, and even a network i/o
|
|
|
|
|
interface.
|
2000-09-26 17:56:24 +02:00
|
|
|
|
On top of these standard functions, phpGroupWare provides several
|
2000-08-18 05:24:22 +02:00
|
|
|
|
functions to give you the information you need about the users
|
2000-09-26 17:56:24 +02:00
|
|
|
|
environment, and to properly plug into phpGroupWare.
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
|
|
|
|
22.. GGuuiiddeelliinneess
|
|
|
|
|
|
|
|
|
|
22..11.. RReeqquuiirreemmeennttss
|
|
|
|
|
|
|
|
|
|
These guidelines must be followed for any application that wants
|
2000-08-31 08:05:46 +02:00
|
|
|
|
considered for inclusion into phpGroupWare deluxe.
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
|
|
|
|
It must run on PHP3 and PHP4.
|
|
|
|
|
SQL statements must be compatible with both MySQL and PostgreSQL.
|
|
|
|
|
It must use our default header.inc.php include.
|
|
|
|
|
It must use our $phpgw_link($url) for all links (this is for session
|
|
|
|
|
support).
|
2000-09-10 22:39:56 +02:00
|
|
|
|
It must use "post" for forms.
|
2000-08-18 05:24:22 +02:00
|
|
|
|
It must respect phpGW group rights and phpGW user permissions.
|
|
|
|
|
It must use our directory structure, template support and lang (multi-
|
|
|
|
|
language) support.
|
|
|
|
|
Where possible it should run on both Unix and NT platforms.
|
|
|
|
|
|
2000-08-31 08:05:46 +02:00
|
|
|
|
For applications that do not meet these requirements, they can be
|
2000-09-26 17:56:24 +02:00
|
|
|
|
available to users via the phpGroupWare Apps project, or whatever
|
|
|
|
|
means the developers decide.
|
2000-08-18 05:24:22 +02:00
|
|
|
|
If you need help converting your application to templates and our lang
|
|
|
|
|
support, we will try to connect you with someone to help.
|
|
|
|
|
|
|
|
|
|
|
2000-09-26 17:56:24 +02:00
|
|
|
|
|
2000-09-29 07:24:18 +02:00
|
|
|
|
22..22.. WWrriittiinngg//ppoorrttiinngg yyoouurr aapppplliiccaattiioonn
|
2000-09-26 17:56:24 +02:00
|
|
|
|
|
2000-08-18 05:24:22 +02:00
|
|
|
|
22..22..11.. IInncclluuddee ffiilleess
|
|
|
|
|
|
|
|
|
|
Each PHP page you write will need to include the header.inc.php along
|
|
|
|
|
with a few variables.
|
|
|
|
|
This is done by putting this at the top of each PHP page.
|
|
|
|
|
|
|
|
|
|
______________________________________________________________________
|
|
|
|
|
<?php
|
2000-09-10 22:39:56 +02:00
|
|
|
|
$phpgw_info["flags"]["currentapp"] = "appname";
|
2000-08-18 05:24:22 +02:00
|
|
|
|
include("../header.inc.php");
|
|
|
|
|
?>
|
|
|
|
|
______________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Of course change application name to fit.
|
2000-08-31 08:05:46 +02:00
|
|
|
|
This include will provide the following things:
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
2000-08-31 08:05:46 +02:00
|
|
|
|
+o The phpgwAPI - The phpGroupWare API will be loaded.
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
2000-08-31 08:05:46 +02:00
|
|
|
|
+o The phpGW navbar will be loaded (by default, but can be disabled
|
|
|
|
|
until a later point.
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
2000-08-31 08:05:46 +02:00
|
|
|
|
+o appname/inc/functions.inc.php - This file is loaded just after the
|
2000-09-26 17:56:24 +02:00
|
|
|
|
phpgwAPI and before any HTML code is generated. This file should
|
2000-08-31 08:05:46 +02:00
|
|
|
|
include all your application specific functions.. You are welcome
|
|
|
|
|
to include any additional files you need from within this file.
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
2000-08-31 08:05:46 +02:00
|
|
|
|
+o appname/inc/header.inc.php - This file is loaded just after the
|
|
|
|
|
system header/navbar, and allows developers to use it for whatever
|
|
|
|
|
they need to load.
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
2000-08-31 08:05:46 +02:00
|
|
|
|
+o appname/inc/footer.inc.php - This file is loaded just before the
|
|
|
|
|
system footer, allowing developers to close connections and
|
2000-09-26 17:56:24 +02:00
|
|
|
|
whatever else they need.
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
2000-08-31 08:05:46 +02:00
|
|
|
|
+o The phpGW footer will be loaded, which closes several connections.
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33.. IInnssttaalllliinngg yyoouurr aapppplliiccaattiioonn
|
|
|
|
|
|
|
|
|
|
33..11.. OOvveerrvviieeww
|
|
|
|
|
|
|
|
|
|
It is fairly simple to add and delete applications to/from
|
|
|
|
|
phpGroupWare.
|
|
|
|
|
|
|
|
|
|
33..22.. AAuuttoommaattiicc ffeeaattuurreess
|
|
|
|
|
|
|
|
|
|
To make things easy for developers we go ahead and load the following
|
|
|
|
|
files.
|
|
|
|
|
|
2000-08-31 08:05:46 +02:00
|
|
|
|
+o appname/inc/functions.inc.php - This file should include all your
|
2000-08-18 05:24:22 +02:00
|
|
|
|
application specific functions.
|
|
|
|
|
|
2000-09-29 07:24:18 +02:00
|
|
|
|
+o appname/inc/header.inc.php - This file is loaded by
|
|
|
|
|
$phpgw->common->header just after the system header/navbar, and
|
|
|
|
|
allows developers to use it for whatever they need to load.
|
|
|
|
|
|
|
|
|
|
+o appname/inc/footer.inc.php - This file is loaded by
|
|
|
|
|
$phpgw->common->footer just before the system footer, allowing
|
|
|
|
|
developers to close connections and whatever else they need.
|
|
|
|
|
|
|
|
|
|
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33..33.. AAddddiinngg ffiilleess,, ddiirreeccttoorriieess aanndd iiccoonnss..
|
|
|
|
|
|
|
|
|
|
You will need to create the following directories for your code
|
2000-08-31 08:05:46 +02:00
|
|
|
|
(replace 'appname' with your application name)
|
|
|
|
|
|
|
|
|
|
`-- appname
|
|
|
|
|
`-- images
|
2000-08-18 05:24:22 +02:00
|
|
|
|
| `-- navbar.gif
|
|
|
|
|
`-- inc
|
2000-08-31 08:05:46 +02:00
|
|
|
|
| |-- functions.inc.php
|
2000-08-18 05:24:22 +02:00
|
|
|
|
| |-- header.inc.php
|
2000-09-26 17:56:24 +02:00
|
|
|
|
| |-- footer.inc.php
|
|
|
|
|
| |-- preferences.inc.php
|
|
|
|
|
| `-- admin.inc.php
|
2000-08-31 08:05:46 +02:00
|
|
|
|
`-- templates
|
2000-08-18 05:24:22 +02:00
|
|
|
|
`-- default
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33..44.. MMaakkiinngg pphhppGGrroouuppWWaarree aawwaarree ooff yyoouurr aapppplliiccaattiioonn
|
|
|
|
|
|
|
|
|
|
To make the application aware of your application, add your
|
2000-08-31 08:05:46 +02:00
|
|
|
|
application details to the applications table. This can be done via
|
2000-09-26 17:56:24 +02:00
|
|
|
|
the GUI administration screen, or via a SQL script.
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
2000-08-31 08:05:46 +02:00
|
|
|
|
insert into applications (app_name, app_title, app_enabled) values ('appname', 'The App name', 1);
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2000-09-26 17:56:24 +02:00
|
|
|
|
33..55.. HHooookkiinngg iinnttoo AAddmmiinniissttrraattiioonn ppaaggee
|
|
|
|
|
|
|
|
|
|
When a user goes to the Administration page, it stats
|
|
|
|
|
appname/inc/admin.inc.php for each application that is enabled, in
|
|
|
|
|
alphabetical order of application title. If the file exists, it is
|
|
|
|
|
include()d in the hopes it will display a selection of links to
|
|
|
|
|
configure that application.
|
|
|
|
|
|
|
|
|
|
Simple Example:
|
|
|
|
|
|
|
|
|
|
______________________________________________________________________
|
|
|
|
|
<?php
|
|
|
|
|
$img = "/" . $appname . "/images/navbar.gif";
|
|
|
|
|
section_start("My Application",$img);
|
|
|
|
|
echo "<a HREF=\"" . $phpgw->link("myAdminPage.php") . "\">";
|
|
|
|
|
echo lang("Change myApp settings") . "</a>";
|
|
|
|
|
section_end();
|
|
|
|
|
?>
|
|
|
|
|
______________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Look at headlines/inc/admin.inc.php and admin/inc/admin.inc.php for
|
|
|
|
|
more examples.
|
|
|
|
|
|
|
|
|
|
Things to note:
|
|
|
|
|
|
|
|
|
|
+o Links are relative to the admin/index.php file, not your
|
|
|
|
|
application's base directory. (so use $appname in your link()
|
|
|
|
|
calls)
|
|
|
|
|
|
|
|
|
|
+o The file is brought in with include() so be careful to not pollute
|
|
|
|
|
the name-space too much
|
|
|
|
|
|
|
|
|
|
The standard $phpgw and $phpgw_info variables are in-scope, as is
|
|
|
|
|
$appname which corresponds to the application name in the path.
|
|
|
|
|
|
|
|
|
|
There are 2 functions to coordinate the display of each application's
|
|
|
|
|
links, section_start() and section_end()
|
|
|
|
|
|
|
|
|
|
33..55..11.. sseeccttiioonn__ssttaarrtt
|
|
|
|
|
|
|
|
|
|
section_start($title,$icon_url) starts the section for your
|
|
|
|
|
application. $title is passed through lang() for you. $icon_url should
|
|
|
|
|
be page-relative to admin/index.php or an absolute URL.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33..55..22.. sseeccttiioonn__eenndd
|
|
|
|
|
|
|
|
|
|
section_end() closes the section that was started with
|
|
|
|
|
section_start().
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33..66.. HHooookkiinngg iinnttoo PPrreeffeerreenncceess ppaaggee
|
|
|
|
|
|
|
|
|
|
The mechanism to hook into the preferences page is identical to the
|
|
|
|
|
one used to hook into the administration page, however it looks for
|
|
|
|
|
appname/inc/preferences.inc.php instead of appname/inc/admin.inc.php.
|
|
|
|
|
The same functions and variables are defined.
|
|
|
|
|
|
|
|
|
|
44.. IInnffrraassttrruuccttuurree
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
|
|
|
|
44..11.. OOvveerrvviieeww
|
|
|
|
|
|
|
|
|
|
phpGroupWare attempts to provide developers with a sound directory
|
|
|
|
|
structure to work from.
|
|
|
|
|
The directory layout may seem complex at first, but after some use,
|
2000-09-26 17:56:24 +02:00
|
|
|
|
you will see that it is designed to accommodate a large number of
|
2000-08-18 05:24:22 +02:00
|
|
|
|
applications and functions.
|
|
|
|
|
|
|
|
|
|
44..22.. DDiirreeccttoorryy ttrreeee
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2000-08-31 08:05:46 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.-- addressbook
|
2000-08-31 08:05:46 +02:00
|
|
|
|
| `-- images
|
|
|
|
|
| | `-- navbar.gif
|
|
|
|
|
| `-- inc
|
|
|
|
|
| | |-- functions.inc.php
|
|
|
|
|
| | |-- header.inc.php
|
|
|
|
|
| | `-- footer.inc.php
|
|
|
|
|
| `-- templates
|
|
|
|
|
| `-- default
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|-- admin
|
2000-08-31 08:05:46 +02:00
|
|
|
|
| `-- images
|
|
|
|
|
| | `-- navbar.gif
|
|
|
|
|
| `-- inc
|
|
|
|
|
| | |-- functions.inc.php
|
|
|
|
|
| | |-- header.inc.php
|
2000-09-26 17:56:24 +02:00
|
|
|
|
| | |-- footer.inc.php
|
|
|
|
|
| | `-- admin.inc.php
|
2000-08-31 08:05:46 +02:00
|
|
|
|
| `-- templates
|
|
|
|
|
| `-- default
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|-- calendar
|
2000-08-31 08:05:46 +02:00
|
|
|
|
| `-- images
|
|
|
|
|
| | `-- navbar.gif
|
|
|
|
|
| `-- inc
|
|
|
|
|
| | |-- functions.inc.php
|
|
|
|
|
| | |-- header.inc.php
|
|
|
|
|
| | `-- footer.inc.php
|
|
|
|
|
| `-- templates
|
|
|
|
|
| `-- default
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|-- cron
|
|
|
|
|
|-- doc
|
|
|
|
|
|-- email
|
2000-08-31 08:05:46 +02:00
|
|
|
|
| `-- images
|
|
|
|
|
| | `-- navbar.gif
|
|
|
|
|
| `-- inc
|
|
|
|
|
| | |-- functions.inc.php
|
|
|
|
|
| | |-- header.inc.php
|
2000-09-26 17:56:24 +02:00
|
|
|
|
| | |-- footer.inc.php
|
|
|
|
|
| | |-- preferences.inc.php
|
|
|
|
|
| | `-- admin.inc.php
|
2000-08-31 08:05:46 +02:00
|
|
|
|
| `-- templates
|
|
|
|
|
| `-- default
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|-- filemanager
|
|
|
|
|
|-- files
|
|
|
|
|
| |-- groups
|
|
|
|
|
| `-- users
|
|
|
|
|
|-- inc
|
2000-08-31 08:05:46 +02:00
|
|
|
|
| |-- phpgwapi
|
2000-09-26 17:56:24 +02:00
|
|
|
|
| | |-- phpgw.inc.php
|
|
|
|
|
| | |-- phpgw_info.inc.php
|
|
|
|
|
| | |-- phpgw_common.inc.php
|
2000-08-31 08:05:46 +02:00
|
|
|
|
| | `-- etc...
|
2000-08-18 05:24:22 +02:00
|
|
|
|
| `-- templates
|
|
|
|
|
| |-- default
|
|
|
|
|
| | |-- addressbook
|
|
|
|
|
| | |-- admin
|
|
|
|
|
| | |-- calendar
|
|
|
|
|
| | |-- common
|
|
|
|
|
| | |-- email
|
|
|
|
|
| | |-- filemanager
|
|
|
|
|
| | |-- headlines
|
|
|
|
|
| | |-- preferences
|
|
|
|
|
| | |-- todo
|
|
|
|
|
| | `-- tts
|
|
|
|
|
| `-- icons
|
|
|
|
|
| |-- email
|
|
|
|
|
| |-- calendar
|
|
|
|
|
| `-- tts
|
|
|
|
|
|-- preferences
|
2000-08-31 08:05:46 +02:00
|
|
|
|
| `-- images
|
|
|
|
|
| | `-- navbar.gif
|
|
|
|
|
| `-- inc
|
|
|
|
|
| | |-- functions.inc.php
|
|
|
|
|
| | |-- header.inc.php
|
2000-09-26 17:56:24 +02:00
|
|
|
|
| | |-- footer.inc.php
|
|
|
|
|
| | `-- preferences.inc.php
|
2000-08-31 08:05:46 +02:00
|
|
|
|
| `-- templates
|
|
|
|
|
| `-- default
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|-- themes
|
2000-08-31 08:05:46 +02:00
|
|
|
|
`-- todo
|
|
|
|
|
`-- images
|
|
|
|
|
| `-- navbar.gif
|
|
|
|
|
`-- inc
|
|
|
|
|
| |-- functions.inc.php
|
|
|
|
|
| |-- header.inc.php
|
|
|
|
|
| `-- footer.inc.php
|
|
|
|
|
`-- templates
|
|
|
|
|
`-- default
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2000-08-31 08:05:46 +02:00
|
|
|
|
44..33.. TTrraannssllaattiioonnss
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
2000-08-31 08:05:46 +02:00
|
|
|
|
The translations are now being done thru the database, and will be
|
2000-09-10 22:39:56 +02:00
|
|
|
|
configurable to use other mechanisms.
|
|
|
|
|
We are completing a program called Transy, which will provide
|
|
|
|
|
developers/translators a nice GUI for building and updating
|
|
|
|
|
translations.
|
2000-09-26 17:56:24 +02:00
|
|
|
|
In the mean time you will need to create a SQL script yourself and
|
2000-09-10 22:39:56 +02:00
|
|
|
|
name it lang.sql. You can copy the one in doc/lang.sql and use it as a
|
|
|
|
|
template.
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
|
|
|
|
55.. TThhee AAPPII
|
|
|
|
|
|
|
|
|
|
55..11.. IInnttrroodduuccttiioonn
|
|
|
|
|
|
|
|
|
|
phpGroupWare attempts to provide developers with a useful API to
|
|
|
|
|
handle common tasks.
|
|
|
|
|
To do this we have created a multi-dimensional class $phpgw->.
|
|
|
|
|
This allows for terrific code organization, and help developers easily
|
|
|
|
|
identify the file that the function is in. All the files that are
|
2000-09-26 17:56:24 +02:00
|
|
|
|
part of this class are in the inc/core directory and are named to
|
2000-08-18 05:24:22 +02:00
|
|
|
|
match the sub-class.
|
2000-08-31 08:05:46 +02:00
|
|
|
|
Example: $phpgw->send->msg() is in the inc/phpgwapi/phpgw_send.inc.php
|
2000-08-18 05:24:22 +02:00
|
|
|
|
file.
|
|
|
|
|
|
|
|
|
|
55..22.. BBaassiicc ffuunnccttiioonnss
|
|
|
|
|
|
|
|
|
|
55..22..11.. $$pphhppggww-->>lliinnkk
|
|
|
|
|
|
|
|
|
|
$phpgw->link($url)
|
|
|
|
|
Add support for session management. ALL links must use this, that
|
|
|
|
|
includes href's form actions and header location's.
|
|
|
|
|
If you are just doing a form action back to the same page, you can use
|
2000-09-26 17:56:24 +02:00
|
|
|
|
it without any parameters.
|
2000-08-18 05:24:22 +02:00
|
|
|
|
This function is right at the core of the class because it is used so
|
|
|
|
|
often, we wanted to save developers a few keystrokes. Example:
|
|
|
|
|
|
2000-09-26 17:56:24 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2000-08-18 05:24:22 +02:00
|
|
|
|
______________________________________________________________________
|
|
|
|
|
<form name=copy method=post action="<?php echo $phpgw->link();?>">
|
2000-09-26 17:56:24 +02:00
|
|
|
|
/* If session management is done via passing url parameters */
|
2000-08-18 05:24:22 +02:00
|
|
|
|
/* The the result would be */
|
|
|
|
|
/* <form name=copy method=post action="somepage.php?sessionid=87687693276?kp3=kjh98u80"> */
|
|
|
|
|
______________________________________________________________________
|
|
|
|
|
|
2000-08-31 08:05:46 +02:00
|
|
|
|
|
2000-09-26 17:56:24 +02:00
|
|
|
|
|
2000-08-18 05:24:22 +02:00
|
|
|
|
55..33.. AApppplliiccaattiioonn FFuunnccttiioonnss
|
|
|
|
|
|
|
|
|
|
|
2000-09-29 07:24:18 +02:00
|
|
|
|
55..33..11.. $$pphhppggww-->>ccoommmmoonn-->>pphhppggww__hheeaaddeerr
|
|
|
|
|
|
|
|
|
|
$phpgw->phpgw_header()
|
|
|
|
|
Print out the start of the HTML page, including the navigation bar and
|
|
|
|
|
includes appname/inc/header.php
|
|
|
|
|
|
|
|
|
|
55..33..22.. $$pphhppggww-->>ccoommmmoonn-->>pphhppggww__ffooootteerr
|
|
|
|
|
|
|
|
|
|
$phpgw->phpgw_footer()
|
|
|
|
|
Prints the system footer, and includes appname/inc/footer.php
|
|
|
|
|
|
|
|
|
|
55..33..33.. $$pphhppggww-->>ccoommmmoonn-->>aappppsseessssiioonn
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
|
|
|
|
$phpgw->common->appsession($data)
|
|
|
|
|
Store important information session information that your application
|
|
|
|
|
needs.
|
|
|
|
|
$phpgw->appsession will return the value of your session data is you
|
2000-09-26 17:56:24 +02:00
|
|
|
|
leave the parameter empty [i.e. $phpgw->appsession("")], otherwise it
|
2000-08-18 05:24:22 +02:00
|
|
|
|
will store whatever data you send to it.
|
|
|
|
|
You can also store a comma delimited string and use explode() to turn
|
2000-09-26 17:56:24 +02:00
|
|
|
|
it back into an array when you receive the value back.
|
2000-08-18 05:24:22 +02:00
|
|
|
|
Example:
|
|
|
|
|
|
|
|
|
|
______________________________________________________________________
|
|
|
|
|
$phpgw->common->appsession("/path/to/something");
|
|
|
|
|
echo "Dir: " . $phpgw->common->appsession();
|
|
|
|
|
______________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55..44.. FFiillee ffuunnccttiioonnss
|
|
|
|
|
|
|
|
|
|
55..44..11.. $$pphhppggww-->>vvffss-->>rreeaadd__ffiillee
|
|
|
|
|
|
|
|
|
|
$phpgw->vfs->read_file($file)
|
|
|
|
|
Returns the data from $file.
|
|
|
|
|
You must send the complete path to the file.
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
|
|
______________________________________________________________________
|
|
|
|
|
$data = $phpgw->vfs->read_file("/some/dir/to/file.txt");
|
|
|
|
|
______________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55..44..22.. $$pphhppggww-->>vvffss-->>wwrriittee__ffiillee
|
|
|
|
|
|
|
|
|
|
$phpgw->vfs->write_file($file, $contents)
|
|
|
|
|
Write data to $file.
|
|
|
|
|
You must send the complete path to the file.
|
|
|
|
|
Example:
|
|
|
|
|
|
2000-09-29 07:24:18 +02:00
|
|
|
|
|
2000-08-18 05:24:22 +02:00
|
|
|
|
______________________________________________________________________
|
|
|
|
|
$data = $phpgw->vfs->write_file("/some/dir/to/file.txt");
|
|
|
|
|
______________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55..44..33.. $$pphhppggww-->>vvffss-->>rreeaadd__uusseerrffiillee
|
|
|
|
|
|
|
|
|
|
$phpgw->vfs->read_userfile($file)
|
|
|
|
|
Returns the data from $file, which resides in the users private dir.
|
|
|
|
|
Example:
|
2000-09-29 07:24:18 +02:00
|
|
|
|
|
2000-08-18 05:24:22 +02:00
|
|
|
|
______________________________________________________________________
|
|
|
|
|
$data = $phpgw->vfs->read_userfile("file.txt");
|
|
|
|
|
______________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55..44..44.. $$pphhppggww-->>vvffss-->>wwrriittee__uusseerrffiillee
|
|
|
|
|
|
|
|
|
|
$phpgw->write_userfile($file, $contents)
|
|
|
|
|
Writes data to $file, which resides in the users private dir.
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
|
|
______________________________________________________________________
|
|
|
|
|
$data = $phpgw->vfs->write_userfile("file.txt");
|
|
|
|
|
______________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55..44..55.. $$pphhppggww-->>vvffss-->>lliisstt__uusseerrffiilleess
|
|
|
|
|
|
|
|
|
|
$phpgw->vfs->list_userfiles()
|
|
|
|
|
Returns an array which has the list of files in the users private dir.
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
|
|
______________________________________________________________________
|
|
|
|
|
$filelist = array();
|
|
|
|
|
$filelist = $phpgw->vfs->list_userfiles();
|
|
|
|
|
______________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55..55.. EEmmaaiill//NNNNTTPP FFuunnccttiioonnss
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55..55..11.. $$pphhppggww-->>sseenndd-->>mmssgg
|
|
|
|
|
|
|
|
|
|
$phpgw->msg->send($service, $to, $subject, $body, $msgtype, $cc, $bcc)
|
|
|
|
|
Send a message via email or NNTP and returns any error codes.
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
|
|
______________________________________________________________________
|
|
|
|
|
$to = "someuser@domain.com";
|
|
|
|
|
$subject = "Hello buddy";
|
|
|
|
|
$body = "Give me a call\n Been wondering what your up to.";
|
|
|
|
|
$errors = $phpgw->msg->send("email", $to, $subject, $body);
|
|
|
|
|
______________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2000-09-29 07:24:18 +02:00
|
|
|
|
|
2000-08-18 05:24:22 +02:00
|
|
|
|
66.. CCoonnffiigguurraattiioonn VVaarriiaabblleess
|
|
|
|
|
|
|
|
|
|
66..11.. IInnttrroodduuccttiioonn
|
|
|
|
|
|
|
|
|
|
phpGroupWare attempt to provide developers with as much information
|
|
|
|
|
about the user, group, server, and application configuration as
|
|
|
|
|
possible.
|
|
|
|
|
To do this we provide a multi-dimensional array called
|
|
|
|
|
'$phpgw_info[]', which includes all the information about your
|
|
|
|
|
environment.
|
|
|
|
|
Due to the multi-dimensional array approach. getting these values is
|
|
|
|
|
easy.
|
|
|
|
|
Here are some examples:
|
|
|
|
|
|
|
|
|
|
______________________________________________________________________
|
|
|
|
|
<?php
|
|
|
|
|
// To do a hello username
|
|
|
|
|
echo "Hello " . $phpgw_info["user"]["fullname"];
|
|
|
|
|
//If username first name is John and last name is Doe, prints: 'Hello John Doe'
|
|
|
|
|
?>
|
|
|
|
|
<?php
|
|
|
|
|
// To find out the location of the imap server
|
|
|
|
|
echo "IMAP Server is named: " . $phpgw_info["server"]["imap_server"];
|
|
|
|
|
//If imap is running on localhost, prints: 'IMAP Server is named: localhost'
|
|
|
|
|
?>
|
|
|
|
|
|
|
|
|
|
______________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
66..22.. UUsseerr iinnffoorrmmaattiioonn
|
|
|
|
|
|
|
|
|
|
$phpgw_info["user"]["userid"] = The user ID.
|
|
|
|
|
$phpgw_info["user"]["sessionid"] = The session ID
|
|
|
|
|
$phpgw_info["user"]["theme"] = Selected theme
|
|
|
|
|
$phpgw_info["user"]["private_dir"] = Users private dir. Use
|
2000-09-26 17:56:24 +02:00
|
|
|
|
phpGroupWare core functions for access to the files.
|
2000-08-18 05:24:22 +02:00
|
|
|
|
$phpgw_info["user"]["firstname"] = Users first name
|
|
|
|
|
$phpgw_info["user"]["lastname"] = Users last name
|
|
|
|
|
$phpgw_info["user"]["fullname"] = Users Full Name
|
|
|
|
|
$phpgw_info["user"]["groups"] = Groups the user is a member of
|
|
|
|
|
$phpgw_info["user"]["app_perms"] = If the user has access to the
|
|
|
|
|
current application
|
|
|
|
|
$phpgw_info["user"]["lastlogin"] = Last time the user logged in.
|
|
|
|
|
$phpgw_info["user"]["lastloginfrom"] = Where they logged in from the
|
|
|
|
|
last time.
|
|
|
|
|
$phpgw_info["user"]["lastpasswd_change"] = Last time they changed
|
|
|
|
|
their password.
|
|
|
|
|
$phpgw_info["user"]["passwd"] = Hashed password.
|
|
|
|
|
$phpgw_info["user"]["status"] = If the user is enabled.
|
|
|
|
|
$phpgw_info["user"]["logintime"] = Time they logged into their current
|
|
|
|
|
session.
|
|
|
|
|
$phpgw_info["user"]["session_dla"] = Last time they did anything in
|
|
|
|
|
their current session
|
|
|
|
|
$phpgw_info["user"]["session_ip"] = Current IP address
|
|
|
|
|
|
|
|
|
|
66..33.. GGrroouupp iinnffoorrmmaattiioonn
|
|
|
|
|
|
|
|
|
|
$phpgw_info["group"]["group_names"] = List of groups.
|
|
|
|
|
|
|
|
|
|
66..44.. SSeerrvveerr iinnffoorrmmaattiioonn
|
|
|
|
|
|
|
|
|
|
$phpgw_info["server"]["server_root"] = Main installation directory
|
|
|
|
|
$phpgw_info["server"]["include_root"] = Location of the 'inc'
|
|
|
|
|
directory.
|
|
|
|
|
$phpgw_info["server"]["temp_dir"] = Directory that can be used for
|
|
|
|
|
temporarily storing files
|
2000-09-29 07:24:18 +02:00
|
|
|
|
$phpgw_info["server"]["files_dir"] = Directory er and group files are
|
|
|
|
|
stored
|
2000-08-18 05:24:22 +02:00
|
|
|
|
$phpgw_info["server"]["common_include_dir"] = Location of the
|
|
|
|
|
core/shared include files.
|
|
|
|
|
$phpgw_info["server"]["template_dir"] = Active template files
|
|
|
|
|
directory. This is defaulted by the server, and changeable by the
|
|
|
|
|
user.
|
|
|
|
|
$phpgw_info["server"]["dir_separator"] = Allows compatibility with
|
|
|
|
|
WindowsNT directory format,
|
2000-09-29 07:24:18 +02:00
|
|
|
|
$phpgw_info["server"]["encrpytkey"] = Key used for encryption
|
|
|
|
|
functions
|
2000-08-18 05:24:22 +02:00
|
|
|
|
$phpgw_info["server"]["site_title"] = Site Title will show in the
|
|
|
|
|
title bar of each webpage.
|
|
|
|
|
$phpgw_info["server"]["webserver_url"] = URL to phpGroupWare
|
|
|
|
|
installation.
|
2000-09-29 07:24:18 +02:00
|
|
|
|
$phpgw_info["server"]["hostname"] = Name of the server phpGroupWare is
|
|
|
|
|
installed upon.
|
|
|
|
|
$phpgw_info["server"]["charset"] = default charset,
|
|
|
|
|
default:iso-8859-1
|
2000-08-18 05:24:22 +02:00
|
|
|
|
$phpgw_info["server"]["version"] = phpGroupWare version.
|
|
|
|
|
|
|
|
|
|
66..55.. DDaattaabbaassee iinnffoorrmmaattiioonn
|
|
|
|
|
|
|
|
|
|
It is unlikely you will need these, because $phpgw_info_db will
|
|
|
|
|
already be loaded as a database for you to use.
|
|
|
|
|
$phpgw_info["server"]["db_host"] = Address of the database server.
|
|
|
|
|
Usually this is set to localhost.
|
|
|
|
|
$phpgw_info["server"]["db_name"] = Database name.
|
|
|
|
|
$phpgw_info["server"]["db_user"] = User name.
|
|
|
|
|
$phpgw_info["server"]["db_pass"] = Password
|
|
|
|
|
$phpgw_info["server"]["db_type"] = Type of database. Currently MySQL
|
|
|
|
|
and PostgreSQL are supported.
|
|
|
|
|
|
|
|
|
|
66..66.. MMaaiill iinnffoorrmmaattiioonn
|
|
|
|
|
|
|
|
|
|
It is unlikely you will need these, because most email needs are
|
|
|
|
|
services thru core phpGroupWare functions.
|
|
|
|
|
$phpgw_info["server"]["mail_server"] = Address of the IMAP server.
|
|
|
|
|
Usually this is set to localhost.
|
|
|
|
|
$phpgw_info["server"]["mail_server_type"] = IMAP or POP3
|
|
|
|
|
$phpgw_info["server"]["imap_server_type"] = Cyrus or Uwash
|
|
|
|
|
$phpgw_info["server"]["imap_port"] = This is usually 143, and should
|
|
|
|
|
only be changed if there is a good reason.
|
|
|
|
|
$phpgw_info["server"]["mail_suffix] = This is the domain name, used to
|
|
|
|
|
add to email address
|
|
|
|
|
$phpgw_info["server"]["mail_login_type"] = This adds support for
|
2000-09-26 17:56:24 +02:00
|
|
|
|
VMailMgr. Generally this should be set to 'standard'.
|
2000-08-18 05:24:22 +02:00
|
|
|
|
$phpgw_info["server"]["smtp_server"] = Address of the SMTP server.
|
|
|
|
|
Usually this is set to localhost.
|
|
|
|
|
$phpgw_info["server"]["smtp_port"] = This is usually 25, and should
|
|
|
|
|
only be changed if there is a good reason.
|
|
|
|
|
|
|
|
|
|
66..77.. NNNNTTPP iinnffoorrmmaattiioonn
|
|
|
|
|
|
|
|
|
|
$phpgw_info["server"]["nntp_server"] = Address of the NNTP server.
|
|
|
|
|
$phpgw_info["server"]["nntp_port"] = This is usually XX, and should
|
|
|
|
|
only be changed if there is a good reason.
|
|
|
|
|
$phpgw_info["server"]["nntp_sender"] = Unknown
|
|
|
|
|
$phpgw_info["server"]["nntp_organization"] = Unknown
|
2000-09-26 17:56:24 +02:00
|
|
|
|
$phpgw_info["server"]["nntp_admin"] = Unknown
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
|
|
|
|
66..88.. AApppplliiccaattiioonn iinnffoorrmmaattiioonn
|
|
|
|
|
|
2000-09-26 17:56:24 +02:00
|
|
|
|
Each application has the following information available.
|
2000-08-18 05:24:22 +02:00
|
|
|
|
$phpgw_info["apps"]["appname"]["title"] = The title of the
|
|
|
|
|
application.
|
|
|
|
|
$phpgw_info["apps"]["appname"]["enabled"] = If the application is
|
|
|
|
|
enabled. True or False.
|
|
|
|
|
$phpgw_info["server"]["app_include_dir"] = Location of the current
|
|
|
|
|
application include files.
|
|
|
|
|
$phpgw_info["server"]["app_template_dir"] = Location of the current
|
|
|
|
|
application tpl files.
|
|
|
|
|
$phpgw_info["server"]["app_lang_dir"] = Location of the current lang
|
|
|
|
|
directory.
|
|
|
|
|
$phpgw_info["server"]["app_auth"] = If the server and current user
|
|
|
|
|
have access to current application
|
|
|
|
|
$phpgw_info["server"]["app_current"] = name of the current
|
|
|
|
|
application.
|
|
|
|
|
|
|
|
|
|
77.. UUssiinngg LLaanngguuaaggee SSuuppppoorrtt
|
|
|
|
|
|
|
|
|
|
77..11.. OOvveerrvviieeww
|
|
|
|
|
|
|
|
|
|
phpGroupWare is built using a multi-language support scheme. This
|
2000-09-26 17:56:24 +02:00
|
|
|
|
means the pages can be translated to other languages very easily.
|
|
|
|
|
Translations of text strings are stored in the phpGroupWare database,
|
|
|
|
|
and can be modified by the phpGroupWare administrator.
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
|
|
|
|
77..22.. HHooww ttoo uussee llaanngg ssuuppppoorrtt
|
|
|
|
|
|
2000-09-26 17:56:24 +02:00
|
|
|
|
The lang() function is your application's interface to phpGroupWare's
|
|
|
|
|
internationalization support.
|
|
|
|
|
|
|
|
|
|
While developing your application, just wrap all your text output with
|
|
|
|
|
calls to lang(), as in the following code:
|
|
|
|
|
|
|
|
|
|
______________________________________________________________________
|
|
|
|
|
$x = 42;
|
|
|
|
|
echo lang("The counter is %1",$x)."<br>";
|
|
|
|
|
______________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This will attempt to translate "The counter is %1", and return a
|
|
|
|
|
translated version based on the current application and language in
|
|
|
|
|
use. Note how the position that $x will end up is controlled by the
|
|
|
|
|
format string, nnoott by building up the string in your code. This allows
|
|
|
|
|
your application to be translated to languages where the actual number
|
|
|
|
|
is not placed at the end of the string.
|
|
|
|
|
|
|
|
|
|
When a translation is not found, the original text will be returned
|
|
|
|
|
with a * after the string. This makes it easy to develop your
|
|
|
|
|
application, then go back and add missing translations (identified by
|
|
|
|
|
the *) later.
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
2000-09-26 17:56:24 +02:00
|
|
|
|
Without a specific translation in the lang table, the above code will
|
|
|
|
|
print:
|
|
|
|
|
|
|
|
|
|
The counter is 42*<br>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
If the current user speaks Italian, they string returned may instead
|
|
|
|
|
be:
|
|
|
|
|
|
|
|
|
|
il contatore 42<br>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
77..22..11.. TThhee llaanngg ffuunnccttiioonn
|
|
|
|
|
|
|
|
|
|
|
2000-09-29 07:24:18 +02:00
|
|
|
|
|
2000-09-26 17:56:24 +02:00
|
|
|
|
lang($key, $m1="", $m2="", $m3="", $m4="", $m5="",
|
|
|
|
|
$m6="", $m7="", $m8="", $m9="", $m10="")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$$kkeeyy
|
|
|
|
|
is the string to translate and may contain replacement
|
|
|
|
|
directives of the form %n.
|
|
|
|
|
|
|
|
|
|
$$mm11
|
|
|
|
|
is the first replacement value or may be an array of replacement
|
|
|
|
|
values (in which case $m2 and above are ignored).
|
|
|
|
|
|
|
|
|
|
$$mm22 -- $$mm1100
|
|
|
|
|
the 2nd through 10th replacement values if $m1 is not an array.
|
|
|
|
|
|
|
|
|
|
The database is searched for rows with a lang.message_id that matches
|
|
|
|
|
$key. If a translation is not found, the original $key is used. The
|
|
|
|
|
translation engine then replaces all tokens of the form %N with the
|
|
|
|
|
Nth parameter (either $m1[N] or $mN).
|
|
|
|
|
|
|
|
|
|
77..22..22.. AAddddiinngg ttrraannssllaattiioonn ddaattaa
|
|
|
|
|
|
|
|
|
|
An application called TTrraannssyy is being developed to make this easier,
|
|
|
|
|
until then you can create the translation data manually.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
77..22..22..11.. TThhee llaanngg ttaabbllee
|
|
|
|
|
|
|
|
|
|
The translation class uses the lang table for all translations. We
|
|
|
|
|
are concerned with 4 of the columns to create a translation:
|
|
|
|
|
|
|
|
|
|
mmeessssaaggee__iidd
|
|
|
|
|
The key to identify the message (the $key passed to the lang()
|
|
|
|
|
function). This is written in English.
|
|
|
|
|
|
|
|
|
|
aapppp__nnaammee
|
|
|
|
|
The application the translation applies to, or common if it is
|
|
|
|
|
common across multiple applications.
|
|
|
|
|
|
|
|
|
|
llaanngg
|
|
|
|
|
The code for the language the translation is in.
|
|
|
|
|
|
|
|
|
|
ccoonntteenntt
|
|
|
|
|
The translated string.
|
|
|
|
|
|
|
|
|
|
77..22..22..22.. llaanngg..ssqqll
|
|
|
|
|
|
|
|
|
|
Currently all applications, and the core phpGroupWare source tree have
|
|
|
|
|
a lang.sql file. This is the place to add translation data. Just add
|
|
|
|
|
lines of the form:
|
|
|
|
|
|
|
|
|
|
______________________________________________________________________
|
|
|
|
|
REPLACE INTO lang (message_id, app_name, lang, content)
|
|
|
|
|
VALUES( 'account has been deleted','common','en','Account has been deleted');
|
2000-08-18 05:24:22 +02:00
|
|
|
|
______________________________________________________________________
|
2000-09-26 17:56:24 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
translating the content to reflect the message_id string in the lang
|
|
|
|
|
language. If the string is specific to your application, put your
|
|
|
|
|
application name in for app_name otherwise use the name common. The
|
|
|
|
|
message_id should be in lower case for a small increase in speed.
|
|
|
|
|
|
2000-09-29 07:24:18 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2000-09-26 17:56:24 +02:00
|
|
|
|
77..33.. CCoommmmoonn rreettuurrnn ccooddeess
|
|
|
|
|
|
|
|
|
|
If you browse through the phpGroupWare sources, you may notice a
|
|
|
|
|
pattern to the return codes used in the higher-level functions. The
|
|
|
|
|
codes used are partially documented in the doc/developers/CODES file.
|
|
|
|
|
|
|
|
|
|
Codes are used as a simple way to communicate common error and
|
|
|
|
|
progress conditions back to the user. They are mapped to a text string
|
|
|
|
|
through the check_code() function, which passes the strings through
|
|
|
|
|
lang() before returning.
|
|
|
|
|
|
|
|
|
|
For example, calling
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
|
|
|
|
______________________________________________________________________
|
2000-09-26 17:56:24 +02:00
|
|
|
|
echo check_code(13);
|
|
|
|
|
______________________________________________________________________
|
|
|
|
|
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
2000-09-26 17:56:24 +02:00
|
|
|
|
Would print
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
2000-09-26 17:56:24 +02:00
|
|
|
|
Your message has been sent
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
|
|
|
|
|
2000-09-26 17:56:24 +02:00
|
|
|
|
translated into the current language.
|
|
|
|
|
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
|
|
|
|
88.. UUssiinngg TTeemmppllaatteess
|
|
|
|
|
|
|
|
|
|
88..11.. OOvveerrvviieeww
|
|
|
|
|
|
|
|
|
|
phpGroupWare is built using a templates based design. This means the
|
|
|
|
|
display pages, stored in tpl files, can be translated to other
|
|
|
|
|
languages, made to look completely different.
|
|
|
|
|
|
|
|
|
|
88..22.. HHooww ttoo uussee tteemmppllaatteess
|
|
|
|
|
|
|
|
|
|
Some instructions on using templates
|
|
|
|
|
For Further info read the PHPLIBs documentation for their template
|
|
|
|
|
class.
|
|
|
|
|
|
|
|
|
|
99.. AAbboouutt tthhiiss ddooccuummeenntt
|
|
|
|
|
|
|
|
|
|
99..11.. NNeeww vveerrssiioonnss
|
|
|
|
|
|
|
|
|
|
The newest version of this document can be found on our website
|
|
|
|
|
<http://www.phpgroupware.org> as SGML source, as HTML and as TEXT.
|
|
|
|
|
|
|
|
|
|
99..22.. CCoommmmeennttss
|
|
|
|
|
|
|
|
|
|
Comments on this HOWTO should be directed to the phpGroupWare
|
|
|
|
|
developers mailing list phpgroupware-developers@lists.sourceforge.net
|
|
|
|
|
<mailto:phpgroupware-developers@lists.sourceforge.net>.
|
|
|
|
|
|
|
|
|
|
To subscribe, go to <http://sourceforge.net/mail/?group_id=7305>
|
|
|
|
|
|
|
|
|
|
99..33.. HHiissttoorryy
|
|
|
|
|
|
|
|
|
|
This document was written by Dan Kuykendall.
|
|
|
|
|
|
2000-09-29 07:24:18 +02:00
|
|
|
|
2000-09-25 documentation on lang(), codes, administration and
|
|
|
|
|
preferences extension added by Steve Brown.
|
|
|
|
|
|
2000-08-18 05:24:22 +02:00
|
|
|
|
99..44.. CCooppyyrriigghhttss aanndd TTrraaddeemmaarrkkss
|
|
|
|
|
|
|
|
|
|
Copyright (c) Dan Kuykendall. Permission is granted to copy,
|
|
|
|
|
distribute and/or modify this document under the terms of the GNU Free
|
|
|
|
|
Documentation License, Version 1.1 or any later version published by
|
|
|
|
|
the Free Software Foundation
|
|
|
|
|
|
|
|
|
|
A copy of the license is available at GNU Free Documentation License
|
|
|
|
|
<http://www.gnu.org/copyleft/fdl.txt>.
|
|
|
|
|
|
2000-09-26 17:56:24 +02:00
|
|
|
|
99..55.. AAcckknnoowwlleeddggmmeennttss aanndd TThhaannkkss
|
2000-08-18 05:24:22 +02:00
|
|
|
|
|
|
|
|
|
Thanks to Joesph Engo for starting phpGroupWare (at the time called
|
|
|
|
|
webdistro). Thanks to all the developers and users who contribute to
|
|
|
|
|
making phpGroupWare such a success.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2000-09-29 07:24:18 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|