diff --git a/admin/inc/class.admin_acl.inc.php b/admin/inc/class.admin_acl.inc.php index 1176d48bcd..b8e6b737ef 100644 --- a/admin/inc/class.admin_acl.inc.php +++ b/admin/inc/class.admin_acl.inc.php @@ -28,6 +28,21 @@ class admin_acl 'acl' => true, ); + /** + * Reference to global acl class (instanciated for current user) + * + * @var acl + */ + protected $acl; + + /** + * Constructor + */ + public function __construct() + { + $this->acl = $GLOBALS['egw']->acl; + } + /** * Edit or add an ACL entry * @@ -44,10 +59,8 @@ class admin_acl if (isset($_GET['id'])) { list($app, $account, $location) = explode(':', $_GET['id'], 3); - $acl = (int)$account == (int)$GLOBALS['egw_info']['user']['account_id'] ? - $GLOBALS['egw']->acl : new acl($account); - if (!($rights = $acl->get_rights($location, $app))) + if (!($rights = $this->acl->get_specific_rights_for_account($account, $location, $app))) { egw_framework::window_close(lang('ACL entry not found!')); } @@ -68,12 +81,7 @@ class admin_acl ); if ($location == 'run') { - if (!isset($acl)) - { - $acl = (int)$account == (int)$GLOBALS['egw_info']['user']['account_id'] ? - $GLOBALS['egw']->acl : new acl($account); - } - $content['apps'] = array_keys($acl->get_user_applications($account, false, false)); // false: only direct rights, no memberships + $content['apps'] = array_keys($this->acl->get_user_applications($account, false, false)); // false: only direct rights, no memberships } } $acl_rights = $GLOBALS['egw']->hooks->process(array( @@ -86,11 +94,11 @@ class admin_acl if ($content['acl_location'] == 'run') { - self::save_run_rights($content); + $this->save_run_rights($content); } else { - self::save_rights($content); + $this->save_rights($content); } egw_framework::window_close(); } @@ -148,23 +156,22 @@ class admin_acl * * @param array $content */ - private static function save_run_rights(array $content) + protected function save_run_rights(array $content) { - $acl = new acl($content['acl_account']); - $old_apps = array_keys($acl->get_user_applications($content['acl_account'], false, false)); + $old_apps = array_keys($this->acl->get_user_applications($content['acl_account'], false, false)); $ids = array(); // add new apps $added_apps = array_diff($content['apps'], $old_apps); foreach($added_apps as $app) { - $acl->add_repository($app, 'run', $content['acl_account'], 1); + $this->acl->add_repository($app, 'run', $content['acl_account'], 1); } // remove no longer checked apps $removed_apps = array_diff($old_apps, $content['apps']); $deleted_ids = array(); foreach($removed_apps as $app) { - $acl->delete_repository($app, 'run', $content['acl_account']); + $this->acl->delete_repository($app, 'run', $content['acl_account']); $deleted_ids[] = $app.':'.$content['acl_account'].':run'; } //error_log(__METHOD__."() apps=".array2string($content['apps']).", old_apps=".array2string($old_apps).", added_apps=".array2string($added_apps).", removed_apps=".array2string($removed_apps)); @@ -192,9 +199,8 @@ class admin_acl * * @param array $content */ - private static function save_rights(array $content) + protected function save_rights(array $content) { - $acl = new acl($content['acl_account']); // assamble rights again $rights = (int)$content['preserve_rights']; foreach($content['acl'] as $right) @@ -205,18 +211,18 @@ class admin_acl $content['acl_appname'].':'.$content['acl_account'].':'.$content['acl_location']; //error_log(__METHOD__."() id=$id, acl=".array2string($content['acl'])." --> rights=$rights"); - if ($acl->get_specific_rights($content['acl_location'], $content['acl_appname']) == $rights) + if ($this->acl->get_specific_rights_for_account($content['acl_account'], $content['acl_location'], $content['acl_appname']) == $rights) { // nothing changed --> nothing to do } elseif (!$rights) // all rights removed --> delete it { - $acl->delete_repository($content['acl_appname'], $content['acl_location'], $content['acl_account']); + $this->acl->delete_repository($content['acl_appname'], $content['acl_location'], $content['acl_account']); egw_framework::refresh_opener(lang('ACL deleted.'), 'admin', $id, 'delete'); } else { - $acl->add_repository($content['acl_appname'], $content['acl_location'], $content['acl_account'], $rights); + $this->acl->add_repository($content['acl_appname'], $content['acl_location'], $content['acl_account'], $rights); if ($content['id']) { egw_framework::refresh_opener(lang('ACL updated.'), 'admin', $id, 'edit'); @@ -235,7 +241,7 @@ class admin_acl * @param array &$rows=null * @return int total number of rows available */ - public static function get_rows(array $query, array &$rows=null) + public static function get_rows(array $query, array &$rows=null, array &$sel_options=null) { $so_sql = new so_sql('phpgwapi', acl::TABLE, null, '', true); @@ -254,9 +260,7 @@ class admin_acl egw_cache::setSession(__CLASS__, 'state', array( 'account_id' => $query['account_id'], 'filter' => $query['filter'], - 'acl_appname' => $query['col_filter']['acl_appname'], - 'acl_location' => $query['col_filter']['acl_location'], - 'acl_account' => $query['col_filter']['acl_account'], + 'acl_appname' => $query['filter2'], )); if ($GLOBALS['egw_info']['user']['preferences']['admin']['acl_filter'] != $query['filter']) @@ -266,14 +270,11 @@ class admin_acl } switch($query['filter']) { - default: case 'run': $query['col_filter']['acl_location'] = 'run'; - if (empty($query['col_filter']['acl_account'])) - { - $query['col_filter']['acl_account'] = $memberships; - } + $query['col_filter']['acl_account'] = $memberships; break; + default: case 'other': //$query['col_filter'][] = "acl_location!='run'"; // remove everything not an account-id in location, like category based acl @@ -285,20 +286,33 @@ class admin_acl { $query['col_filter'][] = "acl_location SIMILAR TO '-?[0-9]+'"; } - if (empty($query['col_filter']['acl_account'])) + // get apps not using group-acl (eg. Addressbook) or using it only partialy (eg. InfoLog) + $not_enum_group_acls = $GLOBALS['egw']->hooks->process('not_enum_group_acls', array(), true); + //error_log(__METHOD__."(filter=$query[filter]) not_enum_group_acl=".array2string($not_enum_group_acls)); + if ($not_enum_group_acls) { - $query['col_filter']['acl_account'] = $memberships; + $sql = '(CASE acl_appname'; + foreach($not_enum_group_acls as $app => $groups) + { + $sql .= ' WHEN '.$GLOBALS['egw']->db->quote($app).' THEN '.$GLOBALS['egw']->db->expression(acl::TABLE, array( + 'acl_account' => $groups === true ? $query['account_id'] : array_diff($memberships, $groups), + )); + } + $sql .= ' ELSE '; } + $sql .= $GLOBALS['egw']->db->expression(acl::TABLE, array( + 'acl_account' => $memberships, + )); + if ($not_enum_group_acls) $sql .= ' END)'; + $query['col_filter'][] = $sql; break; case 'own': - if (empty($query['col_filter']['acl_location'])) - { - $query['col_filter']['acl_location'] = $memberships;//$query['account_id']; - } + $query['col_filter']['acl_location'] = $memberships; break; } // do NOT list group-memberships and other non-ACL stuff here + $query['col_filter']['acl_appname'] = $query['filter2']; if (empty($query['col_filter']['acl_appname']) && $query['filter'] != 'run') { //$query['col_filter'][] = "NOT acl_appname IN ('phpgw_group','sqlfs')"; @@ -382,14 +396,7 @@ class admin_acl self::check_access($account_id, $location); // throws exception, if no rights - if ((int)$account_id == (int)$GLOBALS['egw_info']['user']['account_id']) - { - $acl = $GLOBALS['egw']->acl; - } - else - { - $acl = new acl($account_id); - } + $acl = $GLOBALS['egw']->acl; if (!(int)$rights) // this also handles taking away all rights as delete { @@ -436,30 +443,31 @@ class admin_acl $content['nm'] = array( 'get_rows' => 'admin_acl::get_rows', 'no_cat' => true, - 'filter' => $GLOBALS['egw_info']['user']['preferences']['admin']['acl_filter'], - 'no_filter2' => true, + 'filter' => !empty($_GET['acl_filter']) ? $_GET['acl_filter'] : + $GLOBALS['egw_info']['user']['preferences']['admin']['acl_filter'], + 'filter2' => !empty($_GET['acl_app']) ? $_GET['acl_app'] : '', 'lettersearch' => false, - //'order' => 'account_lid', + 'order' => 'acl_appname', 'sort' => 'ASC', 'row_id' => 'id', - //'default_cols' => '!account_id,account_created', + 'account_id' => isset($_GET['account_id']) && (int)$_GET['account_id'] ? (int)(int)$_GET['account_id'] : + $GLOBALS['egw_info']['user']['acount_id'], 'actions' => self::get_actions(), 'acl_rights' => $GLOBALS['egw']->hooks->process(array( 'location' => 'acl_rights', 'owner' => $query['account_id'], ), array(), true), ); - if (isset($_GET['account_id']) && (int)$_GET['account_id']) - { - $content['nm']['account_id'] = (int)$_GET['account_id']; - $content['nm']['order'] = 'acl_appname'; - } + $user = common::grab_owner_name($content['nm']['account_id']); $sel_options = array( 'filter' => array( - 'other' => 'Access to my data by others', - 'own' => 'My access to other data', - 'run' => 'Run rights for applications', + 'other' => lang('Access to %1 data by others', $user), + 'own' => lang('%1 access to other data', $user), + 'run' => lang('%1 run rights for applications', $user), ), + 'filter2' => array( + '' => lang('All applications'), + )+etemplate_widget_menupopup::app_options('enabled'), ); $tpl->exec('admin.admin_acl.index', $content, $sel_options); diff --git a/admin/lang/egw_de.lang b/admin/lang/egw_de.lang index 4ab46cdb3e..3666643a2a 100644 --- a/admin/lang/egw_de.lang +++ b/admin/lang/egw_de.lang @@ -1,5 +1,6 @@ %1 - %2 of %3 user accounts admin de %1 - %2 von %3 Benutzerkonten %1 - %2 of %3 user groups admin de %1 - %2 von %3 Benutzergruppen +%1 access to other data admin de Zugriff von %1 auf Daten von anderen %1 acl records of not (longer) existing accounts deleted. admin de %1 ACL Einträge von nicht (mehr) existierenden Accounts gelöscht. %1 categories of not (longer) existing accounts deleted. admin de %1 Kategorien von nicht (mehr) existierenden Accounts gelöscht. %1 category(s) %2 admin de %1 Kategorie(n) %2 @@ -11,12 +12,16 @@ %1 not found or not executable !!! admin de %1 nicht gefunden oder nicht ausführbar !!! %1 phrases saved. admin de %1 Phrasen gespeichert. %1 rights for %2 and applications %3 admin de %1 Rechte für %2 und Anwendung(en) %3 +%1 run rights for applications admin de Ausführungsrechte für Anwendungen von %1 %1 sessions killed admin de %1 Sitzungen beendet %1 user %2 admin de %1 Benutzer %2 (default no, leave it off if you dont use it) admin de (Vorgabe Nein, ausgeschaltet lassen, wenn nicht benutzt) (stored password will not be shown here) admin de (Gespeichertes Passwort wird hier nicht angezeigt) (to install new applications use
setup [manage applications] !!!) admin de (Zur Installation neuer Anwendungen verwenden Sie bitte
Setup [Anwendungen Verwalten] !!!) - type admin de -Typ +access by admin de Zugriff durch +access control admin de Zugriffskontrolle +access to %1 data by others admin de Zugriff auf Daten von %1 durch andere accesslog and bruteforce defense admin de Zugangsprotokoll und Abwehr von Brute-Force-Angriffen account "%1" has no email address --> not notified! admin de Benutzer "%1" hat keine EMail Adresse --> nicht benachrichtigt! account "%1" has no plaintext password! admin de Benutzer "%1" hat kein Klartext Passwort! @@ -158,6 +163,7 @@ custom fields admin de Benutzerdefinierte Felder custom translation admin de Eigene Übersetzung cyrus imap server admin de Cyrus IMAP Server data admin de Daten +data from admin de Daten von day admin de Tag day of week
(0-6, 0=sun) admin de Wochentag
(0-6, 0=Sonntag) db backup and restore admin de DB Datensicherung und Wiederherstellung diff --git a/admin/lang/egw_en.lang b/admin/lang/egw_en.lang index 3dd6a10eb4..da86704ed0 100644 --- a/admin/lang/egw_en.lang +++ b/admin/lang/egw_en.lang @@ -1,5 +1,6 @@ %1 - %2 of %3 user accounts admin en %1 - %2 of %3 user accounts %1 - %2 of %3 user groups admin en %1 - %2 of %3 user groups +%1 access to other data admin en %1 access to other data %1 acl records of not (longer) existing accounts deleted. admin en %1 ACL records of not longer existing accounts deleted. %1 categories of not (longer) existing accounts deleted. admin en %1 categories of not (longer) existing accounts deleted. %1 category(s) %2 admin en %1 category(s) %2 @@ -11,12 +12,16 @@ %1 not found or not executable !!! admin en %1 not found or not executable! %1 phrases saved. admin en %1 phrases saved. %1 rights for %2 and applications %3 admin en %1 rights for %2 and applications %3 . +%1 run rights for applications admin en %1 run rights for applications %1 sessions killed admin en %1 sessions killed. %1 user %2 admin en %1 user %2 (default no, leave it off if you dont use it) admin en Default = No, leave it off if you dont use it (stored password will not be shown here) admin en Stored password will not be shown here! (to install new applications use
setup [manage applications] !!!) admin en To install new applications use
Setup [Manage Applications]! - type admin en - type +access by admin en Access by +access control admin en Access control +access to %1 data by others admin en Access to %1 data by others accesslog and bruteforce defense admin en AccessLog and BruteForce defense account "%1" has no email address --> not notified! admin en Account "%1" has no email address --> not notified! account "%1" has no plaintext password! admin en Account "%1" has NO plaintext password! @@ -158,6 +163,7 @@ custom fields admin en Custom fields custom translation admin en Custom translation cyrus imap server admin en Cyrus IMAP Server data admin en Data +data from admin en Data from day admin en Day day of week
(0-6, 0=sun) admin en Day of week
(0-6, 0=Sun) db backup and restore admin en DB backup and restore diff --git a/admin/setup/etemplates.inc.php b/admin/setup/etemplates.inc.php index 894b93bcb8..7079fac459 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() 2013-09-02 11:13 + * generated by soetemplate::dump4setup() 2013-09-02 18:55 * * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @package admin @@ -30,7 +30,7 @@ $templ_data[] = array('name' => 'admin.acl','template' => '','lang' => '','group $templ_data[] = array('name' => 'admin.acl.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:6:{i:0;a:6:{s:2:"h2";s:8:",,header";s:2:"h3";s:25:",@acl_location=run,header";s:2:"h1";s:25:",@acl_location=run,header";s:2:"c4";s:4:",top";s:2:"h4";s:18:",@acl_location=run";s:2:"h5";s:19:",!@acl_location=run";}i:1;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:11:"Application";}s:1:"B";a:5:{s:4:"type";s:6:"select";s:4:"size";s:10:"Select one";s:4:"name";s:11:"acl_appname";s:6:"needed";s:1:"1";s:8:"onchange";i:1;}}i:2;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:5:"label";s:9:"Data from";s:4:"size";s:14:",,,acl_account";}s:1:"B";a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:11:"acl_account";s:6:"needed";s:1:"1";}}i:3;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:5:"label";s:9:"Access by";s:4:"size";s:15:",,,acl_location";}s:1:"B";a:2:{s:4:"type";s:14:"select-account";s:4:"name";s:12:"acl_location";}}i:4;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:6:"Rights";}s:1:"B";a:5:{s:4:"type";s:4:"grid";s:7:"options";a:0:{}s:4:"data";a:2:{i:0;a:0:{}i:1;a:1:{s:1:"A";a:5:{s:4:"type";s:8:"checkbox";s:5:"label";s:12:"@label[$row]";s:4:"name";s:9:"acl[$row]";s:4:"span";s:3:"all";s:4:"size";s:22:"{$cont[right][$row]},0";}}}s:4:"rows";i:1;s:4:"cols";i:1;}}i:5;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:5:"label";s:12:"Applications";s:4:"size";s:7:",,,apps";}s:1:"B";a:3:{s:4:"type";s:10:"select-app";s:4:"size";s:16:"8,,enabled,,,,,0";s:4:"name";s:4:"apps";}}}s:4:"rows";i:5;s:4:"cols";i:2;}i:1;a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";i:1;a:3:{s:4:"type";s:6:"button";s:5:"label";s:4:"Save";s:4:"name";s:4:"save";}i:2;a:4:{s:4:"type";s:6:"button";s:4:"name";s:6:"cancel";s:5:"label";s:6:"Cancel";s:7:"onclick";s:15:"window.close();";}}}','size' => '','style' => '','modified' => '1377602915',); -$templ_data[] = array('name' => 'admin.acl.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:1:{s:1:"A";s:2:"24";}i:1;a:12:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:3:{s:4:"type";s:22:"nextmatch-customfilter";s:4:"name";s:11:"acl_appname";s:4:"size";s:27:"select-app,All applications";}s:1:"C";a:4:{s:4:"type";s:23:"nextmatch-accountfilter";s:4:"size";s:17:"All accounts,both";s:4:"name";s:11:"acl_account";s:5:"label";s:9:"Data from";}s:1:"D";a:4:{s:4:"type";s:23:"nextmatch-accountfilter";s:4:"size";s:17:"All accounts,both";s:4:"name";s:12:"acl_location";s:5:"label";s:9:"Access by";}s:1:"E";a:3:{s:4:"type";s:16:"nextmatch-header";s:5:"label";s:4:"Read";s:4:"name";s:4:"read";}s:1:"F";a:3:{s:4:"type";s:16:"nextmatch-header";s:5:"label";s:3:"Add";s:4:"name";s:3:"add";}s:1:"G";a:3:{s:4:"type";s:16:"nextmatch-header";s:5:"label";s:4:"Edit";s:4:"name";s:4:"edit";}s:1:"H";a:3:{s:4:"type";s:16:"nextmatch-header";s:5:"label";s:6:"Delete";s:4:"name";s:6:"delete";}s:1:"I";a:3:{s:4:"type";s:16:"nextmatch-header";s:5:"label";s:7:"Private";s:4:"name";s:7:"private";}s:1:"J";a:3:{s:4:"type";s:16:"nextmatch-header";s:5:"label";s:8:"Custom 1";s:4:"name";s:7:"custom1";}s:1:"K";a:3:{s:4:"type";s:16:"nextmatch-header";s:5:"label";s:8:"Custom 2";s:4:"name";s:7:"custom2";}s:1:"L";a:3:{s:4:"type";s:16:"nextmatch-header";s:5:"label";s:8:"Custom 3";s:4:"name";s:7:"custom3";}}i:2;a:12:{s:1:"A";a:4:{s:4:"type";s:5:"image";s:4:"span";s:13:",admin_aclApp";s:4:"name";s:29:"$row_cont[acl_appname]/navbar";s:5:"align";s:6:"center";}s:1:"B";a:3:{s:4:"type";s:10:"select-app";s:4:"name";s:19:"${row}[acl_appname]";s:8:"readonly";s:1:"1";}s:1:"C";a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:19:"${row}[acl_account]";s:8:"readonly";s:1:"1";}s:1:"D";a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:20:"${row}[acl_location]";s:8:"readonly";s:1:"1";}s:1:"E";a:2:{s:4:"type";s:5:"label";s:4:"name";s:12:"${row}[acl1]";}s:1:"F";a:2:{s:4:"type";s:5:"label";s:4:"name";s:12:"${row}[acl2]";}s:1:"G";a:2:{s:4:"type";s:5:"label";s:4:"name";s:12:"${row}[acl4]";}s:1:"H";a:2:{s:4:"type";s:5:"label";s:4:"name";s:12:"${row}[acl8]";}s:1:"I";a:2:{s:4:"type";s:5:"label";s:4:"name";s:13:"${row}[acl16]";}s:1:"J";a:2:{s:4:"type";s:5:"label";s:4:"name";s:13:"${row}[acl64]";}s:1:"K";a:2:{s:4:"type";s:5:"label";s:4:"name";s:14:"${row}[acl128]";}s:1:"L";a:2:{s:4:"type";s:5:"label";s:4:"name";s:14:"${row}[acl256]";}}}s:4:"rows";i:2;s:4:"cols";i:12;s:4:"size";s:4:"100%";s:7:"options";a:1:{i:0;s:4:"100%";}}}','size' => '100%','style' => '','modified' => '1376413969',); +$templ_data[] = array('name' => 'admin.acl.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:1:{s:1:"A";s:2:"24";}i:1;a:12:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:4:"name";s:11:"acl_appname";s:5:"label";s:11:"Application";}s:1:"C";a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:4:"name";s:11:"acl_account";s:5:"label";s:9:"Data from";}s:1:"D";a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:4:"name";s:12:"acl_location";s:5:"label";s:9:"Access by";}s:1:"E";a:3:{s:4:"type";s:16:"nextmatch-header";s:5:"label";s:4:"Read";s:4:"name";s:4:"read";}s:1:"F";a:3:{s:4:"type";s:16:"nextmatch-header";s:5:"label";s:3:"Add";s:4:"name";s:3:"add";}s:1:"G";a:3:{s:4:"type";s:16:"nextmatch-header";s:5:"label";s:4:"Edit";s:4:"name";s:4:"edit";}s:1:"H";a:3:{s:4:"type";s:16:"nextmatch-header";s:5:"label";s:6:"Delete";s:4:"name";s:6:"delete";}s:1:"I";a:3:{s:4:"type";s:16:"nextmatch-header";s:5:"label";s:7:"Private";s:4:"name";s:7:"private";}s:1:"J";a:3:{s:4:"type";s:16:"nextmatch-header";s:5:"label";s:8:"Custom 1";s:4:"name";s:7:"custom1";}s:1:"K";a:3:{s:4:"type";s:16:"nextmatch-header";s:5:"label";s:8:"Custom 2";s:4:"name";s:7:"custom2";}s:1:"L";a:3:{s:4:"type";s:16:"nextmatch-header";s:5:"label";s:8:"Custom 3";s:4:"name";s:7:"custom3";}}i:2;a:12:{s:1:"A";a:4:{s:4:"type";s:5:"image";s:4:"span";s:13:",admin_aclApp";s:4:"name";s:29:"$row_cont[acl_appname]/navbar";s:5:"align";s:6:"center";}s:1:"B";a:3:{s:4:"type";s:10:"select-app";s:4:"name";s:19:"${row}[acl_appname]";s:8:"readonly";s:1:"1";}s:1:"C";a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:19:"${row}[acl_account]";s:8:"readonly";s:1:"1";}s:1:"D";a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:20:"${row}[acl_location]";s:8:"readonly";s:1:"1";}s:1:"E";a:2:{s:4:"type";s:5:"label";s:4:"name";s:12:"${row}[acl1]";}s:1:"F";a:2:{s:4:"type";s:5:"label";s:4:"name";s:12:"${row}[acl2]";}s:1:"G";a:2:{s:4:"type";s:5:"label";s:4:"name";s:12:"${row}[acl4]";}s:1:"H";a:2:{s:4:"type";s:5:"label";s:4:"name";s:12:"${row}[acl8]";}s:1:"I";a:2:{s:4:"type";s:5:"label";s:4:"name";s:13:"${row}[acl16]";}s:1:"J";a:2:{s:4:"type";s:5:"label";s:4:"name";s:13:"${row}[acl64]";}s:1:"K";a:2:{s:4:"type";s:5:"label";s:4:"name";s:14:"${row}[acl128]";}s:1:"L";a:2:{s:4:"type";s:5:"label";s:4:"name";s:14:"${row}[acl256]";}}}s:4:"rows";i:2;s:4:"cols";i:12;s:4:"size";s:4:"100%";s:7:"options";a:1:{i:0;s:4:"100%";}}}','size' => '100%','style' => '','modified' => '1376413969',); $templ_data[] = array('name' => 'admin.applications','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:0:{}i:1;a:1:{s:1:"A";a:4:{s:4:"type";s:9:"nextmatch";s:4:"size";s:4:"rows";s:4:"span";s:3:"all";s:4:"name";s:2:"nm";}}i:2;a:1:{s:1:"A";a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";i:1;a:3:{s:4:"type";s:6:"button";s:5:"label";s:28:"Number applications serially";s:4:"name";s:6:"number";}i:2;a:2:{s:4:"type";s:5:"label";s:5:"label";s:157:"Number the applications serially. If they are not numbered serially, sorting the applications could work wrong. This will not change the application\'s order.";}}}}s:4:"rows";i:2;s:4:"cols";i:1;s:4:"size";s:7:"100%,,0";s:7:"options";a:2:{i:0;s:4:"100%";i:2;s:1:"0";}}}','size' => '100%,,0','style' => '','modified' => '1276610727',); diff --git a/admin/templates/default/acl.xet b/admin/templates/default/acl.xet index fdf9b433fb..e47b984311 100644 --- a/admin/templates/default/acl.xet +++ b/admin/templates/default/acl.xet @@ -20,9 +20,9 @@ - - - + + +