shell bypass 403
<?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;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Factory;
require_once JPATH_ADMINISTRATOR.'/components/com_rsform/helpers/field.php';
class RSFormProFieldPhonenumber extends RSFormProField
{
// backend preview
public function getPreviewInput()
{
$value = (string) $this->getProperty('DEFAULTVALUE', '');
$size = $this->getProperty('SIZE', 0);
$placeholder = $this->getProperty('PLACEHOLDER', '');
$codeIcon = '';
if ($this->hasCode($value)) {
$value = Text::_('RSFP_PHP_CODE_PLACEHOLDER');
$codeIcon = RSFormProHelper::getIcon('php');
}
return $codeIcon . '<span class="rsficon rsficon-phone1"></span> <input type="text" value="'.$this->escape($value).'" size="'.(int) $size.'" '.(!empty($placeholder) ? 'placeholder="'.$this->escape($placeholder).'"' : '').'/>';
}
// functions used for rendering in front view
public function getFormInput()
{
$this->addCommonTranslations();
$this->addStyleSheet(HTMLHelper::_('stylesheet', 'com_rsform/intlTelInput.css', array('pathOnly' => true, 'relative' => true)));
$this->addScript(HTMLHelper::_('script', 'com_rsform/intl-tel-input/intlTelInputWithUtils.js', array('pathOnly' => true, 'relative' => true)));
$this->addScript(HTMLHelper::_('script', 'com_rsform/phonenumber.script.js', array('pathOnly' => true, 'relative' => true)));
$value = (string) $this->getValue();
$name = $this->getName();
$id = $this->getId();
$size = $this->getProperty('SIZE', 0);
$placeholder = $this->getProperty('PLACEHOLDER', '');
$attr = $this->getAttributes();
$countries = $this->getProperty('ONLYCOUNTRIES', '');
$additional = '';
$initialCountry = $this->getProperty('INITIALCOUNTRY', 'AUTODETECTCOUNTRY');
if ($initialCountry === 'AUTODETECTCOUNTRY')
{
$initialCountry = 'auto';
}
else
{
$initialCountry = trim(strtolower($this->getProperty('MANUALCOUNTRY', 'US')));
}
$options = array(
'validation' => $this->getProperty('VALIDATIONPHONE') ? 'precise' : 'simple',
'showFlags' => $this->getProperty('HIDEFLAGS') ? false : true,
'allowDropdown' => $this->getProperty('HIDECOUNTRYDROPDOWN') ? false : true,
'onlyCountries' => !empty($countries) ? RSFormProHelper::explode($this->getProperty('ONLYCOUNTRIES', '')) : array(),
'initialCountry' => $initialCountry,
'i18n' => array()
);
$lang = Factory::getLanguage();
$translations = array('AF','AX','AL','DZ','AS','AD','AO','AI','AQ','AG','AR','AM','AW','AU','AT','AZ','BS','BH','BD','BB','BY','BE','BZ','BJ','BM','BT','BO','BA','BW','BV','BR','IO','VG','BN','BG','BF','BI','KH','CM','CA','CV','BQ','KY','CF','TD','CL','CN','CX','CC','CO','KM','CG','CD','CK','CR','CI', 'HR','CU','CW','CY','CZ','DK','DJ','DM','DO','EC','EG','SV','GQ','ER','EE','SZ','ET','FK','FO','FJ','FI','FR','GF','PF','TF','GA','GM','GE','DE','GH','GI','GR','GL','GD','GP','GU','GT','GG','GN','GW','GY','HT','HM','HN','HK','HU','IS','IN','ID','IR','IQ','IE','IM','IL','IT','JM','JP','JE','JO','KZ','KE','KI','KW','KG','LA','LV','LB','LS','LR','LY','LI','LT','LU','MO','MG','MW','MY','MV','ML','MT','MH','MQ','MR','MU','YT','MX','FM','MD','MC','MN','ME','MS','MA','MZ','MM','NA','NR','NP','NL','NC','NZ','NI','NE','NG','NU','NF','KP','MK','MP','NO','OM','PK','PW','PS','PA','PG','PY','PE','PH','PN','PL','PT','PR','QA','RE','RO','RU','RW','WS','SM','ST','SA','SN','RS','SC','SL','SG','SX','SK','SI','SB','SO','ZA','GS','KR','SS','ES','LK','BL','SH','KN','LC','MF','PM','VC','SD','SR','SJ','SE','CH','SY','TW','TJ','TZ','TH','TL','TG','TK','TO','TT','TN','TR','TM','TC','TV','UM','VI','UG','UA','AE','GB','US','UY','UZ','VU','VA','VE','VN','WF','EH','YE','ZM','ZW');
foreach ($translations as $translation)
{
if ($lang->hasKey('COM_RSFORM_PHONENUMBER_COUNTRY_' . $translation))
{
$options['i18n'][strtolower($translation)] = $lang->_('COM_RSFORM_PHONENUMBER_COUNTRY_' . $translation);
}
}
$html = '<input data-rsfp-phonenumber="' . $this->escape(json_encode($options)) . '"';
if (Factory::getDocument()->direction === 'rtl')
{
$html .= ' dir="rtl"';
}
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 == 'type' || $key == 'size' || $key == 'maxlength') && strlen($values)) {
${$key} = $values;
continue;
}
$additional .= $this->attributeToHtml($key, $values);
}
}
// Set the type & value
$html .= ' type="tel"'.
' value="'.$this->escape($value).'"';
// Size
if ($size) {
$html .= ' size="'.(int) $size.'"';
}
// Placeholder
if (!empty($placeholder)) {
$html .= ' placeholder="'.$this->escape($placeholder).'"';
}
// Name & id
$html .= ' name="'.$this->escape($name).'"'.
' id="'.$this->escape($id).'"';
// Additional HTML
$html .= $additional;
// Close the tag
$html .= ' />';
return $html;
}
public function getValue()
{
if (isset($this->value[$this->name]))
{
$input = Factory::getApplication()->input;
if ($collection = $input->get('hidden_phone', array(), 'array'))
{
if (isset($collection[$this->name]))
{
$this->value[$this->name] = $collection[$this->name];
}
}
}
return parent::getValue();
}
public function getAttributes() {
$attr = parent::getAttributes();
if (strlen($attr['class'])) {
$attr['class'] .= ' ';
}
$attr['class'] .= 'rsform-input-box';
return $attr;
}
public function processBeforeStore($submissionId, &$post, &$files)
{
if (!isset($post[$this->name]))
{
return false;
}
$input = Factory::getApplication()->input;
if ($collection = $input->get('hidden_phone', array(), 'array'))
{
if (isset($collection[$this->name]))
{
$post[$this->name] = $collection[$this->name];
}
}
}
private function addCommonTranslations()
{
static $done;
if (!$done)
{
$done = true;
$messages = array();
foreach (array('COM_RSFORM_PHONENUMBER_SELECTEDCOUNTRYARIALABEL', 'COM_RSFORM_PHONENUMBER_NOCOUNTRYSELECTED', 'COM_RSFORM_PHONENUMBER_COUNTRYLISTARIALABEL', 'COM_RSFORM_PHONENUMBER_SEARCHPLACEHOLDER', 'COM_RSFORM_PHONENUMBER_ZEROSEARCHRESULTS', 'COM_RSFORM_PHONENUMBER_ONESEARCHRESULT', 'COM_RSFORM_PHONENUMBER_MULTIPLESEARCHRESULTS') as $key)
{
$messages[] = array($key, Text::_($key));
}
$this->addScriptDeclaration('RSFormPro.Translations.addCommonTranslations(' . json_encode($messages) . ');');
}
}
}