energine
[ class tree: energine ] [ index: energine ] [ all elements ]

Source for file PriceLoader.class.php

Documentation is available at PriceLoader.class.php

  1. <?php
  2. /**
  3.  * Содержит класс PriceLoader
  4.  *
  5.  * @package energine
  6.  * @subpackage shop
  7.  * @author dr.Pavka
  8.  * @copyright ColoCall 2006
  9.  * @version $Id$
  10.  */
  11.  
  12. //require_once('core/modules/share/components/DataSet.class.php');
  13. //require_once('core/ext/excel/reader.php');
  14.  
  15. /**
  16.  * Класс для загрузки прайса
  17.  *
  18.  * @package energine
  19.  * @subpackage shop
  20.  * @author dr.Pavka
  21.  */
  22. class PriceLoader extends DataSet {
  23.     /**
  24.      * Конструктор класса
  25.      *
  26.      * @param string $name 
  27.      * @param string $module 
  28.      * @param Document $document 
  29.      * @param array $params 
  30.      * @access public
  31.      */
  32.     public function __construct($name$moduleDocument $document,  array $params null{
  33.         parent::__construct($name$module$document,  $params);
  34.     }
  35.     /**
  36.      * Переопределен параметр active
  37.      *
  38.      * @return int 
  39.      * @access protected
  40.      */
  41.  
  42.     protected function defineParams({
  43.         $result array_merge(parent::defineParams(),
  44.         array(
  45.         'active'=>true,
  46.         ));
  47.         return $result;
  48.     }
  49.     /**
  50.      * Добавляем вкладку
  51.      *
  52.      * @return void 
  53.      * @access protected
  54.      */
  55.  
  56.     protected function main({
  57.         $this->setDataSetAction('load');
  58.         $this->setType(self::COMPONENT_TYPE_FORM_ADD);
  59.         parent::main();
  60.     }
  61.  
  62.     /**
  63.      * Загрузка файла
  64.      *
  65.      * @return void 
  66.      * @access protected
  67.      */
  68.  
  69.     protected function loadFile({
  70.         $this->prepare();
  71.         $fieldName = (string)$this->config->getMethodConfig(self::DEFAULT_ACTION_NAME)->fields->field[0]['name'];
  72.         $newFilename $this->document->getSiteRoot().'/tmp/'.date('YmdHis');
  73.         if (empty($_FILES|| !isset($_FILES[$fieldName]|| !empty($_FILES[$fieldName]['error']|| !is_readable($_FILES[$fieldName]['tmp_name']|| !is_uploaded_file($_FILES[$fieldName]['tmp_name']|| !move_uploaded_file($_FILES[$fieldName]['tmp_name']$newFilename)) {
  74.             throw new SystemException('ERR_BAD_FILE'SystemException::ERR_CRITICAL);
  75.         }
  76.         chmod($newFilename0666);
  77.         $this->document->componentManager->getComponentByName('breadCrumbs')->addCrumb();
  78.  
  79.         $resultMessage $this->parseFileAndLoadData($newFilename);
  80.  
  81.         unlink($newFilename);
  82.         $data new Data();
  83.  
  84.         $resultField new Field('price_loader_result');
  85.         $resultField->setData($resultMessage);
  86.         $data->addField($resultField);
  87.         $this->setData($data);
  88.     }
  89.  
  90.     /**
  91.      * parse & prepare
  92.      *
  93.      * @return void 
  94.      * @access protected
  95.      */
  96.  
  97.     protected function parseFileAndLoadData($filename{
  98.         $data new Spreadsheet_Excel_Reader();
  99.         $data->setRowColOffset(0);
  100.         $data->setUTFEncoder('mb');
  101.         $data->setOutputEncoding('UTF8');
  102.         $this->dbh->beginTransaction();
  103.         $resultMessage $this->translate('MSG_IMPORT_SUCCESS');
  104.         try {
  105.             //$this->dbh->modify(QAL::UPDATE , 'shop_products', array('product_is_available'=>'0'));
  106.             $this->dbh->modify(QAL::DELETE 'shop_product_external_properties');
  107.             $data->read($filename);
  108.             $rowCount $data->sheets[0]['numRows'];
  109.  
  110.             for ($rowNum 0$rowNum $rowCount$rowNum++{
  111.                 if (isset($data->sheets[0]['cells'][$rowNum])) {
  112.                     $code trim($data->sheets[0]['cells'][$rowNum][0]);
  113.                     $price $data->sheets[0]['cells'][$rowNum][1];
  114.                     $productID simplifyDBResult($this->dbh->select('shop_products'array('product_id')array('product_code'=>$code))'product_id'true);
  115.                     if ($productID{
  116.                         $this->dbh->modify(QAL::INSERT 'shop_product_external_properties'array('product_code'=>$code'product_price'=>$price));
  117.                         //$this->dbh->modify(QAL::UPDATE , 'shop_products', array('product_is_available'=>1), array('product_id'=>$productID));
  118.                     }
  119.                 }
  120.             }
  121.  
  122.             $this->dbh->commit();
  123.  
  124.         }
  125.         catch (Exception $e{
  126.             $this->dbh->rollback();
  127.             $this->generateError(SystemException::ERR_NOTICE ,$e->getMessage());
  128.  
  129.             $resultMessage $this->translate('MSG_IMPORT_FAILED').': '.$e->getMessage();
  130.         }
  131.  
  132.         return $resultMessage;
  133.     }
  134. }
В создании документации нам помог: phpDocumentor