From b15a9aec1ba6d11d08fd3f46908f0aab7aa20475 Mon Sep 17 00:00:00 2001 From: Yarik Date: Wed, 2 Dec 2015 17:54:19 +0200 Subject: [PATCH] Добавил языки, адреса, заявки. --- backend/assets/AppAsset.php | 2 ++ backend/config/main.php | 7 ------- backend/controllers/LanguageController.php | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ backend/controllers/NewOptionsLangController.php | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ backend/controllers/SiteController.php | 58 +++++++++++++++++++++++++++++++++++++++++----------------- backend/models/LanguageSearch.php | 3 ++- backend/models/NewOptions.php | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ backend/models/NewOptionsLang.php | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ backend/models/NewOptionsLangSearch.php | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ backend/views/_language/_form.php | 27 +++++++++++++++++++++++++++ backend/views/_language/_search.php | 31 +++++++++++++++++++++++++++++++ backend/views/_language/create.php | 19 +++++++++++++++++++ backend/views/_language/index.php | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ backend/views/_language/update.php | 22 ++++++++++++++++++++++ backend/views/_language/view.php | 33 +++++++++++++++++++++++++++++++++ backend/views/language/_form_adress.php | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ backend/views/language/_form_adress_edit.php | 41 +++++++++++++++++++++++++++++++++++++++++ backend/views/language/create.php | 4 ++++ backend/views/language/create_adress.php | 19 +++++++++++++++++++ backend/views/language/index.php | 4 ++++ backend/views/language/layout.php | 3 +++ backend/views/language/update_adress.php | 21 +++++++++++++++++++++ backend/views/language/view_adress.php | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ backend/views/layouts/content.php | 241 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ backend/views/layouts/header.php | 287 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ backend/views/layouts/left.php | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ backend/views/layouts/main-login.php | 29 +++++++++++++++++++++++++++++ backend/views/layouts/main.php | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------- backend/views/new-options-lang/_form.php | 27 +++++++++++++++++++++++++++ backend/views/new-options-lang/_search.php | 33 +++++++++++++++++++++++++++++++++ backend/views/new-options-lang/create.php | 21 +++++++++++++++++++++ backend/views/new-options-lang/index.php | 37 +++++++++++++++++++++++++++++++++++++ backend/views/new-options-lang/update.php | 23 +++++++++++++++++++++++ backend/views/new-options-lang/view.php | 38 ++++++++++++++++++++++++++++++++++++++ backend/views/site/requests.php | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ backend/web/css/flags32.css | 4 ++++ backend/web/css/option.css | 3 +++ backend/web/js/option.js | 25 +++++++++++++++++++++++++ common/models/Language.php | 2 +- common/translation/ru/app.php | 15 +++++++++++++++ frontend/controllers/SiteController.php | 12 ++++++++++++ frontend/models/Option.php | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- frontend/models/OptionLangSearch.php | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ frontend/models/OptionSearch.php | 14 +++++++++++--- frontend/views/option/_form.php | 2 +- frontend/views/site/feedback.php | 19 +++++++++++++++++++ 46 files changed, 2058 insertions(+), 94 deletions(-) create mode 100644 backend/controllers/NewOptionsLangController.php create mode 100644 backend/models/NewOptions.php create mode 100644 backend/models/NewOptionsLang.php create mode 100644 backend/models/NewOptionsLangSearch.php create mode 100644 backend/views/_language/_form.php create mode 100644 backend/views/_language/_search.php create mode 100644 backend/views/_language/create.php create mode 100644 backend/views/_language/index.php create mode 100644 backend/views/_language/update.php create mode 100644 backend/views/_language/view.php create mode 100644 backend/views/language/_form_adress.php create mode 100644 backend/views/language/_form_adress_edit.php create mode 100644 backend/views/language/create_adress.php create mode 100644 backend/views/language/update_adress.php create mode 100644 backend/views/language/view_adress.php create mode 100644 backend/views/layouts/content.php create mode 100644 backend/views/layouts/header.php create mode 100644 backend/views/layouts/left.php create mode 100644 backend/views/layouts/main-login.php create mode 100644 backend/views/new-options-lang/_form.php create mode 100644 backend/views/new-options-lang/_search.php create mode 100644 backend/views/new-options-lang/create.php create mode 100644 backend/views/new-options-lang/index.php create mode 100644 backend/views/new-options-lang/update.php create mode 100644 backend/views/new-options-lang/view.php create mode 100644 backend/views/site/requests.php create mode 100644 backend/web/css/option.css create mode 100644 backend/web/js/option.js create mode 100644 frontend/models/OptionLangSearch.php create mode 100644 frontend/views/site/feedback.php diff --git a/backend/assets/AppAsset.php b/backend/assets/AppAsset.php index 19f06b2..5b7678d 100644 --- a/backend/assets/AppAsset.php +++ b/backend/assets/AppAsset.php @@ -22,9 +22,11 @@ class AppAsset extends AssetBundle 'css/flags32.css' ]; public $js = [ + 'js/option.js' ]; public $depends = [ 'yii\web\YiiAsset', 'yii\bootstrap\BootstrapAsset', + 'yii\web\JqueryAsset' ]; } diff --git a/backend/config/main.php b/backend/config/main.php index 2b0c51a..58a2b2e 100644 --- a/backend/config/main.php +++ b/backend/config/main.php @@ -27,13 +27,6 @@ return [ 'identityClass' => 'common\models\User', 'enableAutoLogin' => true, ], - 'view' => [ - 'theme' => [ - 'pathMap' => [ - '@app/views' => '@vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app' - ], - ], - ], 'urlManager' => [ 'enablePrettyUrl' => false, 'showScriptName' => false, diff --git a/backend/controllers/LanguageController.php b/backend/controllers/LanguageController.php index f3a41bd..d75bea2 100644 --- a/backend/controllers/LanguageController.php +++ b/backend/controllers/LanguageController.php @@ -8,6 +8,9 @@ use backend\models\LanguageSearch; use yii\web\Controller; use yii\web\NotFoundHttpException; use yii\filters\VerbFilter; +use frontend\models\Option; +use frontend\models\OptionSearch; +use frontend\models\OptionLang; /** * LanguageController implements the CRUD actions for Language model. @@ -107,4 +110,81 @@ class LanguageController extends Controller throw new NotFoundHttpException('The requested page does not exist.'); } } + + public function actionCreateAdress() + { + $form[0] = Option::create(\Yii::$app->request->post(), 'Main', 1, [['name' => 'adres', 'template' => 'text', 'translate' => true], ['name' => 'x', 'template' => 'number', 'translate' => false], ['name' => 'y', 'template' => 'number', 'translate' => false], ['name' => 'phone', 'template' => 'text', 'translate' => false], ['name' => 'name', 'template' => 'text', 'translate' => true]], true); + if($form[0]['success'] == false) { + return $this->render('create_adress', ['forms' => $form]); + } else { + return $this->redirect(['view-adress']); + } + } + + public function actionUpdateAdress($id) + { + $form[0] = Option::change($id, \Yii::$app->request->post(), 'Main', 1); + if($form[0]['success'] == false) { + return $this->render('update_adress', ['forms' => $form]); + } else { + return $this->redirect(['view-adress']); + } + } + + public function actionViewAdress() + { + $searchModel = new OptionSearch(); + + $dataProvider = $searchModel->search(array_merge(Yii::$app->request->queryParams, ['OptionSearch' => ['model' => 'Main', 'name' => 'adres']])); + + return $this->render('view_adress', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + ]); + } + + /** + * Deletes an existing Option model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * @param integer $id + * @return mixed + */ + public function actionDeleteAdress($id) + { + $model = $this->findModelAdress($id); + $children = $model->hasMany(Option::className(), ['parent_id' => 'option_id'])->all(); + $langs = array(); + if(!empty($children)) { + foreach($children as $child) { + $langs = OptionLang::findAll(['id' => $child->option_id]); + foreach($langs as $lang) { + $lang->delete(); + } + $child->delete(); + } + } + $langs = OptionLang::findAll(['id' => $id]); + foreach($langs as $lang) { + $lang->delete(); + } + $model->delete(); + + return $this->redirect(['view-adress']); + } + + /** + * Finds the Option model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * @param integer $id + * @return Option the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModelAdress($id) + { + if (($model = Option::findOne($id)) !== null) { + return $model; + } else { + throw new NotFoundHttpException('The requested page does not exist.'); + } + } } diff --git a/backend/controllers/NewOptionsLangController.php b/backend/controllers/NewOptionsLangController.php new file mode 100644 index 0000000..e2bab3e --- /dev/null +++ b/backend/controllers/NewOptionsLangController.php @@ -0,0 +1,121 @@ + [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'delete' => ['post'], + ], + ], + ]; + } + + /** + * Lists all NewOptionsLang models. + * @return mixed + */ + public function actionIndex() + { + $searchModel = new NewOptionsLangSearch(); + $dataProvider = $searchModel->search(Yii::$app->request->queryParams); + + return $this->render('index', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + ]); + } + + /** + * Displays a single NewOptionsLang model. + * @param integer $id + * @return mixed + */ + public function actionView($id) + { + return $this->render('view', [ + 'model' => $this->findModel($id), + ]); + } + + /** + * Creates a new NewOptionsLang model. + * If creation is successful, the browser will be redirected to the 'view' page. + * @return mixed + */ + public function actionCreate() + { + $model = new NewOptionsLang(); + + if ($model->load(Yii::$app->request->post()) && $model->save()) { + return $this->redirect(['view', 'id' => $model->primary]); + } else { + return $this->render('create', [ + 'model' => $model, + ]); + } + } + + /** + * Updates an existing NewOptionsLang model. + * If update is successful, the browser will be redirected to the 'view' page. + * @param integer $id + * @return mixed + */ + public function actionUpdate($id) + { + $model = $this->findModel($id); + + if ($model->load(Yii::$app->request->post()) && $model->save()) { + return $this->redirect(['view', 'id' => $model->primary]); + } else { + return $this->render('update', [ + 'model' => $model, + ]); + } + } + + /** + * Deletes an existing NewOptionsLang model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * @param integer $id + * @return mixed + */ + public function actionDelete($id) + { + $this->findModel($id)->delete(); + + return $this->redirect(['index']); + } + + /** + * Finds the NewOptionsLang model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * @param integer $id + * @return NewOptionsLang the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel($id) + { + if (($model = NewOptionsLang::findOne($id)) !== null) { + return $model; + } else { + throw new NotFoundHttpException('The requested page does not exist.'); + } + } +} diff --git a/backend/controllers/SiteController.php b/backend/controllers/SiteController.php index 9b30fcf..13773f7 100644 --- a/backend/controllers/SiteController.php +++ b/backend/controllers/SiteController.php @@ -8,6 +8,10 @@ use common\models\LoginForm; use yii\filters\VerbFilter; use backend\models\Profile; use common\models\User; +use frontend\models\Option; +use yii\data\ActiveDataProvider; +use yii\validators\BooleanValidator; +use yii\validators\StringValidator; /** * Site controller */ @@ -21,32 +25,19 @@ class SiteController extends Controller return [ 'access' => [ 'class' => AccessControl::className(), + 'except' => ['login', 'error'], 'rules' => [ [ - 'actions' => ['login', 'error'], 'allow' => true, + 'roles' => ['@'] ], - [ - 'actions' => ['logout', 'index'], - 'allow' => true, - 'roles' => ['@'], - ], - [ - 'actions' => ['profile', 'profile'], - 'allow' => true, - 'roles' => ['@'], - ], - [ - 'actions' => ['profileSave', 'profile'], - 'allow' => true, - 'roles' => ['@'], - ], ], ], 'verbs' => [ 'class' => VerbFilter::className(), 'actions' => [ 'logout' => ['post'], + 'delete-req' => ['post'] ], ], ]; @@ -66,7 +57,7 @@ class SiteController extends Controller public function actionIndex() { - return $this->render('index'); + return $this->render('index'); } public function actionLogin() @@ -109,4 +100,37 @@ class SiteController extends Controller ]); } + public function actionRequests($id = 0) { + if($id != 0) { + Option::markOld($id); + $this->redirect(['site/requests']); + } + $query = Option::find()->where(['model' => 'Feedback', 'model_id' => 1, 'parent_id' => null]); + $provider = new ActiveDataProvider([ + 'query' => $query, + 'pagination' => [ + 'pageSize' => 2, + ], + 'sort' => [ + 'defaultOrder' => [ + 'created_at' => SORT_DESC + ] + ] + ]); + $data = $provider->getModels(); + return $this->render('requests', [ + 'dataProvider' => $provider + ]); + } + + public function actionDeleteReq($id) { + $model = Option::findOne($id); + if(!is_null($model) && $model->delete()) { + return $this->redirect(['site/requests']); + } else{ + Yii::$app->session->setFlash('post_error', $model->getFirstErrors()); + return $this->redirect('[site/requests]'); + } + } + } diff --git a/backend/models/LanguageSearch.php b/backend/models/LanguageSearch.php index c4eed3f..9c52df7 100644 --- a/backend/models/LanguageSearch.php +++ b/backend/models/LanguageSearch.php @@ -64,7 +64,8 @@ class LanguageSearch extends Language $query->andFilterWhere(['like', 'lang_code', $this->lang_code]) ->andFilterWhere(['like', 'language_name', $this->language_name]) - ->andWhere(['active' => '1']); + ->andWhere(['active' => '1']) + ->andWhere(['>', 'language_id', '0']); return $dataProvider; } diff --git a/backend/models/NewOptions.php b/backend/models/NewOptions.php new file mode 100644 index 0000000..2f7abbb --- /dev/null +++ b/backend/models/NewOptions.php @@ -0,0 +1,53 @@ + 255] + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'id' => Yii::t('app', 'ID'), + 'model' => Yii::t('app', 'Model'), + 'model_id' => Yii::t('app', 'Model ID'), + 'name' => Yii::t('app', 'Name'), + 'template' => Yii::t('app', 'Template'), + 'parent_id' => Yii::t('app', 'Parent ID'), + ]; + } +} diff --git a/backend/models/NewOptionsLang.php b/backend/models/NewOptionsLang.php new file mode 100644 index 0000000..64679be --- /dev/null +++ b/backend/models/NewOptionsLang.php @@ -0,0 +1,52 @@ + Yii::t('app', 'Primary'), + 'id' => Yii::t('app', 'ID'), + 'lang_id' => Yii::t('app', 'Lang ID'), + 'value' => Yii::t('app', 'Value'), + ]; + } +} diff --git a/backend/models/NewOptionsLangSearch.php b/backend/models/NewOptionsLangSearch.php new file mode 100644 index 0000000..5d68560 --- /dev/null +++ b/backend/models/NewOptionsLangSearch.php @@ -0,0 +1,68 @@ + $query, + ]); + + $this->load($params); + + 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([ + 'primary' => $this->primary, + 'id' => $this->id, + 'lang_id' => $this->lang_id, + ]); + + $query->andFilterWhere(['like', 'value', $this->value]); + + return $dataProvider; + } +} diff --git a/backend/views/_language/_form.php b/backend/views/_language/_form.php new file mode 100644 index 0000000..3119243 --- /dev/null +++ b/backend/views/_language/_form.php @@ -0,0 +1,27 @@ + + +
+ + + + field($model[0], 'lang_code')->textInput(['maxlength' => true]) ?> + + field($model[0], 'is_default')->checkBox() ?> + + field($model[1], 'lang_title')->textInput(['maxlength' => true])?> + +
+ isNewRecord ? Yii::t('app', 'Create', array('name' => 'Имя')) : Yii::t('app', 'Update'), ['class' => $model[0]->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> +
+ */ ?> + + +
diff --git a/backend/views/_language/_search.php b/backend/views/_language/_search.php new file mode 100644 index 0000000..b6c760e --- /dev/null +++ b/backend/views/_language/_search.php @@ -0,0 +1,31 @@ + + + diff --git a/backend/views/_language/create.php b/backend/views/_language/create.php new file mode 100644 index 0000000..ca8185b --- /dev/null +++ b/backend/views/_language/create.php @@ -0,0 +1,19 @@ +title = Yii::t('app', 'Create Language'); +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Languages'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title;*/ +echo $this->render('index', $layoutdata); +?> +
+ + render('_form', [ + 'model' => $model + ]) ?> +
\ No newline at end of file diff --git a/backend/views/_language/index.php b/backend/views/_language/index.php new file mode 100644 index 0000000..43938c7 --- /dev/null +++ b/backend/views/_language/index.php @@ -0,0 +1,86 @@ +registerCssFile('/backend/web/css/language.css'); +$this->registerJsFile('/backend/web/js/language.js', ['depends' => ['yii\web\JqueryAsset'], 'position' => $this::POS_END]); +$this->title = Yii::t('app', 'Settings'); +$this->params['breadcrumbs'][] = $this->title; +?> + render('_search', ['model' => $searchModel]); ?> +
+

title) ?>

+ +
diff --git a/backend/views/_language/update.php b/backend/views/_language/update.php new file mode 100644 index 0000000..4529adb --- /dev/null +++ b/backend/views/_language/update.php @@ -0,0 +1,22 @@ +title = Yii::t('app', 'Update {modelClass}: ', [ + 'modelClass' => 'Language', +]) . ' ' . $model->language_id; +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Languages'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = ['label' => $model->language_id, 'url' => ['view', 'id' => $model->language_id]]; +$this->params['breadcrumbs'][] = Yii::t('app', 'Update');*/ +echo $this->render('index', $layoutdata); +?> +
+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/backend/views/_language/view.php b/backend/views/_language/view.php new file mode 100644 index 0000000..56d4ae7 --- /dev/null +++ b/backend/views/_language/view.php @@ -0,0 +1,33 @@ +title = $model->language_id; +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Languages'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title;*/ +echo $this->render('index', $layoutdata); +?> +
+ $model, + 'attributes' => [ + 'language_id', + 'lang_code', + 'is_default', + ], + ]) ?> +

+ $model->language_id], ['class' => 'btn btn-primary']) ?> + $model->language_id], [ + 'class' => 'btn btn-danger', + 'data' => [ + 'confirm' => Yii::t('app', 'Are you sure you want to delete this item?'), + 'method' => 'post', + ], + ]) ?> +

+
\ No newline at end of file diff --git a/backend/views/language/_form_adress.php b/backend/views/language/_form_adress.php new file mode 100644 index 0000000..36542a7 --- /dev/null +++ b/backend/views/language/_form_adress.php @@ -0,0 +1,119 @@ + + +
+ + + +

+ +
+
+ $field) { + ?> +
+ +

+
+ + + + + + +
+ +

+
+
+
+ $row) { + foreach($row as $key => $value) { + if(!$modellang[$index][$key][0]->hasErrors('value')) { + continue; + } + if($first) { + ?> +
+ +
+
+ + + +
getFirstError('value')?>
+ +
+ getLangs() as $lang) { + ?> +
+
+
+
+ +
+ +
+ +

+
+
+
+ + + +
+ isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> +
+ + + +
diff --git a/backend/views/language/_form_adress_edit.php b/backend/views/language/_form_adress_edit.php new file mode 100644 index 0000000..b57d0f3 --- /dev/null +++ b/backend/views/language/_form_adress_edit.php @@ -0,0 +1,41 @@ + + +
+ + + + $row) { + ?> + + + + + hasErrors()) { ?>
getFirstError('value');?>
+ translate) { + foreach($row->getLangs() as $lang_id => $lang) { + ?> +
+
+
+
+ + +
+ isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> +
+ + +
diff --git a/backend/views/language/create.php b/backend/views/language/create.php index bcc0899..b9d8db4 100644 --- a/backend/views/language/create.php +++ b/backend/views/language/create.php @@ -24,7 +24,11 @@ echo $this->render('layout'); [ 'class' => Column::className(), 'content' => function($model, $key, $index, $column) { +<<<<<<< 1fd2bdb43fc5cfdcf100cac8b72e67fd81e7f0fa return ''; +======= + return ''; +>>>>>>> 0e0edb85a79343e4d020ff05378179e2323b21bd } ], 'language_name', diff --git a/backend/views/language/create_adress.php b/backend/views/language/create_adress.php new file mode 100644 index 0000000..04ff331 --- /dev/null +++ b/backend/views/language/create_adress.php @@ -0,0 +1,19 @@ +title = Yii::t('app', 'Create Option'); +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Options'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +echo $this->render('layout'); +?> +
+ render('_form_adress', $oneform); + }?> + +
diff --git a/backend/views/language/index.php b/backend/views/language/index.php index c2c4bb4..81ca45b 100644 --- a/backend/views/language/index.php +++ b/backend/views/language/index.php @@ -24,7 +24,11 @@ echo $this->render('layout'); [ 'class' => Column::className(), 'content' => function($model, $key, $index, $column) { +<<<<<<< 1fd2bdb43fc5cfdcf100cac8b72e67fd81e7f0fa return ''; +======= + return ''; +>>>>>>> 0e0edb85a79343e4d020ff05378179e2323b21bd } ], 'language_name', diff --git a/backend/views/language/layout.php b/backend/views/language/layout.php index d917061..5103c47 100644 --- a/backend/views/language/layout.php +++ b/backend/views/language/layout.php @@ -36,5 +36,8 @@ $this->params['breadcrumbs'][] = $this->title;
  • Ipsum IpsumIpsum IpsumIpsum IpsumIpsum IpsumIpsum IpsumIpsum IpsumIpsum IpsumIpsum IpsumIpsum IpsumIpsum IpsumIpsum IpsumIpsum Ipsum
  • +
  • + +
  • diff --git a/backend/views/language/update_adress.php b/backend/views/language/update_adress.php new file mode 100644 index 0000000..26bd4fd --- /dev/null +++ b/backend/views/language/update_adress.php @@ -0,0 +1,21 @@ +title = Yii::t('app', 'Update {modelClass}: ', [ + 'modelClass' => 'Option', +]) . ' ' . $forms[0]['models'][\Yii::$app->request->get('id')]->name; +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Options'), 'url' => ['index']]; +$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'); +echo $this->render('layout'); +?> +
    + render('_form_adress_edit', $oneform); + }?> + +
    diff --git a/backend/views/language/view_adress.php b/backend/views/language/view_adress.php new file mode 100644 index 0000000..701ff4d --- /dev/null +++ b/backend/views/language/view_adress.php @@ -0,0 +1,50 @@ +title = Yii::t('app', 'Languages'); +$this->params['breadcrumbs'][] = $this->title; +echo $this->render('layout'); +?> +
    + + render('_search', ['model' => $searchModel]); ?> + + $dataProvider, + 'layout' => "{items}", + 'columns' => [ + [ + 'class' => 'yii\grid\Column', + 'content' => function($model, $key, $index, $column) { + return OptionLang::find()->select('value')->where(['lang_id' => 0, 'id' => $model->option_id])->scalar(); + }, + 'header' => Yii::t('app', 'adress_name') + ], + [ + 'class' => 'yii\grid\ActionColumn', + 'template' => '{update-adress} {delete-adress}', + 'buttons' => [ + 'update-adress' => function ($url, $model, $key) { + return Html::a('', $url, ['class' => 'glyphicon glyphicon-pencil', 'title' => Yii::t('app', 'Change')]); + }, + 'delete-adress' => function ($url, $model, $key) { + return Html::a('', $url, ['class' => 'glyphicon glyphicon-trash', 'title' => Yii::t('app', 'Delete')]); + }, + ], + ] + ] + ]); ?> + +

    + 'btn btn-success']) ?> +

    + +
    diff --git a/backend/views/layouts/content.php b/backend/views/layouts/content.php new file mode 100644 index 0000000..d19d9b0 --- /dev/null +++ b/backend/views/layouts/content.php @@ -0,0 +1,241 @@ + +
    +
    + blocks['content-header'])) { ?> +

    blocks['content-header'] ?>

    + +

    + title !== null) { + echo \yii\helpers\Html::encode($this->title); + } else { + echo \yii\helpers\Inflector::camel2words( + \yii\helpers\Inflector::id2camel($this->context->module->id) + ); + echo ($this->context->module->id !== \Yii::$app->id) ? 'Module' : ''; + } ?> +

    + + + isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], + ] + ) ?> +
    + +
    + + +
    +
    + + + + + + +
    \ No newline at end of file diff --git a/backend/views/layouts/header.php b/backend/views/layouts/header.php new file mode 100644 index 0000000..9149654 --- /dev/null +++ b/backend/views/layouts/header.php @@ -0,0 +1,287 @@ +user->identity->firstname.' '.Yii::$app->user->identity->lastname; + +/* @var $this \yii\web\View */ +/* @var $content string */ +?> + +
    + + APP' . Yii::$app->name . '', Yii::$app->homeUrl, ['class' => 'logo']) ?> + + +
    diff --git a/backend/views/layouts/left.php b/backend/views/layouts/left.php new file mode 100644 index 0000000..e7d06ef --- /dev/null +++ b/backend/views/layouts/left.php @@ -0,0 +1,82 @@ + diff --git a/backend/views/layouts/main-login.php b/backend/views/layouts/main-login.php new file mode 100644 index 0000000..c6525db --- /dev/null +++ b/backend/views/layouts/main-login.php @@ -0,0 +1,29 @@ + +beginPage() ?> + + + + + + + <?= Html::encode($this->title) ?> + head() ?> + + + +beginBody() ?> + + + +endBody() ?> + + +endPage() ?> diff --git a/backend/views/layouts/main.php b/backend/views/layouts/main.php index d5ded73..1aa871f 100644 --- a/backend/views/layouts/main.php +++ b/backend/views/layouts/main.php @@ -1,76 +1,65 @@ -beginPage() ?> - - - - - - - <?= Html::encode($this->title) ?> - head() ?> - - -beginBody() ?> +if (Yii::$app->controller->action->id === 'login') { +/** + * Do not use this code in your template. Remove it. + * Instead, use the code $this->layout = '//main-login'; in your controller. + */ + echo $this->render( + 'main-login', + ['content' => $content] + ); +} else { -
    - 'My Company', - 'brandUrl' => Yii::$app->homeUrl, - 'options' => [ - 'class' => 'navbar-inverse navbar-fixed-top', - ], - ]); - $menuItems = [ - ['label' => 'Home', 'url' => ['/site/index']], - ]; - if (Yii::$app->user->isGuest) { - $menuItems[] = ['label' => 'Login', 'url' => ['/site/login']]; + if (class_exists('backend\assets\AppAsset')) { + backend\assets\AppAsset::register($this); } else { - $menuItems[] = [ - 'label' => 'Logout (' . Yii::$app->user->identity->username . ')', - 'url' => ['/site/logout'], - 'linkOptions' => ['data-method' => 'post'] - ]; + app\assets\AppAsset::register($this); } - echo Nav::widget([ - 'options' => ['class' => 'navbar-nav navbar-right'], - 'items' => $menuItems, - ]); - NavBar::end(); + + dmstr\web\AdminLteAsset::register($this); + + $directoryAsset = Yii::$app->assetManager->getPublishedUrl('@vendor/almasaeed2010/adminlte/dist'); ?> + beginPage() ?> + + + + + + + <?= Html::encode($this->title) ?> + head() ?> + + + beginBody() ?> +
    -
    - isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], - ]) ?> - - -
    -
    + render( + 'header.php', + ['directoryAsset' => $directoryAsset] + ) ?> + + render( + 'left.php', + ['directoryAsset' => $directoryAsset] + ) + ?> -
    -
    -

    © My Company

    + render( + 'content.php', + ['content' => $content, 'directoryAsset' => $directoryAsset] + ) ?> -

    -
    -endBody() ?> - - -endPage() ?> + endBody() ?> + + + endPage() ?> + diff --git a/backend/views/new-options-lang/_form.php b/backend/views/new-options-lang/_form.php new file mode 100644 index 0000000..92be7ec --- /dev/null +++ b/backend/views/new-options-lang/_form.php @@ -0,0 +1,27 @@ + + +
    + + + + field($model, 'id')->textInput() ?> + + field($model, 'lang_id')->textInput() ?> + + field($model, 'value')->textarea(['rows' => 6]) ?> + +
    + isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> +
    + + + +
    diff --git a/backend/views/new-options-lang/_search.php b/backend/views/new-options-lang/_search.php new file mode 100644 index 0000000..492705f --- /dev/null +++ b/backend/views/new-options-lang/_search.php @@ -0,0 +1,33 @@ + + + diff --git a/backend/views/new-options-lang/create.php b/backend/views/new-options-lang/create.php new file mode 100644 index 0000000..3f3c43b --- /dev/null +++ b/backend/views/new-options-lang/create.php @@ -0,0 +1,21 @@ +title = Yii::t('app', 'Create New Options Lang'); +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'New Options Langs'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
    + +

    title) ?>

    + + render('_form', [ + 'model' => $model, + ]) ?> + +
    diff --git a/backend/views/new-options-lang/index.php b/backend/views/new-options-lang/index.php new file mode 100644 index 0000000..728c3e3 --- /dev/null +++ b/backend/views/new-options-lang/index.php @@ -0,0 +1,37 @@ +title = Yii::t('app', 'New Options Langs'); +$this->params['breadcrumbs'][] = $this->title; +?> +
    + +

    title) ?>

    + render('_search', ['model' => $searchModel]); ?> + +

    + 'btn btn-success']) ?> +

    + + $dataProvider, + 'filterModel' => $searchModel, + 'columns' => [ + ['class' => 'yii\grid\SerialColumn'], + + 'primary', + 'id', + 'lang_id', + 'value:ntext', + + ['class' => 'yii\grid\ActionColumn'], + ], + ]); ?> + +
    diff --git a/backend/views/new-options-lang/update.php b/backend/views/new-options-lang/update.php new file mode 100644 index 0000000..b1889b6 --- /dev/null +++ b/backend/views/new-options-lang/update.php @@ -0,0 +1,23 @@ +title = Yii::t('app', 'Update {modelClass}: ', [ + 'modelClass' => 'New Options Lang', +]) . ' ' . $model->primary; +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'New Options Langs'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = ['label' => $model->primary, 'url' => ['view', 'id' => $model->primary]]; +$this->params['breadcrumbs'][] = Yii::t('app', 'Update'); +?> +
    + +

    title) ?>

    + + render('_form', [ + 'model' => $model, + ]) ?> + +
    diff --git a/backend/views/new-options-lang/view.php b/backend/views/new-options-lang/view.php new file mode 100644 index 0000000..4fa8864 --- /dev/null +++ b/backend/views/new-options-lang/view.php @@ -0,0 +1,38 @@ +title = $model->primary; +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'New Options Langs'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
    + +

    title) ?>

    + +

    + $model->primary], ['class' => 'btn btn-primary']) ?> + $model->primary], [ + 'class' => 'btn btn-danger', + 'data' => [ + 'confirm' => Yii::t('app', 'Are you sure you want to delete this item?'), + 'method' => 'post', + ], + ]) ?> +

    + + $model, + 'attributes' => [ + 'primary', + 'id', + 'lang_id', + 'value:ntext', + ], + ]) ?> + +
    diff --git a/backend/views/site/requests.php b/backend/views/site/requests.php new file mode 100644 index 0000000..3203326 --- /dev/null +++ b/backend/views/site/requests.php @@ -0,0 +1,70 @@ +title = Yii::t('app', 'Requests'); +?> +
    + $dataProvider, + 'columns' => [ + [ + 'class' => 'yii\grid\SerialColumn' + ], + [ + 'attribute' => 'created_at', + ], + [ + 'header' => Yii::t('app', 'values'), + 'content' => function($model, $key, $index, $column) { + $value = ''; + $langs = $model->options; + $lang = $model->getOptionDefaultLang(true); + $value .= "{$model->name}:{$lang['value']}"; + foreach($langs as $onemodel) { + $lang = $onemodel->getOptionDefaultLang(true); + $value .= "
    {$onemodel->name}:{$lang['value']}"; + } + return $value; + } + ], + [ + 'class' => 'yii\grid\ActionColumn', + 'template' => '{requests} {delete-req}', + 'buttons' => [ + 'requests' => function($url, $model, $key) { + return Html::a( + '', + $model->options['is_new']->getOptionDefaultLang()->value?$url:'#', + [ + 'class' => $model->options['is_new']->getOptionDefaultLang()->value?'glyphicon glyphicon-eye-open':'glyphicon glyphicon-eye-close', + 'title' => Yii::t('app', 'Make already read') + ] + ); + }, + 'delete-req' => function($url, $model, $key) { + return Html::a( + '', + $url, + [ + 'class' => 'glyphicon glyphicon-trash', + 'title' => Yii::t('app', 'Delete'), + 'data' => [ + 'label' => Yii::t('app', 'Delete'), + 'confirm' => Yii::t('app', 'Are you sure you want delete this element?'), + 'method' => 'post', + 'pjax' => 0 + ] + ] + ); + } + ] + ] + ], + ]); + ?> +
    diff --git a/backend/web/css/flags32.css b/backend/web/css/flags32.css index 19b8d85..ba24b4f 100644 --- a/backend/web/css/flags32.css +++ b/backend/web/css/flags32.css @@ -246,4 +246,8 @@ .f32 .sx{background-position:0 -7808px;} .f32 .cw{background-position:0 -7840px;} .f32 .ss{background-position:0 -7872px;} +<<<<<<< 1fd2bdb43fc5cfdcf100cac8b72e67fd81e7f0fa .f32 .nu{background-position:0 -7904px;} +======= +.f32 .nu{background-position:0 -7904px;} +>>>>>>> 0e0edb85a79343e4d020ff05378179e2323b21bd diff --git a/backend/web/css/option.css b/backend/web/css/option.css new file mode 100644 index 0000000..deeed60 --- /dev/null +++ b/backend/web/css/option.css @@ -0,0 +1,3 @@ +#main_row .remove_lang { + display: none; +} \ No newline at end of file diff --git a/backend/web/js/option.js b/backend/web/js/option.js new file mode 100644 index 0000000..31a0901 --- /dev/null +++ b/backend/web/js/option.js @@ -0,0 +1,25 @@ +$(function() { + var counter = 0; + $(document).on('click', '.add_row', function() { + counter++; + var clone = $('#main_row').clone().html().replace(new RegExp("Option\\[0\\]", 'g'), "Option["+counter+"]"); + console.log(form); + $(clone).appendTo('#'+form); + $('#'+form+' button[type=submit]').parent().appendTo('#'+form); + }); + $(document).on('click', '.add_lang', function() { + var field_block = $(this).parent().parent(); + if($(this).hasClass('active')) { + $(field_block).find('.main_input').attr('required', '').show(); + $(field_block).find('.lang_inputs').hide(); + $(this).removeClass('active'); + } else { + $(field_block).find('.main_input').removeAttr('required').hide(); + $(field_block).find('.lang_inputs').show(); + $(this).addClass('active'); + } + }); + $(document).on('click', '.remove_lang', function() { + $(this).parents('.form-wrapper').remove(); + }); + }); \ No newline at end of file diff --git a/common/models/Language.php b/common/models/Language.php index 14b0230..c9bc423 100644 --- a/common/models/Language.php +++ b/common/models/Language.php @@ -40,7 +40,7 @@ class Language extends \yii\db\ActiveRecord //Получения объекта языка по умолчанию static function getDefaultLang() { - return Language::find()->where('`is_default` = :default', [':default' => 1])->one(); + return Language::find()->where('is_default = :default', [':default' => 1])->one(); } //Получения объекта языка по буквенному идентификатору diff --git a/common/translation/ru/app.php b/common/translation/ru/app.php index 0a1e0a2..7c35bc6 100644 --- a/common/translation/ru/app.php +++ b/common/translation/ru/app.php @@ -11,5 +11,20 @@ return [ 'Make default' => 'Установить по умолчанию', 'Language Name' => 'Название языка', 'Lang Code' => 'Код языка', +<<<<<<< 1fd2bdb43fc5cfdcf100cac8b72e67fd81e7f0fa 'Is Default' => 'По умолчанию' +======= + 'Is Default' => 'По умолчанию', + 'adress' => 'Адрес', + 'adress_name' => 'Адрес', + 'Create adress' => 'Добавить адрес', + 'adres' => 'Адрес', + 'x' => 'Координата x', + 'y' => 'Координата y', + 'phone' => 'Телефон', + 'name' => 'Название', + 'one_name' => 'Имя', + 'message' => 'Сообщение', + 'Feedback' => 'Обратная связь' +>>>>>>> 0e0edb85a79343e4d020ff05378179e2323b21bd ]; \ No newline at end of file diff --git a/frontend/controllers/SiteController.php b/frontend/controllers/SiteController.php index bd77425..1f38241 100644 --- a/frontend/controllers/SiteController.php +++ b/frontend/controllers/SiteController.php @@ -19,6 +19,7 @@ use yii\validators\EmailValidator; use common\models\User; use yii\helpers\VarDumper; use common\models\Page; +use frontend\models\Option; /** * Site controller @@ -260,6 +261,7 @@ class SiteController extends Controller 'model' => $model, ]); } +<<<<<<< 1fd2bdb43fc5cfdcf100cac8b72e67fd81e7f0fa public function actionOptions() { $option_model = new Options(); $option_list = $option_model->find()->where(1)->all(); @@ -301,5 +303,15 @@ class SiteController extends Controller $data['option_values'] = $option_values; return $this->render('options', ['options' => $data, 'post' => $post]); } +======= + + public function actionFeedback() { + $form[0] = Option::create(\Yii::$app->request->post(), 'Feedback', 1, [['name' => 'one_name', 'template' => 'text', 'translate' => false], ['name' => 'phone', 'template' => 'text', 'translate' => false], ['name' => 'message', 'template' => 'text', 'translate' => false]], false); + if($form[0]['success'] == false) { + return $this->render('feedback', ['forms' => $form]); + } else { + return $this->render('index'); + } +>>>>>>> 0e0edb85a79343e4d020ff05378179e2323b21bd } } diff --git a/frontend/models/Option.php b/frontend/models/Option.php index 3bf74af..dab07c9 100644 --- a/frontend/models/Option.php +++ b/frontend/models/Option.php @@ -48,11 +48,12 @@ class Option extends \yii\db\ActiveRecord 'name' => Yii::t('app', 'Name'), 'template' => Yii::t('app', 'Template'), 'parent_id' => Yii::t('app', 'Parent ID'), + 'created_at' => Yii::t('app', 'Date created'), ]; } public function getLangs() { - return (new Language())->find()->where(['>', 'language_id', 0])->asArray()->all(); + return (new Language())->find()->where(['>', 'language_id', 0])->andWhere(['active' => 1])->asArray()->all(); } public static function change($id, $post, $modeldb, $model_id) { @@ -126,7 +127,12 @@ class Option extends \yii\db\ActiveRecord ); } +<<<<<<< 1fd2bdb43fc5cfdcf100cac8b72e67fd81e7f0fa public static function create($post, $modeldb, $model_id, $fields) { +======= + public static function create($post, $modeldb, $model_id, $fields, $multiple) { + $multiple = boolval($multiple); +>>>>>>> 0e0edb85a79343e4d020ff05378179e2323b21bd $model = new Option(); $modellang = new OptionLang(); if(!empty($post['Option'])) { @@ -197,6 +203,24 @@ class Option extends \yii\db\ActiveRecord } } if($ok) { + if($modeldb == 'Feedback') { + $newflag = new Option(); + $newflag->model = $modeldb; + $newflag->model_id = $model_id; + $newflag->name = 'is_new'; + $newflag->template = 'checkbox'; + $newflag->parent_id = $parentid; + $newflag->translate = 0; + if($newflag->save()) { + $newflaglang = new OptionLang(); + $newflaglang->id = $newflag->option_id; + $newflaglang->lang_id = 0; + $newflaglang->value = '1'; + if(!$newflaglang->save()) { + $newflag->delete(); + } + } + } return array('models' => $models, 'modelslang' => $modelslang, 'success' => true); } else { return array( @@ -205,7 +229,8 @@ class Option extends \yii\db\ActiveRecord 'modeldb' => $modeldb, 'model_id' => $model_id, 'fields' => $fields, - 'success' => false + 'success' => false, + 'multiple' => $multiple ); } } else { @@ -214,8 +239,43 @@ class Option extends \yii\db\ActiveRecord 'modeldb' => $modeldb, 'model_id' => $model_id, 'fields' => $fields, - 'success' => false + 'success' => false, + 'multiple' => $multiple ); } } + + public function getOptions() { + return $this->hasMany(Option::className(), ['parent_id' => 'option_id'])->indexBy('name'); + } + + public function getOption() { + return $this->hasOne(Option::className(), ['option_id' => 'parent_id']); + } + + public function getOptionLangs() { + return $this->hasMany(OptionLang::className(), ['id' => 'option_id']); + } + + public function getOptionDefaultLang($array = false) { + $query = $this->getOptionLangs()->where(['lang_id' => 0]); + if($array) { + $query->asArray(); + } + return $query->one(); + } + + public static function markOld($id) { + $model = Option::findOne($id); + $is_new = $model->getOptions()->where(['name' => 'is_new'])->one(); + if(empty($is_new)) return false; + $is_newlang = $is_new->getOptionDefaultLang(); + $is_newlang->value = '0'; + if($is_newlang->save()) { + return true; + } else { + return false; + } + } + } diff --git a/frontend/models/OptionLangSearch.php b/frontend/models/OptionLangSearch.php new file mode 100644 index 0000000..894cfbb --- /dev/null +++ b/frontend/models/OptionLangSearch.php @@ -0,0 +1,68 @@ + $query, + ]); + + $this->load($params); + + 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([ + 'primary' => $this->primary, + 'id' => $this->id, + 'lang_id' => $this->lang_id, + ]); + + $query->andFilterWhere(['like', 'value', $this->value]); + + return $dataProvider; + } +} diff --git a/frontend/models/OptionSearch.php b/frontend/models/OptionSearch.php index b91b2c7..4916fa1 100644 --- a/frontend/models/OptionSearch.php +++ b/frontend/models/OptionSearch.php @@ -46,7 +46,12 @@ class OptionSearch extends Option $dataProvider = new ActiveDataProvider([ 'query' => $query, ]); - + $data = [ + 'OptionSearch' => [ + 'model' => 'Main' + ] + ]; + $this->load($params); if (!$this->validate()) { @@ -54,16 +59,19 @@ class OptionSearch extends Option // $query->where('0=1'); return $dataProvider; } - + + $query->andWhere(['parent_id' => null]); + $query->andFilterWhere([ 'option_id' => $this->option_id, 'model_id' => $this->model_id, 'parent_id' => $this->parent_id, ]); - + $query->andFilterWhere(['like', 'model', $this->model]) ->andFilterWhere(['like', 'name', $this->name]) ->andFilterWhere(['like', 'template', $this->template]); + return $dataProvider; } diff --git a/frontend/views/option/_form.php b/frontend/views/option/_form.php index 32331a3..ed88827 100644 --- a/frontend/views/option/_form.php +++ b/frontend/views/option/_form.php @@ -12,7 +12,7 @@ use yii\widgets\ActiveForm; -

    +

    diff --git a/frontend/views/site/feedback.php b/frontend/views/site/feedback.php new file mode 100644 index 0000000..9527ec5 --- /dev/null +++ b/frontend/views/site/feedback.php @@ -0,0 +1,19 @@ +title = Yii::t('app', 'Feedback'); +$this->params['breadcrumbs'][] = $this->title; +?> +
    +

    title) ?>

    + render('/option/_form', $oneform); + }?> +
    -- libgit2 0.21.4