%PDF- %PDF-
| Direktori : /home/lightco1/luminero.com.au/administrator/components/com_cmc/helpers/ |
| Current File : /home/lightco1/luminero.com.au/administrator/components/com_cmc/helpers/xmlbuilder.php |
<?php
/**
* @package CMC
* @author Compojoom <contact-us@compojoom.com>
* @date 2016-04-15
*
* @copyright Copyright (C) 2008 - 2016 compojoom.com - Daniel Dimitrov, Yves Hoppe. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('_JEXEC') or die('Restricted access');
/**
* Class CmcHelperRegistrationrender
*
* @since 1.4
*/
class CmcHelperXmlbuilder
{
/**
* @var CmcHelperXmlbuilder
*/
private static $instance = null;
/**
* The constructor
*
* @param JRegistry $options - config object with everything we need
*/
public function __construct($options)
{
$this->newsletterCheckbox = $options->get('newsletterCheckbox', 1);
$this->phoneFormat = $options->get("phoneFormat", "inter");
$this->dateFormat = $options->get("dateFormat", "%Y-%m-%d");
$this->address2 = $options->get("address2", 0);
$this->listId = $options->get('listid', "");
$this->interests = $options->get('interests', '');
$this->fields = $options->get('fields', '');
$this->introText = $options->get("intro-text");
$this->outroText = $options->get("outro-text");
}
/**
* Gets a instance (SINGLETON) of this class
*
* @param JRegistry $config - configration object
*
* @return CmcHelperXmlbuilder
*/
public static function getInstance($config)
{
$md5 = md5(serialize($config));
if (!isset(self::$instance[$md5]))
{
self::$instance[$md5] = new CmcHelperXmlbuilder($config);
$lang = JFactory::getLanguage();
$lang->load('com_cmc', JPATH_ADMINISTRATOR);
}
return self::$instance[$md5];
}
/**
* Builds the necessary XML for JForm
*
* @return string
*/
public function build()
{
$html = '<?xml version="1.0" encoding="UTF-8" ?>';
$html .= "<form>";
$html .= '<fields name="cmc">';
$html .= '<fieldset name="cmc" label="COM_CMC_NEWSLETTER">';
// Intro-Text
if (isset($this->introText))
{
$html .= '
<field
name="intro-text"
type="spacer"
class="text"
label="' . htmlspecialchars(JText::_($this->introText)) . '"
/>
';
}
// Adding Newsletter Checkbox
if ($this->newsletterCheckbox)
{
$html .= '
<field
name="newsletter"
type="checkbox"
id="newsletter"
description="COM_CMC_NEWSLETTER_SUBSCRIBE"
value="1"
default="0"
class="submitMerge inputbox cmc-checkboxes cmc-checkbox-subscribe"
labelclass="form-label cmc-label"
label="COM_CMC_NEWSLETTER"
/>
';
}
$html .= '<field type="hidden" name="listid" default="' . $this->listId . '" />';
if (is_array($this->fields))
{
$html .= '</fieldset>';
$html .= '</fields>';
$html .= '<fields name="cmc_groups">';
$html .= '<fieldset name="cmc_groups" label="COM_CMC_NEWSLETTER_DATA">';
foreach ($this->fields as $f)
{
$field = explode(';', $f);
$html .= $this->createXmlField($field);
}
}
if (is_array($this->interests))
{
$html .= '</fieldset>';
$html .= '</fields>';
$html .= '<fields name="cmc_interests">';
$html .= '<fieldset name="cmc_interests" label="COM_CMC_NEWSLETTER_INTERESTS">';
foreach ($this->interests as $i)
{
$interest = explode(';', $i);
$groups = explode('####', $interest[3]);
switch ($interest[1])
{
case 'checkboxes':
$html .= '<field type="checkboxes" name="' . $interest[0] . '"
class="submitMerge inputbox cmc-checkboxes"
labelclass="form-label cmc-label"
label="' . $interest[2] . '"
id="' . $interest[0] . '" >';
foreach ($groups as $g)
{
$o = explode('##', $g);
$html .= '<option value="' . $o[0] . '">' . JText::_($o[1]) . '</option>';
}
$html .= '</field>';
break;
case 'radio':
$html .= '<field
name="' . $interest[0] . '"
type="radio"
default="0"
label="' . $interest[2] . '"
labelclass="form-label cmc-label">';
foreach ($groups as $g)
{
$o = explode('##', $g);
$html .= '<option value="' . $o[0] . '">' . JText::_($o[1]) . '</option>';
}
$html .= '</field>';
break;
}
}
}
// Intro-Text
if (isset($this->outroText))
{
$html .= '
<field
name="outro-text"
type="spacer"
class="text"
label="' . htmlspecialchars(JText::_($this->outroText)) . '"
/>
';
}
$html .= '</fieldset>';
$html .= '</fields>';
$html .= '</form>';
return $html;
}
/**
* Returns an xml formatted form field
*
* @param array $field - the field array
*
* @return string
*/
public function createXmlField($field)
{
$fieldtype = $field[1];
// We need to return a xml formatted object for the joomla form
if ($fieldtype == "text")
{
return $this->xmltext($field);
}
elseif ($fieldtype == "dropdown")
{
return $this->dropdown($field);
}
elseif ($fieldtype == "radio")
{
return $this->radio($field);
}
elseif ($fieldtype == "date")
{
return $this->date($field);
}
elseif ($fieldtype == "birthday")
{
return $this->birthday($field);
}
elseif ($fieldtype == "phone")
{
return $this->phone($field);
}
elseif ($fieldtype == "address")
{
return $this->address($field);
}
else
{
// Fallback, maybe should be a 404 not supported
return $this->xmltext($field);
}
}
/**
* Function that double encodes the entities in a text - removing any html tags from text
*
* @param string $text - the text
*
* @return string
*/
private function noEntities($text)
{
return htmlspecialchars(htmlspecialchars($text));
}
/**
* Returns an xml formatted form field
*
* @param array $field - the field array
* @param array $config - the field type
*
* @return string
*/
public function xmltext($field, $config = array())
{
// Structure: EMAIL;email;Email Address;1;
$validate = array(
'email' => 'validate-email',
'number' => 'validate-digits',
'url' => 'validate-url',
'phone' => 'validate-digits'
);
$class = array();
$type = isset($config['type']) ? $config['type'] : 'text';
if (isset($config['class']))
{
$class[] = $config['class'];
}
if (isset($validate[$field[1]]))
{
$class[] = $validate[$field[1]];
}
// Double escape as we don't allow html in the label
$title = $this->noEntities(JText::_($field[2]));
$req = ($field[3]) ? ' cmc_req' : '';
$x = "<field\n";
$x .= "name=\"" . $field[0] . "\"\n";
$x .= "type=\"" . $type . "\"\n";
$x .= "id=\"" . $field[0] . "\"\n";
// Do we want a description here?
$x .= "description=\"\"\n";
$x .= "filter=\"string\"\n";
$x .= 'class="inputbox input-medium' . $req . ' ' . implode(' ', $class) . '" ';
$x .= 'labelclass="form-label cmc-label" ';
$x .= 'hint="' . $title . ' ' . ($req ? '*' : '') . '" ';
$x .= "label=\"" . $title . "\"\n";
if ($field[3])
{
$x .= ' required="required"';
}
$x .= "/>\n";
return $x;
}
/**
* Returns a drop-down input box element
*
* @param array $params - Example FNAME;text;First Name;0;""
*
* @return string
*
* @since 3.0
*/
public function dropdown($params)
{
$choices = explode('##', $params[4]);
$req = ($params[3]) ? ' cmc_req' : '';
// Double escape as we don't allow html in the label
$title = $this->noEntities(JText::_($params[2]));
$select = '<field
id="' . $params[0] . '"
name="' . $params[0] . '"
type="list"
label="' . $title . '"
labelclass="form-label cmc-label"'
. ($params[3] ? ' required="required" ' : ' ') .
'default="0"
class="inputbox input-medium' . $req . '">';
foreach ($choices as $ch)
{
$select .= '<option value="' . $ch . '">' . $ch . '</option>';
}
$select .= '</field>';
return $select;
}
/**
* Returns a radio input box element
*
* @param array $params - Example FNAME;text;First Name;0;""
*
* @return string
*/
public function radio($params)
{
$choices = explode('##', $params[4]);
$req = ($params[3]) ? 'cmcreq' : '';
$title = $this->noEntities(JText::_($params[2]));
$radio = '<field
name="' . $params[0] . '"
type="radio"
default="0"
class="inputbox ' . $req . '"'
. ($params[3] ? ' required="required" ' : ' ') .
'labelclass="form-label cmc-label"
label="' . $title . '">';
foreach ($choices as $ch)
{
$radio .= '<option value="' . $ch . '">' . $ch . '</option>';
}
$radio .= '</field>';
return $radio;
}
/**
* Returns date input box element
*
* @param array $params - Example FNAME;text;First Name;0;""
*
* @return string
*/
public function date($params)
{
$title = $this->noEntities(JText::_($params[2]));
$req = ($params[3]) ? ' cmc_req' : '';
return '<field
name="' . $params[0] . '"
type="calendar"
class="inputbox input-small' . $req . '"
labelclass="form-label cmc-label"
label="' . $title . '" '
. ($params[3] ? ' required="required" ' : ' ') .
'format="' . $this->dateFormat . '"
maxlength="10"
/>';
}
/**
* Returns a birthday input box element
*
* @param array $params - Example FNAME;text;First Name;0;""
*
* @return string
*/
public function birthday($params)
{
$req = ($params[3]) ? ' cmc_req' : '';
$title = $this->noEntities(JText::_($params[2]));
$address = '<field type="birthday"
id="' . $params[0] . '_month"
name="birthday"
class="inputbox input-small cmc-birthday' . $req . '"
labelclass="form-label cmc-label"'
. ($params[3] ? ' required="required" ' : ' ') .
'label="' . $title . '" />';
return $address;
}
/**
* Returns phone input box element
*
* @param array $params - Example FNAME;text;First Name;0;""
*
* @return string
*/
public function phone($params)
{
$req = ($params[3]) ? ' cmc_req' : '';
$title = $this->noEntities(JText::_($params[2]));
$inter = '';
if ($this->phoneFormat == 'inter')
{
$inter = 'inter';
}
$phone = '
<field name="' . $params[0] . '"
type="phone"
id="cmc-phone-' . $params[0] . '"
class="phone input-medium validate-digits ' . $inter . $req . '"
labelclass="form-label cmc-label"'
. ($params[3] ? ' required="required" ' : ' ') .
'size="40" ' .
'hint="' . $title . ' ' . ($req ? '*' : '') . '" ' .
'label="' . $title . '"
/>';
return $phone;
}
/**
* Returns address input box element
*
* @param array $params - Example FNAME;text;First Name;0;""
*
* @return string
*/
public function address($params)
{
$req = ($params[3]) ? ' cmc_req' : '';
$title = $this->noEntities(JText::_($params[2]));
$address = '<field type="spacer" name="addr" label="' . $title . '" />';
$address .= '<field
name="' . $params[0] . '][addr1"
type="text" default=""
label="' . JText::_('CMC_STREET_ADDRESS') . '"
class="inputbox input-medium' . $req . '"
' . ($params[3] ? ' required="required" ' : ' ') . '
labelclass="form-label cmc-label"
/>';
if ($this->address2)
{
$address .= '<field
name="' . $params[0] . '][addr2"
type="text" default=""
label="' . JText::_('CMC_STREET_ADDRESS2') . '"
class="inputbox input-medium' . $req . '"
' . ($params[3] ? ' required="required" ' : ' ') . '
labelclass="form-label cmc-label"
/>';
}
$address .= '<field
name="' . $params[0] . '][city"
type="text" default=""
label="' . JText::_('CMC_CITY') . '"
class="inputbox input-medium' . $req . '"
' . ($params[3] ? ' required="required" ' : ' ') . '
labelclass="form-label cmc-label"
/>';
$address .= '<field
name="' . $params[0] . '][state"
type="text" default=""
label="' . JText::_('CMC_STATE') . '"
class="inputbox input-medium' . $req . '"
' . ($params[3] ? ' required="required" ' : ' ') . '
labelclass="form-label cmc-label"
/>';
$address .= '<field
name="' . $params[0] . '][zip"
type="text" default=""
label="' . JText::_('CMC_ZIP') . '"
class="inputbox input-medium' . $req . '"
' . ($params[3] ? ' required="required" ' : ' ') . '
labelclass="form-label cmc-label"
/>';
$address .= $this->getCountryDropdown($params[0], $params[0], JText::_('CMC_COUNTRY'), $req) . '<br />';
return $address;
}
/**
* Returns date input box element
*
* @param string $name - Name of the select
* @param int $id - The date format for this field
* @param string $title - The field name prefix
* @param boolean $req - Is the field required?
*
* @return string
*/
private function getCountryDropdown($name, $id, $title, $req)
{
$options = CmcHelperCountries::getCountries();
$select = '<field
id="' . $id . '"
name="' . $name . '][country"
type="list"
label="' . $this->noEntities($title) . '"
default="0"
class="inputbox input-medium"
' . ($req ? ' required="required" ' : ' ') . '
labelclass="form-label cmc-label"
>';
$select .= '<option value=""></option>';
foreach ($options as $k => $v)
{
$select .= '<option value="' . $k . '">' . ucwords(strtolower($v)) . '</option>';
}
$select .= '</field>';
return $select;
}
}