Advertisement
Guest User

Untitled

a guest
Mar 7th, 2011
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 12.40 KB | None | 0 0
  1. <?php
  2.  
  3. require_once 'Helper/Site.php';
  4. require_once 'utils/Table.php';
  5. require_once 'Helper/Package/DataProvider.php';
  6. require_once 'Helper/Package/RowProcessor.php';
  7. require_once 'Helper/PackageOverride/RowProcessor.php';
  8.  
  9. class Helper_Dosage_ObjectNotFoundException extends Exception { }
  10.  
  11. interface Helper_IDosage {
  12.    
  13.     /**
  14.      * Выполнить попытку найти существующую или создать новую дозировку
  15.      * на основании входных данных. Поиск дозировки осуществляется по входному
  16.      * значению Id. Поиск продукта осуществляется по входному значению
  17.      * параметра Product.
  18.      * @return ProductDosage
  19.      * @throws Helper_Dosage_ObjectNotFoundException - если создать новый
  20.      *      экземпляр дозировки не удалось из-за невозможность определить
  21.      *      объект продукта.
  22.      */
  23.     function getDosageFromInput();
  24.    
  25.     /**
  26.      * Транслировать атрибуты в вид. В дополнение к атрибутам объекта
  27.      * ProductDosage, в вид так же транслируется ProductName.
  28.      * @return void
  29.      */
  30.     function toView(ProductDosage $dosage);
  31.    
  32.     /**
  33.      * Выполняет попытку установки изменяемых атрибутов объекта на основе
  34.      * входных данных. Возвращает false, если хотя бы один атрибут не прошел
  35.      * валидацию. Для атрибутов, непрошедших валидацию устанавливает значение
  36.      * {$attr}Err в true, где $attr - атрибут дозировки. Так же транслирует
  37.      * неизменяемые атрибуты и ProductName.
  38.      * @param ProductDosage $dosage
  39.      * @return boolean - true, если валидация пройдена, иначе - false.
  40.      */
  41.     function toModel(ProductDosage $dosage);
  42.    
  43.     /**
  44.      * Список единиц измерений в вид. Список объектов, полученных через метод
  45.      * MeasureUnit::fetch транслилуется в переменную measure_units вида.
  46.      * @return void
  47.      */
  48.     function toViewMeasureUnits();
  49.    
  50.     /**
  51.      * Сформировать вид таблицы пакетов.
  52.      *
  53.      * Формирует данные для отображения списка пакетов. В вид добавляется
  54.      * массив packages, каждый элемент которого представляет массив атрибутов
  55.      * пакета.
  56.      *
  57.      * @param ProductDosage $dosage - дозировка, для которой необходимо
  58.      *                  отобразить список пакетов.
  59.      * @param boolean $includeDisablePackages - если true, то в список
  60.      *                  войдут отключенные пакеты, иначе - только активные.
  61.      * @return void
  62.      */
  63.     function toViewPackages(ProductDosage $dosage, $includeDisablePackages);
  64.    
  65.     /**
  66.      * Сформировать вид таблицы пакетов с обработкой перегруженных атрибутов.
  67.      *
  68.      * Формирует данные для отображения списка пакетов, включая в строку
  69.      * информацию о перегруженных атрибутах, соответствующих указанному сайту.
  70.      * Так же выполняется попытка обновления информации о перегруженных
  71.      * атрибутах, если соответствующие данные имеются в запросе.
  72.      *
  73.      * В вид добавляется массив packages, каждый элемент которого представляет
  74.      * информацию о пакетах и перегруженных атрибутах. Атрибуты пакета идут
  75.      * "как есть". Перегруженные атрибуты имеют префикс override_. Обработка
  76.      * входных данных подразумевает, что на входе перегруженным атрибутам
  77.      * соответствуют параметры с префиксом override_: Price,Enabled и
  78.      * BonusQuantity. Входные параметры должны быть массивами, ключами которых
  79.      * выступают идентификаторы пакетов. Например, override_Price[10] будет
  80.      * соответствовать значению переопределенной цены для пакета с
  81.      * идентификатором 10. Признаком необходимости обновления перегруженных
  82.      * атрибутов для этого пакета будет являеться наличие на входе непустого
  83.      * параметра override_update[10].
  84.      *
  85.      * @param ProductDosage $dosage - дозировка, для которой будет сформирован
  86.      *                  список пакетов.
  87.      * @param Site $site - сайт, оверрайды которого будут обрабатываться
  88.      * @param boolean $includeDisabledPackages - если true, то в список
  89.      *                  войдут отключенные пакеты, иначе - только активные.
  90.      *
  91.      * @return void
  92.      */
  93.     function toViewPackagesToModelOverrides(ProductDosage $dosage,
  94.                                             Site $site,
  95.                                             $includeDisabledPackages);
  96.    
  97.     /**
  98.      * Список адверт/шоп в вид. Делегирует работу хелперу
  99.      * Helper_Site::toViewSiteList, который устанавливает значение переменной
  100.      * site_list: массив, состоящий из array('Id' => XXX, 'optName' => YYY),
  101.      * где XXX - идентификатор сайта, YYY - наименование сайта.
  102.      * @return void
  103.      */
  104.     function toViewSitesAdverts();
  105.    
  106.     /**
  107.      * Возвращает экземпляр выбранного сайта, если его идентификатор передан
  108.      * в качестве входного параметра selected_site. Транслирует идентификатор в
  109.      * вид.
  110.      * @return Site|null - если сайт не выбран или не найден возвращает null
  111.      */
  112.     function getSiteFromInput();
  113.    
  114. }
  115.  
  116. class Helper_Dosage extends Helper_Helper implements Helper_IDosage {
  117.    
  118.     /**
  119.      * @deprecated ???
  120.      * @param unknown_type $dosage
  121.      */
  122.     function dosage2DisplayArray(ProductDosage $dosage) {
  123.         return array(
  124.             'Id' => $dosage->getId(),
  125.             'Dosage' => $dosage->getDosage(),
  126.             'MeasureUnitName' => $dosage->getMeasureUnit()->getName(),
  127.             'MeasureUnitId' => $dosage->getMeasureUnit()->getId(),
  128.             'CostPrice' => $dosage->getCostPrice(),
  129.             'MinPrice' => $dosage->getMinPrice(),
  130.             'Enabled' => $dosage->isEnabled(),
  131.             'PackageCount' => sizeof($dosage->getPackages(true)),
  132.         );
  133.     }
  134.    
  135.     /**
  136.      * @deprecated ???
  137.      * @param unknown_type $prodId
  138.      */
  139.     function getDosagesArray($prodId) {
  140.         $result = array();
  141.         $product = $this->getMapper('Product')->find($prodId);
  142.         foreach($product->getDosages(true) as $dosage) {
  143.             $data = $this->dosage2DisplayArray($dosage);
  144.             $result[] = array(
  145.                 'id' => $data['Id'],
  146.                 'name' => $data['Dosage'].$data['MeasureUnitName']
  147.             );
  148.         }
  149.         return $result;
  150.     }
  151.    
  152.     /**
  153.      * @deprecated ???
  154.      * Enter description here ...
  155.      * @param unknown_type $object
  156.      */
  157.     function assignDosages($object) {
  158.         $items = array();
  159.         foreach ( $object->getDosages(true) as $dosage ) {
  160.             $items[] = $this->dosage2DisplayArray($dosage);
  161.         }
  162.         $this->context->getView()->setVar('items', $items);
  163.     }
  164.    
  165.     /**
  166.      * (non-PHPdoc)
  167.      * @see Helper_IDosage::getDosageFromInput()
  168.      */
  169.     function getDosageFromInput() {
  170.         $req = $this->context->getRequest();
  171.         $dosage = $this->getMapper('ProductDosage')->find($req->getInt('Id'));
  172.         if ( $dosage ) return $dosage;
  173.         if ( is_null($dosage) ) {
  174.             $prod = $this->getMapper('Product')->find($req->getInt('Product'));
  175.             if ( $prod ) {
  176.                 return $prod->addDosage();
  177.             }
  178.         }
  179.         throw new Helper_Dosage_ObjectNotFoundException();
  180.     }
  181.    
  182.     /**
  183.      * (non-PHPdoc)
  184.      * @see Helper_IDosage::toViewMeasureUnits()
  185.      */
  186.     function toViewMeasureUnits() {
  187.         $this->context->getView()->setVar('measure_units',
  188.             $this->getMapper('MeasureUnit')->fetch
  189.             ($this->getMapper('MeasureUnit')->createSearch()->orderByName()));
  190.     }
  191.    
  192.     /**
  193.      * (non-PHPdoc)
  194.      * @see Helper_IDosage::toViewPackages()
  195.      */
  196.     function toViewPackages(ProductDosage $dosage, $includeDisablePackages) {
  197.         $this->createPackageProcessor($dosage, $includeDisablePackages)
  198.             ->processTable();
  199.     }
  200.    
  201.     /**
  202.      * (non-PHPdoc)
  203.      * @see Helper_IDosage::toViewPackagesToModelOverrides()
  204.      */
  205.     function toViewPackagesToModelOverrides(ProductDosage $dosage,
  206.                                             Site $site,
  207.                                             $includeDisabledPackages)
  208.     {
  209.         $this->createPackageOverrideProcessor($dosage, $site,
  210.             $includeDisabledPackages)->processTable();
  211.     }
  212.    
  213.     /**
  214.      * (non-PHPdoc)
  215.      * @see Helper_IDosage::toViewSitesAdverts()
  216.      */
  217.     function toViewSitesAdverts() {
  218.         $this->createSiteHelper()->toViewSiteList();
  219.     }
  220.    
  221.     /**
  222.      * (non-PHPdoc)
  223.      * @see Helper_IDosage::toModel()
  224.      */
  225.     function toModel(ProductDosage $dosage) {
  226.         $translator = $this->createTranslator($dosage);
  227.         if ( ($success =! $translator->toModelAll
  228.             ($this->getEditableAttributes())->hasErrors()) )
  229.         {
  230.             $this->registry->get('ProductDosage')->save($dosage);
  231.         }
  232.         $this->toViewSecondaries($dosage);
  233.         return $success;
  234.     }
  235.  
  236.     /**
  237.      * (non-PHPdoc)
  238.      * @see Helper_IDosage::toView()
  239.      */
  240.     function toView(ProductDosage $dosage) {
  241.         $this->createTranslator($dosage)
  242.             ->toViewAll($this->getEditableAttributes());
  243.         $this->toViewSecondaries($dosage);
  244.     }
  245.    
  246.     /**
  247.      * Транслирует в вид вторичные неизменяемые атрибуты.
  248.      * @param ProductDosage $dosage
  249.      * @return void
  250.      */
  251.     private function toViewSecondaries(ProductDosage $dosage) {
  252.         $view = $this->context->getView();
  253.         $view->setVar('ProductName', $dosage->getProduct()->getName());
  254.         $view->setVar('Product', $dosage->getProduct()->getId());
  255.         $view->setVar('Id', $dosage->getId());
  256.     }
  257.    
  258.     /**
  259.      * Получить список изменяемых атрибутов
  260.      * @return array - список изменяемых атрибутов
  261.      */
  262.     private function getEditableAttributes() {
  263.         return array('MeasureUnit','CostPrice','MinPrice','Enabled','Dosage');
  264.     }
  265.    
  266.     /**
  267.      * Фабричный метод хелпера
  268.      * @return Helper_Site
  269.      */
  270.     function createSiteHelper() {
  271.         return new Helper_Site($this->context, $this->registry);
  272.     }
  273.    
  274.     /**
  275.      * (non-PHPdoc)
  276.      * @see Helper_IDosage::getSiteFromInput()
  277.      */
  278.     function getSiteFromInput() {
  279.         $site = $this->getMapper('Site')->find($this->context->getRequest()
  280.             ->getInt('selected_site'));
  281.         if ( $site ) {
  282.             $this->context->getView()->setVar('selected_site', $site->getId());
  283.         }
  284.         return $site;
  285.     }
  286.    
  287.     /**
  288.      * Фабричный метод обработчика списка пакетов
  289.      *
  290.      * @param ProductDosage $dosage
  291.      * @param boolean $includeDisabled
  292.      *
  293.      * @return utils_ITable
  294.      */
  295.     function createPackageProcessor(ProductDosage $dosage, $includeDisabled) {
  296.         return new utils_Table(
  297.             new Helper_Package_DataProvider($dosage, $includeDisabled),
  298.             new Helper_Package_RowProcessor($this->context, $this->registry));
  299.     }
  300.    
  301.     /**
  302.      * Фабричный метод обработчика списка пакетов с оверрайдами
  303.      *
  304.      * @param ProductDosage $dosage
  305.      * @param Site $site
  306.      * @param boolean $includeDisabled
  307.      *
  308.      * @return utils_ITable
  309.      */
  310.     function createPackageOverrideProcessor(ProductDosage $dosage,
  311.                                             Site $site, $includeDisabled)
  312.     {
  313.         return new utils_Table(
  314.             new Helper_Package_DataProvider($dosage, $includeDisabled),
  315.             new Helper_PackageOverride_RowProcessor(
  316.                 new Helper_Package_RowProcessor($this->context,$this->registry),
  317.                     $this->registry, $site)
  318.         );
  319.     }
  320.    
  321. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement