From 839c0f764772b7da9ab39beb257bd8c7fa193236 Mon Sep 17 00:00:00 2001 From: Yarik Date: Wed, 18 Nov 2015 17:36:54 +0200 Subject: [PATCH] Переделал в МВЦ опции. --- frontend/controllers/OptionController.php | 17 ++++++++++++++++- frontend/models/Option.php | 141 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ frontend/views/option/_form.php | 4 ++-- frontend/views/option/_form_edit.php | 1 - frontend/views/option/create.php | 13 +++---------- frontend/views/option/update.php | 15 +++++---------- 6 files changed, 167 insertions(+), 24 deletions(-) diff --git a/frontend/controllers/OptionController.php b/frontend/controllers/OptionController.php index 973405e..77260b6 100644 --- a/frontend/controllers/OptionController.php +++ b/frontend/controllers/OptionController.php @@ -149,7 +149,22 @@ class OptionController extends Controller ]); } } - + public function actionTest() { + $form[0] = Option::create(\Yii::$app->request->post(), 'User', 10, [['name' => 'phone', 'template' => 'text'], ['name' => 'adres', 'template' => 'text']]); + if($form[0]['success'] == false) { + return $this->render('create', ['forms' => $form]); + } else { + return $this->redirect(['index']); + } + } + public function actionTest2($id) { + $form[0] = Option::change($id, \Yii::$app->request->post(), 'User', 10); + if($form[0]['success'] == false) { + return $this->render('update', ['forms' => $form]); + } else { + return $this->redirect(['view', 'id' => $id]); + } + } /** * Updates an existing Option model. * If update is successful, the browser will be redirected to the 'view' page. diff --git a/frontend/models/Option.php b/frontend/models/Option.php index f615d15..ed4383f 100644 --- a/frontend/models/Option.php +++ b/frontend/models/Option.php @@ -53,4 +53,145 @@ class Option extends \yii\db\ActiveRecord public function getLangs() { return (new Language())->find()->where(['>', 'language_id', 0])->asArray()->all(); } + public static function change($id, $post, $modeldb, $model_id) { + $models[$id] = Option::findOne($id); + $modellang[$id] = array(); + $langs = OptionLang::findAll(['id' => $id]); + foreach($langs as $lang) { + $modellang[$id][$lang->lang_id] = $lang; + } + $children = (new Option())->find()->where(['parent_id' => $id])->all(); + foreach($children as $child) { + $models[$child->option_id] = $child; + $modellang[$child->option_id] = array(); + $langs = OptionLang::findAll(['id' =>$child->option_id]); + foreach($langs as $lang) { + $modellang[$child->option_id][$lang->lang_id] = $lang; + } + } + $ok = 1; + if(!empty($post)) { + foreach($post['Option'] as $key => $option) { + if(in_array($key, array('model', 'model_id'))) { continue; } + $modellang[$key][0]->value = $option['value'][$models[$key]->name]; + if(!$modellang[$key][0]->save()) { + $ok = 0; + } + foreach($option['lang'] as $lang_id => $lang) { + if(empty($modellang[$key][$lang_id])) { + $modellang[$key][$lang_id] = new OptionLang(); + $modellang[$key][$lang_id]->id = $models[$key]->option_id; + $modellang[$key][$lang_id]->lang_id = $lang_id; + $modellang[$key][$lang_id]->value = $lang; + } else { + $modellang[$key][$lang_id]->value = $lang; + } + if(!$modellang[$key][$lang_id]->save()) { + $ok = 0; + } + } + } + if($ok) { + return array('id' => $id, 'models' => $models, 'modelslang' => $modelslang, 'success' => true); + } else { + return array( + 'models' => $models, + 'modellang' => $modellang, + 'modeldb' => $modeldb, + 'model_id' => $model_id, + 'success' => false + ); + } + } + return array( + 'models' => $models, + 'modellang' => $modellang, + 'modeldb' => $modeldb, + 'model_id' => $model_id, + 'success' => false + ); + } + public static function create($post, $modeldb, $model_id, $fields) { + $model = new Option(); + $modellang = new OptionLang(); + if(!empty($post['Option'])) { + $ok = 1; + $parentid = null; + $models = array(); + foreach($post['Option'] as $index => $option) { + if(in_array($index, array('model', 'model_id')) && $index !== 0) { continue; } + $first = 1; + foreach($option['value'] as $key => $value) { + $models[$index][$key] = new Option(); + $models[$index][$key]->model = $post['Option']['model']; + $models[$index][$key]->model_id = $post['Option']['model_id']; + $models[$index][$key]->template = $option['template']; + $models[$index][$key]->name = $key; + if(!$first) { + $models[$index][$key]->parent_id = $parentid; + } + $modelslang[$index][$key][0] = new OptionLang(); + if(!empty($value) && $models[$index][$key]->save()) { + if($first) { + $parentid = $models[$index][$key]->option_id; + } + $modelslang[$index][$key][0]->id = $models[$index][$key]->option_id; + $modelslang[$index][$key][0]->lang_id = 0; + $modelslang[$index][$key][0]->value = $value; + if($modelslang[$index][$key][0]->save()) { + if(!empty($option['lang'][$key])) { + foreach($option['lang'][$key] as $code => $lang) { + if(!empty($lang)) { + $modelslang[$index][$key][$code] = new OptionLang(); + $modelslang[$index][$key][$code]->id = $models[$index][$key]->option_id; + $modelslang[$index][$key][$code]->lang_id = $code; + $modelslang[$index][$key][$code]->value = $lang; + if(!$modelslang[$index][$key][$code]->save()) { + $ok = 0; + } + } + } + } + } + } else { + $models[$index][$key]->validate(); + $modelslang[$index][$key][0]->validate(); + $modelslang[$index][$key][0]->addError('value', 'Value must be set'); + if(!empty($option['lang'][$key])) { + foreach($option['lang'][$key] as $code => $lang) { + if(!empty($lang)) { + $modelslang[$index][$key][$code] = new OptionLang(); + $modelslang[$index][$key][$code]->id = $models[$index][$key]->option_id; + $modelslang[$index][$key][$code]->lang_id = $code; + $modelslang[$index][$key][$code]->value = $lang; + } + } + } + $ok = 0; + } + $first = 0; + } + } + if($ok) { + return array('models' => $models, 'modelslang' => $modelslang, 'success' => true); + } else { + return array( + 'models' => $models, + 'modellang' => $modelslang, + 'modeldb' => $modeldb, + 'model_id' => $model_id, + 'fields' => $fields, + 'success' => false + ); + } + } else { + return array( + 'model' => $model, + 'modeldb' => $modeldb, + 'model_id' => $model_id, + 'fields' => $fields, + 'success' => false + ); + } + } } diff --git a/frontend/views/option/_form.php b/frontend/views/option/_form.php index caacf87..29717d1 100644 --- a/frontend/views/option/_form.php +++ b/frontend/views/option/_form.php @@ -1,8 +1,7 @@ $row) { foreach($row as $key => $value) { + var_dump($modellang[$index][$key]); if(!$modellang[$index][$key][0]->hasErrors('value')) { continue; } diff --git a/frontend/views/option/_form_edit.php b/frontend/views/option/_form_edit.php index b6f950f..6e2f31d 100644 --- a/frontend/views/option/_form_edit.php +++ b/frontend/views/option/_form_edit.php @@ -7,7 +7,6 @@ use yii\widgets\ActiveForm; /* @var $model frontend\models\Option */ /* @var $form yii\widgets\ActiveForm */ ?> -
diff --git a/frontend/views/option/create.php b/frontend/views/option/create.php index f8db730..7c128cc 100644 --- a/frontend/views/option/create.php +++ b/frontend/views/option/create.php @@ -11,16 +11,9 @@ $this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Options'), 'url' => $this->params['breadcrumbs'][] = $this->title; ?>
-

title) ?>

- - render('_form', [ - 'model' => $model, - 'models' => $models, - 'modellang' => $modellang, - 'modeldb' => $modeldb, - 'model_id' => $model_id, - 'fields' => $fields - ]) ?> + render('_form', $oneform); + }?>
diff --git a/frontend/views/option/update.php b/frontend/views/option/update.php index 35b6600..1bb652d 100644 --- a/frontend/views/option/update.php +++ b/frontend/views/option/update.php @@ -7,20 +7,15 @@ use yii\helpers\Html; $this->title = Yii::t('app', 'Update {modelClass}: ', [ 'modelClass' => 'Option', -]) . ' ' . $models[\Yii::$app->request->get('id')]->name; +]) . ' ' . $forms[0]['models'][\Yii::$app->request->get('id')]->name; $this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Options'), 'url' => ['index']]; -$this->params['breadcrumbs'][] = ['label' => $models[\Yii::$app->request->get('id')]->name, 'url' => ['view', 'id' => $models[\Yii::$app->request->get('id')]->option_id]]; +$this->params['breadcrumbs'][] = ['label' => $forms[0]['models'][\Yii::$app->request->get('id')]->name, 'url' => ['view', 'id' => $forms[0]['models'][\Yii::$app->request->get('id')]->option_id]]; $this->params['breadcrumbs'][] = Yii::t('app', 'Update'); ?>
-

title) ?>

- - render('_form_edit', [ - 'models' => $models, - 'modellang' => $modellang, - 'modeldb' => $modeldb, - 'model_id' => $model_id - ]) ?> + render('_form_edit', $oneform); + }?>
-- libgit2 0.21.4