<?php
/**
* @package RSForm! Pro
* @copyright (C) 2007-2019 www.rsjoomla.com
* @license GPL, http://www.gnu.org/copyleft/gpl.html
*/
defined('_JEXEC') or die;
require_once JPATH_ADMINISTRATOR.'/components/com_rsform/helpers/prices.php';
require_once JPATH_ADMINISTRATOR.'/components/com_rsform/helpers/fields/fielditem.php';
require_once JPATH_ADMINISTRATOR.'/components/com_rsform/helpers/fieldmultiple.php';
class RSFormProFieldSelectList extends RSFormProFieldMultiple
{
// backend preview
public function getPreviewInput()
{
$size = $this->getProperty('SIZE', 0);
$multiple = $this->getProperty('MULTIPLE', 'NO');
// Start building the HTML input
$selectInput = '<select';
// Multiple selectable items?
if ($multiple) {
$selectInput .= ' multiple="multiple"';
}
// Size
if ($size) {
$selectInput .= ' size="'.(int) $size.'"';
}
$selectInput .= '>';
// Add the items
if ($items = $this->getItems()) {
foreach ($items as $item) {
$item = new RSFormProFieldItem($item);
if ($item->flags['optgroup']) {
$selectInput .= '<optgroup label="'.$this->escape($item->label).'">';
} elseif ($item->flags['/optgroup']) {
$selectInput .= '</optgroup>';
} else {
// Start tag
$selectInput .= '<option';
// Disabled
if ($item->flags['disabled']) {
$selectInput .= ' disabled="disabled"';
}
// Checked
if ($item->value === $this->getItemValue($item)) {
$selectInput .= ' selected="selected"';
}
// Add value
$selectInput .= '>';
// Show label
$selectInput .= $this->escape($item->label);
// Close tag
$selectInput .= '</option>';
}
}
}
// Close the tag
$selectInput .= '</select>';
return $this->codeIcon . $selectInput;
}
// functions used for rendering in front view
public function getFormInput() {
$name = $this->getName();
$id = $this->getId();
$size = $this->getProperty('SIZE', 0);
$multiple = $this->getProperty('MULTIPLE', 'NO');
$attr = $this->getAttributes();
$additional = '';
// Get the price instance, if we need it
$prices = RSFormProPrices::getInstance($this->formId);
// Start building the HTML input
$html = '<select';
// Multiple selectable items?
if ($multiple) {
$html .= ' multiple="multiple"';
}
// Parse Additional Attributes
if ($attr) {
foreach ($attr as $key => $values) {
// @new feature - Some HTML attributes (type, size, maxlength) can be overwritten
// directly from the Additional Attributes area
if ($key == 'size' && strlen($values)) {
${$key} = $values;
continue;
}
$additional .= $this->attributeToHtml($key, $values);
}
}
// Name
$html .= ' name="'.$this->escape($name).'"';
// Size
if ($size) {
$html .= ' size="'.(int) $size.'"';
}
// Id
$html .= ' id="'.$this->escape($id).'"';
// Additional HTML
$html .= $additional;
$html .= '>';
// Add the items
if ($items = $this->getItems()) {
foreach ($items as $item) {
$item = new RSFormProFieldItem($item);
if ($item->flags['optgroup']) {
$html .= '<optgroup label="'.$this->escape($item->label).'">';
} elseif ($item->flags['/optgroup']) {
$html .= '</optgroup>';
} else {
// Start tag
$html .= '<option';
// Disabled
if ($item->flags['disabled']) {
$html .= ' disabled="disabled"';
}
// Checked
if ($item->value === $this->getItemValue($item)) {
$html .= ' selected="selected"';
}
// Add value
$html .= ' value="'.$this->escape($item->value).'">';
// Show label
$html .= $this->escape($item->label);
// Close tag
$html .= '</option>';
if ($item->flags['price'] !== false) {
$prices->addPrice($id, $item->value, $item->flags['price']);
}
}
}
}
// Close the tag
$html .= '</select>';
return $html;
}
// @desc All select lists should have a 'rsform-select-box' class for easy styling
public function getAttributes() {
$attr = parent::getAttributes();
if (strlen($attr['class'])) {
$attr['class'] .= ' ';
}
$attr['class'] .= 'rsform-select-box';
return $attr;
}
}