?> " class="btn btn-primary"><?php echo Yii::t('frontend', 'Next Step'); ?> </a> <?php } ?> </div> <!--// Form Buttons--> <?php //get migrated category ids $migrated_category_ids = isset(Yii::app()->session['migrated_category_ids']) ? Yii::app()->session['migrated_category_ids'] : array(); //get all root categories from magento1 $rootCategories = Mage1CatalogCategoryEntity::model()->findAll("level = 1"); ?> <ul class="list-group"> <li class="list-group-item"> <h3 class="list-group-item-heading"> <?php echo Yii::t('frontend', 'Total Categories'); ?> (<?php echo sizeof($categories); ?> ) </h3> <h4> <?php
/** * Build tree categories function * @param int $parent_id * @return array */ public static function getMage1CategoryTree($parent_id = 1) { $categories = array(); $models = Mage1CatalogCategoryEntity::model()->findAll("parent_id = {$parent_id}"); if ($models) { foreach ($models as $model) { $category = array(); $category['entity_id'] = $model->entity_id; $category['name'] = self::getMage1CategoryName($model->entity_id); $category['parent_id'] = $model->parent_id; $category['children'] = self::getMage1CategoryTree($category['entity_id']); $categories[$model->entity_id] = (object) $category; } } return $categories; }
/** * Migrate Categories */ public function actionStep4() { $step = MigrateSteps::model()->find("sorder = 4"); $result = MigrateSteps::checkStep($step->sorder); if ($result['allowed']) { //variables to log $migrated_category_ids = array(); //get migrated store_ids from session $migrated_store_ids = isset(Yii::app()->session['migrated_store_ids']) ? Yii::app()->session['migrated_store_ids'] : array(); //get all categories from magento1 with level > 0 $categories = Mage1CatalogCategoryEntity::model()->findAll("level > 0"); if (Yii::app()->request->isPostRequest && $step->status == MigrateSteps::STATUS_NOT_DONE) { //uncheck foreign key Yii::app()->mage2->createCommand("SET FOREIGN_KEY_CHECKS=0")->execute(); //get all categories from magento1 $categories = Mage1CatalogCategoryEntity::model()->findAll(); /* * Get black list attribute ids * We do not migrate bellow attributes */ $entity_type_id = MigrateSteps::getMage1EntityTypeId(MigrateSteps::CATEGORY_TYPE_CODE); $checkList = array(MigrateSteps::getMage1AttributeId('display_mode', $entity_type_id) => 'PRODUCTS', MigrateSteps::getMage1AttributeId('landing_page', $entity_type_id) => '', MigrateSteps::getMage1AttributeId('custom_design', $entity_type_id) => '', MigrateSteps::getMage1AttributeId('custom_design_from', $entity_type_id) => null, MigrateSteps::getMage1AttributeId('custom_design_to', $entity_type_id) => null, MigrateSteps::getMage1AttributeId('page_layout', $entity_type_id) => '', MigrateSteps::getMage1AttributeId('custom_layout_update', $entity_type_id) => '', MigrateSteps::getMage1AttributeId('custom_apply_to_products', $entity_type_id) => 1, MigrateSteps::getMage1AttributeId('custom_use_parent_settings', $entity_type_id) => 1); $keyCheckList = array_keys($checkList); //handle selected category ids $category_ids = Yii::app()->request->getPost('category_ids', array()); //catalog_category_entity // if has selected category to migrate if ($category_ids) { if ($categories) { foreach ($categories as $category) { if (in_array($category->entity_id, $category_ids)) { $condition = "entity_id = {$category->entity_id}"; $category2 = Mage2CatalogCategoryEntity::model()->find($condition); if (!$category2) { $category2 = new Mage2CatalogCategoryEntity(); $category2->entity_id = $category->entity_id; $category2->attribute_set_id = MigrateSteps::getMage2AttributeSetId($category->attribute_set_id, MigrateSteps::CATEGORY_TYPE_CODE); $category2->parent_id = $category->parent_id; $category2->created_at = $category->created_at; $category2->updated_at = $category->updated_at; } $category2->path = $category->path; $category2->position = $category->position; $category2->level = $category->level; $category2->children_count = $category->children_count; //update or save if ($category2->save()) { //update to log $migrated_category_ids[] = $category->entity_id; //catalog_category_entity_datetime $condition = "entity_id = {$category->entity_id}"; if ($migrated_store_ids) { $str_store_ids = implode(',', $migrated_store_ids); $condition .= " AND store_id IN ({$str_store_ids})"; } $models = Mage1CatalogCategoryEntityDatetime::model()->findAll($condition); if ($models) { foreach ($models as $model) { //note: we have to get correct attribute_id & store_id migrated $store_id2 = MigrateSteps::getMage2StoreId($model->store_id); $attribute_id2 = MigrateSteps::getMage2AttributeId($model->attribute_id, 3); if ($attribute_id2) { $condition = "entity_id= {$model->entity_id} AND attribute_id = {$attribute_id2} AND store_id = {$store_id2}"; $model2 = Mage2CatalogCategoryEntityDatetime::model()->find($condition); if (!$model2) { $model2 = new Mage2CatalogCategoryEntityDatetime(); $model2->attribute_id = $attribute_id2; $model2->store_id = $store_id2; $model2->entity_id = $model->entity_id; //note: we need check and fixed for some attributes if (in_array($model->attribute_id, $keyCheckList)) { $model2->value = $checkList[$model->attribute_id]; } else { $model2->value = $model->value; } $model2->save(); } } } } //catalog_category_entity_decimal $condition = "entity_id = {$category->entity_id}"; if ($migrated_store_ids) { $str_store_ids = implode(',', $migrated_store_ids); $condition .= " AND store_id IN ({$str_store_ids})"; } $models = Mage1CatalogCategoryEntityDecimal::model()->findAll($condition); if ($models) { foreach ($models as $model) { //we have to get correct attribute_id & store_id migrated $store_id2 = MigrateSteps::getMage2StoreId($model->store_id); $attribute_id2 = MigrateSteps::getMage2AttributeId($model->attribute_id, 3); if ($attribute_id2) { $condition = "entity_id= {$model->entity_id} AND attribute_id = {$attribute_id2} AND store_id = {$store_id2}"; $model2 = Mage2CatalogCategoryEntityDecimal::model()->find($condition); if (!$model2) { $model2 = new Mage2CatalogCategoryEntityDecimal(); $model2->attribute_id = $attribute_id2; $model2->store_id = $store_id2; $model2->entity_id = $model->entity_id; //we need check and fixed for some attributes if (in_array($model->attribute_id, $keyCheckList)) { $model2->value = $checkList[$model->attribute_id]; } else { $model2->value = $model->value; } $model2->save(); } } } } //catalog_category_entity_int $condition = "entity_id = {$category->entity_id}"; if ($migrated_store_ids) { $str_store_ids = implode(',', $migrated_store_ids); $condition .= " AND store_id IN ({$str_store_ids})"; } $models = Mage1CatalogCategoryEntityInt::model()->findAll($condition); if ($models) { foreach ($models as $model) { //we have to get correct attribute_id & store_id migrated $store_id2 = MigrateSteps::getMage2StoreId($model->store_id); $attribute_id2 = MigrateSteps::getMage2AttributeId($model->attribute_id, 3); if ($attribute_id2) { $condition = "entity_id= {$model->entity_id} AND attribute_id = {$attribute_id2} AND store_id = {$store_id2}"; $model2 = Mage2CatalogCategoryEntityInt::model()->find($condition); if (!$model2) { $model2 = new Mage2CatalogCategoryEntityInt(); $model2->attribute_id = $attribute_id2; $model2->store_id = $store_id2; $model2->entity_id = $model->entity_id; //note: we need check and fixed for some attributes if (in_array($model->attribute_id, $keyCheckList)) { $model2->value = $checkList[$model->attribute_id]; } else { $model2->value = $model->value; } $model2->save(); } } } } //catalog_category_entity_text $condition = "entity_id = {$category->entity_id}"; if ($migrated_store_ids) { $str_store_ids = implode(',', $migrated_store_ids); $condition .= " AND store_id IN ({$str_store_ids})"; } $models = Mage1CatalogCategoryEntityText::model()->findAll($condition); if ($models) { foreach ($models as $model) { //note: we have to get correct attribute_id & store_id migrated $store_id2 = MigrateSteps::getMage2StoreId($model->store_id); $attribute_id2 = MigrateSteps::getMage2AttributeId($model->attribute_id, 3); if ($attribute_id2) { $condition = "entity_id= {$model->entity_id} AND attribute_id = {$attribute_id2} AND store_id = {$store_id2}"; $model2 = Mage2CatalogCategoryEntityText::model()->find($condition); if (!$model2) { $model2 = new Mage2CatalogCategoryEntityText(); $model2->attribute_id = $attribute_id2; $model2->store_id = $store_id2; $model2->entity_id = $model->entity_id; //we need check and fixed for some attributes if (in_array($model->attribute_id, $keyCheckList)) { $model2->value = $checkList[$model->attribute_id]; } else { $model2->value = $model->value; } $model2->save(); } } } } //catalog_category_entity_varchar $condition = "entity_id = {$category->entity_id}"; if ($migrated_store_ids) { $str_store_ids = implode(',', $migrated_store_ids); $condition .= " AND store_id IN ({$str_store_ids})"; } $models = Mage1CatalogCategoryEntityVarchar::model()->findAll($condition); if ($models) { foreach ($models as $model) { //note: we have to get correct attribute_id & store_id migrated $store_id2 = MigrateSteps::getMage2StoreId($model->store_id); $attribute_id2 = MigrateSteps::getMage2AttributeId($model->attribute_id, 3); if ($attribute_id2) { $condition = "entity_id= {$model->entity_id} AND attribute_id = {$attribute_id2} AND store_id = {$store_id2}"; $model2 = Mage2CatalogCategoryEntityVarchar::model()->find($condition); if (!$model2) { $model2 = new Mage2CatalogCategoryEntityVarchar(); $model2->attribute_id = $attribute_id2; $model2->store_id = $store_id2; $model2->entity_id = $model->entity_id; //we need check and fixed for some attributes if (in_array($model->attribute_id, $keyCheckList)) { $model2->value = $checkList[$model->attribute_id]; } else { $model2->value = $model->value; } $model2->save(); } } } } //url_rewrite for category $condition = "category_id = {$category->entity_id} AND product_id IS NULL"; if ($migrated_store_ids) { $str_store_ids = implode(',', $migrated_store_ids); $condition .= " AND store_id IN ({$str_store_ids})"; } $urls = Mage1UrlRewrite::model()->findAll($condition); if ($urls) { foreach ($urls as $url) { $store_id2 = MigrateSteps::getMage2StoreId($url->store_id); $condition = "store_id = {$store_id2} AND entity_id = {$url->category_id} AND entity_type = 'category'"; $url2 = Mage2UrlRewrite::model()->find($condition); if (!$url2) { $url2 = new Mage2UrlRewrite(); $url2->entity_type = 'category'; $url2->entity_id = $url->category_id; $url2->request_path = $url->request_path; $url2->target_path = $url->target_path; $url2->redirect_type = 0; $url2->store_id = $store_id2; $url2->description = $url->description; $url2->is_autogenerated = $url->is_system; $url2->metadata = null; $url2->save(); } } } } // end save a category } } } } else { Yii::app()->user->setFlash('note', Yii::t('frontend', 'You have to select at least one Category to migrate.')); } //Update step status if ($migrated_category_ids) { $step->status = MigrateSteps::STATUS_DONE; $step->migrated_data = json_encode(array('category_ids' => $migrated_category_ids)); if ($step->update()) { //update session Yii::app()->session['migrated_category_ids'] = $migrated_category_ids; //check foreign key Yii::app()->mage2->createCommand("SET FOREIGN_KEY_CHECKS=1")->execute(); $message = "Migrated successfully. Total Categories migrated: %s1"; $message = Yii::t('frontend', $message, array('%s1' => sizeof($migrated_category_ids))); Yii::app()->user->setFlash('success', $message); } } } else { if ($step->status == MigrateSteps::STATUS_DONE) { Yii::app()->user->setFlash('note', Yii::t('frontend', "This step was finished. If you want to update data of this step, the first you have to click to 'Reset' button.")); } } $assign_data = array('step' => $step, 'categories' => $categories); $this->render("step{$step->sorder}", $assign_data); } else { Yii::app()->user->setFlash('note', Yii::t('frontend', "The first you need to finish the %s.", array("%s" => ucfirst($result['back_step'])))); $this->redirect(array($result['back_step'])); } }