Developping a Hello World application for phpGroupware
Author : Jean-Francois Declercq (jef@jfdeclercq.com)
Where to find this information : http://www.jfdeclercq.com/search?query=phpgroupware
1. Creating the basic directory structure
2. Wrinting the application
2.1 Writing the basic functionality
2.2 Writing the templates
2.3 Writing the main page
3. Installing the hello application
4. Conclusions
5. What's next ?
1. Creating the basic directory structure
In the phpgroupware home directory, you have to respect a directory
structure. We will create the following.
|--hello
|--inc
| |--functions.inc.php
|--templates
| |--default
| | |--hello_form.tpl
| | |--hello_result.tpl
|--index.php |
Create the hello, inc, templates and default directory. We will write
the files in the next section.
2. Writing the application
2.1 Writing the basic functionality
First, we will create function.inc.php that contains some functions that
will be used by the page. We will create a function hello() that
formats a string. (Note that in the philosophy of phpGroupware
we would write a Hello class that would contain that functionality...)
<?php
/**************************************************************************\
* functions.inc.php
for phpGroupWare - Hello World example
* http://www.phpgroupware.org
* This file has
been written by J-F Declercq <jef@jfdeclercq.com>
* http://www.jfdeclercq.com
* --------------------------------------------
* This
program is free software; you can redistribute it and/or modify it
* under
the terms of the GNU General Public License as published by the
* Free
Software Foundation; either version 2 of the License, or (at your
* option)
any later version.
\**************************************************************************/
/***************************************************************************\
* Function hello
* in - String
: the text to hello()
* returns - the
string with 'Hello' before and ' !' after
* note - Used
by the hello phpgw app
\***************************************************************************/
function hello($string)
{
return
"Hello ".$string." !";
}
?> |
2.2 Writing the templates
Write the templates for the page. The page will not contain HTML code.
The templates allow to separate the presentation from the logic of the
page. We will insert two templates on the page : the 'hello_result' template
and the 'hello_form' template.
<!-- hello_form.tpl
template -->
<p>Type Here your
text to hello()</p>
<form type="post"
action="{hello_action}">
<input
type="text" name="input" value= "{hello_value}" >
<input
type="submit" value="OK">
</form> |
This template looks like this :
Type Here your text to hello()
|
The hello_result.tpl template allows you to display the parameter
and the result of the hello() function.
<!-- hello_result.tpl
-->
hello({hello_input})={hello_result}
<hr> |
This template looks like this :
hello({hello_input})={hello_result}
|
You have to put these .tpl files in the /templates/default/ directory.
2.3 Write the main page
Now we have to write hello/index.php : this is the main page of the hello
world application. I hope the code is clear enough so you can understand
without I have to explain. (read the comments...)
<?php
/**************************************************************************\
* index.php
for phpGroupWare - Hello World example
*
* http://www.phpgroupware.org
*
* This file written
by J-F Declercq <jef@jfdeclercq.com>
*
* http://www.jfdeclercq.com
*
* --------------------------------------------
*
* This
program is free software; you can redistribute it and/or modify it *
* under
the terms of the GNU General Public License as published by the
*
* Free
Software Foundation; either version 2 of the License, or (at your
*
* option)
any later version.
*
\**************************************************************************/
/***************************************************************************\
* This page allows
you to call the hello() function.
* The default
text passed to hello() is 'World' and
* hello('World')='Hello
World !'.
* The page uses
a form to allow you to hello() other texts.
* The form and
the result of the function have been put in two different
* templates (hello_result.tpl
and hello_form.tpl).
\***************************************************************************/
//set the
phpgw flags
$phpgw_info['flags']
= array('currentapp' => 'hello',
'enable_nextmatchs_class' => True,
'enable_categories_class' => True);
//include
the header
include('../header.inc.php');
/** the
default text to hello() is 'World'*/
$default="World";
if ($input
== "") { $input=$default; }
//Compute
hello()
$result
= hello($input);
//Use templates
$t = CreateObject('phpgwapi.Template',PHPGW_APP_TPL);
//we will
use two templates
$t->set_file(array(
'result'
=> 'hello_result.tpl',
'form'
=> 'hello_form.tpl')
);
//filling
the first template
$t->set_var('hello_input',htmlspecialchars($input));
$t->set_var('hello_result',htmlspecialchars($result));
//filling
the second template
$t->set_var('hello_action','/hello/index.php');
$t->set_var('hello_value',htmlspecialchars($input));
//parse
and write out the templates
//changing
the order of the two lines will change the layout of the page !!
//this
is the power of the templates
$t->pparse('out','result');
$t->pparse('out','form');
//Insert
the footer
$phpgw->common->phpgw_footer();
?> |
3. Installing the hello application
After having the correct files and folders (by creating or unzipping) in
you phpGroupware base directory, you have to register the hello application
within phpGroupware using this command
insert into phpgw_applications (app_name, app_title, app_enabled) values
('hello', 'Hello World for phpGroupware', 1); |
After that, using the admin user, you must grant access to the application
to some user and log in as this user.
4. Conclusions
Trough building this stupid hello world application we have been trough
some but not all of the requirements of phpGroupware.
"These guidelines must be followed for any application that wants considered
for inclusion into phpGroupWare deluxe"
It must run on PHP3 and PHP4. |
OK - I think it's ok (?) I'm not a king of php and I use PHP4. |
SQL statements must be compatible with both MySQL and PostgreSQL. |
OK - No SQL statement so far |
It must use our default header.inc.php include. |
OK - cfr index.php |
It must use our $phpgw_link($url) for all links (this is for session
support). |
OK - cfr hello_form.tpl |
It must use ``post'' for forms. |
OK - cfr hello_form.tpl |
It must respect phpGW group rights and phpGW user permissions. |
KO - We didn't check that particular aspect. --> TODO |
It must use our directory structure, template support and lang (multi-language)
support. |
KO - we didn't use the language aspects --> TODO |
Where possible it should run on both Unix and NT platforms. |
OK ? - Only tested on NT |
hello isn't a phpGroupware deluxe application... The next evolution
of hello will be to add a group right and a multi-language feature. See
what's next.
phpGroupWare offers very interesting features for people wanting to
write 100% web-based applications :
-
separation of logic and presentation by the use of templates
-
internationalization
-
security (at least at the highest level in this case - allow or deny the
use of an application to a user)
-
session management
5. What's next
So, other things I should cover in the next Hello World application :
-
check the complete set of standard files (header.inc.php, hook_preferences.inc.php,
hook_admin.inc.php, footer.inc.php) and what they are for.
-
code the functionality in OO - using a hello class (like in the evolution
of hello world :-))
-
develop a setup that would create, update, delete a hello world table in
order to check how it works.
-
integrate hello into the phpgroupware administration
-
allow the user to have hello preferences
-
allow the user to have hello in his language
-
integrate hello with dedicated ACL and phpGroupware security
-
Discover the way handlers work for blocks
-
...