Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- require_once 'Helper/Site.php';
- require_once 'utils/Table.php';
- require_once 'Helper/Package/DataProvider.php';
- require_once 'Helper/Package/RowProcessor.php';
- require_once 'Helper/PackageOverride/RowProcessor.php';
- class Helper_Dosage_ObjectNotFoundException extends Exception { }
- interface Helper_IDosage {
- /**
- * Выполнить попытку найти существующую или создать новую дозировку
- * на основании входных данных. Поиск дозировки осуществляется по входному
- * значению Id. Поиск продукта осуществляется по входному значению
- * параметра Product.
- * @return ProductDosage
- * @throws Helper_Dosage_ObjectNotFoundException - если создать новый
- * экземпляр дозировки не удалось из-за невозможность определить
- * объект продукта.
- */
- function getDosageFromInput();
- /**
- * Транслировать атрибуты в вид. В дополнение к атрибутам объекта
- * ProductDosage, в вид так же транслируется ProductName.
- * @return void
- */
- function toView(ProductDosage $dosage);
- /**
- * Выполняет попытку установки изменяемых атрибутов объекта на основе
- * входных данных. Возвращает false, если хотя бы один атрибут не прошел
- * валидацию. Для атрибутов, непрошедших валидацию устанавливает значение
- * {$attr}Err в true, где $attr - атрибут дозировки. Так же транслирует
- * неизменяемые атрибуты и ProductName.
- * @param ProductDosage $dosage
- * @return boolean - true, если валидация пройдена, иначе - false.
- */
- function toModel(ProductDosage $dosage);
- /**
- * Список единиц измерений в вид. Список объектов, полученных через метод
- * MeasureUnit::fetch транслилуется в переменную measure_units вида.
- * @return void
- */
- function toViewMeasureUnits();
- /**
- * Сформировать вид таблицы пакетов.
- *
- * Формирует данные для отображения списка пакетов. В вид добавляется
- * массив packages, каждый элемент которого представляет массив атрибутов
- * пакета.
- *
- * @param ProductDosage $dosage - дозировка, для которой необходимо
- * отобразить список пакетов.
- * @param boolean $includeDisablePackages - если true, то в список
- * войдут отключенные пакеты, иначе - только активные.
- * @return void
- */
- function toViewPackages(ProductDosage $dosage, $includeDisablePackages);
- /**
- * Сформировать вид таблицы пакетов с обработкой перегруженных атрибутов.
- *
- * Формирует данные для отображения списка пакетов, включая в строку
- * информацию о перегруженных атрибутах, соответствующих указанному сайту.
- * Так же выполняется попытка обновления информации о перегруженных
- * атрибутах, если соответствующие данные имеются в запросе.
- *
- * В вид добавляется массив packages, каждый элемент которого представляет
- * информацию о пакетах и перегруженных атрибутах. Атрибуты пакета идут
- * "как есть". Перегруженные атрибуты имеют префикс override_. Обработка
- * входных данных подразумевает, что на входе перегруженным атрибутам
- * соответствуют параметры с префиксом override_: Price,Enabled и
- * BonusQuantity. Входные параметры должны быть массивами, ключами которых
- * выступают идентификаторы пакетов. Например, override_Price[10] будет
- * соответствовать значению переопределенной цены для пакета с
- * идентификатором 10. Признаком необходимости обновления перегруженных
- * атрибутов для этого пакета будет являеться наличие на входе непустого
- * параметра override_update[10].
- *
- * @param ProductDosage $dosage - дозировка, для которой будет сформирован
- * список пакетов.
- * @param Site $site - сайт, оверрайды которого будут обрабатываться
- * @param boolean $includeDisabledPackages - если true, то в список
- * войдут отключенные пакеты, иначе - только активные.
- *
- * @return void
- */
- function toViewPackagesToModelOverrides(ProductDosage $dosage,
- Site $site,
- $includeDisabledPackages);
- /**
- * Список адверт/шоп в вид. Делегирует работу хелперу
- * Helper_Site::toViewSiteList, который устанавливает значение переменной
- * site_list: массив, состоящий из array('Id' => XXX, 'optName' => YYY),
- * где XXX - идентификатор сайта, YYY - наименование сайта.
- * @return void
- */
- function toViewSitesAdverts();
- /**
- * Возвращает экземпляр выбранного сайта, если его идентификатор передан
- * в качестве входного параметра selected_site. Транслирует идентификатор в
- * вид.
- * @return Site|null - если сайт не выбран или не найден возвращает null
- */
- function getSiteFromInput();
- }
- class Helper_Dosage extends Helper_Helper implements Helper_IDosage {
- /**
- * @deprecated ???
- * @param unknown_type $dosage
- */
- function dosage2DisplayArray(ProductDosage $dosage) {
- return array(
- 'Id' => $dosage->getId(),
- 'Dosage' => $dosage->getDosage(),
- 'MeasureUnitName' => $dosage->getMeasureUnit()->getName(),
- 'MeasureUnitId' => $dosage->getMeasureUnit()->getId(),
- 'CostPrice' => $dosage->getCostPrice(),
- 'MinPrice' => $dosage->getMinPrice(),
- 'Enabled' => $dosage->isEnabled(),
- 'PackageCount' => sizeof($dosage->getPackages(true)),
- );
- }
- /**
- * @deprecated ???
- * @param unknown_type $prodId
- */
- function getDosagesArray($prodId) {
- $result = array();
- $product = $this->getMapper('Product')->find($prodId);
- foreach($product->getDosages(true) as $dosage) {
- $data = $this->dosage2DisplayArray($dosage);
- $result[] = array(
- 'id' => $data['Id'],
- 'name' => $data['Dosage'].$data['MeasureUnitName']
- );
- }
- return $result;
- }
- /**
- * @deprecated ???
- * Enter description here ...
- * @param unknown_type $object
- */
- function assignDosages($object) {
- $items = array();
- foreach ( $object->getDosages(true) as $dosage ) {
- $items[] = $this->dosage2DisplayArray($dosage);
- }
- $this->context->getView()->setVar('items', $items);
- }
- /**
- * (non-PHPdoc)
- * @see Helper_IDosage::getDosageFromInput()
- */
- function getDosageFromInput() {
- $req = $this->context->getRequest();
- $dosage = $this->getMapper('ProductDosage')->find($req->getInt('Id'));
- if ( $dosage ) return $dosage;
- if ( is_null($dosage) ) {
- $prod = $this->getMapper('Product')->find($req->getInt('Product'));
- if ( $prod ) {
- return $prod->addDosage();
- }
- }
- throw new Helper_Dosage_ObjectNotFoundException();
- }
- /**
- * (non-PHPdoc)
- * @see Helper_IDosage::toViewMeasureUnits()
- */
- function toViewMeasureUnits() {
- $this->context->getView()->setVar('measure_units',
- $this->getMapper('MeasureUnit')->fetch
- ($this->getMapper('MeasureUnit')->createSearch()->orderByName()));
- }
- /**
- * (non-PHPdoc)
- * @see Helper_IDosage::toViewPackages()
- */
- function toViewPackages(ProductDosage $dosage, $includeDisablePackages) {
- $this->createPackageProcessor($dosage, $includeDisablePackages)
- ->processTable();
- }
- /**
- * (non-PHPdoc)
- * @see Helper_IDosage::toViewPackagesToModelOverrides()
- */
- function toViewPackagesToModelOverrides(ProductDosage $dosage,
- Site $site,
- $includeDisabledPackages)
- {
- $this->createPackageOverrideProcessor($dosage, $site,
- $includeDisabledPackages)->processTable();
- }
- /**
- * (non-PHPdoc)
- * @see Helper_IDosage::toViewSitesAdverts()
- */
- function toViewSitesAdverts() {
- $this->createSiteHelper()->toViewSiteList();
- }
- /**
- * (non-PHPdoc)
- * @see Helper_IDosage::toModel()
- */
- function toModel(ProductDosage $dosage) {
- $translator = $this->createTranslator($dosage);
- if ( ($success =! $translator->toModelAll
- ($this->getEditableAttributes())->hasErrors()) )
- {
- $this->registry->get('ProductDosage')->save($dosage);
- }
- $this->toViewSecondaries($dosage);
- return $success;
- }
- /**
- * (non-PHPdoc)
- * @see Helper_IDosage::toView()
- */
- function toView(ProductDosage $dosage) {
- $this->createTranslator($dosage)
- ->toViewAll($this->getEditableAttributes());
- $this->toViewSecondaries($dosage);
- }
- /**
- * Транслирует в вид вторичные неизменяемые атрибуты.
- * @param ProductDosage $dosage
- * @return void
- */
- private function toViewSecondaries(ProductDosage $dosage) {
- $view = $this->context->getView();
- $view->setVar('ProductName', $dosage->getProduct()->getName());
- $view->setVar('Product', $dosage->getProduct()->getId());
- $view->setVar('Id', $dosage->getId());
- }
- /**
- * Получить список изменяемых атрибутов
- * @return array - список изменяемых атрибутов
- */
- private function getEditableAttributes() {
- return array('MeasureUnit','CostPrice','MinPrice','Enabled','Dosage');
- }
- /**
- * Фабричный метод хелпера
- * @return Helper_Site
- */
- function createSiteHelper() {
- return new Helper_Site($this->context, $this->registry);
- }
- /**
- * (non-PHPdoc)
- * @see Helper_IDosage::getSiteFromInput()
- */
- function getSiteFromInput() {
- $site = $this->getMapper('Site')->find($this->context->getRequest()
- ->getInt('selected_site'));
- if ( $site ) {
- $this->context->getView()->setVar('selected_site', $site->getId());
- }
- return $site;
- }
- /**
- * Фабричный метод обработчика списка пакетов
- *
- * @param ProductDosage $dosage
- * @param boolean $includeDisabled
- *
- * @return utils_ITable
- */
- function createPackageProcessor(ProductDosage $dosage, $includeDisabled) {
- return new utils_Table(
- new Helper_Package_DataProvider($dosage, $includeDisabled),
- new Helper_Package_RowProcessor($this->context, $this->registry));
- }
- /**
- * Фабричный метод обработчика списка пакетов с оверрайдами
- *
- * @param ProductDosage $dosage
- * @param Site $site
- * @param boolean $includeDisabled
- *
- * @return utils_ITable
- */
- function createPackageOverrideProcessor(ProductDosage $dosage,
- Site $site, $includeDisabled)
- {
- return new utils_Table(
- new Helper_Package_DataProvider($dosage, $includeDisabled),
- new Helper_PackageOverride_RowProcessor(
- new Helper_Package_RowProcessor($this->context,$this->registry),
- $this->registry, $site)
- );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement