From 6506d20d80e122a4ea7d38ca389a6efc171b18b6 Mon Sep 17 00:00:00 2001 From: Yarik Date: Fri, 25 Dec 2015 15:10:12 +0200 Subject: [PATCH] Коммит 25.15.2015 Закончен блог, начато меню админки --- backend/views/layouts/header.php | 13 +++++++++++++ backend/views/layouts/left.php | 47 +++++++++++++++++++++++++++++++++++------------ backend/views/site/index.php | 3 +++ backend/web/css/site.css | 35 +++++++++++++++++++++++++++++++++++ backend/web/js/option.js | 5 +++++ common/models/Tools.php | 15 +++++++++++++++ common/modules/blog/controllers/AjaxController.php | 44 ++++++++++++++++++++++++++++++++++++++++++++ common/modules/blog/controllers/ArticleController.php | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------- common/modules/blog/controllers/CategoryController.php | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------- common/modules/blog/models/ArticleMedia.php | 14 +++++++------- common/modules/blog/views/ajax/_article_media_form.php | 17 +++++++++++++++++ common/modules/blog/views/article/_form.php | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------- common/modules/blog/views/category/_form.php | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------- common/modules/blog/views/default/index.php | 6 ++++++ common/widgets/views/multilang-begin.php | 1 + db-migration/artbox_db.backup | Bin 50810 -> 0 bytes db-migration/artbox_db3.backup | Bin 28150 -> 0 bytes db-migration/article_option_migration.backup | Bin 5619 -> 0 bytes db-migration/blog.zip | Bin 1603 -> 0 bytes db-migration/catalog.backup | Bin 19270 -> 0 bytes db-migration/yarik.sql | 211 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- db-migration/yarik.zip | Bin 2098 -> 0 bytes db-migration/yarik/db.zip | Bin 1358 -> 0 bytes frontend/controllers/SiteController.php | 7 ++++++- 24 files changed, 461 insertions(+), 399 deletions(-) create mode 100644 common/modules/blog/views/ajax/_article_media_form.php delete mode 100644 db-migration/artbox_db.backup delete mode 100644 db-migration/artbox_db3.backup delete mode 100644 db-migration/article_option_migration.backup delete mode 100644 db-migration/blog.zip delete mode 100644 db-migration/catalog.backup delete mode 100644 db-migration/yarik.sql delete mode 100644 db-migration/yarik.zip delete mode 100644 db-migration/yarik/db.zip diff --git a/backend/views/layouts/header.php b/backend/views/layouts/header.php index 9149654..8b3e9db 100644 --- a/backend/views/layouts/header.php +++ b/backend/views/layouts/header.php @@ -23,6 +23,19 @@ $username = Yii::$app->user->identity->firstname.' '.Yii::$app->user->identity-> + */ ?> - - - - + ['class' => 'sidebar-menu'], + 'items' => \backend\models\AdminMenu::buildMenu(), + ]) ?> + ['class' => 'sidebar-menu'], @@ -87,6 +108,8 @@ ], ] ) ?> + */ + ?> diff --git a/backend/views/site/index.php b/backend/views/site/index.php index b41973e..50858ce 100644 --- a/backend/views/site/index.php +++ b/backend/views/site/index.php @@ -2,6 +2,9 @@ /* @var $this yii\web\View */ +use backend\models\AdminMenu; +use yii\helpers\Url; + $this->title = 'My Yii Application'; ?>
diff --git a/backend/web/css/site.css b/backend/web/css/site.css index 698be70..18332a2 100644 --- a/backend/web/css/site.css +++ b/backend/web/css/site.css @@ -89,3 +89,38 @@ a.desc:after { padding: 10px 20px; margin: 0 0 15px 0; } +.header-search { + width: 200px; +} +.skin-blue .sidebar-form { + margin: 5px !important; +} +.checkboxer .list-group-item { + padding: 0; +} +.checkboxer .list-group-item:hover { + background: #ddd; +} +.checkboxer .list-group-item.active, .checkboxer .list-group-item.active:hover { + background: #00a65a; +} +.checkboxer .list-group-item.active label, .checkboxer .list-group-item.active:hover label { + color: white; +} +.checkboxer .list-group-item.level0 { + padding-left: 15px; +} +.checkboxer .list-group-item.level1 { + padding-left: 45px; +} +.checkboxer .list-group-item.level2 { + padding-left: 75px; +} +.checkboxer .checkboxer_label { + padding: 10px 0; + display: block; +} +.checkboxer .checkboxer_label input[type=radio] { + position: absolute; + clip: rect(0,0,0,0); +} \ No newline at end of file diff --git a/backend/web/js/option.js b/backend/web/js/option.js index 5a9b0ec..8086cd7 100644 --- a/backend/web/js/option.js +++ b/backend/web/js/option.js @@ -89,4 +89,9 @@ $(function() { } return false; }); + $(document).on('change', '.checkboxer .checkboxer_label input[type=radio]', function() { + console.log($(this).val()); + $(this).parents('.checkboxer').find('.checkboxer_container').removeClass('active'); + $(this).parents('.checkboxer_container').addClass('active'); + }); }); \ No newline at end of file diff --git a/common/models/Tools.php b/common/models/Tools.php index 2a1bac2..77cc03e 100644 --- a/common/models/Tools.php +++ b/common/models/Tools.php @@ -98,4 +98,19 @@ class Tools return $url; } + + static function parseUrlParams($params) + { + $params = preg_split('/,\s*/', $params, -1, PREG_SPLIT_NO_EMPTY); + $result = []; + if($params) { + foreach($params as $param) { + $param = preg_split('/\s*=\s*/', $param); + if(!empty($param[0]) && !empty($param[1])) { + $result[$param[0]] = $param[1]; + } + } + } + return $result; + } } \ No newline at end of file diff --git a/common/modules/blog/controllers/AjaxController.php b/common/modules/blog/controllers/AjaxController.php index 327cade..c906621 100644 --- a/common/modules/blog/controllers/AjaxController.php +++ b/common/modules/blog/controllers/AjaxController.php @@ -7,6 +7,7 @@ use common\modules\blog\models\ArticleCategoryLang; use common\modules\blog\models\ArticleCategoryMedia; use common\modules\blog\models\ArticleLang; use common\modules\blog\models\ArticleMedia; +use yii\base\InvalidParamException; use yii\web\Controller; use yii\web\ForbiddenHttpException; use yii\web\NotFoundHttpException; @@ -46,6 +47,32 @@ class AjaxController extends Controller return $this->renderAjax('_article_form', ['model' => $model, 'article_lang' => $article_lang, 'widget_id' => $widget_id]); } + public function actionArticleMediaForm($lang_id, $widget_id, $type) + { + $model = Language::find()->where(['>=', 'language_id', 1])->andWhere(['active' => 1, 'language_id' => $lang_id])->one(); + if(!$model) { + throw new NotFoundHttpException('Language not found'); + } + if(!in_array($type, ['full', 'preview'])) { + throw new InvalidParamException('Type must only be full/preview'); + } + $article_lang = new ArticleMedia(); + return $this->renderAjax('_article_media_form', ['model' => $model, 'article_lang' => $article_lang, 'widget_id' => $widget_id, 'type' => $type]); + } + + public function actionArticleCategoryMediaForm($lang_id, $widget_id, $type) + { + $model = Language::find()->where(['>=', 'language_id', 1])->andWhere(['active' => 1, 'language_id' => $lang_id])->one(); + if(!$model) { + throw new NotFoundHttpException('Language not found'); + } + if(!in_array($type, ['full', 'preview'])) { + throw new InvalidParamException('Type must only be full/preview'); + } + $article_lang = new ArticleCategoryMedia(); + return $this->renderAjax('_article_media_form', ['model' => $model, 'article_lang' => $article_lang, 'widget_id' => $widget_id, 'type' => $type]); + } + public function actionRemoveImage() { $post = \Yii::$app->request->post(); @@ -63,6 +90,23 @@ class AjaxController extends Controller } } + public function actionRemoveCategoryImage() + { + $post = \Yii::$app->request->post(); + if(!empty($post['category_media_id'])) { + $category_media = ArticleCategoryMedia::findOne($post['category_media_id']); + if($post['remove_media']) { + $media = $category_media->media->delete(); + } + if(!empty($category_media)) { + $category_media->delete(); + } + return true; + } else { + return false; + } + } + public function actionRemoveImageCategory() { $post = \Yii::$app->request->post(); diff --git a/common/modules/blog/controllers/ArticleController.php b/common/modules/blog/controllers/ArticleController.php index 445070e..38ee671 100644 --- a/common/modules/blog/controllers/ArticleController.php +++ b/common/modules/blog/controllers/ArticleController.php @@ -28,28 +28,31 @@ class ArticleController extends Controller { $article_langs = array(); $article = new Article(); + $default_lang = Language::getDefaultLang(); $images = array(); - $images['full'] = new ArticleMedia(['scenario' => ArticleMedia::SCENARIO_FULL]); - $images['preview'] = new ArticleMedia(['scenario' => ArticleMedia::SCENARIO_PREVIEW]); - $images['additional'] = new ArticleMedia(['scenario' => ArticleMedia::SCENARIO_ADDITIONAL]); + $images[$default_lang->language_id]['full'] = new ArticleMedia(['scenario' => ArticleMedia::SCENARIO_FULL]); + $images[$default_lang->language_id]['preview'] = new ArticleMedia(['scenario' => ArticleMedia::SCENARIO_PREVIEW]); + $images[0]['additional'] = new ArticleMedia(['scenario' => ArticleMedia::SCENARIO_ADDITIONAL]); $article->loadDefaultValues(); $langs = Language::getActiveLanguages(); - $default_lang = Language::getDefaultLang(); $isValid = false; if(!empty(\Yii::$app->request->post())) { $isValid = true; $article->load(\Yii::$app->request->post()); $article->author = \Yii::$app->user->getId(); $isValid = $article->validate(); - foreach($images as $index => $value) { - $images[$index]->type = $index; - if($index == 'additional') { - $images[$index]->imageFile = UploadedFile::getInstances($images[$index], "[{$index}]imageFile"); - } else { - $images[$index]->imageFile = UploadedFile::getInstance($images[$index], "[{$index}]imageFile"); + foreach(\Yii::$app->request->post()['ArticleMedia'] as $lang => $value) { + foreach($value as $type => $fields) { + $images[$lang][$type] = new ArticleMedia(['scenario' => $type]); + $images[$lang][$type]->type = $type; + $images[$lang][$type]->lang_id = $lang; + $images[$lang][$type]->imageFile = UploadedFile::getInstance($images[$lang][$type], "[{$lang}][{$type}]imageFile"); + $isValid = $images[$lang][$type]->validate(['imageFile']) && $isValid; } - $isValid = $images[$index]->validate(['imageFile']) && $isValid; } + $images[0]['additional']->lang_id = 0; + $images[0]['additional']->type = 'additional'; + $images[0]['additional']->imageFile = UploadedFile::getInstances($images[0]['additional'], "[0][additional]imageFile"); if(empty(\Yii::$app->request->post()['ArticleLang'])) { $article_langs[$default_lang->language_id] = new ArticleLang(); $isValid = ArticleLang::validateMultiple($article_langs) && $isValid; @@ -74,9 +77,21 @@ class ArticleController extends Controller } } $first = 1; - foreach($images as $index => $image) { - $images[$index]->upload($article->id); + foreach($images as $lang => $value) { + foreach($value as $type => $fields) { + $images[$lang][$type]->upload($article->id); + if($first && $type != 'additional') { + $media_clone = clone $images[$lang][$type]; + $media_clone->setIsNewRecord(true); + unset($media_clone->id); + $media_clone->lang_id = 0; + $media_clone->upload($article->id); + unset($media_clone); + $first = 0; + } + } } + $first = 1; foreach($article_langs as $article_lang) { if($first) { $article_lang_clone = clone $article_lang; @@ -102,22 +117,22 @@ class ArticleController extends Controller public function actionUpdate($id) { $article = Article::findOne($id); - $images = $article->getArticleMedia()->indexBy('type')->all(); - if(!array_key_exists('full', $images)) { - $images['full'] = new ArticleMedia(); - } - if(!array_key_exists('preview', $images)) { - $images['preview'] = new ArticleMedia(); - } - foreach($images as $index => $image) { - $images[$index]->scenario = $index; + $imagestack = $article->getArticleMedia()->all(); + $images = []; + $images[0]['additional'][0] = new ArticleMedia(['scenario' => ArticleMedia::SCENARIO_ADDITIONAL]); + $images[0]['additional'][0]->type = 'additional'; + $images[0]['additional'][0]->lang_id = 0; + foreach($imagestack as $image) { + if(in_array($image->type, ['full', 'preview'])) { + $images[$image->lang_id][$image->type] = $image; + $images[$image->lang_id][$image->type]->scenario = $image->type; + } else { + $images[$image->lang_id][$image->type][$image->id] = $image; + $images[$image->lang_id][$image->type][$image->id]->scenario = $image->type; + } } - $images['additional'] = array( - 0 => new ArticleMedia(['scenario' => ArticleMedia::SCENARIO_ADDITIONAL]) - ); - $images['additional'] = array_merge($images['additional'], $article->getArticleMedia()->andWhere(['type' => 'additional'])->indexBy('id')->all()); - foreach($images['additional'] as $index => $image) { - $images['additional'][$index]->scenario = 'additional'; + foreach($images as $lang => $value) { + $images[$lang]['additional'][0] = new ArticleMedia(['scenario' => ArticleMedia::SCENARIO_ADDITIONAL]); } $article_langs = $article->getArticleLangs()->where(['>=', 'lang_id', '1'])->indexBy('lang_id')->all(); $langs = Language::getActiveLanguages(); @@ -136,15 +151,18 @@ class ArticleController extends Controller } } $isValid = $article->validate(); - foreach($images as $index => $value) { - if($index == 'additional') { - $images[$index][0]->type = $index; - $images[$index][0]->imageFile = UploadedFile::getInstances($images[$index][0], "[{$index}]imageFile"); - $isValid = $images[$index][0]->validate(['imageFile']) && $isValid; - } else { - $images[$index]->type = $index; - $images[$index]->imageFile = UploadedFile::getInstance($images[$index], "[{$index}]imageFile"); - $isValid = $images[$index]->validate(['imageFile']) && $isValid; + $images[0]['additional'][0]->type = 'additional'; + $images[0]['additional'][0]->lang_id = 0; + $images[0]['additional'][0]->imageFile = UploadedFile::getInstances($images[0]['additional'][0], "[0][additional]imageFile"); + $isValid = $images[0]['additional'][0]->validate(['imageFile']) && $isValid; + foreach(\Yii::$app->request->post()['ArticleMedia'] as $lang => $value) { + foreach($value as $type => $fields) { + if(!in_array($type, ['full', 'preview'])) continue; + $images[$lang][$type] = new ArticleMedia(['scenario' => $type]); + $images[$lang][$type]->lang_id = $lang; + $images[$lang][$type]->type = $type; + $images[$lang][$type]->imageFile = UploadedFile::getInstance($images[$lang][$type], "[{$lang}][{$type}]imageFile"); + $isValid = $images[$lang][$type]->validate(['imageFile']) && $isValid; } } if(empty(\Yii::$app->request->post()['ArticleLang'])) { @@ -162,12 +180,14 @@ class ArticleController extends Controller } if($isValid) { $article->save(false); - foreach($images as $index => $image) { - if($index == 'additional') { - $images[$index][0]->upload($article->id); - } else { - if(!empty($images[$index]->imageFile)) { - $images[$index]->replace($article->id, true); + foreach($images as $lang => $value) { + foreach($value as $type => $fields) { + if($type == 'additional') { + $images[$lang][$type][0]->upload($article->id); + } else { + if(!empty($images[$lang][$type]->imageFile)) { + $images[$lang][$type]->replace($article->id); + } } } } diff --git a/common/modules/blog/controllers/CategoryController.php b/common/modules/blog/controllers/CategoryController.php index d4edd82..eeff9b2 100644 --- a/common/modules/blog/controllers/CategoryController.php +++ b/common/modules/blog/controllers/CategoryController.php @@ -42,27 +42,30 @@ class CategoryController extends Controller { $category_langs = array(); $category = new ArticleCategory(); + $default_lang = Language::getDefaultLang(); $images = array(); - $images['full'] = new ArticleCategoryMedia(['scenario' => ArticleCategoryMedia::SCENARIO_FULL]); - $images['preview'] = new ArticleCategoryMedia(['scenario' => ArticleCategoryMedia::SCENARIO_PREVIEW]); - $images['additional'] = new ArticleCategoryMedia(['scenario' => ArticleCategoryMedia::SCENARIO_ADDITIONAL]); + $images[$default_lang->language_id]['full'] = new ArticleCategoryMedia(['scenario' => ArticleCategoryMedia::SCENARIO_FULL]); + $images[$default_lang->language_id]['preview'] = new ArticleCategoryMedia(['scenario' => ArticleCategoryMedia::SCENARIO_PREVIEW]); + $images[0]['additional'] = new ArticleCategoryMedia(['scenario' => ArticleCategoryMedia::SCENARIO_ADDITIONAL]); $category->loadDefaultValues(); $langs = Language::getActiveLanguages(); - $default_lang = Language::getDefaultLang(); $isValid = false; - foreach($images as $index => $value) { - $images[$index]->type = $index; - if($index == 'additional') { - $images[$index]->imageFile = UploadedFile::getInstances($images[$index], "[{$index}]imageFile"); - } else { - $images[$index]->imageFile = UploadedFile::getInstance($images[$index], "[{$index}]imageFile"); - } - $isValid = $images[$index]->validate(['imageFile']) && $isValid; - } if(!empty(\Yii::$app->request->post())) { $isValid = true; $category->load(\Yii::$app->request->post()); $isValid = $category->validate(); + foreach(\Yii::$app->request->post()['ArticleCategoryMedia'] as $lang => $value) { + foreach($value as $type => $fields) { + $images[$lang][$type] = new ArticleCategoryMedia(['scenario' => $type]); + $images[$lang][$type]->type = $type; + $images[$lang][$type]->lang_id = $lang; + $images[$lang][$type]->imageFile = UploadedFile::getInstance($images[$lang][$type], "[{$lang}][{$type}]imageFile"); + $isValid = $images[$lang][$type]->validate(['imageFile']) && $isValid; + } + } + $images[0]['additional']->lang_id = 0; + $images[0]['additional']->type = 'additional'; + $images[0]['additional']->imageFile = UploadedFile::getInstances($images[0]['additional'], "[0][additional]imageFile"); if(empty(\Yii::$app->request->post()['ArticleCategoryLang'])) { $category_langs[$default_lang->language_id] = new ArticleCategoryLang(); $isValid = ArticleCategoryLang::validateMultiple($category_langs) && $isValid; @@ -79,9 +82,21 @@ class CategoryController extends Controller if($isValid) { $category->save(false); $first = 1; - foreach($images as $index => $image) { - $images[$index]->upload($category->id); + foreach($images as $lang => $value) { + foreach($value as $type => $fields) { + $images[$lang][$type]->upload($category->id); + if($first && $type != 'additional') { + $media_clone = clone $images[$lang][$type]; + $media_clone->setIsNewRecord(true); + unset($media_clone->id); + $media_clone->lang_id = 0; + $media_clone->upload($category->id); + unset($media_clone); + $first = 0; + } + } } + $first = 1; foreach($category_langs as $category_lang) { if($first) { $category_lang_clone = clone $category_lang; @@ -107,22 +122,22 @@ class CategoryController extends Controller public function actionUpdate($id) { $category = ArticleCategory::findOne($id); - $images = $category->getArticleCategoryMedia()->indexBy('type')->all(); - if(!array_key_exists('full', $images)) { - $images['full'] = new ArticleCategoryMedia(); - } - if(!array_key_exists('preview', $images)) { - $images['preview'] = new ArticleCategoryMedia(); - } - foreach($images as $index => $image) { - $images[$index]->scenario = $index; + $imagestack = $category->getArticleCategoryMedia()->all(); + $images = []; + $images[0]['additional'][0] = new ArticleCategoryMedia(['scenario' => ArticleCategoryMedia::SCENARIO_ADDITIONAL]); + $images[0]['additional'][0]->type = 'additional'; + $images[0]['additional'][0]->lang_id = 0; + foreach($imagestack as $image) { + if(in_array($image->type, ['full', 'preview'])) { + $images[$image->lang_id][$image->type] = $image; + $images[$image->lang_id][$image->type]->scenario = $image->type; + } else { + $images[$image->lang_id][$image->type][$image->id] = $image; + $images[$image->lang_id][$image->type][$image->id]->scenario = $image->type; + } } - $images['additional'] = array( - 0 => new ArticleCategoryMedia(['scenario' => ArticleCategoryMedia::SCENARIO_ADDITIONAL]) - ); - $images['additional'] = array_merge($images['additional'], $category->getArticleCategoryMedia()->andWhere(['type' => 'additional'])->indexBy('id')->all()); - foreach($images['additional'] as $index => $image) { - $images['additional'][$index]->scenario = 'additional'; + foreach($images as $lang => $value) { + $images[$lang]['additional'][0] = new ArticleCategoryMedia(['scenario' => ArticleCategoryMedia::SCENARIO_ADDITIONAL]); } $category_langs = $category->getArticleCategoryLangs()->where(['>=', 'lang_id', '1'])->indexBy('lang_id')->all(); $langs = Language::getActiveLanguages(); @@ -132,15 +147,18 @@ class CategoryController extends Controller $isValid = true; $category->load(\Yii::$app->request->post()); $isValid = $category->validate(); - foreach($images as $index => $value) { - if($index == 'additional') { - $images[$index][0]->type = $index; - $images[$index][0]->imageFile = UploadedFile::getInstances($images[$index][0], "[{$index}]imageFile"); - $isValid = $images[$index][0]->validate(['imageFile']) && $isValid; - } else { - $images[$index]->type = $index; - $images[$index]->imageFile = UploadedFile::getInstance($images[$index], "[{$index}]imageFile"); - $isValid = $images[$index]->validate(['imageFile']) && $isValid; + $images[0]['additional'][0]->type = 'additional'; + $images[0]['additional'][0]->lang_id = 0; + $images[0]['additional'][0]->imageFile = UploadedFile::getInstances($images[0]['additional'][0], "[0][additional]imageFile"); + $isValid = $images[0]['additional'][0]->validate(['imageFile']) && $isValid; + foreach(\Yii::$app->request->post()['ArticleCategoryMedia'] as $lang => $value) { + foreach($value as $type => $fields) { + if(!in_array($type, ['full', 'preview'])) continue; + $images[$lang][$type] = new ArticleCategoryMedia(['scenario' => $type]); + $images[$lang][$type]->lang_id = $lang; + $images[$lang][$type]->type = $type; + $images[$lang][$type]->imageFile = UploadedFile::getInstance($images[$lang][$type], "[{$lang}][{$type}]imageFile"); + $isValid = $images[$lang][$type]->validate(['imageFile']) && $isValid; } } if(empty(\Yii::$app->request->post()['ArticleCategoryLang'])) { @@ -158,12 +176,14 @@ class CategoryController extends Controller } if($isValid) { $category->save(false); - foreach($images as $index => $image) { - if($index == 'additional') { - $images[$index][0]->upload($category->id); - } else { - if(!empty($images[$index]->imageFile)) { - $images[$index]->replace($category->id, true); + foreach($images as $lang => $value) { + foreach($value as $type => $fields) { + if($type == 'additional') { + $images[$lang][$type][0]->upload($category->id); + } else { + if(!empty($images[$lang][$type]->imageFile)) { + $images[$lang][$type]->replace($category->id); + } } } } diff --git a/common/modules/blog/models/ArticleMedia.php b/common/modules/blog/models/ArticleMedia.php index 386f107..23cebd7 100644 --- a/common/modules/blog/models/ArticleMedia.php +++ b/common/modules/blog/models/ArticleMedia.php @@ -37,9 +37,9 @@ class ArticleMedia extends \yii\db\ActiveRecord public function scenarios() { $scenarios = parent::scenarios(); - $scenarios[self::SCENARIO_FULL] = ['id', 'article_id', 'media_id', 'type', 'media_alt', 'media_title', 'media_caption', 'imageFile']; - $scenarios[self::SCENARIO_PREVIEW] = ['id', 'article_id', 'media_id', 'type', 'media_alt', 'media_title', 'media_caption', 'imageFile']; - $scenarios[self::SCENARIO_ADDITIONAL] = ['id', 'article_id', 'media_id', 'type', 'imageFile']; + $scenarios[self::SCENARIO_FULL] = ['id', 'article_id', 'media_id', 'type', 'media_alt', 'media_title', 'media_caption', 'imageFile', 'lang_id']; + $scenarios[self::SCENARIO_PREVIEW] = ['id', 'article_id', 'media_id', 'type', 'media_alt', 'media_title', 'media_caption', 'imageFile', 'lang_id']; + $scenarios[self::SCENARIO_ADDITIONAL] = ['id', 'article_id', 'media_id', 'type', 'imageFile', 'lang_id']; return $scenarios; } @@ -50,7 +50,7 @@ class ArticleMedia extends \yii\db\ActiveRecord { return [ [['article_id', 'media_id'], 'required'], - [['article_id', 'media_id'], 'integer'], + [['article_id', 'media_id', 'lang_id'], 'integer'], [['media_alt', 'media_title', 'media_caption'], 'string'], [['type'], 'string', 'max' => 10], [['imageFile'], 'file', 'extensions' => 'png, gif, jpg, jpeg', 'skipOnEmpty' => true, 'on' => self::SCENARIO_FULL], @@ -119,8 +119,8 @@ class ArticleMedia extends \yii\db\ActiveRecord public function replace($article_id, $removeMedia = false) { $this->article_id = $article_id; - if($removeMedia) { - $article_media = ArticleMedia::find()->select('media_id')->where(['article_id' => $this->article_id, 'type' => $this->type])->column(); + if($removeMedia && !$this->getIsNewRecord()) { + $article_media = ArticleMedia::find()->select('media_id')->where(['article_id' => $this->article_id, 'type' => $this->type, 'lang_id' => $this->lang_id])->column(); $media = array(); foreach($article_media as $media_id) { $media[] = Media::findOne(['id' => $media_id]); @@ -147,7 +147,7 @@ class ArticleMedia extends \yii\db\ActiveRecord } return $ok; } elseif(!empty($this->imageFile)) { - ArticleMedia::deleteAll(['article_id' => $this->article_id, 'type' => $this->type]); + ArticleMedia::deleteAll(['article_id' => $this->article_id, 'type' => $this->type, 'lang_id' => $this->lang_id]); $media = new Media(); $media->imageFile = $this->imageFile; $media->upload(); diff --git a/common/modules/blog/views/ajax/_article_media_form.php b/common/modules/blog/views/ajax/_article_media_form.php new file mode 100644 index 0000000..973659d --- /dev/null +++ b/common/modules/blog/views/ajax/_article_media_form.php @@ -0,0 +1,17 @@ + +
+ + $article_lang, 'attribute' => "[$model->language_id][$type]lang_id"]))->label(false)->hiddenInput(['value' => $model->language_id]) ?> + + $article_lang, 'attribute' => "[$model->language_id][$type]imageFile"]))->fileInput(['class' => 'image_inputs_field']) ?> + +
+end(); +?> diff --git a/common/modules/blog/views/article/_form.php b/common/modules/blog/views/article/_form.php index 8e2d776..5cd3980 100644 --- a/common/modules/blog/views/article/_form.php +++ b/common/modules/blog/views/article/_form.php @@ -1,5 +1,6 @@ field($article, 'active')->checkbox() ?>
- $image) { +
+ Url::to(['/blog/ajax/article-media-form?type=full']), + 'form' => $form, + 'data_langs' => $article->getIsNewRecord()?$images:ArticleMedia::find()->where(['article_id' => $article->id, 'type' => 'full'])->indexBy('lang_id')->all() + ]); + $first = 1; + foreach($images as $lang => $value) { + if(!array_key_exists('full', $value)) continue; + ?> +
+ field($images[$lang]['full'], "[{$lang}][full]lang_id")->label(false)->hiddenInput(['value' => $lang]); + echo $form->field($images[$lang]['full'], "[{$lang}][full]imageFile")->fileInput(['class' => 'image_inputs_field']); + if(!empty($images[$lang]['full']->id)) { + echo "media->hash}/original.{$images[$lang]['full']->media->extension}' width='100' class='image_inputs_prev'>"; + } + ?> +
+ end(); ?> -
- field(is_array($image)?$images[$index][0]:$images[$index], "[{$index}]imageFile[]")->fileInput(['multiple' => 'multiple', 'class' => 'image_inputs_field']); - if(is_array($image) && count($image) > 1) { - foreach($image as $oneindex => $oneimage) { - if($oneindex) { - ?> - - +
+ Url::to(['/blog/ajax/article-media-form?type=preview']), + 'form' => $form, + 'data_langs' => $article->getIsNewRecord()?$images:ArticleMedia::find()->where(['article_id' => $article->id, 'type' => 'preview'])->indexBy('lang_id')->all() + ]); + $first = 1; + foreach($images as $lang => $value) { + if(!array_key_exists('preview', $value)) continue; + ?> +
+ field($images[$lang]['preview'], "[{$lang}][preview]lang_id")->label(false)->hiddenInput(['value' => $lang]); + echo $form->field($images[$lang]['preview'], "[{$lang}][preview]imageFile")->fileInput(['class' => 'image_inputs_field']); + if(!empty($images[$lang]['preview']->id)) { + echo "media->hash}/original.{$images[$lang]['preview']->media->extension}' width='100' class='image_inputs_prev'>"; } - } else { - echo $form->field($images[$index], "[{$index}]imageFile")->fileInput(['class' => 'image_inputs_field']); - if(!empty($image->id)) { - echo ""; + ?> +
+ end(); + ?> +
+
+ field(is_array($images[0]['additional'])?$images[0]['additional'][0]:$images[0]['additional'], "[0][additional]imageFile[]")->fileInput(['multiple' => 'multiple', 'class' => 'image_inputs_field']); + if(is_array($images[0]['additional']) && count($images[0]['additional']) > 1) { + foreach($images[0]['additional'] as $onefield => $oneimage) { + if($onefield) { + ?> + + -
- + } + ?> +

diff --git a/common/modules/blog/views/category/_form.php b/common/modules/blog/views/category/_form.php index 1248c8b..3885801 100644 --- a/common/modules/blog/views/category/_form.php +++ b/common/modules/blog/views/category/_form.php @@ -1,4 +1,5 @@ field($category, 'active')->checkbox() ?>
- $image) { +
+ Url::to(['/blog/ajax/article-category-media-form?type=full']), + 'form' => $form, + 'data_langs' => $category->getIsNewRecord()?$images:ArticleCategoryMedia::find()->where(['category_id' => $category->id, 'type' => 'full'])->indexBy('lang_id')->all() + ]); + $first = 1; + foreach($images as $lang => $value) { + if(!array_key_exists('full', $value)) continue; + ?> +
+ field($images[$lang]['full'], "[{$lang}][full]lang_id")->label(false)->hiddenInput(['value' => $lang]); + echo $form->field($images[$lang]['full'], "[{$lang}][full]imageFile")->fileInput(['class' => 'image_inputs_field']); + if(!empty($images[$lang]['full']->id)) { + echo "media->hash}/original.{$images[$lang]['full']->media->extension}' width='100' class='image_inputs_prev'>"; + } + ?> +
+ end(); ?> -
- field(is_array($image)?$images[$index][0]:$images[$index], "[{$index}]imageFile[]")->fileInput(['multiple' => 'multiple', 'class' => 'image_inputs_field']); - if(is_array($image) && count($image) > 1) { - foreach($image as $oneindex => $oneimage) { - if($oneindex) { - ?> - - +
+ Url::to(['/blog/ajax/article-category-media-form?type=preview']), + 'form' => $form, + 'data_langs' => $category->getIsNewRecord()?$images:ArticleCategoryMedia::find()->where(['category_id' => $category->id, 'type' => 'preview'])->indexBy('lang_id')->all() + ]); + $first = 1; + foreach($images as $lang => $value) { + if(!array_key_exists('preview', $value)) continue; + ?> +
+ field($images[$lang]['preview'], "[{$lang}][preview]lang_id")->label(false)->hiddenInput(['value' => $lang]); + echo $form->field($images[$lang]['preview'], "[{$lang}][preview]imageFile")->fileInput(['class' => 'image_inputs_field']); + if(!empty($images[$lang]['preview']->id)) { + echo "media->hash}/original.{$images[$lang]['preview']->media->extension}' width='100' class='image_inputs_prev'>"; } - } else { - echo $form->field($images[$index], "[{$index}]imageFile")->fileInput(['class' => 'image_inputs_field']); - if(!empty($image->id)) { - echo ""; + ?> +
+ end(); + ?> +
+
+ field(is_array($images[0]['additional'])?$images[0]['additional'][0]:$images[0]['additional'], "[0][additional]imageFile[]")->fileInput(['multiple' => 'multiple', 'class' => 'image_inputs_field']); + if(is_array($images[0]['additional']) && count($images[0]['additional']) > 1) { + foreach($images[0]['additional'] as $onefield => $oneimage) { + if($onefield) { + ?> + + -
- + } + ?> +

diff --git a/common/modules/blog/views/default/index.php b/common/modules/blog/views/default/index.php index b3d9bbc..17d1a81 100644 --- a/common/modules/blog/views/default/index.php +++ b/common/modules/blog/views/default/index.php @@ -1 +1,7 @@ value); \ No newline at end of file diff --git a/common/widgets/views/multilang-begin.php b/common/widgets/views/multilang-begin.php index dd098f4..277af58 100644 --- a/common/widgets/views/multilang-begin.php +++ b/common/widgets/views/multilang-begin.php @@ -18,6 +18,7 @@ use yii\helpers\Url; $data_lang) { + if(!$index) continue; ?>
  • [ 'class' => AccessControl::className(), - 'only' => ['logout', 'signup'], + 'only' => ['logout', 'signup', 'index'], 'rules' => [ [ 'actions' => ['signup'], @@ -48,6 +48,11 @@ class SiteController extends Controller 'allow' => true, 'roles' => ['@'], ], + [ + 'actions' => ['index'], + 'allow' => true, + 'roles' => ['@'], + ] ], ], 'verbs' => [ -- libgit2 0.21.4