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\MVC\Model\BaseDatabaseModel;
use Joomla\CMS\Factory;
use Joomla\CMS\Table\Table;
class RsformModelConditions extends BaseDatabaseModel
{
public function getFormId()
{
return Factory::getApplication()->input->getInt('formId');
}
public function getAllFields()
{
static $cache;
if ($cache === null)
{
$db = $this->getDbo();
$formId = $this->getFormId();
$query = $db->getQuery(true)
->select($db->qn('p.PropertyValue'))
->select($db->qn('p.ComponentId'))
->select($db->qn('c.ComponentTypeId'))
->from($db->qn('#__rsform_components', 'c'))
->join('LEFT', $db->qn('#__rsform_properties', 'p') . ' ON (' . $db->qn('c.ComponentId') . '=' . $db->qn('p.ComponentId') . ')')
->where($db->qn('c.FormId') . '=' . $db->q($formId))
->where($db->qn('p.PropertyName') . '=' . $db->q('NAME'))
->order($db->qn('c.Order') . ' ' . $db->escape('ASC'));
$cache = $db->setQuery($query)->loadObjectList();
}
return $cache;
}
public function getOptionFields()
{
$result = array();
$app = Factory::getApplication();
$formId = $this->getFormId();
$types = array(
RSFORM_FIELD_SELECTLIST,
RSFORM_FIELD_CHECKBOXGROUP,
RSFORM_FIELD_RADIOGROUP,
RSFORM_FIELD_RANGE_SLIDER
);
$app->triggerEvent('onRsformBackendCreateConditionOptionFields', array(array('types' => &$types, 'formId' => $formId)));
$types = array_map('intval', $types);
$optionFields = array();
if ($fields = $this->getAllFields())
{
foreach ($fields as $field)
{
if (in_array($field->ComponentTypeId, $types))
{
$optionFields[] = $field;
}
}
}
if ($optionFields)
{
$properties = RSFormProHelper::getComponentProperties($optionFields);
require_once JPATH_ADMINISTRATOR . '/components/com_rsform/helpers/fields/fielditem.php';
require_once JPATH_ADMINISTRATOR . '/components/com_rsform/helpers/fieldmultiple.php';
foreach ($optionFields as $optionField)
{
// Some cleanup
$optionField->ComponentName = $optionField->PropertyValue;
$optionField->items = array();
unset($optionField->PropertyValue);
$config = array(
'formId' => $formId,
'componentId' => $optionField->ComponentId,
'data' => $properties[$optionField->ComponentId],
'value' => array(),
'invalid' => false
);
// A workaround to allow Range Slider fields
if ($optionField->ComponentTypeId == RSFORM_FIELD_RANGE_SLIDER)
{
if ($config['data']['USEVALUES'] == 'YES')
{
$config['data']['ITEMS'] = $config['data']['VALUES'];
}
else
{
$config['data']['ITEMS'] = implode("\n", range($config['data']['MINVALUE'], $config['data']['MAXVALUE']));
}
}
$field = new RSFormProFieldMultiple($config);
$resultItems = array();
if ($items = $field->getItems())
{
foreach ($items as $item)
{
$item = new RSFormProFieldItem($item);
$app->triggerEvent('onRsformBackendCreateConditionOptionFieldItem', array(array('field' => &$optionField, 'item' => &$item, 'formId' => $formId)));
$resultItems[] = (object) array('value' => $item->value, 'label' => $item->label);
}
}
$result[$optionField->ComponentId] = (object) array(
'id' => $optionField->ComponentId,
'name' => $optionField->ComponentName,
'items' => $resultItems
);
}
}
return $result;
}
public function getCondition()
{
$cid = Factory::getApplication()->input->getInt('cid');
$row = Table::getInstance('RSForm_Conditions', 'Table');
$row->load($cid);
return $row;
}
public function getLang()
{
return RSFormProHelper::getCurrentLanguage($this->getFormId());
}
public function save()
{
$post = Factory::getApplication()->input->post->getArray(array(), null, 'raw');
$condition = Table::getInstance('RSForm_Conditions', 'Table');
try
{
$condition->save($post);
return $condition->id;
}
catch (Exception $e)
{
Factory::getApplication()->enqueueMessage($e->getMessage(), 'error');
return false;
}
}
public function remove()
{
$condition = Table::getInstance('RSForm_Conditions', 'Table');
$cid = Factory::getApplication()->input->getInt('cid');
try
{
return $condition->delete($cid);
}
catch (Exception $e)
{
Factory::getApplication()->enqueueMessage($e->getMessage(), 'error');
return false;
}
}
}