hasPermission($name); } public static function getRestrictions($name) { return self::auth()->getRestrictions($name); } public static function resourceIsAllowed($name) { if (self::$allowedResources === null) { $restrictions = self::getRestrictions('director/resources/use'); $list = array(); foreach ($restrictions as $restriction) { foreach (preg_split('/\s*,\s*/', $restriction, -1, PREG_SPLIT_NO_EMPTY) as $key) { $list[$key] = $key; } } self::$allowedResources = $list; } else { $list = self::$allowedResources; } if (empty($list) || array_key_exists($name, $list)) { return true; } return false; } public static function enumDbResources() { return self::enumResources('db'); } public static function enumLdapResources() { return self::enumResources('ldap'); } protected static function enumResources($type) { $resources = array(); foreach (ResourceFactory::getResourceConfigs() as $name => $resource) { if ($resource->get('type') === $type && self::resourceIsAllowed($name)) { $resources[$name] = $name; } } return $resources; } public static function addDbResourceFormElement(QuickForm $form, $name) { static::addResourceFormElement($form, $name, 'db'); } public static function addLdapResourceFormElement(QuickForm $form, $name) { static::addResourceFormElement($form, $name, 'ldap'); } protected static function addResourceFormElement(QuickForm $form, $name, $type) { $list = self::enumResources($type); $form->addElement('select', $name, array( 'label' => 'Resource name', 'multiOptions' => $form->optionalEnum($list), 'required' => true, )); if (empty($list)) { if (self::hasPermission('config/application/resources')) { $form->addHtmlHint(Html::sprintf( $form->translate('Please click %s to create new resources'), Link::create( $form->translate('here'), 'config/resource', null, ['data-base-target' => '_main'] ) )); $msg = sprintf($form->translate('No %s resource available'), $type); } else { $msg = $form->translate('Please ask an administrator to grant you access to resources'); } $form->getElement($name)->addError($msg); } } }