public function run() { $voting = null; if (is_numeric(HU::post('id_voting'))) { $voting = Voting::model()->onlyActive()->with('answer')->findByPk(HU::post('id_voting')); } if ($voting == null) { //echo CHtml::encode($this->controller->widget('vote.widgets.VoteWidget', null, true)); return; } if (Yii::app()->vote->check($voting->id_voting)) { $answers = $_POST['VotingAnswer']['name']; $cr = new CDbCriteria(); $cr->addColumnCondition(array('id_voting' => $voting->id_voting)); if (is_array($answers)) { $cr->addInCondition('id_voting_answer', $answers); } else { if (is_numeric($answers)) { $cr->addColumnCondition(array('id_voting_answer' => $answers)); } } VotingAnswer::model()->updateCounters(array('count' => 1), $cr); VisitSite::saveCurrentVisit(Voting::ID_OBJECT, $voting->id_voting); Yii::app()->user->setState('vote_' . $voting->id_voting, time()); // перегружаем голосовалку, чтоб обновились показатели счетчиков $voting = Voting::model()->onlyActive()->with('answer')->findByPk($voting->id_voting); } $voteCount = $voting->getSumVote(); echo CHtml::encode($this->controller->renderPartial("vote.widgets.views.statistic", array('voting' => $voting, 'voteCount' => $voteCount)), null, true); }
public function afterSave($event) { $className = get_class(VotingAnswer::model()); $postAnswers = HU::post($className, array()); foreach ($this->answers as $answer) { /** * @var $answer VotingAnswer */ if (isset($postAnswers[$answer->id_voting_answer]['name']) && trim($postAnswers[$answer->id_voting_answer]['name']) != '') { $answer->name = trim($postAnswers[$answer->id_voting_answer]['name']); $answer->update(array('name')); } else { $answer->delete(); } } foreach ($postAnswers as $i => $name) { if ($i > 0) { continue; } if (trim($name['name']) == '') { continue; } $answer = BaseActiveRecord::newModel($className, 'backendInsert'); $answer->id_voting = $this->model->id_voting; $answer->name = trim($name['name']); $answer->save(); } }
public function processModel(CEvent $event) { $model = $this->model; $idInstance = $model->getIdInstance(); // Удаляем все модули для данного шаблона SiteModulePlace::model()->resetScope()->deleteAllByAttributes(array('id_module_template' => $idInstance)); // Получаем все модули $modules = $this->modules; foreach ($modules as $m) { $idModule = $m->getIdInstance(); $placePos = HU::post("mod_" . $idModule . "_plc"); $seq = HU::post("mod_" . $idModule . "_seq"); if (!$placePos || $placePos == "onVisible") { continue; } if (!is_numeric($seq)) { $seq = 0; } $place = new SiteModulePlace(); $place->id_module = $idModule; $place->id_module_template = $idInstance; $place->place = $placePos; $place->sequence = $seq; $place->save(); } }
public function processModel(CEvent $event) { $phpScript = $this->phpScript; $phpScriptType = $phpScript->phpScript; $paramsConfig = $phpScriptType->getParametersConfig(); $key = $this->getElementName(); foreach ($paramsConfig as $name => $config) { $val = HU::post($key . '_' . $name); $phpScript->setParameterValue($name, $val); } $phpScript->save(); $this->model->{$this->attributeName} = $phpScript->id_php_script; }
public function processModel(CEvent $event) { $roles = HU::post('roles', array()); foreach ($this->currentRoles as $role) { if (!in_array($role, $roles)) { Yii::app()->authManager->revoke($role, $this->model->id_user); } } foreach ($roles as $role) { if (!in_array($role, $this->currentRoles)) { Yii::app()->authManager->assign($role, $this->model->id_user); } } }
public function processModel(CEvent $event) { $postData = HU::post($this->getElementName(), array()); $selectedData = $this->getSelectedData(); foreach ($selectedData as $id => $name) { if (!in_array($id, $postData)) { Yii::app()->db->createCommand()->delete($this->many2manyTable, $this->relationField . '=:relField AND ' . $this->secondaryField . '=:secField', array(':relField' => $this->model->getIdInstance(), ':secField' => $id)); } } foreach ($postData as $key => $id) { if (!isset($selectedData[$id])) { Yii::app()->db->createCommand()->insert($this->many2manyTable, array($this->relationField => $this->model->getIdInstance(), $this->secondaryField => $id)); } } }
public function processModel(CEvent $event) { /** * @var $model DaObject */ $model = $this->model; $idObject = $model->getIdInstance(); $idView = null; if (HU::post("create_rep") == 1) { //Создать представление с введённым именем $name = trim(HU::post("create_rep_name")); $view = null; if ($name != "") { $view = new DaObjectView(); $id = $idObject . '-view-main'; while (DaObjectView::model()->exists('id_object_view=:id', array(':id' => $id))) { $id = $idObject . '-view-view' . rand(1, 100); } $view->id_object_view = $id; $view->name = $name; $view->id_object = $idObject; $parent = $model->getFieldByType(DataType::ID_PARENT); if ($parent != null) { $view->id_parent = $parent; } //Сортировка $view->sql_order_by = $model->getOrderBy(); $view->save(); $idView = $view->getIdInstance(); } } $columnsForm = HU::post('column'); if (count($columnsForm)) { if (is_null($idView)) { //Свойства стоят, представления нет, приписываем имеющемуся //Если у объекта есть единственное представление, приписываем отмеченные галочки ему $view = DaObjectView::model()->findAll('id_object=:id', array(':id' => $idObject)); if (count($view) != 1) { return; } $idView = $view[0]->getIdInstance(); } //Уже приписанные представлению колонки $already = array(); $columns = DaObjectViewColumn::model()->findAll('id_object_view=:id', array(':id' => $idView)); foreach ($columns as $c) { $already[] = $c->id_object_parameter; } foreach ($columnsForm as $col) { if (in_array($col, $already)) { continue; } $p = $model->getParameterObjectByIdParameter($col); if ($p == null) { continue; } $column = new DaObjectViewColumn(); $column->id_object_view_column = $idView . '-' . str_replace('_', '-', $p->getFieldName()); $column->id_object_view = $idView; $column->id_object = $idObject; $column->id_object_parameter = $p->getIdParameter(); $column->caption = $p->getCaption(); $column->id_data_type = $p->getType(); $column->field_name = $p->getFieldName(); $column->save(); } } }
public function actionIndex() { /** * @var DaActiveRecord $model * @var DaObject $object */ $object = Yii::app()->backend->object; $idObject = $object->id_object; $model = null; $id_v = HU::get(ObjectUrlRule::PARAM_ACTION_VIEW); $id = HU::post('id_instance'); if ($id == null) { $id = HU::get(ObjectUrlRule::PARAM_OBJECT_INSTANCE); } if ($id == null && $id_v == null) { throw new CHttpException(400, 'Bad Request'); } $statusProcess = intval(HU::post('submit_form', ViewController::MODE_VIEW)); if (!in_array($statusProcess, array(ViewController::MODE_VIEW, ViewController::MODE_SAVE_AND_CLOSE, ViewController::MODE_ACCEPT, ViewController::MODE_SAVE_AND_CREATE_NEW))) { throw new CHttpException(400, 'Bad Request'); } $readOnlyInstance = false; if ($id != null) { if ($id == -1) { if (!Yii::app()->authManager->canCreateInstance($idObject, Yii::app()->user->id)) { throw new CHttpException(403, 'Нет прав на создание'); } $id = null; } else { // Редактируют, проверяем доступность текущему пользователю if (!Yii::app()->authManager->checkObjectInstance(DaDbAuthManager::OPERATION_EDIT, Yii::app()->user->id, $idObject, $id)) { throw new CHttpException(403, 'Нет прав на редактирование или объект не существует'); } } } else { if ($id_v != null) { if ($id_v == -1) { throw new CHttpException(403); } else { if (!Yii::app()->authManager->checkObjectInstance(DaDbAuthManager::OPERATION_VIEW, Yii::app()->user->id, $idObject, $id_v)) { throw new CHttpException(403, "Нет прав на просмотр"); } $id = $id_v; $readOnlyInstance = true; } } } if ($id != null) { $model = $object->getModel()->findByIdInstance($id); if ($model == null) { throw new CHttpException(404); } $model->setScenario('backendUpdate'); } else { $model = $object->getModel(true); $model->setIsNewRecord(true); $model->setScenario('backendInsert'); } $visualElementArray = array(); $event = new InstanceAvailableEvent($this, $model); $this->raiseEvent(ViewController::EVENT_ON_INSTANCE_AVAILABLE, $event); $available = $event->status; if ($available == ViewController::ENTITY_STATUS_NOT_VISIBLE) { //Если нет прав на просмотр, то уходим return; // TODO } if ($available == ViewController::ENTITY_STATUS_READ_ONLY) { $readOnlyInstance = true; } $parameters = $object->parameters; foreach ($parameters as $objectParameter) { /** * @var $objectParameter ObjectParameter */ // Детальная обработка: // Если свойство является группирующем, то устанавливаем значение по умолчанию if ($model->isNewRecord && HU::get(ObjectUrlRule::PARAM_GROUP_PARAMETER) == $objectParameter->getIdParameter()) { $model->{$objectParameter->getFieldName()} = HU::get(ObjectUrlRule::PARAM_GROUP_INSTANCE); } // Установка значений свойств экземпляра по умолчанию if ($objectParameter->getType() == DataType::SEQUENCE) { if ($model->isNewRecord) { $model->{$objectParameter->getFieldName()} = 0; } } else { if ($objectParameter->getType() == DataType::ID_PARENT) { if ($model->isNewRecord) { // TODO - сделать проверку, что пользователь может создавать раздел в переданном ИД паренте $model->{$objectParameter->getFieldName()} = HU::get(ObjectUrlRule::PARAM_OBJECT_PARENT); } if ($objectParameter->getAdditionalParameter() != 1) { continue; } } } if (!$objectParameter->isVisible()) { continue; } $event = new ParameterAvailableEvent($this, $model, $objectParameter); $this->raiseEvent(ViewController::EVENT_ON_PARAMETER_AVAILABLE, $event); $availableStatus = $event->status; if ($availableStatus == ViewController::ENTITY_STATUS_NOT_VISIBLE) { //Невидим continue; } $event = new CreateVisualElementEvent($this, $model, $objectParameter); $this->raiseEvent(ViewController::EVENT_ON_CREATE_VISUAL_ELEMENT, $event); $visualElement = $event->visualElement; // Если свойство является группирующем, то пропускаем его. /*if ($visualElement == null && HU::get(ObjectUrlRule::PARAM_GROUP_PARAMETER) == $objectParameter->getIdParameter()) { $visualElement = Yii::app()->controller->createWidget('backend.widgets.hiddenField.HiddenFieldWidget', array( 'model' => $model, 'attributeName' => $objectParameter->getFieldName(), )); $visualElementArray[] = $visualElement; $model->{$objectParameter->getFieldName()} = HU::get(ObjectUrlRule::PARAM_GROUP_INSTANCE); continue; }*/ if ($visualElement == null) { $visualElement = VisualElementFactory::getVisualElement($model, $objectParameter); } if ($visualElement == null) { continue; } if ($availableStatus == ViewController::ENTITY_STATUS_READ_ONLY || $readOnlyInstance) { //Только для чтения $visualElement->setReadOnly(true); } if ($objectParameter->getFieldName() != null && $model instanceof DaInstance && $visualElement instanceof VisualElementBaseWidget) { $model->addValidator(CValidator::createValidator('safe', $model, $objectParameter->getFieldName())); } $visualElementArray[] = $visualElement; } // закончили обрабатывать свойства $modelClass = get_class($model); if (isset($_POST[$modelClass]) || isset($_POST['submit_form'])) { if (isset($_POST[$modelClass])) { $model->attributes = $_POST[$modelClass]; } $event = new PostFormEvent($this, $model); $this->raiseEvent(ViewController::EVENT_ON_POST_FORM, $event); Yii::import('ygin.modules.search.components.SearchComponent', true); if ($model->isNewRecord) { // insert if ($model->save()) { SearchComponent::replaceIndex($model); //$instance->updateObjectInstanceInfo(1); $newIdInstance = $model->getIdInstance(false); $seqKey = $object->getFieldByType(DataType::SEQUENCE); if ($seqKey != null) { $pk = $object->getFieldByType(DataType::PRIMARY_KEY); $max = Yii::app()->db->createCommand('SELECT MAX(' . $seqKey . ') FROM ' . $object->table_name)->queryScalar(); $sql = 'UPDATE ' . $object->table_name . ' SET ' . $seqKey . ' = :max WHERE ' . $pk . '=:id'; Yii::app()->db->createCommand($sql)->execute(array(':max' => $max + 1, ':id' => $newIdInstance)); } Yii::log('Добавлен новый экземпляр (' . $object->getName() . ') id=' . $newIdInstance, CLogger::LEVEL_INFO, 'backend.model.insert'); } else { $statusProcess = ViewController::MODE_ERROR; } } else { if ($model->save()) { SearchComponent::replaceIndex($model); //$instance->updateObjectInstanceInfo(2); Yii::log('Изменение (' . $object->getName() . ') id=' . $model->getIdInstance(), CLogger::LEVEL_INFO, 'backend.model.update'); } else { $statusProcess = ViewController::MODE_ERROR; } } } if ($statusProcess == ViewController::MODE_ERROR || $statusProcess == ViewController::MODE_VIEW) { $this->render('/view', array('model' => $model, 'visualElementArray' => $visualElementArray)); } else { if ($statusProcess == ViewController::MODE_ACCEPT) { $url = ObjectUrlRule::createUrlFromCurrent(BackendModule::ROUTE_INSTANCE_VIEW, array(ObjectUrlRule::PARAM_OBJECT_INSTANCE => $model->getIdInstance())); $this->redirect($url); } else { if ($statusProcess == ViewController::MODE_SAVE_AND_CLOSE) { $url = ObjectUrlRule::createUrlFromCurrent(BackendModule::ROUTE_INSTANCE_LIST, array(), array(ObjectUrlRule::PARAM_OBJECT_INSTANCE, ObjectUrlRule::PARAM_ACTION_VIEW)); $this->redirect($url); } else { if ($statusProcess == ViewController::MODE_SAVE_AND_CREATE_NEW) { $url = ObjectUrlRule::createUrlFromCurrent(BackendModule::ROUTE_INSTANCE_VIEW, array(ObjectUrlRule::PARAM_OBJECT_INSTANCE => -1)); $this->redirect($url); } } } } }
public function actionAutocomplete() { $query = HU::post('query'); $idObject = HU::post('idObject'); $object = DaObject::getById($idObject); $idCaptionField = $object == null ? null : $object->id_field_caption; if ($idCaptionField == null) { return json_encode(array()); } $parameter = $object->getParameterObjectByIdParameter($idCaptionField); $captionField = $parameter->getFieldName(); $where = $captionField . ' LIKE :q'; $data = $object->getModel()->findAll(array('condition' => $where, 'params' => array(':q' => $query . '%'), 'limit' => 10)); $result = array(); foreach ($data as $instance) { /** * @var $instance DaActiveRecord */ array_push($result, array("label" => $instance->getInstanceCaption(), "value" => $instance->getIdInstance())); } echo json_encode($result); }
public function processModel(CEvent $event) { $permissionsNew = HU::post('setPermission') == null ? array() : HU::post('setPermission'); $idObject = $this->model->getIdInstance(); $oldIdObject = $this->model->getPkBeforeSave(); $roles = Yii::app()->authManager->getAuthItems(CAuthItem::TYPE_ROLE); if ($idObject != $oldIdObject) { $items = Yii::app()->authManager->getAuthItemByIdObject($oldIdObject); foreach ($items as $name => $item) { Yii::app()->authManager->removeAuthItem($name); } } $permissionsOld = array(); if ($idObject != '') { $permissions = array(DaDbAuthManager::OPERATION_VIEW => 'просмотра', DaDbAuthManager::OPERATION_EDIT => 'изменения', DaDbAuthManager::OPERATION_DELETE => 'удаления', DaDbAuthManager::OPERATION_CREATE => 'создания'); foreach ($roles as $roleName => $role) { /** * @var CAuthItem $role */ foreach ($permissions as $permId => $perm) { $op = Yii::app()->authManager->getAuthItemObject($permId, $idObject); if ($op != null && Yii::app()->authManager->hasItemChild($roleName, $op->getName())) { $permissionsOld[] = $roleName . '-' . $permId; } } } } $object = DaObject::getById($idObject); $createPermissions = array_diff($permissionsNew, $permissionsOld); foreach ($createPermissions as $info) { list($roleName, $action) = explode('-', $info); if (!isset($permissions[$action])) { continue; } $op = Yii::app()->authManager->getAuthItemObject($action, $idObject); if ($op == null) { $op = Yii::app()->authManager->createOperationForObject($action, $idObject, 'Операция ' . $permissions[$action] . ' для объекта ' . $object->getName()); } $role = Yii::app()->authManager->getAuthItem($roleName); if (!Yii::app()->authManager->hasItemChild($role->getName(), $op->getName())) { $role->addChild($op->getName()); } } $deletePermissions = array_diff($permissionsOld, $permissionsNew); foreach ($deletePermissions as $info) { list($roleName, $action) = explode('-', $info); if (!isset($permissions[$action])) { continue; } $op = Yii::app()->authManager->getAuthItemObject($action, $idObject); if ($op == null) { continue; } Yii::app()->authManager->removeItemChild($roleName, $op->getName()); } // права на общий доступ работы с объектом (доступ к объекту в общем меню) foreach ($roles as $roleName => $role) { /** * @var CAuthItem $role */ $exists = false; foreach ($permissions as $permId => $perm) { $op = Yii::app()->authManager->getAuthItemObject($permId, $idObject); if ($op != null && Yii::app()->authManager->hasItemChild($roleName, $op->getName())) { $exists = true; break; } } $op = Yii::app()->authManager->getAuthItemObject(DaDbAuthManager::OPERATION_LIST, $idObject); if ($exists) { // создаем if ($op == null) { $op = Yii::app()->authManager->createOperationForObject(DaDbAuthManager::OPERATION_LIST, $idObject, 'Просмотр списка данных объекта ' . $object->getName()); } if (!Yii::app()->authManager->hasItemChild($role->getName(), $op->getName())) { $role->addChild($op->getName()); } } else { if ($op != null && !$exists) { // удаляем if (Yii::app()->authManager->hasItemChild($role->getName(), $op->getName())) { Yii::app()->authManager->removeItemChild($roleName, $op->getName()); } } } } }
$table .= '<thead><tr>'; foreach ($row as $k => $v) { $table .= '<th>' . $k . '</th>'; } $table .= '</tr></thead><tbody>'; } $table .= '<tr>'; foreach ($row as $k => $v) { $table .= '<td>' . $v . '</td>'; } $table .= '</tr>'; } $table .= '</tbody></table>'; echo $table; } else { $_POST['sql'] = str_replace("\r", '', HU::post('sql')); $delimiter = ';'; if (preg_match('~\\ndelimiter(.*)\\n~iUs', $_POST['sql'], $reg)) { $delimiter = trim($reg[1]); $_POST['sql'] = preg_replace('~\\ndelimiter(.*)\\n~iUs', "\n", $_POST['sql']); } $_POST['sql'] = preg_replace('~--.*\\n~iUs', "\n", $_POST['sql']); $sqlArray = explode("{$delimiter}\n", $_POST['sql']); $errors = array(); $affected = 0; foreach ($sqlArray as $k => $sqlQuery) { if (trim($sqlQuery) == null) { unset($sqlArray[$k]); continue; } $affected += Yii::app()->db->createCommand($sqlQuery)->execute();
public function actionBooleanColumn() { $idObject = HU::post('idObject', null); $idInstance = HU::post('idInstance', null); $idObjectParameter = HU::post('idObjectParameter', null); $value = HU::post('value', -1); try { $object = DaObject::getById($idObject); $object->registerYiiEventHandler(); if ($object == null) { throw new Exception('Некорректные параметры запроса (объект).'); } $model = $object->getModel()->findByIdInstance($idInstance); if ($model == null) { throw new Exception('Некорректные параметры запроса (экземпляр).'); } $objectParam = $object->getParameterObjectByIdParameter($idObjectParameter); if ($objectParam == null) { throw new Exception('Некорректные параметры запроса (параметр).'); } if (!Yii::app()->authManager->checkObjectParameter(Yii::app()->user->id, $idObject, $idInstance, $idObjectParameter)) { throw new Exception('Доступ на изменение ограничен.'); } $field = $objectParam->getFieldName(); $value = intval($model->{$field}); $model->{$field} = $value === 1 ? 0 : 1; $model->update(array($field)); $value = $model->{$field}; echo CJSON::encode(array('message' => 'Данные успешно обновлены', 'value' => $value, 'idInstance' => $idInstance, 'idObjectParameter' => $idObjectParameter)); } catch (Exception $e) { echo CJSON::encode(array('error' => $e->getMessage(), 'value' => $value, 'idInstance' => $idInstance, 'idObjectParameter' => $idObjectParameter)); } }