public function getTranslation($languageId = null)
 {
     /* @var $modelClass ActiveRecordInterface */
     /* @var $language ActiveRecordInterface */
     /* @var $translation ActiveRecordInterface */
     $modelClass = $this->translationClass;
     if (!empty($languageId)) {
         $language = Language::findOne($languageId);
         if ($language) {
             $translation = $modelClass::findOne(['language_id' => $language->getPrimaryKey(), $this->relationColumn => $this->owner->getPrimaryKey()]);
             return $translation;
         }
     }
     $language = Language::findOne(['lang_id' => Yii::$app->language]);
     // try to find translation on current language
     $translation = $modelClass::findOne(['language_id' => $language->getPrimaryKey(), $this->relationColumn => $this->owner->getPrimaryKey()]);
     if (!$translation) {
         // get default language
         $language = Language::findOne(['default' => true]);
         // try to find translation on default language
         $translation = $modelClass::findOne(['language_id' => $language->getPrimaryKey(), $this->relationColumn => $this->owner->getPrimaryKey()]);
         if (!$translation) {
             // find any translation
             $translation = $modelClass::findOne([$this->relationColumn => $this->owner->getPrimaryKey()]);
         }
     }
     return $translation;
 }
 /**
  * Creates a new DeliveryMethod model.
  * If creation is successful, the browser will be redirected to the 'view' page.
  * @param integer $id
  * @param integer $languageId
  * @return mixed
  * @throws NotFoundHttpException
  * @throws BadRequestHttpException
  */
 public function actionSave($id = null, $languageId)
 {
     if (!empty($languageId)) {
         if (!empty($id)) {
             $model = $this->findModel($id);
             if (empty($model)) {
                 throw new NotFoundHttpException();
             }
             $modelTranslation = $this->findModelTranslation($id, $languageId);
             if (empty($modelTranslation)) {
                 $modelTranslation = new ProductAvailabilityTranslation();
             }
         } else {
             $model = new ProductAvailability();
             $modelTranslation = new ProductAvailabilityTranslation();
         }
     } else {
         throw new BadRequestHttpException();
     }
     if ($modelTranslation->load(Yii::$app->request->post())) {
         $model->save(false);
         $modelTranslation->availability_id = $model->id;
         $modelTranslation->language_id = $languageId;
         if ($modelTranslation->validate()) {
             $modelTranslation->save();
             return $this->redirect(['save', 'id' => $model->id, 'languageId' => $languageId]);
         }
     }
     return $this->render('save', ['model' => $model, 'modelTranslation' => $modelTranslation, 'languages' => Language::find()->all(), 'selectedLanguage' => Language::findOne($languageId)]);
 }
예제 #3
0
 public function actionSave($id = null, $languageId = null)
 {
     $selectedLanguage = Language::findOne($languageId);
     if (!empty($id)) {
         $country = ProductCountry::find()->where(['id' => $id])->one();
         $countryTranslation = ProductCountryTranslation::find()->where(['country_id' => $id, 'language_id' => $languageId])->one();
         if (empty($countryTranslation)) {
             $countryTranslation = new ProductCountryTranslation();
         }
     } else {
         $country = new ProductCountry();
         $countryTranslation = new ProductCountryTranslation();
     }
     if (\Yii::$app->request->isPost) {
         $country->load(\Yii::$app->request->post());
         $countryTranslation->load(\Yii::$app->request->post());
         if ($countryTranslation->validate()) {
             $country->save();
             $countryTranslation->country_id = $country->id;
             $countryTranslation->language_id = $selectedLanguage->id;
             $countryTranslation->save();
             return $this->redirect(Url::toRoute('/shop/country'));
         }
     }
     return $this->render('save', ['country' => $country, 'countryTranslation' => $countryTranslation, 'languages' => Language::findAll(['active' => true]), 'selectedLanguage' => $selectedLanguage]);
 }
 public function actionSave($languageId = null, $categoryId = null)
 {
     if (!empty($categoryId)) {
         $category = Category::findOne($categoryId);
         $category_translation = CategoryTranslation::find()->where(['category_id' => $categoryId, 'language_id' => $languageId])->one();
         if (empty($category_translation)) {
             $category_translation = new CategoryTranslation();
         }
     } else {
         $category = new Category();
         $category_translation = new CategoryTranslation();
     }
     if (Yii::$app->request->isPost) {
         $category->load(Yii::$app->request->post());
         $category_translation->load(Yii::$app->request->post());
         if ($category->validate() && $category_translation->validate()) {
             $category->save();
             $category_translation->category_id = $category->id;
             $category_translation->language_id = $languageId;
             $category_translation->save();
             Yii::$app->getSession()->setFlash('success', 'Data were successfully modified.');
             return $this->redirect(Url::toRoute('/articles/category'));
         } else {
             Yii::$app->getSession()->setFlash('danger', 'Failed to change the record.');
         }
     }
     return $this->render('edit', ['category' => $category, 'category_translation' => $category_translation, 'categories' => Category::find()->with('translations')->all(), 'selectedLanguage' => Language::findOne($languageId), 'languages' => Language::findAll(['active' => true])]);
 }
 public function actionAddBasic($articleId, $languageId)
 {
     if (!empty($articleId)) {
         $article = Article::findOne($articleId);
         $article_translation = ArticleTranslation::find()->where(['article_id' => $articleId, 'language_id' => $languageId])->one();
         if (empty($article_translation)) {
             $article_translation = new ArticleTranslation();
         }
     } else {
         $article = new Article();
         $article_translation = new ArticleTranslation();
     }
     if (Yii::$app->request->isPost) {
         $article->load(Yii::$app->request->post());
         $article_translation->load(Yii::$app->request->post());
         if ($article->validate() && $article_translation->validate()) {
             $article->save();
             $article_translation->article_id = $article->id;
             $article_translation->language_id = $languageId;
             $article_translation->save();
             Yii::$app->getSession()->setFlash('success', 'Data were successfully modified.');
         } else {
             Yii::$app->getSession()->setFlash('danger', 'Failed to change the record.');
         }
     }
     if (\Yii::$app->request->isPjax) {
         return $this->renderPartial('add-basic', ['article' => $article, 'article_translation' => $article_translation, 'categories' => Category::find()->with('translations')->all(), 'selectedLanguage' => Language::findOne($languageId), 'languages' => Language::findAll(['active' => true])]);
     } else {
         return $this->render('save', ['article' => $article, 'languageId' => $languageId, 'viewName' => 'add-basic', 'params' => ['article' => $article, 'article_translation' => $article_translation, 'categories' => Category::find()->with('translations')->all(), 'selectedLanguage' => Language::findOne($languageId), 'languages' => Language::findAll(['active' => true])]]);
     }
 }
 public function actionEdit($categoryId = null, $languageId = null)
 {
     if (Yii::$app->request->isPost) {
         $source_message = SourceMessage::find()->where(['id' => Yii::$app->request->post("SourceMessage")['id']])->one();
         $message_language = Yii::$app->request->post("Message");
         $source_message->load(Yii::$app->request->post());
         $source_message->save();
         if (!empty($message_language['language'])) {
             $message = Message::find()->where(['id' => $source_message->id, 'language' => $message_language['language']])->one();
             if (empty($message)) {
                 $message = new Message();
             }
             $message->load(Yii::$app->request->post());
             $message->id = $source_message->id;
             $message->save();
         }
         return $this->redirect(Url::toRoute(['/translation/message', 'categoryId' => $source_message->id, 'languageId' => Language::find()->where(['lang_id' => $message->language])->one()->id]));
     } else {
         $language = Language::findOne($languageId);
         $category = SourceMessage::find()->where(['id' => $categoryId])->one();
         if ($language->lang_id != Yii::$app->sourceLanguage) {
             $message = Message::find()->where(['id' => $category->id, 'language' => $language->lang_id])->one();
             if (empty($message)) {
                 $message = new Message();
             }
             return $this->render('source-message/edit', ['source_message' => $category, 'message' => $message, 'categories' => SourceMessage::find()->all(), 'languages' => Language::find()->all(), 'language' => $language]);
         } else {
             return $this->render('message/edit', ['model' => $category, 'language' => $language]);
         }
     }
 }
예제 #7
0
 public static function findOrDefault($languageId)
 {
     if (empty($languageId) || !($language = Language::findOne($languageId))) {
         $language = Language::find()->where(['lang_id' => \Yii::$app->sourceLanguage])->one();
     }
     return $language;
 }
예제 #8
0
 public function run($id = null, $langId = null)
 {
     /* @var GalleryImage $image */
     /* @var GalleryImageTranslation $imageTranslation */
     $language = $langId == null ? Language::getDefault() : Language::findOne($langId);
     if (empty($id)) {
         $image = new GalleryImage();
         $image->show = true;
         $imageTranslation = new GalleryImageTranslation();
     } else {
         $image = GalleryImage::findOne($id);
         if (empty($image)) {
             return $this->controller->redirect('/gallery/album/list');
         }
         $imageTranslation = $image->getTranslation($language->id);
         if (empty($imageTranslation)) {
             $imageTranslation = new GalleryImageTranslation();
         }
     }
     if (Yii::$app->request->isPost) {
         $post = Yii::$app->request->post();
         if ($image->load($post) && $imageTranslation->load($post)) {
             $image->image_file = UploadedFile::getInstance($image, 'image_file');
             if (!empty($image->image_file)) {
                 try {
                     // save image
                     $fileName = $this->generateFileName($image->image_file->baseName);
                     //                        die(\Imagick::getVersion());
                     $imagine = new Imagine();
                     $imagine->open($image->image_file->tempName)->save(Yii::getAlias($this->controller->module->imagesPath . '/' . $fileName . '-original.jpg'))->thumbnail(new Box(400, 400), ImageInterface::THUMBNAIL_OUTBOUND)->save(Yii::getAlias($this->controller->module->imagesPath . '/' . $fileName . '-thumb.jpg'));
                     $image->file_name = $fileName;
                 } catch (\Exception $ex) {
                     $image->addError('image_file', 'File save failed');
                 }
             }
             if ($image->validate() && $imageTranslation->validate()) {
                 $image->save();
                 $imageTranslation->image_id = $image->id;
                 $imageTranslation->language_id = $language->id;
                 $imageTranslation->save();
                 $this->controller->redirect(['edit', 'id' => $image->id, 'langId' => $language->id]);
             }
         }
     }
     return $this->controller->render('create-edit', ['image' => $image, 'imageTranslation' => $imageTranslation, 'currentLanguage' => $language]);
 }
 public function actionSwitchShow()
 {
     $id = \Yii::$app->request->get();
     if (!empty($id) && isset($id)) {
         $item = Language::findOne($id);
         if ($item) {
             $show = $item->show;
             if ($show == 1) {
                 $show = 0;
             } else {
                 $show = 1;
             }
             $item->show = $show;
             $item->save();
         } else {
             return $this->render('/site/error', ['message' => 'Error', 'errors' => 'Language is not found']);
         }
     }
     $this->redirect(['/languages']);
 }
 /**
  * @param string $page_key
  * @param integer $languageId
  * @return mixed
  * @throws BadRequestHttpException
  * @throws BadRequestHttpException
  */
 public function actionSavePage($page_key = null, $languageId = null)
 {
     $selected_language = !empty($languageId) ? Language::findOne($languageId) : Language::findOne(['lang_id' => Yii::$app->language]);
     if (!empty($selected_language)) {
         if (!empty($page_key)) {
             $static_page = StaticPage::findOne($page_key);
             if (!empty($static_page)) {
                 $static_page_translation = StaticPageTranslation::find()->where(['page_key' => $page_key, 'language_id' => $selected_language->id])->one();
                 if (empty($static_page_translation)) {
                     $static_page_translation = new StaticPageTranslation();
                     $static_page_translation->page_key = $static_page->key;
                 }
             } else {
                 throw new BadRequestHttpException('Such static page doesn\'t exist. You can\'t add translation.');
             }
         } else {
             $static_page = new StaticPage();
             $static_page_translation = new StaticPageTranslation();
         }
         if (Yii::$app->request->isPost) {
             if ($static_page_translation->load(Yii::$app->request->post())) {
                 if (empty($static_page->key)) {
                     $static_page->key = $static_page_translation->page_key;
                     if ($static_page->validate()) {
                         $static_page->save();
                     } else {
                         throw new BadRequestHttpException('Sorry, such static page already exist.');
                     }
                 }
                 $static_page_translation->language_id = $selected_language->id;
                 $static_page_translation->save();
             }
         }
         return $this->render('save-page', ['static_page' => $static_page, 'static_page_translation' => $static_page_translation, 'staticPage' => StaticPage::find()->all(), 'selectedLanguage' => $selected_language, 'languages' => Language::findAll(['active' => true])]);
     } else {
         throw new BadRequestHttpException('You can\'t add this static page translation, because such language doesn\'t exist');
     }
 }
예제 #11
0
 /**
  * Creates a URL according to the given route and parameters.
  * @param UrlManager $manager the URL manager
  * @param string $route the route. It should not have slashes at the beginning or the end.
  * @param array $params the parameters
  * @return string|boolean the created URL, or false if this rule cannot be used for creating this URL.
  */
 public function createUrl($manager, $route, $params)
 {
     $pathInfo = '';
     if ($route == $this->categoryRoute && empty($params['id'])) {
         $pathInfo = $this->prefix;
     } else {
         if (($route == $this->productRoute || $route == $this->categoryRoute) && !empty($params['id'])) {
             $id = $params['id'];
             $parentId = null;
             $language = Language::findOne(['lang_id' => $manager->language]);
             if ($route == $this->productRoute) {
                 $product = Product::findOne($id);
                 if (empty($product)) {
                     return false;
                 }
                 if ($product->getTranslation($language->id) && $product->getTranslation($language->id)->seoUrl) {
                     $pathInfo = $product->getTranslation($language->id)->seoUrl;
                     $parentId = $product->category_id;
                 } else {
                     return false;
                 }
             } else {
                 if ($route == $this->categoryRoute) {
                     $category = Category::findOne($id);
                     if ($category->getTranslation($language->id) && $category->getTranslation($language->id)->seoUrl) {
                         $pathInfo = $category->getTranslation($language->id)->seoUrl;
                         $parentId = $category->parent_id;
                     } else {
                         return false;
                     }
                 }
             }
             while ($parentId != null) {
                 $category = Category::findOne($parentId);
                 if ($category->getTranslation($language->id) && $category->getTranslation($language->id)->seoUrl) {
                     $pathInfo = $category->getTranslation($language->id)->seoUrl . '/' . $pathInfo;
                     $parentId = $category->parent_id;
                 } else {
                     return false;
                 }
             }
             if (!empty($this->prefix)) {
                 $pathInfo = $this->prefix . '/' . $pathInfo;
             }
             unset($params['id']);
         } else {
             return false;
         }
     }
     return $pathInfo . '?' . http_build_query($params);
 }
예제 #12
0
 /**
  * Creates a URL according to the given route and parameters.
  * @param UrlManager $manager the URL manager
  * @param string $route the route. It should not have slashes at the beginning or the end.
  * @param array $params the parameters
  * @return string|boolean the created URL, or false if this rule cannot be used for creating this URL.
  */
 public function createUrl($manager, $route, $params)
 {
     if (($route == $this->articleRoute || $route == $this->categoryRoute) && !empty($params['id'])) {
         $id = $params['id'];
         $pathInfo = '';
         $parentId = null;
         $language = Language::findOne(['lang_id' => $manager->language]);
         if ($route == $this->articleRoute) {
             $article = Article::findOne($id);
             if ($article->getTranslation($language->id) && $article->getTranslation($language->id)->seoUrl) {
                 $pathInfo = $article->getTranslation($language->id)->seoUrl;
                 $parentId = $article->category_id;
             } else {
                 return false;
             }
         } else {
             if ($route == $this->categoryRoute) {
                 $category = Category::findOne($id);
                 if ($category->getTranslation($language->id) && $category->getTranslation($language->id)->seoUrl) {
                     $pathInfo = $category->getTranslation($language->id)->seoUrl;
                     $parentId = $category->parent_id;
                 } else {
                     return false;
                 }
             }
         }
         while ($parentId != null) {
             $category = Category::findOne($parentId);
             if ($category->getTranslation($language->id) && $category->getTranslation($language->id)->seoUrl) {
                 $pathInfo = $category->getTranslation($language->id)->seoUrl . '/' . $pathInfo;
                 $parentId = $category->parent_id;
             } else {
                 return false;
             }
         }
         if (!empty($this->prefix)) {
             $pathInfo = $this->prefix . $pathInfo;
         }
         return $pathInfo;
     }
     return false;
 }
예제 #13
0
 /**
  * @param integer $attrId
  * @param integer $languageId
  * @return mixed
  * @throws Exception
  */
 public function actionAddValue($attrId, $languageId)
 {
     if (!empty($attrId)) {
         $languageId = empty($languageId) ? Language::getCurrent()->id : $languageId;
         $model = new ShopAttributeValue();
         $modelTranslation = new ShopAttributeValueTranslation();
         $attributeTextureModel = new AttributeTextureForm();
         if (Yii::$app->request->post()) {
             if ($modelTranslation->load(Yii::$app->request->post())) {
                 $model->attribute_id = $attrId;
                 if (ShopAttribute::findOne($attrId)->type_id == 3 || ShopAttribute::findOne($attrId)->type_id == 4) {
                     $colorTexture = new ShopAttributeValueColorTexture();
                     if (ShopAttribute::findOne($attrId)->type_id == 3) {
                         if ($attributeTextureModel->load(Yii::$app->request->post())) {
                             $colorTexture->color = $attributeTextureModel->color;
                         }
                     } elseif (ShopAttribute::findOne($attrId)->type_id == 4) {
                         if ($attributeTextureModel->load(Yii::$app->request->post())) {
                             $attributeTextureModel->imageFile = UploadedFile::getInstance($attributeTextureModel, 'imageFile');
                             $colorTexture->texture = $attributeTextureModel->upload();
                         }
                     }
                     $colorTexture->save();
                     $modelTranslation->value = $colorTexture->id;
                 }
                 if ($model->save()) {
                     $modelTranslation->value_id = $model->id;
                     $modelTranslation->language_id = $languageId;
                     if ($modelTranslation->save()) {
                         if (\Yii::$app->request->isPjax) {
                             $searchAttributeValueModel = new SearchAttributeValue();
                             $dataProviderAttributeValue = $searchAttributeValueModel->search(Yii::$app->request->queryParams);
                             return $this->renderPartial('add-value', ['dataProvider' => $dataProviderAttributeValue, 'attribute' => ShopAttribute::findOne($attrId), 'selectedLanguage' => Language::findOne($languageId), 'valueModel' => new ShopAttributeValue(), 'valueModelTranslation' => new ShopAttributeValueTranslation(), 'attributeTextureModel' => $attributeTextureModel]);
                         } else {
                             return $this->redirect(Url::toRoute(['save', 'attrId' => $attrId, 'languageId' => $languageId]));
                         }
                     }
                 } else {
                     throw new Exception($model->errors);
                 }
             }
         } else {
             return $this->render(Url::toRoute(['add-value', 'attrId' => $attrId, 'languageId' => $languageId]));
         }
     }
 }
 public function run()
 {
     $languages = Language::findAll(['active' => true]);
     $current = Language::findOne(['lang_id' => Yii::$app->language]);
     return $this->render('list', ['current' => $current, 'languages' => $languages]);
 }
예제 #15
0
 /**
  * Selects product filters for category
  *
  * @param integer $id
  * @param integer $languageId
  * @param integer $categoryId
  * @return mixed
  * @throws Exception
  * @throws ForbiddenHttpException
  */
 public function actionSelectFilters($id = null, $languageId = null, $categoryId = null)
 {
     if (!empty($categoryId)) {
         $category = Category::findOne($categoryId);
         $filters = Filter::find()->where(['category_id' => $category->id])->all();
         $filter = !empty($id) ? Filter::findOne($id) : new Filter();
     } else {
         throw new Exception('You can not add filter before saving category.');
     }
     if (Yii::$app->request->isPost) {
         $filter->load(Yii::$app->request->post());
         if ($filter->validate()) {
             $filter->category_id = $category->id;
             $filter->save();
             Yii::$app->getSession()->setFlash('success', 'Data were successfully modified.');
             return $this->redirect(Yii::$app->request->referrer);
         }
     }
     return $this->render('save', ['category' => $category, 'languageId' => $languageId, 'selectedLanguage' => Language::findOne($languageId), 'languages' => Language::findAll(['active' => true]), 'viewName' => 'select-filters', 'params' => ['category' => $category, 'filters' => $filters, 'newFilter' => new Filter(), 'languageId' => $languageId]]);
 }
예제 #16
0
 /**
  * Users which have 'updateOwnProduct' permission can add price only for Product models that have been created by their.
  * Users which have 'updateProduct' permission can add price for all Product models.
  *
  * @param integer $id
  * @param integer $languageId
  * @return mixed
  * @throws ForbiddenHttpException
  */
 public function actionAddPrice($id, $languageId)
 {
     if (\Yii::$app->user->can('updateProduct', ['productOwner' => Product::findOne($id)->owner])) {
         $price = new ProductPrice();
         $priceTranslation = new ProductPriceTranslation();
         $product = Product::findOne($id);
         $selectedLanguage = Language::findOne($languageId);
         if (\Yii::$app->request->isPost) {
             $post = \Yii::$app->request->post();
             if ($price->load($post) && $priceTranslation->load($post)) {
                 $price->product_id = $product->id;
                 if ($price->save()) {
                     $priceTranslation->price_id = $price->id;
                     $priceTranslation->language_id = $selectedLanguage->id;
                     if ($priceTranslation->save()) {
                         $price = new ProductPrice();
                         $priceTranslation = new ProductPriceTranslation();
                     }
                 }
             }
         }
         if (Yii::$app->request->isPjax) {
             return $this->renderPartial('add-price', ['priceList' => $product->prices, 'priceModel' => $price, 'priceTranslationModel' => $priceTranslation, 'product' => $product, 'languages' => Language::findAll(['active' => true]), 'language' => $selectedLanguage]);
         }
         return $this->render('save', ['viewName' => 'add-price', 'selectedLanguage' => Language::findOne($languageId), 'product' => $product, 'languages' => Language::find()->all(), 'params' => ['priceList' => $product->prices, 'priceModel' => $price, 'priceTranslationModel' => $priceTranslation, 'product' => $product, 'languages' => Language::findAll(['active' => true]), 'language' => $selectedLanguage]]);
     } else {
         throw new ForbiddenHttpException(\Yii::t('shop', 'You have not permission to do this action.'));
     }
 }
예제 #17
0
 /**
  * Creates a URL according to the given route and parameters.
  * @param UrlManager $manager the URL manager
  * @param string $route the route. It should not have slashes at the beginning or the end.
  * @param array $params the parameters
  * @return string|boolean the created URL, or false if this rule cannot be used for creating this URL.
  */
 public function createUrl($manager, $route, $params)
 {
     if ($route == $this->albumsRoute) {
         if (empty($params['id'])) {
             return $this->prefix;
         } else {
             $id = $params['id'];
             $language = Language::findOne(['lang_id' => $manager->language]);
             $album = GalleryAlbum::findOne($id);
             if ($album) {
                 $translation = $album->getTranslation($language->id);
                 if (!empty($translation)) {
                     if (!empty($translation->seoUrl)) {
                         return $this->prefix . '/' . $translation->seoUrl;
                     }
                 }
             }
         }
     }
     return false;
 }