Ejemplo n.º 1
0
 /**
  * Creates data provider instance with search query applied
  *
  * @param array $params
  *
  * @return ActiveDataProvider
  */
 public function search($params)
 {
     $this->scenario = 'search';
     $query = Field::find();
     $dataProvider = new ActiveDataProvider(['query' => $query, 'pagination' => ['pageSize' => 100]]);
     $this->load($params);
     if ($this->document_id) {
         $query->joinWith(['document' => function ($q) {
             $q->where(['like', 'document.name', $this->document_id])->orWhere(['like', 'document.id', $this->document_id]);
         }]);
     }
     if ($this->option_id) {
         $query->joinWith(['option' => function ($q) {
             $q->where(['like', 'option.name', $this->option_id])->orWhere(['like', 'option.id', $this->option_id]);
         }]);
     }
     if (!$this->validate()) {
         // uncomment the following line if you do not want to return any records when validation fails
         // $query->where('0=1');
         return $dataProvider;
     }
     $query->andFilterWhere(['id' => $this->id, 'position' => $this->position]);
     $query->andFilterWhere(['like', 'value', $this->value]);
     return $dataProvider;
 }
Ejemplo n.º 2
0
 /**
  * @return bool
  * Инициализация документа
  * Заполнение аттрибута fields
  */
 public function initialization()
 {
     $options = $this->getOptions();
     $this->fields = [];
     $new = 0;
     //для аттрибутов новых динамических полей
     /*
      * Заполнение уже имеющихся значений документа
      * из БД таблицы field.
      * Второе условие обеспечивает возможность сброса полей
      * при динамическом изменении шаблона документа
      */
     if (!$this->isNewRecord && $this->last_template_id == $this->template_id) {
         $fields = Field::find()->where(['document_id' => $this->id])->orderBy('option_id, id')->all();
         if ($fields) {
             foreach ($fields as $field) {
                 if (isset($field->option)) {
                     $option_id = $field->option_id;
                     $this->fields[$option_id]['type'] = $field->option->type;
                     $this->fields[$option_id]['require'] = $field->option->require;
                     $this->fields[$option_id]['param'] = $field->option->param;
                     $this->fields[$option_id]['multiple'] = $field->option->multiple;
                     $this->fields[$option_id]['name'] = $field->option->name;
                     $this->fields[$option_id]['value'][$field->id] = $field->value;
                     //изображение (загрузка)
                     if ($this->fields[$option_id]['type'] == 7) {
                         $this->fields[$option_id]['file'][$field->id] = $field->file;
                     }
                     //мультиполе
                     if ($field->option->multiple) {
                         $this->fields[$option_id]['position'][$field->id] = $field->position;
                     }
                 }
             }
         }
     }
     /*
      * Добавление к массиву полей $fields новых аттрибутов
      * согласно данных текущего шаблона документа
      * и его дополнительных полей из таблицы option.
      */
     if ($options) {
         foreach ($options as $option) {
             /**
              * Определяем присутствие хотя бы одного значения
              * дополнительного поля.
              */
             if (!in_array($option->id, array_keys($this->fields))) {
                 /**
                  * Добавляем обязательные для заполнения аттрибуты
                  * мультиполей.
                  */
                 if ($option->multiple && $option->require) {
                     for ($i = 1; $i <= $option->require; $i++) {
                         $new = $this->addNewOption($option, $new);
                     }
                 } else {
                     $new = $this->addNewOption($option, $new);
                 }
             } else {
                 /**
                  * Заполненные данные по текущему полю
                  * уже присутствуют,
                  * но их может оказаться не достаточно.
                  */
                 $option_fields = Field::find()->where(['document_id' => $this->id, 'option_id' => $option->id])->all();
                 $fields_count = count($option_fields);
                 $new_field_count = $option->require - $fields_count;
                 if ($new_field_count > 0) {
                     for ($i = 1; $i <= $new_field_count; $i++) {
                         $new = $this->addNewOption($option, $new);
                     }
                 }
             }
         }
     }
     return true;
 }
Ejemplo n.º 3
0
 /**
  * Удаление значения мультиполя
  * @return mixed
  */
 public function actionDeletefield()
 {
     $field_id = Yii::$app->request->get('id');
     /** @var \common\models\Field $field */
     $field = Field::findOne($field_id);
     if ($field && isset($field->option)) {
         //необходимое кол-во значений мультиполя
         $count_require = $field->option->require;
         if ($count_require) {
             $all_fields = Field::find()->where(['option_id' => $field->option_id, 'document_id' => $field->document_id])->all();
             if (count($all_fields) <= $count_require) {
                 return $this->redirect(['update', 'id' => $field->document_id]);
             }
         }
         $field->deletePhoto();
         $document_id = $field->document_id;
         $field->delete();
         Yii::$app->getSession()->setFlash('field-delete-success');
         return $this->redirect(['update', 'id' => $document_id]);
     }
     throw new NotFoundHttpException('Страница не найдена.');
 }
Ejemplo n.º 4
0
                <?php 
echo Html::a(Yii::t('app', 'Delete'), ['delete', 'id' => $model->id], ['class' => 'btn btn-danger', 'data' => ['confirm' => Yii::t('app', 'Are you sure you want to delete this item?'), 'method' => 'post']]);
?>
            </p>

            <?php 
echo DetailView::widget(['model' => $model, 'attributes' => ['id', 'name', 'price', 'product_type', 'created_at', 'updated_at', 'created_by', 'updated_by']]);
?>
        </div>
        <div class="col-lg-6">
            <h1>Fields</h1>
            <?php 
$form = ActiveForm::begin();
?>
                <?php 
echo $form->field($productField, 'field_id')->dropDownList(ArrayHelper::map(Field::find()->all(), 'id', 'name'), ['prompt' => 'Please select Field']);
?>
                <?php 
echo $form->field($productField, 'product_id')->hiddenInput(['value' => $model->id])->label(false);
?>
                <?php 
echo $form->field($productField, 'value')->textInput();
?>
                <?php 
echo $form->field($productField, 'rules')->textarea(['row' => '3']);
?>

            <div class="form-group">
                <?php 
echo Html::submitButton($productField->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']);
?>