/**
  * @since       1.2.0
  **/
 public static function preparationContentSimple($type, &$data, $context, $excluded = array(), JRegistry $params = null)
 {
     switch ($type) {
         case self::PREPARE_CONTENT_FIELDS:
             FieldsandfiltersFieldsHelper::preparationContent($data, $context, null, null, (array) $excluded);
             break;
         case self::PREPARE_CONTENT_SYSTEM:
             $data = JHtml::_('content.prepare', $data, $params, $context);
             break;
     }
 }
 /**
  * @since       1.0.0
  */
 public function onFieldsandfiltersPrepareElementFields($context, $item, $isNew, $state)
 {
     if ($isNew) {
         return true;
     }
     if ($context == 'com_fieldsandfilters.field' && isset($item->type) && $item->type == $this->_name) {
         if (!empty($item->values->data) && !is_object($item->values->data)) {
             $_data = new JRegistry($item->values->data);
             $_data = new JObject($_data->toObject());
             $item->values = $_data;
         }
     } elseif ($context == 'com_fieldsandfilters.element') {
         $data = $item->get('fields', new JObject())->get('data', new JObject());
         $fields = FieldsandfiltersFieldsHelper::getFieldsByTypeIDColumnFieldType($item->get('content_type_id'))->get($this->_name);
         if ($fields) {
             $fields = is_array($fields) ? $fields : array($fields);
             while ($field = array_shift($fields)) {
                 $_data = $data->get($field->id, '');
                 if (empty($_data) || is_object($_data)) {
                     continue;
                 }
                 $_data = new JRegistry($_data);
                 $_data = new JObject($_data->toObject());
                 $data->set($field->id, $_data);
             }
         }
     }
     return true;
 }
 /**
  * Method to save the form data.
  *
  * @param   array $data The form data.
  *
  * @return  boolean  True on success, False on error.
  *
  * @since       1.1.0
  */
 public function save($data)
 {
     $app = JFactory::getApplication();
     $table = $this->getTable();
     $key = $table->getKeyName();
     $pk = !empty($data[$key]) ? $data[$key] : (int) $this->getState($this->getName() . '.id');
     $isNew = true;
     // Include the content plugins for the on save events.
     JPluginHelper::importPlugin('content');
     JPluginHelper::importPlugin('fieldsandfilterstypes');
     // Allow an exception to be thrown.
     try {
         // Load the row if saving an existing record.
         if ($pk > 0) {
             $table->load($pk);
             $isNew = false;
         }
         // Bind the data.
         if (!$table->bind($data)) {
             throw new Exception($table->getError());
         }
         // Prepare the row for saving
         $this->prepareTable($table);
         // Check the data.
         if (!$table->check()) {
             throw new Exception($table->getError());
         }
         // Load PluginExtensions Helper
         $extensionName = ($extension = FieldsandfiltersFactory::getExtensions()->getExtensionsByTypeIDPivot('content_type_id', $table->content_type_id)->get($table->content_type_id)) ? $extension->name : '';
         $context = $this->option . '.' . $this->name . '.' . $extensionName;
         // Trigger the onContentBeforeSave event.
         $result = $app->triggerEvent($this->event_before_save, array($context, $table, $isNew));
         if (in_array(false, $result, true)) {
             throw new Exception($table->getError());
         }
         $tableFields = (array) $table->get('fields');
         // Get old item
         $item = $this->getItem($table->{$key});
         // Store the data.
         if (!$table->store()) {
             throw new Exception($table->getError());
         }
         $table->set('fields', JArrayHelper::toObject($tableFields, 'JObject'));
         // Store fields data and connections
         // Trigger the onFieldsandfiltersBeforeSaveData event.
         $result = $app->triggerEvent('onFieldsandfiltersBeforeSaveData', array($this->option . '.' . $this->name, $table, $item, $isNew));
         // array($newItem, $oldItem)
         if (in_array(false, $result, true)) {
             throw new Exception($table->getError());
         }
         $item = $item->get('fields', new JObject());
         $dataItem = $item->get('data', new JObject());
         $connectionsItem = $item->get('connections', new JObject());
         $tableFields = $table->get('fields', new JObject());
         $data = $tableFields->get('data', new JObject());
         $connections = $tableFields->get('connections', new JObject());
         $filterMode = (array) FieldsandfiltersModes::getMode(FieldsandfiltersModes::MODE_FILTER, array());
         $otherMode = (array) FieldsandfiltersModes::getModes(null, array(), true, $filterMode);
         $fields = FieldsandfiltersFieldsHelper::getFieldsByTypeIDColumnFieldType($table->content_type_id);
         $fields = KextensionsArray::flatten(get_object_vars($fields));
         while ($field = array_shift($fields)) {
             $_data = (string) $data->get($field->id, '');
             $_dataItem = (string) $dataItem->get($field->id, '');
             $_connections = (array) $connections->get($field->id, new JObject())->getProperties(true);
             $_connectionsItem = (array) $connectionsItem->get($field->id, new JObject())->getProperties(true);
             // other (field/static)
             if (in_array($field->mode, $otherMode) && (!empty($_data) || !empty($_dataItem))) {
                 $tableObject = new stdClass();
                 $tableObject->field_id = (int) $field->id;
                 // delete text
                 if (!empty($_dataItem) && empty($_data)) {
                     $table->deleteData($tableObject);
                 } elseif (empty($_dataItem) && !empty($_data)) {
                     $tableObject->data = $_data;
                     $table->insertData($tableObject);
                 } elseif ($_dataItem != $_data) {
                     $tableObject->data = $_data;
                     $table->updateData($tableObject);
                 }
             } elseif (in_array($field->mode, $filterMode) && (!empty($_connections) || !empty($_connectionsItem))) {
                 $tableObject = new stdClass();
                 $tableObject->field_id = (int) $field->id;
                 $field_valuesID = array_keys($field->values->getProperties(true));
                 $_connections = array_intersect($field_valuesID, $_connections);
                 $__connections = array_unique(array_diff($_connections, $_connectionsItem));
                 JArrayHelper::toInteger($__connections);
                 if (!empty($__connections)) {
                     $tableObject->field_value_id = $__connections;
                     $table->insertConnections($tableObject);
                 }
                 $__connections = array_unique(array_diff($_connectionsItem, $_connections));
                 JArrayHelper::toInteger($__connections);
                 if (!empty($__connections)) {
                     $tableObject = new stdClass();
                     $tableObject->field_value_id = $__connections;
                     $table->deleteConnections($tableObject);
                 }
             }
         }
         // Trigger the onContentAfterSave event.
         $app->triggerEvent($this->event_after_save, array($context, $table, $isNew));
         // Clean the cache.
         $this->cleanCache();
     } catch (Exception $e) {
         $this->setError($e->getMessage());
         return false;
     }
     $pkName = $table->getKeyName();
     if (isset($table->{$pkName})) {
         $this->setState($this->getName() . '.id', $table->{$pkName});
     }
     $this->setState($this->getName() . '.new', $isNew);
     return true;
 }
 /**
  * @param    JForm $form The form to be altered.
  * @param    array $data The associated data for the form.
  *
  * @return    boolean
  * @since       1.0.0
  */
 public function onFieldsandfiltersPrepareForm(JForm $form, $data)
 {
     $context = $form->getName();
     if (!($context == $this->_context || $context == 'com_fieldsandfilters.elements.filter')) {
         return true;
     }
     $app = JFactory::getApplication();
     if ($context == 'com_fieldsandfilters.elements.filter') {
         $form->addFieldPath(JPATH_ADMINISTRATOR . '/components/com_categories/models/fields');
         $addform = new SimpleXMLElement('<form />');
         $fields = $addform->addChild('fields');
         $fields->addAttribute('name', 'filter');
         $field = $fields->addChild('field');
         $field->addAttribute('name', 'item_category');
         $field->addAttribute('type', 'category');
         $field->addAttribute('label', 'JOPTION_FILTER_CATEGORY');
         $field->addAttribute('description', 'JOPTION_FILTER_CATEGORY_DESC');
         $field->addAttribute('extension', 'com_content');
         $field->addAttribute('onchange', 'this.form.submit();');
         KextensionsXML::addOptionsNode($field, array('JOPTION_SELECT_CATEGORY' => ''));
         $form->load($addform, false);
     } elseif ($context == $this->_context) {
         if ($app->isSite() && !$this->params->get('frontend_edit', false) || !($extension = FieldsandfiltersFactory::getExtensions()->getExtensionsByName($this->_name)->get($this->_name))) {
             return true;
         }
         JModelLegacy::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_fieldsandfilters/models', 'FieldsandfiltersModel');
         if (!($elementModel = JModelLegacy::getInstance('element', 'FieldsandfiltersModel', array('ignore_request' => true, 'table_path' => JPATH_ADMINISTRATOR . '/components/com_fieldsandfilters/tables')))) {
             return true;
         }
         // Load Extension Language
         KextensionsLanguage::load('com_fieldsandfilters', JPATH_ADMINISTRATOR);
         $fieldsForm = new KextensionsForm($this->_context . '.' . $this->_name);
         $fieldsData = FieldsandfiltersFieldsHelper::getFieldsByTypeIDColumnFieldType($extension->content_type_id);
         $formPath = $app->isAdmin() ? 'attribs.fieldsandfilters' : 'fieldsandfilters';
         $fieldsForm->setPath($formPath);
         $fieldsetXML = new SimpleXMLElement('<fieldset />');
         $fieldsetXML->addAttribute('name', 'fieldsandfilters');
         $fieldsetXML->addAttribute('label', 'COM_FIELDSANDFILTERS');
         // $fieldsetXML->addAttribute( 'description', 'COM_FIELDSANDFILTERS_FIELDSET_DESC' );
         $fielsXML = $fieldsetXML->addChild('fields');
         $fielsXML->addAttribute('name', 'fieldsandfilters');
         $fieldXML = $fielsXML->addChild('field');
         $fieldXML->addAttribute('name', '_fieldsandfilters');
         $fieldXML->addAttribute('type', 'hidden');
         $fieldXML->addAttribute('fieldset', 'fieldsandfilters');
         if (!empty($data)) {
             $data = (object) $data;
             $elementModel->setState($elementModel->getName() . '.item_id', $data->id);
             $elementModel->setState($elementModel->getName() . '.content_type_id', $extension->content_type_id);
             $elementItem = $elementModel->getItem();
         }
         $isNew = empty($elementItem->id);
         JPluginHelper::importPlugin('fieldsandfilterstypes');
         // Trigger the onFieldsandfiltersPrepareFormField event.
         $app->triggerEvent('onFieldsandfiltersPrepareFormField', array($fieldsForm, $fieldsData, $isNew));
         if ($fieldsFormXML = $fieldsForm->getFormFields()) {
             // Load the XML Helper
             KextensionsXML::setFields($fielsXML, $fieldsFormXML);
             $form->setField($fieldsetXML, $app->isAdmin() ? 'attribs' : null);
             // For joomla 2.5 && Key Reference
             if (!FieldsandfiltersFactory::isVersion()) {
                 $fieldsetXML = new SimpleXMLElement('<fieldset />');
                 $fieldsetXML->addAttribute('name', 'key_reference');
                 $fieldsetXML->addAttribute('label', 'Key Reference');
                 $form->setField($fieldsetXML, 'attribs');
             }
             if ($default = $fieldsForm->getData()) {
                 $form->bind($default);
             }
             if (!$isNew) {
                 $data = new JRegistry();
                 $data->set($formPath, $elementItem->get('fields', new JObject()));
                 $form->bind($data);
             }
         }
         return true;
     }
 }
 /**
  * @since       1.2.0
  */
 public function onAfterRender()
 {
     if (JFactory::getApplication()->isAdmin() || !$this->params->get('prepare_after_render', 0) || !($syntax = $this->params->get('syntax', '#{%s}'))) {
         return;
     }
     $buffer = JResponse::getBody();
     FieldsandfiltersFieldsHelper::preparationContent($buffer, 'system', null, null, array(), $syntax, $this->params->get('syntax_type', FieldsandfiltersFieldsHelper::SYNTAX_SIMPLE));
     JResponse::setBody($buffer);
 }