first commit
This commit is contained in:
@@ -0,0 +1,261 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Convert Forms
|
||||
* @version 3.2.12 Free
|
||||
*
|
||||
* @author Tassos Marinos <info@tassos.gr>
|
||||
* @link http://www.tassos.gr
|
||||
* @copyright Copyright © 2020 Tassos Marinos All Rights Reserved
|
||||
* @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
|
||||
*/
|
||||
|
||||
namespace ConvertForms;
|
||||
|
||||
defined('_JEXEC') or die('Restricted access');
|
||||
|
||||
use Joomla\Registry\Registry;
|
||||
use ConvertForms\Helper;
|
||||
|
||||
/**
|
||||
* ConvertForms Fields Helper Class
|
||||
*/
|
||||
class FieldsHelper
|
||||
{
|
||||
/**
|
||||
* List of available field groups and types
|
||||
*
|
||||
* Consider using a field class property in order to declare the field group instead.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $fields = [
|
||||
'common' => [
|
||||
'text',
|
||||
'textarea',
|
||||
'dropdown',
|
||||
'radio',
|
||||
'checkbox',
|
||||
'number',
|
||||
'email',
|
||||
'tel',
|
||||
'url',
|
||||
'submit',
|
||||
],
|
||||
'layout' => [
|
||||
'html',
|
||||
'heading',
|
||||
'emptyspace',
|
||||
'divider',
|
||||
],
|
||||
'advanced' => [
|
||||
'hidden',
|
||||
'datetime',
|
||||
'password',
|
||||
'fileupload',
|
||||
'termsofservice',
|
||||
'editor',
|
||||
'confirm',
|
||||
'rating',
|
||||
'rangeslider',
|
||||
'colorpicker',
|
||||
'captcha',
|
||||
'recaptcha',
|
||||
'recaptchav2invisible',
|
||||
'hcaptcha',
|
||||
'signature',
|
||||
'country',
|
||||
'currency'
|
||||
]
|
||||
];
|
||||
|
||||
/**
|
||||
* Returns a list of all available field groups and types
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function getFieldTypes()
|
||||
{
|
||||
$arr = [];
|
||||
|
||||
foreach (self::$fields as $group => $fields)
|
||||
{
|
||||
if (!count($fields))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$arr[$group] = array(
|
||||
'name' => $group,
|
||||
'title' => \JText::_('COM_CONVERTFORMS_FIELDGROUP_' . strtoupper($group))
|
||||
);
|
||||
|
||||
foreach ($fields as $key => $field)
|
||||
{
|
||||
$arr[$group]['fields'][] = array(
|
||||
'name' => $field,
|
||||
'title' => \JText::_('COM_CONVERTFORMS_FIELD_' . strtoupper($field)),
|
||||
'desc' => \JText::_('COM_CONVERTFORMS_FIELD_' . strtoupper($field) . '_DESC'),
|
||||
'class' => self::getFieldClass($field)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return $arr;
|
||||
}
|
||||
|
||||
/**
|
||||
* Render field control group used in the front-end
|
||||
*
|
||||
* @param object $fields The fields to render
|
||||
*
|
||||
* @return string The HTML output
|
||||
*/
|
||||
public static function render($fields)
|
||||
{
|
||||
$html = array();
|
||||
|
||||
foreach ($fields as $key => $field)
|
||||
{
|
||||
if (!isset($field['type']))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Skip unknown field types
|
||||
if (!$class = self::getFieldClass($field['type']))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$html[] = $class->setField($field)->getControlGroup();
|
||||
}
|
||||
|
||||
return implode(' ', $html);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs and returns the field type class
|
||||
*
|
||||
* @param String $name The field type name
|
||||
*
|
||||
* @return Mixed Object on success, Null on failure
|
||||
*/
|
||||
public static function getFieldClass($name, $field_data = null, $form_data = null)
|
||||
{
|
||||
$class = __NAMESPACE__ . '\\Field\\' . ucfirst($name);
|
||||
|
||||
if (!class_exists($class))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return new $class($field_data, $form_data);
|
||||
}
|
||||
|
||||
public static function prepare($form, $classPrefix = 'cf')
|
||||
{
|
||||
$params = $form['params'];
|
||||
|
||||
if (!is_array($form['fields']) || count($form['fields']) == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
$fields_ = [];
|
||||
|
||||
foreach ($form['fields'] as $key => $field)
|
||||
{
|
||||
$field['namespace'] = $form['id'];
|
||||
|
||||
// Field Classes
|
||||
$fieldClasses = [
|
||||
$classPrefix . "-input",
|
||||
isset($field['size']) ? $field['size'] : null,
|
||||
isset($field['inputcssclass']) ? $field['inputcssclass'] : null
|
||||
];
|
||||
|
||||
$field['class'] = implode(' ', $fieldClasses);
|
||||
$field['form'] = $form;
|
||||
|
||||
$fields_[] = $field;
|
||||
}
|
||||
|
||||
$globalCSSVars = [
|
||||
'color-primary' => '#4285F4',
|
||||
'color-success' => '#0F9D58',
|
||||
'color-danger' => '#DB4437',
|
||||
'color-warning' => '#F4B400',
|
||||
'color-default' => '#444',
|
||||
'color-grey' => '#ccc',
|
||||
];
|
||||
|
||||
$cssVars = [
|
||||
// Form settings
|
||||
'font' => trim($params->get('font')),
|
||||
'max-width' => ($params->get('autowidth', 'auto') == 'auto' ? null : (int) $params->get('width', 500) . 'px'),
|
||||
'background-color' => $params->get('bgcolor'),
|
||||
'border' => $params->get('borderstyle', 'solid') !== 'none' ? implode(' ', [$params->get('borderstyle', 'solid'), (int) $params->get('borderwidth', 2) . 'px', $params->get('bordercolor', '#000')]) : null,
|
||||
'border-radius' => (int) $params->get('borderradius', 0) . 'px',
|
||||
'padding' => $params->get('padding', 20) > 0 ? (int) $params->get('padding', 20) . 'px' : null,
|
||||
|
||||
// Label settings
|
||||
'label-color' => $params->get('labelscolor', '#888'),
|
||||
'label-size' => (int) $params->get('labelsfontsize', 15) . 'px',
|
||||
|
||||
// Input settings
|
||||
'input-color' => $params->get('inputcolor', '#888'),
|
||||
'input-text-align' => $params->get('inputalign', 'left'),
|
||||
'input-background-color' => $params->get('inputbg', '#fff'),
|
||||
'input-border-color' => $params->get('inputbordercolor', '#ccc'),
|
||||
'input-border-radius' => (int) $params->get('inputborderradius', '0') . 'px',
|
||||
'input-size' => (int) $params->get('inputfontsize', 15) . 'px',
|
||||
'input-padding' => (int) $params->get('inputvpadding', 11) . 'px ' . (int) $params->get('inputhpadding', '12') . 'px',
|
||||
];
|
||||
|
||||
// Background Image
|
||||
if ($params->get('bgimage', false))
|
||||
{
|
||||
$imgurl = intval($params->get("bgimage")) == 1 ? \JURI::root() . Helper::cleanLocalImage($params->get('bgfile')) : $params->get("bgurl");
|
||||
$cssVars['background-image'] = 'url' . '(' . $imgurl . ')';
|
||||
$cssVars['background-repeat'] = strtolower($params->get("bgrepeat"));
|
||||
$cssVars['background-size'] = strtolower($params->get("bgsize"));
|
||||
$cssVars['background-position'] = strtolower($params->get("bgposition"));
|
||||
}
|
||||
|
||||
$cssVarsGlobal = self::cssVarsToString($globalCSSVars, '.convertforms');
|
||||
$cssVarsForm = self::cssVarsToString($cssVars, '#cf_' . $form['id']);
|
||||
|
||||
$html = self::render($fields_);
|
||||
|
||||
if (\JFactory::getApplication()->isClient('site'))
|
||||
{
|
||||
Helper::addStyleDeclarationOnce($cssVarsGlobal);
|
||||
Helper::addStyleDeclarationOnce($cssVarsForm);
|
||||
} else
|
||||
{
|
||||
$html .= '
|
||||
<style>' . $cssVarsGlobal . $cssVarsForm . '</style>
|
||||
';
|
||||
}
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
public static function cssVarsToString($cssVars, $namespace)
|
||||
{
|
||||
$output = '';
|
||||
|
||||
foreach (array_filter($cssVars) as $key => $value)
|
||||
{
|
||||
$output .= '--' . $key . ': ' . $value . ';' . "\n";
|
||||
}
|
||||
|
||||
return $namespace . ' {
|
||||
' . $output . '
|
||||
}
|
||||
';
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user