示例#1
0
 protected function runUpdate()
 {
     $this->setData('script_started_at', Mage::app()->getLocale()->date(null, null, Mage::app()->getLocale()->getDefaultLocale()));
     $this->setData('script_finished_at', Mage::app()->getLocale()->date(null, null, Mage::app()->getLocale()->getDefaultLocale()));
     $messages = array();
     $this->setData('messages', $messages);
     $website = $this->getRequest()->getParam('website');
     $store = $this->getRequest()->getParam('store');
     $testmode = $this->getRequest()->getParam('testmode', 0);
     $sku = $this->getRequest()->getParam('sku');
     $limit = (int) $this->getRequest()->getParam('limit', 0);
     $offset = (int) $this->getRequest()->getParam('offset', 0);
     if ($limit > 100) {
         $limit = 100;
     }
     $store_code = Mage_Core_Model_Store::DEFAULT_CODE;
     if ($store != "") {
         $store_code = $store;
     }
     $this->setData('is_feed', false);
     try {
         $Generator = Mage::getModel('googlebasefeedgenerator/generator', array('store_code' => $store_code));
         $messages[] = array('msg' => 'Store ' . Mage::app()->getStore($store_code)->getName(), 'type' => 'info');
         /* @var $Generator RocketWeb_GoogleBaseFeedGenerator_Model_Generator*/
         if ($testmode) {
             if ($limit > $Generator->getConfigVar('button_max_products')) {
                 $limit = $Generator->getConfigVar('button_max_products');
             }
             $this->setTestMode(true);
             $Generator->setTestMode(true);
             if ($sku) {
                 $Generator->setTestSku($sku);
                 $this->setTestSku($sku);
             } elseif ($offset >= 0 && $limit > 0) {
                 $Generator->setTestOffset($offset);
                 $this->setTestOffset($offset);
                 $Generator->setTestLimit($limit);
                 $this->setTestLimit($limit);
             } else {
                 Mage::throwException(sprintf("Invalid parameters for test mode: sku %s or offset %s and limit %s", $sku, $offset, $limit));
             }
             $messages[] = array('msg' => 'Test mode.', 'type' => 'info');
         } else {
             $this->setTestMode(false);
         }
         if (!$Generator->getConfigVar('is_turned_on')) {
             $messages[] = array('msg' => 'Can\'t generate feed. It\'s disabled from config option: RocketWeb Extensions > Google Base Feed Generator > Settings > Enabled.', 'type' => 'error');
             $this->setData('messages', $messages);
             return;
         }
         if (!$this->getTestMode()) {
             $collection = Mage::getModel('catalog/product')->getCollection();
             $collection->setStoreId(Mage::app()->getStore($store_code)->getStoreId());
             $count = $collection->getSize();
             if ($count > $Generator->getConfigVar('button_max_products')) {
                 Mage::throwException(sprintf("Too many products. Detected %d products more than the limit allowed of %d.", $count, $Generator->getConfigVar('button_max_products')));
             }
         }
         // Generate feed - costly process.
         $Generator->run();
         if ($Generator->getCountProductsExported() > 0) {
             $this->setData('is_feed', true);
         }
     } catch (Exception $e) {
         $messages[] = array('msg' => 'Error:<br />' . $e->getMessage(), 'type' => 'error');
     }
     $count_products = 0;
     $count_skipped = 0;
     if (isset($Generator) && is_object($Generator) && $Generator instanceof RocketWeb_GoogleBaseFeedGenerator_Model_Generator) {
         $count_products = $Generator->getCountProductsExported();
         $count_skipped = $Generator->getCountProductsSkipped();
     }
     $feed_data = array();
     if ($this->getIsFeed() && $sku != "" && $count_products > 0 && file_exists($Generator->getFeedPath())) {
         /* tsv file */
         $csv = new Varien_File_Csv();
         $csv->setDelimiter("\t");
         $csv->setEnclosure('~');
         // dummy enclosure
         $rows = $csv->getData($Generator->getFeedPath());
         $i = 0;
         foreach ($rows as $row) {
             if ($i == 0) {
                 $i++;
                 continue;
             }
             $feed_data[] = array_combine($rows[0], $row);
             $i++;
         }
     }
     $this->setFeedData($feed_data);
     $messages[] = array('msg' => sprintf("The feed was generated.<br />%d items were added %d products were skipped.", $count_products, $count_skipped), 'type' => 'info');
     $this->setData('messages', $messages);
     $this->setData('script_finished_at', Mage::app()->getLocale()->date(null, null, Mage::app()->getLocale()->getDefaultLocale()));
 }
 /**
  * Run the generators
  */
 protected function runUpdate()
 {
     $this->setData('script_started_at', Mage::app()->getLocale()->date(null, null, Mage::app()->getLocale()->getDefaultLocale()));
     $this->setData('script_finished_at', Mage::app()->getLocale()->date(null, null, Mage::app()->getLocale()->getDefaultLocale()));
     $messages = array();
     $this->setData('messages', $messages);
     $store = $this->getRequest()->getParam('store');
     $testmode = $this->getRequest()->getParam('testmode', 0);
     $sku = $this->getRequest()->getParam('sku');
     $limit = (int) $this->getRequest()->getParam('limit', 0);
     $offset = (int) $this->getRequest()->getParam('offset', 0);
     if ($limit > 100) {
         $limit = 100;
     }
     $store_code = Mage_Core_Model_Store::DEFAULT_CODE;
     if ($store != "") {
         $store_code = $store;
     }
     $this->setData('is_feed', false);
     $this->setData('log_messages', array());
     try {
         try {
             $store_id = Mage::app()->getStore($store_code)->getStoreId();
         } catch (Exception $e) {
             Mage::throwException(sprintf('Store with code \'%s\' doesn\'t exists.', $store_code));
         }
         $Generator = Mage::getSingleton('googlebasefeedgenerator/tools')->addData(array('store_code' => $store_code))->getGenerator($store_id);
         $messages[] = array('msg' => 'Store ' . Mage::app()->getStore($store_code)->getName(), 'type' => 'info');
         /**
          * @var $Generator RocketWeb_GoogleBaseFeedGenerator_Model_Generator
          */
         if ($testmode) {
             if ($limit > $Generator->getConfigVar('button_max_products', 'file')) {
                 $limit = $Generator->getConfigVar('button_max_products', 'file');
             }
             $this->setTestMode(true);
             $Generator->setTestMode(true);
             if ($sku) {
                 $Generator->setTestSku($sku);
                 $this->setTestSku($sku);
             } elseif ($offset >= 0 && $limit > 0) {
                 $Generator->setTestOffset($offset);
                 $this->setTestOffset($offset);
                 $Generator->setTestLimit($limit);
                 $this->setTestLimit($limit);
             } else {
                 Mage::throwException(sprintf("Invalid parameters for test mode: sku %s or offset %s and limit %s", $sku, $offset, $limit));
             }
             $messages[] = array('msg' => 'Test mode.', 'type' => 'info');
         } else {
             $this->setTestMode(false);
         }
         if (!$Generator->getConfig()->isEnabled($Generator->getStoreId())) {
             $messages[] = array('msg' => 'Extension is disabled, cannot generate feed.', 'type' => 'error');
             $this->setData('messages', $messages);
             return;
         }
         if (!$this->getTestMode()) {
             $collection = $Generator->getCollection();
             $count = $collection->getSize();
             if ($count > $Generator->getConfigVar('button_max_products', 'file')) {
                 Mage::throwException(sprintf("Too many products to generate a full feed through web server. Detected %d products more than the limit allowed of %d. <br />Magento Cron will generate the feed over night. If you need to generate the feed right now, run the shell script \"php shell/gsf_generate.php\" in a sever console.", $count, $Generator->getConfigVar('button_max_products', 'file')));
             }
         }
         // Generate feed - costly process.
         $Generator->run();
         if ($Generator->getCountProductsExported() > 0) {
             $this->setData('is_feed', true);
         }
     } catch (Exception $e) {
         $messages[] = array('msg' => 'Error:<br />' . $e->getMessage(), 'type' => 'error');
     }
     $count_products = 0;
     $count_skipped = 0;
     if (isset($Generator) && is_object($Generator) && $Generator instanceof RocketWeb_GoogleBaseFeedGenerator_Model_Generator) {
         $count_products = $Generator->getCountProductsExported();
         $count_skipped = $Generator->getCountProductsSkipped();
     }
     $feed_data = array();
     if ($this->getIsFeed() && $sku != "" && $count_products > 0 && file_exists($Generator->getFeedPath())) {
         /* tsv file */
         $csv = new Varien_File_Csv();
         $csv->setDelimiter("\t");
         $csv->setEnclosure('~');
         // dummy enclosure
         $rows = $csv->getData($Generator->getFeedPath());
         $i = 0;
         foreach ($rows as $row) {
             if ($i == 0) {
                 $i++;
                 continue;
             }
             $feed_data[] = array_combine($rows[0], $row);
             $i++;
         }
     }
     $this->setFeedData($feed_data);
     $messages[] = array('msg' => sprintf("The feed was generated.<br />%d items were added %d products were skipped.", $count_products, $count_skipped), 'type' => 'info');
     $this->setData('messages', $messages);
     if (isset($Generator) && $Generator) {
         $this->setData('log_messages', $Generator->_getLog()->getMemoryStorage());
     }
     $this->setData('script_finished_at', Mage::app()->getLocale()->date(null, null, Mage::app()->getLocale()->getDefaultLocale()));
 }