Server IP : 195.201.23.43 / Your IP : 18.188.100.195 Web Server : Apache System : Linux webserver2.vercom.be 5.4.0-192-generic #212-Ubuntu SMP Fri Jul 5 09:47:39 UTC 2024 x86_64 User : kdecoratie ( 1041) PHP Version : 7.1.33-63+ubuntu20.04.1+deb.sury.org+1 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/kdecoratie/public_html/plugins/fields/repeatable/ |
Upload File : |
<?php /** * @package Joomla.Plugin * @subpackage Fields.Repeatable * * @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ use Joomla\CMS\MVC\Model\BaseDatabaseModel; defined('_JEXEC') or die; JLoader::import('components.com_fields.libraries.fieldsplugin', JPATH_ADMINISTRATOR); /** * Repeatable plugin. * * @since 3.9.0 */ class PlgFieldsRepeatable extends FieldsPlugin { /** * Transforms the field into a DOM XML element and appends it as a child on the given parent. * * @param stdClass $field The field. * @param DOMElement $parent The field node parent. * @param JForm $form The form. * * @return DOMElement * * @since 3.9.0 */ public function onCustomFieldsPrepareDom($field, DOMElement $parent, JForm $form) { $fieldNode = parent::onCustomFieldsPrepareDom($field, $parent, $form); if (!$fieldNode) { return $fieldNode; } $readonly = false; if (!FieldsHelper::canEditFieldValue($field)) { $readonly = true; } $fieldNode->setAttribute('type', 'subform'); $fieldNode->setAttribute('multiple', 'true'); $fieldNode->setAttribute('layout', 'joomla.form.field.subform.repeatable-table'); // Build the form source $fieldsXml = new SimpleXMLElement('<form/>'); $fields = $fieldsXml->addChild('fields'); // Get the form settings $formFields = $field->fieldparams->get('fields'); // Add the fields to the form foreach ($formFields as $index => $formField) { $child = $fields->addChild('field'); $child->addAttribute('name', $formField->fieldname); $child->addAttribute('type', $formField->fieldtype); $child->addAttribute('readonly', $readonly); if (isset($formField->fieldfilter)) { $child->addAttribute('filter', $formField->fieldfilter); } } $fieldNode->setAttribute('formsource', $fieldsXml->asXML()); // Return the node return $fieldNode; } /** * The save event. * * @param string $context The context * @param JTable $item The article data * @param boolean $isNew Is new item * @param array $data The validated data * * @return boolean * * @since 3.9.0 */ public function onContentAfterSave($context, $item, $isNew, $data = array()) { // Create correct context for category if ($context == 'com_categories.category') { $context = $item->get('extension') . '.categories'; // Set the catid on the category to get only the fields which belong to this category $item->set('catid', $item->get('id')); } // Check the context $parts = FieldsHelper::extract($context, $item); if (!$parts) { return true; } // Compile the right context for the fields $context = $parts[0] . '.' . $parts[1]; // Loading the fields $fields = FieldsHelper::getFields($context, $item); if (!$fields) { return true; } // Get the fields data $fieldsData = !empty($data['com_fields']) ? $data['com_fields'] : array(); // Loading the model /** @var FieldsModelField $model */ $model = BaseDatabaseModel::getInstance('Field', 'FieldsModel', array('ignore_request' => true)); // Loop over the fields foreach ($fields as $field) { // Find the field of this type repeatable if ($field->type !== $this->_name) { continue; } // Determine the value if it is available from the data $value = key_exists($field->name, $fieldsData) ? $fieldsData[$field->name] : null; // Handle json encoded values if (!is_array($value)) { $value = json_decode($value, true); } // Setting the value for the field and the item $model->setFieldValue($field->id, $item->get('id'), json_encode($value)); } return true; } }Private