示例#1
5
 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);
 }
示例#2
0
 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();
     }
 }
示例#3
0
 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();
     }
 }
示例#4
0
 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;
 }
示例#5
0
 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);
         }
     }
 }
示例#6
0
 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));
         }
     }
 }
示例#7
0
 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();
         }
     }
 }
示例#8
0
 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);
                 }
             }
         }
     }
 }
示例#9
0
 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);
 }
示例#10
0
 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());
                 }
             }
         }
     }
 }
示例#11
0
文件: sql.php 项目: kot-ezhva/ygin
             $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();
示例#12
0
 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));
     }
 }