simplyfied UI and taking into account that not all apps use group acl in same way

This commit is contained in:
Ralf Becker 2013-09-04 09:48:18 +00:00
parent 74ec0f6651
commit ed0abde9ae
5 changed files with 81 additions and 61 deletions

View File

@ -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);

View File

@ -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<br><a href="setup/" target="setup">setup</a> [manage applications] !!!) admin de (Zur Installation neuer Anwendungen verwenden Sie bitte<br><a href="setup/" target="setup">Setup</a> [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<br>(0-6, 0=sun) admin de Wochentag<br>(0-6, 0=Sonntag)
db backup and restore admin de DB Datensicherung und Wiederherstellung

View File

@ -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<br><a href="setup/" target="setup">setup</a> [manage applications] !!!) admin en To install new applications use<br><a href="setup/" target="setup">Setup</a> [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<br>(0-6, 0=sun) admin en Day of week<br>(0-6, 0=Sun)
db backup and restore admin en DB backup and restore

View File

@ -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',);

View File

@ -20,9 +20,9 @@
<rows>
<row>
<description/>
<nextmatch-customfilter id="acl_appname" options="select-app,All applications"/>
<nextmatch-accountfilter label="Data from" id="acl_account" options="All accounts,both"/>
<nextmatch-accountfilter label="Access by" id="acl_location" options="All accounts,both"/>
<nextmatch-sortheader label="Application" id="acl_appname"/>
<nextmatch-sortheader label="Data from" id="acl_account"/>
<nextmatch-sortheader label="Access by" id="acl_location"/>
<nextmatch-header label="Read" id="read"/>
<nextmatch-header label="Add" id="add"/>
<nextmatch-header label="Edit" id="edit"/>