shell bypass 403

Cubjrnet7 Shell


name : router.php
<?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\Component\Router\RouterBase;
use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Filter\OutputFilter;

class RsformRouter extends RouterBase
{
	public function preprocess($query)
	{
		if (!isset($query['Itemid']))
		{
			if ($item = Factory::getApplication()->getMenu()->getActive())
			{
				$query['Itemid'] = $item->id;
			}
		}

		return $query;
	}

	public function build(&$query)
	{
		$segments   = array();
		$app 	    = Factory::getApplication();

		// Load language
		Factory::getLanguage()->load('com_rsform', JPATH_SITE);

		$app->triggerEvent('onRsformBeforeFormBuildRoute', array(&$segments, &$query));

		$view 	= isset($query['view']) ? $query['view'] : 'rsform';
		$layout = isset($query['layout']) ? $query['layout'] : 'default';

		// Is this a menu item?
		if (isset($query['Itemid']))
		{
			$menu = $app->getMenu();
			// Found the menu item based on Itemid
			if ($item = $menu->getItem($query['Itemid']))
			{
				// The Itemid belongs to RSForm! Pro
				if (isset($item->component) && $item->component == 'com_rsform' && isset($item->query))
				{
					// We've got a match
					if (isset($item->query['view']) && $item->query['view'] == $view)
					{
						switch ($view)
						{
							// Form menu item
							case 'rsform':
								// If it's the same formId point to the menu item directly
								if (isset($item->query['formId']) && isset($query['formId']) && $item->query['formId'] == $query['formId'])
								{
									unset($query['view']);
									unset($query['formId']);

									// If we have a task append it
									if (isset($query['task']) && $query['task'] == 'confirm')
									{
										$segments[] = Text::_('COM_RSFORM_SEF_CONFIRM_SUBMISSION');
										unset($query['task']);
									}

									return $segments;
								}
								break;

							// Submissions menu item
							case 'submissions':
								// Submissions are only accessible through the menu, point to that
								if ($layout == 'default')
								{
									unset($query['view']);
									return $segments;
								}
								// Otherwise we continue with the logic below to show a submission {detail}
								break;

							case 'directory':
								if ($layout == 'default')
								{
									unset($query['view']);
									return $segments;
								}
								break;
						}
					}
				}
			}
		}

		switch ($view)
		{
			case 'directory':
				switch ($layout)
				{
					case 'view':
						$segments[] = Text::_('COM_RSFORM_SEF_DIRECTORY_VIEW_SUBMISSION');
						if (isset($query['id']))
						{
							$segments[] = $query['id'];
						}

						unset($query['view'], $query['layout'], $query['id']);
						break;

					case 'edit':
						$segments[] = Text::_('COM_RSFORM_SEF_DIRECTORY_EDIT_SUBMISSION');
						if (isset($query['id']))
						{
							$segments[] = $query['id'];
						}

						unset($query['view'], $query['layout'], $query['id']);
						break;

					default:
					case 'default':
						$segments[] = Text::_('COM_RSFORM_SEF_SUBMISSIONS_DIRECTORY');

						unset($query['view'], $query['layout']);
						break;
				}
				break;

			case 'submissions':
				switch ($layout)
				{
					case 'view':
						$segments[] = Text::_('COM_RSFORM_SEF_SUBMISSIONS_VIEW_SUBMISSION');
						if (isset($query['cid']))
						{
							$segments[] = $query['cid'];
						}

						unset($query['view'], $query['layout'], $query['cid']);
						break;

					default:
					case 'default':
						$segments[] = Text::_('COM_RSFORM_SEF_SUBMISSIONS_VIEW_SUBMISSIONS');

						unset($query['view'], $query['layout']);
						break;
				}
				break;

			case 'deletesubmission':
				switch ($layout)
				{
					case 'complete':
						$segments[] = Text::_('COM_RSFORM_SEF_DELETE_SUBMISSION_COMPLETE');
						break;

					default:
						$segments[] = Text::_('COM_RSFORM_SEF_DELETE_SUBMISSION_REQUEST');
						break;
				}
				unset($query['view'], $query['layout']);
				break;

			case 'rsform':
				if (!empty($query['formId']))
				{
					$segments[] = Text::_('COM_RSFORM_SEF_FORM');

					$formId 	= (int) $query['formId'];
					$formName 	= OutputFilter::stringURLSafe($this->getFormTitle($formId));

					$segments[] = $formId . (!empty($formName) ? ':' . $formName : '');

					unset($query['formId'], $query['view']);
				}
				unset($query['view']);
				break;
		}

		if (isset($query['task']))
		{
			switch ($query['task'])
			{
				case 'submissions.viewfile':
					$segments[] = Text::_('COM_RSFORM_SEF_SUBMISSIONS_VIEW_FILE');

					if (isset($query['hash']))
					{
						$segments[] = $query['hash'];
						unset($query['hash']);

						if (isset($query['file']))
						{
							$segments[] = $query['file'];
							unset($query['file']);
						}
					}

					unset($query['task']);
					break;

				case 'confirm':
					$segments[] = Text::_('COM_RSFORM_SEF_CONFIRM_SUBMISSION');
					unset($query['task']);
					break;

				case 'delete':
					if (isset($query['controller']) && $query['controller'] == 'directory')
					{
						$segments[] = Text::_('COM_RSFORM_SEF_DIRECTORY_DELETE_SUBMISSION');
						if (isset($query['id']))
						{
							$segments[] = $query['id'];
						}

						unset($query['controller'], $query['task'], $query['id']);
					}
					break;
			}
		}

		$total = count($segments);

		for ($i = 0; $i < $total; $i++)
		{
			$segments[$i] = str_replace(':', '-', $segments[$i]);
		}

		$app->triggerEvent('onRsformAfterFormBuildRoute', array(&$segments, &$query));

		return $segments;
	}

	public function parse(&$segments)
	{
		$query = array();
		$app = Factory::getApplication();

		// Load language
		Factory::getLanguage()->load('com_rsform', JPATH_SITE);

		$app->triggerEvent('onRsformBeforeFormParseRoute', array(&$segments, &$query));

		$segments[0] = !empty($segments[0]) ? $segments[0] : 'form';
		$segments[0] = str_replace(':', '-', $segments[0]);

		switch ($segments[0])
		{
			case Text::_('COM_RSFORM_SEF_FORM'):
				if (isset($segments[1]))
				{
					if (strpos($segments[1], ':') !== false)
					{
						$exp = explode(':', $segments[1], 2);
					}
					else
					{
						$exp = explode('-', $segments[1], 2);
					}

					$query['formId'] = (int) $exp[0];
					$query['view'] = 'rsform';
				}
				break;

			case Text::_('COM_RSFORM_SEF_SUBMISSIONS_VIEW_SUBMISSIONS'):
				$query['view'] = 'submissions';
				break;

			case Text::_('COM_RSFORM_SEF_SUBMISSIONS_VIEW_SUBMISSION'):
				$query['view'] = 'submissions';
				$query['layout'] = 'view';

				if (isset($segments[1]))
				{
					$query['cid'] = $segments[1];
				}
				break;

			case Text::_('COM_RSFORM_SEF_CONFIRM_SUBMISSION'):
				$query['task'] = 'confirm';
				break;

			case Text::_('COM_RSFORM_SEF_SUBMISSIONS_DIRECTORY'):
				$query['view'] = 'directory';
				break;

			case Text::_('COM_RSFORM_SEF_DIRECTORY_VIEW_SUBMISSION'):
				$query['view'] = 'directory';
				$query['layout'] = 'view';
				if (isset($segments[1]))
				{
					$query['id'] = $segments[1];
				}
				break;

			case Text::_('COM_RSFORM_SEF_DIRECTORY_EDIT_SUBMISSION'):
				$query['view'] = 'directory';
				$query['layout'] = 'edit';
				if (isset($segments[1]))
				{
					$query['id'] = $segments[1];
				}
				break;

			case Text::_('COM_RSFORM_SEF_DIRECTORY_DELETE_SUBMISSION'):
				$query['controller'] = 'directory';
				$query['task'] = 'delete';
				if (isset($segments[1]))
				{
					$query['id'] = (int) $segments[1];
				}

				break;

			case Text::_('COM_RSFORM_SEF_SUBMISSIONS_VIEW_FILE'):
				$query['task'] = 'submissions.viewfile';

				if (isset($segments[1]))
				{
					$query['hash'] = $segments[1];
				}
				if (isset($segments[2]))
				{
					$query['file'] = $segments[2];
				}

				break;

			case Text::_('COM_RSFORM_SEF_DELETE_SUBMISSION_COMPLETE'):
				$query['view'] = 'deletesubmission';
				$query['layout'] = 'complete';
				break;

			case Text::_('COM_RSFORM_SEF_DELETE_SUBMISSION_REQUEST'):
				$query['view'] = 'deletesubmission';
				$query['layout'] = 'default';
				break;
		}

		$app->triggerEvent('onRsformAfterFormParseRoute', array(&$segments, &$query));

		$segments = array();

		return $query;
	}

	private function getFormTitle($formId)
	{
		require_once JPATH_ADMINISTRATOR . '/components/com_rsform/helpers/rsform.php';

		static $titles = array();

		$lang = RSFormProHelper::getCurrentLanguage($formId);

		if (!isset($titles[$lang]))
		{
			$titles[$lang] = array();
		}

		if (!isset($titles[$lang][$formId]))
		{
			$db = Factory::getDbo();

			$query = $db->getQuery(true)
				->select($db->qn('FormTitle'))
				->from($db->qn('#__rsform_forms'))
				->where($db->qn('FormId') . ' = ' . $db->q($formId));
			$titles[$lang][$formId] = $db->setQuery($query)->loadResult();

			if ($translations = RSFormProHelper::getTranslations('forms', $formId, $lang))
			{
				if (isset($translations['FormTitle']))
				{
					$titles[$lang][$formId] = $translations['FormTitle'];
				}
			}
		}

		return $titles[$lang][$formId];
	}
}

© 2025 Cubjrnet7