_fbvStyles = array(
'size' => array('SMALL' => 'SMALL', 'MEDIUM' => 'MEDIUM', 'LARGE' => 'LARGE'),
'height' => array('SHORT' => 'SHORT', 'MEDIUM' => 'MEDIUM', 'TALL' => 'TALL')
);
}
//
// Setters and Getters
//
/**
* Set the form
* @param $form object
*/
function setForm($form) {
if ($form) assert(is_a($form, 'Form'));
$this->_form = $form;
}
/**
* Get the form
* @return Object
*/
function getForm() {
return $this->_form;
}
/**
* Get the form style constants
* @return array
*/
function getStyles() {
return $this->_fbvStyles;
}
//
// Public Methods
//
/**
* A form area that contains form sections.
* @param $params array
* @param $content string
* @param $smarty object
* @param $repeat
*/
function smartyFBVFormArea($params, $content, &$smarty, &$repeat) {
assert(isset($params['id']));
if (!$repeat) {
$smarty->assign(array(
'FBV_class' => isset($params['class']) ? $params['class'] : null,
'FBV_id' => $params['id'],
'FBV_content' => isset($content) ? $content : null,
'FBV_translate' => isset($params['translate']) ? $params['translate'] : true,
'FBV_title' => isset($params['title']) ? $params['title'] : null,
));
return $smarty->fetch('form/formArea.tpl');
}
return '';
}
/**
* A form section that contains controls in a variety of layout possibilities.
* @param $params array
* @param $content string
* @param $smarty object
* @param $repeat
*/
function smartyFBVFormSection($params, $content, &$smarty, &$repeat) {
$form = $this->getForm();
if (!$repeat) {
$smarty->assign('FBV_required', isset($params['required']) ? $params['required'] : false);
$smarty->assign('FBV_id', isset($params['id']) ? $params['id'] : null);
// Since $content will contain input fields that may have unique Ids appended, the 'for'
// attribute on the form section's label needs to include this. Look for the assigned
// form element within $content and extract the full id. Default to the passed in param
// otherwise.
if (!empty($params['for'])) {
if (preg_match('/id="(' . preg_quote($params['for'], '/') . '\-[^"]+)"/', $content, $matches)) {
$smarty->assign('FBV_labelFor', $matches[1]);
} else {
$smarty->assign('FBV_labelFor', $params['for']);
}
} else {
$smarty->assign('FBV_labelFor', null);
}
$smarty->assign(array(
'FBV_title' => isset($params['title']) ? $params['title'] : null,
'FBV_label' => isset($params['label']) ? $params['label'] : null,
'FBV_layoutInfo' => $this->_getLayoutInfo($params),
'FBV_description' => isset($params['description']) ? $params['description'] : null,
'FBV_content' => isset($content) ? $content: null,
'FBV_translate' => isset($params['translate']) ? $params['translate'] : true,
));
$class = $params['class'];
// Check if we are using the Form class and if there are any errors
$smarty->clear_assign(array('FBV_sectionErrors'));
if (isset($form) && !empty($form->formSectionErrors)) {
$class = $class . (empty($class) ? '' : ' ') . 'error';
$smarty->assign('FBV_sectionErrors', $form->formSectionErrors);
$form->formSectionErrors = array();
}
// If we are displaying checkboxes or radio options, we'll need to use a
// list to organize our elements -- Otherwise we use divs and spans
if (isset($params['list']) && $params['list'] != false) {
$smarty->assign('FBV_listSection', true);
} else {
// Double check that we don't have lists in the content.
// This is a kludge but the only way to make sure we've
// set the list parameter when we're using lists
if (substr(trim($content), 0, 4) == "
") {
$smarty->trigger_error('FBV: list attribute not set on form section containing lists');
}
$smarty->assign('FBV_listSection', false);
}
$smarty->assign('FBV_class', $class);
$smarty->assign('FBV_layoutColumns', empty($params['layout']) ? false : true);
return $smarty->fetch('form/formSection.tpl');
} else {
if (isset($form)) $form->formSectionErrors = array();
}
return '';
}
/**
* Submit and (optional) cancel button for a form.
* @param $params array
* @param $smarty object
* @param $repeat
*/
function smartyFBVFormButtons($params, &$smarty) {
$smarty->assign(array(
'FBV_submitText' => isset($params['submitText']) ? $params['submitText'] : 'common.ok',
'FBV_submitDisabled' => isset($params['submitDisabled']) ? (boolean)$params['submitDisabled'] : false,
'FBV_confirmSubmit' => isset($params['confirmSubmit']) ? $params['confirmSubmit'] : null,
'FBV_cancelText' => isset($params['cancelText']) ? $params['cancelText'] : 'common.cancel',
'FBV_hideCancel' => isset($params['hideCancel']) ? (boolean)$params['hideCancel'] : false,
'FBV_cancelAction' => isset($params['cancelAction']) ? $params['cancelAction'] : null,
'FBV_cancelUrl' => isset($params['cancelUrl']) ? $params['cancelUrl'] : null,
'FBV_cancelUrlTarget' => isset($params['cancelUrlTarget']) ? $params['cancelUrlTarget'] : '',
'FBV_translate' => isset($params['translate']) ? $params['translate'] : true,
));
return $smarty->fetch('form/formButtons.tpl');
}
/**
* Base form element.
* @param $params array
* @param $smarty object-
*/
function smartyFBVElement($params, &$smarty, $content = null) {
if (!isset($params['type'])) $smarty->trigger_error('FBV: Element type not set');
if (!isset($params['id'])) $smarty->trigger_error('FBV: Element ID not set');
// Set up the element template
$smarty->assign(array(
'FBV_id' => $params['id'],
'FBV_class' => isset($params['class']) ? $params['class'] : null,
'FBV_required' => isset($params['required']) ? $params['required'] : false,
'FBV_layoutInfo' => $this->_getLayoutInfo($params),
'FBV_label' => isset($params['label']) ? $params['label'] : null,
'FBV_for' => isset($params['for']) ? $params['for'] : null,
'FBV_tabIndex' => isset($params['tabIndex']) ? $params['tabIndex'] : null,
'FBV_translate' => isset($params['translate']) ? $params['translate'] : true,
'FBV_keepLabelHtml' => isset($params['keepLabelHtml']) ? $params['keepLabelHtml'] : false,
));
// Unset these parameters so they don't get assigned twice
unset($params['class']);
// Find fields that the form class has marked as required and add the 'required' class to them
$params = $this->_addClientSideValidation($params);
$smarty->assign('FBV_validation', isset($params['validation']) ? $params['validation'] : null);
// Set up the specific field's template
switch (strtolower_codesafe($params['type'])) {
case 'autocomplete':
$content = $this->_smartyFBVAutocompleteInput($params, $smarty);
break;
case 'button':
case 'submit':
$content = $this->_smartyFBVButton($params, $smarty);
break;
case 'checkbox':
$content = $this->_smartyFBVCheckbox($params, $smarty);
unset($params['label']);
break;
case 'checkboxgroup':
$content = $this->_smartyFBVCheckboxGroup($params, $smarty);
unset($params['label']);
break;
case 'file':
$content = $this->_smartyFBVFileInput($params, $smarty);
break;
case 'hidden':
$content = $this->_smartyFBVHiddenInput($params, $smarty);
break;
case 'keyword':
$content = $this->_smartyFBVKeywordInput($params, $smarty);
break;
case 'interests':
$content = $this->_smartyFBVInterestsInput($params, $smarty);
break;
case 'radio':
$content = $this->_smartyFBVRadioButton($params, $smarty);
unset($params['label']);
break;
case 'select':
$content = $this->_smartyFBVSelect($params, $smarty);
break;
case 'text':
$content = $this->_smartyFBVTextInput($params, $smarty);
break;
case 'url':
$content = $this->_smartyFBVTextInput($params, $smarty);
break;
case 'textarea':
$content = $this->_smartyFBVTextArea($params, $smarty);
break;
case 'colour':
$content = $this->_smartyFBVColour($params, $smarty);
break;
default: assert(false);
}
unset($params['type']);
return $content;
}
//
// Private methods
//
/**
* Form button.
* parameters: label (or value), disabled (optional), type (optional)
* @param $params array
* @param $smarty object
*/
function _smartyFBVButton($params, &$smarty) {
// the type of this button. the default value is 'button' (but could be 'submit')
$buttonParams = '';
$smarty->clear_assign(array('FBV_label', 'FBV_disabled'));
foreach ($params as $key => $value) {
switch ($key) {
case 'inline':
case 'translate':
break;
case 'label':
case 'type':
case 'disabled':
$smarty->assign('FBV_' . $key, $value);
break;
default: $buttonParams .= htmlspecialchars($key, ENT_QUOTES, LOCALE_ENCODING) . '="' . htmlspecialchars($value, ENT_QUOTES, LOCALE_ENCODING) . '" ';
}
}
$smarty->assign('FBV_buttonParams', $buttonParams);
return $smarty->fetch('form/button.tpl');
}
/**
* Form Autocomplete text input. (actually two inputs, label and value)
* parameters: disabled (optional), name (optional - assigned value of 'id' by default)
* @param $params array
* @param $smarty object
*/
function _smartyFBVAutocompleteInput($params, &$smarty) {
assert(isset($params['autocompleteUrl']) && isset($params['id']));
// This id will be used for the hidden input that should be read by the Form.
$autocompleteId = $params['id'];
// We then override the id parameter to differentiate it from the hidden element
// and make sure that the text input is not read by the Form class.
$params['id'] = $autocompleteId . '_input';
$smarty->clear_assign(array('FBV_id', 'FBV_autocompleteUrl', 'FBV_autocompleteValue'));
// We set this now, so that we unset the param for the text input.
$smarty->assign('FBV_autocompleteUrl', $params['autocompleteUrl']);
$smarty->assign('FBV_autocompleteValue', isset($params['autocompleteValue']) ? $params['autocompleteValue'] : null);
$smarty->assign('FBV_disableSync', isset($params['disableSync']) ? true : null);
unset($params['autocompleteUrl']);
unset($params['autocompleteValue']);
$smarty->assign('FBV_textInput', $this->_smartyFBVTextInput($params, $smarty));
$smarty->assign('FBV_id', $autocompleteId);
return $smarty->fetch('form/autocompleteInput.tpl');
}
/**
* Form text input.
* parameters: disabled (optional), name (optional - assigned value of 'id' by default), multilingual (optional)
* @param $params array
* @param $smarty object
*/
function _smartyFBVTextInput($params, &$smarty) {
$params['name'] = isset($params['name']) ? $params['name'] : $params['id'];
$params['subLabelTranslate'] = isset($params['subLabelTranslate']) ? (boolean) $params['subLabelTranslate'] : true;
$params['uniqId'] = uniqid();
$smarty->assign('FBV_isPassword', isset($params['password']) ? true : false);
$smarty->assign('FBV_isTypeURL', ($params['type'] === 'url') ? true : false);
$textInputParams = '';
$smarty->clear_assign(array('FBV_disabled', 'FBV_readonly', 'FBV_multilingual', 'FBV_name', 'FBV_value', 'FBV_label_content', 'FBV_uniqId', 'FBV_urlValidationErrorMessage'));
foreach ($params as $key => $value) {
switch ($key) {
case 'label': $smarty->assign('FBV_label_content', $this->_smartyFBVSubLabel($params, $smarty)); break;
case 'type': break;
case 'size': break;
case 'inline': break;
case 'subLabelTranslate': break;
case 'urlValidationErrorMsg':
if ($params['type'] === 'url') {
$smarty->assign('FBV_urlValidationErrorMessage', __($value));
}
break;
case 'placeholder': $textInputParams .= 'placeholder="' . htmlspecialchars(__($value), ENT_QUOTES, LOCALE_ENCODING) . '" '; break;
case 'disabled':
case 'readonly':
case 'multilingual':
case 'name':
case 'id':
case 'value':
case 'uniqId':
$smarty->assign('FBV_' . $key, $value); break;
case 'required': if ($value) $textInputParams .= 'required="' . htmlspecialchars($value, ENT_QUOTES, LOCALE_ENCODING) . '"'; break;
default: $textInputParams .= htmlspecialchars($key, ENT_QUOTES, LOCALE_ENCODING) . '="' . htmlspecialchars($value, ENT_QUOTES, LOCALE_ENCODING). '" ';
}
}
$smarty->assign('FBV_textInputParams', $textInputParams);
return $smarty->fetch('form/textInput.tpl');
}
/**
* Form text area.
* parameters:
* - value: string for single language inputs, array (xx_YY => language_value) for multilingual
* - name: string (optional - assigned value based on ID by default)
* - disabled: boolean (default false)
* - multilingual: boolean (default false)
* - rich: false (default), true, or 'extended'
* @param $params array
* @param $smarty object
*/
function _smartyFBVTextArea($params, &$smarty) {
$params['name'] = isset($params['name']) ? $params['name'] : $params['id'];
$params['rows'] = isset($params['rows']) ? $params['rows'] : 10;
$params['cols'] = isset($params['cols']) ? $params['cols'] : 80;
$params['subLabelTranslate'] = isset($params['subLabelTranslate']) ? (boolean) $params['subLabelTranslate'] : true;
$params['uniqId'] = uniqid();
$textAreaParams = '';
$smarty->clear_assign(array('FBV_label_content', 'FBV_disabled', 'FBV_readonly', 'FBV_multilingual', 'FBV_name', 'FBV_value', 'FBV_height', 'FBV_uniqId', 'FBV_rows', 'FBV_cols', 'FBV_rich', 'FBV_variables', 'FBV_variablesType'));
foreach ($params as $key => $value) {
switch ($key) {
case 'name':
case 'value':
case 'rows':
case 'cols':
case 'rich':
case 'disabled':
case 'readonly':
case 'multilingual':
case 'uniqId':
case 'variablesType':
case 'variables':
case 'required':
$smarty->assign('FBV_' . $key, $value);
break;
case 'label': $smarty->assign('FBV_label_content', $this->_smartyFBVSubLabel($params, $smarty)); break;
case 'type': break;
case 'size': break;
case 'inline': break;
case 'subLabelTranslate': break;
case 'height':
$styles = $this->getStyles();
switch($value) {
case $styles['height']['SHORT']: $smarty->assign('FBV_height', 'short'); break;
case $styles['height']['MEDIUM']: $smarty->assign('FBV_height', 'medium'); break;
case $styles['height']['TALL']: $smarty->assign('FBV_height', 'tall'); break;
default:
$smarty->trigger_error('FBV: invalid height specified for textarea.');
}
break;
case 'id': break; // if we don't do this, the textarea ends up with two id attributes because FBV_id is also set.
default: $textAreaParams .= htmlspecialchars($key, ENT_QUOTES, LOCALE_ENCODING) . '="' . htmlspecialchars($value, ENT_QUOTES, LOCALE_ENCODING) . '" ';
}
}
$smarty->assign('FBV_textAreaParams', $textAreaParams);
return $smarty->fetch('form/textarea.tpl');
}
/**
* Form colour input.
* parameters: disabled (optional), name (optional - assigned value of 'id' by default)
* @param $params array
* @param $smarty object
*/
function _smartyFBVColour($params, &$smarty) {
$params['name'] = isset($params['name']) ? $params['name'] : $params['id'];
$params['subLabelTranslate'] = isset($params['subLabelTranslate']) ? (boolean) $params['subLabelTranslate'] : true;
$params['uniqId'] = uniqid();
$smarty->assign('FBV_isPassword', isset($params['password']) ? true : false);
$colourParams = '';
$smarty->clear_assign(array('FBV_disabled', 'FBV_readonly', 'FBV_multilingual', 'FBV_name', 'FBV_value', 'FBV_label_content', 'FBV_uniqId', 'FBV_default'));
foreach ($params as $key => $value) {
switch ($key) {
case 'label': $smarty->assign('FBV_label_content', $this->_smartyFBVSubLabel($params, $smarty)); break;
case 'type': break;
case 'size': break;
case 'inline': break;
case 'subLabelTranslate': break;
case 'disabled':
case 'readonly':
case 'name':
case 'id':
case 'value':
case 'uniqId':
case 'default':
$smarty->assign('FBV_' . $key, $value); break;
break;
case 'required': if ($value != 'true') $colourParams .= 'required="' + htmlspecialchars($value, ENT_QUOTES, LOCALE_ENCODING) +'"'; break;
default: $colourParams .= htmlspecialchars($key, ENT_QUOTES, LOCALE_ENCODING) . '="' . htmlspecialchars($value, ENT_QUOTES, LOCALE_ENCODING). '" ';
}
}
$smarty->assign('FBV_textInputParams', $colourParams);
return $smarty->fetch('form/colour.tpl');
}
/**
* Hidden input element.
* parameters: value, id, name (optional - assigned value of 'id' by default), disabled (optional), multilingual (optional)
* @param $params array
* @param $smarty object
*/
function _smartyFBVHiddenInput($params, &$smarty) {
$params['name'] = isset($params['name']) ? $params['name'] : $params['id'];
$hiddenInputParams = '';
$smarty->clear_assign(array('FBV_id', 'FBV_value'));
foreach ($params as $key => $value) {
switch ($key) {
case 'name':
case 'id':
case 'value':
$smarty->assign('FBV_' . $key, $value);
break;
case 'label': break;
case 'type': break;
default: $hiddenInputParams .= htmlspecialchars($key, ENT_QUOTES, LOCALE_ENCODING) . '="' . htmlspecialchars($value, ENT_QUOTES, LOCALE_ENCODING) . '" ';
}
}
$smarty->assign('FBV_hiddenInputParams', $hiddenInputParams);
return $smarty->fetch('form/hiddenInput.tpl');
}
/**
* Form select control.
* parameters: from [array], selected [array index], defaultLabel (optional), defaultValue (optional), disabled (optional),
* translate (optional), name (optional - value of 'id' by default)
* @param $params array
* @param $smarty object
*/
function _smartyFBVSelect($params, &$smarty) {
$params['name'] = isset($params['name']) ? $params['name'] : $params['id'];
$params['translate'] = isset($params['translate']) ? $params['translate'] : true;
$params['subLabelTranslate'] = isset($params['subLabelTranslate']) ? (boolean) $params['subLabelTranslate'] : true;
$selectParams = '';
$smarty->clear_assign(array('FBV_label', 'FBV_from', 'FBV_selected', 'FBV_label_content', 'FBV_defaultValue', 'FBV_defaultLabel', 'FBV_required', 'FBV_disabled'));
foreach ($params as $key => $value) {
switch ($key) {
case 'from':
case 'selected':
case 'translate':
case 'defaultValue':
case 'defaultLabel':
case 'disabled':
case 'required':
$smarty->assign('FBV_' . $key, $value);
break;
case 'type':
case 'inline':
case 'size':
break;
case 'subLabelTranslate': break;
case 'label': $smarty->assign('FBV_label_content', $this->_smartyFBVSubLabel($params, $smarty)); break;
default: $selectParams .= htmlspecialchars($key, ENT_QUOTES, LOCALE_ENCODING) . '="' . htmlspecialchars($value, ENT_QUOTES, LOCALE_ENCODING) . '" ';
}
}
$smarty->assign('FBV_selectParams', $selectParams);
return $smarty->fetch('form/select.tpl');
}
/**
* Form checkbox group control.
* parameters: from [array], selected [array index], defaultLabel (optional), defaultValue (optional), disabled (optional),
* translate (optional), name (optional - value of 'id' by default)
* @param $params array
* @param $smarty object
*/
function _smartyFBVCheckboxGroup($params, &$smarty) {
$params['name'] = isset($params['name']) ? $params['name'] : $params['id'];
$params['translate'] = isset($params['translate']) ? (boolean)$params['translate'] : true;
$params['subLabelTranslate'] = isset($params['subLabelTranslate']) ? (boolean) $params['subLabelTranslate'] : true;
$checkboxParams = '';
$smarty->clear_assign(array('FBV_from', 'FBV_selected', 'FBV_label_content', 'FBV_defaultValue', 'FBV_defaultLabel', 'FBV_name'));
foreach ($params as $key => $value) {
switch ($key) {
case 'from':
case 'selected':
case 'defaultValue':
case 'defaultLabel':
case 'translate':
case 'name':
case 'validation':
case 'disabled':
$smarty->assign('FBV_' . $key, $value);
break;
case 'type': break;
case 'inline': break;
case 'subLabelTranslate': break;
default: $checkboxParams .= htmlspecialchars($key, ENT_QUOTES, LOCALE_ENCODING) . '="' . htmlspecialchars($value, ENT_QUOTES, LOCALE_ENCODING) . '" ';
}
}
$smarty->assign('FBV_checkboxParams', $checkboxParams);
return $smarty->fetch('form/checkboxGroup.tpl');
}
/**
* Checkbox input control.
* parameters: label, disabled (optional), translate (optional), name (optional - value of 'id' by default)
* @param $params array
* @param $smarty object
*/
function _smartyFBVCheckbox($params, &$smarty) {
$params['name'] = isset($params['name']) ? $params['name'] : $params['id'];
$params['translate'] = isset($params['translate']) ? (boolean)$params['translate'] : true;
$checkboxParams = '';
$smarty->clear_assign(array('FBV_id', 'FBV_label', 'FBV_checked', 'FBV_disabled'));
foreach ($params as $key => $value) {
switch ($key) {
case 'type': break;
case 'id':
case 'label':
case 'translate':
case 'checked':
case 'disabled':
$smarty->assign('FBV_' . $key, $value);
break;
default: $checkboxParams .= htmlspecialchars($key, ENT_QUOTES, LOCALE_ENCODING) . '="' . htmlspecialchars($value, ENT_QUOTES, LOCALE_ENCODING) . '" ';
}
}
$smarty->assign('FBV_checkboxParams', $checkboxParams);
return $smarty->fetch('form/checkbox.tpl');
}
/**
* Radio input control.
* parameters: label, disabled (optional), translate (optional), name (optional - value of 'id' by default)
* @param $params array
* @param $smarty object
*/
function _smartyFBVRadioButton($params, &$smarty) {
$params['name'] = isset($params['name']) ? $params['name'] : $params['id'];
$params['translate'] = isset($params['translate']) ? $params['translate'] : true;
if (isset($params['label']) && isset($params['content'])) {
$smarty->trigger_error('FBV: radio button cannot have both a content and a label parameter. Label has precedence.');
}
$radioParams = '';
$smarty->clear_assign(array('FBV_id', 'FBV_label', 'FBV_content', 'FBV_checked', 'FBV_disabled'));
foreach ($params as $key => $value) {
switch ($key) {
case 'type': break;
case 'id':
case 'label':
case 'translate':
case 'checked':
case 'disabled':
case 'content':
$smarty->assign('FBV_' . $key, $value);
break;
default: $radioParams .= htmlspecialchars($key, ENT_QUOTES, LOCALE_ENCODING) . '="' . htmlspecialchars($value, ENT_QUOTES, LOCALE_ENCODING) . '" ';
}
}
$smarty->assign('FBV_radioParams', $radioParams);
return $smarty->fetch('form/radioButton.tpl');
}
/**
* File upload input.
* parameters: submit (optional - name of submit button to include), disabled (optional), name (optional - value of 'id' by default)
* @param $params array
* @param $smarty object
*/
function _smartyFBVFileInput($params, &$smarty) {
$params['name'] = isset($params['name']) ? $params['name'] : $params['id'];
$params['translate'] = isset($params['translate']) ? $params['translate'] : true;
$smarty->clear_assign(array('FBV_id', 'FBV_label_content', 'FBV_checked', 'FBV_disabled', 'FBV_submit'));
foreach ($params as $key => $value) {
switch ($key) {
case 'type': break;
case 'id':
case 'submit':
case 'name':
case 'disabled':
$smarty->assign('FBV_' . $key, $value);
break;
case 'label': $smarty->assign('FBV_label_content', $this->_smartyFBVSubLabel($params, $smarty)); break;
}
}
return $smarty->fetch('form/fileInput.tpl');
}
/**
* Keyword input.
* parameters: available - all available keywords (for autosuggest); current - user's current keywords
* @param $params array
* @param $smarty object
*/
function _smartyFBVKeywordInput($params, &$smarty) {
$params['uniqId'] = uniqid();
$smarty->clear_assign(array('FBV_id', 'FBV_label', 'FBV_label_content', 'FBV_currentKeywords', 'FBV_multilingual', 'FBV_sourceUrl', 'FBV_uniqId', 'FBV_disabled'));
$emptyFormLocaleMap = array_fill_keys(array_keys($smarty->get_template_vars('formLocales')), array());
$smarty->assign('FBV_availableKeywords', $emptyFormLocaleMap);
foreach ($params as $key => $value) {
switch ($key) {
case 'type': break;
case 'id':
case 'uniqId':
case 'disabled':
case 'multilingual':
$smarty->assign('FBV_' . $key, $value);
break;
case 'label': $smarty->assign('FBV_label_content', $this->_smartyFBVSubLabel($params, $smarty)); break;
case 'available': $smarty->assign(
'FBV_availableKeywords',
$thing = array_merge(
$emptyFormLocaleMap,
$value
)
); break;
case 'current': $smarty->assign('FBV_currentKeywords', $value); break;
case 'source': $smarty->assign('FBV_sourceUrl', $value); break;
}
}
return $smarty->fetch('form/keywordInput.tpl');
}
/**
* Reviewing interests input.
* parameters: interests - current users's keywords (array)
* @param $params array
* @param $smarty object
*/
function _smartyFBVInterestsInput($params, &$smarty) {
$smarty->clear_assign(array('FBV_id', 'FBV_label', 'FBV_label_content', 'FBV_interests'));
$params['subLabelTranslate'] = isset($params['subLabelTranslate']) ? (boolean) $params['subLabelTranslate'] : true;
foreach ($params as $key => $value) {
switch ($key) {
case 'type': break;
case 'id':
case 'interests':
$smarty->assign('FBV_' . $key, $value);
break;
case 'label': $smarty->assign('FBV_label_content', $this->_smartyFBVSubLabel($params, $smarty)); break;
}
}
return $smarty->fetch('form/interestsInput.tpl');
}
/**
* Custom Smarty function for labelling/highlighting of form fields.
* @param $params array can contain 'name' (field name/ID), 'required' (required field), 'key' (localization key), 'label' (non-localized label string), 'suppressId' (boolean)
* @param $smarty Smarty
*/
function _smartyFBVSubLabel($params, &$smarty) {
assert(isset($params['label']));
$returner = '';
$form = $this->getForm();
if (isset($form) && isset($form->errorFields[$params['name']])) {
$smarty->assign('FBV_error', true);
} else {
$smarty->assign('FBV_error', false);
}
$smarty->clear_assign(array('FBV_suppressId', 'FBV_label', 'FBV_required', 'FBV_uniqId', 'FBV_multilingual', 'FBV_required'));
foreach ($params as $key => $value) {
switch ($key) {
case 'subLabelTranslate': $smarty->assign('FBV_subLabelTranslate', $value); break;
case 'label':
case 'uniqId':
case 'multilingual':
case 'suppressId':
case 'required':
$smarty->assign('FBV_' . $key, $value);
break;
}
}
$returner = $smarty->fetch('form/subLabel.tpl');
return $returner;
}
/**
* Assign the appropriate class name to the element for client-side validation
* @param $params array
* return array
*/
function _addClientSideValidation($params) {
$form = $this->getForm();
if (isset($form)) {
// Assign the appropriate class name to the element for client-side validation
$fieldId = $params['id'];
if (isset($form->cssValidation[$fieldId])) {
$params['validation'] = implode(' ', $form->cssValidation[$fieldId]);
}
}
return $params;
}
/**
* Cycle through layout parameters to add the appropriate classes to the element's parent container
* @param $params array
* @return string
*/
function _getLayoutInfo($params) {
$classes = array();
foreach ($params as $key => $value) {
switch ($key) {
case 'size':
switch($value) {
case 'SMALL': $classes[] = 'pkp_helpers_quarter'; break;
case 'MEDIUM': $classes[] = 'pkp_helpers_half'; break;
CASE 'LARGE': $classes[] = 'pkp_helpers_threeQuarter'; break;
}
break;
case 'inline':
if($value) $classes[] = 'inline'; break;
}
}
if(!empty($classes)) {
return implode(' ', $classes);
} else return null;
}
/**
* Custom Smarty function for labelling/highlighting of form fields.
* @param $params array can contain 'name' (field name/ID), 'required' (required field), 'key' (localization key), 'label' (non-localized label string), 'suppressId' (boolean)
* @param $smarty Smarty
*/
function smartyFieldLabel($params, &$smarty) {
$returner = '';
if (isset($params) && !empty($params)) {
if (isset($params['key'])) {
$params['label'] = __($params['key'], $params);
}
$form = $this->getForm();
if (isset($form) && isset($form->errorFields[$params['name']])) {
$smarty->assign('FBV_class', 'error ' . $params['class']);
} else {
$smarty->assign('FBV_class', $params['class']);
}
$smarty->clear_assign(array('FBV_suppressId', 'FBV_label', 'FBV_required', 'FBV_disabled', 'FBV_name'));
foreach ($params as $key => $value) {
switch ($key) {
case 'label':
case 'required':
case 'suppressId':
case 'disabled':
case 'name':
$smarty->assign('FBV_' . $key, $value);
break;
}
}
$returner = $smarty->fetch('form/fieldLabel.tpl');
}
return $returner;
}
}
?>