class_ManagementConfigurationDialog.inc 7.93 KiB
<?php
/*
  This code is part of FusionDirectory (http://www.fusiondirectory.org/)
  Copyright (C) 2017-2018  FusionDirectory
  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2 of the License, or
  (at your option) any later version.
  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 St, Fifth Floor, Boston, MA 02110-1301, USA.
class ManagementColumnAttribute extends CompositeAttribute
  function __construct ($label, $description, $ldapName, $attributes, $acl = "")
    parent::__construct($description, $ldapName, $attributes, FALSE, FALSE, $acl, $label);
/*!
 * \brief Management configuration dialog
class ManagementConfigurationDialog extends ManagementDialog
  static function plInfo (): array
    return [
      'plShortName' => 'ManagementConfigurationDialog',
  static function getAttributesInfo (): array
    global $class_mapping;
    // Load column types
    $types = [];
    foreach (array_keys($class_mapping) as $class) {
      if (preg_match('/Column$/', $class) && is_a($class, 'Column', TRUE)) {
        $types[] = $class;
    sort($types);
    return [
      'main' => [
        'class' => ['fullwidth'],
        'name'  => _('Management configuration'),
        'attrs' => [
          new OrderedArrayAttribute(
            new ManagementColumnAttribute(
              _('Columns'),
              _('Columns displayed for this management list'),
              'managementColumns',
                new SelectAttribute(
                  _('Type'), _('Type of column'),
                  'columnType', TRUE,
                  $types, 'LinkColumn'
                new StringAttribute(
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
_('Attribute'), _('LDAP attributes to display, comma separated. Special values "nameAttr" and "mainAttr" also work.'), 'columnAttribute', FALSE ), new StringAttribute( _('Label'), _('Column title'), 'columnLabel', FALSE ), ], 'ManagementConfiguration' ), TRUE, // ordered [], TRUE // edition ), new BooleanAttribute( _('Persistent'), _('Should this configuration be saved in the LDAP as your default configuration for this management page'), 'saveInLdapUser', FALSE, FALSE, 'ManagementConfiguration' ), new ButtonAttribute( _('Forget my persistent configuration'), _('Delete the persistent configuration for this management page so that the default one is used'), 'resetInLdapUser', _('Forget'), NULL, '', 'ManagementConfiguration' ), new BooleanAttribute( _('Global default'), _('Should this configuration be saved in the LDAP as the default configuration for this management page for all users'), 'saveInLdap', FALSE, FALSE, 'fdManagementConfig' ), new ButtonAttribute( _('Forget global default'), _('Delete the global default configuration for this management page so that the default one is used'), 'resetInLdap', _('Forget'), NULL, '', 'fdManagementConfig' ), ] ], ]; } function __construct (management $parent) { global $config; parent::__construct(NULL, NULL, $parent); $this->attributesAccess['saveInLdap']->setInLdap(FALSE); $this->attributesAccess['saveInLdapUser']->setInLdap(FALSE); if (!$this->attrIsWriteable('saveInLdap')) { $this->attributesAccess['saveInLdap']->setVisible(FALSE); } $this->attributesAccess['resetInLdap']->setInLdap(FALSE); $this->attributesAccess['resetInLdapUser']->setInLdap(FALSE); if (!$this->attrIsWriteable('resetInLdap')) { $this->attributesAccess['resetInLdap']->setVisible(FALSE); } if (!$config->hasManagementConfig($this->parent::class, TRUE)) { $this->attributesAccess['resetInLdapUser']->setVisible(FALSE); } if (!$config->hasManagementConfig($this->parent::class, FALSE)) { $this->attributesAccess['resetInLdap']->setVisible(FALSE); } $this->attributesAccess['managementColumns']->setInLdap(FALSE); $this->attributesAccess['managementColumns']->setLinearRendering(FALSE); $columnInfos = $this->parent->getColumnConfiguration();
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
$value = []; foreach ($columnInfos as $column) { if (!isset($column[1]['attributes'])) { $column[1]['attributes'] = ''; } elseif (is_array($column[1]['attributes'])) { $column[1]['attributes'] = json_encode($column[1]['attributes']); } if (!isset($column[1]['label'])) { $column[1]['label'] = ''; } $value[] = [$column[0], $column[1]['attributes'], $column[1]['label']]; } $this->attributesAccess['managementColumns']->setValue($value); } function attrIsReadable ($attr): bool { return $this->attrIsWriteable($attr); } function attrIsWriteable ($attr): bool { global $config, $ui; $noAclAttrs = ['managementColumns', 'saveInLdapUser', 'resetInLdapUser']; $configAttrs = ['saveInLdap', 'resetInLdap']; if ((is_object($attr) && in_array($attr->getLdapName(), $noAclAttrs)) || in_array($attr, $noAclAttrs)) { return TRUE; } elseif ((is_object($attr) && in_array($attr->getLdapName(), $configAttrs)) || in_array($attr, $configAttrs)) { $acl = $ui->get_permissions(CONFIGRDN.$config->current['BASE'], 'configuration/configInLdap', 'fdManagementConfig', $this->readOnly()); return (str_contains((string) $acl, 'w')); } else { return parent::attrIsWriteable($attr); } } function handle_resetInLdapUser () { global $config; $errors = $config->updateManagementConfig($this->parent::class, NULL, TRUE); msg_dialog::displayChecks($errors); if (empty($errors)) { $this->attributesAccess['resetInLdapUser']->setVisible(FALSE); } } function handle_resetInLdap () { global $config; $errors = $config->updateManagementConfig($this->parent::class, NULL, FALSE); msg_dialog::displayChecks($errors); if (empty($errors)) { $this->attributesAccess['resetInLdap']->setVisible(FALSE); } } public function render (): string { global $config, $ui; $smarty = get_smarty(); $smarty->assign('ManagementConfigurationACL', 'rw'); $smarty->assign('fdManagementConfigACL', $ui->get_permissions(CONFIGRDN.$config->current['BASE'], 'configuration/configInLdap', 'fdManagementConfig', $this->readOnly())); return parent::render(); } public function save (): array { global $config;
211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
$columnInfos = []; $values = $this->managementColumns; foreach ($values as $value) { $column = [$value[0], []]; if (!empty($value[1])) { $jsonDecoded = json_decode((string) $value[1], TRUE); if ($jsonDecoded !== NULL) { $column[1]['attributes'] = $jsonDecoded; } else { $column[1]['attributes'] = $value[1]; } } if (!empty($value[2])) { $column[1]['label'] = $value[2]; } $columnInfos[] = $column; } $this->parent->setColumnConfiguration($columnInfos); if ($this->saveInLdapUser) { return $config->updateManagementConfig($this->parent::class, $columnInfos, TRUE); } if ($this->saveInLdap) { return $config->updateManagementConfig($this->parent::class, $columnInfos); } return []; } }