forked from extern/egroupware
867a40667c
setup/doc and phpgwapi/vfs/doc for additional documentation, removes some antiquated references to the original setup and lang files, etc.
1676 lines
40 KiB
HTML
1676 lines
40 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
|
||
|
||
<!--Converted with jLaTeX2HTML 2002 (1.62) JA patch-1.4
|
||
patched version by: Kenshi Muto, Debian Project.
|
||
LaTeX2HTML 2002 (1.62),
|
||
original version by: Nikos Drakos, CBLU, University of Leeds
|
||
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
|
||
* with significant contributions from:
|
||
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
|
||
<HTML>
|
||
<HEAD>
|
||
<TITLE>phpGroupWare Application Development</TITLE>
|
||
<META NAME="description" CONTENT="phpGroupWare Application Development">
|
||
<META NAME="keywords" CONTENT="index">
|
||
<META NAME="resource-type" CONTENT="document">
|
||
<META NAME="distribution" CONTENT="global">
|
||
|
||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
|
||
<META NAME="Generator" CONTENT="jLaTeX2HTML v2002 JA patch-1.4">
|
||
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
|
||
|
||
<LINK REL="STYLESHEET" HREF="index.css">
|
||
|
||
</HEAD>
|
||
|
||
<BODY >
|
||
<!--Navigation Panel-->
|
||
<IMG WIDTH="81" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next_inactive"
|
||
SRC="file:/usr/share/latex2html/icons/nx_grp_g.png">
|
||
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
|
||
SRC="file:/usr/share/latex2html/icons/up_g.png">
|
||
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
|
||
SRC="file:/usr/share/latex2html/icons/prev_g.png">
|
||
<BR>
|
||
<BR>
|
||
<BR>
|
||
<!--End of Navigation Panel-->
|
||
|
||
<P>
|
||
|
||
<P>
|
||
|
||
<P>
|
||
|
||
<P>
|
||
<H1 ALIGN="CENTER">eGroupWare Application Development</H1>
|
||
<P ALIGN="CENTER"><STRONG>Dan Kuykendall <dan@kuykendall.org></STRONG></P>
|
||
<P ALIGN="CENTER"><STRONG>v0.9 29 September 2000</STRONG></P>
|
||
<BLOCKQUOTE>
|
||
<I>This document explains eGroupWare's infrastructure and API,
|
||
along with what is required to integrate applications into it.</I>
|
||
|
||
</BLOCKQUOTE>
|
||
<BR>
|
||
|
||
<H2><A NAME="SECTION00010000000000000000">
|
||
Contents</A>
|
||
</H2>
|
||
<!--Table of Contents-->
|
||
|
||
<UL>
|
||
<LI><A NAME="tex2html65"
|
||
HREF="index.html">1 Introduction</A>
|
||
<UL>
|
||
<LI><A NAME="tex2html66"
|
||
HREF="index.html#SECTION00021000000000000000">1.1 Overview of application writing</A>
|
||
<LI><A NAME="tex2html67"
|
||
HREF="index.html#SECTION00022000000000000000">1.2 What does the eGroupWare API provide?</A>
|
||
</UL>
|
||
<BR>
|
||
<LI><A NAME="tex2html68"
|
||
HREF="index.html#SECTION00030000000000000000">2 Guidelines</A>
|
||
<UL>
|
||
<LI><A NAME="tex2html69"
|
||
HREF="index.html#SECTION00031000000000000000">2.1 Requirements</A>
|
||
<LI><A NAME="tex2html70"
|
||
HREF="index.html#SECTION00032000000000000000">2.2 Writing/porting your application</A>
|
||
</UL>
|
||
<BR>
|
||
<LI><A NAME="tex2html71"
|
||
HREF="index.html#SECTION00040000000000000000">3 Installing your application</A>
|
||
<UL>
|
||
<LI><A NAME="tex2html72"
|
||
HREF="index.html#SECTION00041000000000000000">3.1 Overview</A>
|
||
<LI><A NAME="tex2html73"
|
||
HREF="index.html#SECTION00042000000000000000">3.2 Automatic features</A>
|
||
<LI><A NAME="tex2html74"
|
||
HREF="index.html#SECTION00043000000000000000">3.3 Adding files, directories and icons.</A>
|
||
<LI><A NAME="tex2html75"
|
||
HREF="index.html#SECTION00044000000000000000">3.4 Making eGroupWare aware of your application</A>
|
||
<LI><A NAME="tex2html76"
|
||
HREF="index.html#SECTION00045000000000000000">3.5 Hooking into Administration page</A>
|
||
<LI><A NAME="tex2html77"
|
||
HREF="index.html#SECTION00046000000000000000">3.6 Hooking into Preferences page</A>
|
||
</UL>
|
||
<BR>
|
||
<LI><A NAME="tex2html78"
|
||
HREF="index.html#SECTION00050000000000000000">4 Infrastructure</A>
|
||
<UL>
|
||
<LI><A NAME="tex2html79"
|
||
HREF="index.html#SECTION00051000000000000000">4.1 Overview</A>
|
||
<LI><A NAME="tex2html80"
|
||
HREF="index.html#SECTION00052000000000000000">4.2 Directory tree</A>
|
||
<LI><A NAME="tex2html81"
|
||
HREF="index.html#SECTION00053000000000000000">4.3 Translations</A>
|
||
</UL>
|
||
<BR>
|
||
<LI><A NAME="tex2html82"
|
||
HREF="index.html#SECTION00060000000000000000">5 The API</A>
|
||
<UL>
|
||
<LI><A NAME="tex2html83"
|
||
HREF="index.html#SECTION00061000000000000000">5.1 Introduction</A>
|
||
<LI><A NAME="tex2html84"
|
||
HREF="index.html#SECTION00062000000000000000">5.2 Basic functions</A>
|
||
<LI><A NAME="tex2html85"
|
||
HREF="index.html#SECTION00063000000000000000">5.3 Application Functions</A>
|
||
<LI><A NAME="tex2html86"
|
||
HREF="index.html#SECTION00064000000000000000">5.4 File functions</A>
|
||
<LI><A NAME="tex2html87"
|
||
HREF="index.html#SECTION00065000000000000000">5.5 Email/NNTP Functions</A>
|
||
</UL>
|
||
<BR>
|
||
<LI><A NAME="tex2html88"
|
||
HREF="index.html#SECTION00070000000000000000">6 Configuration Variables</A>
|
||
<UL>
|
||
<LI><A NAME="tex2html89"
|
||
HREF="index.html#SECTION00071000000000000000">6.1 Introduction</A>
|
||
<LI><A NAME="tex2html90"
|
||
HREF="index.html#SECTION00072000000000000000">6.2 User information</A>
|
||
<LI><A NAME="tex2html91"
|
||
HREF="index.html#SECTION00073000000000000000">6.3 Group information</A>
|
||
<LI><A NAME="tex2html92"
|
||
HREF="index.html#SECTION00074000000000000000">6.4 Server information</A>
|
||
<LI><A NAME="tex2html93"
|
||
HREF="index.html#SECTION00075000000000000000">6.5 Database information</A>
|
||
<LI><A NAME="tex2html94"
|
||
HREF="index.html#SECTION00076000000000000000">6.6 Mail information</A>
|
||
<LI><A NAME="tex2html95"
|
||
HREF="index.html#SECTION00077000000000000000">6.7 NNTP information</A>
|
||
<LI><A NAME="tex2html96"
|
||
HREF="index.html#SECTION00078000000000000000">6.8 Application information</A>
|
||
</UL>
|
||
<BR>
|
||
<LI><A NAME="tex2html97"
|
||
HREF="index.html#SECTION00080000000000000000">7 Using Language Support</A>
|
||
<UL>
|
||
<LI><A NAME="tex2html98"
|
||
HREF="index.html#SECTION00081000000000000000">7.1 Overview</A>
|
||
<LI><A NAME="tex2html99"
|
||
HREF="index.html#SECTION00082000000000000000">7.2 How to use lang support</A>
|
||
<LI><A NAME="tex2html100"
|
||
HREF="index.html#SECTION00083000000000000000">7.3 Common return codes</A>
|
||
</UL>
|
||
<BR>
|
||
<LI><A NAME="tex2html101"
|
||
HREF="index.html#SECTION00090000000000000000">8 Using Templates</A>
|
||
<UL>
|
||
<LI><A NAME="tex2html102"
|
||
HREF="index.html#SECTION00091000000000000000">8.1 Overview</A>
|
||
<LI><A NAME="tex2html103"
|
||
HREF="index.html#SECTION00092000000000000000">8.2 How to use templates</A>
|
||
</UL>
|
||
<BR>
|
||
<LI><A NAME="tex2html104"
|
||
HREF="index.html#SECTION000100000000000000000">9 About this document</A>
|
||
<UL>
|
||
<LI><A NAME="tex2html105"
|
||
HREF="index.html#SECTION000101000000000000000">9.1 New versions </A>
|
||
<LI><A NAME="tex2html106"
|
||
HREF="index.html#SECTION000102000000000000000">9.2 Comments </A>
|
||
<LI><A NAME="tex2html107"
|
||
HREF="index.html#SECTION000103000000000000000">9.3 History </A>
|
||
<LI><A NAME="tex2html108"
|
||
HREF="index.html#SECTION000104000000000000000">9.4 Copyrights and Trademarks </A>
|
||
<LI><A NAME="tex2html109"
|
||
HREF="index.html#SECTION000105000000000000000">9.5 Acknowledgments and Thanks </A>
|
||
</UL>
|
||
<BR>
|
||
<LI><A NAME="tex2html110"
|
||
HREF="index.html#SECTION000110000000000000000">About this document ...</A>
|
||
</UL>
|
||
<!--End of Table of Contents-->
|
||
|
||
<P>
|
||
|
||
<H1><A NAME="SECTION00020000000000000000">
|
||
1 Introduction</A>
|
||
</H1>
|
||
|
||
<P>
|
||
eGroupWare 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. eGroupWare
|
||
is a fork of phpGroupWare, for which the original version of this
|
||
document was written.
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION00021000000000000000">
|
||
1.1 Overview of application writing</A>
|
||
</H2>
|
||
|
||
<P>
|
||
We have attempted to make writing applications for eGroupWare as painless
|
||
as possible. We hope any pain and suffering is caused by making your
|
||
application work, but not dealing with eGroupWare itself.
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION00022000000000000000">
|
||
1.2 What does the eGroupWare API provide?</A>
|
||
</H2>
|
||
|
||
<P>
|
||
The eGroupWare API handles session management, user/group management,
|
||
has support for multiple databases, using either PHPLIB or ADODB database
|
||
abstraction methods, we support templates using the PHPLIB Templates
|
||
class, a file system interface, and even a network i/o interface.
|
||
|
||
<P>
|
||
On top of these standard functions, eGroupWare provides several functions
|
||
to give you the information you need about the users environment,
|
||
and to properly plug into eGroupWare.
|
||
|
||
<P>
|
||
|
||
<H1><A NAME="SECTION00030000000000000000">
|
||
2 Guidelines</A>
|
||
</H1>
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION00031000000000000000">
|
||
2.1 Requirements</A>
|
||
</H2>
|
||
|
||
<P>
|
||
These guidelines must be followed for any application that wants considered
|
||
for inclusion into eGroupWare:
|
||
|
||
<P>
|
||
|
||
<UL>
|
||
<LI>It must run on PHP4 and PHP5.
|
||
</LI>
|
||
<LI>SQL statements must be compatible with both MySQL and PostgreSQL.
|
||
When in doubt it is best to stick with SQL92.
|
||
</LI>
|
||
<LI>It must use our default header.inc.php include.
|
||
</LI>
|
||
<LI>It must use our $GLOBALS['phpgw']->link($url) for all links
|
||
(this is for session support).
|
||
</LI>
|
||
<LI>It must use ``post'' for forms.
|
||
</LI>
|
||
<LI>It must respect phpGW group rights and phpGW user permissions.
|
||
</LI>
|
||
<LI>It must use our directory structure, template support and lang (multi-language)
|
||
support.
|
||
</LI>
|
||
<LI>Where possible it should run on both Unix and NT platforms.
|
||
</LI>
|
||
<LI>For applications that do not meet these requirements, they can be
|
||
made available to users however you decide. If you need help converting
|
||
your application to templates and our lang support, we will try to
|
||
connect you with someone to help.
|
||
</LI>
|
||
</UL>
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION00032000000000000000">
|
||
2.2 Writing/porting your application</A>
|
||
</H2>
|
||
|
||
<P>
|
||
|
||
<H3><A NAME="SECTION00032100000000000000">
|
||
Include files</A>
|
||
</H3>
|
||
|
||
<P>
|
||
Each PHP page you write will need to include the header.inc.php along
|
||
with a few variables.
|
||
<BR>
|
||
This is done by putting this at the top of each PHP page. <PRE>
|
||
<?php
|
||
|
||
$GLOBALS['phpgw_info']['flags']['currentapp'] = 'appname';
|
||
|
||
include('../header.inc.php');
|
||
?>
|
||
</PRE>Of course change application name to fit.
|
||
<BR>
|
||
This include will provide the following things:
|
||
|
||
<P>
|
||
|
||
<UL>
|
||
<LI>The phpgwAPI - The eGroupWare API will be loaded.
|
||
</LI>
|
||
<LI>The phpGW navbar will be loaded (by default, but can be disabled until
|
||
a later point.
|
||
</LI>
|
||
<LI>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.
|
||
</LI>
|
||
<LI>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.
|
||
</LI>
|
||
<LI>appname/inc/footer.inc.php - This file is loaded just before the system
|
||
footer, allowing developers to close connections and whatever else
|
||
they need.
|
||
</LI>
|
||
<LI>The phpGW footer will be loaded, which closes several connections.
|
||
</LI>
|
||
</UL>
|
||
|
||
<P>
|
||
|
||
<H1><A NAME="SECTION00040000000000000000">
|
||
3 Installing your application</A>
|
||
</H1>
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION00041000000000000000">
|
||
3.1 Overview</A>
|
||
</H2>
|
||
|
||
<P>
|
||
It is fairly simple to add and delete applications to/from eGroupWare.
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION00042000000000000000">
|
||
3.2 Automatic features</A>
|
||
</H2>
|
||
|
||
<P>
|
||
To make things easy for developers we go ahead and load the following
|
||
files.
|
||
|
||
<P>
|
||
|
||
<UL>
|
||
<LI>appname/inc/functions.inc.php - This file should include all your
|
||
application specific functions.
|
||
</LI>
|
||
<LI>appname/inc/header.inc.php - This file is loaded by $GLOBALS['phpgw']->common->header
|
||
just after the system header/navbar, and allows developers to use
|
||
it for whatever they need to load.
|
||
</LI>
|
||
<LI>appname/inc/footer.inc.php - This file is loaded by $GLOBALS['phpgw']->common->footer
|
||
just before the system footer, allowing developers to close connections
|
||
and whatever else they need.
|
||
</LI>
|
||
</UL>
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION00043000000000000000">
|
||
3.3 Adding files, directories and icons.</A>
|
||
</H2>
|
||
|
||
<P>
|
||
You will need to create the following directories for your code
|
||
<BR> (replace 'appname' with your application name)
|
||
<BR>
|
||
<P>
|
||
<TT>`-appname</TT>
|
||
|
||
<P>
|
||
<TT> |-inc</TT>
|
||
|
||
<P>
|
||
<TT> | |-functions.inc.php</TT>
|
||
|
||
<P>
|
||
<TT> | |-header.inc.php</TT>
|
||
|
||
<P>
|
||
<TT> | |-hook_preferences.inc.php</TT>
|
||
|
||
<P>
|
||
<TT> | |-hook_admin.inc.php</TT>
|
||
|
||
<P>
|
||
<TT> | `-footer.inc.php</TT>
|
||
|
||
<P>
|
||
<TT> `-templates</TT>
|
||
|
||
<P>
|
||
<TT> | `-default</TT>
|
||
|
||
<P>
|
||
|
||
<DL COMPACT>
|
||
<DT>
|
||
<DD><P>
|
||
</DD>
|
||
</DL>
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION00044000000000000000">
|
||
3.4 Making eGroupWare aware of your application</A>
|
||
</H2>
|
||
|
||
<P>
|
||
Please see the documentation in the setup/doc directory for information
|
||
on integrating into eGroupWare. This is very important since the steps
|
||
for database table setup and modification discussed there must be
|
||
followed.
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION00045000000000000000">
|
||
3.5 Hooking into Administration page</A>
|
||
</H2>
|
||
|
||
<P>
|
||
When a user goes to the Administration page, it starts appname/inc/hook_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.
|
||
|
||
<P>
|
||
Simple Example: <PRE>
|
||
<?php
|
||
|
||
$img = '/' . $appname . '/images/navbar.gif';
|
||
section_start('My Application',$img);
|
||
echo '<a HREF="' . $GLOBALS['phpgw']->link('myAdminPage.php') . '">';
|
||
echo lang('Change myApp settings') . '</a>';
|
||
section_end();
|
||
?>
|
||
</PRE>Look at headlines/inc/hook_admin.inc.php and admin/inc/hook_admin.inc.php
|
||
for more examples.
|
||
|
||
<P>
|
||
Things to note:
|
||
|
||
<P>
|
||
|
||
<UL>
|
||
<LI>Links are relative to the admin/index.php file, not your application's
|
||
base directory. (so use $appname in your link() calls)
|
||
</LI>
|
||
<LI>The file is brought in with include() so be careful to not pollute
|
||
the name-space too much
|
||
</LI>
|
||
</UL>
|
||
The standard $GLOBALS['phpgw'] and $GLOBALS['phpgw_info']
|
||
variables are in-scope, as is $appname which corresponds to the application
|
||
name in the path.
|
||
|
||
<P>
|
||
There are 2 functions to coordinate the display of each application's
|
||
links, section_start() and section_end()
|
||
|
||
<P>
|
||
|
||
<H3><A NAME="SECTION00045100000000000000">
|
||
section_start</A>
|
||
</H3>
|
||
|
||
<P>
|
||
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.
|
||
|
||
<P>
|
||
|
||
<H3><A NAME="SECTION00045200000000000000">
|
||
section_end</A>
|
||
</H3>
|
||
|
||
<P>
|
||
section_end() closes the section that was started with section_start().
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION00046000000000000000">
|
||
3.6 Hooking into Preferences page</A>
|
||
</H2>
|
||
|
||
<P>
|
||
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/hook_preferences.inc.php instead of appname/inc/hook_admin.inc.php.
|
||
The same functions and variables are defined.
|
||
|
||
<P>
|
||
|
||
<H1><A NAME="SECTION00050000000000000000">
|
||
4 Infrastructure</A>
|
||
</H1>
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION00051000000000000000">
|
||
4.1 Overview</A>
|
||
</H2>
|
||
|
||
<P>
|
||
eGroupWare attempts to provide developers with a sound directory structure
|
||
to work from.
|
||
<BR>
|
||
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.
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION00052000000000000000">
|
||
4.2 Directory tree</A>
|
||
</H2>
|
||
|
||
<P>
|
||
<TT>.-appname</TT>
|
||
|
||
<P>
|
||
<TT>| |-inc</TT>
|
||
|
||
<P>
|
||
<TT>| | |-functions.inc.php</TT>
|
||
|
||
<P>
|
||
<TT>| | |-header.inc.php</TT>
|
||
|
||
<P>
|
||
<TT>| | |-hook_preferences.ini.php</TT>
|
||
|
||
<P>
|
||
<TT>| | |-hook_home.inc.php</TT>
|
||
|
||
<P>
|
||
<TT>| | `-footer.inc.php</TT>
|
||
|
||
<P>
|
||
<TT>| |-manual</TT>
|
||
|
||
<P>
|
||
<TT>| |-setup</TT>
|
||
|
||
<P>
|
||
<TT>| | |-tables_baseline.inc.php</TT>
|
||
|
||
<P>
|
||
<TT>| | |-tables_current.inc.php</TT>
|
||
|
||
<P>
|
||
<TT>| | |-tables_update.inc.php</TT>
|
||
|
||
<P>
|
||
<TT>| | |-setup.inc.php</TT>
|
||
|
||
<P>
|
||
<TT>| `-templates</TT>
|
||
|
||
<P>
|
||
<TT>| | `-default</TT>
|
||
|
||
<P>
|
||
<TT>| | `-images</TT>
|
||
|
||
<P>
|
||
<TT>| | `-navbar.png</TT>
|
||
|
||
<P>
|
||
<TT>| |-preferences.php</TT>
|
||
|
||
<P>
|
||
<TT>|-docs (installation docs)</TT>
|
||
|
||
<P>
|
||
<TT>|-files</TT>
|
||
|
||
<P>
|
||
<TT>| |-groups</TT>
|
||
|
||
<P>
|
||
<TT>| `-users</TT>
|
||
|
||
<P>
|
||
<TT>`-phpgwapi</TT>
|
||
|
||
<P>
|
||
<TT> |-cron (egroupware's optional daemons)</TT>
|
||
|
||
<P>
|
||
<TT> |-doc (developer docs)</TT>
|
||
|
||
<P>
|
||
<TT> |-inc</TT>
|
||
|
||
<P>
|
||
<TT> | |-class.phpgw.inc.php</TT>
|
||
|
||
<P>
|
||
<TT> | |-class.common.inc.php</TT>
|
||
|
||
<P>
|
||
<TT> | `-etc..</TT>
|
||
|
||
<P>
|
||
<TT> |-manual</TT>
|
||
|
||
<P>
|
||
<TT> |-setup</TT>
|
||
|
||
<P>
|
||
<TT> | |-tables_baseline.inc.php</TT>
|
||
|
||
<P>
|
||
<TT> | |-tables_current.inc.php</TT>
|
||
|
||
<P>
|
||
<TT> | |-tables_update.inc.php</TT>
|
||
|
||
<P>
|
||
<TT> | |-setup.inc.php</TT>
|
||
|
||
<P>
|
||
<TT> |-templates</TT>
|
||
|
||
<P>
|
||
<TT> | |-default</TT>
|
||
|
||
<P>
|
||
<TT> | | `-images</TT>
|
||
|
||
<P>
|
||
<TT> | | |-home.gif</TT>
|
||
|
||
<P>
|
||
<TT> | | `-preferences.gif</TT>
|
||
|
||
<P>
|
||
<TT> | `-verilak</TT>
|
||
|
||
<P>
|
||
<TT> | `-images</TT>
|
||
|
||
<P>
|
||
<TT> |-home.gif</TT>
|
||
|
||
<P>
|
||
<TT> `-preferences.gif</TT>
|
||
|
||
<P>
|
||
<TT> `-themes</TT>
|
||
|
||
<P>
|
||
<TT> `-default.theme</TT>
|
||
|
||
<P>
|
||
|
||
<DL COMPACT>
|
||
<DT>
|
||
<DD><P>
|
||
</DD>
|
||
</DL>
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION00053000000000000000">
|
||
4.3 Translations</A>
|
||
</H2>
|
||
|
||
<P>
|
||
The translations are now being done thru the database, and will be
|
||
configurable to use other mechanisms.
|
||
|
||
<P>
|
||
The application, developer_tools, provides developers/translators
|
||
a nice GUI for building and updating translations.
|
||
|
||
<P>
|
||
|
||
<H1><A NAME="SECTION00060000000000000000">
|
||
5 The API</A>
|
||
</H1>
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION00061000000000000000">
|
||
5.1 Introduction</A>
|
||
</H2>
|
||
|
||
<P>
|
||
eGroupWare attempts to provide developers with a useful API to handle
|
||
common tasks.
|
||
|
||
<P>
|
||
To do this we have created a multi-dimensional class $GLOBALS['phpgw'].
|
||
|
||
<P>
|
||
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.
|
||
|
||
<P>
|
||
Example: $GLOBALS['phpgw']->send->msg() is in the inc/phpgwapi/phpgw_send.inc.php
|
||
file.
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION00062000000000000000">
|
||
5.2 Basic functions</A>
|
||
</H2>
|
||
|
||
<P>
|
||
|
||
<H3><A NAME="SECTION00062100000000000000">
|
||
$GLOBALS['phpgw']->link</A>
|
||
</H3>
|
||
|
||
<P>
|
||
$GLOBALS['phpgw']->link($url)
|
||
<BR>
|
||
Add support for session management. ALL links must use this, that
|
||
includes href's form actions and header location's.
|
||
|
||
<P>
|
||
If you are just doing a form action back to the same page, you can
|
||
use it without any parameters.
|
||
|
||
<P>
|
||
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:
|
||
<PRE>
|
||
<form name="copy" method="post" action="<?php echo $GLOBALS['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"> */
|
||
</PRE>
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION00063000000000000000">
|
||
5.3 Application Functions</A>
|
||
</H2>
|
||
|
||
<P>
|
||
|
||
<H3><A NAME="SECTION00063100000000000000">
|
||
$GLOBALS['phpgw']->common->phpgw_header();</A>
|
||
</H3>
|
||
|
||
<P>
|
||
$GLOBALS['phpgw']->phpgw_header()
|
||
<BR>
|
||
Print out the start of the HTML page, including the navigation bar
|
||
and includes appname/inc/header.php
|
||
|
||
<P>
|
||
|
||
<H3><A NAME="SECTION00063200000000000000">
|
||
$GLOBALS['phpgw']->common->phpgw_footer();</A>
|
||
</H3>
|
||
|
||
<P>
|
||
$GLOBALS['phpgw']->phpgw_footer()
|
||
<BR>
|
||
Prints the system footer, and includes appname/inc/footer.php
|
||
|
||
<P>
|
||
|
||
<H3><A NAME="SECTION00063300000000000000">
|
||
$GLOBALS['phpgw']->common->appsession();</A>
|
||
</H3>
|
||
|
||
<P>
|
||
$GLOBALS['phpgw']->common->appsession($data)
|
||
<BR>
|
||
Store important information session information that your application
|
||
needs.
|
||
<BR> $GLOBALS['phpgw']->appsession will return the value of your
|
||
session data is you leave the parameter empty [i.e. $GLOBALS['phpgw']->appsession(``'')],
|
||
otherwise it will store whatever data you send to it.
|
||
<BR>
|
||
You can also store a comma delimited string and use explode() to
|
||
turn it back into an array when you receive the value back.
|
||
|
||
<P>
|
||
Example: <PRE>
|
||
$GLOBALS['phpgw']->common->appsession('/path/to/something');
|
||
echo "Dir: " . $GLOBALS['phpgw']->common->appsession();
|
||
</PRE>
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION00064000000000000000">
|
||
5.4 File functions</A>
|
||
</H2>
|
||
|
||
<P>
|
||
|
||
<H3><A NAME="SECTION00064100000000000000">
|
||
Please also see the phpgwapi/doc/vfs directory for additional VFS
|
||
class documentation</A>
|
||
</H3>
|
||
|
||
<P>
|
||
|
||
<H3><A NAME="SECTION00064200000000000000">
|
||
$GLOBALS['phpgw']->vfs->read_file</A>
|
||
</H3>
|
||
|
||
<P>
|
||
$GLOBALS['phpgw']->vfs->read_file($file)
|
||
<BR>
|
||
Returns the data from $file.
|
||
<BR>
|
||
You must send the complete path to the file.
|
||
<BR>
|
||
Example: <PRE>
|
||
$data = $GLOBALS['phpgw']->vfs->read_file('/some/dir/to/file.txt');
|
||
</PRE>
|
||
|
||
<P>
|
||
|
||
<H3><A NAME="SECTION00064300000000000000">
|
||
$GLOBALS['phpgw']->vfs->write_file</A>
|
||
</H3>
|
||
|
||
<P>
|
||
$GLOBALS['phpgw']->vfs->write_file($file, $contents)
|
||
<BR>
|
||
Write data to $file.
|
||
<BR>
|
||
You must send the complete path to the file.
|
||
<BR>
|
||
Example: <PRE>
|
||
$data = $GLOBALS['phpgw']->vfs->write_file("/some/dir/to/file.txt");
|
||
</PRE>
|
||
|
||
<P>
|
||
|
||
<H3><A NAME="SECTION00064400000000000000">
|
||
$GLOBALS['phpgw']->vfs->read_userfile</A>
|
||
</H3>
|
||
|
||
<P>
|
||
$GLOBALS['phpgw']->vfs->read_userfile($file)
|
||
<BR>
|
||
Returns the data from $file, which resides in the users private
|
||
dir.
|
||
<BR>
|
||
Example: <PRE>
|
||
$data = $GLOBALS['phpgw']->vfs->read_userfile("file.txt");
|
||
</PRE>
|
||
|
||
<P>
|
||
|
||
<H3><A NAME="SECTION00064500000000000000">
|
||
$GLOBALS['phpgw']->vfs->write_userfile</A>
|
||
</H3>
|
||
|
||
<P>
|
||
$GLOBALS['phpgw']->write_userfile($file, $contents)
|
||
<BR>
|
||
Writes data to $file, which resides in the users private dir.
|
||
<BR>
|
||
Example: <PRE>
|
||
$data = $GLOBALS['phpgw']->vfs->write_userfile("file.txt");
|
||
</PRE>
|
||
|
||
<P>
|
||
|
||
<H3><A NAME="SECTION00064600000000000000">
|
||
$GLOBALS['phpgw']->vfs->list_userfiles</A>
|
||
</H3>
|
||
|
||
<P>
|
||
$GLOBALS['phpgw']->vfs->list_userfiles()
|
||
<BR>
|
||
Returns an array which has the list of files in the users private
|
||
dir.
|
||
<BR>
|
||
Example: <PRE>
|
||
$filelist = array();
|
||
$filelist = $GLOBALS['phpgw']->vfs->list_userfiles();
|
||
</PRE>
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION00065000000000000000">
|
||
5.5 Email/NNTP Functions</A>
|
||
</H2>
|
||
|
||
<P>
|
||
|
||
<H3><A NAME="SECTION00065100000000000000">
|
||
$GLOBALS['phpgw']->send->msg</A>
|
||
</H3>
|
||
|
||
<P>
|
||
$GLOBALS['phpgw']->send->msg($service, $to, $subject, $body,
|
||
$msgtype, $cc, $bcc)
|
||
<BR>
|
||
Send a message via email or NNTP and returns any error codes.
|
||
<BR>
|
||
Example: <PRE>
|
||
$to = "someuser@domain.com";
|
||
$subject = "Hello buddy";
|
||
$body = "Give me a call\n Been wondering what your up to.";
|
||
$errors = $GLOBALS['phpgw']->send->msg("email", $to, $subject, $body);
|
||
</PRE>
|
||
|
||
<P>
|
||
|
||
<H1><A NAME="SECTION00070000000000000000">
|
||
6 Configuration Variables</A>
|
||
</H1>
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION00071000000000000000">
|
||
6.1 Introduction</A>
|
||
</H2>
|
||
|
||
<P>
|
||
eGroupWare attempts to provide developers with as much information
|
||
about the user, group, server, and application configuration as possible.
|
||
|
||
<P>
|
||
To do this we provide a multi-dimensional array called '$GLOBALS['phpgw_info'][]',
|
||
which includes all the information about your environment.
|
||
|
||
<P>
|
||
Due to the multi-dimensional array approach. getting these values
|
||
is easy.
|
||
|
||
<P>
|
||
Here are some examples: <PRE>
|
||
<?php
|
||
// To do a hello username
|
||
echo "Hello " . $GLOBALS['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: " . $GLOBALS['phpgw_info']['server']['imap_server'];
|
||
//If imap is running on localhost, prints: 'IMAP Server is named: localhost'
|
||
?>
|
||
</PRE>
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION00072000000000000000">
|
||
6.2 User information</A>
|
||
</H2>
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``user''][``userid'']
|
||
= The user ID. </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``user''][``sessionid'']
|
||
= The session ID </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``user''][``theme'']
|
||
= Selected theme </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``user''][``private_dir'']
|
||
= Users private dir. Use eGroupWare core functions for access to the
|
||
files. </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``user''][``firstname'']
|
||
= Users first name </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``user''][``lastname'']
|
||
= Users last name </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``user''][``fullname'']
|
||
= Users Full Name </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``user''][``groups'']
|
||
= Groups the user is a member of </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``user''][``app_perms'']
|
||
= If the user has access to the current application </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``user''][``lastlogin'']
|
||
= Last time the user logged in. </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``user''][``lastloginfrom'']
|
||
= Where they logged in from the last time. </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``user''][``lastpasswd_change'']
|
||
= Last time they changed their password. </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``user''][``passwd'']
|
||
= Hashed password. </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``user''][``status'']
|
||
= If the user is enabled. </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``user''][``logintime'']
|
||
= Time they logged into their current session. </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``user''][``session_dla'']
|
||
= Last time they did anything in their current session </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``user''][``session_ip'']
|
||
= Current IP address</FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION00073000000000000000">
|
||
6.3 Group information</A>
|
||
</H2>
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``group''][``group_names'']
|
||
= List of groups.</FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION00074000000000000000">
|
||
6.4 Server information</A>
|
||
</H2>
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``server_root'']
|
||
= Main installation directory </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``include_root'']
|
||
= Location of the 'inc' directory. </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``temp_dir'']
|
||
= Directory that can be used for temporarily storing files </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``files_dir'']
|
||
= Directory er and group files are stored </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``common_include_dir'']
|
||
= Location of the core/shared include files. </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``template_dir'']
|
||
= Active template files directory. This is defaulted by the server,
|
||
and changeable by the user. </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``dir_separator'']
|
||
= Allows compatibility with WindowsNT directory format, </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``encrpytkey'']
|
||
= Key used for encryption functions </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``site_title'']
|
||
= Site Title will show in the title bar of each webpage. </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``webserver_url'']
|
||
= URL to eGroupWare installation. </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``hostname'']
|
||
= Name of the server eGroupWare is installed upon. </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``charset'']
|
||
= default charset, default:iso-8859-1 </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``version'']
|
||
= eGroupWare version.</FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION00075000000000000000">
|
||
6.5 Database information</A>
|
||
</H2>
|
||
|
||
<P>
|
||
It is unlikely you will need these, because $GLOBALS['phpgw_info']_db
|
||
will already be loaded as a database for you to use.
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``db_host'']
|
||
= Address of the database server. Usually this is set to localhost. </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``db_name'']
|
||
= Database name. </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``db_user'']
|
||
= User name. </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``db_pass'']
|
||
= Password </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``db_type'']
|
||
= Type of database. Currently MySQL and PostgreSQL are supported.</FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION00076000000000000000">
|
||
6.6 Mail information</A>
|
||
</H2>
|
||
|
||
<P>
|
||
It is unlikely you will need these, because most email needs are services
|
||
thru core eGroupWare functions.
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``mail_server'']
|
||
= Address of the IMAP server. Usually this is set to localhost. </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``mail_server_type'']
|
||
= IMAP or POP3 </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``imap_server_type'']
|
||
= Cyrus or Uwash </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``imap_port'']
|
||
= This is usually 143, and should only be changed if there is a good
|
||
reason. </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``mail_suffix]
|
||
= This is the domain name, used to add to email address </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``mail_login_type'']
|
||
= This adds support for VMailMgr. Generally this should be set to
|
||
'standard'. </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``smtp_server'']
|
||
= Address of the SMTP server. Usually this is set to localhost. </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``smtp_port'']
|
||
= This is usually 25, and should only be changed if there is a good
|
||
reason</FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION00077000000000000000">
|
||
6.7 NNTP information</A>
|
||
</H2>
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``nntp_server'']
|
||
= Address of the NNTP server. </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``nntp_port'']
|
||
= This is usually XX, and should only be changed if there is a good
|
||
reason. </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``nntp_sender'']
|
||
= Unknown </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``nntp_organization'']
|
||
= Unknown </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``nntp_admin'']
|
||
= Unknown</FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION00078000000000000000">
|
||
6.8 Application information</A>
|
||
</H2>
|
||
|
||
<P>
|
||
Each application has the following information available.
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``apps''][``appname''][``title'']
|
||
= The title of the application. </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``apps''][``appname''][``enabled'']
|
||
= If the application is enabled. True or False. </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``app_include_dir'']
|
||
= Location of the current application include files. </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``app_template_dir'']
|
||
= Location of the current application tpl files. </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``app_lang_dir'']
|
||
= Location of the current lang directory. </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``app_auth'']
|
||
= If the server and current user have access to current application </FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
<TT><FONT SIZE="-1">$GLOBALS['phpgw_info'][``server''][``app_current'']
|
||
= name of the current application.</FONT></TT>
|
||
<P>
|
||
|
||
|
||
<P>
|
||
|
||
<H1><A NAME="SECTION00080000000000000000">
|
||
7 Using Language Support</A>
|
||
</H1>
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION00081000000000000000">
|
||
7.1 Overview</A>
|
||
</H2>
|
||
|
||
<P>
|
||
eGroupWare 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 eGroupWare administrator.
|
||
|
||
<P>
|
||
Please see the setup/doc directory for a document which contains more
|
||
complete documentation of the language system.
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION00082000000000000000">
|
||
7.2 How to use lang support</A>
|
||
</H2>
|
||
|
||
<P>
|
||
The lang() function is your application's interface to eGroupWare's
|
||
internationalization support.
|
||
|
||
<P>
|
||
While developing your application, just wrap all your text output
|
||
with calls to lang(), as in the following code: <PRE>
|
||
$x = 42;
|
||
echo lang("The counter is %1",$x)."<br>";
|
||
</PRE>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, <B>not</B> 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.
|
||
|
||
<P>
|
||
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.
|
||
|
||
<P>
|
||
Without a specific translation in the lang table, the above code will
|
||
print: <PRE>
|
||
The counter is 42*<br>
|
||
</PRE> If the current user speaks Italian, they string returned
|
||
may instead be: <PRE>
|
||
il contatore <20> 42<br>
|
||
</PRE>
|
||
|
||
<P>
|
||
|
||
<H3><A NAME="SECTION00082100000000000000">
|
||
The lang function</A>
|
||
</H3>
|
||
|
||
<P>
|
||
<PRE>
|
||
lang($key, $m1="", $m2="", $m3="", $m4="", $m5="",
|
||
$m6="", $m7="", $m8="", $m9="", $m10="")
|
||
</PRE>
|
||
|
||
<P>
|
||
<DL>
|
||
<DT><STRONG>$key </STRONG></DT>
|
||
<DD>
|
||
|
||
<P>
|
||
is the string to translate and may contain replacement directives
|
||
of the form %n.
|
||
<BR>
|
||
<P>
|
||
</DD>
|
||
<DT><STRONG>$m1 </STRONG></DT>
|
||
<DD>
|
||
|
||
<P>
|
||
is the first replacement value or may be an array of replacement values
|
||
(in which case $m2 and above are ignored).
|
||
|
||
<P>
|
||
</DD>
|
||
<DT><STRONG>$m2 - $m10 </STRONG></DT>
|
||
<DD>
|
||
|
||
<P>
|
||
the 2nd through 10th replacement values if $m1 is not an array.
|
||
|
||
<P>
|
||
</DD>
|
||
</DL>
|
||
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).
|
||
|
||
<P>
|
||
|
||
<H3><A NAME="SECTION00082200000000000000">
|
||
Adding translation data</A>
|
||
</H3>
|
||
|
||
<P>
|
||
An application called <B>Transy</B> is being developed to make this
|
||
easier, until then you can create the translation data manually.
|
||
|
||
<P>
|
||
|
||
<H3><A NAME="SECTION00082300000000000000">
|
||
The lang table</A>
|
||
</H3>
|
||
|
||
<P>
|
||
The translation class uses the lang table for all translations. We
|
||
are concerned with 4 of the columns to create a translation:
|
||
|
||
<P>
|
||
<DL>
|
||
<DT><STRONG>message_id </STRONG></DT>
|
||
<DD>
|
||
|
||
<P>
|
||
The key to identify the message (the $key passed to the lang() function).
|
||
This is written in English.
|
||
|
||
<P>
|
||
</DD>
|
||
<DT><STRONG>app_name </STRONG></DT>
|
||
<DD>
|
||
|
||
<P>
|
||
The application the translation applies to, or common if it is common
|
||
across multiple applications.
|
||
|
||
<P>
|
||
</DD>
|
||
<DT><STRONG>lang </STRONG></DT>
|
||
<DD>
|
||
|
||
<P>
|
||
The code for the language the translation is in.
|
||
|
||
<P>
|
||
</DD>
|
||
<DT><STRONG>content </STRONG></DT>
|
||
<DD>
|
||
|
||
<P>
|
||
The translated string.
|
||
|
||
<P>
|
||
</DD>
|
||
</DL>
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION00083000000000000000">
|
||
7.3 Common return codes</A>
|
||
</H2>
|
||
|
||
<P>
|
||
If you browse through the eGroupWare 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.
|
||
|
||
<P>
|
||
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.
|
||
|
||
<P>
|
||
For example, calling <PRE>
|
||
echo check_code(13);
|
||
</PRE>Would print <PRE>
|
||
Your message has been sent
|
||
</PRE> translated into the current language.
|
||
|
||
<P>
|
||
|
||
<H1><A NAME="SECTION00090000000000000000">
|
||
8 Using Templates</A>
|
||
</H1>
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION00091000000000000000">
|
||
8.1 Overview</A>
|
||
</H2>
|
||
|
||
<P>
|
||
eGroupWare 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.
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION00092000000000000000">
|
||
8.2 How to use templates</A>
|
||
</H2>
|
||
|
||
<P>
|
||
Some instructions on using templates:
|
||
|
||
<P>
|
||
For Further info read the PHPLIBs documentation for their template
|
||
class. http://phplib.netuse.de
|
||
|
||
<P>
|
||
|
||
<H1><A NAME="SECTION000100000000000000000">
|
||
9 About this document</A>
|
||
</H1>
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION000101000000000000000">
|
||
9.1 New versions </A>
|
||
</H2>
|
||
|
||
<P>
|
||
The newest version of this document can be found on our website http://www.egroupware.org
|
||
as lyx source, HTML, and text.
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION000102000000000000000">
|
||
9.2 Comments </A>
|
||
</H2>
|
||
|
||
<P>
|
||
Comments on this HOWTO should be directed to the eGroupWare developers
|
||
mailing list egroupware-developers@lists.sourceforge.net
|
||
|
||
<P>
|
||
To subscribe, go to http://lists.sourceforge.net/lists/egroupware-developers
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION000103000000000000000">
|
||
9.3 History </A>
|
||
</H2>
|
||
|
||
<P>
|
||
This document was written by Dan Kuykendall.
|
||
|
||
<P>
|
||
2000-09-25 documentation on lang(), codes, administration and preferences
|
||
extension added by Steve Brown.
|
||
|
||
<P>
|
||
2001-01-08 fixed directory structure, minor layout changes, imported
|
||
to lyx source - Darryl VanDorp
|
||
|
||
<P>
|
||
2003-12-29 adapted for eGroupWare and updated for setup and use of
|
||
GLOBALS - Miles Lott
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION000104000000000000000">
|
||
9.4 Copyrights and Trademarks </A>
|
||
</H2>
|
||
|
||
<P>
|
||
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.
|
||
|
||
<P>
|
||
A copy of the license is available at http://www.gnu.org/copyleft/gpl.html
|
||
|
||
<P>
|
||
|
||
<H2><A NAME="SECTION000105000000000000000">
|
||
9.5 Acknowledgments and Thanks </A>
|
||
</H2>
|
||
|
||
<P>
|
||
Thanks to Joesph Engo for starting phpGroupWare (at the time called
|
||
webdistro). Thanks to all the developers and users who contribute
|
||
to making eGroupWare and phpGroupWare such a success.
|
||
|
||
<H1><A NAME="SECTION000110000000000000000">
|
||
About this document ...</A>
|
||
</H1>
|
||
<STRONG>eGroupWare Application Development</STRONG><P>
|
||
This document was generated using the
|
||
<A HREF="http://www.latex2html.org/"><STRONG>LaTeX</STRONG>2<tt>HTML</tt></A> translator Version 2002 (1.62)
|
||
<P>
|
||
Copyright © 1993, 1994, 1995, 1996,
|
||
<A HREF="http://cbl.leeds.ac.uk/nikos/personal.html">Nikos Drakos</A>,
|
||
Computer Based Learning Unit, University of Leeds.
|
||
<BR>
|
||
Copyright © 1997, 1998, 1999,
|
||
<A HREF="http://www.maths.mq.edu.au/~ross/">Ross Moore</A>,
|
||
Mathematics Department, Macquarie University, Sydney.
|
||
<P>
|
||
The command line arguments were: <BR>
|
||
<STRONG>latex2html</STRONG> <TT>-no_subdir -split 0 -show_section_numbers /tmp/lyx_tmpdir16754AF2VdD/lyx_tmpbuf16754yRvNsc/index.tex</TT>
|
||
<P>
|
||
The translation was initiated by Miles Lott on 2003-12-28<HR>
|
||
<!--Navigation Panel-->
|
||
<IMG WIDTH="81" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next_inactive"
|
||
SRC="file:/usr/share/latex2html/icons/nx_grp_g.png">
|
||
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
|
||
SRC="file:/usr/share/latex2html/icons/up_g.png">
|
||
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
|
||
SRC="file:/usr/share/latex2html/icons/prev_g.png">
|
||
<BR>
|
||
<!--End of Navigation Panel-->
|
||
<ADDRESS>
|
||
Miles Lott
|
||
2003-12-28
|
||
</ADDRESS>
|
||
</BODY>
|
||
</HTML>
|