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

Source for file Control.class.php

Documentation is available at Control.class.php

  1. <?php
  2. /**
  3.  * Содержит класс Control
  4.  *
  5.  * @package energine
  6.  * @subpackage share
  7.  * @author dr.Pavka
  8.  * @copyright Energine 2006
  9.  * @version $Id$
  10.  */
  11.  
  12. //require_once('core/framework/Object.class.php');
  13.  
  14. /**
  15.  * Элемент управления панели инструментов
  16.  *
  17.  * @package energine
  18.  * @abstract
  19.  * @author dr.Pavka
  20.  */
  21. abstract class Control extends Object {
  22.     /**
  23.      * Имя тега элемента
  24.      */
  25.     const TAG_NAME = 'control';
  26.  
  27.     /**
  28.      * Документ
  29.      *
  30.      * @var DOMDocument 
  31.      * @access protected
  32.      */
  33.     protected $doc;
  34.  
  35.     /**
  36.      * Тип элемента
  37.      *
  38.      * @access protected
  39.      * @var string 
  40.      */
  41.     protected $type = false;
  42.  
  43.     /**
  44.      * Доступность элемента
  45.      *
  46.      * @access private
  47.      * @var boolean 
  48.      */
  49.     private $disabled = false;
  50.  
  51.     /**
  52.      * Дополнительные атрибуты
  53.      *
  54.      * @var array 
  55.      * @access private
  56.      */
  57.     private $attributes = array();
  58.  
  59.     /**
  60.      * Панель управления к которому привязан элемент управления
  61.      *
  62.      * @var ToolBar 
  63.      * @access private
  64.      */
  65.     private $toolbar;
  66.  
  67.     /**
  68.      * Индекс элемента.
  69.      * Присваивается панелью инструментов после присоединения элемента.
  70.      *
  71.      * @var int 
  72.      * @access private
  73.      */
  74.     private $index = false;
  75.  
  76.     /**
  77.      * Конструктор
  78.      *
  79.      * @param string $id 
  80.      * @param string $action 
  81.      * @param string $image 
  82.      * @param string $title 
  83.      * @param string $tooltip 
  84.      * @access public
  85.      */
  86.     public function __construct($id{
  87.         parent::__construct();
  88.         $this->setAttribute('id'$id);
  89.         $this->doc = new DOMDocument('1.0''UTF-8');
  90.     }
  91.  
  92.     /**
  93.      * Привязываем элемент управления к панели управления
  94.      *
  95.      * @param Toolbar 
  96.      * @return void 
  97.      * @access public
  98.      */
  99.  
  100.     public function attach($toolbar{
  101.         $this->toolbar = $toolbar;
  102.     }
  103.  
  104.     /**
  105.      * Возвращает панель управления
  106.      *
  107.      * @return Toolbar 
  108.      * @access protected
  109.      */
  110.  
  111.     protected function getToolbar({
  112.         return $this->toolbar;
  113.     }
  114.  
  115.     /**
  116.      * Устанавливает индекс элемента.
  117.      * Вызывается из панели инструментов (Toolbar).
  118.      *
  119.      * @param int 
  120.      * @return void 
  121.      * @access public
  122.      */
  123.     public function setIndex($index{
  124.         $this->index = $index;
  125.     }
  126.  
  127.     /**
  128.      * Возвращает индекс элемента.
  129.      * Вызывается из панели инструментов (Toolbar).
  130.      *
  131.      * @return int 
  132.      * @access public
  133.      */
  134.     public function getIndex({
  135.         if ($this->index === false{
  136.             throw new SystemException('ERR_DEV_NO_CONTROL_INDEX'SystemException::ERR_DEVELOPER);
  137.         }
  138.         return $this->index;
  139.     }
  140.  
  141.     /**
  142.      * Загрузка элемента из XML-описания.
  143.      *
  144.      * @param SimpleXMLElement $description 
  145.      * @return void 
  146.      * @access public
  147.      */
  148.     public function loadFromXml(SimpleXMLElement $description{
  149.         if (!isset($description['type'])) {
  150.             throw new SystemException('ERR_DEV_NO_CONTROL_TYPE'SystemException::ERR_DEVELOPER);
  151.         }
  152.  
  153.         $attr $description->attributes();
  154.  
  155.         $this->setAttribute('mode'
  156.             FieldDescription::computeRights(
  157.                 $this->getToolbar()->getComponent()->document->getRights()
  158.                 !is_null($attr['ro_rights'])?(int)$attr['ro_rights']:null
  159.                 !is_null($attr['fc_rights'])?(int)$attr['fc_rights']:null
  160.             )
  161.         );
  162.         unset($attr['ro_rights']);
  163.         unset($attr['fc_rights']);
  164.         foreach ($attr as $key => $value{
  165.             if (isset($this->$key)) {
  166.                 $this->$key = (string)$value;
  167.             }
  168.             else {
  169.                 $this->setAttribute($key(string)$value);
  170.             }
  171.         }
  172.     }
  173.  
  174.     /**
  175.      * Отключает элемент (делает его недоступным).
  176.      *
  177.      * @return void 
  178.      * @access public
  179.      */
  180.     public function disable({
  181.         $this->disabled = true;
  182.     }
  183.  
  184.     /**
  185.      * Включает элемент.
  186.      *
  187.      * @return void 
  188.      * @access public
  189.      */
  190.     public function enable({
  191.         $this->disabled = false;
  192.     }
  193.  
  194.     /**
  195.      * Возвращает тип элемента.
  196.      *
  197.      * @return string 
  198.      * @access public
  199.      */
  200.     public function getType({
  201.         if (!$this->type{
  202.             throw new SystemException('ERR_DEV_NO_CONTROL_TYPE'SystemException::ERR_DEVELOPER);
  203.         }
  204.         return $this->type;
  205.     }
  206.  
  207.     /**
  208.      * Устанавливает значение атрибута.
  209.      *
  210.      * @param string 
  211.      * @param mixed 
  212.      * @return void 
  213.      * @access public
  214.      */
  215.  
  216.     public function setAttribute($attrName$attrValue{
  217.         $this->attributes[$attrName$attrValue;
  218.     }
  219.  
  220.     /**
  221.      * Возвращает значение атрибута.
  222.      *
  223.      * @param string 
  224.      * @return mixed 
  225.      * @access public
  226.      */
  227.     public function getAttribute($attrName{
  228.         if (isset($this->attributes[$attrName])) {
  229.             return $this->attributes[$attrName];
  230.         }
  231.         return false;
  232.     }
  233.     
  234.     /**
  235.      * Возвращает идентификатор
  236.      *
  237.      * @return string 
  238.      * @access public
  239.      */
  240.     public function getID({
  241.         return $this->getAttribute('id');
  242.     }
  243.  
  244.     /**
  245.      * Построение элемента управления.
  246.      *
  247.      * @return DOMNode 
  248.      * @access public
  249.      */
  250.     public function build({
  251.         $controlElem $this->doc->createElement(self::TAG_NAME);
  252.         foreach ($this->attributes as $attrName => $attrValue{
  253.             $controlElem->setAttribute($attrName$attrValue);
  254.         }
  255.         if ($this->disabled{
  256.             $controlElem->setAttribute('disabled''disabled');
  257.         }
  258.         $controlElem->setAttribute('type'$this->getType());
  259.         $this->doc->appendChild($controlElem);
  260.  
  261.         return $this->doc->documentElement;
  262.     }
  263.  
  264.     /**
  265.      * Переводит языко-зависимые атрибуты.
  266.      *
  267.      * @param array перечень атрибутов дялш перевода
  268.      * @return type 
  269.      * @access public
  270.      */
  271.     public function translate($attrs array('title''tooltip')) {
  272.         foreach ($attrs as $attrName{
  273.             $attrValue = (string)$this->getAttribute($attrName);
  274.             if ($attrValue{
  275.                 $this->setAttribute($attrNameDBWorker::_translate($attrValue));
  276.             }
  277.         }
  278.     }
  279. }
В создании документации нам помог: phpDocumentor