public function onParameterAvailable(ParameterAvailableEvent $event) { parent::onParameterAvailable($event); if ($event->status == ViewController::ENTITY_STATUS_NOT_VISIBLE) { return; } $param = $event->objectParameter; $name = $param->getFieldName(); if ($name == 'id_php_script') { /** * @var $instance SiteModule */ $instance = $event->model; // Определяем тип создаваемого/редактируемого раздела $static = true; if (!$instance->isNewRecord) { if ($instance->id_php_script != null) { $static = false; } } else { if (HU::get(ObjectUrlRule::PARAM_SYSTEM_MODULE) != null) { $static = false; } } if ($static) { $event->status = ViewController::ENTITY_STATUS_NOT_VISIBLE; } } }
public function onBeforeGrid(BeforeGridEvent $event) { if (isset(Yii::app()->controller->buttons)) { if (Yii::app()->authManager->canCreateInstance($this->idObject, Yii::app()->user->id)) { Yii::app()->controller->buttons = CMap::mergeArray(Yii::app()->controller->buttons, array(array('caption' => '<i class="glyphicon glyphicon-list icon-white"></i> Пакетная загрузка', 'url' => Yii::app()->createUrl('photogallery/backendPhotogallery/index', array('objectId' => HU::get(PhotogalleryPhoto::URL_PARAM_OBJECT), 'instanceId' => HU::get(PhotogalleryPhoto::URL_PARAM_INSTANCE))), 'class' => 'btn-success'))); } } }
protected function beforeSave() { if (HU::get(self::URL_PARAM_OBJECT) != null) { $this->id_photogallery_object = HU::get(self::URL_PARAM_OBJECT); } if (HU::get(self::URL_PARAM_INSTANCE) != null) { $this->id_photogallery_instance = HU::get(self::URL_PARAM_INSTANCE); } return parent::beforeSave(); }
public function onProcessPermissionWhere(PermissionWhereEvent $event) { if ($idObject = intval(HU::get(self::URL_PARAM_OBJECT))) { $event->criteria->addCondition('id_object = :id_object_comment'); $event->criteria->params[':id_object_comment'] = $idObject; } if ($idInstance = intval(HU::get(self::URL_PARAM_INSTANCE))) { $event->criteria->addCondition('id_instance = :id_instance_comment'); $event->criteria->params[':id_instance_comment'] = $idInstance; } }
public function onProcessPermissionWhere(PermissionWhereEvent $event) { $idObject = intval(HU::get(self::URL_PARAM_OBJECT)); $idInstance = intval(HU::get(self::URL_PARAM_INSTANCE)); $where = $event->where; if ($idObject && $idInstance) { $where = HText::addCondition($where, 'id_object = :id_object_banner AND id_instance = :id_instance_banner'); $event->params[':id_object_banner'] = $idObject; $event->params[':id_instance_banner'] = $idInstance; } $event->where = $where; }
public function onProcessPermissionWhere(PermissionWhereEvent $event) { //Формирование условия отбора $pkey = HU::get(ObjectUrlRule::PARAM_OBJECT_PARENT); $where = $event->where; if ($pkey == "") { //$where .= "id_object IS NULL OR id_object IN(SELECT id_object FROM da_object WHERE object_type<>".DA_OBJECT_TYPE_HEIR.")"; $where = HText::addCondition($where, "id_module_parent IS NULL"); } else { //$where .= "id_object IN(SELECT id_object FROM da_object WHERE object_type=".DA_OBJECT_TYPE_HEIR." AND table_name=$pkey)"; $where = HText::addCondition($where, "id_module_parent=" . $pkey); } $event->where = $where; }
public function createInstance(CEvent $event) { $objectId = HU::get('ownerObjectId'); $instanceId = HU::get('ownerInstanceId'); if (!($objectId && $instanceId)) { throw new CHttpException(400, 'Bad request.'); } $formModel = $event->sender->getFormModel(); $ownerModel = $this->loadOwnerObjectModel($objectId, $instanceId); $photo = new PhotogalleryPhoto('backendInsert'); $photo->id_photogallery_object = $ownerModel->getIdObject(); $photo->id_photogallery_instance = $ownerModel->getIdInstance(); $photo->save(false); $formModel->instanceId = $photo->id_photogallery_photo; $formModel->objectId = $photo->getIdObject(); $formModel->tmpId = null; }
public function init() { parent::init(); // Элемент работает с одним типом пхп скрипта. $idPhpScriptType = HU::get(ObjectUrlRule::PARAM_SYSTEM_MODULE); $idPhpScript = $this->model->{$this->attributeName}; if ($idPhpScript == null && $idPhpScriptType == null) { $this->render = false; return; } if ($idPhpScript != null) { $this->phpScript = PhpScriptInstance::model()->findByAttributes(array('id_php_script' => $idPhpScript)); if ($this->phpScript == null) { $this->error = 'Ошибка определения обработчика. Возможно, был удален php-скрипт, привязанный к данному экземпляру.'; return; } } else { if ($idPhpScriptType != null) { // новый раздел $this->phpScript = new PhpScriptInstance(); $this->phpScript->id_php_script_type = $idPhpScriptType; } } }
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); } } } } }
} else { if (HU::get("mode") == "3") { $allFiles = File::model()->findAll('id_parent_file IS NULL AND id_file_type=' . File::FILE_IMAGE); $c = 0; foreach ($allFiles as $file) { if ($file->resizeImage()) { $c++; if ($fileResultStr2 == "") { $fileResultStr2 .= "<br>Были обработаны следующие картинки: <br>"; } $fileResultStr2 .= $file->getUrlPath() . "<br>"; } } Yii::app()->clientScript->registerScript('admin.special.cacheClear.yii', 'alert("Процедура завершена, обработано изображений: ' . $c . '");'); } else { if (HU::get("mode") == "4") { $path = Yii::app()->assetManager->basePath; HFile::removeDirectoryRecursive($path, false, false, false, array('.gitignore')); Yii::app()->request->redirect('/admin/page/89/'); } } } } $countImage = File::model()->count('id_parent_file IS NULL AND id_file_type=' . File::FILE_IMAGE); ?> <fieldset class="form-horizontal"> <legend>Служебные файлы (кэш и превью)</legend> <div class="form-group"> <label class="control-label col-lg-4">Кэш стилей и js-файлов</label> <div class="controls col-lg-8">
<?php $this->caption = "Пакетная загрузка фотографий"; $this->breadcrumbs = array($ownerModel->getObjectInstance()->getName() => Yii::app()->createUrl(BackendModule::ROUTE_INSTANCE_LIST, array(ObjectUrlRule::PARAM_OBJECT => $ownerModel->getIdObject())), $model->getObjectInstance()->getName() . ' "' . CHtml::encode($ownerModel->{$ownerModel->getObjectInstance()->getFieldCaption()}) . '"' => Yii::app()->createUrl(BackendModule::ROUTE_INSTANCE_LIST, array(ObjectUrlRule::PARAM_OBJECT => $model->getIdObject(), PhotogalleryPhoto::URL_PARAM_OBJECT => $ownerModel->getIdObject(), PhotogalleryPhoto::URL_PARAM_INSTANCE => $ownerModel->getIdInstance())), $this->caption => Yii::app()->createUrl('photogallery/backendPhotogallery/index', array('objectId' => HU::get(PhotogalleryPhoto::URL_PARAM_OBJECT), 'instanceId' => HU::get(PhotogalleryPhoto::URL_PARAM_INSTANCE)))); if (!empty($this->breadcrumbs)) { // Цепочка навигации $this->widget('BreadcrumbsWidget', array('links' => $this->breadcrumbs)); } Yii::import('xupload.models.XUploadForm'); $id = 'multi-file-upload'; ?> <div class="field-file-list-upload" id="<?php echo $id; ?> "><?php $this->widget('fileUpload.fileUploadWidget.FileUploadWidget', array('id' => $id, 'multiple' => true, 'scriptFile' => false, 'url' => array('photogallery/backendPhotogallery/filesUpload', 'ownerObjectId' => $ownerModel->getIdObject(), 'ownerInstanceId' => $ownerModel->getIdInstance()), 'formClass' => 'fileUpload.FileUploadForm', 'mainModel' => $model, 'objectParameter' => $objectParameter, 'formView' => 'photogallery.backend.upload.views.form', 'uploadView' => 'photogallery.backend.upload.views.upload', 'downloadView' => 'photogallery.backend.upload.views.download', 'enableDeleting' => false, 'thumbConfig' => array('width' => 70, 'height' => 50, 'crop' => 'top', 'postfix' => '_da'), 'options' => array('acceptFileTypes' => '/(\\.|\\/)(gif|jpe?g|png)$/i'))); ?> </div>
$files[] = str_replace($exclude, '', HFile::addSlashPath($dir) . $v); } } } return $files; } /** * Возвращает одно из значений, в зависимости от числа $number * getWordFinishByNumber($count, 'файл', 'файла', 'файлов') */ function getWordFinishByNumber($number, $one, $two, $five) { return $number % 10 == 1 ? $one : ($number % 10 < 5 ? $two : $five); } $arrayOfNoRegisteredFiles = getImageFiles(HFile::addSlashPath(Yii::getPathOfAlias('webroot')) . 'content/', HFile::addSlashPath(Yii::getPathOfAlias('webroot'))); $action = HU::get('action'); $data = File::model()->findAll(); $idOfNotExistFiles = array(); $arrayOfNotExistFiles = array(); foreach ($data as $v) { /** * @var $v File */ $path = $v->getFilePath(); // исключаем существующие файлы из массива всех файлов в папке content $indexOfRegisteredFile = array_search($path, $arrayOfNoRegisteredFiles); if ($indexOfRegisteredFile !== false) { unset($arrayOfNoRegisteredFiles[$indexOfRegisteredFile]); } // сохраняем все ид несуществующих файлов для запроса на удаление if (!file_exists($v->getFilePath(true))) {
<?php if (HU::get("start") == "1") { SearchComponent::recreateIndex(); echo '<p>Процедура завершена</p>'; } else { if (HU::get("start") == "2") { Yii::app()->db->createCommand('REPAIR TABLE da_search_data')->execute(); echo '<p>Процедура завершена</p>'; } } ?> <form method="get" submit=""> <input type="hidden" name="start" value="1"> <button type="submit" class="btn btn-default">Запустить пересоздание поискового индекса</button> </form> <br> <form method="get" submit=""> <input type="hidden" name="start" value="2"> <button type="submit" class="btn btn-default">Починить таблицу da_search_data</button> </form>
public function actionIndexGroup() { $grpObject = HU::get(ObjectUrlRule::PARAM_GROUP_OBJECT); $grpInst = HU::get(ObjectUrlRule::PARAM_GROUP_INSTANCE); $object = DaObject::getById($grpObject); $this->_groupInstance = $object == null ? null : $object->getModel()->findByIdInstance($grpInst); if ($this->_groupInstance != null) { $this->_groupInstance->setObjectInstance($object); $this->_groupParameter = ObjectParameter::model()->findByIdInstance(HU::get(ObjectUrlRule::PARAM_GROUP_PARAMETER)); } $this->main(); }
public function actionIndex() { // объекты, по которым идет поиск // SELECT DISTINCT a.id_object, a.name FROM `da_object` a JOIN da_object_parameters b ON a.id_object = b.id_object WHERE b.search =1 $query = HU::get('query'); $error = null; $searchResult = array(); $total = 0; try { $search = new SearchComponent(); $search->logQuery = true; $search->criteria = $this->criteria; $paginator = new CPagination(); $paginator->setPageSize($this->module->pageSize); $paginator->validateCurrentPage = false; $search->paginator = $paginator; $searchMode = SearchComponent::SEARCH_MODE_SOFT; if ($this->module->searchModeEnable) { $searchMode = HU::get('search_mode', SearchComponent::SEARCH_MODE_SOFT); } $search->setSearchMode($searchMode); $search->setMinQuery($this->module->queryMin); $search->setMaxQuery($this->module->queryMax); $search->setLenPreviewText($this->module->lengthPreview); $search->setHighlightTemplate($this->module->highlight); // TODO доработать поиск. Чтоб учитывалось отключение и подключение плагинов /*if (!Yii::app()->hasModule('news')) { $notSearch[] = }*/ $search->setObjectNotSearchList($this->module->objectNotSearch); // объекты, по которым пока не поддерживается работа $search->setObjectSearchList($this->module->objectSearchList); $searchResult = $search->startSearch($query); $total = $search->getTotalResult(); } catch (ErrorException $e) { $error = $e->getMessage(); } $results = array(); foreach ($searchResult as $cur) { $results[$cur->id_object][$cur->id_instance] = $cur->id_instance; } $menu = Menu::getAll(); foreach (array_keys($results) as $idObject) { $data = array(); $model = null; switch ($idObject) { case Menu::ID_OBJECT: foreach ($results[$idObject] as $id) { $item = $menu->getById($id); if ($item != null) { $data[] = $item; } } break; /* case News::ID_OBJECT: $model = News::model(); break; case Product::ID_OBJECT: $model = Product::model(); break; case ProductCategory::ID_OBJECT: $model = ProductCategory::model(); break;*/ /* case News::ID_OBJECT: $model = News::model(); break; case Product::ID_OBJECT: $model = Product::model(); break; case ProductCategory::ID_OBJECT: $model = ProductCategory::model(); break;*/ default: $object = DaObject::getById($idObject, false); $model = $object->getModel(); if (!$model instanceof ISearchable) { throw new Exception("Ошибка поиска данных по объекту " . $idObject . ", обратитесь к разработчикам."); } } if ($model != null) { $cr = new CDbCriteria(); $cr->addInCondition($model->getPKName(), $results[$idObject]); $data = $model->findAll($cr); } $results[$idObject] = array(); foreach ($data as $r) { $results[$idObject][$r->getPrimaryKey()] = $r; } } foreach ($searchResult as $cur) { if (isset($results[$cur->id_object][$cur->id_instance])) { $model = $results[$cur->id_object][$cur->id_instance]; $cur->model = $model; $cur->link = $model->getSearchUrl(); $cur->title = $model->getSearchTitle(); /* switch ($cur->id_object) { case Menu::ID_OBJECT: $cur->link = $model->getUrl(); $cur->title = $model->name; break; case News::ID_OBJECT: $cur->link = $model->getUrl(); $cur->title = $model->title; break; case Product::ID_OBJECT: $cur->link = $model->getUrl(); $cur->title = $model->name; break; case ProductCategory::ID_OBJECT: $cur->link = $model->getUrl(); $cur->title = 'Группа товаров: '.$model->name; break; }*/ } } $this->render('/index', array('query' => $query, 'error' => $error, 'searchResult' => $searchResult, 'total' => $total, 'paginator' => $search->paginator, 'searchMode' => $searchMode)); }