/** * @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); }