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); }
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"); }
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"); }
/** * Валидация модели по указанному событию * * @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"); }