Exemplo n.º 1
0
 private function _migrateProduct($data)
 {
     // Check for product_name.
     if (!empty($data->product_name)) {
         $isNew = false;
         if (!empty($data->product_id)) {
             if ((int) $data->product_id) {
                 $data['product_id'] = 0;
                 $isNew = true;
             }
         }
         JTable::addIncludePath(JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_tienda' . DS . 'tables');
         $product = JTable::getInstance('Products', 'TiendaTable');
         if (!$isNew) {
             if (!$product->load($data['product_id'])) {
                 $isNew = true;
                 $data['product_id'] = 0;
             }
         }
         // If is a new product, use product->create()
         if ($isNew) {
             $product->product_price = 0;
             $product->product_quantity = 0;
             $product->bind($this->simpleXml2Array($data));
             if ($product->product_full_image) {
                 Tienda::load('TiendaFile', 'library.file');
                 // Do the same cleaning to the image title that the image helper does
                 $name = explode('.', $product->product_full_image);
                 $name = TiendaFile::cleanTitle($name[0]) . '.' . $name[count($name) - 1];
                 $product->product_full_image = $name;
             }
             $product->create();
             $this->_migrateAttributes($product->product_id, $data->product_attributes);
             $this->_migrateCategories($product->product_id, $data->product_categories);
             $this->_migrateFiles($product->product_id, $data->product_files);
             $this->_migrateImages($product->product_id, $data->product_images);
             $this->_migrateChildren($product->product_id, $data->product_children);
             $this->_migrateRelated($product->product_id, $data->related_products);
             $this->_migrateCustomFields($product->product_id, $data->product_custom_fields);
         } else {
             $product->bind($this->simpleXml2Array($data));
             //check if normal price exists
             Tienda::load("TiendaHelperProduct", 'helpers.product');
             $prices = TiendaHelperProduct::getPrices($product->product_id);
             $quantities = TiendaHelperProduct::getProductQuantities($product->product_id);
             if ($product->save()) {
                 $product->product_id = $product->id;
                 // New price?
                 if (empty($prices)) {
                     // set price if new or no prices set
                     $price = JTable::getInstance('Productprices', 'TiendaTable');
                     $price->product_id = $product->id;
                     $price->product_price = (string) $data->product_price;
                     $price->group_id = Tienda::getInstance()->get('default_user_group', '1');
                     $price->save();
                 } else {
                     // set price if new or no prices set
                     $price = JTable::getInstance('Productprices', 'TiendaTable');
                     $price->load($prices[0]->product_price_id);
                     $price->product_price = (string) $data->product_price;
                     $price->group_id = Tienda::getInstance()->get('default_user_group', '1');
                     $price->save();
                 }
                 // New quantity?
                 if (empty($quantities)) {
                     // save default quantity
                     $quantity = JTable::getInstance('Productquantities', 'TiendaTable');
                     $quantity->product_id = $product->id;
                     $quantity->quantity = (string) $data->product_quantity;
                     $quantity->save();
                 } else {
                     // save default quantity
                     $quantity = JTable::getInstance('Productquantities', 'TiendaTable');
                     $quantity->load($quantities[0]->productquantity_id);
                     $quantity->product_id = $product->id;
                     $quantity->quantity = (string) $data->product_quantity;
                     $quantity->save();
                 }
             }
         }
         return $product;
     }
     return null;
 }
Exemplo n.º 2
0
 /**
  * Do the migration
  *
  * @return array
  */
 function _migrate($datas)
 {
     $queries = array();
     $results = array();
     $n = 0;
     // Loop though the rows
     foreach ($datas as $data) {
         // Check for product_name. Explode() could have generated an empty row
         if (!empty($data['product_name'])) {
             $isNew = false;
             if (!$data['product_id']) {
                 $data['product_id'] = 0;
                 $isNew = true;
             }
             JTable::addIncludePath(JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_tienda' . DS . 'tables');
             $product = JTable::getInstance('Products', 'TiendaTable');
             if (!$isNew) {
                 if (!$product->load($data['product_id'])) {
                     $isNew = true;
                     $data['product_id'] = 0;
                 }
             }
             // If is a new product, use product->create()
             if ($isNew) {
                 $product->product_price = 0;
                 $product->product_quantity = 0;
                 $product->bind($data);
                 if ($product->product_full_image) {
                     Tienda::load('TiendaFile', 'library.file');
                     // Do the same cleaning to the image title that the image helper does
                     $name = explode('.', $product->product_full_image);
                     $name = TiendaFile::cleanTitle($name[0]) . '.' . $name[count($name) - 1];
                     $product->product_full_image = $name;
                 }
                 $product->create();
                 $this->_migrateAttributes($product->product_id, $data['product_attributes']);
             } else {
                 $product->bind($data);
                 //check if normal price exists
                 Tienda::load("TiendaHelperProduct", 'helpers.product');
                 $prices = TiendaHelperProduct::getPrices($product->product_id);
                 $quantities = TiendaHelperProduct::getProductQuantities($product->product_id);
                 if ($product->save()) {
                     $product->product_id = $product->id;
                     // New price?
                     if (empty($prices)) {
                         // set price if new or no prices set
                         $price = JTable::getInstance('Productprices', 'TiendaTable');
                         $price->product_id = $product->id;
                         $price->product_price = $data['product_price'];
                         $price->group_id = Tienda::getInstance()->get('default_user_group', '1');
                         $price->save();
                     } else {
                         // set price if new or no prices set
                         $price = JTable::getInstance('Productprices', 'TiendaTable');
                         $price->load($prices[0]->product_price_id);
                         $price->product_price = $data['product_price'];
                         $price->group_id = Tienda::getInstance()->get('default_user_group', '1');
                         $price->save();
                     }
                     // New quantity?
                     if (empty($quantities)) {
                         // save default quantity
                         $quantity = JTable::getInstance('Productquantities', 'TiendaTable');
                         $quantity->product_id = $product->id;
                         $quantity->quantity = $data['product_quantity'];
                         $quantity->save();
                     } else {
                         // save default quantity
                         $quantity = JTable::getInstance('Productquantities', 'TiendaTable');
                         $quantity->load($quantities[0]->productquantity_id);
                         $quantity->product_id = $product->id;
                         $quantity->quantity = $data['product_quantity'];
                         $quantity->save();
                     }
                 }
             }
             // at this point, the product is saved, so now do additional relationships
             // such as categories
             if (!empty($product->product_id) && !empty($data['product_categories'])) {
                 foreach ($data['product_categories'] as $category_id) {
                     // This is probably not the best way to do it
                     // Numeric = id, string = category name
                     if (!is_numeric($category_id)) {
                         // check for existance
                         JModel::addIncludePath(JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_tienda' . DS . 'models');
                         $model = JModel::getInstance('Categories', 'TiendaModel');
                         $model->setState('filter_name', $category_id);
                         $matches = $model->getList();
                         $matched = false;
                         if ($matches) {
                             foreach ($matches as $match) {
                                 // is a perfect match?
                                 if (strtolower($category_id) == strtolower($match->category_name)) {
                                     $category_id = $match->category_id;
                                     $matched = true;
                                 }
                             }
                         }
                         // Not matched, create category
                         if (!$matched) {
                             $category = JTable::getInstance('Categories', 'TiendaTable');
                             $category->category_name = $category_id;
                             $category->parent_id = 1;
                             $category->category_enabled = 1;
                             $category->save();
                             $category_id = $category->category_id;
                         }
                     }
                     // save xref in every case
                     $xref = JTable::getInstance('ProductCategories', 'TiendaTable');
                     $xref->product_id = $product->product_id;
                     $xref->category_id = $category_id;
                     $xref->save();
                 }
             }
             $results[$n]->title = $product->product_name;
             $results[$n]->query = "";
             $results[$n]->error = implode('\\n', $product->getErrors());
             $results[$n]->affectedRows = 1;
             $n++;
             $this->_migrateImages($product->product_id, $data['product_images'], $results);
         }
     }
     return $results;
 }