<?php /** * @package RSForm! Pro * @copyright (c) 2007-2019 www.rsjoomla.com * @link https://www.rsjoomla.com * @license GNU General Public License http://www.gnu.org/licenses/gpl-3.0.en.html */ defined('_JEXEC') or die; use Joomla\CMS\Factory; class RSFormProQuickFields { public static function getFieldNames($type = 'all') { static $done; static $fieldsets = array(); static $all = array(); static $required = array(); static $hidden = array(); static $pages = array(); if (!$done) { // Get field properties first $mainframe = Factory::getApplication(); $formId = Factory::getApplication()->input->getInt('formId'); $db = Factory::getDbo(); $query = $db->getQuery(true); $query->select($db->qn('c.ComponentId')) ->select($db->qn('c.ComponentTypeId')) ->select($db->qn('ct.ComponentTypeName')) ->from($db->qn('#__rsform_components', 'c')) ->join('LEFT', $db->qn('#__rsform_component_types', 'ct') .'ON ('.$db->qn('ct.ComponentTypeId').'='.$db->qn('c.ComponentTypeId').')') ->where($db->qn('c.FormId').'='.$db->q($formId)) ->where($db->qn('c.Published').'='.$db->q(1)) ->order($db->qn('c.Order').' '.$db->escape('asc')); if ($components = $db->setQuery($query)->loadObjectList()) { $data = RSFormProHelper::getComponentProperties($components); $i = 0; foreach ($components as $component) { if (!empty($data[$component->ComponentId])) { $properties =& $data[$component->ComponentId]; if (isset($properties['NAME'])) { // Populate the 'all' array $componentPlaceholders = array( 'name' => $properties['NAME'], 'id' => $component->ComponentTypeId, 'generate' => array(), 'display' => array() ); // Add caption placeholders only if captions exist. if (isset($properties['CAPTION'])) { $componentPlaceholders['generate'][] = '{' . $properties['NAME'] . ':caption}'; $componentPlaceholders['display'][] = '{' . $properties['NAME'] . ':caption}'; } // Body placeholder $componentPlaceholders['generate'][] = '{' . $properties['NAME'] . ':body}'; // Add description placeholders only if a description exists. if (isset($properties['DESCRIPTION'])) { $componentPlaceholders['generate'][] = '{' . $properties['NAME'] . ':description}'; $componentPlaceholders['generate'][] = '{' . $properties['NAME'] . ':descriptionhtml}'; } // Validation placeholder $componentPlaceholders['generate'][] = '{' . $properties['NAME'] . ':validation}'; $componentPlaceholders['generate'][] = '{' . $properties['NAME'] . ':errorClass}'; // Value placeholder $componentPlaceholders['display'][] = '{' . $properties['NAME'] . ':value}'; if ($component->ComponentTypeId == RSFORM_FIELD_FILEUPLOAD) { $componentPlaceholders['display'][] = '{' . $properties['NAME'] . ':path}'; $componentPlaceholders['display'][] = '{' . $properties['NAME'] . ':localpath}'; $componentPlaceholders['display'][] = '{' . $properties['NAME'] . ':filename}'; $componentPlaceholders['display'][] = '{' . $properties['NAME'] . ':image}'; $componentPlaceholders['display'][] = '{' . $properties['NAME'] . ':localimage}'; $componentPlaceholders['display'][] = '{' . $properties['NAME'] . ':count}'; } if ($component->ComponentTypeId == RSFORM_FIELD_GMAPS) { $componentPlaceholders['display'][] = '{' . $properties['NAME'] . ':map}'; } if (isset($properties['ITEMS'])) { $componentPlaceholders['display'][] = '{' . $properties['NAME'] . ':text}'; if (strpos($properties['ITEMS'], '[p') !== false) { $componentPlaceholders['display'][] = '{' . $properties['NAME'] . ':price}'; } } $mainframe->triggerEvent('onRsformAfterCreateQuickAddPlaceholders', array(&$componentPlaceholders, $component->ComponentTypeId)); $all[] = $componentPlaceholders; // check if the field is required $isRequired = false; $propRequired = self::getProperty($properties, 'REQUIRED'); $propImagetype = self::getProperty($properties, 'IMAGETYPE'); if ($propRequired || // Add required fields (!is_null($propImagetype) && $propImagetype != 'INVISIBLE') || // Add CAPTCHA fields (in_array($component->ComponentTypeId, RSFormProHelper::$captchaFields)) // Add ReCAPTCHA fields ) { $isRequired = true; // Populate the 'required' array $required[] = $properties['NAME']; } // Populate the 'hidden' array if (isset($properties['LAYOUTHIDDEN']) && $properties['LAYOUTHIDDEN'] == 'YES') { $hidden[] = $properties['NAME']; } // check if the field is a pagebreak $pagebreak = false; if ($component->ComponentTypeId == RSFORM_FIELD_PAGEBREAK) { $pagebreak = true; } $fieldsets[$i][(($component->ComponentTypeName == 'hidden' || $component->ComponentTypeName == 'ticket') ? 'hidden':'visible')][] = array('data' => $properties, 'required' => $isRequired, 'pagebreak' => $pagebreak); } if ($component->ComponentTypeId == RSFORM_FIELD_PAGEBREAK) { // Populate the 'pages' array $pages[] = $properties['NAME']; $i++; } } } } $done = true; } return $$type; } public static function getProperty($fieldData, $prop, $default=null) { // Special case, we no longer use == 'YES' or == 'NO' if (isset($fieldData[$prop])) { if ($fieldData[$prop] === 'YES') { return true; } else if ($fieldData[$prop] === 'NO') { return false; } else { return $fieldData[$prop]; } } if ($default === 'YES') { return true; } elseif ($default === 'NO') { return false; } else { return $default; } } }