Пример #1
0
 public function processAddAction()
 {
     $permissionTemplateId = (int) $this->_getParam('aclTemplateId');
     $type = $this->_getParam('type');
     $value = preg_replace('/[^a-zA-Z]+/', '', ucwords(strtolower($this->_getParam('value', ''))));
     $prettyName = ucwords(preg_replace('/([A-Z]{1})/', ' \\1', $value));
     $data = false;
     $isDefault = false;
     $permissionTemplate = new PermissionTemplate();
     $permissionTemplate->permissionTemplateId = $permissionTemplateId;
     if ($permissionTemplate->populate()) {
         $xml = new SimpleXMLElement($permissionTemplate->template);
     } else {
         $xml = $this->_generateDefaultTemplateXML();
         $isDefault = true;
     }
     $defaultModule = 'default';
     $error = '';
     switch ($type) {
         case 'resource':
             if (isset($xml->{$defaultModule}->{$value})) {
                 $error = __('Resource already exists') . ': ' . $value;
                 trigger_error($error, E_USER_NOTICE);
                 break;
             }
             $xml->{$defaultModule}->addChild($value);
             $data['id'] = $value;
             $data['name'] = $prettyName;
             break;
         case 'permission':
             $resourceId = $this->_getParam('resourceId');
             $mode = strtolower($this->_getParam('mode'));
             if (!isset($xml->{$defaultModule}->{$resourceId})) {
                 $error = __('Resource not exists') . ': ' . $resourceId;
                 trigger_error($error, E_USER_NOTICE);
                 break;
             }
             $action = $xml->{$defaultModule}->{$resourceId}->addChild($mode, lcfirst($value));
             $action->addAttribute('access', '0');
             $newMode = ucfirst($mode);
             $chkMode = '_chkLabel' . $newMode;
             $data = $this->_generateCheckboxInputs($this->{$chkMode}, array(array('name' => $value, 'prettyName' => $prettyName, 'value' => 0)), $resourceId);
             break;
         default:
             $error = __('Invalid type') . ': ' . $type;
             trigger_error($error, E_USER_NOTICE);
     }
     if (strlen($error) > 0) {
         $data['error'] = $error;
     } else {
         if ($isDefault) {
             $aclMemKey = PermissionTemplate::ACL_MEMKEY . '_default';
             $this->_memcache->set($aclMemKey, $xml->asXML());
         } else {
             $permissionTemplate->template = $xml->asXML();
             $permissionTemplate->persist();
         }
     }
     $json = Zend_Controller_Action_HelperBroker::getStaticHelper('json');
     $json->suppressExit = true;
     $json->direct($data);
 }