Пример #1
0
 /**
  * Method to get the field options.
  *
  * @return  array  The field option objects.
  */
 protected function getOptions()
 {
     $options = array();
     // Initialize some field attributes.
     $key = $this->element['key_field'] ? (string) $this->element['key_field'] : 'value';
     $value = $this->element['value_field'] ? (string) $this->element['value_field'] : (string) $this->element['name'];
     $applyAccess = $this->element['apply_access'] ? (string) $this->element['apply_access'] : 'false';
     $modelName = (string) $this->element['model'];
     $nonePlaceholder = (string) $this->element['none'];
     $translate = empty($this->element['translate']) ? 'true' : (string) $this->element['translate'];
     $translate = in_array(strtolower($translate), array('true', 'yes', '1', 'on')) ? true : false;
     if (!empty($nonePlaceholder)) {
         $options[] = JHtml::_('select.option', null, JText::_($nonePlaceholder));
     }
     // Process field atrtibutes
     $applyAccess = strtolower($applyAccess);
     $applyAccess = in_array($applyAccess, array('yes', 'on', 'true', '1'));
     // Explode model name into model name and prefix
     $parts = F0FInflector::explode($modelName);
     $mName = ucfirst(array_pop($parts));
     $mPrefix = F0FInflector::implode($parts);
     // Get the model object
     $config = array('savestate' => 0);
     $model = F0FModel::getTmpInstance($mName, $mPrefix, $config);
     if ($applyAccess) {
         $model->applyAccessFiltering();
     }
     // Process state variables
     foreach ($this->element->children() as $stateoption) {
         // Only add <option /> elements.
         if ($stateoption->getName() != 'state') {
             continue;
         }
         $stateKey = (string) $stateoption['key'];
         $stateValue = (string) $stateoption;
         $model->setState($stateKey, $stateValue);
     }
     // Set the query and get the result list.
     $items = $model->getItemList(true);
     // Build the field options.
     if (!empty($items)) {
         foreach ($items as $item) {
             if ($translate == true) {
                 $options[] = JHtml::_('select.option', $item->{$key}, JText::_($item->{$value}));
             } else {
                 $options[] = JHtml::_('select.option', $item->{$key}, $item->{$value});
             }
         }
     }
     // Merge any additional options in the XML definition.
     $options = array_merge(parent::getOptions(), $options);
     return $options;
 }
Пример #2
0
 /**
  * Create a custom field object instance
  *
  * @param   array                       $config  Custom configuration parameters
  */
 public function __construct(array $config = array())
 {
     // Set up the field type
     if (!isset($config['field_type'])) {
         if (empty($this->fieldType)) {
             $parts = F0FInflector::explode(get_called_class());
             $type = strtolower(array_pop($parts));
             $config['field_type'] = $type;
         } else {
             $config['field_type'] = $this->fieldType;
         }
     }
     $this->fieldType = $config['field_type'];
 }
Пример #3
0
 /**
  * Returns current view object
  *
  * @param   array  $config  Configuration variables for the model
  *
  * @return  F0FView  The global instance of the view object (singleton)
  */
 public final function getThisView($config = array())
 {
     if (!is_object($this->_viewObject)) {
         // Make sure $config is an array
         if (is_object($config)) {
             $config = (array) $config;
         } elseif (!is_array($config) || empty($config)) {
             // array_merge is required to create a copy instead of assigning by reference
             $config = array_merge($this->config);
         }
         $prefix = null;
         $viewName = null;
         $viewType = null;
         if (!empty($this->viewName)) {
             $parts = F0FInflector::explode($this->viewName);
             $viewName = ucfirst(array_pop($parts));
             $prefix = F0FInflector::implode($parts);
         } else {
             $prefix = ucfirst($this->bareComponent) . 'View';
             $viewName = ucfirst($this->view);
         }
         $document = F0FPlatform::getInstance()->getDocument();
         if ($document instanceof JDocument) {
             $viewType = $document->getType();
         } else {
             $viewType = $this->input->getCmd('format', 'html');
         }
         if ($viewType == 'html' && $this->hasForm) {
             $viewType = 'form';
         }
         if (!array_key_exists('input', $config) || !$config['input'] instanceof F0FInput) {
             $config['input'] = $this->input;
         }
         $config['input']->set('base_path', $this->basePath);
         $this->_viewObject = $this->getView($viewName, $viewType, $prefix, $config);
     }
     return $this->_viewObject;
 }
Пример #4
0
 /**
  * Database iterator constructor.
  *
  * @param   mixed   $cursor  The database cursor.
  * @param   string  $column  An option column to use as the iterator key.
  * @param   string  $class   The table class of the returned objects.
  * @param   array   $config  Configuration parameters to push to the table class
  *
  * @throws  InvalidArgumentException
  */
 public function __construct($cursor, $column = null, $class, $config = array())
 {
     // Figure out the type and prefix of the class by the class name
     $parts = F0FInflector::explode($class);
     if (count($parts) != 3) {
         throw new InvalidArgumentException('Invalid table name, expected a pattern like ComponentTableFoobar got ' . $class);
     }
     $this->_tableObject = F0FTable::getInstance($parts[2], ucfirst($parts[0]) . ucfirst($parts[1]));
     $this->cursor = $cursor;
     $this->class = 'stdClass';
     $this->_column = $column;
     $this->_fetched = 0;
     $this->next();
 }
Пример #5
0
 /**
  * Normalise the parameters of a relation, guessing missing values
  *
  * @param   boolean  $pivot          Is this a many to many relation involving a pivot table?
  * @param   string   $itemName       is how it will be known locally to the getRelatedItems method (plural)
  * @param   string   $tableClass     if skipped it is defined automatically as ComponentnameTableItemname
  * @param   string   $localKey       is the column containing our side of the FK relation, default: componentname_itemname_id
  * @param   string   $remoteKey      is the remote table's FK column, default: componentname_itemname_id
  * @param   string   $ourPivotKey    is the column containing our side of the FK relation in the pivot table, default: $localKey
  * @param   string   $theirPivotKey  is the column containing the other table's side of the FK relation in the pivot table, default $remoteKey
  * @param   string   $pivotTable     is the name of the glue (pivot) table, default: #__componentname_thisclassname_itemname with plural items (e.g. #__foobar_users_roles)
  *
  * @return  void
  */
 protected function normaliseParameters($pivot = false, &$itemName, &$tableClass, &$localKey, &$remoteKey, &$ourPivotKey, &$theirPivotKey, &$pivotTable)
 {
     // Get a default table class if none is provided
     if (empty($tableClass)) {
         $tableClassParts = explode('_', $itemName, 3);
         if (count($tableClassParts) == 1) {
             array_unshift($tableClassParts, $this->componentName);
         }
         if ($tableClassParts[0] == 'joomla') {
             $tableClassParts[0] = 'J';
         }
         $tableClass = ucfirst($tableClassParts[0]) . 'Table' . ucfirst(F0FInflector::singularize($tableClassParts[1]));
     }
     // Make sure we have both a local and remote key
     if (empty($localKey) && empty($remoteKey)) {
         // WARNING! If we have a pivot table, this behavior is wrong!
         // Infact if we have `parts` and `groups` the local key should be foobar_part_id and the remote one foobar_group_id.
         // However, this isn't a real issue because:
         // 1. we have no way to detect the local key of a multiple relation
         // 2. this scenario never happens, since, in this class, if we're adding a multiple relation we always supply the local key
         $tableClassParts = F0FInflector::explode($tableClass);
         $localKey = $tableClassParts[0] . '_' . $tableClassParts[2] . '_id';
         $remoteKey = $localKey;
     } elseif (empty($localKey) && !empty($remoteKey)) {
         $localKey = $remoteKey;
     } elseif (!empty($localKey) && empty($remoteKey)) {
         if ($pivot) {
             $tableClassParts = F0FInflector::explode($tableClass);
             $remoteKey = $tableClassParts[0] . '_' . $tableClassParts[2] . '_id';
         } else {
             $remoteKey = $localKey;
         }
     }
     // If we don't have a pivot table nullify the relevant variables and return
     if (!$pivot) {
         $ourPivotKey = null;
         $theirPivotKey = null;
         $pivotTable = null;
         return;
     }
     if (empty($ourPivotKey)) {
         $ourPivotKey = $localKey;
     }
     if (empty($theirPivotKey)) {
         $theirPivotKey = $remoteKey;
     }
     if (empty($pivotTable)) {
         $pivotTable = '#__' . strtolower($this->componentName) . '_' . strtolower(F0FInflector::pluralize($this->tableType)) . '_';
         $itemNameParts = explode('_', $itemName);
         $lastPart = array_pop($itemNameParts);
         $pivotTable .= strtolower($lastPart);
     }
 }