mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-12-28 01:29:05 +01:00
263fdedd2a
places that were including the footer.inc.php to use the function. Re-arrange phpgw.inc.php to include optional classes after reading the DB config misc bugfixes.
1057 lines
31 KiB
Plaintext
1057 lines
31 KiB
Plaintext
phpGroupWare Application Development
|
||
Dan Kuykendall <dan@kuykendall.org>
|
||
v0.9 29 September 2000
|
||
|
||
This document explains phpGroupWare's infrastructure and API, along
|
||
with what is required to integrate applications into it.
|
||
______________________________________________________________________
|
||
|
||
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
|
||
3.5 Hooking into Administration page
|
||
3.5.1 section_start
|
||
3.5.2 section_end
|
||
3.6 Hooking into Preferences page
|
||
|
||
4. Infrastructure
|
||
|
||
4.1 Overview
|
||
4.2 Directory tree
|
||
4.3 Translations
|
||
|
||
5. The API
|
||
|
||
5.1 Introduction
|
||
5.2 Basic functions
|
||
5.2.1 $phpgw->link
|
||
5.3 Application Functions
|
||
5.3.1 $phpgw->common->phpgw_header
|
||
5.3.2 $phpgw->common->phpgw_footer
|
||
5.3.3 $phpgw->common->appsession
|
||
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
|
||
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
|
||
8. Using Templates
|
||
|
||
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
|
||
9.5 Acknowledgments and Thanks
|
||
|
||
|
||
______________________________________________________________________
|
||
|
||
11.. IInnttrroodduuccttiioonn
|
||
|
||
phpGroupWare is a web based groupware application framework (API), for
|
||
writing applications. Integrated applications such as email, calendar,
|
||
todo list, address book, and file manager are included.
|
||
|
||
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.
|
||
On top of these standard functions, phpGroupWare provides several
|
||
functions to give you the information you need about the users
|
||
environment, and to properly plug into phpGroupWare.
|
||
|
||
22.. GGuuiiddeelliinneess
|
||
|
||
22..11.. RReeqquuiirreemmeennttss
|
||
|
||
These guidelines must be followed for any application that wants
|
||
considered for inclusion into phpGroupWare deluxe.
|
||
|
||
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).
|
||
It must use "post" for forms.
|
||
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.
|
||
|
||
For applications that do not meet these requirements, they can be
|
||
available to users via the phpGroupWare Apps project, or whatever
|
||
means the developers decide.
|
||
If you need help converting your application to templates and our lang
|
||
support, we will try to connect you with someone to help.
|
||
|
||
|
||
|
||
22..22.. WWrriittiinngg//ppoorrttiinngg yyoouurr aapppplliiccaattiioonn
|
||
|
||
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
|
||
$phpgw_info["flags"]["currentapp"] = "appname";
|
||
include("../header.inc.php");
|
||
?>
|
||
______________________________________________________________________
|
||
|
||
|
||
Of course change application name to fit.
|
||
This include will provide the following things:
|
||
|
||
+o The phpgwAPI - The phpGroupWare API will be loaded.
|
||
|
||
+o The phpGW navbar will be loaded (by default, but can be disabled
|
||
until a later point.
|
||
|
||
+o appname/inc/functions.inc.php - This file is loaded just after the
|
||
phpgwAPI and before any HTML code is generated. This file should
|
||
include all your application specific functions.. You are welcome
|
||
to include any additional files you need from within this file.
|
||
|
||
+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.
|
||
|
||
+o appname/inc/footer.inc.php - This file is loaded just before the
|
||
system footer, allowing developers to close connections and
|
||
whatever else they need.
|
||
|
||
+o The phpGW footer will be loaded, which closes several connections.
|
||
|
||
|
||
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.
|
||
|
||
+o appname/inc/functions.inc.php - This file should include all your
|
||
application specific functions.
|
||
|
||
+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.
|
||
|
||
|
||
|
||
|
||
33..33.. AAddddiinngg ffiilleess,, ddiirreeccttoorriieess aanndd iiccoonnss..
|
||
|
||
You will need to create the following directories for your code
|
||
(replace 'appname' with your application name)
|
||
|
||
`-- appname
|
||
`-- images
|
||
| `-- navbar.gif
|
||
`-- inc
|
||
| |-- functions.inc.php
|
||
| |-- header.inc.php
|
||
| |-- footer.inc.php
|
||
| |-- preferences.inc.php
|
||
| `-- admin.inc.php
|
||
`-- templates
|
||
`-- default
|
||
|
||
|
||
|
||
|
||
33..44.. MMaakkiinngg pphhppGGrroouuppWWaarree aawwaarree ooff yyoouurr aapppplliiccaattiioonn
|
||
|
||
To make the application aware of your application, add your
|
||
application details to the applications table. This can be done via
|
||
the GUI administration screen, or via a SQL script.
|
||
|
||
insert into applications (app_name, app_title, app_enabled) values ('appname', 'The App name', 1);
|
||
|
||
|
||
|
||
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
|
||
|
||
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,
|
||
you will see that it is designed to accommodate a large number of
|
||
applications and functions.
|
||
|
||
44..22.. DDiirreeccttoorryy ttrreeee
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
.-- addressbook
|
||
| `-- images
|
||
| | `-- navbar.gif
|
||
| `-- inc
|
||
| | |-- functions.inc.php
|
||
| | |-- header.inc.php
|
||
| | `-- footer.inc.php
|
||
| `-- templates
|
||
| `-- default
|
||
|-- admin
|
||
| `-- images
|
||
| | `-- navbar.gif
|
||
| `-- inc
|
||
| | |-- functions.inc.php
|
||
| | |-- header.inc.php
|
||
| | |-- footer.inc.php
|
||
| | `-- admin.inc.php
|
||
| `-- templates
|
||
| `-- default
|
||
|-- calendar
|
||
| `-- images
|
||
| | `-- navbar.gif
|
||
| `-- inc
|
||
| | |-- functions.inc.php
|
||
| | |-- header.inc.php
|
||
| | `-- footer.inc.php
|
||
| `-- templates
|
||
| `-- default
|
||
|-- cron
|
||
|-- doc
|
||
|-- email
|
||
| `-- images
|
||
| | `-- navbar.gif
|
||
| `-- inc
|
||
| | |-- functions.inc.php
|
||
| | |-- header.inc.php
|
||
| | |-- footer.inc.php
|
||
| | |-- preferences.inc.php
|
||
| | `-- admin.inc.php
|
||
| `-- templates
|
||
| `-- default
|
||
|-- filemanager
|
||
|-- files
|
||
| |-- groups
|
||
| `-- users
|
||
|-- inc
|
||
| |-- phpgwapi
|
||
| | |-- phpgw.inc.php
|
||
| | |-- phpgw_info.inc.php
|
||
| | |-- phpgw_common.inc.php
|
||
| | `-- etc...
|
||
| `-- templates
|
||
| |-- default
|
||
| | |-- addressbook
|
||
| | |-- admin
|
||
| | |-- calendar
|
||
| | |-- common
|
||
| | |-- email
|
||
| | |-- filemanager
|
||
| | |-- headlines
|
||
| | |-- preferences
|
||
| | |-- todo
|
||
| | `-- tts
|
||
| `-- icons
|
||
| |-- email
|
||
| |-- calendar
|
||
| `-- tts
|
||
|-- preferences
|
||
| `-- images
|
||
| | `-- navbar.gif
|
||
| `-- inc
|
||
| | |-- functions.inc.php
|
||
| | |-- header.inc.php
|
||
| | |-- footer.inc.php
|
||
| | `-- preferences.inc.php
|
||
| `-- templates
|
||
| `-- default
|
||
|-- themes
|
||
`-- todo
|
||
`-- images
|
||
| `-- navbar.gif
|
||
`-- inc
|
||
| |-- functions.inc.php
|
||
| |-- header.inc.php
|
||
| `-- footer.inc.php
|
||
`-- templates
|
||
`-- default
|
||
|
||
|
||
|
||
|
||
44..33.. TTrraannssllaattiioonnss
|
||
|
||
The translations are now being done thru the database, and will be
|
||
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.
|
||
In the mean time you will need to create a SQL script yourself and
|
||
name it lang.sql. You can copy the one in doc/lang.sql and use it as a
|
||
template.
|
||
|
||
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
|
||
part of this class are in the inc/core directory and are named to
|
||
match the sub-class.
|
||
Example: $phpgw->send->msg() is in the inc/phpgwapi/phpgw_send.inc.php
|
||
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
|
||
it without any parameters.
|
||
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:
|
||
|
||
|
||
|
||
|
||
|
||
______________________________________________________________________
|
||
<form name=copy method=post action="<?php echo $phpgw->link();?>">
|
||
/* If session management is done via passing url parameters */
|
||
/* The the result would be */
|
||
/* <form name=copy method=post action="somepage.php?sessionid=87687693276?kp3=kjh98u80"> */
|
||
______________________________________________________________________
|
||
|
||
|
||
|
||
55..33.. AApppplliiccaattiioonn FFuunnccttiioonnss
|
||
|
||
|
||
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
|
||
|
||
$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
|
||
leave the parameter empty [i.e. $phpgw->appsession("")], otherwise it
|
||
will store whatever data you send to it.
|
||
You can also store a comma delimited string and use explode() to turn
|
||
it back into an array when you receive the value back.
|
||
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:
|
||
|
||
|
||
______________________________________________________________________
|
||
$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:
|
||
|
||
______________________________________________________________________
|
||
$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);
|
||
______________________________________________________________________
|
||
|
||
|
||
|
||
|
||
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
|
||
phpGroupWare core functions for access to the files.
|
||
$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
|
||
$phpgw_info["server"]["files_dir"] = Directory er and group files are
|
||
stored
|
||
$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,
|
||
$phpgw_info["server"]["encrpytkey"] = Key used for encryption
|
||
functions
|
||
$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.
|
||
$phpgw_info["server"]["hostname"] = Name of the server phpGroupWare is
|
||
installed upon.
|
||
$phpgw_info["server"]["charset"] = default charset,
|
||
default:iso-8859-1
|
||
$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
|
||
VMailMgr. Generally this should be set to 'standard'.
|
||
$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
|
||
$phpgw_info["server"]["nntp_admin"] = Unknown
|
||
|
||
66..88.. AApppplliiccaattiioonn iinnffoorrmmaattiioonn
|
||
|
||
Each application has the following information available.
|
||
$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
|
||
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.
|
||
|
||
77..22.. HHooww ttoo uussee llaanngg ssuuppppoorrtt
|
||
|
||
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.
|
||
|
||
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
|
||
|
||
|
||
|
||
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');
|
||
______________________________________________________________________
|
||
|
||
|
||
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.
|
||
|
||
|
||
|
||
|
||
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
|
||
|
||
______________________________________________________________________
|
||
echo check_code(13);
|
||
______________________________________________________________________
|
||
|
||
|
||
Would print
|
||
|
||
Your message has been sent
|
||
|
||
|
||
translated into the current language.
|
||
|
||
|
||
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-25 documentation on lang(), codes, administration and
|
||
preferences extension added by Steve Brown.
|
||
|
||
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>.
|
||
|
||
99..55.. AAcckknnoowwlleeddggmmeennttss aanndd TThhaannkkss
|
||
|
||
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.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|