<?php
/**
* @package RSForm! Pro
* @copyright (C) 2007-2019 www.rsjoomla.com
* @license GPL, http://www.gnu.org/copyleft/gpl.html
*/
defined('_JEXEC') or die;
use Joomla\CMS\Language\Text;
require_once JPATH_ADMINISTRATOR.'/components/com_rsform/helpers/field.php';
class RSFormProFieldButton extends RSFormProField
{
protected $baseClass = 'rsform-button';
// backend preview
public function getPreviewInput()
{
$reset = $this->getProperty('RESET', 'NO');
$label = $this->getProperty('LABEL', '');
$resetLabel = $this->getProperty('RESETLABEL', '');
$html = '';
$html .= '<button type="button" class="btn btn-secondary">'.$this->escape($label).'</button>';
if ($reset) {
$html .= ' <button type="reset" class="btn btn-danger">'.$this->escape($resetLabel).'</button>';
}
return $html;
}
// functions used for rendering in front view
public function getFormInput() {
$name = $this->getName();
$id = $this->getId();
$label = $this->getProperty('LABEL', '');
$reset = $this->getProperty('RESET', 'NO');
$allowHtml = $this->getProperty('ALLOWHTML', 'NO');
$attr = $this->getAttributes('button');
$type = 'button';
$additional = '';
// Start building the HTML input
$html = '<button';
// Parse Additional Attributes
if ($attr) {
foreach ($attr as $key => $values) {
// @new feature - Some HTML attributes (type) can be overwritten
// directly from the Additional Attributes area
if ($key == 'type' && strlen($values)) {
${$key} = $values;
continue;
}
$additional .= $this->attributeToHtml($key, $values);
}
}
// Set the type
$html .= ' type="'.$this->escape($type).'"';
// Name & id
$html .= ' name="'.$this->escape($name).'"'.
' id="'.$this->escape($id).'"';
// Additional HTML
$html .= $additional;
// Add the label & close the tag
$html .= ' >' . ($allowHtml ? $label : $this->escape($label)) . '</button>';
// Do we need to append a reset button?
if ($reset) {
$label = $this->getProperty('RESETLABEL', '');
$attr = $this->getAttributes('reset');
$additional = '';
$html .= ' ';
// Parse Additional Attributes
if ($attr) {
foreach ($attr as $key => $values) {
$additional .= $this->attributeToHtml($key, $values);
}
}
// Start building the HTML input for the reset button
$html .= '<button';
// Set the type
$html .= ' type="reset"';
// Additional HTML
$html .= $additional;
// Add the label & close the tag
$html .= ' >' . ($allowHtml ? $label : $this->escape($label)) . '</button>';
}
return $html;
}
// @desc All buttons should have a class for easy styling
public function getAttributes($type='button') {
$attr = parent::getAttributes();
if (strlen($attr['class'])) {
$attr['class'] .= ' ';
}
if ($type == 'button') {
$attr['class'] .= $this->baseClass;
} elseif ($type == 'reset') {
$attr['class'] .= 'rsform-reset-button';
$attr['onclick'] = 'RSFormPro.resetElements('.$this->formId.')';
} elseif ($type == 'previous') {
$attr['class'] .= 'rsform-button-prev';
if (!isset($attr['onclick'])) {
$attr['onclick'] = '';
} else {
$attr['onclick'] = rtrim($attr['onclick'], ';');
}
}
return $attr;
}
// @desc Gets the previous button so it can be attached next to the last Submit button
// Handles last button so that this doesn't show up unless this is the last button.
protected function getPreviousButton() {
$componentId = $this->componentId;
$pages = RSFormProHelper::componentExists($this->formId, RSFORM_FIELD_PAGEBREAK);
$class = substr(get_class($this), -strlen('SubmitButton'));
if ($class == 'SubmitButton') {
$buttons = $this->getProperty('SUBMITS', array());
$last = $componentId == end($buttons);
}
$html = '';
if (($class == 'SubmitButton' && $pages && $last) || ($class != 'SubmitButton' && count($pages) > 1)) {
$label = $this->getProperty('PREVBUTTON', Text::_('JPREV'));
$label = empty($label) ? Text::_('JPREV') : $label;
$allowHtml = $this->getProperty('ALLOWHTML', 'NO');
$id = $this->getId();
$attr = $this->getAttributes('previous');
$additional = '';
$totalPages = count($pages);
$prevPage = $totalPages - 1;
$formId = $this->formId;
// Parse Additional Attributes
if ($attr) {
if (strlen($attr['onclick'])) {
$attr['onclick'] .= ';';
}
$attr['onclick'] .= "rsfp_changePage($formId, $prevPage, $totalPages)";
foreach ($attr as $key => $values) {
$additional .= $this->attributeToHtml($key, $values);
}
}
// Start building the HTML input
$html = '<button';
// Set the type
$html .= ' type="button"';
// Id
$html .= ' id="'.$this->escape($id).'Prev"';
// Additional HTML
$html .= $additional;
// Add the label & close the tag
$html .= ' >' . ($allowHtml ? $label : $this->escape($label)) . '</button>';
}
return $html;
}
}