Current Directory: /home/astoriaah/www/administrator/components/com_sh404sef/classes
Viewing File: /home/astoriaah/www/administrator/components/com_sh404sef/classes/basewizcontroller.php
<?php
/**
* sh404SEF - SEO extension for Joomla!
*
* @author Yannick Gaultier
* @copyright (c) Yannick Gaultier - Weeblr llc - 2022
* @package sh404SEF
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
* @version 4.24.1.4308
* @date 2022-05-31
*/
// Security check to ensure this file is being included by a parent file.
if (!defined('_JEXEC')) die('Direct Access to this location is not allowed.');
Class Sh404sefClassBasewizcontroller extends Sh404sefClassBasecontroller {
protected $_context = 'com_sh404sef.wiz';
protected $_defaultController = '';
protected $_defaultTask = '';
protected $_defaultModel = '';
protected $_defaultView = 'wizard';
protected $_defaultLayout = 'default';
protected $_returnController = '';
protected $_returnTask = '';
protected $_returnView = 'default';
protected $_returnLayout = 'default';
protected $_opType = '';
protected $_opSubject = '';
protected $_mainText = '';
protected $_hiddenText = '';
protected $_stepTitle = '';
protected $_setFormEncType = '';
/**
* Constructor.
*
* @access protected
* @param array An optional associative array of configuration settings.
* Recognized key values include 'name', 'default_task', 'model_path', and
* 'view_path' (this list is not meant to be comprehensive).
* @since 1.5
*/
public function __construct( $config = array() ) {
// call parent, doing main construct job
parent::__construct( $config);
// attach appropriate adapter
$this->_opType = strtolower( JFactory::getApplication()->input->getCmd( 'optype')); //ex : 'import'
$this->_opSubject = strtolower( JFactory::getApplication()->input->getCmd( 'opsubject')); // ex: pageids
// update context
$this->_context .= '.' . $this->_opType . '.' . $this->_opSubject;
// create adapter object
$adapterName = 'Sh404sefAdapter' . ucfirst( $this->_opType) . $this->_opSubject;
if (!class_exists( $adapterName)) {
$this->_fail( 'COM_SH404SEF_INVALID_WIZARD_ADAPTER');
} else {
$this->_adapter = new $adapterName( $this);
}
// collect properties from adapter
$properties = $this->_adapter->setup();
// and store them
foreach($properties as $key => $value) {
$this->$key = $value;
}
}
/**
* Display the view
*/
public function display( $cachable = false, $urlparams = false) {
// catch up any result message coming from an
// ajax save for instance, and push that into
// the application message queue
$messageCode = JFactory::getApplication()->input->getCmd( 'sh404sefMsg');
if (!empty($messageCode)) {
$msg = JText::_( $messageCode);
if ($msg != $messageCode) {
// if no language string exists, JText will
// return the input string, so only display if
// we have something to display
$app = JFactory::getApplication();
$app->enqueuemessage( $msg);
}
}
// get/create the view
$document =JFactory::getDocument();
$viewType = $document->getType();
$view = $this->getView( $this->_adapter->_stepsMap[$this->_adapter->_step]['view'], $viewType, '', array( 'base_path'=>$this->basePath));
// Set the layout
$view->setLayout( $this->_adapter->_stepsMap[$this->_adapter->_step]['layout']);
// push button list into the view
$view->buttonsList = $this->_adapter->_buttonsList;
$view->visibleButtonsList = $this->_adapter->_visibleButtonsList;
// push list of steps in to the view
foreach( $this->_adapter->_buttonsList as $button) {
$view->$button = $this->_adapter->_steps[$button];
}
// push controller name into view
$view->actionController = $this->_defaultController;
// push operation type and subject into the view
$view->opType = $this->_opType;
$view->opSubject = $this->_opSubject;
// push title, main and hidden text
$view->pageTitle = $this->_pageTitle;
$view->mainText = $this->_mainText;
$view->hiddenText = $this->_hiddenText;
$view->setFormEncType = $this->_setFormEncType;
// check if we are done, and need to set a redirect
if (!empty( $this->_redirectTo)) {
$view->redirectTo = $this->_redirectTo;
}
// check if we are continuein to another step, and need to set a redirect
if (!empty( $this->_continue)) {
$view->continue = $this->_continue;
}
if (!empty( $this->_nextStart)) {
$view->nextstart = $this->_nextStart;
}
// push controller errors in the view
$error = $this->getError();
if (!empty( $error)) {
$view->setError( $error);
}
// Display the view
$view->display();
}
/**
* Entry point for first screen of wizard
* without token check
*/
public function start() {
$this->_adapter->_button = 'next';
$this->_dispatch();
}
public function next() {
// Check for request forgeries
//JSession::checkToken() or jexit( 'Invalid Token' );
// if not form submit, just display current step
$this->_adapter->_button = 'next';
$this->_dispatch();
}
public function previous() {
// Check for request forgeries
JSession::checkToken() or jexit( 'Invalid Token' );
$this->_adapter->_button = 'previous';
$this->_dispatch();
}
public function terminate() {
// Check for request forgeries
JSession::checkToken() or jexit( 'Invalid Token' );
$this->_adapter->_button = 'terminate';
$this->_dispatch();
}
/**
* Close the wizard window and display an error message
* in the parent window
*/
public function cancel() {
// Check for request forgeries
JSession::checkToken() or jexit( 'Invalid Token' );
$this->_adapter->_button = 'cancel';
$this->_dispatch();
}
/**
* Main entry point
*/
protected function _dispatch() {
// collect and store request params
// what is the step id to run depending on what button was pressed
// ie : next = 3, previous = 1, terminate = 6
foreach( $this->_adapter->_buttonsList as $button) {
$this->_adapter->_steps[$button] = JFactory::getApplication()->input->getInt( $button, $this->_adapter->_steps[$button]);
}
// check request params
if(!in_array( $this->_adapter->_button, $this->_adapter->_buttonsList)) {
$this->_fail( 'COM_SH404SEF_INVALID_WIZARD_STEP');
}
// _dispatch request to appropriate method
// _step contains numerical id of _stepsMap record to use
$this->_adapter->_step = $this->_adapter->_steps[$this->_adapter->_button];
// call the 'task' method listed in the _stepsMap array item
if (empty( $this->_adapter->_stepsMap[$this->_adapter->_step])) {
$this->_fail( 'COM_SH404SEF_INVALID_WIZARD_STEP');
} else {
$methodName = $this->_adapter->_stepsMap[$this->_adapter->_step]['task'];
if (is_callable (array( $this->_adapter, $methodName))) {
$result = $this->_adapter->$methodName();
$this->_useAdapterResult( $result);
$this->display();
} else {
$this->_fail( 'COM_SH404SEF_INVALID_WIZARD_STEP');
}
}
}
/**
* invalid internal parameters, errors in parameters
*/
protected function _fail( $msg) {
$app = JFactory::getApplication();
$app->enqueuemessage( $msg, 'error');
$this->display();
}
protected function _useAdapterResult( $result) {
// use results : the adapter may have change the suject
// of this operation, after analyzing incoming data in an import
// for instance
if( !empty( $result['opSubject'])) {
$this->_opSubject = $result['opSubject'];
}
// redirections results
$redirectOptions = empty( $result['redirectOptions']) ? array() : $result['redirectOptions'];
if (!empty( $result['redirectTo'])) {
$this->_redirectTo = $this->_getDefaultRedirect( $redirectOptions);
}
// display results
if( !empty( $result['mainText'])) {
$this->_mainText = $result['mainText'];
}
if( !empty( $result['hiddenText'])) {
$this->_hiddenText = $result['hiddenText'];
}
if (!empty( $result['setFormEncType'])) {
$this->_setFormEncType = $result['setFormEncType'];
}
if( !empty( $result['continue'])) {
// calculate redirect url to next step
$vars = array( 'option' => 'com_sh404sef', 'c' => $this->_defaultController, 'tmpl' => 'component', 'optype' => $this->_opType, 'opsubject' => $this->_opSubject);
$vars = array_merge( $vars, $result['continue']);
$this->_continue = Sh404sefHelperUrl::buildUrl( $vars);
}
if( !empty( $result['nextStart'])) {
$this->_nextStart = $result['nextStart'];
}
}
}