summaryrefslogtreecommitdiff
path: root/plugins/acl
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/acl')
-rw-r--r--plugins/acl/acl.js351
-rw-r--r--plugins/acl/acl.php715
-rw-r--r--plugins/acl/config.inc.php.dist19
-rw-r--r--plugins/acl/localization/de_DE.inc83
-rw-r--r--plugins/acl/localization/en_US.inc83
-rw-r--r--plugins/acl/localization/pl_PL.inc83
-rw-r--r--plugins/acl/package.xml63
-rw-r--r--plugins/acl/skins/default/acl.css100
-rw-r--r--plugins/acl/skins/default/images/enabled.pngbin674 -> 0 bytes
-rw-r--r--plugins/acl/skins/default/images/partial.pngbin389 -> 0 bytes
-rw-r--r--plugins/acl/skins/default/templates/table.html54
-rw-r--r--plugins/acl/skins/larry/acl.css113
-rw-r--r--plugins/acl/skins/larry/images/enabled.pngbin674 -> 0 bytes
-rw-r--r--plugins/acl/skins/larry/images/partial.pngbin389 -> 0 bytes
-rw-r--r--plugins/acl/skins/larry/templates/table.html34
15 files changed, 0 insertions, 1698 deletions
diff --git a/plugins/acl/acl.js b/plugins/acl/acl.js
deleted file mode 100644
index aa9e06d3d..000000000
--- a/plugins/acl/acl.js
+++ /dev/null
@@ -1,351 +0,0 @@
-/**
- * ACL plugin script
- *
- * @version @package_version@
- * @author Aleksander Machniak <alec@alec.pl>
- */
-
-if (window.rcmail) {
- rcmail.addEventListener('init', function() {
- if (rcmail.gui_objects.acltable) {
- rcmail.acl_list_init();
- // enable autocomplete on user input
- if (rcmail.env.acl_users_source) {
- rcmail.init_address_input_events($('#acluser'), {action:'settings/plugin.acl-autocomplete'});
- // fix inserted value
- rcmail.addEventListener('autocomplete_insert', function(e) {
- if (e.field.id != 'acluser')
- return;
-
- var value = e.insert;
- // get UID from the entry value
- if (value.match(/\s*\(([^)]+)\)[, ]*$/))
- value = RegExp.$1;
- e.field.value = value;
- });
- }
- }
-
- rcmail.enable_command('acl-create', 'acl-save', 'acl-cancel', 'acl-mode-switch', true);
- rcmail.enable_command('acl-delete', 'acl-edit', false);
- });
-}
-
-// Display new-entry form
-rcube_webmail.prototype.acl_create = function()
-{
- this.acl_init_form();
-}
-
-// Display ACL edit form
-rcube_webmail.prototype.acl_edit = function()
-{
- // @TODO: multi-row edition
- var id = this.acl_list.get_single_selection();
- if (id)
- this.acl_init_form(id);
-}
-
-// ACL entry delete
-rcube_webmail.prototype.acl_delete = function()
-{
- var users = this.acl_get_usernames();
-
- if (users && users.length && confirm(this.get_label('acl.deleteconfirm'))) {
- this.http_request('settings/plugin.acl', '_act=delete&_user='+urlencode(users.join(','))
- + '&_mbox='+urlencode(this.env.mailbox),
- this.set_busy(true, 'acl.deleting'));
- }
-}
-
-// Save ACL data
-rcube_webmail.prototype.acl_save = function()
-{
- var user = $('#acluser').val(), rights = '', type;
-
- $(':checkbox', this.env.acl_advanced ? $('#advancedrights') : sim_ul = $('#simplerights')).map(function() {
- if (this.checked)
- rights += this.value;
- });
-
- if (type = $('input:checked[name=usertype]').val()) {
- if (type != 'user')
- user = type;
- }
-
- if (!user) {
- alert(this.get_label('acl.nouser'));
- return;
- }
- if (!rights) {
- alert(this.get_label('acl.norights'));
- return;
- }
-
- this.http_request('settings/plugin.acl', '_act=save'
- + '&_user='+urlencode(user)
- + '&_acl=' +rights
- + '&_mbox='+urlencode(this.env.mailbox)
- + (this.acl_id ? '&_old='+this.acl_id : ''),
- this.set_busy(true, 'acl.saving'));
-}
-
-// Cancel/Hide form
-rcube_webmail.prototype.acl_cancel = function()
-{
- this.ksearch_blur();
- this.acl_form.hide();
-}
-
-// Update data after save (and hide form)
-rcube_webmail.prototype.acl_update = function(o)
-{
- // delete old row
- if (o.old)
- this.acl_remove_row(o.old);
- // make sure the same ID doesn't exist
- else if (this.env.acl[o.id])
- this.acl_remove_row(o.id);
-
- // add new row
- this.acl_add_row(o, true);
- // hide autocomplete popup
- this.ksearch_blur();
- // hide form
- this.acl_form.hide();
-}
-
-// Switch table display mode
-rcube_webmail.prototype.acl_mode_switch = function(elem)
-{
- this.env.acl_advanced = !this.env.acl_advanced;
- this.enable_command('acl-delete', 'acl-edit', false);
- this.http_request('settings/plugin.acl', '_act=list'
- + '&_mode='+(this.env.acl_advanced ? 'advanced' : 'simple')
- + '&_mbox='+urlencode(this.env.mailbox),
- this.set_busy(true, 'loading'));
-}
-
-// ACL table initialization
-rcube_webmail.prototype.acl_list_init = function()
-{
- this.acl_list = new rcube_list_widget(this.gui_objects.acltable,
- {multiselect:true, draggable:false, keyboard:true, toggleselect:true});
- this.acl_list.addEventListener('select', function(o) { rcmail.acl_list_select(o); });
- this.acl_list.addEventListener('dblclick', function(o) { rcmail.acl_list_dblclick(o); });
- this.acl_list.addEventListener('keypress', function(o) { rcmail.acl_list_keypress(o); });
- this.acl_list.init();
-}
-
-// ACL table row selection handler
-rcube_webmail.prototype.acl_list_select = function(list)
-{
- rcmail.enable_command('acl-delete', list.selection.length > 0);
- rcmail.enable_command('acl-edit', list.selection.length == 1);
- list.focus();
-}
-
-// ACL table double-click handler
-rcube_webmail.prototype.acl_list_dblclick = function(list)
-{
- this.acl_edit();
-}
-
-// ACL table keypress handler
-rcube_webmail.prototype.acl_list_keypress = function(list)
-{
- if (list.key_pressed == list.ENTER_KEY)
- this.command('acl-edit');
- else if (list.key_pressed == list.DELETE_KEY || list.key_pressed == list.BACKSPACE_KEY)
- if (!this.acl_form || !this.acl_form.is(':visible'))
- this.command('acl-delete');
-}
-
-// Reloads ACL table
-rcube_webmail.prototype.acl_list_update = function(html)
-{
- $(this.gui_objects.acltable).html(html);
- this.acl_list_init();
-}
-
-// Returns names of users in selected rows
-rcube_webmail.prototype.acl_get_usernames = function()
-{
- var users = [], n, len, cell, row,
- list = this.acl_list,
- selection = list.get_selection();
-
- for (n=0, len=selection.length; n<len; n++) {
- if (this.env.acl_specials.length && $.inArray(selection[n], this.env.acl_specials) >= 0) {
- users.push(selection[n]);
- }
- else if (row = list.rows[selection[n]]) {
- cell = $('td.user', row.obj);
- if (cell.length == 1)
- users.push(cell.text());
- }
- }
-
- return users;
-}
-
-// Removes ACL table row
-rcube_webmail.prototype.acl_remove_row = function(id)
-{
- var list = this.acl_list;
-
- list.remove_row(id);
- list.clear_selection();
-
- // we don't need it anymore (remove id conflict)
- $('#rcmrow'+id).remove();
- this.env.acl[id] = null;
-
- this.enable_command('acl-delete', list.selection.length > 0);
- this.enable_command('acl-edit', list.selection.length == 1);
-}
-
-// Adds ACL table row
-rcube_webmail.prototype.acl_add_row = function(o, sel)
-{
- var n, len, ids = [], spec = [], id = o.id, list = this.acl_list,
- items = this.env.acl_advanced ? [] : this.env.acl_items,
- table = this.gui_objects.acltable,
- row = $('thead > tr', table).clone();
-
- // Update new row
- $('td', row).map(function() {
- var r, cl = this.className.replace(/^acl/, '');
-
- if (items && items[cl])
- cl = items[cl];
-
- if (cl == 'user')
- $(this).text(o.username);
- else
- $(this).addClass(rcmail.acl_class(o.acl, cl)).text('');
- });
-
- row.attr('id', 'rcmrow'+id);
- row = row.get(0);
-
- this.env.acl[id] = o.acl;
-
- // sorting... (create an array of user identifiers, then sort it)
- for (n in this.env.acl) {
- if (this.env.acl[n]) {
- if (this.env.acl_specials.length && $.inArray(n, this.env.acl_specials) >= 0)
- spec.push(n);
- else
- ids.push(n);
- }
- }
- ids.sort();
- // specials on the top
- ids = spec.concat(ids);
-
- // find current id
- for (n=0, len=ids.length; n<len; n++)
- if (ids[n] == id)
- break;
-
- // add row
- if (n && n < len) {
- $('#rcmrow'+ids[n-1]).after(row);
- list.init_row(row);
- list.rowcount++;
- }
- else
- list.insert_row(row);
-
- if (sel)
- list.select_row(o.id);
-}
-
-// Initializes and shows ACL create/edit form
-rcube_webmail.prototype.acl_init_form = function(id)
-{
- var ul, row, td, val = '', type = 'user', li_elements, body = $('body'),
- adv_ul = $('#advancedrights'), sim_ul = $('#simplerights'),
- name_input = $('#acluser');
-
- if (!this.acl_form) {
- var fn = function () { $('input[value=user]').prop('checked', true); };
- name_input.click(fn).keypress(fn);
- }
-
- this.acl_form = $('#aclform');
-
- // Hide unused items
- if (this.env.acl_advanced) {
- adv_ul.show();
- sim_ul.hide();
- ul = adv_ul;
- }
- else {
- sim_ul.show();
- adv_ul.hide();
- ul = sim_ul;
- }
-
- // initialize form fields
- li_elements = $(':checkbox', ul);
- li_elements.attr('checked', false);
-
- if (id && (row = this.acl_list.rows[id])) {
- row = row.obj;
- li_elements.map(function() {
- val = this.value;
- td = $('td.'+this.id, row);
- if (td && td.hasClass('enabled'))
- this.checked = true;
- });
-
- if (!this.env.acl_specials.length || $.inArray(id, this.env.acl_specials) < 0)
- val = $('td.user', row).text();
- else
- type = id;
- }
- // mark read (lrs) rights by default
- else
- li_elements.filter(function() { return this.id.match(/^acl([lrs]|read)$/); }).prop('checked', true);
-
- name_input.val(val);
- $('input[value='+type+']').prop('checked', true);
-
- this.acl_id = id;
-
- // position the form horizontally
- var bw = body.width(), mw = this.acl_form.width();
-
- if (bw >= mw)
- this.acl_form.css({left: parseInt((bw - mw)/2)+'px'});
-
- // display it
- this.acl_form.show();
- if (type == 'user')
- name_input.focus();
-
- // unfocus the list, make backspace key in name input field working
- this.acl_list.blur();
-}
-
-// Returns class name according to ACL comparision result
-rcube_webmail.prototype.acl_class = function(acl1, acl2)
-{
- var i, len, found = 0;
-
- acl1 = String(acl1);
- acl2 = String(acl2);
-
- for (i=0, len=acl2.length; i<len; i++)
- if (acl1.indexOf(acl2[i]) > -1)
- found++;
-
- if (found == len)
- return 'enabled';
- else if (found)
- return 'partial';
-
- return 'disabled';
-}
diff --git a/plugins/acl/acl.php b/plugins/acl/acl.php
deleted file mode 100644
index ab981ab89..000000000
--- a/plugins/acl/acl.php
+++ /dev/null
@@ -1,715 +0,0 @@
-<?php
-
-/**
- * Folders Access Control Lists Management (RFC4314, RFC2086)
- *
- * @version @package_version@
- * @author Aleksander Machniak <alec@alec.pl>
- *
- *
- * Copyright (C) 2011-2012, Kolab Systems AG
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-class acl extends rcube_plugin
-{
- public $task = 'settings|addressbook|calendar';
-
- private $rc;
- private $supported = null;
- private $mbox;
- private $ldap;
- private $specials = array('anyone', 'anonymous');
-
- /**
- * Plugin initialization
- */
- function init()
- {
- $this->rc = rcmail::get_instance();
-
- // Register hooks
- $this->add_hook('folder_form', array($this, 'folder_form'));
- // kolab_addressbook plugin
- $this->add_hook('addressbook_form', array($this, 'folder_form'));
- $this->add_hook('calendar_form_kolab', array($this, 'folder_form'));
- // Plugin actions
- $this->register_action('plugin.acl', array($this, 'acl_actions'));
- $this->register_action('plugin.acl-autocomplete', array($this, 'acl_autocomplete'));
- }
-
- /**
- * Handler for plugin actions (AJAX)
- */
- function acl_actions()
- {
- $action = trim(get_input_value('_act', RCUBE_INPUT_GPC));
-
- // Connect to IMAP
- $this->rc->storage_init();
-
- // Load localization and configuration
- $this->add_texts('localization/');
- $this->load_config();
-
- if ($action == 'save') {
- $this->action_save();
- }
- else if ($action == 'delete') {
- $this->action_delete();
- }
- else if ($action == 'list') {
- $this->action_list();
- }
-
- // Only AJAX actions
- $this->rc->output->send();
- }
-
- /**
- * Handler for user login autocomplete request
- */
- function acl_autocomplete()
- {
- $this->load_config();
-
- $search = get_input_value('_search', RCUBE_INPUT_GPC, true);
- $sid = get_input_value('_id', RCUBE_INPUT_GPC);
- $users = array();
-
- if ($this->init_ldap()) {
- $max = (int) $this->rc->config->get('autocomplete_max', 15);
- $mode = (int) $this->rc->config->get('addressbook_search_mode');
-
- $this->ldap->set_pagesize($max);
- $result = $this->ldap->search('*', $search, $mode);
-
- foreach ($result->records as $record) {
- $user = $record['uid'];
-
- if (is_array($user)) {
- $user = array_filter($user);
- $user = $user[0];
- }
-
- if ($user) {
- if ($record['name'])
- $user = $record['name'] . ' (' . $user . ')';
-
- $users[] = $user;
- }
- }
- }
-
- sort($users, SORT_LOCALE_STRING);
-
- $this->rc->output->command('ksearch_query_results', $users, $search, $sid);
- $this->rc->output->send();
- }
-
- /**
- * Handler for 'folder_form' hook
- *
- * @param array $args Hook arguments array (form data)
- *
- * @return array Hook arguments array
- */
- function folder_form($args)
- {
- // Edited folder name (empty in create-folder mode)
- $mbox_imap = $args['options']['name'];
- if (!strlen($mbox_imap)) {
- return $args;
- }
-/*
- // Do nothing on protected folders (?)
- if ($args['options']['protected']) {
- return $args;
- }
-*/
- // Namespace root
- if ($args['options']['is_root']) {
- return $args;
- }
-
- // Get MYRIGHTS
- if (!($myrights = $args['options']['rights'])) {
- return $args;
- }
-
- // Do nothing if no ACL support
- if (!$this->rc->storage->get_capability('ACL')) {
- return $args;
- }
-
- // Load localization and include scripts
- $this->load_config();
- $this->add_texts('localization/', array('deleteconfirm', 'norights',
- 'nouser', 'deleting', 'saving'));
- $this->include_script('acl.js');
- $this->rc->output->include_script('list.js');
- $this->include_stylesheet($this->local_skin_path().'/acl.css');
-
- // add Info fieldset if it doesn't exist
- if (!isset($args['form']['props']['fieldsets']['info']))
- $args['form']['props']['fieldsets']['info'] = array(
- 'name' => rcube_label('info'),
- 'content' => array());
-
- // Display folder rights to 'Info' fieldset
- $args['form']['props']['fieldsets']['info']['content']['myrights'] = array(
- 'label' => Q($this->gettext('myrights')),
- 'value' => $this->acl2text($myrights)
- );
-
- // Return if not folder admin
- if (!in_array('a', $myrights)) {
- return $args;
- }
-
- // The 'Sharing' tab
- $this->mbox = $mbox_imap;
- $this->rc->output->set_env('acl_users_source', (bool) $this->rc->config->get('acl_users_source'));
- $this->rc->output->set_env('mailbox', $mbox_imap);
- $this->rc->output->add_handlers(array(
- 'acltable' => array($this, 'templ_table'),
- 'acluser' => array($this, 'templ_user'),
- 'aclrights' => array($this, 'templ_rights'),
- ));
-
- $this->rc->output->set_env('autocomplete_max', (int)$this->rc->config->get('autocomplete_max', 15));
- $this->rc->output->set_env('autocomplete_min_length', $this->rc->config->get('autocomplete_min_length'));
- $this->rc->output->add_label('autocompletechars', 'autocompletemore');
-
- $args['form']['sharing'] = array(
- 'name' => Q($this->gettext('sharing')),
- 'content' => $this->rc->output->parse('acl.table', false, false),
- );
-
- return $args;
- }
-
- /**
- * Creates ACL rights table
- *
- * @param array $attrib Template object attributes
- *
- * @return string HTML Content
- */
- function templ_table($attrib)
- {
- if (empty($attrib['id']))
- $attrib['id'] = 'acl-table';
-
- $out = $this->list_rights($attrib);
-
- $this->rc->output->add_gui_object('acltable', $attrib['id']);
-
- return $out;
- }
-
- /**
- * Creates ACL rights form (rights list part)
- *
- * @param array $attrib Template object attributes
- *
- * @return string HTML Content
- */
- function templ_rights($attrib)
- {
- // Get supported rights
- $supported = $this->rights_supported();
-
- // depending on server capability either use 'te' or 'd' for deleting msgs
- $deleteright = implode(array_intersect(str_split('ted'), $supported));
-
- $out = '';
- $ul = '';
- $input = new html_checkbox();
-
- // Advanced rights
- $attrib['id'] = 'advancedrights';
- foreach ($supported as $val) {
- $id = "acl$val";
- $ul .= html::tag('li', null,
- $input->show('', array(
- 'name' => "acl[$val]", 'value' => $val, 'id' => $id))
- . html::label(array('for' => $id, 'title' => $this->gettext('longacl'.$val)),
- $this->gettext('acl'.$val)));
- }
-
- $out = html::tag('ul', $attrib, $ul, html::$common_attrib);
-
- // Simple rights
- $ul = '';
- $attrib['id'] = 'simplerights';
- $items = array(
- 'read' => 'lrs',
- 'write' => 'wi',
- 'delete' => $deleteright,
- 'other' => preg_replace('/[lrswi'.$deleteright.']/', '', implode($supported)),
- );
-
- foreach ($items as $key => $val) {
- $id = "acl$key";
- $ul .= html::tag('li', null,
- $input->show('', array(
- 'name' => "acl[$val]", 'value' => $val, 'id' => $id))
- . html::label(array('for' => $id, 'title' => $this->gettext('longacl'.$key)),
- $this->gettext('acl'.$key)));
- }
-
- $out .= "\n" . html::tag('ul', $attrib, $ul, html::$common_attrib);
-
- $this->rc->output->set_env('acl_items', $items);
-
- return $out;
- }
-
- /**
- * Creates ACL rights form (user part)
- *
- * @param array $attrib Template object attributes
- *
- * @return string HTML Content
- */
- function templ_user($attrib)
- {
- // Create username input
- $attrib['name'] = 'acluser';
-
- $textfield = new html_inputfield($attrib);
-
- $fields['user'] = html::label(array('for' => 'iduser'), $this->gettext('username'))
- . ' ' . $textfield->show();
-
- // Add special entries
- if (!empty($this->specials)) {
- foreach ($this->specials as $key) {
- $fields[$key] = html::label(array('for' => 'id'.$key), $this->gettext($key));
- }
- }
-
- $this->rc->output->set_env('acl_specials', $this->specials);
-
- // Create list with radio buttons
- if (count($fields) > 1) {
- $ul = '';
- $radio = new html_radiobutton(array('name' => 'usertype'));
- foreach ($fields as $key => $val) {
- $ul .= html::tag('li', null, $radio->show($key == 'user' ? 'user' : '',
- array('value' => $key, 'id' => 'id'.$key))
- . $val);
- }
-
- $out = html::tag('ul', array('id' => 'usertype'), $ul, html::$common_attrib);
- }
- // Display text input alone
- else {
- $out = $fields['user'];
- }
-
- return $out;
- }
-
- /**
- * Creates ACL rights table
- *
- * @param array $attrib Template object attributes
- *
- * @return string HTML Content
- */
- private function list_rights($attrib=array())
- {
- // Get ACL for the folder
- $acl = $this->rc->storage->get_acl($this->mbox);
-
- if (!is_array($acl)) {
- $acl = array();
- }
-
- // Keep special entries (anyone/anonymous) on top of the list
- if (!empty($this->specials) && !empty($acl)) {
- foreach ($this->specials as $key) {
- if (isset($acl[$key])) {
- $acl_special[$key] = $acl[$key];
- unset($acl[$key]);
- }
- }
- }
-
- // Sort the list by username
- uksort($acl, 'strnatcasecmp');
-
- if (!empty($acl_special)) {
- $acl = array_merge($acl_special, $acl);
- }
-
- // Get supported rights and build column names
- $supported = $this->rights_supported();
-
- // depending on server capability either use 'te' or 'd' for deleting msgs
- $deleteright = implode(array_intersect(str_split('ted'), $supported));
-
- // Use advanced or simple (grouped) rights
- $advanced = $this->rc->config->get('acl_advanced_mode');
-
- if ($advanced) {
- $items = array();
- foreach ($supported as $sup) {
- $items[$sup] = $sup;
- }
- }
- else {
- $items = array(
- 'read' => 'lrs',
- 'write' => 'wi',
- 'delete' => $deleteright,
- 'other' => preg_replace('/[lrswi'.$deleteright.']/', '', implode($supported)),
- );
- }
-
- // Create the table
- $attrib['noheader'] = true;
- $table = new html_table($attrib);
-
- // Create table header
- $table->add_header('user', $this->gettext('identifier'));
- foreach (array_keys($items) as $key) {
- $label = $this->gettext('shortacl'.$key);
- $table->add_header(array('class' => 'acl'.$key, 'title' => $label), $label);
- }
-
- $i = 1;
- $js_table = array();
- foreach ($acl as $user => $rights) {
- if ($this->rc->storage->conn->user == $user) {
- continue;
- }
-
- // filter out virtual rights (c or d) the server may return
- $userrights = array_intersect($rights, $supported);
- $userid = html_identifier($user);
-
- if (!empty($this->specials) && in_array($user, $this->specials)) {
- $user = $this->gettext($user);
- }
-
- $table->add_row(array('id' => 'rcmrow'.$userid));
- $table->add('user', Q($user));
-
- foreach ($items as $key => $right) {
- $in = $this->acl_compare($userrights, $right);
- switch ($in) {
- case 2: $class = 'enabled'; break;
- case 1: $class = 'partial'; break;
- default: $class = 'disabled'; break;
- }
- $table->add('acl' . $key . ' ' . $class, '');
- }
-
- $js_table[$userid] = implode($userrights);
- }
-
- $this->rc->output->set_env('acl', $js_table);
- $this->rc->output->set_env('acl_advanced', $advanced);
-
- $out = $table->show();
-
- return $out;
- }
-
- /**
- * Handler for ACL update/create action
- */
- private function action_save()
- {
- $mbox = trim(get_input_value('_mbox', RCUBE_INPUT_GPC, true)); // UTF7-IMAP
- $user = trim(get_input_value('_user', RCUBE_INPUT_GPC));
- $acl = trim(get_input_value('_acl', RCUBE_INPUT_GPC));
- $oldid = trim(get_input_value('_old', RCUBE_INPUT_GPC));
-
- $acl = array_intersect(str_split($acl), $this->rights_supported());
- $users = $oldid ? array($user) : explode(',', $user);
-
- foreach ($users as $user) {
- $user = trim($user);
-
- if (!empty($this->specials) && in_array($user, $this->specials)) {
- $username = $this->gettext($user);
- }
- else {
- if (!strpos($user, '@') && ($realm = $this->get_realm())) {
- $user .= '@' . rcube_idn_to_ascii(preg_replace('/^@/', '', $realm));
- }
- $username = $user;
- }
-
- if (!$acl || !$user || !strlen($mbox)) {
- continue;
- }
-
- if ($user != $_SESSION['username'] && $username != $_SESSION['username']) {
- if ($this->rc->storage->set_acl($mbox, $user, $acl)) {
- $ret = array('id' => html_identifier($user),
- 'username' => $username, 'acl' => implode($acl), 'old' => $oldid);
- $this->rc->output->command('acl_update', $ret);
- $result++;
- }
- }
- }
-
- if ($result) {
- $this->rc->output->show_message($oldid ? 'acl.updatesuccess' : 'acl.createsuccess', 'confirmation');
- }
- else {
- $this->rc->output->show_message($oldid ? 'acl.updateerror' : 'acl.createerror', 'error');
- }
- }
-
- /**
- * Handler for ACL delete action
- */
- private function action_delete()
- {
- $mbox = trim(get_input_value('_mbox', RCUBE_INPUT_GPC, true)); //UTF7-IMAP
- $user = trim(get_input_value('_user', RCUBE_INPUT_GPC));
-
- $user = explode(',', $user);
-
- foreach ($user as $u) {
- $u = trim($u);
- if ($this->rc->storage->delete_acl($mbox, $u)) {
- $this->rc->output->command('acl_remove_row', html_identifier($u));
- }
- else {
- $error = true;
- }
- }
-
- if (!$error) {
- $this->rc->output->show_message('acl.deletesuccess', 'confirmation');
- }
- else {
- $this->rc->output->show_message('acl.deleteerror', 'error');
- }
- }
-
- /**
- * Handler for ACL list update action (with display mode change)
- */
- private function action_list()
- {
- if (in_array('acl_advanced_mode', (array)$this->rc->config->get('dont_override'))) {
- return;
- }
-
- $this->mbox = trim(get_input_value('_mbox', RCUBE_INPUT_GPC, true)); // UTF7-IMAP
- $advanced = trim(get_input_value('_mode', RCUBE_INPUT_GPC));
- $advanced = $advanced == 'advanced' ? true : false;
-
- // Save state in user preferences
- $this->rc->user->save_prefs(array('acl_advanced_mode' => $advanced));
-
- $out = $this->list_rights();
-
- $out = preg_replace(array('/^<table[^>]+>/', '/<\/table>$/'), '', $out);
-
- $this->rc->output->command('acl_list_update', $out);
- }
-
- /**
- * Creates <UL> list with descriptive access rights
- *
- * @param array $rights MYRIGHTS result
- *
- * @return string HTML content
- */
- function acl2text($rights)
- {
- if (empty($rights)) {
- return '';
- }
-
- $supported = $this->rights_supported();
- $list = array();
- $attrib = array(
- 'name' => 'rcmyrights',
- 'style' => 'margin:0; padding:0 15px;',
- );
-
- foreach ($supported as $right) {
- if (in_array($right, $rights)) {
- $list[] = html::tag('li', null, Q($this->gettext('acl' . $right)));
- }
- }
-
- if (count($list) == count($supported))
- return Q($this->gettext('aclfull'));
-
- return html::tag('ul', $attrib, implode("\n", $list));
- }
-
- /**
- * Compares two ACLs (according to supported rights)
- *
- * @param array $acl1 ACL rights array (or string)
- * @param array $acl2 ACL rights array (or string)
- *
- * @param int Comparision result, 2 - full match, 1 - partial match, 0 - no match
- */
- function acl_compare($acl1, $acl2)
- {
- if (!is_array($acl1)) $acl1 = str_split($acl1);
- if (!is_array($acl2)) $acl2 = str_split($acl2);
-
- $rights = $this->rights_supported();
-
- $acl1 = array_intersect($acl1, $rights);
- $acl2 = array_intersect($acl2, $rights);
- $res = array_intersect($acl1, $acl2);
-
- $cnt1 = count($res);
- $cnt2 = count($acl2);
-
- if ($cnt1 == $cnt2)
- return 2;
- else if ($cnt1)
- return 1;
- else
- return 0;
- }
-
- /**
- * Get list of supported access rights (according to RIGHTS capability)
- *
- * @return array List of supported access rights abbreviations
- */
- function rights_supported()
- {
- if ($this->supported !== null) {
- return $this->supported;
- }
-
- $capa = $this->rc->storage->get_capability('RIGHTS');
-
- if (is_array($capa)) {
- $rights = strtolower($capa[0]);
- }
- else {
- $rights = 'cd';
- }
-
- return $this->supported = str_split('lrswi' . $rights . 'pa');
- }
-
- /**
- * Username realm detection.
- *
- * @return string Username realm (domain)
- */
- private function get_realm()
- {
- // When user enters a username without domain part, realm
- // alows to add it to the username (and display correct username in the table)
-
- if (isset($_SESSION['acl_username_realm'])) {
- return $_SESSION['acl_username_realm'];
- }
-
- // find realm in username of logged user (?)
- list($name, $domain) = explode('@', $_SESSION['username']);
-
- // Use (always existent) ACL entry on the INBOX for the user to determine
- // whether or not the user ID in ACL entries need to be qualified and how
- // they would need to be qualified.
- if (empty($domain)) {
- $acl = $this->rc->storage->get_acl('INBOX');
- if (is_array($acl)) {
- $regexp = '/^' . preg_quote($_SESSION['username'], '/') . '@(.*)$/';
- foreach (array_keys($acl) as $name) {
- if (preg_match($regexp, $name, $matches)) {
- $domain = $matches[1];
- break;
- }
- }
- }
- }
-
- return $_SESSION['acl_username_realm'] = $domain;
- }
-
- /**
- * Initializes autocomplete LDAP backend
- */
- private function init_ldap()
- {
- if ($this->ldap)
- return $this->ldap->ready;
-
- // get LDAP config
- $config = $this->rc->config->get('acl_users_source');
-
- if (empty($config)) {
- return false;
- }
-
- // not an array, use configured ldap_public source
- if (!is_array($config)) {
- $ldap_config = (array) $this->rc->config->get('ldap_public');
- $config = $ldap_config[$config];
- }
-
- $uid_field = $this->rc->config->get('acl_users_field', 'mail');
- $filter = $this->rc->config->get('acl_users_filter');
-
- if (empty($uid_field) || empty($config)) {
- return false;
- }
-
- // get name attribute
- if (!empty($config['fieldmap'])) {
- $name_field = $config['fieldmap']['name'];
- }
- // ... no fieldmap, use the old method
- if (empty($name_field)) {
- $name_field = $config['name_field'];
- }
-
- // add UID field to fieldmap, so it will be returned in a record with name
- $config['fieldmap'] = array(
- 'name' => $name_field,
- 'uid' => $uid_field,
- );
-
- // search in UID and name fields
- $config['search_fields'] = array_values($config['fieldmap']);
- $config['required_fields'] = array($uid_field);
-
- // set search filter
- if ($filter)
- $config['filter'] = $filter;
-
- // disable vlv
- $config['vlv'] = false;
-
- // Initialize LDAP connection
- $this->ldap = new rcube_ldap($config,
- $this->rc->config->get('ldap_debug'),
- $this->rc->config->mail_domain($_SESSION['imap_host']));
-
- return $this->ldap->ready;
- }
-}
diff --git a/plugins/acl/config.inc.php.dist b/plugins/acl/config.inc.php.dist
deleted file mode 100644
index f957a233a..000000000
--- a/plugins/acl/config.inc.php.dist
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-// Default look of access rights table
-// In advanced mode all access rights are displayed separately
-// In simple mode access rights are grouped into four groups: read, write, delete, full
-$rcmail_config['acl_advanced_mode'] = false;
-
-// LDAP addressbook that would be searched for user names autocomplete.
-// That should be an array refering to the $rcmail_config['ldap_public'] array key
-// or complete addressbook configuration array.
-$rcmail_config['acl_users_source'] = '';
-
-// The LDAP attribute which will be used as ACL user identifier
-$rcmail_config['acl_users_field'] = 'mail';
-
-// The LDAP search filter will be &'d with search queries
-$rcmail_config['acl_users_filter'] = '';
-
-?>
diff --git a/plugins/acl/localization/de_DE.inc b/plugins/acl/localization/de_DE.inc
deleted file mode 100644
index 92c7e4290..000000000
--- a/plugins/acl/localization/de_DE.inc
+++ /dev/null
@@ -1,83 +0,0 @@
-<?php
-
-$labels['sharing'] = 'Freigabe';
-$labels['myrights'] = 'Zugriffsrechte';
-$labels['username'] = 'Benutzer:';
-$labels['advanced'] = 'erweiterter Modus';
-$labels['newuser'] = 'Eintrag hinzufügen';
-$labels['actions'] = 'Zugriffsrechte Aktionen...';
-$labels['anyone'] = 'Alle Benutzer (anyone)';
-$labels['anonymous'] = 'Gäste (anonymous)';
-$labels['identifier'] = 'Bezeichnung';
-
-$labels['acll'] = 'Ordner sichtbar';
-$labels['aclr'] = 'Nachrichten lesen';
-$labels['acls'] = 'Lesestatus ändern';
-$labels['aclw'] = 'Flags schreiben';
-$labels['acli'] = 'Nachrichten Hinzufügen';
-$labels['aclp'] = 'Nachrichten Senden an';
-$labels['aclc'] = 'Unterordner erstellen';
-$labels['aclk'] = 'Unterordner erstellen';
-$labels['acld'] = 'Nachrichten als gelöscht markieren';
-$labels['aclt'] = 'Nachrichten als gelöscht markieren';
-$labels['acle'] = 'Nachrichten endgültig Löschen';
-$labels['aclx'] = 'Ordner löschen';
-$labels['acla'] = 'Zugriffsrechte Verwalten';
-
-$labels['aclfull'] = 'Vollzugriff';
-$labels['aclother'] = 'Andere';
-$labels['aclread'] = 'Lesen';
-$labels['aclwrite'] = 'Schreiben';
-$labels['acldelete'] = 'Löschen';
-
-$labels['shortacll'] = 'Sichtbar';
-$labels['shortaclr'] = 'Lesen';
-$labels['shortacls'] = 'Lesestatus';
-$labels['shortaclw'] = 'Flags ändern';
-$labels['shortacli'] = 'Hinzufügen';
-$labels['shortaclp'] = 'Senden an';
-$labels['shortaclc'] = 'Erstellen';
-$labels['shortaclk'] = 'Erstellen';
-$labels['shortacld'] = 'Löschen';
-$labels['shortaclt'] = 'Löschen';
-$labels['shortacle'] = 'endgültig löschen';
-$labels['shortaclx'] = 'Ordner löschen';
-$labels['shortacla'] = 'Verwalten';
-
-$labels['shortaclother'] = 'Andere';
-$labels['shortaclread'] = 'Lesen';
-$labels['shortaclwrite'] = 'Schreiben';
-$labels['shortacldelete'] = 'Löschen';
-
-$labels['longacll'] = 'Der Ordner ist sichtbar und kann abonniert werden';
-$labels['longaclr'] = 'Nachrichten im Ordner können gelesen werden';
-$labels['longacls'] = 'Der Lesestatus von Nachrichten kann geändert werden';
-$labels['longaclw'] = 'Alle Nachrichten-Flags und Schlüsselwörter außer "Gelesen" und "Gelöscht" können geändert werden';
-$labels['longacli'] = 'Nachrichten können in diesen Ordner kopiert oder verschoben werden';
-$labels['longaclp'] = 'Nachrichten können an diesen Ordner gesendet werden';
-$labels['longaclc'] = 'Unterordner können in diesem Ordner erstellt oder umbenannt werden';
-$labels['longaclk'] = 'Unterordner können in diesem Ordner erstellt oder umbenannt werden';
-$labels['longacld'] = 'Der "gelöscht" Status von Nachrichten kann geändert werden';
-$labels['longaclt'] = 'Der "gelöscht" Status von Nachrichten kann geändert werden';
-$labels['longacle'] = 'Als "gelöscht" markiert Nachrichten können gelöscht werden.';
-$labels['longaclx'] = 'Der Ordner kann gelöscht oder umbenannt werden';
-$labels['longacla'] = 'Die Zugriffsrechte des Ordners können geändert werden';
-
-$labels['longaclfull'] = 'Vollzugriff inklusive Ordner-Verwaltung';
-$labels['longaclread'] = 'Der Ordnerinhalt kann gelesen werden';
-$labels['longaclwrite'] = 'Nachrichten können markiert, an den Ordner gesendet und in den Ordner kopiert oder verschoben werden';
-$labels['longacldelete'] = 'Nachrichten können gelöscht werden';
-
-$messages['deleting'] = 'Zugriffsrechte werden entzogen...';
-$messages['saving'] = 'Zugriffsrechte werden gewährt...';
-$messages['updatesuccess'] = 'Zugriffsrechte erfolgreich geändert';
-$messages['deletesuccess'] = 'Zugriffsrechte erfolgreich entzogen';
-$messages['createsuccess'] = 'Zugriffsrechte erfolgreich gewährt';
-$messages['updateerror'] = 'Zugriffsrechte konnten nicht geändert werden';
-$messages['deleteerror'] = 'Zugriffsrechte konnten nicht entzogen werden';
-$messages['createerror'] = 'Zugriffsrechte konnten nicht gewährt werden';
-$messages['deleteconfirm'] = 'Sind Sie sicher, daß Sie die Zugriffsrechte den ausgewählten Benutzern entziehen möchten?';
-$messages['norights'] = 'Es wurden keine Zugriffsrechte ausgewählt!';
-$messages['nouser'] = 'Es wurde kein Benutzer ausgewählt!';
-
-?>
diff --git a/plugins/acl/localization/en_US.inc b/plugins/acl/localization/en_US.inc
deleted file mode 100644
index f5b1ae64d..000000000
--- a/plugins/acl/localization/en_US.inc
+++ /dev/null
@@ -1,83 +0,0 @@
-<?php
-
-$labels['sharing'] = 'Sharing';
-$labels['myrights'] = 'Access Rights';
-$labels['username'] = 'User:';
-$labels['advanced'] = 'advanced mode';
-$labels['newuser'] = 'Add entry';
-$labels['actions'] = 'Access right actions...';
-$labels['anyone'] = 'All users (anyone)';
-$labels['anonymous'] = 'Guests (anonymous)';
-$labels['identifier'] = 'Identifier';
-
-$labels['acll'] = 'Lookup';
-$labels['aclr'] = 'Read messages';
-$labels['acls'] = 'Keep Seen state';
-$labels['aclw'] = 'Write flags';
-$labels['acli'] = 'Insert (Copy into)';
-$labels['aclp'] = 'Post';
-$labels['aclc'] = 'Create subfolders';
-$labels['aclk'] = 'Create subfolders';
-$labels['acld'] = 'Delete messages';
-$labels['aclt'] = 'Delete messages';
-$labels['acle'] = 'Expunge';
-$labels['aclx'] = 'Delete folder';
-$labels['acla'] = 'Administer';
-
-$labels['aclfull'] = 'Full control';
-$labels['aclother'] = 'Other';
-$labels['aclread'] = 'Read';
-$labels['aclwrite'] = 'Write';
-$labels['acldelete'] = 'Delete';
-
-$labels['shortacll'] = 'Lookup';
-$labels['shortaclr'] = 'Read';
-$labels['shortacls'] = 'Keep';
-$labels['shortaclw'] = 'Write';
-$labels['shortacli'] = 'Insert';
-$labels['shortaclp'] = 'Post';
-$labels['shortaclc'] = 'Create';
-$labels['shortaclk'] = 'Create';
-$labels['shortacld'] = 'Delete';
-$labels['shortaclt'] = 'Delete';
-$labels['shortacle'] = 'Expunge';
-$labels['shortaclx'] = 'Folder delete';
-$labels['shortacla'] = 'Administer';
-
-$labels['shortaclother'] = 'Other';
-$labels['shortaclread'] = 'Read';
-$labels['shortaclwrite'] = 'Write';
-$labels['shortacldelete'] = 'Delete';
-
-$labels['longacll'] = 'The folder is visible on lists and can be subscribed to';
-$labels['longaclr'] = 'The folder can be opened for reading';
-$labels['longacls'] = 'Messages Seen flag can be changed';
-$labels['longaclw'] = 'Messages flags and keywords can be changed, except Seen and Deleted';
-$labels['longacli'] = 'Messages can be written or copied to the folder';
-$labels['longaclp'] = 'Messages can be posted to this folder';
-$labels['longaclc'] = 'Folders can be created (or renamed) directly under this folder';
-$labels['longaclk'] = 'Folders can be created (or renamed) directly under this folder';
-$labels['longacld'] = 'Messages Delete flag can be changed';
-$labels['longaclt'] = 'Messages Delete flag can be changed';
-$labels['longacle'] = 'Messages can be expunged';
-$labels['longaclx'] = 'The folder can be deleted or renamed';
-$labels['longacla'] = 'The folder access rights can be changed';
-
-$labels['longaclfull'] = 'Full control including folder administration';
-$labels['longaclread'] = 'The folder can be opened for reading';
-$labels['longaclwrite'] = 'Messages can be marked, written or copied to the folder';
-$labels['longacldelete'] = 'Messages can be deleted';
-
-$messages['deleting'] = 'Deleting access rights...';
-$messages['saving'] = 'Saving access rights...';
-$messages['updatesuccess'] = 'Successfully changed access rights';
-$messages['deletesuccess'] = 'Successfully deleted access rights';
-$messages['createsuccess'] = 'Successfully added access rights';
-$messages['updateerror'] = 'Ubable to update access rights';
-$messages['deleteerror'] = 'Unable to delete access rights';
-$messages['createerror'] = 'Unable to add access rights';
-$messages['deleteconfirm'] = 'Are you sure, you want to remove access rights of selected user(s)?';
-$messages['norights'] = 'No rights has been specified!';
-$messages['nouser'] = 'No username has been specified!';
-
-?>
diff --git a/plugins/acl/localization/pl_PL.inc b/plugins/acl/localization/pl_PL.inc
deleted file mode 100644
index 0b3689927..000000000
--- a/plugins/acl/localization/pl_PL.inc
+++ /dev/null
@@ -1,83 +0,0 @@
-<?php
-
-$labels['sharing'] = 'Udostępnianie';
-$labels['myrights'] = 'Prawa dostępu';
-$labels['username'] = 'Użytkownik:';
-$labels['advanced'] = 'tryb zaawansowany';
-$labels['newuser'] = 'Dodaj rekord';
-$labels['actions'] = 'Akcje na prawach...';
-$labels['anyone'] = 'Wszyscy (anyone)';
-$labels['anonymous'] = 'Goście (anonymous)';
-$labels['identifier'] = 'Identyfikator';
-
-$labels['acll'] = 'Podgląd (Lookup)';
-$labels['aclr'] = 'Odczyt (Read)';
-$labels['acls'] = 'Zmiana stanu wiadomości (Keep)';
-$labels['aclw'] = 'Zmiana flag wiadomości (Write)';
-$labels['acli'] = 'Dodawanie/Kopiowanie do (Insert)';
-$labels['aclp'] = 'Wysyłanie (Post)';
-$labels['aclc'] = 'Tworzenie podfolderów (Create)';
-$labels['aclk'] = 'Tworzenie podfolderów (Create)';
-$labels['acld'] = 'Usuwanie wiadomości (Delete)';
-$labels['aclt'] = 'Usuwanie wiadomości (Delete)';
-$labels['acle'] = 'Porządkowanie folderu (Expunge)';
-$labels['aclx'] = 'Usuwanie folderu (Delete)';
-$labels['acla'] = 'Administracja (Administer)';
-
-$labels['aclfull'] = 'Wszystkie';
-$labels['aclother'] = 'Inne';
-$labels['aclread'] = 'Odczyt';
-$labels['aclwrite'] = 'Zapis';
-$labels['acldelete'] = 'Usuwanie';
-
-$labels['shortacll'] = 'Podgląd';
-$labels['shortaclr'] = 'Odczyt';
-$labels['shortacls'] = 'Zmiana';
-$labels['shortaclw'] = 'Zmiana flag';
-$labels['shortacli'] = 'Dodawanie';
-$labels['shortaclp'] = 'Wysyłanie';
-$labels['shortaclc'] = 'Tworzenie';
-$labels['shortaclk'] = 'Tworzenie';
-$labels['shortacld'] = 'Usuwanie';
-$labels['shortaclt'] = 'Usuwanie';
-$labels['shortacle'] = 'Porządkowanie';
-$labels['shortaclx'] = 'Usuwanie folderu';
-$labels['shortacla'] = 'Administracja';
-
-$labels['shortaclother'] = 'Pozostałe';
-$labels['shortaclread'] = 'Odczyt';
-$labels['shortaclwrite'] = 'Zapis';
-$labels['shortacldelete'] = 'Usuwanie';
-
-$labels['longacll'] = 'Pozwala na subskrybowanie folderu i powoduje, że jest on widoczny na liście';
-$labels['longaclr'] = 'Pozwala na otwarcie folderu w trybie do odczytu';
-$labels['longacls'] = 'Pozwala na zmienę stanu wiadomości';
-$labels['longaclw'] = 'Pozwala zmieniać wszystkie flagi wiadomości, oprócz "Przeczytano" i "Usunięto"';
-$labels['longacli'] = 'Pozwala zapisywać wiadomości i kopiować do folderu';
-$labels['longaclp'] = 'Pozwala wysyłać wiadomości do folderu';
-$labels['longaclc'] = 'Pozwala tworzyć (lub zmieniać nazwę) podfoldery';
-$labels['longaclk'] = 'Pozwala tworzyć (lub zmieniać nazwę) podfoldery';
-$labels['longacld'] = 'Pozwala zmianiać flagę "Usunięto" wiadomości';
-$labels['longaclt'] = 'Pozwala zmianiać flagę "Usunięto" wiadomości';
-$labels['longacle'] = 'Pozwala na usuwanie wiadomości oznaczonych do usunięcia';
-$labels['longaclx'] = 'Pozwala na zmianę nazwy lub usunięcie folderu';
-$labels['longacla'] = 'Pozwala na zmiane praw dostępu do folderu';
-
-$labels['longaclfull'] = 'Pełna kontrola włącznie z administrowaniem folderem';
-$labels['longaclread'] = 'Folder może być otwarty w trybie do odczytu';
-$labels['longaclwrite'] = 'Wiadomości mogą być oznaczane, zapisywane i kopiowane do folderu';
-$labels['longacldelete'] = 'Wiadomości mogą być usuwane';
-
-$messages['deleting'] = 'Usuwanie praw dostępu...';
-$messages['saving'] = 'Zapisywanie praw dostępu...';
-$messages['updatesuccess'] = 'Pomyślnie zmieniono prawa dostępu';
-$messages['deletesuccess'] = 'Pomyślnie usunięto prawa dostępu';
-$messages['createsuccess'] = 'Pomyślnie dodano prawa dostępu';
-$messages['updateerror'] = 'Nie udało się zmienić praw dostępu';
-$messages['deleteerror'] = 'Nie udało się usunąć praw dostępu';
-$messages['createerror'] = 'Nie udało się dodać praw dostępu';
-$messages['deleteconfirm'] = 'Czy na pewno chcesz usunąć prawa wybranym użytkownikom?';
-$messages['norights'] = 'Nie wybrano praw dostępu!';
-$messages['nouser'] = 'Nie podano nazwy użytkownika!';
-
-?>
diff --git a/plugins/acl/package.xml b/plugins/acl/package.xml
deleted file mode 100644
index 7ea0f3297..000000000
--- a/plugins/acl/package.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<package xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" packagerversion="1.9.0" version="2.0" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0
- http://pear.php.net/dtd/tasks-1.0.xsd
- http://pear.php.net/dtd/package-2.0
- http://pear.php.net/dtd/package-2.0.xsd">
- <name>acl</name>
- <channel>pear.roundcube.net</channel>
- <summary>Folders Access Control Lists</summary>
- <description>IMAP Folders Access Control Lists Management (RFC4314, RFC2086).</description>
- <lead>
- <name>Aleksander Machniak</name>
- <user>alec</user>
- <email>alec@alec.pl</email>
- <active>yes</active>
- </lead>
- <date>2012-03-13</date>
- <version>
- <release>0.8</release>
- <api>0.7</api>
- </version>
- <stability>
- <release>stable</release>
- <api>stable</api>
- </stability>
- <license uri="http://www.gnu.org/licenses/gpl-2.0.html">GNU GPLv2</license>
- <notes>-</notes>
- <contents>
- <dir baseinstalldir="/" name="/">
- <file name="acl.php" role="php">
- <tasks:replace from="@name@" to="name" type="package-info"/>
- <tasks:replace from="@package_version@" to="version" type="package-info"/>
- </file>
- <file name="acl.js" role="data">
- <tasks:replace from="@name@" to="name" type="package-info"/>
- <tasks:replace from="@package_version@" to="version" type="package-info"/>
- </file>
- <file name="config.inc.php.dist" role="data"></file>
- <file name="localization/de_DE.inc" role="data"></file>
- <file name="localization/en_US.inc" role="data"></file>
- <file name="localization/pl_PL.inc" role="data"></file>
- <file name="skins/default/acl.css" role="data"></file>
- <file name="skins/default/images/enabled.png" role="data"></file>
- <file name="skins/default/images/partial.png" role="data"></file>
- <file name="skins/default/templates/table.html" role="data"></file>
- <file name="skins/larry/acl.css" role="data"></file>
- <file name="skins/larry/images/enabled.png" role="data"></file>
- <file name="skins/larry/images/partial.png" role="data"></file>
- <file name="skins/larry/templates/table.html" role="data"></file>
- </dir>
- <!-- / -->
- </contents>
- <dependencies>
- <required>
- <php>
- <min>5.2.1</min>
- </php>
- <pearinstaller>
- <min>1.7.0</min>
- </pearinstaller>
- </required>
- </dependencies>
- <phprelease/>
-</package>
diff --git a/plugins/acl/skins/default/acl.css b/plugins/acl/skins/default/acl.css
deleted file mode 100644
index cf3391f49..000000000
--- a/plugins/acl/skins/default/acl.css
+++ /dev/null
@@ -1,100 +0,0 @@
-#aclmanager
-{
- position: relative;
- border: 1px solid #999;
- min-height: 302px;
-}
-
-#aclcontainer
-{
- overflow-x: auto;
-}
-
-#acltable
-{
- width: 100%;
- border-collapse: collapse;
- background-color: #F9F9F9;
-}
-
-#acltable td
-{
- width: 1%;
- white-space: nowrap;
-}
-
-#acltable thead td
-{
- padding: 0 4px 0 2px;
-}
-
-#acltable tbody td
-{
- text-align: center;
- padding: 2px;
- border-bottom: 1px solid #999999;
- cursor: default;
-}
-
-#acltable tbody td.user
-{
- width: 96%;
- text-align: left;
- overflow: hidden;
- text-overflow: ellipsis;
- -o-text-overflow: ellipsis;
-}
-
-#acltable tbody td.partial
-{
- background: url(images/partial.png) center no-repeat;
-}
-
-#acltable tbody td.enabled
-{
- background: url(images/enabled.png) center no-repeat;
-}
-
-#acltable tr.selected td
-{
- color: #FFFFFF;
- background-color: #CC3333;
-}
-
-#acltable tr.unfocused td
-{
- color: #FFFFFF;
- background-color: #929292;
-}
-
-#acladvswitch
-{
- position: absolute;
- right: 4px;
- text-align: right;
- line-height: 22px;
-}
-
-#acladvswitch input
-{
- vertical-align: middle;
-}
-
-#acladvswitch span
-{
- display: block;
-}
-
-#aclform
-{
- top: 80px;
- width: 480px;
- padding: 10px;
-}
-
-#aclform div
-{
- padding: 0;
- text-align: center;
- clear: both;
-}
diff --git a/plugins/acl/skins/default/images/enabled.png b/plugins/acl/skins/default/images/enabled.png
deleted file mode 100644
index 98215f68c..000000000
--- a/plugins/acl/skins/default/images/enabled.png
+++ /dev/null
Binary files differ
diff --git a/plugins/acl/skins/default/images/partial.png b/plugins/acl/skins/default/images/partial.png
deleted file mode 100644
index 12023f057..000000000
--- a/plugins/acl/skins/default/images/partial.png
+++ /dev/null
Binary files differ
diff --git a/plugins/acl/skins/default/templates/table.html b/plugins/acl/skins/default/templates/table.html
deleted file mode 100644
index 2365ef757..000000000
--- a/plugins/acl/skins/default/templates/table.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<!--[if lte IE 6]>
- <style type="text/css">
- #aclmanager { height: expression(Math.min(302, parseInt(document.documentElement.clientHeight))+'px'); }
- </style>
-<![endif]-->
-
-<div id="aclmanager">
-<div id="aclcontainer" class="boxlistcontent" style="top:0">
- <roundcube:object name="acltable" id="acltable" class="records-table" />
-</div>
-<div class="boxfooter">
- <roundcube:button command="acl-create" id="aclcreatelink" type="link" title="acl.newuser" class="buttonPas addgroup" classAct="button addgroup" content=" " />
- <roundcube:button name="aclmenulink" id="aclmenulink" type="link" title="acl.actions" class="button groupactions" onclick="show_aclmenu(); return false" content=" " />
- <roundcube:if condition="!in_array('acl_advanced_mode', (array)config:dont_override)" />
- <div id="acladvswitch" class="pagenav">
- <span><label for="acl-switch"><roundcube:label name="acl.advanced" /></label>
- <input type="checkbox" id="acl-switch" onclick="rcmail.command('acl-mode-switch')"<roundcube:exp expression="config:acl_advanced_mode == true ? ' checked=checked' : ''" /> />
- </span>
- </div>
- <roundcube:endif />
-</div>
-</div>
-
-<div id="aclmenu" class="popupmenu">
- <ul>
- <li><roundcube:button command="acl-edit" label="edit" classAct="active" /></li>
- <li><roundcube:button command="acl-delete" label="delete" classAct="active" /></li>
- </ul>
-</div>
-
-<div id="aclform" class="popupmenu">
- <fieldset class="thinbordered"><legend><roundcube:label name="acl.identifier" /></legend>
- <roundcube:object name="acluser" class="toolbarmenu" id="acluser" size="35" />
- </fieldset>
- <fieldset class="thinbordered"><legend><roundcube:label name="acl.myrights" /></legend>
- <roundcube:object name="aclrights" class="toolbarmenu" />
- </fieldset>
- <div>
- <roundcube:button command="acl-cancel" type="input" class="button" label="cancel" />
- <roundcube:button command="acl-save" type="input" class="button mainaction" label="save" />
- </div>
-</div>
-
-<script type="text/javascript">
-function show_aclmenu()
-{
- if (!rcmail_ui) {
- rcube_init_mail_ui();
- rcmail_ui.popups.aclmenu = {id:'aclmenu', above:1, obj: $('#aclmenu')};
- }
-
- rcmail_ui.show_popup('aclmenu');
-}
-</script>
diff --git a/plugins/acl/skins/larry/acl.css b/plugins/acl/skins/larry/acl.css
deleted file mode 100644
index 589d688f6..000000000
--- a/plugins/acl/skins/larry/acl.css
+++ /dev/null
@@ -1,113 +0,0 @@
-#aclcontainer
-{
- overflow-x: auto;
- border: 1px solid #CCDDE4;
- background-color: #D9ECF4;
- height: 272px;
- box-shadow: none;
-}
-
-#acllist-content
-{
- position: relative;
- height: 230px;
- background-color: white;
-}
-
-#acllist-footer
-{
- position: relative;
-}
-
-#acltable
-{
- width: 100%;
- border-collapse: collapse;
- border: none;
-}
-
-#acltable td
-{
- white-space: nowrap;
- border: none;
- text-align: center;
-}
-
-#acltable thead tr td
-{
- border-left: #BBD3DA dotted 1px;
- font-size: 11px;
- font-weight: bold;
-}
-
-#acltable tbody td
-{
- border-bottom: #DDDDDD 1px solid;
- text-align: center;
- padding: 2px;
- cursor: default;
-}
-
-#acltable thead td.user
-{
- border-left: none;
-}
-
-#acltable tbody td.user
-{
- text-align: left;
- overflow: hidden;
- text-overflow: ellipsis;
- -o-text-overflow: ellipsis;
- border-left: none;
- width: 50px;
-}
-
-#acltable tbody td.partial
-{
- background-image: url(images/partial.png);
- background-position: center;
- background-repeat: no-repeat;
-}
-
-#acltable tbody td.enabled
-{
- background-image: url(images/enabled.png);
- background-position: center;
- background-repeat: no-repeat;
-}
-
-#acltable tbody tr.selected td.partial
-{
- background-color: #019bc6;
- background-image: url(images/partial.png), -moz-linear-gradient(top, #019bc6 0%, #017cb4 100%);
- background-image: url(images/partial.png), -webkit-gradient(linear, left top, left bottom, color-stop(0%,#019bc6), color-stop(100%,#017cb4));
- background-image: url(images/partial.png), -o-linear-gradient(top, #019bc6 0%, #017cb4 100%);
- background-image: url(images/partial.png), -ms-linear-gradient(top, #019bc6 0%, #017cb4 100%);
- background-image: url(images/partial.png), linear-gradient(top, #019bc6 0%, #017cb4 100%);
-}
-
-#acltable tbody tr.selected td.enabled
-{
- background-color: #019bc6;
- background-image: url(images/enabled.png), -moz-linear-gradient(top, #019bc6 0%, #017cb4 100%);
- background-image: url(images/enabled.png), -webkit-gradient(linear, left top, left bottom, color-stop(0%,#019bc6), color-stop(100%,#017cb4));
- background-image: url(images/enabled.png), -o-linear-gradient(top, #019bc6 0%, #017cb4 100%);
- background-image: url(images/enabled.png), -ms-linear-gradient(top, #019bc6 0%, #017cb4 100%);
- background-image: url(images/enabled.png), linear-gradient(top, #019bc6 0%, #017cb4 100%);
-}
-
-#aclform
-{
- top: 80px;
- width: 480px;
- padding: 10px;
- background-color: white;
-}
-
-#aclform div
-{
- padding: 0;
- text-align: center;
- clear: both;
-}
diff --git a/plugins/acl/skins/larry/images/enabled.png b/plugins/acl/skins/larry/images/enabled.png
deleted file mode 100644
index 98215f68c..000000000
--- a/plugins/acl/skins/larry/images/enabled.png
+++ /dev/null
Binary files differ
diff --git a/plugins/acl/skins/larry/images/partial.png b/plugins/acl/skins/larry/images/partial.png
deleted file mode 100644
index 12023f057..000000000
--- a/plugins/acl/skins/larry/images/partial.png
+++ /dev/null
Binary files differ
diff --git a/plugins/acl/skins/larry/templates/table.html b/plugins/acl/skins/larry/templates/table.html
deleted file mode 100644
index c8dff81b1..000000000
--- a/plugins/acl/skins/larry/templates/table.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<div id="aclcontainer" class="uibox listbox">
-<div id="acllist-content" class="scroller withfooter">
- <roundcube:object name="acltable" id="acltable" class="records-table" />
-</div>
-<div id="acllist-footer" class="boxfooter">
- <roundcube:button command="acl-create" id="aclcreatelink" type="link" title="acl.newuser" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" content="+" /><roundcube:button name="aclmenulink" id="aclmenulink" type="link" title="acl.actions" class="listbutton groupactions"onclick="UI.show_popup('aclmenu');return false" innerClass="inner" content="&#9881;" />
- <roundcube:if condition="!in_array('acl_advanced_mode', (array)config:dont_override)" />
- <span class="countdisplay" style="display: inline">
- <label for="acl-switch"><roundcube:label name="acl.advanced" /></label>
- <input type="checkbox" id="acl-switch" onclick="rcmail.command('acl-mode-switch')"<roundcube:exp expression="config:acl_advanced_mode == true ? ' checked=checked' : ''" /> />
- </span>
- <roundcube:endif />
-</div>
-</div>
-
-<div id="aclmenu" class="popupmenu">
- <ul class="toolbarmenu">
- <li><roundcube:button command="acl-edit" label="edit" classAct="active" /></li>
- <li><roundcube:button command="acl-delete" label="delete" classAct="active" /></li>
- </ul>
-</div>
-
-<div id="aclform" class="popupmenu propform">
- <fieldset class="thinbordered"><legend><roundcube:label name="acl.identifier" /></legend>
- <roundcube:object name="acluser" id="acluser" size="35" />
- </fieldset>
- <fieldset class="thinbordered"><legend><roundcube:label name="acl.myrights" /></legend>
- <roundcube:object name="aclrights" />
- </fieldset>
- <div class="formbuttons">
- <roundcube:button command="acl-cancel" type="input" class="button" label="cancel" />
- <roundcube:button command="acl-save" type="input" class="button mainaction" label="save" />
- </div>
-</div>