[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Phpgroupware-cvs] CVS: phpgwapi/inc class.hooks.inc.php,1.14,1.15 class
From: |
Ralf Becker <address@hidden> |
Subject: |
[Phpgroupware-cvs] CVS: phpgwapi/inc class.hooks.inc.php,1.14,1.15 class.setup.inc.php,1.15,1.16 |
Date: |
Sun, 27 Apr 2003 18:25:38 -0400 |
Update of /cvsroot/phpgroupware/phpgwapi/inc
In directory subversions:/tmp/cvs-serv21057
Modified Files:
class.hooks.inc.php class.setup.inc.php
Log Message:
new type of hooks via methodes instead of separate files:
- allows to parse arguments ot the hook and return content
- all access to the hook-table is now handled by the hook-class (for admin and
setup too)
- all existing hooks continue to work of cause
Index: class.hooks.inc.php
===================================================================
RCS file: /cvsroot/phpgroupware/phpgwapi/inc/class.hooks.inc.php,v
retrieving revision 1.14
retrieving revision 1.15
diff -C2 -r1.14 -r1.15
*** class.hooks.inc.php 15 Nov 2002 05:15:39 -0000 1.14
--- class.hooks.inc.php 27 Apr 2003 22:25:36 -0000 1.15
***************
*** 35,45 ****
{
var $found_hooks = Array();
! function hooks()
{
! //$GLOBALS['phpgw']->db->query("SELECT hook_appname,
hook_location, hook_filename FROM phpgw_hooks WHERE
hook_location='".$location."'",__LINE__,__FILE__);
! $GLOBALS['phpgw']->db->query("SELECT hook_appname,
hook_location, hook_filename FROM phpgw_hooks",__LINE__,__FILE__);
! while( $GLOBALS['phpgw']->db->next_record() )
{
!
$this->found_hooks[$GLOBALS['phpgw']->db->f('hook_appname')][$GLOBALS['phpgw']->db->f('hook_location')]
= $GLOBALS['phpgw']->db->f('hook_filename');
}
//echo '<pre>';
--- 35,48 ----
{
var $found_hooks = Array();
! var $db = '';
!
! function hooks($db='')
{
! $this->db = $db ? $db : $GLOBALS['phpgw']->db; // this
is to allow setup to set the db
!
! $this->db->query("SELECT hook_appname, hook_location,
hook_filename FROM phpgw_hooks",__LINE__,__FILE__);
! while( $this->db->next_record() )
{
!
$this->found_hooks[$this->db->f('hook_appname')][$this->db->f('hook_location')]
= $this->db->f('hook_filename');
}
//echo '<pre>';
***************
*** 50,189 ****
/*!
@function process
! @abstract loads up all the hooks the user has rights to
! @discussion Someone flesh this out please
*/
! // Note: $no_permission_check should *ONLY* be used when it
*HAS* to be. (jengo)
! function process($location, $order = '', $no_permission_check =
False)
{
if ($order == '')
{
! settype($order,'array');
! $order[] =
$GLOBALS['phpgw_info']['flags']['currentapp'];
}
/* First include the ordered apps hook file */
! reset ($order);
! while (list(,$appname) = each($order))
{
! if
(isset($this->found_hooks[$appname][$location]))
! {
! $f = PHPGW_SERVER_ROOT . SEP . $appname
. SEP . 'inc' . SEP . $this->found_hooks[$appname][$location];
! if (file_exists($f) &&
! (
$GLOBALS['phpgw_info']['user']['apps'][$appname] || (($no_permission_check ||
$appname == 'preferences') && $appname)) )
! {
! include($f);
! }
! }
! $completed_hooks[$appname] = True;
}
/* Then add the rest */
-
if ($no_permission_check)
{
! reset($GLOBALS['phpgw_info']['apps']);
! while (list(,$p) =
each($GLOBALS['phpgw_info']['apps']))
! {
! $appname = $p['name'];
! if (! isset($completed_hooks[$appname])
|| $completed_hooks[$appname] != True)
! {
! if
(isset($this->found_hooks[$appname][$location]))
! {
! $f = PHPGW_SERVER_ROOT
. SEP . $appname . SEP . 'inc' . SEP . $this->found_hooks[$appname][$location];
! if (file_exists($f))
! {
! include($f);
! }
! }
! }
! }
}
else
{
! reset ($GLOBALS['phpgw_info']['user']['apps']);
! while (list(,$p) =
each($GLOBALS['phpgw_info']['user']['apps']))
{
! $appname = $p['name'];
! if (! isset($completed_hooks[$appname])
|| $completed_hooks[$appname] != True)
! {
! if
(isset($this->found_hooks[$appname][$location]))
! {
! $f = PHPGW_SERVER_ROOT
. SEP . $appname . SEP . 'inc' . SEP . $this->found_hooks[$appname][$location];
! if (file_exists($f))
! {
! include($f);
! }
! }
! }
}
}
}
/*!
@function single
! @abstract call the hooks for a single application
! @param $location hook location - required
! @param $appname application name - optional
*/
! // Note: $no_permission_check should *ONLY* be used when it
*HAS* to be. (jengo)
! function single($location, $appname = '', $no_permission_check
= False)
{
! if (! $appname)
! {
! $appname =
$GLOBALS['phpgw_info']['flags']['currentapp'];
! }
!
! /* First include the ordered apps hook file */
! if (isset($this->found_hooks[$appname][$location]))
{
! $f = PHPGW_SERVER_ROOT . SEP . $appname . SEP .
'inc' . SEP . $this->found_hooks[$appname][$location];
! if (file_exists($f) &&
! (
$GLOBALS['phpgw_info']['user']['apps'][$appname] || (($no_permission_check ||
$location == 'config' || $appname == 'phpgwapi') && $appname)) )
! {
! include($f);
! return True;
! }
! else
! {
! return False;
! }
}
else
{
! return False;
}
! }
!
! /*!
! @function single_tpl
! @abstract call the hooks for a single application, return
output from the hook
! @discussion This is a BROKEN function on php3... wcm is not
using it anymore
! @param $location hook location - required
! @param $appname application name - optional
! */
! function single_tpl($location, $appname='',
$no_permission_check=False)
! {
! if(!$appname)
{
! $appname =
$GLOBALS['phpgw_info']['flags']['currentapp'];
}
! if(@isset($this->found_hooks[$appname][$location]))
{
! $f = PHPGW_SERVER_ROOT . SEP . $appname . SEP .
'inc' . SEP . $this->found_hooks[$appname][$location];
! if(@file_exists($f) &&
! (
$GLOBALS['phpgw_info']['user']['apps'][$appname] || (($no_permission_check ||
$location == 'config' || $appname == 'phpgwapi') && $appname)) )
{
! eval('$retval = include(\$f);');
! return $retval;
}
! else
{
! return '';
}
}
else
{
! return '';
}
}
--- 53,158 ----
/*!
@function process
! @abstract executes all the hooks (the user has rights to) for a
given location
! @syntax process($args,$order='',$no_permission_check = False)
! @param $args location-name as string or array:
! @param $args['location'] location-name
! @param $order or $args['order'] array of appnames (as value),
which should be executes first
! @param $args is passed to the hook, if its a new method-hook
! @param $no_permission_check if True execute all hooks, not only
the ones a user has rights to
! @note $no_permission_check should *ONLY* be used when it *HAS*
to be. (jengo)
! @returns array with results of each hook call (with appname as
key): \
! False if no hook exists, True if old hook exists \
! and whatever the new methode-hook returns (can be True
or False too!).
*/
! function process($args, $order = '', $no_permission_check =
False)
{
+ //echo "<p>hooks::process("; print_r($args); echo
")</p>\n";
if ($order == '')
{
! $order = is_array($args) &&
isset($args['order']) ? $args['order'] :
!
array($GLOBALS['phpgw_info']['flags']['currentapp']);
}
/* First include the ordered apps hook file */
! foreach($order as $appname)
{
! $results[$appname] =
$this->single($args,$appname,$no_permission_check);
}
/* Then add the rest */
if ($no_permission_check)
{
! $apps = $GLOBALS['phpgw_info']['apps'];
}
else
{
! $apps = $GLOBALS['phpgw_info']['user']['apps'];
! }
! foreach($apps as $app)
! {
! $appname = $app['name'];
! if (!isset($results[$appname]))
{
! $results[$appname] =
$this->single($args,$appname,$no_permission_check);
}
}
+ return $results;
}
/*!
@function single
! @abstract executes a single hook of a given location and
application
! @syntax single($args,$appname='',$no_permission_check = False)
! @param $args location-name as string or array:
! @param $args['location'] location-name
! @param $appname or $args['appname'] name of the app, which's
hook to execute, if empty the current app is used
! @param $args is passed to the hook, if its a new method-hook
! @param $no_permission_check if True execute all hooks, not only
the ones a user has rights to
! @note $no_permission_check should *ONLY* be used when it *HAS*
to be. (jengo)
! @returns False if no hook exists, True if an old hook exist and
whatever the new method-hook returns
*/
! function single($args, $appname = '', $no_permission_check =
False)
{
! //echo "<p>hooks::single("; print_r($args); echo
",'$appname')</p>\n";
! if (is_array($args))
{
! $location = $args['location'];
}
else
{
! $location = $args;
}
! if (!$appname)
{
! $appname = is_array($args) &&
isset($args['appname']) ? $args['appname'] :
$GLOBALS['phpgw_info']['flags']['currentapp'];
}
! /* First include the ordered apps hook file */
! if (isset($this->found_hooks[$appname][$location]))
{
! $parts = explode('.',$method =
$this->found_hooks[$appname][$location]);
!
! if (count($parts) != 3 || ($parts[1] == 'inc'
&& $parts[2] == 'php'))
{
! $f = PHPGW_SERVER_ROOT . SEP . $appname
. SEP . 'inc' . SEP . $method;
! if (file_exists($f) &&
! (
$GLOBALS['phpgw_info']['user']['apps'][$appname] || (($no_permission_check ||
$location == 'config' || $appname == 'phpgwapi') && $appname)) )
! {
! include($f);
! return True;
! }
! else
! {
! return False;
! }
}
! else // new style method-hook
{
! return ExecMethod($method,$args);
}
}
else
{
! return False;
}
}
***************
*** 196,203 ****
{
$count = 0;
! reset($GLOBALS['phpgw_info']['user']['apps']);
! while ($permission =
each($GLOBALS['phpgw_info']['user']['apps']))
{
! if
(isset($this->found_hooks[$permission[0]][$location]))
{
++$count;
--- 165,171 ----
{
$count = 0;
! foreach($GLOBALS['phpgw_info']['user']['apps'] as
$appname => $data)
{
! if
(isset($this->found_hooks[$appname][$location]))
{
++$count;
***************
*** 206,210 ****
return $count;
}
!
/*!
@function read()
--- 174,178 ----
return $count;
}
!
/*!
@function read()
***************
*** 218,221 ****
--- 186,246 ----
//}
return $this->found_hooks;
+ }
+
+ /*!
+ @function register_hooks
+ @abstract Register and/or de-register an application's hooks
+ @syntax register_hooks($appname,$hooks='')
+ @param $appname Application 'name'
+ @param $hooks array with hooks to register, eg
$setup_info[$app]['hooks'] or not used for only deregister the hooks
+ */
+ function register_hooks($appname,$hooks='')
+ {
+ if(!$appname)
+ {
+ return False;
+ }
+ $db_appname = $this->db->db_addslashes($appname);
+ $this->db->query("DELETE FROM phpgw_hooks WHERE
hook_appname='$db_appname'",__LINE__,__FILE__);
+
+ if (!is_array($hooks)) // only deregister
+ {
+ return True;
+ }
+ //echo "<p>ADDING hooks for: $appname</p>";
+ foreach($hooks as $key => $hook)
+ {
+ if (!is_numeric($key)) // new methode-hook
+ {
+ $location = $key;
+ $filename = $hook;
+ }
+ else
+ {
+ $location = $hook;
+ $filename = "hook_$hook.inc.php";
+ }
+ $this->db->query("INSERT INTO phpgw_hooks
(hook_appname,hook_location,hook_filename)".
+ " VALUES
('$appname','$location','$filename');");
+ }
+ return True;
+ }
+
+
+ /*!
+ @function register_all_hooks
+ @abstract Register the hooks of all applications (used by admin)
+ */
+ function register_all_hooks()
+ {
+ foreach($GLOBALS['phpgw_info']['apps'] as $appname =>
$app)
+ {
+ $f = PHPGW_SERVER_ROOT . SEP . $appname . SEP .
'setup' . SEP . 'setup.inc.php';
+ if(@file_exists($f))
+ {
+ include($f);
+
$this->register_hooks($appname,$setup_info[$appname]['hooks']);
+ }
+ }
}
}
Index: class.setup.inc.php
===================================================================
RCS file: /cvsroot/phpgroupware/phpgwapi/inc/class.setup.inc.php,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -r1.15 -r1.16
*** class.setup.inc.php 26 Oct 2002 22:39:19 -0000 1.15
--- class.setup.inc.php 27 Apr 2003 22:25:36 -0000 1.16
***************
*** 560,584 ****
}
! $this->db->query("SELECT COUNT(hook_appname) FROM
phpgw_hooks WHERE hook_appname='".$appname."'");
! $this->db->next_record();
! if($this->db->f(0))
{
! $this->deregister_hooks($appname);
! }
!
! //echo "ADDING hooks for: " .
$setup_info[$appname]['name'];
! if(is_array($setup_info[$appname]['hooks']))
! {
! while(list($key,$hook) =
each($setup_info[$appname]['hooks']))
! {
! $this->db->query("INSERT INTO
phpgw_hooks "
! .
"(hook_appname,hook_location,hook_filename) "
! . "VALUES ("
! . "'" .
$setup_info[$appname]['name'] . "',"
! . "'" . $hook . "',"
! . "'" . "hook_" . $hook .
".inc.php" . "');"
! );
! }
}
}
--- 560,568 ----
}
! if (!is_object($this->hooks))
{
! $this->hooks =
CreateObject('phpgwapi.hooks',$this->db);
}
+
$this->hooks->register_hooks($appname,$setup_info[$appname]['hooks']);
}
***************
*** 590,621 ****
function update_hooks($appname)
{
! $setup_info = $GLOBALS['setup_info'];
!
! if(!$appname)
! {
! return False;
! }
!
!
if($this->alessthanb($setup_info['phpgwapi']['currentver'],'0.9.8pre5'))
! {
! /* No phpgw_hooks table yet. */
! return False;
! }
!
! $this->db->query("SELECT COUNT(*) FROM phpgw_hooks
WHERE hook_appname='".$appname."'");
! $this->db->next_record();
! if(!$this->db->f(0))
! {
! return False;
! }
!
! if($setup_info[$appname]['version'])
! {
! if(is_array($setup_info[$appname]['hooks']))
! {
! $this->deregister_hooks($appname);
! $this->register_hooks($appname);
! }
! }
}
--- 574,578 ----
function update_hooks($appname)
{
! $this->register_hooks($appname);
}
***************
*** 637,643 ****
return False;
}
!
//echo "DELETING hooks for: " .
$setup_info[$appname]['name'];
! $this->db->query("DELETE FROM phpgw_hooks WHERE
hook_appname='". $appname ."'");
}
--- 594,604 ----
return False;
}
!
//echo "DELETING hooks for: " .
$setup_info[$appname]['name'];
! if (!is_object($this->hooks))
! {
! $this->hooks =
CreateObject('phpgwapi.hooks',$this->db);
! }
! $this->hooks->register_hooks($appname);
}
***************
*** 650,669 ****
function hook($location, $appname='')
{
! if(!$appname)
! {
! $appname =
$GLOBALS['phpgw_info']['flags']['currentapp'];
! }
! $SEP = filesystem_separator();
!
! $f = PHPGW_SERVER_ROOT . $SEP . $appname . $SEP . 'inc'
. $SEP . 'hook_' . $location . '.inc.php';
! if(file_exists($f))
{
! include($f);
! return True;
! }
! else
! {
! return False;
}
}
--- 611,619 ----
function hook($location, $appname='')
{
! if (!is_object($this->hooks))
{
! $this->hooks =
CreateObject('phpgwapi.hooks',$this->db);
}
+ return $this->hooks->single($locaton,$appname);
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Phpgroupware-cvs] CVS: phpgwapi/inc class.hooks.inc.php,1.14,1.15 class.setup.inc.php,1.15,1.16,
Ralf Becker <address@hidden> <=
- Prev by Date:
[Phpgroupware-cvs] CVS: phpgwapi/inc class.http_dav_client.inc.php,NONE,1.3.2.1 class.net_http_client.inc.php,NONE,1.1.2.1
- Next by Date:
[Phpgroupware-cvs] CVS: admin/inc class.boapplications.inc.php,1.7,1.8 class.uiapplications.inc.php,1.8,1.9 hook_admin.inc.php,1.31,1.32
- Previous by thread:
[Phpgroupware-cvs] CVS: phpgwapi/inc class.http_dav_client.inc.php,NONE,1.3.2.1 class.net_http_client.inc.php,NONE,1.1.2.1
- Next by thread:
[Phpgroupware-cvs] CVS: admin/inc class.boapplications.inc.php,1.7,1.8 class.uiapplications.inc.php,1.8,1.9 hook_admin.inc.php,1.31,1.32
- Index(es):