Source for file ViewMapper.php

Documentation is available at ViewMapper.php

  1. <?php
  2.     /**
  3.      * View Mapper Classes
  4.      *
  5.      * @copyright Copyright (c) 2007 Mirchev Ideas Ltd. All rights reserved.
  6.      * @package MIPHPF
  7.      */
  8.     
  9.     /**
  10.      * The view mapper controller class
  11.      *
  12.      * @copyright Copyright (c) 2007 Mirchev Ideas Ltd. All rights reserved.
  13.      * @package MIPHPF
  14.      */
  15.     class miViewMapperController {
  16.         protected $_view;
  17.         protected $_viewMappers = array();
  18.         
  19.         /**
  20.          * Constructs the object
  21.          * 
  22.          * @param miView $view 
  23.          * @param miRecord $record 
  24.          */
  25.         public function __construct(miView $view)
  26.         {
  27.             $this->_view = $view;
  28.             
  29.             $this->setupViewMappers();
  30.         }
  31.         
  32.         /**
  33.          * Create all view mapper objects
  34.          */
  35.         protected function setupViewMappers()
  36.         {
  37.             $dataFields $this->_view->getDataFields();
  38.             $viewMappers array();
  39.             foreach ($dataFields as $dataField{
  40.                 if (isset($dataField['modelStrategy']))
  41.                     $viewMappers[$dataField['modelStrategy'];
  42.             }
  43.             foreach ($viewMappers as $viewMapper)
  44.                 $this->addViewMapper($viewMappernew $viewMapper($this));
  45.         }
  46.         
  47.         /**
  48.          * Return the view
  49.          * 
  50.          * @return miView the view object
  51.          */
  52.         public function getView()
  53.         {
  54.             return $this->_view;
  55.         }
  56.         
  57.         /**
  58.          * Adds new view mapper object
  59.          * 
  60.          * @param string $viewMapperName view mapper name
  61.          * @param miViewMapper $viewMapper the view mapper object
  62.          */
  63.         public function addViewMapper($viewMapperNamemiViewMapper $viewMapper)
  64.         {
  65.             $this->_viewMappers[$viewMapperName$viewMapper;
  66.         }
  67.         
  68.         /**
  69.          * Returns the view mapper with name $viewMapperName
  70.          * 
  71.          * @param string $viewMapperName the view mapper name (optional). If not given returns the default view mapper
  72.          * @return miViewMapper object
  73.          */
  74.         public function getViewMapper($viewMapperName '')
  75.         {
  76.             return $this->_viewMappers[$viewMapperName];
  77.         }
  78.         
  79.         /**
  80.          * Updates the form with the newly submitted values
  81.          * 
  82.          * @param miWebForm $webForm 
  83.          */
  84.         public function updateSubmittedForm(miWebForm $webForm)
  85.         {
  86.             $formData $webForm->getSubmittedDataRow();
  87.             $webForm->setFormDataRow($formData);
  88.         }
  89.         
  90.         /**
  91.          * Call all view mappers
  92.          * 
  93.          * @param string $operation 'read', 'insert', 'update', 'preDelete' or 'delete'
  94.          */
  95.         protected function callViewMappers($operation)
  96.         {
  97.             foreach ($this->_viewMappers as $viewMapper)
  98.                 call_user_func(array($viewMapper$operation));
  99.         }
  100.         
  101.         public function read()
  102.         {
  103.             $this->callViewMappers('read');
  104.         }
  105.         
  106.         public function insert()
  107.         {
  108.             $this->callViewMappers('insert');
  109.         }
  110.         public function update()
  111.         {
  112.             $this->callViewMappers('update');
  113.         }
  114.         public function delete()
  115.         {
  116.             $this->callViewMappers('preDelete');
  117.             $this->callViewMappers('delete');
  118.         }
  119.     }
  120.     
  121.     
  122.     /**
  123.      * Default View to Domain Object Mapper Controller
  124.      * 
  125.      * @copyright Copyright (c) 2007 Mirchev Ideas Ltd. All rights reserved.
  126.      * @package MIPHPF
  127.      */
  128.         protected $_domainObj;
  129.         protected $_webForm = null;
  130.         
  131.         public function __construct(miView $viewmiDomainObject $domainObj$pkValue)
  132.         {
  133.             $this->_domainObj = $domainObj;
  134.             $this->addViewMapper(''new miViewMapperDefault($this$domainObj$pkValue));
  135.             
  136.             parent::__construct($view);
  137.         }
  138.         
  139.         public function getDomainObject()
  140.         {
  141.             return $this->_domainObj;
  142.         }
  143.         
  144.         public function setWebForm($webForm)
  145.         {
  146.             $this->_webForm = $webForm;
  147.         }
  148.         
  149.         public function getWebForm()
  150.         {
  151.             return $this->_webForm;
  152.         }
  153.         
  154.         public function getProperies($fieldName)
  155.         {
  156.             $dataFields $this->_view->getDataFields();
  157.             foreach ($dataFields as $dataField)
  158.                 if ($dataField['data'== $fieldName)
  159.                     return $dataField['properties'];
  160.             throw new miException(sprintf('Cannot find properties for %s'$fieldName));
  161.         }
  162.         
  163.         public function getViewMapperDataFields($viewMapperName)
  164.         {
  165.             $result array();
  166.             $dataFields $this->_view->getDataFields();
  167.             foreach ($dataFields as $dataField)
  168.                 if (isset($dataField['modelStrategy']and ($dataField['modelStrategy'== $viewMapperName))
  169.                     $result[$dataField;
  170.             return $result;
  171.         }
  172.         
  173.         /**
  174.          * Retrieve the data from the web form
  175.          */
  176.         public function setDataFromWebForm()
  177.         {
  178.             $formData $this->_webForm->getSubmittedDataRow();
  179.             $dataFields $this->_view->getDataFields();
  180.             foreach ($dataFields as $dataField{
  181.                 if (!isset($formData[$dataField['data']]))
  182.                     continue;
  183.                 
  184.                 $viewMapperName = isset($dataField['modelStrategy']$dataField['modelStrategy''';
  185.                 $viewMapper $this->_viewMappers[$viewMapperName];
  186.                 $viewMapper->set($dataField['data']$formData[$dataField['data']]);
  187.             }
  188.         }
  189.         
  190.         /**
  191.          * Set the data to the web form
  192.          */
  193.         public function setDataToWebForm()
  194.         {
  195.             $dataFields $this->_view->getDataFields();
  196.             foreach ($dataFields as $dataField{
  197.                 $viewMapperName = isset($dataField['modelStrategy']$dataField['modelStrategy''';
  198.                 $viewMapper $this->_viewMappers[$viewMapperName];
  199.                 $this->_webForm->setFormData($dataField['data']$viewMapper->get($dataField['data']));
  200.             }
  201.         }
  202.     }
  203.     
  204.     /**
  205.      * The View Mapper base class
  206.      *
  207.      * @copyright Copyright (c) 2007 Mirchev Ideas Ltd. All rights reserved.
  208.      * @package MIPHPF
  209.      */
  210.     class miViewMapper {
  211.         protected $_viewMapperController;
  212.         
  213.         public function __construct(miViewMapperController $viewMapperController)
  214.         {
  215.             $this->_viewMapperController = $viewMapperController;
  216.         }
  217.         
  218.         public function getViewMapperController()
  219.         {
  220.             return $this->_viewMapperController;
  221.         }
  222.         
  223.         public function get($fieldName{}
  224.         public function set($fieldName$fieldValue{}
  225.         
  226.         public function read({}
  227.         public function insert({}
  228.         public function update({}
  229.         public function delete({}
  230.         
  231.         public function preDelete(return true}
  232.     }
  233.     
  234.     /**
  235.      * The view to domain object mapper default class
  236.      *
  237.      * @copyright Copyright (c) 2007 Mirchev Ideas Ltd. All rights reserved.
  238.      * @package MIPHPF
  239.      */
  240.     class miViewMapperDefault extends miViewMapper {
  241.         protected $_domainObj;
  242.         protected $_pkValue;
  243.         
  244.         public function __construct(miViewMapperController $viewMapperControllermiDomainObject $domainObj$pkValue)
  245.         {
  246.             parent::__construct($viewMapperController);
  247.             $this->_domainObj = $domainObj;
  248.             $this->_pkValue = $pkValue;
  249.         }
  250.         
  251.         public function getDomainObject()
  252.         {
  253.             return $this->_domainObj;
  254.         }
  255.         
  256.         public function get($fieldName)
  257.         {
  258.             return $this->_domainObj->get($fieldName);
  259.         }
  260.         
  261.         public function set($fieldName$fieldValue)
  262.         {
  263.             $this->_domainObj->set($fieldName$fieldValue);
  264.         }
  265.         
  266.         /**
  267.          * Read the model data from storage
  268.          */
  269.         public function read()
  270.         {
  271.             $this->_domainObj->read($this->_pkValue);
  272.         }
  273.         
  274.         /**
  275.          * Insert the model data as new record
  276.          */
  277.         public function insert()
  278.         {
  279.             return $this->_domainObj->insert();
  280.         }
  281.         
  282.         /**
  283.          * Update existing record
  284.          */
  285.         public function update()
  286.         {
  287.             return $this->_domainObj->update();
  288.         }
  289.         
  290.         /**
  291.          * Delete existing record
  292.          */
  293.         public function delete()
  294.         {
  295.             return $this->_domainObj->delete($this->_pkValue);
  296.         }
  297.     }
  298. ?>

Documentation generated on Thu, 08 May 2008 16:57:58 +0300 by phpDocumentor 1.4.1