public function actionDelete()
 {
     $validator = CCoreObjectsManager::getCoreModelFieldValidator(CRequest::getInt("id"));
     $field = $validator->field_id;
     $validator->remove();
     $this->redirect("fields.php?action=edit&id=" . $field);
 }
 public function actionDelete()
 {
     $object = CCoreObjectsManager::getCoreModelTask(CRequest::getInt("id"));
     $model = $object->model_id;
     $object->remove();
     $this->redirect("models.php?action=edit&id=" . $model);
 }
 public function actionChangeAuthors()
 {
     $field = CCoreObjectsManager::getCoreModelField(CRequest::getInt("id"));
     $field->is_authors = 1 - $field->is_authors;
     $field->save();
     echo $field->is_authors;
 }
 /**
  * Проверяем, что текущий пользователь имеет право редактировать записи
  *
  * @param CModel $model
  * @return bool
  */
 public function onUpdate(CModel $model)
 {
     $result = true;
     if (CSession::getCurrentUser()->getLevelForCurrentTask() == ACCESS_LEVEL_NO_ACCESS) {
         /**
          * Проверим, что пользователь имеет доступ к текущей задаче
          */
         $result = false;
     } elseif (CSession::getCurrentUser()->getLevelForCurrentTask() == ACCESS_LEVEL_READ_OWN_ONLY || CSession::getCurrentUser()->getLevelForCurrentTask() == ACCESS_LEVEL_READ_ALL) {
         /**
          * Пользователь с правом только на чтение не может что-либо сохранять
          */
         $result = false;
     } elseif (CSession::getCurrentUser()->getLevelForCurrentTask() == ACCESS_LEVEL_WRITE_OWN_ONLY) {
         /**
          * Проверим, что текущий пользователь есть в authors-полях модели,
          * которую будет сохранять
          */
         $result = false;
         $coreModel = CCoreObjectsManager::getCoreModel($model);
         if (is_null($coreModel)) {
             /**
              * Если модели нет, то будем считать, что отвалидировано
              * успешно. Иначе сломается все остальное
              */
             $result = true;
         } else {
             if ($coreModel->getAuthorsFields()->getCount() == 0) {
                 /**
                  * Не стопорим систему если она не настроена.
                  * Если поля не указаны, то не валидируем
                  */
                 $result = true;
             } else {
                 /**
                  * Проверяем, что текущий пользователь прописан в authors-полях модели
                  */
                 foreach ($coreModel->getAuthorsFields()->getItems() as $field) {
                     $fieldName = $field->field_name;
                     if ($model->{$fieldName} == CSession::getCurrentPerson()->getId()) {
                         $result = true;
                     }
                 }
             }
         }
     }
     return $result;
 }
 public function save()
 {
     $model = CCoreObjectsManager::getCoreModel($this->id);
     foreach ($this->getItems()->getItems() as $item) {
         $field = new CCoreModelField();
         $field->model_id = $model->getId();
         $field->field_name = $item["name"];
         $field->save();
         if ($item["translation"] !== "") {
             $t = new CCoreModelFieldTranslation();
             $t->field_id = $field->getId();
             $t->value = $item["translation"];
             $t->save();
         }
         if ($item["validator"] !== "0") {
             $v = new CCoreModelFieldValidator();
             $v->field_id = $field->getId();
             $v->validator_id = $item["validator"];
             $v->save();
         }
     }
 }
 protected function getAttributes()
 {
     $elementName = $this->params['element'];
     $attribute = $this->params['attribute'];
     $model = $this->params['model'];
     //
     $attributes = array();
     $attributes['type'] = 'text';
     $attributes['name'] = $elementName . '[' . $attribute . ']';
     // если в бине есть значение - берем его
     $attributes['value'] = $this->getValue();
     // обязательность поля
     $validators = CCoreObjectsManager::getFieldValidators($model);
     if (array_key_exists($attribute, $validators)) {
         $attributes['required'] = 'required';
     }
     $attributes['class'] = array();
     if (array_key_exists('class', $this->params)) {
         $attributes['class'][] = $this->params['class'];
     }
     return $attributes;
 }
 /**
  * Валидаторы полей для модели
  *
  * @param CModel $model
  * @return array
  */
 public static function getFieldValidators(CModel $model)
 {
     $validators = array();
     /**
      * Сначала получаем валидаторы из модели
      */
     foreach ($model->getValidationRules() as $type => $fields) {
         foreach ($fields as $field) {
             $v = array();
             if (array_key_exists($field, $validators)) {
                 $v = $validators[$field];
             }
             $v[] = $type;
             $validators[$field] = $v;
         }
     }
     /**
      * Теперь берем валидаторы из базы
      */
     $persistedModel = CCoreObjectsManager::getCoreModel(get_class($model));
     if (!is_null($persistedModel)) {
         foreach ($persistedModel->fields->getItems() as $field) {
             foreach ($field->validators->getItems() as $validator) {
                 $v = array();
                 if (array_key_exists($field->field_name, $validators)) {
                     $v = $validators[$field->field_name];
                 }
                 if (!is_null($validator->getValidatorObject())) {
                     $v[] = $validator->getValidatorObject();
                 }
                 $validators[$field->field_name] = $v;
             }
         }
     }
     return $validators;
 }
 /**
  * Получение данных модели по идентификатору
  */
 private function actionJSONGet()
 {
     // получим название класса модели, которую надо пользователю
     $modelClass = CRequest::getString("model");
     // идентификатор
     $id = CRequest::getInt("id");
     // создадим объект, посмотрим, в какой таблице он весь живет
     /**
      * @var $model CActiveModel
      */
     $model = new $modelClass();
     // проверим, может не реализует нужный интерфейс
     if (!is_a($model, "IJSONSerializable")) {
         throw new Exception("Класс " . $modelClass . " не реализует интерфейс IJSONSerializable");
     }
     $modelTable = $model->getRecord()->getTable();
     // получим из этой таблицы объект
     $ar = CActiveRecordProvider::getById($modelTable, $id);
     if (is_null($ar)) {
         echo json_encode(null);
         return;
     }
     // создадим новый объект указанного типа
     /**
      * @var $model IJSONSerializable
      */
     $model = new $modelClass($ar);
     // получим json объект модели
     $jsonObj = $model->toJsonObject();
     // добавим к json-объекту перевод
     $jsonObj->_translation = CCoreObjectsManager::getAttributeLabels($model);
     // сразу добавим штатную валидацию
     // может, чуть позже, пока нет
     echo json_encode($jsonObj);
 }
 /**
  * Собираем данные для сабформы поиска
  */
 private function initGlobalSearchSubform()
 {
     $search = array();
     /**
      * Инициализация левой части с параметрами поиска
      */
     if (CRequest::getGlobalFilterClass() != "") {
         $modelMeta = CCoreObjectsManager::getCoreModel(CRequest::getGlobalFilterClass());
         if (!is_null($modelMeta)) {
             $globalSearch = CRequest::getGlobalFilter();
             if ($globalSearch["field"] !== false) {
                 /**
                  * Получаем название поля, по которому в данный
                  * момент выполняется поиск
                  */
                 $translations = $modelMeta->getTranslationDefault();
                 $filterValue = $globalSearch["value"];
                 if (CRequest::getString("filterLabel") != "") {
                     $filterValue = CRequest::getString("filterLabel");
                 }
                 $search[$globalSearch["field"]] = $filterValue;
                 if (array_key_exists($globalSearch["field"], $translations)) {
                     unset($search[$globalSearch["field"]]);
                     $search[$translations[$globalSearch["field"]]] = $filterValue;
                 }
             }
         }
     }
     $this->setData("__search", $search);
     /**
      * Поиск только в рамках текущей задачи
      */
     $this->setData("__current_task", "");
     if (!is_null(CSession::getCurrentTask())) {
         $this->setData("__current_task", CSession::getCurrentTask()->getId());
     }
     CSession::setCurrentController($this);
     $this->setData("__controller", $this);
 }
Пример #10
0
 public static function addObject(CActiveModel $model)
 {
     $doc = self::createSolrInputDocument($model, true, true);
     $response = self::getClient()->addDocument($doc);
     /**
      * Непосредственно связанные объекты
      */
     foreach ($model->getRelations() as $name => $params) {
         if ($params["relationPower"] == RELATION_HAS_ONE) {
             $obj = $model->{$name};
             if (!is_null($obj)) {
                 $modelMeta = CCoreObjectsManager::getCoreModel(get_class($obj));
                 if (!is_null($modelMeta)) {
                     if ($modelMeta->isExportable()) {
                         $doc = self::createSolrInputDocument($obj, false, false);
                         $doc->addField("_parent_class_", get_class($model));
                         $doc->addField("_parent_field_", self::getConditionField($params));
                         $response = self::getClient()->addDocument($doc);
                     }
                 }
             }
         } elseif ($params["relationPower"] == RELATION_HAS_MANY) {
         } elseif ($params["relationPower"] == RELATION_MANY_TO_MANY) {
         } elseif ($params["relationPower"] == RELATION_COMPUTED) {
         }
     }
 }
 public function actionExport()
 {
     $metaModel = CCoreObjectsManager::getCoreModel(CRequest::getInt("id"));
     if (!$metaModel->isExportable()) {
         $this->redirect("models.php?action=edit&id=" . $metaModel->getId());
         echo 1;
         return false;
     }
     $modelClass = $metaModel->class_name;
     $model = new $modelClass();
     $records = CActiveRecordProvider::getAllFromTable($model->getRecord()->getTable());
     foreach ($records->getItems() as $record) {
         $model = new $modelClass($record);
         CSolr::addObject($model);
     }
     CSolr::commit();
     echo 1;
 }
 public function actionDelete()
 {
     $validator = CCoreObjectsManager::getCoreValidator(CRequest::getInt("id"));
     $validator->remove();
     $this->redirect("?action=index");
 }
Пример #13
0
    public static function activeLookup($name, CModel $model, $catalog = "", $isMultiple = false, $properties = array(), $allowCreation = false)
    {
        /**
         * Безумно полезная штука для работы со связанными
         * моделями. Если в названии поля есть скобки, то производится
         * разбор вида подмодель[ее поле]
         */
        $submodelName = "";
        if (strpos($name, "[") !== false) {
            $submodelName = substr($name, 0, strpos($name, "["));
            $name = CUtils::strRight($name, "[");
            $name = CUtils::strLeft($name, "]");
            $model = $model->{$submodelName};
        }
        $field = $model::getClassName();
        if ($submodelName !== "") {
            $field .= "[" . $submodelName . "]";
        }
        $field .= "[" . $name . "]";
        $fieldRequired = false;
        $validators = CCoreObjectsManager::getFieldValidators($model);
        if (array_key_exists($name, $validators)) {
            $fieldRequired = true;
        }
        $inline = "";
        $class = self::getFielsizeClass();
        $inline .= ' class="' . $class . '"';
        $data = $model->{$name};
        ?>
        <div class="catalogLookup" asu-catalog="<?php 
        echo $catalog;
        ?>
" asu-multiple="<?php 
        echo $isMultiple ? "true" : "false";
        ?>
" asu-value-name="<?php 
        echo $field;
        ?>
" asu-creation="<?php 
        echo $allowCreation ? "true" : "false";
        ?>
">

        <?php 
        if (is_object($data)) {
            ?>
            <?php 
            $index = 0;
            ?>
            <?php 
            foreach ($data->getItems() as $val) {
                $index++;
                ?>
                <input type="hidden" name="<?php 
                echo $field;
                ?>
[<?php 
                echo $index;
                ?>
]" value="<?php 
                echo $val->getId();
                ?>
" asu-type="value">
            <?php 
            }
            ?>
        <?php 
        } else {
            ?>
            <input type="hidden" name="<?php 
            echo $field;
            ?>
" value="<?php 
            echo $data;
            ?>
" asu-type="value">
        <?php 
        }
        ?>
		<?php 
        foreach ($properties as $key => $value) {
            ?>
			<input type="hidden" value="<?php 
            echo $value;
            ?>
" asu-type="property" asu-property-key="<?php 
            echo $key;
            ?>
">
		<?php 
        }
        ?>

        <table <?php 
        echo $inline;
        ?>
 id="<?php 
        echo $name;
        ?>
" style="margin-left: 0px; ">
            <tr>
                <td width="100%">
                    <input type="text" value="" asu-name="lookup" placeholder="Введите текст для поиска" style="width: 95%; ">
                </td>
                <td style="width: 16px; ">
                    <i class="icon-search" />
                </td>
            </tr>
            <tr>
                <td width="100%">
                    <div class="btn-group btn-group-vertical" asu-type="placeholder" style="width: 100%; ">

                    </div>
                </td>
                <td style="width: 16px; ">
                    <i class="icon-remove" />
                </td>
            </tr>
        </table>
        </div>
        <?php 
        if (!self::$_catalogLookupInit) {
            self::$_catalogLookupInit = true;
            ?>
            <script>
                jQuery(document).ready(function(){
                    jQuery(".catalogLookup").catalogLookup();
                });
            </script>
            <?php 
        }
        if ($fieldRequired) {
            self::requiredStar();
        }
    }
 public function actionGlobalSearch()
 {
     /**
      * Запрос, который отправил пользователь
      */
     $userQuery = CRequest::getString("keyword");
     /**
      * Задачи, в которые у него есть доступ
      */
     $tasks = array();
     foreach (CSession::getCurrentUser()->getRoles()->getItems() as $role) {
         $tasks[] = $role->getId();
     }
     /**
      * Непосредственно, поиск
      */
     $params = array("_is_main_" => 1, "_highlight_" => "doc_body");
     $resultObj = CSolr::search($userQuery, $params);
     /**
      * Формируем модель данных для рисования результата
      */
     $result = array();
     $userQuery = mb_strtolower($userQuery);
     foreach ($resultObj->getDocuments() as $doc) {
         $hl = $resultObj->getHighlighingByDocument($doc);
         $res = array("text" => implode(", ", $hl));
         /**
          * Получаем метамодель для этого типа объекта
          * Смотрим, какие задачи с ней связны
          */
         $model = CCoreObjectsManager::getCoreModel($doc->_class_);
         $tasks = array();
         if (!is_null($model)) {
             foreach ($model->tasks->getItems() as $task) {
                 /**
                  * Для каждой задачи формируем URL с фильтром
                  */
                 $title = $task->name;
                 $url = $task->url;
                 $urlParams = array();
                 $urlParams[] = "filterClass=" . $doc->_class_;
                 $urlParams[] = "filterLabel=" . str_replace("</em>", "", str_replace("<em>", "", implode(", ", $hl)));
                 foreach ($model->fields->getItems() as $field) {
                     if (property_exists($doc, $field->field_name)) {
                         $fieldName = $field->field_name;
                         $fieldValue = mb_strtolower($doc->{$fieldName});
                         if (mb_strpos($fieldValue, $userQuery) !== false) {
                             if (mb_strlen($fieldValue) < 100) {
                                 $urlParams[] = "filter=" . $fieldName . ":" . $fieldValue;
                             } else {
                                 $urlParams[] = "filter=" . $fieldName . ":" . $userQuery;
                             }
                         }
                     }
                 }
                 $url .= "?" . implode("&", $urlParams);
                 $tasks[$url] = $title;
             }
         }
         $res["tasks"] = $tasks;
         $result[] = $res;
     }
     /**
      * Склеиваем результаты с одинаковым текстом
      */
     $outResults = array();
     foreach ($result as $res) {
         $key = $res["text"];
         if (array_key_exists($key, $outResults)) {
             $obj = $outResults[$key];
             $tasks = $obj["tasks"];
             foreach ($res["tasks"] as $url => $title) {
                 $tasks[$url] = $title;
             }
             $obj["tasks"] = $tasks;
         } else {
             $obj = $res;
         }
         $outResults[$key] = $obj;
     }
     /**
      * Отображением
      */
     $this->setData("results", $outResults);
     $this->renderView("_search/results.tpl");
 }
Пример #15
0
 /**
  * Валидация модели по указанному событию
  *
  * @param $event
  * @return bool
  */
 protected function validateModel($event)
 {
     $isValid = true;
     /**
      * Валидация самой модели
      * Если текущая модель - наследник CFormModel, то, если не можем найти модель
      * для нее, смотрим модели объектов в публичных свойствах и валидируем их
      */
     $modelsToValidate = array();
     if (is_a($this, "CFormModel")) {
         $model = CCoreObjectsManager::getCoreModel($this);
         if (!is_null($model)) {
             $modelsToValidate[] = $this;
         } else {
             $publicVars = get_object_vars($this);
             foreach ($publicVars as $key => $value) {
                 if (is_object($value)) {
                     if (is_a($value, "CModel")) {
                         $modelsToValidate[] = $value;
                     }
                 }
             }
         }
     } else {
         $modelsToValidate[] = $this;
     }
     foreach ($modelsToValidate as $model) {
         foreach (CCoreObjectsManager::getModelValidators($model)->getItems() as $validator) {
             if (!$validator->{$event}($model)) {
                 $error = $validator->getError();
                 $this->getValidationErrors()->add($this->getValidationErrors()->getCount(), $error);
                 $isValid = false;
             }
         }
     }
     return $isValid;
 }
 public function actionEdit()
 {
     $t = CCoreObjectsManager::getCoreModelFieldTranslation(CRequest::getInt("id"));
     $this->setData("translation", $t);
     $this->renderView("_core/translation/edit.tpl");
 }