Server : LiteSpeed System : Linux server 3.10.0-1160.90.1.el7.x86_64 #1 SMP Thu May 4 15:21:22 UTC 2023 x86_64 User : alsaif ( 1057) PHP Version : 7.4.33 Disable Function : show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname Directory : /home/alsaif/public_html/components/com_convertforms/controllers/ |
<?php
/**
* @package Convert Forms
* @version 4.3.3 Pro
*
* @author Tassos Marinos <info@tassos.gr>
* @link https://www.tassos.gr
* @copyright Copyright © 2023 Tassos All Rights Reserved
* @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
*/
defined('_JEXEC') or die('Restricted access');
use ConvertForms\Helper;
use ConvertForms\SmartTags;
use NRFramework\URLHelper;
use Joomla\CMS\Router\Route;
/**
* Convert Forms form submit controller
*
* @since 2.4.0
*/
class ConvertFormsControllerSubmit extends JControllerForm
{
/**
* Joomla Application Object
*
* @var object
*/
protected $app;
/**
* The secret key configured in the configuration page
*
* @var string
*/
protected $params;
/**
* Form data to be stored in the database
*
* @var array
*/
protected $form_data;
/**
* Represents the form ID to store the data to.
*
* @var integer
*/
protected $form_id;
/**
* Class Constructor
*
* @param string $key User API Key
*/
public function __construct()
{
$this->app = \JFactory::getApplication();
$this->params = Helper::getComponentParams();
$input = $this->app->input;
$data = $input->getArray();
// Ensure nothing is stripped by Joomla filters by getting the raw object.
$data['cf'] = $input->post->get('cf', '', 'RAW');
$this->form_data = $data;
// Detect form ID
$form_id = (isset($data['cf']) && isset($data['cf']['form_id'])) ? (int) $data['cf']['form_id'] : null;
$this->form_id = $form_id;
// Load component language file
NRFramework\Functions::loadLanguage('com_convertforms');
parent::__construct();
}
/**
* The main submit method
*
* @return void
*/
public function submit()
{
// Prevent AJAX response pollution by disabling PHP reporting notices.
if (!$this->params->get('debug', false))
{
error_reporting(E_ALL & ~E_NOTICE);
}
// Check for a CSRF Token only if the respective option is enabled.
if ($this->params->get('csrf_check', false))
{
$this->checkCSRFTokenOrDie();
}
$response = new stdClass();
// The purpose of this property is to help script parse JSON
$response->convertforms = 'submit';
try
{
$submission = $this->createSubmission();
$response->success = true;
$response->task = $submission->form->onsuccess;
switch ($response->task)
{
case 'msg':
$response->value = URLHelper::relativePathsToAbsoluteURLs($submission->form->successmsg);
$response->hideform = $submission->form->hideform;
$response->resetform = $submission->form->resetform;
break;
case 'url':
$response->value = $submission->form->successurl;
$response->passdata = $submission->form->passdata;
break;
case 'menu':
$response->task = 'url';
$response->value = $this->resolveURL($submission->form->redirectmenu);
$response->passdata = $submission->form->passdata;
}
}
catch (Exception $e)
{
$this->triggerError($e->getMessage());
$response->error = $e->getMessage();
}
echo json_encode($response);
// Stop execution
jexit();
}
/**
* Store the submitted to database
*
* @return Object
*/
protected function createSubmission()
{
$componentPath = JPATH_ADMINISTRATOR . '/components/com_convertforms/';
JModelLegacy::addIncludePath($componentPath . 'models');
JTable::addIncludePath($componentPath . 'tables');
$model = JModelLegacy::getInstance('Conversion', 'ConvertFormsModel', ['ignore_request' => true]);
$submission = $model->createConversion($this->form_data);
// Prepare with Smart Tags
if ($submission->form->onsuccess == 'msg')
{
// Prevent Smart Tags replacements in conditional content by parsing IF shortcode before replacing Smart Tags.
Helper::parseIfShortcode($submission->form->successmsg, $submission);
$submission->form->successmsg = SmartTags::replace($submission->form->successmsg, $submission);
}
if ($submission->form->onsuccess == 'url')
{
$submission->form->successurl = SmartTags::replace($submission->form->successurl, $submission);
}
return $submission;
}
/**
* Reject request if no valid CSRF token is found.
*
* @return void
*/
protected function checkCSRFTokenOrDie()
{
if (!JSession::checkToken('request'))
{
$this->triggerError(JText::_('JINVALID_TOKEN'));
jexit(JText::_('JINVALID_TOKEN'));
}
}
/**
* Trigger a submission-based error
*
* @param string $message The error message
*
* @return void
*/
protected function triggerError($message)
{
Helper::triggerError($message, ucfirst($this->input->get('task')), $this->form_id, $this->form_data);
}
private function resolveURL($menu_item_id)
{
$item = JFactory::getApplication()->getMenu()->getItem($menu_item_id);
$flink = $item->link;
switch ($item->type)
{
case 'alias':
$flink = 'index.php?Itemid=' . $item->getParams()->get('aliasoptions');
break;
case 'url':
if ((strpos($item->link, 'index.php?') === 0) && (strpos($item->link, 'Itemid=') === false))
{
// If this is an internal Joomla link, ensure the Itemid is set.
$flink .= '&Itemid=' . $item->id;
}
break;
default:
$flink = 'index.php?Itemid=' . $item->id;
break;
}
return Route::_($flink);
}
}