1 <?php
  2 /**
  3  * @package    FrameworkOnFramework
  4  * @subpackage form
  5  * @copyright   Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba Ltd. All rights reserved.
  6  * @license    GNU General Public License version 2 or later; see LICENSE.txt
  7  */
  8 // Protect from unauthorized access
  9 defined('FOF_INCLUDED') or die;
 10 
 11 JFormHelper::loadFieldClass('language');
 12 
 13 /**
 14  * Form Field class for FOF
 15  * Available site languages
 16  *
 17  * @package  FrameworkOnFramework
 18  * @since    2.0
 19  */
 20 class FOFFormFieldLanguage extends JFormFieldLanguage implements FOFFormField
 21 {
 22     protected $static;
 23 
 24     protected $repeatable;
 25 
 26     /** @var   FOFTable  The item being rendered in a repeatable form field */
 27     public $item;
 28 
 29     /** @var int A monotonically increasing number, denoting the row number in a repeatable view */
 30     public $rowid;
 31 
 32     /**
 33      * Method to get certain otherwise inaccessible properties from the form field object.
 34      *
 35      * @param   string  $name  The property name for which to the the value.
 36      *
 37      * @return  mixed  The property value or null.
 38      *
 39      * @since   2.0
 40      */
 41     public function __get($name)
 42     {
 43         switch ($name)
 44         {
 45             case 'static':
 46                 if (empty($this->static))
 47                 {
 48                     $this->static = $this->getStatic();
 49                 }
 50 
 51                 return $this->static;
 52                 break;
 53 
 54             case 'repeatable':
 55                 if (empty($this->repeatable))
 56                 {
 57                     $this->repeatable = $this->getRepeatable();
 58                 }
 59 
 60                 return $this->repeatable;
 61                 break;
 62 
 63             default:
 64                 return parent::__get($name);
 65         }
 66     }
 67 
 68     /**
 69      * Method to get the field options.
 70      *
 71      * @since 2.0
 72      *
 73      * @return  array  The field option objects.
 74      */
 75     protected function getOptions()
 76     {
 77         $options = parent::getOptions();
 78 
 79         $noneoption = $this->element['none'] ? $this->element['none'] : null;
 80 
 81         if ($noneoption)
 82         {
 83             array_unshift($options, JHtml::_('select.option', '*', JText::_($noneoption)));
 84         }
 85 
 86         return $options;
 87     }
 88 
 89     /**
 90      * Get the rendering of this field type for static display, e.g. in a single
 91      * item view (typically a "read" task).
 92      *
 93      * @since 2.0
 94      *
 95      * @return  string  The field HTML
 96      */
 97     public function getStatic()
 98     {
 99         $class = $this->element['class'] ? ' class="' . (string) $this->element['class'] . '"' : '';
100 
101         return '<span id="' . $this->id . '" ' . $class . '>' .
102             htmlspecialchars(FOFFormFieldList::getOptionName($this->getOptions(), $this->value), ENT_COMPAT, 'UTF-8') .
103             '</span>';
104     }
105 
106     /**
107      * Get the rendering of this field type for a repeatable (grid) display,
108      * e.g. in a view listing many item (typically a "browse" task)
109      *
110      * @since 2.0
111      *
112      * @return  string  The field HTML
113      */
114     public function getRepeatable()
115     {
116         $class = $this->element['class'] ? (string) $this->element['class'] : '';
117 
118         return '<span class="' . $this->id . ' ' . $class . '">' .
119             htmlspecialchars(FOFFormFieldList::getOptionName($this->getOptions(), $this->value), ENT_COMPAT, 'UTF-8') .
120             '</span>';
121     }
122 }
123