From a555588dbe77acc7a23285af02e4ad7bec92babe Mon Sep 17 00:00:00 2001 From: Nathan Gray Date: Tue, 21 Jun 2011 20:14:56 +0000 Subject: [PATCH] Use the same code for categories for preferences & admin, add context menu --- admin/inc/class.admin_categories.inc.php | 224 ++++++++++++++---- admin/js/global_categories.js | 4 +- admin/setup/etemplates.inc.php | 36 ++- admin/templates/default/categories.index.xet | 123 +++++----- .../class.preferences_categories_ui.inc.php | 34 +++ preferences/inc/class.uicategories.inc.php | 2 + 6 files changed, 304 insertions(+), 119 deletions(-) create mode 100644 preferences/inc/class.preferences_categories_ui.inc.php diff --git a/admin/inc/class.admin_categories.inc.php b/admin/inc/class.admin_categories.inc.php index 13e29b4f93..3134a2008e 100644 --- a/admin/inc/class.admin_categories.inc.php +++ b/admin/inc/class.admin_categories.inc.php @@ -30,10 +30,11 @@ class admin_categories */ const ICON_PATH = '/phpgwapi/images'; - /** - * Flag used in the nextmatch filter to indicate filtering by user - */ - const FILTER_USER = '-user-'; + protected $appname = 'admin'; + protected $get_rows = 'admin.admin_categories.get_rows'; + protected $list_link = 'admin.admin_categories.index'; + protected $add_link = 'admin.admin_categories.edit'; + protected $edit_link = 'admin.admin_categories.edit'; /** * Stupid old admin ACL - dont think anybody uses or understands it ;-) @@ -90,6 +91,7 @@ class admin_categories // read the session, as the global_cats param is stored with it. $session = egw_cache::getSession(__CLASS__,'nm'); $global_cats = $session['global_cats']; + $appname = $content['appname'] ? $content['appname'] : ($_GET['appname']?$_GET['appname']:categories::GLOBAL_APPNAME); unset($session); if (!isset($content)) { @@ -103,21 +105,20 @@ class admin_categories } if (isset($_GET['appname']) && isset($GLOBALS['egw_info']['apps'][$_GET['appname']])) { - $content['appname'] = $_GET['appname']; + $appname = $_GET['appname']; } else { - $content['appname'] = categories::GLOBAL_APPNAME; + $appname = categories::GLOBAL_APPNAME; } } - elseif (!self::$acl_edit) + elseif (!self::$acl_edit || (!$GLOBALS['egw_info']['user']['apps']['admin'] && $content['owner'] != $GLOBALS['egw_info']['user']['account_id'])) { // only allow to view category $readonlys['__ALL__'] = true; $readonlys['button[cancel]'] = false; } $content['base_url'] = self::icon_url(); - $content['icon_url'] = $content['base_url'] . $content['data']['icon']; } elseif ($content['button'] || $content['delete']) { @@ -179,7 +180,8 @@ class admin_categories break; } $link = egw::link('/index.php',array( - 'menuaction' => 'admin.admin_categories.index', + 'menuaction' => $this->list_link, + 'appname' => $appname, 'msg' => $msg, 'global_cats' => (empty($global_cats)? false : true), )); @@ -192,15 +194,22 @@ class admin_categories if (!empty($js)) $GLOBALS['egw']->js->set_onload($js); } $content['msg'] = $msg; - $sel_options['icon'] = self::get_icons(); + $content['appname'] = $appname; + $content['icon_url'] = $content['base_url'] . $content['data']['icon']; - $sel_options['owner'] = array(0 => lang('All users')); + $sel_options['icon'] = self::get_icons(); + $sel_options['owner'] = array(); + // User's category - add current value to be able to preserve owner - if(!$GLOBALS['egw_info']['user']['apps']['admin']) { - if($content['owner'] > 0) $sel_options['owner'][$content['owner']] = common::grab_owner_name($content['owner']); - } - else + if(!$content['id'] && $this->appname != 'admin') $content['owner'] = $GLOBALS['egw_info']['user']['account_id']; + + if($content['owner'] > 0 ) { + $sel_options['owner'][$content['owner']] = common::grab_owner_name($content['owner']); + } + if($this->appname == 'admin') + { + $sel_options['owner'][0] = lang('All users'); $accs = $GLOBALS['egw']->accounts->get_list('groups'); foreach($accs as $acc) { @@ -209,7 +218,9 @@ class admin_categories $sel_options['owner'][$acc['account_id']] = ExecMethod2('etemplate.select_widget.accountInfo',$acc['account_id'],$acc,$type2,$type=='both'); } } + $content['no_private'] = true; } + $readonlys['owner'] = $this->appname != 'admin' && !$GLOBALS['egw_info']['user']['apps']['admin']; egw_framework::validate_file('.','global_categories','admin'); egw_framework::set_onload('$(document).ready(function() { @@ -217,11 +228,12 @@ class admin_categories permission_prompt = \'' . lang('cat_permission_confirm').'\'; });'); - $readonlys['button[delete]'] = !$content['id'] || !self::$acl_delete; // cant delete not yet saved category + $readonlys['button[delete]'] = !$content['id'] || !self::$acl_delete || // cant delete not yet saved category + (!$GLOBALS['egw_info']['user']['apps']['admin'] && $content['owner'] != $GLOBALS['egw_info']['user']['account_id']); $tmpl = new etemplate('admin.categories.edit'); - $tmpl->exec('admin.admin_categories.edit',$content,$sel_options,$readonlys,$content+array( - 'old_parent' => $content['old_parent'] ? $content['old_parent'] : $content['parent'], + $tmpl->exec($this->edit_link,$content,$sel_options,$readonlys,$content+array( + 'old_parent' => $content['old_parent'] ? $content['old_parent'] : $content['parent'], 'appname' => $appname ),2); } @@ -274,25 +286,30 @@ class admin_categories { throw new egw_exception_assertion_failed(__METHOD__.'($query,...) $query[appname] NOT set!'); } - $globalcat = ($query['filter'] == categories::GLOBAL_ACCOUNT); + $filter = array(); + $globalcat = ($query['filter'] === categories::GLOBAL_ACCOUNT || !$query['filter']); if (isset($query['global_cats']) && $query['global_cats']===false) { $globalcat = false; } + if($globalcat) $filter['access'] = 'public'; egw_cache::setSession(__CLASS__,'nm',$query); - if($query['filter']) + if($query['filter'] > 0 || $query['col_filter']['owner']) { + $filter['owner'] = $query['col_filter']['owner'] ? $query['col_filter']['owner'] : $query['filter']; + } + elseif ((string)$query['filter'] === (string)categories::GLOBAL_ACCOUNT) { - $filter['owner'] = $query['filter'] == self::FILTER_USER ? $query['col_filter']['owner'] : $query['filter']; + $filter['owner'] = 0; } - $cats = new categories($query['filter'] == self::FILTER_USER ? $query['col_filter']['owner'] : $query['filter'],$query['appname']); + //$cats = new categories($query['col_filter']['owner'] ? $query['col_filter']['owner'] : $query['filter'],$query['appname']); + $cats = new categories($filter['owner'],$query['appname']); // Use all parents, in case user has their cat as a child of a global or something - $parent = array(0); - if($query['filter']) $parent += $cats->return_array('all',0,false,'','ASC','',true,$parent,-1, 'id'); + $parent =array(0); + if($filter['owner']) $parent += $cats->return_array('all',0,false,'','ASC','',true,null,-1, 'id'); $rows = $cats->return_sorted_array($query['start'],$query['num_rows'],$query['search'],$query['sort'],$query['order'],$globalcat,$parent,true, $filter); - foreach($rows as &$row) { $row['level_spacer'] = str_repeat('    ',$row['level']); @@ -302,7 +319,10 @@ class admin_categories $row['subs'] = count($row['children']); $row['class'] = 'level'.$row['level']; - + if($row['owner'] > 0 && !$GLOBALS['egw_info']['user']['apps']['admin'] && $row['owner'] != $GLOBALS['egw_info']['user']['account_id']) + { + $row['class'] . ' rowNoEdit rowNoDelete '; + } $readonlys["edit[$row[id]]"] = !self::$acl_edit; $readonlys["add[$row[id]]"] = !self::$acl_add_sub; $readonlys["delete[$row[id]]"] = !self::$acl_delete; @@ -329,17 +349,14 @@ class admin_categories if(!isset($content)) { if (isset($_GET['msg'])) $msg = $_GET['msg']; - $appname = $content['nm']['appname'] ? $content['nm']['appname'] : categories::GLOBAL_APPNAME; - + $appname = $content['nm']['appname'] ? $content['nm']['appname'] : $_GET['cats_app']?$_GET['cats_app']:categories::GLOBAL_APPNAME; $content['nm'] = egw_cache::getSession(__CLASS__,'nm'); if (!is_array($content['nm'])) { $content['nm'] = array( - 'get_rows' => 'admin_categories::get_rows', // I method/callback to request the data for the rows eg. 'notes.bo.get_rows' + 'get_rows' => $this->get_rows, // I method/callback to request the data for the rows eg. 'notes.bo.get_rows' 'no_filter' => false, - 'filter' => categories::GLOBAL_ACCOUNT, 'options-filter' => array( - '' => lang('All categories'), categories::GLOBAL_ACCOUNT => lang('Global categories'), $GLOBALS['egw_info']['user']['account_id'] => lang('Own categories'), ), @@ -352,52 +369,165 @@ class admin_categories 'start' => 0, // IO position in list 'order' => 'name', // IO name of the column to sort after (optional for the sortheaders) 'sort' => 'ASC', // IO direction of the sort: 'ASC' or 'DESC' - 'default_cols' => '!color,last_mod,subs', // I columns to use if there's no user or default pref (! as first char uses all but the named columns), default all columns + 'default_cols' => '!color,last_mod,subs,legacy_actions', // I columns to use if there's no user or default pref (! as first char uses all but the named columns), default all columns 'csv_fields' => false, // I false=disable csv export, true or unset=enable it with auto-detected fieldnames, //or array with name=>label or name=>array('label'=>label,'type'=>type) pairs (type is a eT widget-type) - 'appname' => $appname, 'no_search' => !self::$acl_search, + 'row_id' => 'id', ); } else { $content['nm']['start']=0; + $content['nm']['filter'] = $GLOBALS['egw_info']['flags']['currentapp'] == 'admin'?categories::GLOBAL_ACCOUNT:$GLOBALS['egw_info']['user']['account_id']; } - if (isset($_GET['appname']) && ($_GET['appname'] == categories::GLOBAL_APPNAME || - isset($GLOBALS['egw_info']['apps'][$_GET['appname']]))) - { - $content['nm']['appname'] = $_GET['appname']; - } + $content['nm']['appname'] = $appname = $_GET['appname'] ? $_GET['appname'] : $appname; + $content['nm']['actions'] = $this->get_actions($appname); + $content['nm']['global_cats'] = true; if (isset($_GET['global_cats']) && empty($_GET['global_cats'] )) { $content['nm']['global_cats'] = false; } } - else + elseif($content['nm']['action']) { - if($content['delete']['delete'] && ($cat = categories::read($content['delete']['cat_id']))) + // Old buttons + foreach(array('delete') as $button) { - $cats = new categories(categories::GLOBAL_ACCOUNT,$cat['appname']); - $cats->delete($content['delete']['cat_id'],$content['delete']['subs'],!$content['delete']['subs']); - $msg = lang('Category deleted.'); + if(isset($content['nm']['rows'][$button])) + { + list($id) = @each($content['nm']['rows'][$button]); + $content['nm']['action'] = $button; + $content['nm']['selected'] = array($id); + break; // Only one can come per submit + } } - unset($content['delete']); - } + if (!count($content['nm']['selected']) && !$content['nm']['select_all']) + { + $msg = lang('You need to select some entries first!'); + } + else + { + // Action has an additional action - add / delete, etc. Buttons named _action[action_name] + if ($this->action($content['nm']['action'],$content['nm']['selected'],$content['nm']['select_all'], + $success,$failed,$action_msg,$content['nm'],$msg)) + { + $msg .= lang('%1 category(s) %2',$success,$action_msg); + } + elseif(empty($msg)) + { + $msg .= lang('%1 category(s) %2, %3 failed because of insufficent rights !!!',$success,$action_msg,$failed); + } + } + } $content['msg'] = $msg; + $content['add_link']= $this->add_link.'&appname='.$appname; + $content['edit_link']= $this->edit_link.'&appname='.$appname; $readonlys['add'] = !self::$acl_add; if($GLOBALS['egw_info']['user']['apps']['admin']) { - $content['nm']['options-filter'][self::FILTER_USER] = lang('Limit to user'); + $content['nm']['options-filter'][''] = lang('All categories'); } else { $readonlys['nm']['rows']['owner'] = true; + $readonlys['nm']['col_filter']['owner'] = true; } $tmpl = new etemplate('admin.categories.index'); - $tmpl->exec('admin.admin_categories.index',$content,$sel_options,$readonlys,array( + $tmpl->exec($this->list_link,$content,$sel_options,$readonlys,array( 'nm' => $content['nm'], )); } + + protected function get_actions($appname=categories::GLOBAL_APPNAME) { + + $actions = array( + 'open' => array( // does edit if allowed, otherwise view + 'caption' => 'Open', + 'default' => true, + 'allowOnMultiple' => false, + 'url' => 'menuaction='.$this->edit_link.'&cat_id=$id&appname='.$appname, + 'popup' => '600x380', + 'group' => $group=1, + ), + 'add' => array( // does edit if allowed, otherwise view + 'caption' => 'Add', + 'allowOnMultiple' => false, + 'icon' => 'new', + 'url' => 'menuaction='.$this->add_link.'&appane='.$appname, + 'popup' => '600x380', + 'group' => $group, + ), + 'sub' => array( // does edit if allowed, otherwise view + 'caption' => 'Add sub', + 'allowOnMultiple' => false, + 'icon' => 'new', + 'url' => 'menuaction='.$this->add_link.'&parent=$id&appname='.$appname, + 'popup' => '600x380', + 'group' => $group, + 'disableClass' => 'rowNoSub', + ), + 'delete' => array( // does edit if allowed, otherwise view + 'caption' => 'Delete', + 'allowOnMultiple' => true, + 'nm_action' => 'open_popup', + 'group' => $group, + 'disableClass' => 'rowNoDelete', + ), + ); + + return $actions; + } + + /** + * Handles actions on multiple entries + * + * @param action + * @param array $checked contact id's to use if !$use_all + * @param boolean $use_all if true use all entries of the current selection (in the session) + * @param int &$success number of succeded actions + * @param int &$failed number of failed actions (not enought permissions) + * @param string &$action_msg translated verb for the actions, to be used in a message like '%1 entries deleted' + * @param array $query get_rows parameter + * @param string &$msg on return user feedback + * @param boolean $skip_notifications=false true to NOT notify users about changes + * @return boolean true if all actions succeded, false otherwise + */ + function action($action, $checked, $use_all, &$success, &$failed, &$action_msg, + array $query, &$msg, $skip_notifications = false) + { + //echo '

'.__METHOD__."('$action',".array2string($checked).','.(int)$use_all.",...)

\n"; + $success = $failed = 0; + if ($use_all) + { + @set_time_limit(0); // switch off the execution time limit, as it's for big selections to small + $query['num_rows'] = -1; // all + $this->get_rows($query,$result,$readonlys); + $checked = array(); + foreach($result as $key => $info) + { + if(is_numeric($key)) + { + $checked[] = $info['id']; + } + } + } + $owner = $query['col_filter']['owner'] ? $query['col_filter']['owner'] : $query['filter']; + $cats = new categories($owner,$query['appname']); + + foreach($checked as $id) { + switch($action) { + case 'delete': + case 'delete_sub': + $cats->delete($id,$action == 'delete_sub',$action != 'delete_sub'); + $action_msg = lang('deleted'); + $success++; + break; + } + } + + return $failed == 0; + } } admin_categories::init_static(); diff --git a/admin/js/global_categories.js b/admin/js/global_categories.js index 5402b93c3a..bbb4489b34 100644 --- a/admin/js/global_categories.js +++ b/admin/js/global_categories.js @@ -14,7 +14,7 @@ function check_owner(element_id) { var all_users = $(document.getElementById(element_id + '[0]')); // If they checked all users, uncheck the others - if(all_users.attr("checked")) { + if(all_users.length > 0 && all_users.attr("checked")) { checkboxes.attr("checked",false); all_users.attr("checked", true); checkboxes = $(':checkbox', document.getElementById(element_id)).filter(':checked'); @@ -25,7 +25,7 @@ function check_owner(element_id) { var seen = [], diff = [], labels = []; for ( var i = 0; i < cat_original_owner.length; i++) { var checkbox = checkboxes.filter('[value="'+cat_original_owner[i]+'"]'); - if(checkbox.filter(':checked').length == 0) { + if(checkbox.filter(':checked').length == 0 && checkbox.get(0) != undefined) { diff.push(cat_original_owner[i]); labels.push($(checkbox.get(0).nextSibling).text()); } diff --git a/admin/setup/etemplates.inc.php b/admin/setup/etemplates.inc.php index 7039023477..eb1abbcbb7 100644 --- a/admin/setup/etemplates.inc.php +++ b/admin/setup/etemplates.inc.php @@ -2,7 +2,7 @@ /** * EGroupware - eTemplates for Application admin * http://www.egroupware.org - * generated by soetemplate::dump4setup() 2011-06-16 09:53 + * generated by soetemplate::dump4setup() 2011-06-21 13:52 * * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @package admin @@ -37,11 +37,39 @@ $templ_data[] = array('name' => 'admin.categories.delete','template' => '','lang { }','modified' => '1308076484',); -$templ_data[] = array('name' => 'admin.categories.edit','template' => '','lang' => '','group' => '0','version' => '1.9.001','data' => 'a:2:{i:0;a:4:{s:4:"type";s:4:"grid";s:4:"data";a:11:{i:0;a:12:{s:2:"c2";s:2:"th";s:2:"c3";s:3:"row";s:2:"c4";s:7:"row,top";s:2:"c5";s:3:"row";s:2:"c7";s:3:"row";s:2:"c6";s:3:"row";s:2:"h7";s:15:",@appname=phpgw";s:2:"h2";s:2:"25";s:2:"h1";s:6:",!@msg";s:2:"c9";s:3:"row";s:2:"c8";s:3:"row";s:2:"h9";s:11:",!@last_mod";}i:1;a:2:{s:1:"A";a:4:{s:4:"type";s:5:"label";s:4:"span";s:13:"all,redItalic";s:5:"align";s:6:"center";s:4:"name";s:3:"msg";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:2;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:9:",,,parent";s:5:"label";s:15:"Parent category";}s:1:"B";a:3:{s:4:"type";s:10:"select-cat";s:4:"size";s:25:"None,,,$cont[appname],,-1";s:4:"name";s:6:"parent";}}i:3;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:7:",,,name";s:5:"label";s:4:"Name";}s:1:"B";a:3:{s:4:"type";s:4:"text";s:4:"size";s:6:"50,150";s:4:"name";s:4:"name";}}i:4;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:14:",,,description";s:5:"label";s:11:"Description";}s:1:"B";a:3:{s:4:"type";s:8:"textarea";s:4:"size";s:4:"5,50";s:4:"name";s:11:"description";}}i:5;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:18:",,,cat_data[color]";s:5:"label";s:5:"Color";}s:1:"B";a:2:{s:4:"type";s:11:"colorpicker";s:4:"name";s:11:"data[color]";}}i:6;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:13:",,,data[icon]";s:5:"label";s:4:"Icon";}s:1:"B";a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:6:"2,,0,0";i:1;a:4:{s:4:"type";s:6:"select";s:4:"name";s:10:"data[icon]";s:4:"size";s:4:"None";s:8:"onchange";s:73:"document.getElementById(\'icon_url\').src = \'$cont[base_url]\' + this.value;";}i:2;a:3:{s:4:"type";s:5:"image";s:4:"name";s:8:"icon_url";s:4:"span";s:9:",leftPad5";}}}i:7;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:11:"Application";}s:1:"B";a:4:{s:4:"type";s:10:"select-app";s:4:"name";s:7:"appname";s:8:"readonly";s:1:"1";s:4:"size";s:16:"All applications";}}i:8;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:8:",,,owner";s:5:"label";s:19:"Limit to members of";}s:1:"B";a:5:{s:4:"type";s:6:"select";s:4:"size";s:1:"3";s:4:"name";s:5:"owner";s:4:"help";s:51:"Limit global category to members of a certain group";s:6:"needed";s:1:"1";}}i:9;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:8:"Modified";}s:1:"B";a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:8:"last_mod";s:8:"readonly";s:1:"1";}}i:10;a:2:{s:1:"A";a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";i:1;a:4:{s:4:"type";s:6:"button";s:5:"label";s:4:"Save";s:4:"name";s:12:"button[save]";s:7:"onclick";s:40:"return check_owner(form::name(\'owner\'));";}i:2;a:4:{s:4:"type";s:6:"button";s:5:"label";s:5:"Apply";s:4:"name";s:13:"button[apply]";s:7:"onclick";s:40:"return check_owner(form::name(\'owner\'));";}}s:1:"B";a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";i:1;a:4:{s:4:"type";s:10:"buttononly";s:4:"name";s:14:"button[cancel]";s:5:"label";s:6:"Cancel";s:7:"onclick";s:15:"window.close();";}i:2;a:6:{s:4:"type";s:10:"buttononly";s:5:"label";s:6:"Delete";s:5:"align";s:5:"right";s:4:"name";s:14:"button[delete]";s:4:"help";s:20:"Delete this category";s:7:"onclick";s:157:"set_style_by_class(\'tr\',\'confirmSubs\',\'visibility\',\'$cont[children]\'?\'visible\':\'collapse\'); set_style_by_class(\'fieldset\',\'confirmDelete\',\'display\',\'block\');";}}}}s:4:"rows";i:10;s:4:"cols";i:2;}i:1;a:2:{s:4:"type";s:8:"template";s:4:"name";s:23:"admin.categories.delete";}}','size' => '','style' => '','modified' => '1308076611',); +$templ_data[] = array('name' => 'admin.categories.edit','template' => '','lang' => '','group' => '0','version' => '1.9.001','data' => 'a:2:{i:0;a:4:{s:4:"type";s:4:"grid";s:4:"data";a:12:{i:0;a:14:{s:2:"c2";s:2:"th";s:2:"c3";s:3:"row";s:2:"c4";s:7:"row,top";s:2:"c7";s:3:"row";s:2:"c6";s:3:"row";s:2:"h2";s:2:"25";s:2:"h1";s:6:",!@msg";s:2:"c9";s:3:"row";s:2:"c8";s:3:"row";s:3:"c10";s:3:"row";s:3:"h10";s:11:",!@last_mod";s:2:"h8";s:15:",@appname=phpgw";s:2:"h5";s:12:",@no_private";s:2:"c5";s:3:"nmr";}i:1;a:2:{s:1:"A";a:4:{s:4:"type";s:5:"label";s:4:"span";s:13:"all,redItalic";s:5:"align";s:6:"center";s:4:"name";s:3:"msg";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:2;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:9:",,,parent";s:5:"label";s:15:"Parent category";}s:1:"B";a:3:{s:4:"type";s:10:"select-cat";s:4:"size";s:25:"None,,,$cont[appname],,-1";s:4:"name";s:6:"parent";}}i:3;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:7:",,,name";s:5:"label";s:4:"Name";}s:1:"B";a:3:{s:4:"type";s:4:"text";s:4:"size";s:6:"50,150";s:4:"name";s:4:"name";}}i:4;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:14:",,,description";s:5:"label";s:11:"Description";}s:1:"B";a:3:{s:4:"type";s:8:"textarea";s:4:"size";s:4:"5,50";s:4:"name";s:11:"description";}}i:5;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"Private";}s:1:"B";a:3:{s:4:"type";s:8:"checkbox";s:4:"name";s:6:"access";s:4:"size";s:14:"private,public";}}i:6;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:18:",,,cat_data[color]";s:5:"label";s:5:"Color";}s:1:"B";a:2:{s:4:"type";s:11:"colorpicker";s:4:"name";s:11:"data[color]";}}i:7;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:13:",,,data[icon]";s:5:"label";s:4:"Icon";}s:1:"B";a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:6:"2,,0,0";i:1;a:4:{s:4:"type";s:6:"select";s:4:"name";s:10:"data[icon]";s:4:"size";s:4:"None";s:8:"onchange";s:73:"document.getElementById(\'icon_url\').src = \'$cont[base_url]\' + this.value;";}i:2;a:3:{s:4:"type";s:5:"image";s:4:"name";s:8:"icon_url";s:4:"span";s:9:",leftPad5";}}}i:8;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:11:"Application";}s:1:"B";a:4:{s:4:"type";s:10:"select-app";s:4:"name";s:7:"appname";s:8:"readonly";s:1:"1";s:4:"size";s:16:"All applications";}}i:9;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:8:",,,owner";s:5:"label";s:19:"Limit to members of";}s:1:"B";a:5:{s:4:"type";s:6:"select";s:4:"size";s:1:"3";s:4:"name";s:5:"owner";s:4:"help";s:51:"Limit global category to members of a certain group";s:6:"needed";s:1:"1";}}i:10;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:8:"Modified";}s:1:"B";a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:8:"last_mod";s:8:"readonly";s:1:"1";}}i:11;a:2:{s:1:"A";a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";i:1;a:4:{s:4:"type";s:6:"button";s:5:"label";s:4:"Save";s:4:"name";s:12:"button[save]";s:7:"onclick";s:40:"return check_owner(form::name(\'owner\'));";}i:2;a:4:{s:4:"type";s:6:"button";s:5:"label";s:5:"Apply";s:4:"name";s:13:"button[apply]";s:7:"onclick";s:40:"return check_owner(form::name(\'owner\'));";}}s:1:"B";a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";i:1;a:4:{s:4:"type";s:10:"buttononly";s:4:"name";s:14:"button[cancel]";s:5:"label";s:6:"Cancel";s:7:"onclick";s:15:"window.close();";}i:2;a:6:{s:4:"type";s:10:"buttononly";s:5:"label";s:6:"Delete";s:5:"align";s:5:"right";s:4:"name";s:14:"button[delete]";s:4:"help";s:20:"Delete this category";s:7:"onclick";s:157:"set_style_by_class(\'tr\',\'confirmSubs\',\'visibility\',\'$cont[children]\'?\'visible\':\'collapse\'); set_style_by_class(\'fieldset\',\'confirmDelete\',\'display\',\'block\');";}}}}s:4:"rows";i:11;s:4:"cols";i:2;}i:1;a:2:{s:4:"type";s:8:"template";s:4:"name";s:23:"admin.categories.delete";}}','size' => '','style' => '','modified' => '1308076611',); -$templ_data[] = array('name' => 'admin.categories.index','template' => '','lang' => '','group' => '0','version' => '1.7.001','data' => 'a:2:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:4:{i:0;a:1:{s:2:"h1";s:6:",!@msg";}i:1;a:1:{s:1:"A";a:4:{s:4:"type";s:5:"label";s:4:"name";s:3:"msg";s:5:"align";s:6:"center";s:4:"span";s:13:"all,redItalic";}}i:2;a:1:{s:1:"A";a:3:{s:4:"type";s:9:"nextmatch";s:4:"size";s:4:"rows";s:4:"name";s:2:"nm";}}i:3;a:1:{s:1:"A";a:4:{s:4:"type";s:10:"buttononly";s:5:"label";s:3:"Add";s:4:"name";s:3:"add";s:7:"onclick";s:193:"window.open(egw::link(\'/index.php\',\'menuaction=admin.admin_categories.edit&appname={$cont[nm][appname]}\'),\'_blank\',\'dependent=yes,width=600,height=300,scrollbars=yes,status=yes\'); return false;";}}}s:4:"rows";i:3;s:4:"cols";i:1;s:4:"size";s:4:"100%";s:7:"options";a:1:{i:0;s:4:"100%";}}i:1;a:2:{s:4:"type";s:8:"template";s:4:"name";s:23:"admin.categories.delete";}}','size' => '100%','style' => '.level0 { font-weight: bold; }','modified' => '1264657515',); +$templ_data[] = array('name' => 'admin.categories.index','template' => '','lang' => '','group' => '0','version' => '1.9.001','data' => 'a:2:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:4:{i:0;a:1:{s:2:"h1";s:6:",!@msg";}i:1;a:1:{s:1:"A";a:4:{s:4:"type";s:5:"label";s:4:"name";s:3:"msg";s:5:"align";s:6:"center";s:4:"span";s:13:"all,redItalic";}}i:2;a:1:{s:1:"A";a:3:{s:4:"type";s:9:"nextmatch";s:4:"size";s:4:"rows";s:4:"name";s:2:"nm";}}i:3;a:1:{s:1:"A";a:4:{s:4:"type";s:10:"buttononly";s:5:"label";s:3:"Add";s:4:"name";s:3:"add";s:7:"onclick";s:187:"window.open(egw::link(\'/index.php\',\'menuaction=$cont[add_link]&cat_id=&appname=$cont[nm][appname]\'),\'_blank\',\'dependent=yes,width=600,height=380,scrollbars=yes,status=yes\'); return false;";}}}s:4:"rows";i:3;s:4:"cols";i:1;s:4:"size";s:4:"100%";s:7:"options";a:1:{i:0;s:4:"100%";}}i:1;a:6:{s:5:"class";s:19:"action_popup prompt";s:4:"name";s:12:"delete_popup";s:4:"type";s:3:"box";s:4:"size";s:1:"1";i:1;a:6:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"3";i:1;a:3:{s:4:"type";s:5:"label";s:5:"label";s:6:"Delete";s:4:"span";s:13:",promptheader";}i:2;a:3:{s:4:"name";s:13:"delete_prompt";s:4:"type";s:5:"label";s:5:"label";s:24:"Delete selected entries?";}i:3;a:5:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"3";i:1;a:4:{s:5:"label";s:12:"Yes - Delete";s:7:"onclick";s:36:"nm_submit_popup(this); return false;";s:4:"name";s:6:"delete";s:4:"type";s:6:"button";}i:2;a:4:{s:5:"label";s:34:"Yes - Delete including sub-entries";s:7:"onclick";s:71:"nm_popup_action.id = \'delete_sub\'; nm_submit_popup(this); return false;";s:4:"name";s:10:"delete_sub";s:4:"type";s:6:"button";}i:3;a:3:{s:5:"label";s:11:"No - Cancel";s:7:"onclick";s:35:"nm_hide_popup(this,\'delete_popup\');";s:4:"type";s:10:"buttononly";}}s:4:"span";s:7:",prompt";}s:4:"span";s:13:",action_popup";}}','size' => '100%','style' => '.level0 { font-weight: bold; } -$templ_data[] = array('name' => 'admin.categories.index.rows','template' => '','lang' => '','group' => '0','version' => '1.7.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:3:{i:0;a:6:{s:2:"c1";s:2:"th";s:2:"c2";s:13:"$row_cont[id]";s:1:"I";s:2:"1%";s:1:"F";s:2:"80";s:1:"E";s:2:"40";s:1:"H";s:2:"30";}i:1;a:9:{s:1:"A";a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:4:"Name";s:4:"name";s:4:"name";}s:1:"B";a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:11:"Description";s:4:"name";s:11:"description";}s:1:"C";a:3:{s:4:"type";s:16:"nextmatch-header";s:4:"name";s:3:"app";s:5:"label";s:11:"Application";}s:1:"D";a:3:{s:4:"type";s:23:"nextmatch-accountfilter";s:5:"label";s:19:"Limit to members of";s:4:"name";s:5:"owner";}s:1:"E";a:4:{s:4:"type";s:16:"nextmatch-header";s:5:"label";s:4:"Icon";s:4:"name";s:4:"icon";s:5:"align";s:6:"center";}s:1:"F";a:3:{s:4:"type";s:16:"nextmatch-header";s:5:"label";s:5:"Color";s:4:"name";s:5:"color";}s:1:"G";a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:8:"Modified";s:4:"name";s:8:"last_mod";}s:1:"H";a:4:{s:4:"type";s:16:"nextmatch-header";s:5:"label";s:8:"Children";s:4:"name";s:4:"subs";s:5:"align";s:6:"center";}s:1:"I";a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"Actions";}}i:2;a:9:{s:1:"A";a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:6:"2,,0,0";i:1;a:2:{s:4:"type";s:4:"html";s:4:"name";s:20:"${row}[level_spacer]";}i:2;a:3:{s:4:"type";s:5:"label";s:4:"name";s:12:"${row}[name]";s:4:"span";s:17:",$row_cont[class]";}}s:1:"B";a:2:{s:4:"type";s:5:"label";s:4:"name";s:19:"${row}[description]";}s:1:"C";a:3:{s:4:"type";s:10:"select-app";s:4:"name";s:15:"${row}[appname]";s:8:"readonly";s:1:"1";}s:1:"D";a:4:{s:4:"type";s:14:"select-account";s:4:"name";s:13:"${row}[owner]";s:8:"readonly";s:1:"1";s:4:"size";s:16:"All users,groups";}s:1:"E";a:4:{s:4:"type";s:5:"image";s:4:"name";s:16:"${row}[icon_url]";s:5:"label";s:23:"{$row_cont[data][icon]}";s:5:"align";s:6:"center";}s:1:"F";a:2:{s:4:"type";s:5:"label";s:4:"name";s:19:"${row}[data][color]";}s:1:"G";a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:16:"${row}[last_mod]";s:8:"readonly";s:1:"1";}s:1:"H";a:3:{s:4:"type";s:5:"label";s:4:"name";s:12:"${row}[subs]";s:5:"align";s:6:"center";}s:1:"I";a:5:{s:4:"type";s:4:"hbox";s:4:"size";s:6:"3,,0,0";i:1;a:5:{s:4:"type";s:10:"buttononly";s:4:"size";s:4:"edit";s:5:"label";s:4:"Edit";s:4:"name";s:19:"edit[$row_cont[id]]";s:7:"onclick";s:185:"window.open(egw::link(\'/index.php\',\'menuaction=admin.admin_categories.edit&cat_id=$row_cont[id]\'),\'_blank\',\'dependent=yes,width=600,height=380,scrollbars=yes,status=yes\'); return false;";}i:2;a:5:{s:4:"type";s:10:"buttononly";s:4:"size";s:3:"new";s:5:"label";s:7:"Add sub";s:4:"name";s:18:"add[$row_cont[id]]";s:7:"onclick";s:208:"window.open(egw::link(\'/index.php\',\'menuaction=admin.admin_categories.edit&parent=$row_cont[id]&appname=$cont[appname]\'),\'_blank\',\'dependent=yes,width=600,height=380,scrollbars=yes,status=yes\'); return false;";}i:3;a:7:{s:4:"type";s:10:"buttononly";s:4:"size";s:6:"delete";s:5:"label";s:6:"Delete";s:4:"name";s:21:"delete[$row_cont[id]]";s:4:"help";s:20:"Delete this category";s:7:"onclick";s:246:"document.getElementById(\'exec[delete][cat_id]\').value=\'$row_cont[id]\'; set_style_by_class(\'tr\',\'confirmSubs\',\'visibility\',\'$row_cont[children]\'?\'visible\':\'collapse\'); set_style_by_class(\'fieldset\',\'confirmDelete\',\'display\',\'block\'); return false;";s:4:"span";s:9:",leftPad5";}}}}s:4:"rows";i:2;s:4:"cols";i:9;s:4:"size";s:4:"100%";s:7:"options";a:1:{i:0;s:4:"100%";}}}','size' => '100%','style' => '','modified' => '1264657599',); +.action_popup { + position: fixed; + top: 200px; + left: 450px; + width: 76ex; + z-index: 20000; + display: none; + border-collapse:collapse; + border-spacing:0px +} +.action_popup-content { + display:block; + padding:2ex; + color:#666666; + margin: -2px -1px 0px -2px; +} +.action_popup > table { + width: 100% +} +.action_popup .promptheader { + padding: 1ex; + width: 100% +} + +.action_select { + width: 100% +}','modified' => '1308602792',); + +$templ_data[] = array('name' => 'admin.categories.index.rows','template' => '','lang' => '','group' => '0','version' => '1.9.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:3:{i:0;a:6:{s:2:"c1";s:2:"th";s:2:"c2";s:13:"$row_cont[id]";s:1:"I";s:2:"1%";s:1:"F";s:2:"80";s:1:"E";s:2:"40";s:1:"H";s:2:"30";}i:1;a:9:{s:1:"A";a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:4:"Name";s:4:"name";s:4:"name";}s:1:"B";a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:11:"Description";s:4:"name";s:11:"description";}s:1:"C";a:3:{s:4:"type";s:16:"nextmatch-header";s:4:"name";s:3:"app";s:5:"label";s:11:"Application";}s:1:"D";a:3:{s:4:"type";s:23:"nextmatch-accountfilter";s:5:"label";s:19:"Limit to members of";s:4:"name";s:5:"owner";}s:1:"E";a:4:{s:4:"type";s:16:"nextmatch-header";s:5:"label";s:4:"Icon";s:4:"name";s:4:"icon";s:5:"align";s:6:"center";}s:1:"F";a:3:{s:4:"type";s:16:"nextmatch-header";s:5:"label";s:5:"Color";s:4:"name";s:5:"color";}s:1:"G";a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:8:"Modified";s:4:"name";s:8:"last_mod";}s:1:"H";a:4:{s:4:"type";s:16:"nextmatch-header";s:5:"label";s:8:"Children";s:4:"name";s:4:"subs";s:5:"align";s:6:"center";}s:1:"I";a:3:{s:4:"type";s:16:"nextmatch-header";s:5:"label";s:7:"Actions";s:4:"name";s:14:"legacy_actions";}}i:2;a:9:{s:1:"A";a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:6:"2,,0,0";i:1;a:2:{s:4:"type";s:4:"html";s:4:"name";s:20:"${row}[level_spacer]";}i:2;a:3:{s:4:"type";s:5:"label";s:4:"name";s:12:"${row}[name]";s:4:"span";s:17:",$row_cont[class]";}}s:1:"B";a:2:{s:4:"type";s:5:"label";s:4:"name";s:19:"${row}[description]";}s:1:"C";a:3:{s:4:"type";s:10:"select-app";s:4:"name";s:15:"${row}[appname]";s:8:"readonly";s:1:"1";}s:1:"D";a:4:{s:4:"type";s:14:"select-account";s:4:"name";s:13:"${row}[owner]";s:8:"readonly";s:1:"1";s:4:"size";s:16:"All users,groups";}s:1:"E";a:4:{s:4:"type";s:5:"image";s:4:"name";s:16:"${row}[icon_url]";s:5:"label";s:23:"{$row_cont[data][icon]}";s:5:"align";s:6:"center";}s:1:"F";a:2:{s:4:"type";s:5:"label";s:4:"name";s:19:"${row}[data][color]";}s:1:"G";a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:16:"${row}[last_mod]";s:8:"readonly";s:1:"1";}s:1:"H";a:3:{s:4:"type";s:5:"label";s:4:"name";s:12:"${row}[subs]";s:5:"align";s:6:"center";}s:1:"I";a:5:{s:4:"type";s:4:"hbox";s:4:"size";s:6:"3,,0,0";i:1;a:5:{s:4:"type";s:10:"buttononly";s:4:"size";s:4:"edit";s:5:"label";s:4:"Edit";s:4:"name";s:19:"edit[$row_cont[id]]";s:7:"onclick";s:174:"window.open(egw::link(\'/index.php\',\'menuaction=$cont[edit_link]&cat_id=$row_cont[id]\'),\'_blank\',\'dependent=yes,width=600,height=380,scrollbars=yes,status=yes\'); return false;";}i:2;a:5:{s:4:"type";s:10:"buttononly";s:4:"size";s:3:"new";s:5:"label";s:7:"Add sub";s:4:"name";s:18:"add[$row_cont[id]]";s:7:"onclick";s:197:"window.open(egw::link(\'/index.php\',\'menuaction=$cont[edit_link]&parent=$row_cont[id]&appname=$cont[appname]\'),\'_blank\',\'dependent=yes,width=600,height=380,scrollbars=yes,status=yes\'); return false;";}i:3;a:7:{s:4:"type";s:10:"buttononly";s:4:"size";s:6:"delete";s:5:"label";s:6:"Delete";s:4:"name";s:21:"delete[$row_cont[id]]";s:4:"help";s:20:"Delete this category";s:7:"onclick";s:246:"document.getElementById(\'exec[delete][cat_id]\').value=\'$row_cont[id]\'; set_style_by_class(\'tr\',\'confirmSubs\',\'visibility\',\'$row_cont[children]\'?\'visible\':\'collapse\'); set_style_by_class(\'fieldset\',\'confirmDelete\',\'display\',\'block\'); return false;";s:4:"span";s:9:",leftPad5";}}}}s:4:"rows";i:2;s:4:"cols";i:9;s:4:"size";s:4:"100%";s:7:"options";a:1:{i:0;s:4:"100%";}}}','size' => '100%','style' => '','modified' => '1264657599',); $templ_data[] = array('name' => 'admin.cmds','template' => '','lang' => '','group' => '0','version' => '1.5.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:0:{}i:1;a:1:{s:1:"A";a:3:{s:4:"type";s:9:"nextmatch";s:4:"size";s:15:"admin.cmds.rows";s:4:"name";s:2:"nm";}}}s:4:"rows";i:1;s:4:"cols";i:1;s:4:"size";s:4:"100%";s:7:"options";a:1:{i:0;s:4:"100%";}}}','size' => '100%','style' => '','modified' => '1195518120',); diff --git a/admin/templates/default/categories.index.xet b/admin/templates/default/categories.index.xet index fe8e60ef86..acc61409ed 100644 --- a/admin/templates/default/categories.index.xet +++ b/admin/templates/default/categories.index.xet @@ -1,7 +1,7 @@ -