コード例 #1
0
ファイル: EngineController.php プロジェクト: Cranky4/npfs
 public function actionGetObjectParameterSetting()
 {
     if (!Yii::app()->authManager->checkObject(DaDbAuthManager::OPERATION_EDIT, Yii::app()->user->id, ObjectParameter::ID_OBJECT)) {
         throw new Exception('Доступ ограничен.');
     }
     $paramType = HU::post('newType');
     $parameter = HU::post('val');
     $fieldId = HU::post('field');
     $idInstance = intval(HU::post('id'));
     $object = DaObject::getById(ObjectParameter::ID_OBJECT);
     $objectParameter = $object->getParameterObjectByField($fieldId);
     $model = $object->getModel($idInstance === -1);
     if ($idInstance !== -1) {
         $model = $model->findByIdInstance($idInstance);
     }
     if ($model == null || $objectParameter == null) {
         echo json_encode(array('error' => 'Переданы неверные параметры'));
         return;
     }
     $form = Yii::app()->getWidgetFactory()->createWidget($this, 'backend.widgets.BackendActiveForm', array('id' => 'aMainForm', 'enableClientValidation' => true, 'clientOptions' => array('validateOnSubmit' => true, 'validateOnChange' => true)));
     $objectParameter->id_parameter_type = $paramType;
     if ($paramType == DataType::OBJECT) {
         $objectParameter->add_parameter = DaObject::ID_OBJECT;
         $objectParameter->not_null = 1;
     } else {
         if ($paramType == DataType::REFERENCE) {
             $objectParameter->id_parameter_type = DataType::OBJECT;
             $objectParameter->add_parameter = Reference::ID_OBJECT;
             $objectParameter->not_null = 1;
         } else {
             if ($paramType == DataType::FILE || $paramType == DataType::FILES) {
                 $objectParameter->id_parameter_type = DataType::OBJECT;
                 $objectParameter->add_parameter = FileType::ID_OBJECT;
                 $objectParameter->not_null = 0;
             }
         }
     }
     $model->{$objectParameter->getFieldName()} = $parameter;
     $visualElement = VisualElementFactory::getVisualElement($model, $objectParameter);
     $visualElement->form = $form;
     $visualElement->layout = false;
     ob_start();
     ob_implicit_flush(false);
     $visualElement->run();
     $data = ob_get_clean();
     echo json_encode(array('html' => $data));
 }
コード例 #2
0
ファイル: ViewController.php プロジェクト: Cranky4/npfs
 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);
                 }
             }
         }
     }
 }
コード例 #3
0
ファイル: index.php プロジェクト: Cranky4/npfs
<?php

/**
 * @var $form CActiveForm
 * @var $this SelectObjectParameterWidget
 * @var $model DaActiveRecord
 */
echo $form->dropDownList($model, $attributeName, array(), $this->htmlOption);
echo $form->error($model, $attributeName);
$elementOfObject = VisualElementFactory::getVisualElement($model, $this->parameterOfObject);
$this->parameterOfObjectParameter->widget = null;
$elementOfParameter = VisualElementFactory::getVisualElement($model, $this->parameterOfObjectParameter);
$ajax = CHtml::ajax(array('url' => Yii::app()->createUrl('backend/engine/getObjectParameters'), 'data' => array('id_object' => 'js:$(this).val()', 'value' => $model->{$attributeName}, 'element_object' => $model->getIdObject(), 'element_parameter' => $this->getObjectParameter()->getIdParameter()), 'type' => 'POST', 'dataType' => 'json', 'success' => 'js:function(data){if (data.error !== undefined) {alert(data.error); return;} element.parent().html(data.html);}'));
Yii::app()->clientScript->registerScript('admin.ve.abstract.PermPropVisualElement', '$("select[name=\'' . $elementOfObject->getElementName() . '\']").change(function(){
var element = $("[name=\'' . $elementOfParameter->getElementName() . '\']");
' . $ajax . '
}
).change();');
/*
return;

$currentParameter = $model->{$this->parameterOfObjectParameter->getFieldName()};
if ($currentParameter == null) $currentParameter = -1;
?>
<script type="text/javascript">
  function selectProperties() {
    var idObject = $("select[name='<?php echo $elementOfObject->getElementName(); ?>'] option:selected").val();
    var active = <?php echo $currentParameter; ?>;
    da_selectProperties(idObject, 'p<?php echo $parameter->getIdParam(); ?>', active, <?php echo intval($visualElement->notNull()); ?>, '<?php echo Utils::processCode4Ajax($parameter->sql); ?>');
  }
</script>