diff --git a/admin/inc/class.admin_prefs_sidebox_hooks.inc.php b/admin/inc/class.admin_prefs_sidebox_hooks.inc.php index 93535b725a..ab84430d7d 100644 --- a/admin/inc/class.admin_prefs_sidebox_hooks.inc.php +++ b/admin/inc/class.admin_prefs_sidebox_hooks.inc.php @@ -15,6 +15,15 @@ */ class admin_prefs_sidebox_hooks { + /** + * Functions callable via menuaction + * + * @var unknown_type + */ + var $public_functions = array( + 'register_all_hooks' => True + ); + /** * hooks to build projectmanager's sidebox-menu plus the admin and preferences sections * @@ -53,11 +62,6 @@ class admin_prefs_sidebox_hooks $file['User Groups'] = egw::link('/index.php','menuaction=admin.uiaccounts.list_groups'); } - if (! $GLOBALS['egw']->acl->check('applications_access',1,'admin')) - { - $file['Applications'] = egw::link('/index.php','menuaction=admin.uiapplications.get_list'); - } - if (! $GLOBALS['egw']->acl->check('global_categories_access',1,'admin')) { $file['Global Categories'] = egw::link('/index.php','menuaction=admin.admin_categories.index&appname=phpgw'); @@ -85,7 +89,7 @@ class admin_prefs_sidebox_hooks if (! $GLOBALS['egw']->acl->check('applications_access',16,'admin')) { - $file['Find and Register all Application Hooks'] = egw::link('/index.php','menuaction=admin.uiapplications.register_all_hooks'); + $file['Find and Register all Application Hooks'] = egw::link('/index.php','menuaction=admin.admin_prefs_sidebox_hooks.register_all_hooks'); } if (! $GLOBALS['egw']->acl->check('asyncservice_access',1,'admin')) @@ -117,4 +121,22 @@ class admin_prefs_sidebox_hooks } } } + + /** + * Register all hooks + */ + function register_all_hooks() + { + if ($GLOBALS['egw']->acl->check('applications_access',16,'admin')) + { + $GLOBALS['egw']->redirect_link('/index.php'); + } + $GLOBALS['egw']->hooks->register_all_hooks(); + + if (method_exists($GLOBALS['egw'],'invalidate_session_cache')) // egw object in setup is limited + { + $GLOBALS['egw']->invalidate_session_cache(); // in case with cache the egw_info array in the session + } + $GLOBALS['egw']->redirect_link('/admin/index.php'); + } } diff --git a/admin/inc/class.boapplications.inc.php b/admin/inc/class.boapplications.inc.php deleted file mode 100644 index 0d32c8f332..0000000000 --- a/admin/inc/class.boapplications.inc.php +++ /dev/null @@ -1,57 +0,0 @@ -so =& CreateObject('admin.soapplications'); - } - - function get_list() - { - return $this->so->get_list(); - } - - function read($app_name) - { - return $this->so->read($app_name); - } - - function add($data) - { - return $this->so->add($data); - } - - function save($data) - { - return $this->so->save($data); - } - - function exists($app_name) - { - return $this->so->exists($app_name); - } - - function app_order() - { - return $this->so->app_order(); - } - - function delete($app_name) - { - return $this->so->delete($app_name); - } - } diff --git a/admin/inc/class.soapplications.inc.php b/admin/inc/class.soapplications.inc.php deleted file mode 100644 index 81b924501a..0000000000 --- a/admin/inc/class.soapplications.inc.php +++ /dev/null @@ -1,121 +0,0 @@ -db = clone($GLOBALS['egw']->db); - } - - function read($app_name) - { - $sql = "SELECT * FROM $this->applications_table WHERE app_name='$app_name'"; - - $this->db->query($sql,__LINE__,__FILE__); - $this->db->next_record(); - $app_info = array( - $this->db->f('app_name'), - $GLOBALS['egw_info']['apps'][$this->db->f('app_name')]['title'], - $this->db->f('app_enabled'), - $this->db->f('app_name'), - $this->db->f('app_order') - ); - return $app_info; - } - - function get_list() - { - $this->db->query("SELECT * FROM $this->applications_table WHERE app_enabled != 3",__LINE__,__FILE__); - if($this->db->num_rows()) - { - while ($this->db->next_record()) - { - $app = $this->db->f('app_name'); - $title = @$GLOBALS['egw_info']['apps'][$app]['title']; - if (empty($title)) - { - $title = lang($app) == $app.'*' ? $app : lang($app); - } - $apps[$app] = array( - 'title' => $title, - 'name' => $app, - 'status' => $this->db->f('app_enabled') - ); - } - } - return $apps; - } - - function add($data) - { - /* Yes, the sequence should work, but after a mass import in setup (new install) - it does not work on pg - */ - $sql = "SELECT MAX(app_id) from $this->applications_table"; - $this->db->query($sql,__LINE__,__FILE__); - $this->db->next_record(); - $app_id = $this->db->f(0) + 1; - $sql = "INSERT INTO $this->applications_table (app_id,app_name,app_enabled,app_order) VALUES(" - . $app_id . ",'" . addslashes($data['n_app_name']) . "','" - . $data['n_app_status'] . "','" . $data['app_order'] . "')"; - - $this->db->query($sql,__LINE__,__FILE__); - return True; - } - - function save($data) - { - $sql = "UPDATE $this->applications_table SET " - . "app_enabled='" . $data['n_app_status'] . "',app_order='" . $data['app_order'] - . "' WHERE app_name='" . $data['app_name'] . "'"; - - $this->db->query($sql,__LINE__,__FILE__); - return True; - } - - function exists($app_name) - { - $this->db->query("SELECT COUNT(app_name) FROM $this->applications_table WHERE app_name='" . addslashes($app_name) . "'",__LINE__,__FILE__); - $this->db->next_record(); - - if ($this->db->f(0) != 0) - { - return True; - } - return False; - } - - function app_order() - { - $this->db->query("SELECT MAX(app_order)+1 FROM $this->applications_table",__LINE__,__FILE__); - $this->db->next_record(); - return $this->db->f(0); - } - - function delete($app_name) - { - $this->db->query("DELETE FROM $this->applications_table WHERE app_name='$app_name'",__LINE__,__FILE__); - } - - function register_hook($app) - { - $this->db->query("INSERT INTO $this->hooks_table (hook_appname,hook_location,hook_filename) " - . "VALUES ('".$app['app_name']."','".$app['hook']."','hook_".$app['hook'].".inc.php')",__LINE__,__FILE__ - ); - } - } diff --git a/admin/inc/class.uiaccounts.inc.php b/admin/inc/class.uiaccounts.inc.php index 8d36d71650..0c96aee799 100755 --- a/admin/inc/class.uiaccounts.inc.php +++ b/admin/inc/class.uiaccounts.inc.php @@ -973,7 +973,9 @@ 'lang_firstname' => lang('First Name'), 'lang_lastlogin' => lang('Last login'), 'lang_lastloginfrom' => lang('Last login from'), - 'lang_expires' => lang('Expires') + 'lang_expires' => lang('Expires'), + 'lang_app' => lang('application'), + 'lang_acl' => lang('enabled'), ); $t->parse('password_fields','form_logininfo',True); @@ -1055,17 +1057,22 @@ $i = 0; $availableApps = $GLOBALS['egw_info']['apps']; - @asort($availableApps); - @reset($availableApps); foreach($availableApps as $app => $data) { - if ($data['enabled'] && $data['status'] != 2) + if (!$data['enabled'] || !$data['status'] || $data['status'] == 3) { - $perm_display[$i]['appName'] = $app; - $perm_display[$i]['title'] = $data['title']; - $i++; + unset($availableApps[$app]); // do NOT show disabled apps, or our API (status = 3) } } + uasort($availableApps,create_function('$a,$b','return strcasecmp($a["title"],$b["title"]);')); + + foreach($availableApps as $app => $data) + { + $perm_display[] = array( + 'appName' => $app, + 'title' => $data['title'], + ); + } // create apps output $apps =& CreateObject('phpgwapi.applications',(int)$_GET['account_id']); @@ -1091,7 +1098,7 @@ $part2 = ' '; } - $appRightsOutput .= sprintf("$part1$part2\n",$GLOBALS['egw_info']['theme']['row_on']); + $appRightsOutput .= sprintf("$part1$part2\n",$this->nextmatchs->alternate_row_color('',true)); } $var['permissions_list'] = $appRightsOutput; @@ -1190,26 +1197,24 @@ 'email' => html::input('account_email',$group_repository['account_email'],'',' style="width: 100%;"'), )); } - reset($GLOBALS['egw_info']['apps']); - $sorted_apps = $GLOBALS['egw_info']['apps']; - foreach ($sorted_apps as $key => $values) { - $sortarray[$key] = strtolower($values['title']); - } - unset($key); unset($values); - @asort($sortarray); - @reset($sortarray); - - foreach ($sortarray as $key => $value) + $availableApps = $GLOBALS['egw_info']['apps']; + foreach($availableApps as $app => $data) { - if ($sorted_apps[$key]['enabled'] && $sorted_apps[$key]['status'] != 3) + if (!$data['enabled'] || !$data['status'] || $data['status'] == 3) { - $perm_display[] = Array( - $key, - $sorted_apps[$key]['title'] - ); + unset($availableApps[$app]); // do NOT show disabled apps, or our API (status = 3) } } - unset($key); unset($value); + uasort($availableApps,create_function('$a,$b','return strcasecmp($a["title"],$b["title"]);')); + + foreach ($availableApps as $app => $data) + { + $perm_display[] = Array( + $app, + $data['title'] + ); + } + unset($app); unset($data); $perm_html = ''.lang('Application').''.lang('enabled').' / '.lang('ACL').''; $perm_html = ''. @@ -1513,16 +1518,19 @@ $db_perms = $apps->read_account_specific(); $availableApps = $GLOBALS['egw_info']['apps']; + foreach($availableApps as $app => $data) + { + if (!$data['enabled'] || !$data['status'] || $data['status'] == 3) + { + unset($availableApps[$app]); // do NOT show disabled apps, or our API (status = 3) + } + } uasort($availableApps,create_function('$a,$b','return strcasecmp($a["title"],$b["title"]);')); $appRightsOutput = ''; $i = 0; foreach($availableApps as $app => $data) { - if (!$data['enabled'] || $data['status'] == 3) - { - continue; - } $checked = (@$userData['account_permissions'][$app] || @$db_perms[$app]) && $_account_id ? ' checked="1"' : ''; $acl_action = self::_acl_action($app,$_account_id,$userData['account_lid'],$options); $part[$i&1] = sprintf('%s', @@ -1533,14 +1541,14 @@ if ($i & 1) { - $appRightsOutput .= sprintf('%s%s',$this->nextmatchs->alternate_row_color(), $part[0], $part[1]); + $appRightsOutput .= sprintf('%s%s',$this->nextmatchs->alternate_row_color('',true), $part[0], $part[1]); } ++$i; } if ($i & 1) { $part[1] = ' '; - $appRightsOutput .= sprintf('%s%s',$this->nextmatchs->alternate_row_color(), $part[0], $part[1]); + $appRightsOutput .= sprintf('%s%s',$this->nextmatchs->alternate_row_color('',true), $part[0], $part[1]); } $var = Array( diff --git a/admin/inc/class.uiapplications.inc.php b/admin/inc/class.uiapplications.inc.php deleted file mode 100644 index 2a7651cf37..0000000000 --- a/admin/inc/class.uiapplications.inc.php +++ /dev/null @@ -1,383 +0,0 @@ - True, - 'add' => True, - 'edit' => True, - 'delete' => True, - 'register_all_hooks' => True - ); - - var $bo; - var $nextmatchs; - - function uiapplications() - { - $this->bo =& CreateObject('admin.boapplications'); - $this->nextmatchs =& CreateObject('phpgwapi.nextmatchs'); - } - - function get_list() - { - if ($GLOBALS['egw']->acl->check('applications_access',1,'admin')) - { - $GLOBALS['egw']->redirect_link('/index.php'); - } - $can_add = !$GLOBALS['egw']->acl->check('applications_access',2,'admin'); - $can_edit = !$GLOBALS['egw']->acl->check('applications_access',4,'admin'); - $can_delete = !$GLOBALS['egw']->acl->check('applications_access',8,'admin'); - - $GLOBALS['egw_info']['flags']['app_header'] = lang('Admin').' - '.lang('Installed applications'); - $GLOBALS['egw']->js->validate_file('jscode','openwindow','admin'); - $GLOBALS['egw']->common->egw_header(); - echo parse_navbar(); - - $GLOBALS['egw']->template->set_file(array('applications' => 'applications.tpl')); - $GLOBALS['egw']->template->set_block('applications','list','list'); - $GLOBALS['egw']->template->set_block('applications','row','row'); - $GLOBALS['egw']->template->set_block('applications','add','add'); - - $start = get_var('start',array('POST','GET')); - $sort = $_GET['sort']; - $order = $_GET['order']; - $offset = $GLOBALS['egw_info']['user']['preferences']['common']['maxmatchs']; - - $apps = $this->bo->get_list(); - $total = count($apps); - - $sort = $sort ? $sort : 'ASC'; - - uasort($apps,create_function('$a,$b','return strcasecmp($a[\'title\'],$b[\'title\'])'.($sort != 'ASC' ? '* -1' : '').';')); - - if ($start && $offset) - { - $limit = $start + $offset; - } - elseif ($start && !$offset) - { - $limit = $start; - } - elseif(!$start && !$offset) - { - $limit = $total; - } - else - { - $start = 0; - $limit = $offset; - } - - if ($limit > $total) - { - $limit = $total; - } - - $i = 0; - $applications = array(); - while(list($app,$data) = @each($apps)) - { - if($i >= $start && $i< $limit) - { - $applications[$app] = $data; - } - $i++; - } - - $GLOBALS['egw']->template->set_var('bg_color',$GLOBALS['egw_info']['theme']['bg_color']); - $GLOBALS['egw']->template->set_var('th_bg',$GLOBALS['egw_info']['theme']['th_bg']); - - $GLOBALS['egw']->template->set_var('sort_title',$this->nextmatchs->show_sort_order($sort,'title','title','/index.php',lang('Title'),'&menuaction=admin.uiapplications.get_list')); - $GLOBALS['egw']->template->set_var('lang_showing',$this->nextmatchs->show_hits($total,$start)); - $GLOBALS['egw']->template->set_var('left',$this->nextmatchs->left('/index.php',$start,$total,'menuaction=admin.uiapplications.get_list')); - $GLOBALS['egw']->template->set_var('right',$this->nextmatchs->right('index.php',$start,$total,'menuaction=admin.uiapplications.get_list')); - - $GLOBALS['egw']->template->set_var('lang_edit',lang('Edit')); - $GLOBALS['egw']->template->set_var('lang_delete',lang('Delete')); - $GLOBALS['egw']->template->set_var('lang_enabled',lang('Enabled')); - - $GLOBALS['egw']->template->set_var('new_action',$GLOBALS['egw']->link('/index.php','menuaction=admin.uiapplications.add')); - $GLOBALS['egw']->template->set_var('lang_note',lang('(To install new applications use
Setup [Manage Applications] !!!)')); - $GLOBALS['egw']->template->set_var('lang_add',lang('add')); - - foreach($applications as $app) - { - $tr_color = $this->nextmatchs->alternate_row_color($tr_color); - - $GLOBALS['egw']->template->set_var('tr_color',$tr_color); - $GLOBALS['egw']->template->set_var('name',$app['title']); - - $GLOBALS['egw']->template->set_var('edit',$can_edit ? ' ' . lang('Edit') . ' ' : ' '); - $GLOBALS['egw']->template->set_var('delete',$can_delete ? ' ' . lang('Delete') . ' ' : ' '); - - if ($app['status']) - { - $status = lang('Yes'); - } - else - { - $status = '' . lang('No') . ''; - } - $GLOBALS['egw']->template->set_var('status',$status); - - $GLOBALS['egw']->template->parse('rows','row',True); - } - if ($can_add) - { - $GLOBALS['egw']->template->parse('addbutton','add'); - } - else - { - $GLOBALS['egw']->template->set_var('addbutton',''); - } - - $GLOBALS['egw']->template->pparse('out','list'); - } - - function display_row($label, $value) - { - $GLOBALS['egw']->template->set_var('tr_color',$this->nextmatchs->alternate_row_color()); - $GLOBALS['egw']->template->set_var('label',$label); - $GLOBALS['egw']->template->set_var('value',$value); - $GLOBALS['egw']->template->parse('rows','row',True); - } - - function add() - { - if ($GLOBALS['egw']->acl->check('applications_access',2,'admin')) - { - $GLOBALS['egw']->redirect_link('/index.php'); - } - $start = get_var('start',array('POST','GET')); - - $GLOBALS['egw']->template->set_file(array('application' => 'application_form.tpl')); - $GLOBALS['egw']->template->set_block('application','form','form'); - $GLOBALS['egw']->template->set_block('application','row','row'); - $GLOBALS['egw']->template->set_block('form','delete_button'); - $GLOBALS['egw']->template->set_var('delete_button',''); - - if ($_POST['cancel']) - { - $GLOBALS['egw']->redirect_link('/index.php','menuaction=admin.uiapplications.get_list&start='.$start); - } - - if ($_POST['save']) - { - $totalerrors = 0; - - $app_order = $_POST['app_order'] ? $_POST['app_order'] : 0; - $n_app_name = chop($_POST['n_app_name']); - $n_app_status = $_POST['n_app_status']; - - if ($this->bo->exists($n_app_name)) - { - $error[$totalerrors++] = lang('That application name already exists.'); - } - if (preg_match("/\D/",$app_order)) - { - $error[$totalerrors++] = lang('That application order must be a number.'); - } - if (!$n_app_name) - { - $error[$totalerrors++] = lang('You must enter an application name.'); - } - - if (!$totalerrors) - { - $this->bo->add(array( - 'n_app_name' => $n_app_name, - 'n_app_status' => $n_app_status, - 'app_order' => $app_order - )); - - $GLOBALS['egw']->redirect_link('/index.php','menuaction=admin.uiapplications.get_list&start='.$start); - $GLOBALS['egw']->common->egw_exit(); - } - else - { - $GLOBALS['egw']->template->set_var('error','

' . $GLOBALS['egw']->common->error_list($error) . '

'); - } - } - else - { // else submit - $GLOBALS['egw']->template->set_var('error',''); - } - - $GLOBALS['egw_info']['flags']['app_header'] = lang('Admin').' - '.lang('Add new application'); - $GLOBALS['egw']->js->validate_file('jscode','openwindow','admin'); - $GLOBALS['egw']->common->egw_header(); - echo parse_navbar(); - - $GLOBALS['egw']->template->set_var('th_bg',$GLOBALS['egw_info']['theme']['th_bg']); - - $GLOBALS['egw']->template->set_var('hidden_vars',''); - $GLOBALS['egw']->template->set_var('form_action',$GLOBALS['egw']->link('/index.php','menuaction=admin.uiapplications.add')); - - $this->display_row(lang('application name'),''); - - if(!isset($n_app_status)) - { - $n_app_status = 1; - } - - $selected[$n_app_status] = ' selected'; - $status_html = '' - . '' - . '' - . ''; - $this->display_row(lang('Status'),''); - - if (!$app_order) - { - $app_order = $this->bo->app_order(); - } - - $this->display_row(lang('Select which location this app should appear on the navbar, lowest (left) to highest (right)'),''); - - $GLOBALS['egw']->template->set_var('lang_save_button',lang('Add')); - $GLOBALS['egw']->template->set_var('lang_cancel_button',lang('Cancel')); - $GLOBALS['egw']->template->pparse('phpgw_body','form'); - } - - function edit() - { - if ($GLOBALS['egw']->acl->check('applications_access',4,'admin')) - { - $GLOBALS['egw']->redirect_link('/index.php'); - } - $app_name = get_var('app_name',array('POST','GET')); - $start = get_var('start',array('POST','GET')); - - $GLOBALS['egw']->template->set_file(array('application' => 'application_form.tpl')); - $GLOBALS['egw']->template->set_block('application','form','form'); - $GLOBALS['egw']->template->set_block('application','row','row'); - - if ($_POST['cancel']) - { - $GLOBALS['egw']->redirect_link('/index.php','menuaction=admin.uiapplications.get_list&start='.$start); - } - - if ($_POST['delete']) - { - return $this->delete(); - } - - if ($_POST['save']) - { - $totalerrors = 0; - - $app_order = $_POST['app_order'] ? $_POST['app_order'] : 0; - $n_app_status = $_POST['n_app_status']; - - if (! $totalerrors) - { - $this->bo->save(array( - 'n_app_status' => $n_app_status, - 'app_order' => $app_order, - 'app_name' => urldecode($app_name) - )); - - $GLOBALS['egw']->redirect_link('/index.php','menuaction=admin.uiapplications.get_list&start='.$start); - } - } - - $GLOBALS['egw_info']['flags']['app_header'] = lang('Admin').' - '.lang('Edit application'); - $GLOBALS['egw']->js->validate_file('jscode','openwindow','admin'); - $GLOBALS['egw']->common->egw_header(); - echo parse_navbar(); - - if ($totalerrors) - { - $GLOBALS['egw']->template->set_var('error','

' . $GLOBALS['egw']->common->error_list($error) . '

'); - } - else - { - $GLOBALS['egw']->template->set_var('error',''); - list($n_app_name,$n_app_title,$n_app_status,$old_app_name,$app_order) = $this->bo->read($app_name); - } - $GLOBALS['egw']->template->set_var('hidden_vars',''. - ''); - $GLOBALS['egw']->template->set_var('th_bg',$GLOBALS['egw_info']['theme']['th_bg']); - $GLOBALS['egw']->template->set_var('form_action',$GLOBALS['egw']->link('/index.php','menuaction=admin.uiapplications.edit')); - - $this->display_row(lang('application name'), $n_app_name ); - - $GLOBALS['egw']->template->set_var('lang_status',lang('Status')); - $GLOBALS['egw']->template->set_var('lang_save_button',lang('Save')); - $GLOBALS['egw']->template->set_var('lang_cancel_button',lang('Cancel')); - $GLOBALS['egw']->template->set_var('lang_delete_button',lang('Delete')); - - $selected[$n_app_status] = ' selected'; - $status_html = '' - . '' - . '' - . ''; - - $this->display_row(lang("Status"),''); - $this->display_row(lang("Select which location this app should appear on the navbar, lowest (left) to highest (right)"),''); - - $GLOBALS['egw']->template->set_var('select_status',$status_html); - $GLOBALS['egw']->template->pparse('phpgw_body','form'); - } - - function delete() - { - if ($GLOBALS['egw']->acl->check('applications_access',8,'admin')) - { - $GLOBALS['egw']->redirect_link('/index.php'); - } - $app_name = get_var('app_name',array('POST','GET')); - $start = get_var('start',array('POST','GET')); - - if (!$app_name || $_POST['no'] || $_POST['yes']) - { - if ($_POST['yes']) - { - $this->bo->delete($app_name); - } - $GLOBALS['egw']->redirect_link('/index.php','menuaction=admin.uiapplications.get_list&start='.$start); - } - - $GLOBALS['egw']->template->set_file(array('body' => 'delete_common.tpl')); - - $GLOBALS['egw']->js->validate_file('jscode','openwindow','admin'); - $GLOBALS['egw']->common->egw_header(); - echo parse_navbar(); - - $GLOBALS['egw']->template->set_var('messages',lang('Are you sure you want to delete the application %1 ?',$GLOBALS['egw_info']['apps'][$app_name]['title'])); - $GLOBALS['egw']->template->set_var('no',lang('No')); - $GLOBALS['egw']->template->set_var('yes',lang('Yes')); - $GLOBALS['egw']->template->set_var('form_action',$GLOBALS['egw']->link('/index.php','menuaction=admin.uiapplications.delete')); - $GLOBALS['egw']->template->set_var('hidden_vars',''. - ''); - $GLOBALS['egw']->template->pparse('phpgw_body','body'); - } - - function register_all_hooks() - { - if ($GLOBALS['egw']->acl->check('applications_access',16,'admin')) - { - $GLOBALS['egw']->redirect_link('/index.php'); - } - $GLOBALS['egw']->hooks->register_all_hooks(); - - if (method_exists($GLOBALS['egw'],'invalidate_session_cache')) // egw object in setup is limited - { - $GLOBALS['egw']->invalidate_session_cache(); // in case with cache the egw_info array in the session - } - $GLOBALS['egw']->redirect_link('/admin/index.php'); - } - } -?> diff --git a/admin/inc/hook_acl_manager.inc.php b/admin/inc/hook_acl_manager.inc.php index 4893c35afa..6a65ec446c 100644 --- a/admin/inc/hook_acl_manager.inc.php +++ b/admin/inc/hook_acl_manager.inc.php @@ -60,10 +60,12 @@ $GLOBALS['acl_manager']['admin']['applications_access'] = array( 'name' => 'Deny access to applications', 'rights' => array( +/* not usefull --> setup 'Applications list' => 1, 'Add application' => 2, 'Edit application' => 4, 'Delete application' => 8, +*/ 'Register application hooks' => 16 ) ); // added and working ralfbecker