Source for file Table.php

Documentation is available at Table.php

  1. <?php
  2.     /**
  3.      * miTable Class
  4.      *
  5.      * @copyright Copyright (c) 2003-2007 Mirchev Ideas Ltd. All rights reserved.
  6.      * @package MIPHPF
  7.      */
  8.  
  9.     /**
  10.      * Manage the representation in table format of data,
  11.      * which is read from miSqlRecordset object
  12.      * 
  13.      * @copyright Copyright (c) 2003-2007 Mirchev Ideas Ltd. All rights reserved.
  14.      * @package MIPHPF
  15.      */
  16.     class miTable {
  17.         
  18.         
  19.         /**
  20.          * @access protected
  21.          */
  22.         protected $_recordset;
  23.         
  24.                 
  25.         /**
  26.          * @access protected
  27.          */
  28.         protected $_mainPageElements = array();
  29.         
  30.         
  31.         /**
  32.          * @var array with the miTableFeature-extending objects
  33.          * @access protected
  34.          */
  35.         protected $_tableFeatures = array();
  36.         
  37.         /**
  38.          * Reference to the message object, or null
  39.          */
  40.         protected $_messageObj = null;
  41.         
  42.         /**
  43.          * @var array hash with the current state
  44.          */
  45.         protected $_state = array();
  46.         
  47.         /**
  48.          * miTable constructor. It takes one parameter - object of class
  49.          * miSqlRecordset or its subclasses
  50.          * 
  51.          * Example:
  52.          * <code>
  53.          * <?php
  54.          * $recordset = new miSqlRecordset('tableName');
  55.          * $table = new miTable($recordset);
  56.          * ?>
  57.          * </code>
  58.          * 
  59.          * @access public
  60.          * @param object $recordset object of class miSqlRecordset or its subclasses
  61.          */
  62.         function __construct(&$recordset)
  63.         {
  64.             $this->_recordset = &$recordset;
  65.         }
  66.         
  67.         /**
  68.          * Adds a table feature
  69.          * 
  70.          * @access public
  71.          * @param object $tableFeature 
  72.          */
  73.         public function addTableFeature($tableFeature)
  74.         {
  75.             $this->_tableFeatures[$tableFeature;
  76.         }
  77.         
  78.         /**
  79.          * Retrieves the recordset object
  80.          */
  81.         public function &getRecordset()
  82.         {
  83.             return $this->_recordset;
  84.         }
  85.         
  86.         
  87.         /**
  88.          * Returns the params saving the state of all table features
  89.          */
  90.         public function getTableFeaturesStateParams()
  91.         {
  92.             $params array();
  93.             foreach ($this->_tableFeatures as $tableFeature{
  94.                 $params array_merge($params$tableFeature->getStateParams());
  95.             }
  96.             return $params;
  97.         }
  98.         
  99.         /**
  100.          * Converts an associative array of params into url string
  101.          * 
  102.          * @param array $params 
  103.          * @return string 
  104.          */
  105.         function paramsArrayToUrl($params)
  106.         {
  107.             $encParams array();
  108.             foreach ($params as $key => $value)
  109.                 $encParams[$key '=' urlencode($value);
  110.             return implode('&'$encParams);
  111.         }
  112.         
  113.         
  114.         /**
  115.          * Sets main page elements
  116.          *
  117.          * @access public
  118.          * @param array $mainPageElements array with the main page elements
  119.          */
  120.         public function setMainPageElements($mainPageElements)
  121.         {
  122.             $this->_mainPageElements = $mainPageElements;
  123.         }
  124.         
  125.         /**
  126.          * Add main page elements
  127.          *
  128.          * @access public
  129.          * @param array $mainPageElements array with the main page elements
  130.          */
  131.         public function addMainPageElements($mainPageElements)
  132.         {
  133.             $this->_mainPageElements = array_merge($this->_mainPageElements$mainPageElements);
  134.         }
  135.         
  136.         /**
  137.          * Return the state
  138.          * 
  139.          * @return array 
  140.          */
  141.         public function getState()
  142.         {
  143.             return $this->_state;
  144.         }
  145.         
  146.         /**
  147.          * Set the state
  148.          * 
  149.          * @param array $state 
  150.          */
  151.         public function setState($state)
  152.         {
  153.             $this->_state = $state;
  154.         }
  155.         
  156.         /**
  157.          * Updates the current state.
  158.          * The new state is retrieved from the table features
  159.          */
  160.         public function updateState()
  161.         {
  162.             $state array();
  163.             foreach ($this->_tableFeatures as $tableFeature{
  164.                 $state array_merge($state$tableFeature->getStateParams());
  165.             }
  166.             $this->_state = $state;
  167.         }
  168.         
  169.         /**
  170.          * Build webform Html using the template file
  171.          * 
  172.          * @access protected
  173.          * @param string $templateFilename name of the template file
  174.          */
  175.         public function parse($templateFilename)
  176.         {
  177.             $rows $this->_recordset->getRecords();
  178.             
  179.             $section new miTemplateParserSectionInfo();
  180.             if (count($rows0{
  181.                 $this->addUiElements($rows);
  182.                 $section->setSectionInfo('rows'count($rows)miUIUtil::templetizeRows(miUIUtil::transposeRows($rows)));
  183.             else {
  184.                 $section->setSectionInfo('norows'1);
  185.             }
  186.  
  187.             $t new miTemplateParser();
  188.             $t->setSectionInfos(array($section));
  189.             $t->readTemplate($templateFilename);
  190.             
  191.             $this->assignFeatureValues($t);
  192.             $t->assignArray($this->getMessageObj()->getMessageTemplateVars());
  193.             self::escapeAndAssignArray($t$this->_mainPageElements);
  194.             $this->addMainUiElements($t);
  195.             
  196.             return $t->templateParse();
  197.         }
  198.         
  199.         /**
  200.          * Returns the message object
  201.          * if $this->_messageObj is null creates new miMessage object
  202.          * 
  203.          * @return miMessage the message object
  204.          */
  205.         protected function getMessageObj()
  206.         {
  207.             if ($this->_messageObj == null)
  208.                 $this->_messageObj = new miMessage;
  209.             return $this->_messageObj;
  210.         }
  211.         
  212.         
  213.         /**
  214.          * Get all table feature values
  215.          * 
  216.          * @access public
  217.          * @return array 
  218.          */
  219.         public function getFeatureValues()
  220.         {
  221.             $featureValues array();
  222.             foreach ($this->_tableFeatures as $tableFeature{
  223.                 $featureValues array_merge($featureValues$tableFeature->getValues());
  224.             }
  225.             $values array();
  226.             foreach ($featureValues as $key => $value{
  227.                 $values['%%' $key '%%'$value;
  228.             }
  229.             
  230.             $values['%%ALL_PARAMS%%'miAppFactory::singleton()->getStateObj()->getStateUrlParams();
  231.             return $values;
  232.         }
  233.         
  234.         /**
  235.          * Assign all table feature values to the template
  236.          * 
  237.          * @access public
  238.          * @param $t miTemplateParser
  239.          */
  240.         public function assignFeatureValues(&$t)
  241.         {
  242.             $values $this->getFeatureValues();
  243.             self::escapeAndAssignArray($t$values);
  244.         }
  245.         
  246.         /**
  247.          * Shows the table using the specified template
  248.          * 
  249.          * Example:
  250.          * <code>
  251.          * <?php
  252.          * $recordset = new miSqlRecordset('tableName');
  253.          * $table = new miTable($recordset);
  254.          * $table->showPage($mainTemplate)
  255.          * ?>
  256.          * </code>
  257.          * 
  258.          * @access public
  259.          * @param string $mainTemplate name of the main template file
  260.          */
  261.         public function showPage($mainTemplate)
  262.         {
  263.             echo $this->parse($mainTemplate);
  264.         }
  265.         
  266.         /**
  267.          * Escapes and assigns values
  268.          * 
  269.          * @param object 
  270.          * @param array $values 
  271.          * @access public
  272.          */
  273.         public static function escapeAndAssignArray(&$t$values)
  274.         {
  275.             $t->assignArray(self::escapeArray($values));
  276.         }
  277.         
  278.         
  279.         /**
  280.          * Escapes the values in the array
  281.          * 
  282.          * @param array $values array withe values to be escaped
  283.          * @return array the escaped array
  284.          */
  285.         static public function escapeArray($values)
  286.         {
  287.             foreach ($values as $key => $value{
  288.                 if (strncmp($key'%%HTML_'7)) {
  289.                     $values[$keymiI18N::htmlEscape($value);
  290.                 }
  291.             }
  292.             return $values;
  293.         }
  294.         
  295.         
  296.         /**
  297.          * Assigns a value to a specify main page element
  298.          * 
  299.          * @access public
  300.          * @param string $name name of the main page element
  301.          * @param mixed $value value of the main page element
  302.          */
  303.         public function assign($name$value)
  304.         {
  305.             $this->_mainPageElements[$name$value;
  306.         }
  307.         
  308.         /**
  309.          * In this function subclasses will add table specific processing
  310.          * 
  311.          * @access protected
  312.          * @param array $rows readed rows from the database
  313.          */
  314.         protected function addUiElements(&$rows)
  315.         {
  316.             /* in this function subclasses will add table specific processing */
  317.         }
  318.         
  319.         
  320.         /**
  321.          * In this function subclasses will add specific elements to the main
  322.          * template page
  323.          * 
  324.          * @access protected
  325.          * @param object $t of class miTemplateParser() or its subclasses
  326.          */
  327.         protected function addMainUiElements(&$t)
  328.         {
  329.             /*
  330.              * in this function subclasses will add specific elements to the main
  331.              * template page
  332.              */
  333.         }
  334.     }
  335. ?>

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