Commit eb8966763c04e26f6d0941068c6229b440046391
1 parent
8b201863
+ Термины и база full-backup
Showing
20 changed files
with
263 additions
and
316 deletions
Show diff stats
backend/controllers/MenuLocationController.php
... | ... | @@ -4,7 +4,7 @@ namespace backend\controllers; |
4 | 4 | |
5 | 5 | use Yii; |
6 | 6 | use backend\models\MenuLocation; |
7 | -use backend\models\MenuSearchLocation; | |
7 | +use backend\models\MenuLocationSearch; | |
8 | 8 | use yii\web\Controller; |
9 | 9 | use yii\web\NotFoundHttpException; |
10 | 10 | use yii\filters\VerbFilter; |
... | ... | @@ -32,7 +32,7 @@ class MenuLocationController extends Controller |
32 | 32 | */ |
33 | 33 | public function actionIndex() |
34 | 34 | { |
35 | - $searchModel = new MenuSearchLocation(); | |
35 | + $searchModel = new MenuLocationSearch(); | |
36 | 36 | $dataProvider = $searchModel->search(Yii::$app->request->queryParams); |
37 | 37 | |
38 | 38 | return $this->render('index', [ | ... | ... |
backend/controllers/SiteController.php
... | ... | @@ -57,7 +57,19 @@ class SiteController extends Controller |
57 | 57 | |
58 | 58 | public function actionIndex() |
59 | 59 | { |
60 | - return $this->render('index'); | |
60 | +/* | |
61 | + if (Yii::$app->user->can('site/index')) | |
62 | + { | |
63 | + | |
64 | + } | |
65 | + else | |
66 | + { | |
67 | + Yii::$app->getSession()->setFlash('error', 'Доступ закрыт..'); | |
68 | + | |
69 | + return $this->redirect('/'); | |
70 | + } | |
71 | +*/ | |
72 | + return $this->render('index'); | |
61 | 73 | } |
62 | 74 | |
63 | 75 | public function actionLogin() | ... | ... |
backend/controllers/TerminController.php
... | ... | @@ -5,23 +5,26 @@ namespace backend\controllers; |
5 | 5 | use Yii; |
6 | 6 | use backend\models\Termin; |
7 | 7 | use backend\models\TerminSearch; |
8 | +use yii\filters\AccessControl; | |
8 | 9 | use yii\web\Controller; |
9 | 10 | use yii\web\NotFoundHttpException; |
10 | 11 | use yii\filters\VerbFilter; |
11 | 12 | use backend\models\TerminLang; |
12 | 13 | use backend\models\TerminStructure; |
14 | +use common\models\Language; | |
15 | +use backend\models\TerminRelation; | |
13 | 16 | |
14 | 17 | /** |
15 | 18 | * TerminController implements the CRUD actions for Termin model. |
16 | 19 | */ |
17 | 20 | class TerminController extends Controller |
18 | 21 | { |
19 | - public function behaviors() | |
22 | + public function behaviors() | |
20 | 23 | { |
21 | 24 | return [ |
22 | 25 | 'access' => [ |
23 | 26 | 'class' => AccessControl::className(), |
24 | - 'except' => ['login', 'error', 'index', 'create', 'update'], | |
27 | + 'except' => ['login', 'error', 'index', 'create', 'update', 'view', 'form', 'delete'], | |
25 | 28 | 'rules' => [ |
26 | 29 | [ |
27 | 30 | 'allow' => true, |
... | ... | @@ -38,6 +41,20 @@ class TerminController extends Controller |
38 | 41 | ], |
39 | 42 | ]; |
40 | 43 | } |
44 | + | |
45 | + // ==== AJAX ==== | |
46 | + | |
47 | + public function actionForm($lang_id, $widget_id) | |
48 | + { | |
49 | + if (! $model = Language::find()->where(['>=', 'language_id', 1])->andWhere(['active' => 1, 'language_id' => $lang_id])->one()) | |
50 | + { | |
51 | + throw new NotFoundHttpException('Language not found'); | |
52 | + } | |
53 | + | |
54 | + $article_lang = new TerminLang(); | |
55 | + | |
56 | + return $this->renderAjax('_article_form', ['model' => $model, 'article_lang' => $article_lang, 'widget_id' => $widget_id]); | |
57 | + } | |
41 | 58 | |
42 | 59 | /** |
43 | 60 | * Lists all Termin models. |
... | ... | @@ -73,23 +90,48 @@ class TerminController extends Controller |
73 | 90 | */ |
74 | 91 | public function actionCreate() |
75 | 92 | { |
76 | - $model = new Termin(); | |
77 | - $model_lang = new TerminLang(); | |
93 | + $model = new Termin(); | |
94 | + $model_pid = new TerminStructure(); | |
78 | 95 | |
96 | + // проверяем общие таблицы | |
79 | 97 | if ($model->load(Yii::$app->request->post()) |
80 | - && $model_lang->load(Yii::$app->request->post())) | |
81 | - { | |
82 | - $model->save(); | |
83 | - $model_lang->termin_id = $model->termin_id; | |
84 | - $model_lang->save(); | |
98 | + && $model_pid->load(Yii::$app->request->post()) | |
99 | + ) | |
100 | + { | |
101 | + $model_lang = []; | |
102 | + | |
103 | + foreach (Yii::$app->request->post()['TerminLang'] as $index => $row) | |
104 | + { | |
105 | + $model_lang[$index] = new TerminLang(); | |
106 | + } | |
107 | + | |
108 | + if (TerminLang::loadMultiple($model_lang, Yii::$app->request->post()) | |
109 | + && TerminLang::validateMultiple($model_lang)) | |
110 | + { | |
111 | + $model->save(); | |
112 | + $model_pid->termin_id = $model->termin_id; | |
113 | + $model_pid->save(); | |
114 | + | |
115 | + foreach ($model_lang as $post) | |
116 | + { | |
117 | + $post->termin_id = $model->termin_id; | |
118 | + $post->save(false); | |
119 | + } | |
120 | + } | |
85 | 121 | |
86 | 122 | return $this->redirect(['view', 'id' => $model->termin_id]); |
87 | 123 | } |
88 | 124 | else |
89 | - { | |
125 | + { | |
126 | + $default_lang = Language::getDefaultLang(); | |
127 | + | |
128 | + $LANG = []; | |
129 | + $LANG[$default_lang->language_id] = new TerminLang(); | |
130 | + | |
90 | 131 | return $this->render('create', [ |
91 | 132 | 'model' => $model, |
92 | - 'model_lang' => $model_lang, | |
133 | + 'model_lang' => $LANG, | |
134 | + 'model_pid' => $model_pid, | |
93 | 135 | ]); |
94 | 136 | } |
95 | 137 | } |
... | ... | @@ -103,22 +145,49 @@ class TerminController extends Controller |
103 | 145 | public function actionUpdate($id) |
104 | 146 | { |
105 | 147 | $model = $this->findModel($id); |
106 | - $model_lang = TerminLang::findOne($id); | |
107 | - $model_pid = TerminStructure::findOne($id)->getRelation('terminPid')->one(); | |
108 | - | |
109 | - //var_dump(Yii::$app->request->post()); | |
110 | - //var_dump($model_pid->termin->termin_id); die; | |
111 | - | |
148 | + $model_lang = Termin::findOne($id)->getTerminLangs()->indexBy('lang_id')->all(); | |
149 | + $model_pid = TerminStructure::findOne($id); | |
150 | + | |
151 | + // проверяем общие таблицы | |
112 | 152 | if ($model->load(Yii::$app->request->post()) |
113 | - && $model_lang->load(Yii::$app->request->post()) | |
114 | 153 | && $model_pid->load(Yii::$app->request->post()) |
115 | 154 | ) |
116 | - { | |
117 | - $model->save(); | |
118 | - $model_lang->save(); | |
119 | - $model_pid->termin_pid = $model_pid->termin->termin_id; | |
120 | - | |
121 | - return $this->redirect(['view', 'id' => $model->termin_id]); | |
155 | + { | |
156 | +/* | |
157 | + // проверяем таблицы lang | |
158 | + $post_lang = Yii::$app->request->post('TerminLang'); | |
159 | + if (! empty ($post_lang)) | |
160 | + { | |
161 | + foreach ($post_lang as &$row) | |
162 | + { | |
163 | + $row += new TerminLang(); | |
164 | + } | |
165 | + } | |
166 | + | |
167 | + var_dump($post_lang); | |
168 | + | |
169 | + die; | |
170 | +*/ | |
171 | + // + появились | |
172 | + | |
173 | + // - удалились | |
174 | + | |
175 | + if (TerminLang::loadMultiple($model_lang, Yii::$app->request->post()) | |
176 | + && TerminLang::validateMultiple($model_lang)) | |
177 | + { | |
178 | + foreach ($model_lang as $post) | |
179 | + { | |
180 | + $post->termin_id = $model->termin_id; | |
181 | + $post->save(false); | |
182 | + } | |
183 | + | |
184 | + $model->save(); | |
185 | + $model_pid->save(); | |
186 | + | |
187 | + return $this->redirect(['view', 'id' => $model->termin_id]); | |
188 | + } | |
189 | + | |
190 | + return $this->redirect('index'); | |
122 | 191 | } |
123 | 192 | else |
124 | 193 | { | ... | ... |
backend/models/Termin.php
... | ... | @@ -21,6 +21,7 @@ class Termin extends \yii\db\ActiveRecord |
21 | 21 | { |
22 | 22 | var $termin_title; |
23 | 23 | var $termin_pid; |
24 | + var $termin_parent_title; | |
24 | 25 | |
25 | 26 | /** |
26 | 27 | * @inheritdoc |
... | ... | @@ -37,9 +38,9 @@ class Termin extends \yii\db\ActiveRecord |
37 | 38 | { |
38 | 39 | return [ |
39 | 40 | [['is_book'], 'integer'], |
40 | - [['termin_pid'], 'safe'], | |
41 | + [['termin_pid', 'termin_parent_title'], 'safe'], | |
41 | 42 | [['termin_title'], 'string', 'max' => 250], |
42 | - [['termin_name'], 'string', 'max' => 250] | |
43 | + [['termin_name','termin_parent_title'], 'string', 'max' => 250] | |
43 | 44 | ]; |
44 | 45 | } |
45 | 46 | |
... | ... | @@ -51,6 +52,8 @@ class Termin extends \yii\db\ActiveRecord |
51 | 52 | return [ |
52 | 53 | 'termin_id' => Yii::t('app', 'termin'), |
53 | 54 | 'termin_name' => Yii::t('app', 'name').' (SYSTEM NAME)', |
55 | + 'termin_title' => Yii::t('app', 'termin'), | |
56 | + 'termin_parent_title' => Yii::t('app', 'termin').' Parent', | |
54 | 57 | 'is_book' => Yii::t('app', 'book'), |
55 | 58 | ]; |
56 | 59 | } |
... | ... | @@ -70,6 +73,7 @@ class Termin extends \yii\db\ActiveRecord |
70 | 73 | 'return_field' => false, |
71 | 74 | 'show_all' => false, |
72 | 75 | 'to_array' => true, |
76 | + 'sql_only' => false, | |
73 | 77 | 'pid_title' => false, |
74 | 78 | )); |
75 | 79 | |
... | ... | @@ -134,7 +138,7 @@ class Termin extends \yii\db\ActiveRecord |
134 | 138 | { |
135 | 139 | $query = $query->asArray(); |
136 | 140 | } |
137 | - | |
141 | + | |
138 | 142 | if ($params['return_one'] || $params['return_field']) |
139 | 143 | { |
140 | 144 | |
... | ... | @@ -161,16 +165,13 @@ class Termin extends \yii\db\ActiveRecord |
161 | 165 | */ |
162 | 166 | public function getTerminLangs() |
163 | 167 | { |
164 | - return $this->hasMany(TerminLang::className(), ['termin_id' => 'termin_id']); | |
168 | + return $this->hasOne(TerminLang::className(), ['termin_id' => 'termin_id']); | |
165 | 169 | } |
166 | - | |
167 | - /** | |
168 | - * @return \yii\db\ActiveQuery | |
169 | - */ | |
170 | - public function getLangs() | |
170 | + | |
171 | + public function getParent() | |
171 | 172 | { |
172 | - return $this->hasMany(Language::className(), ['language_id' => 'lang_id']) | |
173 | - ->viaTable('termin_lang', ['termin_id' => 'termin_id']); | |
173 | + return $this->hasOne(Termin::className(),['termin_id'=>'termin_pid']) | |
174 | + ->viaTable(TerminStructure::tableName(), ['termin_id'=>'termin_id']); | |
174 | 175 | } |
175 | 176 | |
176 | 177 | /** | ... | ... |
backend/models/TerminSearch.php
... | ... | @@ -19,7 +19,7 @@ class TerminSearch extends Termin |
19 | 19 | { |
20 | 20 | return [ |
21 | 21 | [['termin_id', 'is_book'], 'integer'], |
22 | - [['termin_name'], 'safe'], | |
22 | + [['termin_name', 'termin_title', 'termin_parent_title'], 'safe'], | |
23 | 23 | ]; |
24 | 24 | } |
25 | 25 | |
... | ... | @@ -42,6 +42,7 @@ class TerminSearch extends Termin |
42 | 42 | public function search($params) |
43 | 43 | { |
44 | 44 | $query = Termin::find(); |
45 | + $query->select('*'); | |
45 | 46 | |
46 | 47 | $dataProvider = new ActiveDataProvider([ |
47 | 48 | 'query' => $query, |
... | ... | @@ -53,7 +54,9 @@ class TerminSearch extends Termin |
53 | 54 | // uncomment the following line if you do not want to return any records when validation fails |
54 | 55 | // $query->where('0=1'); |
55 | 56 | return $dataProvider; |
56 | - } | |
57 | + } | |
58 | + | |
59 | + $query->joinWith(['terminLangs', 'terminStructures']); | |
57 | 60 | |
58 | 61 | $query->andFilterWhere([ |
59 | 62 | 'termin_id' => $this->termin_id, |
... | ... | @@ -61,6 +64,8 @@ class TerminSearch extends Termin |
61 | 64 | ]); |
62 | 65 | |
63 | 66 | $query->andFilterWhere(['like', 'termin_name', $this->termin_name]); |
67 | + $query->andFilterWhere(['like', TerminLang::tableName().'.termin_title', $this->termin_title]); | |
68 | + //$query->andFilterWhere(['like', 'termin_title', $this->termin_title]); | |
64 | 69 | |
65 | 70 | return $dataProvider; |
66 | 71 | } | ... | ... |
backend/models/TerminStructure.php
backend/views/menu/index.php
... | ... | @@ -25,13 +25,14 @@ $this->params['breadcrumbs'][] = $this->title; |
25 | 25 | 'filterModel' => $searchModel, |
26 | 26 | 'columns' => [ |
27 | 27 | ['class' => 'yii\grid\SerialColumn'], |
28 | - | |
28 | +/* | |
29 | 29 | [ |
30 | 30 | 'attribute' => Yii::t('app', 'termin'), |
31 | 31 | 'value' => function ($model) { |
32 | 32 | return empty($model->termin_id) ? '-' : $model->termin_lang->termin_title; |
33 | 33 | }, |
34 | - ], | |
34 | + ], | |
35 | + */ | |
35 | 36 | 'menu_pid', |
36 | 37 | 'level', |
37 | 38 | // 'sortorder', | ... | ... |
1 | +<?php | |
2 | + | |
3 | +use yii\bootstrap\ActiveField; | |
4 | +use mihaildev\ckeditor\CKEditor; | |
5 | + | |
6 | +$form = \yii\bootstrap\ActiveForm::begin(); | |
7 | +?> | |
8 | +<div role="" class="tab-pane active ajax-loaded" id="<?=$widget_id?>-<?=$model->language_id?>"> | |
9 | + | |
10 | + <?= (new ActiveField(['model' => $article_lang, 'attribute' => "[$model->language_id]lang_id"]))->label(false)->hiddenInput(['value' => $model->language_id]) ?> | |
11 | + | |
12 | + <?= (new ActiveField(['model' => $article_lang, 'attribute' => "[$model->language_id]termin_title"]))->textInput() ?> | |
13 | + | |
14 | + <?= (new ActiveField(['model' => $article_lang, 'attribute' => "[$model->language_id]termin_alias"]))->textInput() ?> | |
15 | + | |
16 | +</div> | |
17 | +<?php | |
18 | +$form->end(); | |
19 | +?> | ... | ... |
backend/views/termin/_form.php
... | ... | @@ -5,21 +5,34 @@ use yii\widgets\ActiveForm; |
5 | 5 | use backend\models\Termin; |
6 | 6 | use kartik\select2\Select2; |
7 | 7 | use yii\helpers\ArrayHelper; |
8 | +use common\widgets\Multilang; | |
9 | +use yii\helpers\Url; | |
8 | 10 | |
9 | 11 | /* @var $this yii\web\View */ |
10 | 12 | /* @var $model backend\models\Termin */ |
11 | 13 | /* @var $form yii\widgets\ActiveForm */ |
12 | 14 | |
13 | -?> | |
15 | +echo '<div class="termin-form">'; | |
14 | 16 | |
15 | -<div class="termin-form"> | |
17 | +$form = ActiveForm::begin(); | |
16 | 18 | |
17 | - <?php $form = ActiveForm::begin(); ?> | |
18 | - | |
19 | - <?= $form->field($model_pid->termin, 'termin_pid')->widget(Select2::classname(), | |
19 | + // ================ | |
20 | + // ==== COMMON ==== | |
21 | + // ================ | |
22 | + | |
23 | + echo $form->field($model_pid, 'termin_pid')->widget( | |
24 | + Select2::classname(), | |
20 | 25 | [ |
21 | - 'data' => ArrayHelper::map((new Termin)->finInfo([ | |
26 | + 'data' => ArrayHelper::map( | |
27 | + [ | |
28 | + [ | |
29 | + 'termin_id' => 0, | |
30 | + 'termin_title' => 'NONE', | |
31 | + ] | |
32 | + ] + | |
33 | + (new Termin)->finInfo([ | |
22 | 34 | 'show_all' => true, |
35 | + 'to_array' => true, | |
23 | 36 | ]), |
24 | 37 | 'termin_id', |
25 | 38 | 'termin_title' |
... | ... | @@ -28,23 +41,53 @@ use yii\helpers\ArrayHelper; |
28 | 41 | 'pluginOptions' => [ |
29 | 42 | 'allowClear' => true |
30 | 43 | ], |
31 | - ]); | |
32 | - ?> | |
44 | + ] | |
45 | + ); | |
33 | 46 | |
34 | - <?= $form->field($model, 'termin_name')->textInput(['maxlength' => true]) ?> | |
35 | - | |
36 | - <?= $form->field($model_lang, 'termin_title')->textInput() ?> | |
37 | - | |
38 | - <?= $form->field($model_lang, 'termin_alias')->textInput() ?> | |
39 | - | |
40 | - <?= Html::activeHiddenInput ($model_lang, 'lang_id', [ | |
47 | + echo $form->field($model, 'termin_name')->textInput(['maxlength' => true]); | |
48 | + | |
49 | + // ============== | |
50 | + // ==== LANG ==== | |
51 | + // ============== | |
52 | + | |
53 | + $multilang = Multilang::begin(['ajaxpath' => Url::to(['termin/form']), 'form' => $form, 'data_langs' => $model_lang]); | |
54 | + | |
55 | + $first = 1; | |
56 | + | |
57 | + foreach ($model_lang as $index => $data) | |
58 | + { | |
59 | + echo ' | |
60 | + <div role="" class="tab-pane '.($first ? 'active main-tab' : '') .'" id="'.$multilang->id.'-'.$index.'"> | |
61 | + | |
62 | + '.$form->field($model_lang[$index], '['.$index.']lang_id')->label(false)->hiddenInput(['value' => $index]).' | |
63 | + | |
64 | + '.$form->field($model_lang[$index], '['.$index.']termin_title')->textInput().' | |
65 | + | |
66 | + '.$form->field($model_lang[$index], '['.$index.']termin_alias')->textInput().' | |
67 | + | |
68 | + </div>'; | |
69 | + | |
70 | + $first = 0; | |
71 | + } | |
72 | + | |
73 | + $multilang->end(); | |
74 | +/* | |
75 | + echo Html::activeHiddenInput ($model_lang, 'lang_id', [ | |
41 | 76 | 'value' => ($model_lang->lang_id != 0 ? $model_lang->lang_id : Yii::$app->params['lang_id']), |
42 | - ]) ?> | |
77 | + ]); | |
78 | +*/ | |
79 | + // ==== BUTTON ==== | |
43 | 80 | |
81 | + echo ' | |
44 | 82 | <div class="form-group"> |
45 | - <?= Html::submitButton($model->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> | |
46 | - </div> | |
83 | + '.Html::submitButton($model->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']).' | |
84 | + </div>'; | |
85 | + | |
86 | +ActiveForm::end(); | |
47 | 87 | |
48 | - <?php ActiveForm::end(); ?> | |
88 | +echo '</div>'; | |
49 | 89 | |
50 | -</div> | |
90 | +echo ' | |
91 | +<script> | |
92 | + var confirm_message = "'.\Yii::t('app', 'Remove image?').'" | |
93 | +</script>'; | ... | ... |
backend/views/termin/create.php
backend/views/termin/index.php
... | ... | @@ -19,17 +19,20 @@ $this->params['breadcrumbs'][] = $this->title; |
19 | 19 | <?= Html::a(Yii::t('app', 'Create'), ['create'], ['class' => 'btn btn-success']) ?> |
20 | 20 | </p> |
21 | 21 | |
22 | + | |
22 | 23 | <?= GridView::widget([ |
23 | 24 | 'dataProvider' => $dataProvider, |
24 | 25 | 'filterModel' => $searchModel, |
25 | 26 | 'columns' => [ |
26 | 27 | ['class' => 'yii\grid\SerialColumn'], |
27 | 28 | [ |
28 | - 'attribute' => Yii::t('app', 'termin'), | |
29 | - 'value' => function ($model) { | |
30 | - return $model->terminLangs[0]->termin_title; | |
31 | - }, | |
32 | - ], | |
29 | + 'attribute' => 'termin_title', | |
30 | + 'value' => 'terminLangs.termin_title' | |
31 | + ], | |
32 | + [ | |
33 | + 'attribute' => 'termin_parent_title', | |
34 | + 'value' => 'parent.terminLangs.termin_title' | |
35 | + ], | |
33 | 36 | 'termin_name', |
34 | 37 | 'is_book', |
35 | 38 | ... | ... |
backend/web/js/option.js
... | ... | @@ -36,42 +36,6 @@ $(function() { |
36 | 36 | $(document).on('click', '.remove_lang', function() { |
37 | 37 | $(this).parents('.form-wrapper').remove(); |
38 | 38 | }); |
39 | - if($('#lang-tabs li').length > 1) { | |
40 | - $('#lang-tabs li').append('<span class="glyphicon glyphicon-remove-circle remove-lang"></span>') | |
41 | - } | |
42 | - $(document).on('click', '#lang-dropdown li a[data-lang]', function() { | |
43 | - var lang = $(this).data('lang'); | |
44 | - var flag = $(this).find('span').first().clone(); | |
45 | - var el = $(this); | |
46 | - $.get('/blog/ajax/category-form', { lang_id: lang }, function(data) { | |
47 | - $('#lang-tabs li').removeClass('active'); | |
48 | - $('#lang-tabs').append('<li role="lang_inputs" class="active" data-lang="'+lang+'"><a href="#lang-'+lang+'" aria-controls="lang-'+lang+'" role="tab" data-toggle="tab">'+$('<p>').append($(flag)).html()+'</a></li>'); | |
49 | - $('.lang-tab-content .tab-pane.active').removeClass('active'); | |
50 | - $('.lang-tab-content').append($(data).find('.ajax-loaded').first()); | |
51 | - $('body').append($(data).filter('script')); | |
52 | - $(el).parent().remove(); | |
53 | - if(!$('#lang-dropdown li').length) { | |
54 | - $('#dropdownLang').addClass('disabled'); | |
55 | - } | |
56 | - if($('#lang-tabs li').length > 1) { | |
57 | - $('#lang-tabs li').append('<span class="glyphicon glyphicon-remove-circle remove-lang"></span>') | |
58 | - } | |
59 | - }); | |
60 | - }); | |
61 | - $(document).on('click', '.remove-lang', function() { | |
62 | - var lang = $(this).parent().data('lang'); | |
63 | - var flag = $(this).parent().find('span.flag').first().clone(); | |
64 | - $('#lang-'+lang).remove(); | |
65 | - $('#lang-dropdown').append('<li><a href="#lang-tabs" data-lang="'+lang+'">'+$('<p>').append($(flag)).html()+'</a></li>'); | |
66 | - $('#dropdownLang').removeClass('disabled'); | |
67 | - $(this).parent().remove(); | |
68 | - if($('#lang-tabs li').length <= 1) { | |
69 | - $('#lang-tabs li').find('.remove-lang').remove(); | |
70 | - } | |
71 | - if(!$('#lang-tabs>li.active').length) { | |
72 | - $('#lang-tabs>li').first().find('a').tab('show'); | |
73 | - } | |
74 | - }); | |
75 | 39 | $(document).on('change', '.image_inputs_field', function() { |
76 | 40 | readURL(this); |
77 | 41 | }); |
... | ... | @@ -89,4 +53,44 @@ $(function() { |
89 | 53 | } |
90 | 54 | return false; |
91 | 55 | }); |
56 | + $.each($('.nav-tabs.f32'), function(key, value) { | |
57 | + if($(value).find('li').length > 1) { | |
58 | + $(value).find('li').append('<span class="glyphicon glyphicon-remove-circle remove-lang"></span>'); | |
59 | + } | |
60 | + }); | |
61 | + $(document).on('click', '.dropdown-menu.f32 li a[data-lang]', function() { | |
62 | + var lang = $(this).data('lang'); | |
63 | + var flag = $(this).find('span').first().clone(); | |
64 | + var el = $(this); | |
65 | + var id = $(this).attr('href').substr(1); | |
66 | + $.get(form[id], { lang_id: lang, widget_id: id }, function(data) { | |
67 | + $('#'+id+'-tabs li').removeClass('active'); | |
68 | + $('#'+id+'-tabs').append('<li role="lang_inputs" class="active" data-lang="'+lang+'"><a href="#'+id+'-'+lang+'" aria-controls="'+id+'-'+lang+'" role="tab" data-toggle="tab">'+$('<p>').append($(flag)).html()+'</a></li>'); | |
69 | + $('#tab-content-'+id+' .tab-pane.active').removeClass('active'); | |
70 | + $('#tab-content-'+id).append($(data).find('.ajax-loaded').first()); | |
71 | + $('body').append($(data).filter('script')); | |
72 | + $(el).parent().remove(); | |
73 | + if(!$('#lang-'+id+' li').length) { | |
74 | + $('#'+id+'Lang').addClass('disabled'); | |
75 | + } | |
76 | + if($('#'+id+'-tabs li').length > 1) { | |
77 | + $('#'+id+'-tabs li').append('<span class="glyphicon glyphicon-remove-circle remove-lang"></span>') | |
78 | + } | |
79 | + }); | |
80 | + }); | |
81 | + $(document).on('click', '.remove-lang', function() { | |
82 | + var lang = $(this).parent().data('lang'); | |
83 | + var flag = $(this).parent().find('span.flag').first().clone(); | |
84 | + var id = $(this).parent().find('a[aria-controls]').first().attr('aria-controls').substr(0,8); | |
85 | + $('#'+id+'-'+lang).remove(); | |
86 | + $('#lang-'+id).append('<li><a href="#'+id+'" data-lang="'+lang+'">'+$('<p>').append($(flag)).html()+'</a></li>'); | |
87 | + $('#'+id+'Lang').removeClass('disabled'); | |
88 | + $(this).parent().remove(); | |
89 | + if($('#'+id+'-tabs li').length <= 1) { | |
90 | + $('#'+id+'-tabs li').find('.remove-lang').remove(); | |
91 | + } | |
92 | + if(!$('#'+id+'-tabs>li.active').length) { | |
93 | + $('#'+id+'-tabs>li').first().find('a').tab('show'); | |
94 | + } | |
95 | + }); | |
92 | 96 | }); |
93 | 97 | \ No newline at end of file | ... | ... |
composer.json
db-migration/artbox_db.backup
No preview for this file type
db-migration/artbox_db3.backup deleted
No preview for this file type
db-migration/article_option_migration.backup deleted
No preview for this file type
db-migration/blog.zip deleted
No preview for this file type
db-migration/catalog.backup deleted
No preview for this file type
db-migration/yarik.sql deleted
1 | --- -------------------------------------------------------- | |
2 | --- Хост: 127.0.0.1 | |
3 | --- Версия сервера: PostgreSQL 9.4.4, compiled by Visual C++ build 1800, 32-bit | |
4 | --- ОС Сервера: | |
5 | --- HeidiSQL Версия: 9.3.0.4984 | |
6 | --- -------------------------------------------------------- | |
7 | - | |
8 | -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; | |
9 | -/*!40101 SET NAMES */; | |
10 | -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; | |
11 | -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; | |
12 | - | |
13 | --- Дамп структуры для таблица public.article | |
14 | -CREATE TABLE IF NOT EXISTS "article" ( | |
15 | - "id" INTEGER NOT NULL DEFAULT nextval('article_id_seq'::regclass) COMMENT E'', | |
16 | - "sort" INTEGER NOT NULL DEFAULT 100 COMMENT E'', | |
17 | - "create_at" TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT now() COMMENT E'', | |
18 | - "update_at" TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT now() COMMENT E'', | |
19 | - "code" CHARACTER VARYING NOT NULL COMMENT E'', | |
20 | - "category_id" INTEGER NOT NULL DEFAULT 1 COMMENT E'', | |
21 | - "author" INTEGER NOT NULL COMMENT E'', | |
22 | - "tags" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'', | |
23 | - "parent_id" INTEGER NULL DEFAULT NULL COMMENT E'', | |
24 | - "active" SMALLINT NOT NULL DEFAULT 0 COMMENT E'', | |
25 | - "comments" SMALLINT NOT NULL DEFAULT 0::smallint COMMENT E'', | |
26 | - "voting" SMALLINT NOT NULL DEFAULT 0::smallint COMMENT E'', | |
27 | - KEY ("author"), | |
28 | - PRIMARY KEY ("id"), | |
29 | - KEY ("parent_id"), | |
30 | - KEY ("category_id"), | |
31 | - KEY ("id") | |
32 | -); | |
33 | - | |
34 | --- Дамп данных таблицы public.article: 3 rows | |
35 | -/*!40000 ALTER TABLE "article" DISABLE KEYS */; | |
36 | -INSERT INTO "article" ("id", "sort", "create_at", "update_at", "code", "category_id", "author", "tags", "parent_id", "active", "comments", "voting") VALUES | |
37 | - (5, 100, E'2015-12-04 14:52:39.54', E'2015-12-04 14:52:39.54', E'test_article', 1, 1, E'test, tag', NULL, 1, 0, 0), | |
38 | - (6, 100, E'2015-12-04 14:52:52.403', E'2015-12-04 14:52:52.403', E'test_article2', 1, 1, E'test, tag', NULL, 1, 0, 0), | |
39 | - (12, 100, E'2015-12-04 14:52:52.403', E'2015-12-04 14:52:52.403', E'test_article3', 1, 1, E'test, tag', 5, 1, 0, 0); | |
40 | -/*!40000 ALTER TABLE "article" ENABLE KEYS */; | |
41 | - | |
42 | - | |
43 | --- Дамп структуры для таблица public.article_category | |
44 | -CREATE TABLE IF NOT EXISTS "article_category" ( | |
45 | - "id" INTEGER NOT NULL DEFAULT nextval('article_category_id_seq'::regclass) COMMENT E'', | |
46 | - "sort" INTEGER NOT NULL DEFAULT 100 COMMENT E'', | |
47 | - "code" CHARACTER VARYING NOT NULL COMMENT E'', | |
48 | - "created_at" TIME WITHOUT TIME ZONE NOT NULL DEFAULT now() COMMENT E'', | |
49 | - "updated_at" TIME WITHOUT TIME ZONE NOT NULL DEFAULT now() COMMENT E'', | |
50 | - "tags" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'', | |
51 | - "parent_id" INTEGER NULL DEFAULT NULL COMMENT E'', | |
52 | - "active" SMALLINT NOT NULL DEFAULT 0 COMMENT E'', | |
53 | - PRIMARY KEY ("id"), | |
54 | - KEY ("parent_id"), | |
55 | - KEY ("id") | |
56 | -); | |
57 | - | |
58 | --- Дамп данных таблицы public.article_category: 2 rows | |
59 | -/*!40000 ALTER TABLE "article_category" DISABLE KEYS */; | |
60 | -INSERT INTO "article_category" ("id", "sort", "code", "created_at", "updated_at", "tags", "parent_id", "active") VALUES | |
61 | - (1, 100, E'static_pages', E'14:08:02.74', E'14:08:02.74', NULL, NULL, 1), | |
62 | - (2, 100, E'qwerty', E'11:00:35.954', E'11:00:35.954', E'qwerty', NULL, 0); | |
63 | -/*!40000 ALTER TABLE "article_category" ENABLE KEYS */; | |
64 | - | |
65 | - | |
66 | --- Дамп структуры для таблица public.article_category_lang | |
67 | -CREATE TABLE IF NOT EXISTS "article_category_lang" ( | |
68 | - "id" INTEGER NOT NULL DEFAULT nextval('article_category_lang_id_seq'::regclass) COMMENT E'', | |
69 | - "lang_id" INTEGER NOT NULL DEFAULT 0 COMMENT E'', | |
70 | - "category_id" INTEGER NULL DEFAULT NULL COMMENT E'', | |
71 | - "text" TEXT NOT NULL COMMENT E'', | |
72 | - "preview" TEXT NULL DEFAULT NULL COMMENT E'', | |
73 | - "seo_url" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'', | |
74 | - "name" CHARACTER VARYING NOT NULL COMMENT E'', | |
75 | - "meta_title" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'', | |
76 | - "meta_descr" TEXT NULL DEFAULT NULL COMMENT E'', | |
77 | - "meta_keywords" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'', | |
78 | - "h1_tag" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'', | |
79 | - "tags" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'', | |
80 | - PRIMARY KEY ("id"), | |
81 | - KEY ("category_id"), | |
82 | - KEY ("lang_id"), | |
83 | - KEY ("id") | |
84 | -); | |
85 | - | |
86 | --- Дамп данных таблицы public.article_category_lang: 3 rows | |
87 | -/*!40000 ALTER TABLE "article_category_lang" DISABLE KEYS */; | |
88 | -INSERT INTO "article_category_lang" ("id", "lang_id", "category_id", "text", "preview", "seo_url", "name", "meta_title", "meta_descr", "meta_keywords", "h1_tag", "tags") VALUES | |
89 | - (1, 0, 1, E'Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem ', E'Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem ', E'lorem', E'Lorem ipsum', E'Lorem title', E'Lorem description', E'lorem, keyword', E'Lorem h1 tag', E'lorem tag'), | |
90 | - (2, 2, 2, E'qwerty', E'qwerty', E'qwerty', E'qwerty', E'qwerty', E'qwerty', E'qwerty', E'qwerty', E'qwerty'), | |
91 | - (3, 1, 2, E'йцукен', E'йцукен', E'йцукен', E'йцукен', E'йцукен', E'йцукен', E'йцукен', E'йцукен', E'йцукен'); | |
92 | -/*!40000 ALTER TABLE "article_category_lang" ENABLE KEYS */; | |
93 | - | |
94 | - | |
95 | --- Дамп структуры для таблица public.article_category_media | |
96 | -CREATE TABLE IF NOT EXISTS "article_category_media" ( | |
97 | - "id" INTEGER NOT NULL DEFAULT nextval('article_category_media_id_seq'::regclass) COMMENT E'', | |
98 | - "category_id" INTEGER NOT NULL COMMENT E'', | |
99 | - "media_id" INTEGER NOT NULL COMMENT E'', | |
100 | - "media_alt" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'', | |
101 | - "media_title" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'', | |
102 | - "media_caption" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'', | |
103 | - "type" CHARACTER VARYING(10) NOT NULL DEFAULT 'additional'::character varying COMMENT E'', | |
104 | - PRIMARY KEY ("id"), | |
105 | - KEY ("media_id"), | |
106 | - KEY ("category_id"), | |
107 | - KEY ("id") | |
108 | -); | |
109 | - | |
110 | --- Дамп данных таблицы public.article_category_media: 0 rows | |
111 | -/*!40000 ALTER TABLE "article_category_media" DISABLE KEYS */; | |
112 | -/*!40000 ALTER TABLE "article_category_media" ENABLE KEYS */; | |
113 | - | |
114 | - | |
115 | --- Дамп структуры для таблица public.article_lang | |
116 | -CREATE TABLE IF NOT EXISTS "article_lang" ( | |
117 | - "id" INTEGER NOT NULL DEFAULT nextval('article_lang_id_seq'::regclass) COMMENT E'', | |
118 | - "lang_id" INTEGER NOT NULL COMMENT E'', | |
119 | - "article_id" INTEGER NOT NULL COMMENT E'', | |
120 | - "text" TEXT NOT NULL COMMENT E'', | |
121 | - "seo_url" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'', | |
122 | - "name" CHARACTER VARYING NOT NULL COMMENT E'', | |
123 | - "preview" TEXT NULL DEFAULT NULL COMMENT E'', | |
124 | - "meta_title" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'', | |
125 | - "meta_descr" TEXT NULL DEFAULT NULL COMMENT E'', | |
126 | - "meta_keywords" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'', | |
127 | - "h1_tag" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'', | |
128 | - "tags" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'', | |
129 | - PRIMARY KEY ("id"), | |
130 | - KEY ("article_id"), | |
131 | - KEY ("lang_id"), | |
132 | - KEY ("id") | |
133 | -); | |
134 | - | |
135 | --- Дамп данных таблицы public.article_lang: 2 rows | |
136 | -/*!40000 ALTER TABLE "article_lang" DISABLE KEYS */; | |
137 | -INSERT INTO "article_lang" ("id", "lang_id", "article_id", "text", "seo_url", "name", "preview", "meta_title", "meta_descr", "meta_keywords", "h1_tag", "tags") VALUES | |
138 | - (1, 0, 5, E'Lorem Lorem Lorem', E'article1', E'artivle1', E'Lorem preview', E'Lorem title', E'Lorem description', E'lorem, keyword', E'lorem h1 tag', E'tag, lorem'), | |
139 | - (2, 0, 12, E'Lorem Lorem Lorem', E'article3', E'artivle3\r\n', E'Lorem preview', E'Lorem title', E'Lorem description', E'lorem, keyword', E'lorem h1 tag', E'tag, lorem'); | |
140 | -/*!40000 ALTER TABLE "article_lang" ENABLE KEYS */; | |
141 | - | |
142 | - | |
143 | --- Дамп структуры для таблица public.article_media | |
144 | -CREATE TABLE IF NOT EXISTS "article_media" ( | |
145 | - "id" INTEGER NOT NULL DEFAULT nextval('article_media_id_seq'::regclass) COMMENT E'', | |
146 | - "article_id" INTEGER NOT NULL COMMENT E'', | |
147 | - "media_id" INTEGER NOT NULL COMMENT E'', | |
148 | - "type" CHARACTER VARYING(10) NOT NULL DEFAULT 'additional'::character varying COMMENT E'', | |
149 | - "media_alt" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'', | |
150 | - "media_title" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'', | |
151 | - "media_caption" CHARACTER VARYING NULL DEFAULT NULL COMMENT E'', | |
152 | - PRIMARY KEY ("id"), | |
153 | - KEY ("media_id"), | |
154 | - KEY ("article_id"), | |
155 | - KEY ("id") | |
156 | -); | |
157 | - | |
158 | --- Дамп данных таблицы public.article_media: 0 rows | |
159 | -/*!40000 ALTER TABLE "article_media" DISABLE KEYS */; | |
160 | -/*!40000 ALTER TABLE "article_media" ENABLE KEYS */; | |
161 | - | |
162 | - | |
163 | --- Дамп структуры для таблица public.media | |
164 | -CREATE TABLE IF NOT EXISTS "media" ( | |
165 | - "id" INTEGER NOT NULL DEFAULT nextval('media_id_seq'::regclass) COMMENT E'', | |
166 | - "hash" CHARACTER VARYING NOT NULL COMMENT E'', | |
167 | - PRIMARY KEY ("id"), | |
168 | - KEY ("id") | |
169 | -); | |
170 | - | |
171 | --- Дамп данных таблицы public.media: 0 rows | |
172 | -/*!40000 ALTER TABLE "media" DISABLE KEYS */; | |
173 | -/*!40000 ALTER TABLE "media" ENABLE KEYS */; | |
174 | - | |
175 | - | |
176 | --- Дамп структуры для таблица public.option | |
177 | -CREATE TABLE IF NOT EXISTS "option" ( | |
178 | - "model" CHARACTER VARYING(200) NULL DEFAULT NULL COMMENT E'', | |
179 | - "option_id" INTEGER NOT NULL DEFAULT nextval('option_option_id_seq'::regclass) COMMENT E'', | |
180 | - "model_id" INTEGER NULL DEFAULT NULL COMMENT E'', | |
181 | - "name" CHARACTER VARYING(200) NULL DEFAULT NULL COMMENT E'', | |
182 | - "template" CHARACTER VARYING(200) NULL DEFAULT NULL COMMENT E'', | |
183 | - "parent_id" INTEGER NULL DEFAULT NULL COMMENT E'', | |
184 | - "translate" BIT(1) NULL DEFAULT NULL COMMENT E'', | |
185 | - "created_at" TIMESTAMP WITHOUT TIME ZONE NULL DEFAULT now() COMMENT E'', | |
186 | - KEY ("option_id"), | |
187 | - KEY ("parent_id"), | |
188 | - PRIMARY KEY ("option_id") | |
189 | -); | |
190 | - | |
191 | --- Дамп данных таблицы public.option: 0 rows | |
192 | -/*!40000 ALTER TABLE "option" DISABLE KEYS */; | |
193 | -/*!40000 ALTER TABLE "option" ENABLE KEYS */; | |
194 | - | |
195 | - | |
196 | --- Дамп структуры для таблица public.option_lang | |
197 | -CREATE TABLE IF NOT EXISTS "option_lang" ( | |
198 | - "primary" INTEGER NOT NULL DEFAULT nextval('option_lang_primary_seq'::regclass) COMMENT E'', | |
199 | - "id" INTEGER NULL DEFAULT NULL COMMENT E'', | |
200 | - "lang_id" INTEGER NULL DEFAULT NULL COMMENT E'', | |
201 | - "value" TEXT NULL DEFAULT NULL COMMENT E'', | |
202 | - KEY ("id"), | |
203 | - PRIMARY KEY ("primary") | |
204 | -); | |
205 | - | |
206 | --- Дамп данных таблицы public.option_lang: 0 rows | |
207 | -/*!40000 ALTER TABLE "option_lang" DISABLE KEYS */; | |
208 | -/*!40000 ALTER TABLE "option_lang" ENABLE KEYS */; | |
209 | -/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */; | |
210 | -/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */; | |
211 | -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; |
db-migration/yarik.zip deleted
No preview for this file type