| Current Path : /home/bijouxly/www/plugins/system/rsfppayment/ |
| Current File : /home/bijouxly/www/plugins/system/rsfppayment/rsfppayment.php |
<?php
/**
* @package RSForm!Pro
* @copyright (C) 2007-2014 www.rsjoomla.com
* @license GPL, http://www.gnu.org/copyleft/gpl.html
*/
// no direct access
defined('_JEXEC') or die('Restricted access');
class plgSystemRSFPPayment extends JPlugin
{
protected $_products = array();
public function __construct( &$subject, $config ) {
parent::__construct( $subject, $config );
$this->newComponents = array(21, 22, 23, 27, 28);
$this->loadLanguage();
}
public function rsfp_bk_onAfterShowComponents() {
$lang = JFactory::getLanguage();
$lang->load('plg_system_rsfppayment');
$mainframe = JFactory::getApplication();
$db = JFactory::getDBO();
$formId = JRequest::getInt('formId');
$link1 = "displayTemplate('21')";
$link2 = "displayTemplate('23')";
$link3 = "displayTemplate('27')";
$link4 = "displayTemplate('28')";
if ($components = RSFormProHelper::componentExists($formId, 21))
$link1 = "displayTemplate('21', '".$components[0]."')";
if ($components = RSFormProHelper::componentExists($formId, 23))
$link2 = "displayTemplate('23', '".$components[0]."')";
if ($components = RSFormProHelper::componentExists($formId, 27))
$link3 = "displayTemplate('27', '".$components[0]."')";
if ($components = RSFormProHelper::componentExists($formId, 28))
$link4 = "displayTemplate('28', '".$components[0]."')";
$doc = JFactory::getDocument();
$doc->addStyleDeclaration('ul.rsform_leftnav li a span#payment, ul.rsform_leftnav li a#payment span { background: url(components/com_rsform/assets/images/icons/payment.png) no-repeat 10px center; }');
$doc->addStyleDeclaration('ul.rsform_leftnav li a span#donation { background: url(components/com_rsform/assets/images/icons/donation.png) no-repeat 10px center; }');
$doc->addStyleDeclaration('ul.rsform_leftnav li a span#total { background: url(components/com_rsform/assets/images/icons/total.png) no-repeat 10px center; }');
$doc->addStyleDeclaration('ul.rsform_leftnav li a span#choosepayment { background: url(components/com_rsform/assets/images/icons/choosepayment.png) no-repeat 10px center; }');
?>
<li class="rsform_navtitle"><?php echo JText::_('RSFP_PAYMENT'); ?></li>
<li><a href="javascript: void(0);" onclick="<?php echo $link1;?>;return false;" id="rsfpc21"><span id="payment"><?php echo JText::_('RSFP_SPRODUCT'); ?></span></a></li>
<li><a href="javascript: void(0);" onclick="displayTemplate('22');return false;" id="rsfpc22"><span id="payment"><?php echo JText::_('RSFP_MPRODUCT'); ?></span></a></li>
<li><a href="javascript: void(0);" onclick="<?php echo $link4;?>;return false;" id="rsfpc28"><span id="donation"><?php echo JText::_('RSFP_DONATION'); ?></span></a></li>
<li><a href="javascript: void(0);" onclick="<?php echo $link2;?>;return false;" id="rsfpc23"><span id="total"><?php echo JText::_('RSFP_TOTAL'); ?></span></a></li>
<li><a href="javascript: void(0);" onclick="<?php echo $link3;?>;return false;" id="rsfpc27"><span id="choosepayment"><?php echo JText::_('RSFP_CHOOSE_PAYMENT'); ?></span></a></li>
<?php
}
public function rsfp_bk_onAfterShowFormEditTabs() {
$formId = JRequest::getInt('formId');
$lang = JFactory::getLanguage();
$lang->load('plg_system_rsfppayment');
$row = JTable::getInstance('RSForm_Payment', 'Table');
if (!$row)
return;
$row->load($formId);
$row->params = !empty($row->params) ? unserialize($row->params) : new stdClass();
$def_params = array('UserEmail', 'AdminEmail', 'AdditionalEmails');
foreach ($def_params as $def_param)
if (!isset($row->params->{$def_param}))
$row->params->{$def_param} = 0;
$lists['UserEmail'] = RSFormProHelper::renderHTML('select.booleanlist','payment[UserEmail]','class="inputbox"',$row->params->UserEmail);
$lists['AdminEmail'] = RSFormProHelper::renderHTML('select.booleanlist','payment[AdminEmail]','class="inputbox"',$row->params->AdminEmail);
$lists['AdditionalEmails'] = RSFormProHelper::renderHTML('select.booleanlist','payment[AdditionalEmails]','class="inputbox"',$row->params->AdditionalEmails);
echo '<div id="paymentdiv">';
include JPATH_ADMINISTRATOR.'/components/com_rsform/helpers/payment.php';
echo '</div>';
}
public function rsfp_bk_onAfterShowFormEditTabsTab() {
$lang = JFactory::getLanguage();
$lang->load('plg_system_rsfppayment');
echo '<li><a href="javascript: void(0);" id="payment"><span>'.JText::_('RSFP_PAYMENT_EMAIL_SETTINGS').'</span></a></li>';
}
public function rsfp_onFormSave($form) {
$post = JRequest::get('post', JREQUEST_ALLOWRAW);
$row = JTable::getInstance('RSForm_Payment', 'Table');
if (!$row)
return;
$row->form_id = $post['formId'];
$params = new stdClass();
if (isset($post['payment']) && is_array($post['payment']))
foreach ($post['payment'] as $key => $value)
$params->{$key} = $value;
$row->params = serialize($params);
$db = JFactory::getDBO();
$db->setQuery("SELECT form_id FROM #__rsform_payment WHERE form_id='".(int) $post['formId']."'");
if (!$db->loadResult())
{
$db->setQuery("INSERT INTO #__rsform_payment SET form_id='".(int) $post['formId']."'");
$db->execute();
}
if ($row->store())
{
return true;
}
else
{
JError::raiseWarning(500, $row->getError());
return false;
}
}
public function rsfp_bk_onAfterCreateComponentPreview($args = array()) {
$nodecimals = RSFormProHelper::getConfig('payment.nodecimals');
$decimal = RSFormProHelper::getConfig('payment.decimal');
$thousands = RSFormProHelper::getConfig('payment.thousands');
$currency = RSFormProHelper::getConfig('payment.currency');
switch ($args['ComponentTypeName'])
{
case 'singleProduct':
if (!$args['data']['PRICE']) {
$args['data']['PRICE'] = 0;
}
$args['out'] = '<td>'.$args['data']['CAPTION'].'</td>';
$args['out'].= '<td><img src="'.JURI::root(true).'/administrator/components/com_rsform/assets/images/icons/payment.png" /> '.$args['data']['CAPTION'].' - '.number_format($args['data']['PRICE'], $nodecimals, $decimal, $thousands).' '.$currency.'</td>';
break;
case 'multipleProducts':
$out =& $args['out'];
$data =& $args['data'];
$out = '<td>'.$data['CAPTION'].'</td>';
$out .= '<td><img src="'.JURI::root(true).'/administrator/components/com_rsform/assets/images/icons/payment.png" />';
$items = RSFormProHelper::explode(RSFormProHelper::isCode($data['ITEMS']));
if ($data['VIEW_TYPE'] == 'DROPDOWN') {
$out .= '<select '.($data['MULTIPLE']=='YES' ? 'multiple="multiple"' : '').'>';
$special = array('[c]', '[g]', '[d]');
foreach ($items as $item) {
@list($val, $txt) = @explode('|', str_replace($special, '', $item), 2);
if (is_null($txt))
$txt = $val;
if (!$val) {
$val = 0;
}
if ($val) {
$txt_price = $this->_getPriceMask($txt, $val);
} else {
$txt_price = $txt;
}
// <optgroup>
if (strpos($item, '[g]') !== false) {
$out .= '<optgroup label="'.$this->_escape($val).'">';
continue;
}
// </optgroup>
if(strpos($item, '[/g]') !== false) {
$out .= '</optgroup>';
continue;
}
$additional = '';
// selected
if (strpos($item, '[c]') !== false)
$additional .= 'selected="selected"';
// disabled
if (strpos($item, '[d]') !== false)
$additional .= 'disabled="disabled"';
$out .= '<option '.$additional.' value="'.($val ? $this->_escape($txt) : '').'">'.$this->_escape($txt_price).'</option>';
}
$out .= '</select>';
} elseif ($data['VIEW_TYPE'] == 'CHECKBOX' || $data['VIEW_TYPE'] == 'RADIOGROUP') {
$i = 0;
$special = array('[c]', '[d]');
$type = $data['VIEW_TYPE'] == 'CHECKBOX' ? 'checkbox' : 'radio';
foreach ($items as $item) {
@list($val, $txt) = @explode('|', str_replace($special, '', $item), 2);
if (is_null($txt))
$txt = $val;
if (!$val) {
$val = 0;
}
$txt_price = $this->_getPriceMask($txt, $val);
$additional = '';
// checked
if (strpos($item, '[c]') !== false)
$additional .= 'checked="checked"';
// disabled
if (strpos($item, '[d]') !== false)
$additional .= 'disabled="disabled"';
$out .= '<input '.$additional.' type="'.$type.'" value="'.$this->_escape($txt).'" /><label>'.$txt_price.'</label>';
if ($data['FLOW']=='VERTICAL') {
$out .= '<br />';
}
$i++;
}
}
$out .= '</td>';
break;
case 'total':
$args['out'] = '<td>'.$args['data']['CAPTION'].'</td>';
$args['out'].= '<td><img src="'.JURI::root(true).'/administrator/components/com_rsform/assets/images/icons/total.png" /> '.number_format(0, $nodecimals, $decimal, $thousands).' '.$currency.'</td>';
break;
case 'choosePayment':
$out =& $args['out'];
$data =& $args['data'];
$out = '<td>'.$data['CAPTION'].'</td>';
$out .= '<td><img src="'.JURI::root(true).'/administrator/components/com_rsform/assets/images/icons/choosepayment.png" /> ';
$items = $this->_getPayments($args['formId']);
if ($data['VIEW_TYPE'] == 'DROPDOWN') {
$out .= '<select>';
foreach ($items as $item) {
$out .= '<option>'.$this->_escape($item->text).'</option>';
}
$out .= '</select>';
} elseif ($data['VIEW_TYPE'] == 'RADIOGROUP') {
$i = 0;
foreach ($items as $item) {
$checked = $i == 0 ? 'checked="checked"' : '';
$out .= '<input '.$checked.' type="radio" value="'.$this->_escape($item->value).'" id="'.$data['NAME'].$i.'" /><label for="'.$data['NAME'].$i.'">'.$this->_escape($item->text).'</label>';
if ($data['FLOW']=='VERTICAL') {
$out .= '<br />';
}
$i++;
}
}
$out .= '</td>';
break;
case 'donationProduct':
$defaultValue = RSFormProHelper::isCode($args['data']['DEFAULTVALUE']);
$args['out'] = '<td>'.$args['data']['CAPTION'].'</td>';
$args['out'] .= '<td><img src="'.JURI::root(true).'/administrator/components/com_rsform/assets/images/icons/payment.png" /> <input type="text" value="'.$this->_escape($defaultValue).'" size="'.$args['data']['SIZE'].'" /></td>';
break;
}
}
public function rsfp_bk_onAfterShowConfigurationTabs($tabs) {
$lang = JFactory::getLanguage();
$lang->load('plg_system_rsfppayment');
$tabs->addTitle(JText::_('RSFP_PAYMENT'), 'form-payment');
$tabs->addContent($this->paymentConfigurationScreen());
}
public function rsfp_bk_onAfterCreateFrontComponentBody($args) {
$db = JFactory::getDBO();
$nodecimals = RSFormProHelper::getConfig('payment.nodecimals');
$decimal = RSFormProHelper::getConfig('payment.decimal');
$thousands = RSFormProHelper::getConfig('payment.thousands');
$currency = RSFormProHelper::getConfig('payment.currency');
$totalMask = RSFormProHelper::getConfig('payment.totalmask');
$value = $args['value'];
$formId = (int) $args['formId'];
$db->setQuery("SELECT FormLayoutName FROM #__rsform_forms WHERE FormId='".$formId."'");
$layoutName = $db->loadResult();
$out =& $args['out'];
$data =& $args['data'];
$invalid =& $args['invalid'];
switch($args['r']['ComponentTypeId'])
{
case 21:
{
$out = '<input type="hidden" value="'.$this->_escape($data['PRICE']).'" />';
$out .= '<input type="hidden" name="form['.$data['NAME'].']" id="'.$data['NAME'].'" value="'.$this->_escape($data['CAPTION']).'" />';
}
break;
case 22:
{
if (!isset($this->_products[$args['componentId']])) {
$this->_products[$args['componentId']] = array();
}
switch($args['data']['VIEW_TYPE'])
{
case 'DROPDOWN':
{
$className = 'rsform-select-box';
if ($invalid)
$className .= ' rsform-error';
RSFormProHelper::addClass($data['ADDITIONALATTRIBUTES'], $className);
$out .= '<select '.($data['MULTIPLE']=='YES' ? 'multiple="multiple"' : '').' name="form['.$data['NAME'].'][]" '.((int) $data['SIZE'] > 0 ? 'size="'.(int) $data['SIZE'].'"' : '').' id="payment-'.$args['componentId'].'" '.$data['ADDITIONALATTRIBUTES'].' onchange="getPrice_'.$args['formId'].'();">';
$items = RSFormProHelper::explode(RSFormProHelper::isCode($data['ITEMS']));
$special = array('[c]', '[g]', '[d]');
foreach ($items as $item)
{
@list($val, $txt) = @explode('|', str_replace($special, '', $item), 2);
if (is_null($txt))
$txt = $val;
if ($val) {
$txt_price = $this->_getPriceMask($txt, $val);
} else { // no point showing - 0.00
$txt_price = $txt;
if ($val === '0') {
$val = $txt;
}
}
// <optgroup>
if (strpos($item, '[g]') !== false) {
$out .= '<optgroup label="'.$this->_escape($val).'">';
continue;
}
// </optgroup>
if(strpos($item, '[/g]') !== false) {
$out .= '</optgroup>';
continue;
}
$additional = '';
// selected
if ((strpos($item, '[c]') !== false && empty($value)) || (isset($value[$data['NAME']]) && in_array($txt, $value[$data['NAME']])))
$additional .= 'selected="selected"';
// disabled
if (strpos($item, '[d]') !== false)
$additional .= 'disabled="disabled"';
$out .= '<option '.$additional.' value="'.($val ? $this->_escape($txt) : '').'">'.$this->_escape($txt_price).'</option>';
$this->_products[$args['componentId']][] = array(
'val' => $val,
'txt' => $txt
);
}
$out .= '</select>';
}
break;
case 'CHECKBOX':
{
$i = 0;
$items = RSFormProHelper::explode(RSFormProHelper::isCode($data['ITEMS']));
$special = array('[c]', '[d]');
foreach ($items as $item)
{
@list($val, $txt) = @explode('|', str_replace($special, '', $item), 2);
if (is_null($txt))
$txt = $val;
if ($val) {
$txt_price = $this->_getPriceMask($txt, $val);
} else { // no point showing - 0.00
$txt_price = $txt;
if ($val === '0') {
$val = $txt;
}
}
$additional = '';
// checked
if ((strpos($item, '[c]') !== false && empty($value)) || (isset($value[$data['NAME']]) && in_array($txt, $value[$data['NAME']])))
$additional .= 'checked="checked"';
// disabled
if (strpos($item, '[d]') !== false)
$additional .= 'disabled="disabled"';
if ($data['FLOW']=='VERTICAL' && $layoutName == 'responsive')
$out .= '<p class="rsformVerticalClear">';
$out .= '<input '.$additional.' name="form['.$data['NAME'].'][]" type="checkbox" value="'.$this->_escape($txt).'" id="payment-'.$args['componentId'].'-'.$i.'" '.$data['ADDITIONALATTRIBUTES'].' onclick="getPrice_'.$args['formId'].'();" /><label for="payment-'.$args['componentId'].'-'.$i.'">'.$txt_price.'</label>';
if ($data['FLOW']=='VERTICAL')
{
if ($layoutName == 'responsive')
$out .= '</p>';
else
$out .= '<br />';
}
$this->_products[$args['componentId']][] = array(
'val' => $val,
'txt' => $txt
);
$i++;
}
}
break;
case 'RADIOGROUP':
{
$i = 0;
$items = RSFormProHelper::explode(RSFormProHelper::isCode($data['ITEMS']));
$special = array('[c]', '[d]');
foreach ($items as $item)
{
@list($val, $txt) = @explode('|', str_replace($special, '', $item), 2);
if (is_null($txt))
$txt = $val;
if ($val) {
$txt_price = $this->_getPriceMask($txt, $val);
} else { // no point showing - 0.00
$txt_price = $txt;
if ($val === '0') {
$val = $txt;
}
}
$additional = '';
// checked
if ((strpos($item, '[c]') !== false && empty($value)) || (isset($value[$data['NAME']]) && in_array($txt, $value[$data['NAME']])))
$additional .= 'checked="checked"';
// disabled
if (strpos($item, '[d]') !== false)
$additional .= 'disabled="disabled"';
if ($data['FLOW']=='VERTICAL' && $layoutName == 'responsive')
$out .= '<p class="rsformVerticalClear">';
$out .= '<input '.$additional.' name="form['.$data['NAME'].']" type="radio" value="'.$this->_escape($txt).'" id="payment-'.$args['componentId'].'-'.$i.'" '.$data['ADDITIONALATTRIBUTES'].' onclick="getPrice_'.$args['formId'].'();" /><label for="payment-'.$args['componentId'].'-'.$i.'">'.$txt_price.'</label>';
if ($data['FLOW']=='VERTICAL')
{
if ($layoutName == 'responsive')
$out .= '</p>';
else
$out .= '<br />';
}
$this->_products[$args['componentId']][] = array(
'val' => $val,
'txt' => $txt
);
$i++;
}
}
break;
}
}
break;
case 23:
{
$price = number_format(0, $nodecimals, $decimal, $thousands);
$total = str_replace(array('{price}', '{currency}'), array($price, $currency), $totalMask);
$args['out'] = '<span id="payment_total_'.$args['formId'].'" class="rsform_payment_total">'.$total.'</span> <input type="hidden" id="'.$args['data']['NAME'].'" value="0" name="form['.$args['data']['NAME'].']" />';
}
break;
case 28:
{
$defaultValue = RSFormProHelper::isCode($data['DEFAULTVALUE']);
$className = 'rsform-input-box';
if ($invalid)
$className .= ' rsform-error';
RSFormProHelper::addClass($data['ADDITIONALATTRIBUTES'], $className);
$out .= '<input type="text" value="'.(isset($value[$data['NAME']]) ? $this->_escape($value[$data['NAME']]) : $this->_escape($defaultValue)).'" size="'.$data['SIZE'].'" '.((int) $data['MAXSIZE'] > 0 ? 'maxlength="'.(int) $data['MAXSIZE'].'"' : '').' onkeyup="getPrice_'.$formId.'()" name="form['.$data['NAME'].']" id="'.$data['NAME'].'" '.$data['ADDITIONALATTRIBUTES'].'/>';
}
break;
case 27:
{
$data = $args['data'];
$out =& $args['out'];
$value = $args['value'];
if (isset($data['SHOW']) && $data['SHOW'] == 'NO') {
$doc = JFactory::getDocument();
$doc->addStyleDeclaration('.rsform-block-'.JFilterOutput::stringURLSafe($data['NAME']).' { display: none !important; }');
}
$items = $this->_getPayments($args['formId']);
if ($data['VIEW_TYPE'] == 'DROPDOWN') {
$className = 'rsform-select-box';
RSFormProHelper::addClass($data['ADDITIONALATTRIBUTES'], $className);
$out .= '<select name="form['.$data['NAME'].'][]" id="'.$data['NAME'].'" '.$data['ADDITIONALATTRIBUTES'].' >';
foreach ($items as $item)
{
$selected = '';
if (isset($value[$data['NAME']]) && in_array($item->value, $value[$data['NAME']]))
$selected = 'selected="selected"';
$out .= '<option '.$selected.' value="'.$this->_escape($item->value).'">'.$this->_escape($item->text).'</option>';
}
$out .= '</select>';
} elseif ($data['VIEW_TYPE'] == 'RADIOGROUP') {
$i = 0;
foreach ($items as $item)
{
$checked = '';
if (isset($value[$data['NAME']]) && $item->value == $value[$data['NAME']])
$checked = 'checked="checked"';
elseif (!isset($value[$data['NAME']]) && $i == 0)
$checked = 'checked="checked"';
if ($data['FLOW']=='VERTICAL' && $layoutName == 'responsive')
$out .= '<p class="rsformVerticalClear">';
$out .= '<input name="form['.$data['NAME'].']" type="radio" '.$checked.' value="'.$this->_escape($item->value).'" id="'.$data['NAME'].$i.'" '.$data['ADDITIONALATTRIBUTES'].' /><label for="'.$data['NAME'].$i.'">'.$this->_escape($item->text).'</label>';
if ($data['FLOW']=='VERTICAL')
{
if ($layoutName == 'responsive')
$out .= '</p>';
else
$out .= '<br />';
}
$i++;
}
}
}
break;
}
}
protected function _escape($string) {
return RSFormProHelper::htmlEscape($string);
}
protected function _getPayments($formId) {
$items = array();
$mainframe = JFactory::getApplication();
$mainframe->triggerEvent('rsfp_getPayment', array(&$items, $formId));
return $items;
}
public function rsfp_afterConfirmPayment($SubmissionId) {
RSFormProHelper::sendSubmissionEmails($SubmissionId);
}
public function rsfp_f_onBeforeFormDisplay($args) {
$formId = $args['formId'];
$formLayout = &$args['formLayout'];
$nodecimals = RSFormProHelper::getConfig('payment.nodecimals');
$decimal = RSFormProHelper::getConfig('payment.decimal');
$thousands = RSFormProHelper::getConfig('payment.thousands');
$currency = RSFormProHelper::getConfig('payment.currency');
$totalMask = RSFormProHelper::getConfig('payment.totalmask');
$donation = RSFormProHelper::componentExists($formId, 28);
$single = RSFormProHelper::componentExists($formId, 21);
$multiple = RSFormProHelper::componentExists($formId, 22);
$total = RSFormProHelper::componentExists($formId, 23);
$allComponents = array();
if ($donation) {
$allComponents = array_merge($allComponents, $donation);
}
if ($single) {
$allComponents = array_merge($allComponents, $single);
}
if ($multiple) {
$allComponents = array_merge($allComponents, $multiple);
}
if ($total) {
$allComponents = array_merge($allComponents, $total);
}
// no point going ahead if we have no fields added
if (!$allComponents) {
return;
}
$properties = RSFormProHelper::getComponentProperties($allComponents);
$formLayout .= '<script type="text/javascript">'."\n";
$formLayout .= 'function getPrice_'.$formId.'() {'."\n";
$formLayout .= 'var total = 0;'."\n";
// Single product
if ($single) {
$data = $properties[$single[0]];
$formLayout .= "var singlePrice = parseFloat('".addslashes($data['PRICE'])."');\n";
$formLayout .= "if (!isNaN(singlePrice)) {\n";
$formLayout .= "total += singlePrice;\n";
$formLayout .= "}\n";
}
// Donation field
if ($donation) {
$data = $properties[$donation[0]];
$formLayout .= "var donationPrice = parseFloat(document.getElementById('".addslashes($data['NAME'])."').value);\n";
$formLayout .= "if (!isNaN(donationPrice)) {\n";
$formLayout .= "total += donationPrice;\n";
$formLayout .= "}\n";
}
// Multiple products
if ($multiple) {
$formLayout .= 'var products = {};'."\n";
foreach ($multiple as $componentId) {
$data = $properties[$componentId];
$formLayout .= 'products['.$componentId.'] = [];'."\n";
if (isset($this->_products[$componentId])) {
foreach ($this->_products[$componentId] as $item) {
$txt = $item['txt'];
$val = $item['val'];
$formLayout .= "products[".$componentId."].push(parseFloat('".addslashes($val)."'));\n";
}
$formLayout .= "var fields = rsfp_getFieldsByName($formId, '".addslashes($data['NAME'])."');\n";
if ($data['VIEW_TYPE'] == 'DROPDOWN') {
$formLayout .= "for (var i=0; i<fields[0].options.length; i++) {\n";
$formLayout .= "if (fields[0].options[i].selected && typeof products[".$componentId."][i] != 'undefined') {\n";
$formLayout .= "var price = products[".$componentId."][i];\n";
$formLayout .= "if (!isNaN(price)) {\n";
$formLayout .= "total += price;\n";
$formLayout .= "}\n";
$formLayout .= "}\n";
$formLayout .= "}\n";
} elseif ($data['VIEW_TYPE'] == 'CHECKBOX' || $data['VIEW_TYPE'] == 'RADIOGROUP') {
$formLayout .= "for (var i=0; i<fields.length; i=i+2) {\n";
$formLayout .= "if (fields[i].checked && typeof products[".$componentId."][i/2] != 'undefined') {\n";
$formLayout .= "var price = products[".$componentId."][i/2];\n";
$formLayout .= "if (!isNaN(price)) {\n";
$formLayout .= "total += price;\n";
$formLayout .= "}\n";
$formLayout .= "}\n";
$formLayout .= "}\n";
}
}
}
}
// Format the price
$formLayout .= "var formattedTotal = number_format(total, '".addslashes($nodecimals)."', '".addslashes($decimal)."', '".addslashes($thousands)."');\n";
$formLayout .= "var hiddenFormattedTotal = number_format(total, 2, '.', '');\n";
// Total field - populate it
if ($total) {
$data = $properties[$total[0]];
$formLayout .= "var totalMask = '".addslashes($totalMask)."';\n";
$formLayout .= "totalMask = totalMask.replace('{price}', formattedTotal);\n";
$formLayout .= "totalMask = totalMask.replace('{currency}', '".addslashes($currency)."');\n";
$formLayout .= "document.getElementById('payment_total_".$formId."').innerHTML = totalMask;\n";
$formLayout .= "document.getElementById('".addslashes($data['NAME'])."').value = hiddenFormattedTotal;\n";
}
$formLayout = str_replace('</form>', '<input type="hidden" name="form[rsfp_Total]" value="0" />'."\n".'</form>', $formLayout);
$formLayout .= "var field = rsfp_getFieldsByName($formId, 'rsfp_Total');\n";
$formLayout .= "field[0].value = hiddenFormattedTotal;\n";
$formLayout .= '}'."\n";
$formLayout .= 'getPrice_'.$formId.'();'."\n";
$formLayout .= '</script>';
}
public function rsfp_f_onBeforeStoreSubmissions($args) {
if (RSFormProHelper::componentExists($args['formId'], $this->newComponents)) {
$args['post']['_STATUS'] = '0';
}
}
public function rsfp_f_onAfterFormProcess($args) {
if (RSFormProHelper::componentExists($args['formId'], $this->newComponents))
{
$db = JFactory::getDBO();
$products = array();
$donation = RSFormProHelper::componentExists($args['formId'], 28);
$single = RSFormProHelper::componentExists($args['formId'], 21);
$multiple = RSFormProHelper::componentExists($args['formId'], 22);
$total = RSFormProHelper::componentExists($args['formId'], 23);
$choosePayment = RSFormProHelper::componentExists($args['formId'], 27);
$allComponents = array();
if ($donation) {
$allComponents = array_merge($allComponents, $donation);
}
if ($single) {
$allComponents = array_merge($allComponents, $single);
}
if ($multiple) {
$allComponents = array_merge($allComponents, $multiple);
}
if ($total) {
$allComponents = array_merge($allComponents, $total);
}
$properties = RSFormProHelper::getComponentProperties($allComponents);
// PayPal, for legacy reasons
$hasPayPal = RSFormProHelper::componentExists($args['formId'], 500);
// Total price
$price = $this->_getSubmissionValue($args['SubmissionId'], 'rsfp_Total');
// Build products information
// Single product
if ($single) {
$data = $properties[$single[0]];
$products[] = strip_tags($data['CAPTION']);
}
// Multiple product
if ($multiple) {
foreach ($multiple as $componentId) {
$data = $properties[$componentId];
$bought = $this->_getSubmissionValue($args['SubmissionId'], $data['NAME']);
if ($bought) {
$products[] = strip_tags($data['CAPTION'].' - '.$bought);
}
}
}
// Donation product
if ($donation) {
$data = $properties[$donation[0]];
$donated = $this->_getSubmissionValue($args['SubmissionId'], $data['NAME']);
if ($donated) {
$products[] = strip_tags($data['CAPTION']);
}
}
if (($choosePayment && ($payValue = $this->_getSubmissionValue($args['SubmissionId'], $choosePayment[0]))) || ($hasPayPal && !$choosePayment && $payValue = 'paypal'))
{
//build verification code
$db->setQuery("SELECT DateSubmitted FROM #__rsform_submissions WHERE SubmissionId = '".$args['SubmissionId']."'");
$code = md5($args['SubmissionId'].$db->loadResult());
$mainframe = JFactory::getApplication();
$mainframe->triggerEvent('rsfp_doPayment', array($payValue, $args['formId'], $args['SubmissionId'], $price, $products, $code));
}
}
}
protected function _getComponentName($componentId) {
$componentId = (int) $componentId;
$db = JFactory::getDBO();
$db->setQuery("SELECT PropertyValue FROM #__rsform_properties WHERE ComponentId='".$componentId."' AND PropertyName='NAME'");
return $db->loadResult();
}
protected function _getComponentId($name, $formId) {
$formId = (int) $formId;
$db = JFactory::getDBO();
$db->setQuery("SELECT p.ComponentId FROM #__rsform_properties p LEFT JOIN #__rsform_components c ON (p.ComponentId=c.ComponentId) WHERE p.PropertyValue='".$db->escape($name)."' AND p.PropertyName='NAME' AND c.FormId='".$formId."'");
return $db->loadResult();
}
protected function _getSubmissionValue($submissionId, $componentId) {
if (is_numeric($componentId)) {
$name = $this->_getComponentName($componentId);
} else {
$name = $componentId;
}
$db = JFactory::getDBO();
$db->setQuery("SELECT FieldValue FROM #__rsform_submission_values WHERE SubmissionId='".(int) $submissionId."' AND FieldName='".$db->escape($name)."'");
return $db->loadResult();
}
protected function paymentConfigurationScreen() {
ob_start();
?>
<div id="page-payments">
<table class="admintable">
<tr>
<td width="200" style="width: 200px;" align="right" class="key"><label for="currency"><?php echo JText::_( 'RSFP_PAYMENT_CURRENCY' ); ?></label></td>
<td><input type="text" name="rsformConfig[payment.currency]" value="<?php echo $this->_escape(RSFormProHelper::getConfig('payment.currency')); ?>" size="4" maxlength="50"></td>
</tr>
<tr>
<td width="200" style="width: 200px;" align="right" class="key"><label for="thousands"><?php echo JText::_( 'RSFP_PAYMENT_THOUSANDS' ); ?></label></td>
<td><input type="text" name="rsformConfig[payment.thousands]" value="<?php echo $this->_escape(RSFormProHelper::getConfig('payment.thousands')); ?>" size="4" maxlength="50"></td>
</tr>
<tr>
<td width="200" style="width: 200px;" align="right" class="key"><label for="decimal"><?php echo JText::_( 'RSFP_PAYMENT_DECIMAL_SEPARATOR' ); ?></label></td>
<td><input type="text" name="rsformConfig[payment.decimal]" value="<?php echo $this->_escape(RSFormProHelper::getConfig('payment.decimal')); ?>" size="4" maxlength="50"></td>
</tr>
<tr>
<td width="200" style="width: 200px;" align="right" class="key"><label for="nr.decimal"><?php echo JText::_( 'RSFP_PAYMENT_NR_DECIMALS' ); ?></label></td>
<td><input type="text" name="rsformConfig[payment.nodecimals]" value="<?php echo $this->_escape(RSFormProHelper::getConfig('payment.nodecimals')); ?>" size="4" maxlength="50"></td>
</tr>
<tr>
<td width="200" style="width: 200px;" align="right" class="key hasTip" title="<?php echo JText::_( 'RSFP_PAYMENT_MASK_DESC' ); ?>"><label for="nr.decimal"><?php echo JText::_( 'RSFP_PAYMENT_MASK' ); ?></label></td>
<td><input type="text" name="rsformConfig[payment.mask]" value="<?php echo $this->_escape(RSFormProHelper::getConfig('payment.mask')); ?>" size="100"></td>
</tr>
<tr>
<td width="200" style="width: 200px;" align="right" class="key hasTip" title="<?php echo JText::_( 'RSFP_PAYMENT_TOTAL_MASK_DESC' ); ?>"><label for="nr.decimal"><?php echo JText::_( 'RSFP_PAYMENT_TOTAL_MASK' ); ?></label></td>
<td><input type="text" name="rsformConfig[payment.totalmask]" value="<?php echo $this->_escape(RSFormProHelper::getConfig('payment.totalmask')); ?>" size="100"></td>
</tr>
</table>
</div>
<?php
$contents = ob_get_contents();
ob_end_clean();
return $contents;
}
public function rsfp_beforeUserEmail($args) {
$form =& $args['form'];
$db = JFactory::getDBO();
$db->setQuery("SELECT `params` FROM #__rsform_payment WHERE form_id='".(int) $form->FormId."'");
if ($params = $db->loadResult())
{
$params = @unserialize($params);
if (is_object($params) && isset($params->UserEmail))
{
$db->setQuery("SELECT FieldValue,FieldName FROM #__rsform_submission_values WHERE FieldName='_STATUS' AND SubmissionId='".(int) $args['submissionId']."'");
if ($status = $db->loadObject())
{
$task = JRequest::getCmd('task');
$app = JFactory::getApplication();
if ($app->isAdmin() && $task == 'submissions.resend') {
// nothing for the resend button
} else {
// defer sending if
// - user email is defered && the payment is not confirmed (send email only when payment is confirmed)
if ($params->UserEmail == 1 && $status->FieldValue == 0)
$args['userEmail']['to'] = '';
if ($params->UserEmail == 0 && $status->FieldValue == 1)
// - user email is not defered && the payment is confirmed (don't send the email once again, it has already been sent)
$args['userEmail']['to'] = '';
}
}
}
}
}
public function rsfp_beforeAdminEmail($args) {
$form =& $args['form'];
$db = JFactory::getDBO();
$db->setQuery("SELECT `params` FROM #__rsform_payment WHERE form_id='".(int) $form->FormId."'");
if ($params = $db->loadResult())
{
$params = @unserialize($params);
if (is_object($params) && isset($params->AdminEmail))
{
$db->setQuery("SELECT FieldValue,FieldName FROM #__rsform_submission_values WHERE FieldName='_STATUS' AND SubmissionId='".(int) $args['submissionId']."'");
if ($status = $db->loadObject())
{
$task = JRequest::getCmd('task');
$app = JFactory::getApplication();
if ($app->isAdmin() && $task == 'submissions.resend') {
// nothing for the resend button
} else {
// defer sending if
// - admin email is defered && the payment is not confirmed (send email only when payment is confirmed)
if ($params->AdminEmail == 1 && $status->FieldValue == 0)
$args['adminEmail']['to'] = '';
if ($params->AdminEmail == 0 && $status->FieldValue == 1)
// - admin email is not defered && the payment is confirmed (don't send the email once again, it has already been sent)
$args['adminEmail']['to'] = '';
}
}
}
}
}
public function rsfp_beforeAdditionalEmail($args) {
$form =& $args['form'];
$db = JFactory::getDBO();
$db->setQuery("SELECT `params` FROM #__rsform_payment WHERE form_id='".(int) $form->FormId."'");
if ($params = $db->loadResult())
{
$params = @unserialize($params);
if (is_object($params) && isset($params->AdditionalEmails))
{
$db->setQuery("SELECT FieldValue,FieldName FROM #__rsform_submission_values WHERE FieldName='_STATUS' AND SubmissionId='".(int) $args['submissionId']."'");
if ($status = $db->loadObject())
{
$task = JRequest::getCmd('task');
$app = JFactory::getApplication();
if ($app->isAdmin() && $task == 'submissions.resend') {
// nothing for the resend button
} else {
// defer sending if
// - admin email is defered && the payment is not confirmed (send email only when payment is confirmed)
if ($params->AdditionalEmails == 1 && $status->FieldValue == 0)
$args['additionalEmail']['to'] = '';
if ($params->AdditionalEmails == 0 && $status->FieldValue == 1)
// - admin email is not defered && the payment is confirmed (don't send the email once again, it has already been sent)
$args['additionalEmail']['to'] = '';
}
}
}
}
}
public function rsfp_onAfterCreatePlaceholders($args) {
$formId = $args['form']->FormId;
$submissionId = $args['submission']->SubmissionId;
$multipleSeparator = $args['form']->MultipleSeparator;
if (RSFormProHelper::componentExists($formId, $this->newComponents)) {
$singleProduct = RSFormProHelper::componentExists($formId, 21);
$multipleProducts = RSFormProHelper::componentExists($formId, 22);
$total = RSFormProHelper::componentExists($formId, 23);
$donationProduct = RSFormProHelper::componentExists($formId, 28);
$choosePayment = RSFormProHelper::componentExists($formId, 27);
// choose payment
if (!empty($choosePayment)) {
$details = RSFormProHelper::getComponentProperties($choosePayment[0]);
$items = $this->_getPayments($formId);
$value = $this->_getSubmissionValue($submissionId, $choosePayment[0]);
$text = '';
if ($items) {
foreach ($items as $item) {
if ($item->value == $value) {
$text = $item->text;
break;
}
}
}
$args['placeholders'][] = '{'.$details['NAME'].':text}';
$args['values'][] = $text;
}
// multiple products
if (!empty($multipleProducts)) {
foreach ($multipleProducts as $product)
{
$pdetail = RSFormProHelper::getComponentProperties($product);
$detail = $this->_getSubmissionValue($submissionId, $product);
if ($detail == '') continue;
$detail = explode("\n", $detail);
$items = RSFormProHelper::explode(RSFormProHelper::isCode($pdetail['ITEMS']));
$replace = '{'.$pdetail['NAME'].':price}';
$with = array();
foreach ($items as $item)
{
@list($val, $txt) = @explode('|', str_replace($special, '', $item), 2);
if (is_null($txt))
$txt = $val;
if (!$val) {
$val = 0;
}
if (in_array($txt, $detail)) {
$txt_price = $this->_getPriceMask($txt, $val);
$with[] = $txt_price;
}
}
$args['placeholders'][] = $replace;
$args['values'][] = implode($multipleSeparator, $with);
}
}
// donation
if (!empty($donationProduct)) {
$price = $this->_getSubmissionValue($submissionId, $donationProduct[0]);
$details = RSFormProHelper::getComponentProperties($donationProduct[0]);
$args['placeholders'][] = '{'.$details['NAME'].':price}';
$args['values'][] = $this->_getPriceMask($details['CAPTION'], $price);
}
// single product
if (!empty($singleProduct)) {
//Get Component properties
$data = RSFormProHelper::getComponentProperties($this->_getComponentId('rsfp_Product', $formId));
$price = $data['PRICE'];
$args['placeholders'][] = '{rsfp_Product:price}';
$args['values'][] = $this->_getPriceMask($data['CAPTION'], $price);
}
if (!empty($total)) {
$price = $this->_getSubmissionValue($submissionId, $total[0]);
$details = RSFormProHelper::getComponentProperties($total[0]);
$args['placeholders'][] = '{'.$details['NAME'].':price}';
$args['values'][] = $this->_getPriceMask($details['CAPTION'], $price);
}
}
}
private function _getPriceMask($txt, $val) {
static $init, $nodecimals, $decimal, $thousands, $currency, $mask;
if (!$init) {
$init = true;
$nodecimals = RSFormProHelper::getConfig('payment.nodecimals');
$decimal = RSFormProHelper::getConfig('payment.decimal');
$thousands = RSFormProHelper::getConfig('payment.thousands');
$currency = RSFormProHelper::getConfig('payment.currency');
$mask = RSFormProHelper::getConfig('payment.mask');
}
$formattedPrice = number_format((float) $val, $nodecimals, $decimal, $thousands);
$replacements = array(
'{product}' => $txt,
'{price}' => $formattedPrice,
'{currency}' => $currency,
);
return str_replace(array_keys($replacements), array_values($replacements), $mask);
}
public function rsfp_onFormDelete($formId) {
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->delete('#__rsform_payment')
->where($db->qn('form_id').'='.$db->q($formId));
$db->setQuery($query)->execute();
}
public function rsfp_onFormBackup($form, $xml, $fields) {
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('*')
->from($db->qn('#__rsform_payment'))
->where($db->qn('form_id').'='.$db->q($form->FormId));
$db->setQuery($query);
if ($payment = $db->loadObject()) {
// No need for a form_id
unset($payment->form_id);
$xml->add('payment');
foreach ($payment as $property => $value) {
$xml->add($property, $value);
}
$xml->add('/payment');
}
}
public function rsfp_onFormRestore($form, $xml, $fields) {
if (isset($xml->payment)) {
$data = array(
'form_id' => $form->FormId
);
foreach ($xml->payment->children() as $property => $value) {
$data[$property] = (string) $value;
}
$row = JTable::getInstance('RSForm_Payment', 'Table');
if (!$row->load($form->FormId)) {
$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query ->insert('#__rsform_payment')
->set(array(
$db->qn('form_id') .'='. $db->q($form->FormId),
));
$db->setQuery($query)->execute();
}
$row->save($data);
}
}
public function rsfp_bk_onFormRestoreTruncate() {
JFactory::getDbo()->truncateTable('#__rsform_payment');
}
}