<?php /** * eSales Media Formilicious for Contao Open Source CMS * * Copyright (C) 2013-2014 eSalesMedia * * @package eSM_formilicious * @link http://www.esales-media.de * @license http://www.gnu.org/licenses/lgpl-3.0.html LGPL * * @author Benjamin Roth <benjamin@esales-media.de> */ namespace eSM_formilicious; use Contao\Controller; use Contao\DataContainer; class FormiliciousHooks extends \Controller { /** * Array containing all fields which shouldn't use Formilicous extensions * @var array */ protected $arrNoFl = array('__selector__','fieldsetfsStart','fieldsetfsStop','hidden','html','headline'); /** * Array containing all fields which shouldn't use Formilicous custom class * @var array */ protected $arrNoCustClass = array('explanation'); /** * Hook for adding Formilicious fields to the form editor * @param $strName */ public function eSMLoadDataContainer($strName) { if ($strName != 'tl_form_field') { return; } // Hook in the Formilicious fields if (is_array($GLOBALS['TL_DCA']['tl_form_field']['palettes'])) { foreach (array_keys($GLOBALS['TL_DCA']['tl_form_field']['palettes']) as $k) { if (!in_array($k,$this->arrNoFl)) { $strFl = ';{formilicious_legend},eSM_fl_width,eSM_fl_clear'; if (!in_array($k,$this->arrNoCustClass)) { $strFl.= ',eSM_fl_class'; } if ($k == 'submit') { $strFl.= ',eSM_fl_lblpadding,eSM_fl_alignment'; } $intPos = strpos($GLOBALS['TL_DCA']['tl_form_field']['palettes'][$k], ';{expert_legend'); $intDupe = strpos($GLOBALS['TL_DCA']['tl_form_field']['palettes'][$k], ';{formilicious_legend'); if ($intPos !== false && $intDupe === false) { $GLOBALS['TL_DCA']['tl_form_field']['palettes'][$k] = substr($GLOBALS['TL_DCA']['tl_form_field']['palettes'][$k], 0, $intPos) . $strFl . substr($GLOBALS['TL_DCA']['tl_form_field']['palettes'][$k], $intPos); } else if ($intDupe === false) { $GLOBALS['TL_DCA']['tl_form_field']['palettes'][$k] .= $strFl; } } } } } /** * Hook for adding default value functionality to single value select fields * @param \Widget $objWidget * @param $strForm * @param $arrForm * @return \Widget */ public function eSMLoadFormField(\Widget $objWidget, $strForm, $arrForm) { // Only apply to select fields with multiple off if ($objWidget->type == 'select' && !$objWidget->multiple && $objWidget->value != '') { $arrOptions = (array) $objWidget->options; $intSelOption = null; // Iterate options and search for selected values foreach ($arrOptions as $k => $option) { if (!$option['group'] && $option['value'] == $objWidget->value) { $intSelOption = $k; break; } else if (!$option['group'] && $option['default']) { $intSelOption = $k; } unset($arrOptions[$k]['default']); } // Set proper default option if ($intSelOption !== null) { $arrOptions[$intSelOption]['default'] = '1'; } // Override widget with new options array $objWidget->options = $arrOptions; } return $objWidget; } /** * @param array $arrAttributes * @param DataContainer|null $objDca * * @return array */ public function eSMGetAttributesFromDca($arrAttributes, $objDca) { if ($objDca instanceof DataContainer && $objDca->field) { Controller::loadDataContainer($objDca->table); $arrData = $GLOBALS['TL_DCA'][$objDca->table]['fields'][$objDca->field]; if (isset($arrData['eval']['eSM_fl_width'])) { $arrAttributes['eSM_fl_width'] = $arrData['eval']['eSM_fl_width']; } if (isset($arrData['eval']['eSM_fl_clear'])) { $arrAttributes['eSM_fl_clear'] = $arrData['eval']['eSM_fl_clear']; } if (isset($arrData['eval']['eSM_fl_class'])) { $arrAttributes['eSM_fl_class'] = $arrData['eval']['eSM_fl_class']; } if (isset($arrData['eval']['eSM_fl_lblpadding'])) { $arrAttributes['eSM_fl_lblpadding'] = $arrData['eval']['eSM_fl_lblpadding']; } if (isset($arrData['eval']['eSM_fl_alignment'])) { $arrAttributes['eSM_fl_alignment'] = $arrData['eval']['eSM_fl_alignment']; } if (isset($arrData['eval']['eSM_fl_fieldClass'])) { $arrAttributes['class'] = trim($arrAttributes['class'].' '.$arrData['eval']['eSM_fl_fieldClass']); } } return $arrAttributes; } }