| Current Path : /home/wuectly/www/03cbe/ |
| Current File : /home/wuectly/www/03cbe/controller.php.tar |
home/wuectly/www/components/com_modules/controller.php 0000604 00000002175 15245551702 0017412 0 ustar 00 <?php
/**
* @package Joomla.Site
* @subpackage com_modules
*
* @copyright (C) 2015 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Modules manager master display controller.
*
* @since 3.5
*/
class ModulesController extends JControllerLegacy
{
/**
* Constructor.
*
* @param array $config 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 3.5
*/
public function __construct($config = array())
{
$this->input = JFactory::getApplication()->input;
// Modules frontpage Editor Module proxying:
if ($this->input->get('view') === 'modules' && $this->input->get('layout') === 'modal')
{
JHtml::_('stylesheet', 'system/adminlist.css', array('version' => 'auto', 'relative' => true));
$config['base_path'] = JPATH_COMPONENT_ADMINISTRATOR;
}
parent::__construct($config);
}
}
home/wuectly/www/components/com_slideshowck/controller.php 0000604 00000000642 15245551704 0020260 0 ustar 00 <?php
/**
* @name Slideshow CK
* @package com_slideshowck
* @copyright Copyright (C) 2019. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
* @author Cedric Keiflin - https://www.template-creator.com - https://www.joomlack.fr
*/
// No direct access
defined('CK_LOADED') or die;
include_once(JPATH_ADMINISTRATOR . '/components/com_slideshowck/controller.php'); home/wuectly/www/components/com_contact/controller.php 0000604 00000004243 15245561533 0017376 0 ustar 00 <?php
/**
* @package Joomla.Site
* @subpackage com_contact
*
* @copyright (C) 2006 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Contact Component Controller
*
* @since 1.5
*/
class ContactController extends JControllerLegacy
{
/**
* Constructor.
*
* @param array $config 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 3.7.0
*/
public function __construct($config = array())
{
$this->input = JFactory::getApplication()->input;
// Contact frontpage Editor contacts proxying:
if ($this->input->get('view') === 'contacts' && $this->input->get('layout') === 'modal')
{
JHtml::_('stylesheet', 'system/adminlist.css', array(), true);
$config['base_path'] = JPATH_COMPONENT_ADMINISTRATOR;
}
parent::__construct($config);
}
/**
* Method to display a view.
*
* @param boolean $cachable If true, the view output will be cached
* @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
*
* @return JControllerLegacy This object to support chaining.
*
* @since 1.5
*/
public function display($cachable = false, $urlparams = array())
{
if (JFactory::getApplication()->getUserState('com_contact.contact.data') === null)
{
$cachable = true;
}
// Set the default view name and format from the Request.
$vName = $this->input->get('view', 'categories');
$this->input->set('view', $vName);
$safeurlparams = array('catid' => 'INT', 'id' => 'INT', 'cid' => 'ARRAY', 'year' => 'INT', 'month' => 'INT',
'limit' => 'UINT', 'limitstart' => 'UINT', 'showall' => 'INT', 'return' => 'BASE64', 'filter' => 'STRING',
'filter_order' => 'CMD', 'filter_order_Dir' => 'CMD', 'filter-search' => 'STRING', 'print' => 'BOOLEAN',
'lang' => 'CMD');
parent::display($cachable, $safeurlparams);
return $this;
}
}
home/wuectly/www/components/com_mailjet/controller.php 0000604 00000001615 15245562536 0017374 0 ustar 00 <?php
/**
* @author Mailjet SAS
*
* @copyright Copyright (C) 2014 Mailjet SAS.
* @license GNU General Public License version 2 or later; see LICENSE
*/
error_reporting(E_ALL & ~E_NOTICE);
// no direct access
defined( '_JEXEC' ) or die ( 'Restricted access' );
jimport('joomla.application.component.controller');
if (!function_exists('class_alias')) { // For php older then 5.3
function class_alias($orig, $alias) {
eval('abstract class ' . $alias . ' extends ' . $orig . ' {}');
}
}
if (!class_exists('JControllerLegacy')) {
class_alias('JController','JControllerLegacy');
}
class MailjetController extends JControllerLegacy {
function save() {
global $result;
$model = $this->getModel();
$result = $model->store();
if ($result != false) {
$this->display();
} else {
header('HTTP/1.0 404 Not Found');
}
}
}
home/wuectly/www/administrator/components/com_fields/controller.php 0000604 00000003314 15245567014 0022067 0 ustar 00 <?php
/**
* @package Joomla.Administrator
* @subpackage com_fields
*
* @copyright (C) 2016 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Fields Controller
*
* @since 3.7.0
*/
class FieldsController extends JControllerLegacy
{
/**
* The default view.
*
* @var string
*
* @since 3.7.0
*/
protected $default_view = 'fields';
/**
* Typical view method for MVC based architecture
*
* This function is provide as a default implementation, in most cases
* you will need to override it in your own controllers.
*
* @param boolean $cachable If true, the view output will be cached
* @param array|bool $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}
*
* @return JControllerLegacy|boolean A JControllerLegacy object to support chaining.
*
* @since 3.7.0
*/
public function display($cachable = false, $urlparams = false)
{
// Set the default view name and format from the Request.
$vName = $this->input->get('view', 'fields');
$id = $this->input->getInt('id');
// Check for edit form.
if ($vName == 'field' && !$this->checkEditId('com_fields.edit.field', $id))
{
// Somehow the person just went to the form - we don't allow that.
$this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id));
$this->setMessage($this->getError(), 'error');
$this->setRedirect(JRoute::_('index.php?option=com_fields&view=fields&context=' . $this->input->get('context'), false));
return false;
}
return parent::display($cachable, $urlparams);
}
}
home/wuectly/www/administrator/components/com_content/controller.php 0000604 00000002755 15245567016 0022305 0 ustar 00 <?php
/**
* @package Joomla.Administrator
* @subpackage com_content
*
* @copyright (C) 2006 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Component Controller
*
* @since 1.5
*/
class ContentController extends JControllerLegacy
{
/**
* The default view.
*
* @var string
* @since 1.6
*/
protected $default_view = 'articles';
/**
* Method to display a view.
*
* @param boolean $cachable If true, the view output will be cached
* @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
*
* @return ContentController This object to support chaining.
*
* @since 1.5
*/
public function display($cachable = false, $urlparams = array())
{
$view = $this->input->get('view', 'articles');
$layout = $this->input->get('layout', 'articles');
$id = $this->input->getInt('id');
// Check for edit form.
if ($view == 'article' && $layout == 'edit' && !$this->checkEditId('com_content.edit.article', $id))
{
// Somehow the person just went to the form - we don't allow that.
$this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id));
$this->setMessage($this->getError(), 'error');
$this->setRedirect(JRoute::_('index.php?option=com_content&view=articles', false));
return false;
}
return parent::display();
}
}
home/wuectly/www/administrator/components/com_tags/controller.php 0000604 00000002572 15245570244 0021563 0 ustar 00 <?php
/**
* @package Joomla.Administrator
* @subpackage com_tags
*
* @copyright (C) 2013 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Tags view class for the Tags package.
*
* @since 3.1
*/
class TagsController extends JControllerLegacy
{
/**
* Method to display a view.
*
* @param boolean $cachable If true, the view output will be cached
* @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
*
* @return JControllerLegacy This object to support chaining.
*
* @since 3.1
*/
public function display($cachable = false, $urlparams = false)
{
$view = $this->input->get('view', 'tags');
$layout = $this->input->get('layout', 'default');
$id = $this->input->getInt('id');
// Check for edit form.
if ($view == 'tag' && $layout == 'edit' && !$this->checkEditId('com_tags.edit.tag', $id))
{
// Somehow the person just went to the form - we don't allow that.
$this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id));
$this->setMessage($this->getError(), 'error');
$this->setRedirect(JRoute::_('index.php?option=com_tags&view=tags', false));
return false;
}
parent::display();
return $this;
}
}
home/wuectly/www/administrator/components/com_contact/controller.php 0000604 00000003130 15245570246 0022251 0 ustar 00 <?php
/**
* @package Joomla.Administrator
* @subpackage com_contact
*
* @copyright (C) 2008 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Component Controller
*
* @since 1.5
*/
class ContactController extends JControllerLegacy
{
/**
* The default view.
*
* @var string
* @since 1.6
*/
protected $default_view = 'contacts';
/**
* Method to display a view.
*
* @param boolean $cachable If true, the view output will be cached
* @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
*
* @return ContactController This object to support chaining.
*
* @since 1.5
*/
public function display($cachable = false, $urlparams = array())
{
JLoader::register('ContactHelper', JPATH_ADMINISTRATOR . '/components/com_contact/helpers/contact.php');
$view = $this->input->get('view', 'contacts');
$layout = $this->input->get('layout', 'default');
$id = $this->input->getInt('id');
// Check for edit form.
if ($view == 'contact' && $layout == 'edit' && !$this->checkEditId('com_contact.edit.contact', $id))
{
// Somehow the person just went to the form - we don't allow that.
$this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id));
$this->setMessage($this->getError(), 'error');
$this->setRedirect(JRoute::_('index.php?option=com_contact&view=contacts', false));
return false;
}
return parent::display();
}
}
home/wuectly/www/administrator/components/com_finder/controller.php 0000604 00000003220 15245570247 0022066 0 ustar 00 <?php
/**
* @package Joomla.Administrator
* @subpackage com_finder
*
* @copyright (C) 2011 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Base controller class for Finder.
*
* @since 2.5
*/
class FinderController extends JControllerLegacy
{
/**
* The default view.
*
* @var string
* @since 2.5
*/
protected $default_view = 'index';
/**
* Method to display a view.
*
* @param boolean $cachable If true, the view output will be cached
* @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
*
* @return FinderController A JControllerLegacy object to support chaining.
*
* @since 2.5
*/
public function display($cachable = false, $urlparams = array())
{
JLoader::register('FinderHelper', JPATH_ADMINISTRATOR . '/components/com_finder/helpers/finder.php');
$view = $this->input->get('view', 'index', 'word');
$layout = $this->input->get('layout', 'index', 'word');
$filterId = $this->input->get('filter_id', null, 'int');
// Check for edit form.
if ($view === 'filter' && $layout === 'edit' && !$this->checkEditId('com_finder.edit.filter', $filterId))
{
// Somehow the person just went to the form - we don't allow that.
$this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $filterId));
$this->setMessage($this->getError(), 'error');
$this->setRedirect(JRoute::_('index.php?option=com_finder&view=filters', false));
return false;
}
return parent::display();
}
}
home/wuectly/www/administrator/components/com_messages/controller.php 0000604 00000003115 15245570254 0022427 0 ustar 00 <?php
/**
* @package Joomla.Administrator
* @subpackage com_messages
*
* @copyright (C) 2008 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Messages master display controller.
*
* @since 1.6
*/
class MessagesController extends JControllerLegacy
{
/**
* Method to display a view.
*
* @param boolean $cachable If true, the view output will be cached.
* @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
*
* @return JController This object to support chaining.
*
* @since 1.5
*/
public function display($cachable = false, $urlparams = false)
{
JLoader::register('MessagesHelper', JPATH_ADMINISTRATOR . '/components/com_messages/helpers/messages.php');
$view = $this->input->get('view', 'messages');
$layout = $this->input->get('layout', 'default');
$id = $this->input->getInt('id');
// Check for edit form.
if ($view == 'message' && $layout == 'edit' && !$this->checkEditId('com_messages.edit.message', $id))
{
// Somehow the person just went to the form - we don't allow that.
$this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id));
$this->setMessage($this->getError(), 'error');
$this->setRedirect(JRoute::_('index.php?option=com_messages&view=messages', false));
return false;
}
// Load the submenu.
MessagesHelper::addSubmenu($this->input->get('view', 'messages'));
parent::display();
}
}
home/wuectly/www/administrator/components/com_banners/controller.php 0000604 00000003660 15245570254 0022255 0 ustar 00 <?php
/**
* @package Joomla.Administrator
* @subpackage com_banners
*
* @copyright (C) 2009 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
JLoader::register('BannersHelper', JPATH_ADMINISTRATOR . '/components/com_banners/helpers/banners.php');
/**
* Banners master display controller.
*
* @since 1.6
*/
class BannersController extends JControllerLegacy
{
/**
* Method to display a view.
*
* @param boolean $cachable If true, the view output will be cached
* @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
*
* @return BannersController This object to support chaining.
*
* @since 1.5
*/
public function display($cachable = false, $urlparams = array())
{
BannersHelper::updateReset();
$view = $this->input->get('view', 'banners');
$layout = $this->input->get('layout', 'default');
$id = $this->input->getInt('id');
// Check for edit form.
if ($view == 'banner' && $layout == 'edit' && !$this->checkEditId('com_banners.edit.banner', $id))
{
// Somehow the person just went to the form - we don't allow that.
$this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id));
$this->setMessage($this->getError(), 'error');
$this->setRedirect(JRoute::_('index.php?option=com_banners&view=banners', false));
return false;
}
elseif ($view == 'client' && $layout == 'edit' && !$this->checkEditId('com_banners.edit.client', $id))
{
// Somehow the person just went to the form - we don't allow that.
$this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id));
$this->setMessage($this->getError(), 'error');
$this->setRedirect(JRoute::_('index.php?option=com_banners&view=clients', false));
return false;
}
return parent::display();
}
}
home/wuectly/www/administrator/components/com_search/controller.php 0000604 00000002147 15245570256 0022073 0 ustar 00 <?php
/**
* @package Joomla.Administrator
* @subpackage com_search
*
* @copyright (C) 2007 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Search master display controller.
*
* @since 1.6
*/
class SearchController extends JControllerLegacy
{
/**
* @var string The default view.
* @since 1.6
*/
protected $default_view = 'searches';
/**
* Method to display a view.
*
* @param boolean $cachable If true, the view output will be cached
* @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
*
* @return SearchController This object to support chaining.
*
* @since 1.5
*/
public function display($cachable = false, $urlparams = false)
{
JLoader::register('SearchHelper', JPATH_ADMINISTRATOR . '/components/com_search/helpers/search.php');
// Load the submenu.
SearchHelper::addSubmenu($this->input->get('view', 'searches'));
return parent::display();
}
}
home/wuectly/www/administrator/components/com_newsfeeds/controller.php 0000604 00000003013 15245570652 0022602 0 ustar 00 <?php
/**
* @package Joomla.Administrator
* @subpackage com_newsfeeds
*
* @copyright (C) 2008 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Newsfeeds master display controller.
*
* @since 1.6
*/
class NewsfeedsController extends JControllerLegacy
{
/**
* Method to display a view.
*
* @param boolean $cachable If true, the view output will be cached
* @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
*
* @return JControllerLegacy This object to support chaining.
*
* @since 1.5
*/
public function display($cachable = false, $urlparams = array())
{
JLoader::register('NewsfeedsHelper', JPATH_ADMINISTRATOR . '/components/com_newsfeeds/helpers/newsfeeds.php');
$view = $this->input->get('view', 'newsfeeds');
$layout = $this->input->get('layout', 'default');
$id = $this->input->getInt('id');
// Check for edit form.
if ($view == 'newsfeed' && $layout == 'edit' && !$this->checkEditId('com_newsfeeds.edit.newsfeed', $id))
{
// Somehow the person just went to the form - we don't allow that.
$this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id));
$this->setMessage($this->getError(), 'error');
$this->setRedirect(JRoute::_('index.php?option=com_newsfeeds&view=newsfeeds', false));
return false;
}
return parent::display();
}
}
home/wuectly/www/administrator/components/com_media/controller.php 0000604 00000004160 15245571351 0021677 0 ustar 00 <?php
/**
* @package Joomla.Administrator
* @subpackage com_media
*
* @copyright (C) 2007 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Media Manager Component Controller
*
* @since 1.5
*/
class MediaController extends JControllerLegacy
{
/**
* Method to display a view.
*
* @param boolean $cachable If true, the view output will be cached
* @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
*
* @return JController This object to support chaining.
*
* @since 1.5
*/
public function display($cachable = false, $urlparams = false)
{
JPluginHelper::importPlugin('content');
$vType = JFactory::getDocument()->getType();
$vName = $this->input->get('view', 'media');
switch ($vName)
{
case 'images':
$vLayout = $this->input->get('layout', 'default', 'string');
$mName = 'manager';
break;
case 'imagesList':
$mName = 'list';
$vLayout = $this->input->get('layout', 'default', 'string');
break;
case 'mediaList':
$app = JFactory::getApplication();
$mName = 'list';
$vLayout = $app->getUserStateFromRequest('media.list.layout', 'layout', 'thumbs', 'word');
break;
case 'media':
default:
$vName = 'media';
$vLayout = $this->input->get('layout', 'default', 'string');
$mName = 'manager';
break;
}
// Get/Create the view
$view = $this->getView($vName, $vType, '', array('base_path' => JPATH_COMPONENT_ADMINISTRATOR));
// Get/Create the model
if ($model = $this->getModel($mName))
{
// Push the model into the view (as default)
$view->setModel($model, true);
}
// Set the layout
$view->setLayout($vLayout);
// Display the view
$view->display();
return $this;
}
/**
* Validate FTP credentials
*
* @return void
*
* @since 1.5
*/
public function ftpValidate()
{
// Set FTP credentials, if given
JClientHelper::setCredentialsFromRequest('ftp');
}
}
home/wuectly/www/libraries/f0f/controller/controller.php 0000604 00000227332 15245572020 0017531 0 ustar 00 <?php
/**
* @package FrameworkOnFramework
* @subpackage controller
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
// Protect from unauthorized access
defined('F0F_INCLUDED') or die;
/**
* FrameworkOnFramework controller class. F0F is based on the thin controller
* paradigm, where the controller is mainly used to set up the model state and
* spawn the view.
*
* @package FrameworkOnFramework
* @since 1.0
*/
class F0FController extends F0FUtilsObject
{
/**
* @var int Bit mask to enable Routing on redirects.
* 0 = never
* 1 = frontend only
* 2 = backend only
* 3 = always
*/
protected $autoRouting = 0;
/**
* The current component's name without the com_ prefix
*
* @var string
*/
protected $bareComponent = 'foobar';
/**
* The base path of the controller
*
* @var string
*/
protected $basePath;
/**
* The tasks for which caching should be enabled by default
*
* @var array
*/
protected $cacheableTasks = array('browse', 'read');
/**
* The current component's name; you can override it in the configuration
*
* @var string
*/
protected $component = 'com_foobar';
/**
* A cached copy of the class configuration parameter passed during initialisation
*
* @var array
*/
protected $config = array();
/**
* An instance of F0FConfigProvider to provision configuration overrides
*
* @var F0FConfigProvider
*/
protected $configProvider = null;
/**
* Set to true to enable CSRF protection on selected tasks. The possible
* values are:
* 0 Disabled; no token checks are performed
* 1 Enabled; token checks are always performed
* 2 Only on HTML requests and backend; token checks are always performed in the back-end and in the front-end only when format is 'html'
* 3 Only on back-end; token checks are performer only in the back-end
*
* @var integer
*/
protected $csrfProtection = 2;
/**
* The default view for the display method.
*
* @var string
*/
protected $default_view;
/**
* The mapped task that was performed.
*
* @var string
*/
protected $doTask;
/**
* The input object for this MVC triad; you can override it in the configuration
*
* @var F0FInput
*/
protected $input = array();
/**
* Redirect message.
*
* @var string
*/
protected $message;
/**
* Redirect message type.
*
* @var string
*/
protected $messageType;
/**
* The current layout; you can override it in the configuration
*
* @var string
*/
protected $layout = null;
/**
* Array of class methods
*
* @var array
*/
protected $methods;
/**
* The prefix of the models
*
* @var string
*/
protected $model_prefix;
/**
* Overrides the name of the view's default model
*
* @var string
*/
protected $modelName = null;
/**
* The set of search directories for resources (views).
*
* @var array
*/
protected $paths;
/**
* URL for redirection.
*
* @var string
*/
protected $redirect;
/**
* Current or most recently performed task.
*
* @var string
*/
protected $task;
/**
* Array of class methods to call for a given task.
*
* @var array
*/
protected $taskMap;
/**
* The name of the controller
*
* @var array
*/
protected $name;
/**
* The current view name; you can override it in the configuration
*
* @var string
*/
protected $view = '';
/**
* Overrides the name of the view's default view
*
* @var string
*/
protected $viewName = null;
/**
* A copy of the F0FView object used in this triad
*
* @var F0FView
*/
private $_viewObject = null;
/**
* A cache for the view item objects created in this controller
*
* @var array
*/
protected $viewsCache = array();
/**
* A copy of the F0FModel object used in this triad
*
* @var F0FModel
*/
private $_modelObject = null;
/**
* Does this tried have a F0FForm which will be used to render it?
*
* @var boolean
*/
protected $hasForm = false;
/**
* Gets a static (Singleton) instance of a controller class. It loads the
* relevant controller file from the component's directory or, if it doesn't
* exist, creates a new controller object out of thin air.
*
* @param string $option Component name, e.g. com_foobar
* @param string $view The view name, also used for the controller name
* @param array $config Configuration parameters
*
* @return F0FController
*/
public static function &getAnInstance($option = null, $view = null, $config = array())
{
static $instances = array();
// Make sure $config is an array
if (is_object($config))
{
$config = (array) $config;
}
elseif (!is_array($config))
{
$config = array();
}
$hash = $option . $view;
if (!array_key_exists($hash, $instances))
{
$instances[$hash] = self::getTmpInstance($option, $view, $config);
}
return $instances[$hash];
}
/**
* Gets a temporary instance of a controller object. A temporary instance is
* not a Singleton and can be disposed off after use.
*
* @param string $option The component name, e.g. com_foobar
* @param string $view The view name, e.g. cpanel
* @param array $config Configuration parameters
*
* @return \F0FController A disposable class instance
*/
public static function &getTmpInstance($option = null, $view = null, $config = array())
{
// Make sure $config is an array
if (is_object($config))
{
$config = (array) $config;
}
elseif (!is_array($config))
{
$config = array();
}
// Get an input object
if (array_key_exists('input', $config))
{
$input = $config['input'];
}
else
{
$input = null;
}
if (array_key_exists('input_options', $config))
{
$input_options = $config['input_options'];
}
else
{
$input_options = array();
}
if (!($input instanceof F0FInput))
{
$input = new F0FInput($input, $input_options);
}
// Determine the option (component name) and view
$config['option'] = !is_null($option) ? $option : $input->getCmd('option', 'com_foobar');
$config['view'] = !is_null($view) ? $view : $input->getCmd('view', 'cpanel');
// Get the class base name, e.g. FoobarController
$classBaseName = ucfirst(str_replace('com_', '', $config['option'])) . 'Controller';
// Get the class name suffixes, in the order to be searched for: plural, singular, 'default'
$classSuffixes = array(
F0FInflector::pluralize($config['view']),
F0FInflector::singularize($config['view']),
'default'
);
// Get the path names for the component
$componentPaths = F0FPlatform::getInstance()->getComponentBaseDirs($config['option']);
$filesystem = F0FPlatform::getInstance()->getIntegrationObject('filesystem');
// Look for the best classname match
foreach ($classSuffixes as $suffix)
{
$className = $classBaseName . ucfirst($suffix);
if (class_exists($className))
{
// The class is already loaded. We have a match!
break;
}
// The class is not already loaded. Try to find and load it.
$searchPaths = array(
$componentPaths['main'] . '/controllers',
$componentPaths['admin'] . '/controllers'
);
// If we have a searchpath in the configuration please search it first
if (array_key_exists('searchpath', $config))
{
array_unshift($searchPaths, $config['searchpath']);
}
else
{
$configProvider = new F0FConfigProvider;
$searchPath = $configProvider->get($config['option'] . '.views.' . F0FInflector::singularize($config['view']) . '.config.searchpath', null);
if ($searchPath)
{
array_unshift($searchPaths, $componentPaths['admin'] . '/' . $searchPath);
array_unshift($searchPaths, $componentPaths['main'] . '/' . $searchPath);
}
}
/**
* Try to find the path to this file. First try to find the
* format-specific controller file, e.g. foobar.json.php for
* format=json, then the regular one-size-fits-all controller
*/
$format = $input->getCmd('format', 'html');
$path = null;
if (!empty($format))
{
$path = $filesystem->pathFind(
$searchPaths, strtolower($suffix) . '.' . strtolower($format) . '.php'
);
}
if (!$path)
{
$path = $filesystem->pathFind(
$searchPaths, strtolower($suffix) . '.php'
);
}
// The path is found. Load the file and make sure the expected class name exists.
if ($path)
{
require_once $path;
if (class_exists($className))
{
// The class was loaded successfully. We have a match!
break;
}
}
}
if (!class_exists($className))
{
// If no specialised class is found, instantiate the generic F0FController
$className = 'F0FController';
}
$instance = new $className($config);
return $instance;
}
/**
* Public constructor of the Controller class
*
* @param array $config Optional configuration parameters
*/
public function __construct($config = array())
{
// Make sure $config is an array
if (is_object($config))
{
$config = (array) $config;
}
elseif (!is_array($config))
{
$config = array();
}
$this->methods = array();
$this->message = null;
$this->messageType = 'message';
$this->paths = array();
$this->redirect = null;
$this->taskMap = array();
// Cache the config
$this->config = $config;
// Get the input for this MVC triad
if (array_key_exists('input', $config))
{
$input = $config['input'];
}
else
{
$input = null;
}
if (array_key_exists('input_options', $config))
{
$input_options = $config['input_options'];
}
else
{
$input_options = array();
}
if ($input instanceof F0FInput)
{
$this->input = $input;
}
else
{
$this->input = new F0FInput($input, $input_options);
}
// Load the configuration provider
$this->configProvider = new F0FConfigProvider;
// Determine the methods to exclude from the base class.
$xMethods = get_class_methods('F0FController');
// Some methods must always be considered valid tasks
$iMethods = array('accesspublic', 'accessregistered', 'accessspecial',
'add', 'apply', 'browse', 'cancel', 'copy', 'edit', 'orderdown',
'orderup', 'publish', 'read', 'remove', 'save', 'savenew',
'saveorder', 'unpublish', 'display', 'archive', 'trash', 'loadhistory');
// Get the public methods in this class using reflection.
$r = new ReflectionClass($this);
$rMethods = $r->getMethods(ReflectionMethod::IS_PUBLIC);
foreach ($rMethods as $rMethod)
{
$mName = $rMethod->getName();
// If the developer screwed up and declared one of the helper method public do NOT make them available as
// tasks.
if ((substr($mName, 0, 8) == 'onBefore') || (substr($mName, 0, 7) == 'onAfter') || substr($mName, 0, 1) == '_')
{
continue;
}
// Add default display method if not explicitly declared.
if (!in_array($mName, $xMethods) || in_array($mName, $iMethods))
{
$this->methods[] = strtolower($mName);
// Auto register the methods as tasks.
$this->taskMap[strtolower($mName)] = $mName;
}
}
// Get the default values for the component and view names
$classNameParts = F0FInflector::explode(get_class($this));
if (count($classNameParts) == 3)
{
$defComponent = "com_" . $classNameParts[0];
$defView = $classNameParts[2];
}
else
{
$defComponent = 'com_foobar';
$defView = 'cpanel';
}
$this->component = $this->input->get('option', $defComponent, 'cmd');
$this->view = $this->input->get('view', $defView, 'cmd');
$this->layout = $this->input->get('layout', null, 'cmd');
// Overrides from the config
if (array_key_exists('option', $config))
{
$this->component = $config['option'];
}
if (array_key_exists('view', $config))
{
$this->view = $config['view'];
}
if (array_key_exists('layout', $config))
{
$this->layout = $config['layout'];
}
$this->layout = $this->configProvider->get($this->component . '.views.' . F0FInflector::singularize($this->view) . '.config.layout', $this->layout);
$this->input->set('option', $this->component);
// Set the bareComponent variable
$this->bareComponent = str_replace('com_', '', strtolower($this->component));
// Set the $name variable
$this->name = $this->bareComponent;
// Set the basePath variable
$componentPaths = F0FPlatform::getInstance()->getComponentBaseDirs($this->component);
$basePath = $componentPaths['main'];
if (array_key_exists('base_path', $config))
{
$basePath = $config['base_path'];
}
$altBasePath = $this->configProvider->get(
$this->component . '.views.' .
F0FInflector::singularize($this->view) . '.config.base_path', null
);
if (!is_null($altBasePath))
{
$platformDirs = F0FPlatform::getInstance()->getPlatformBaseDirs();
$basePath = $platformDirs['public'] . '/' . $altBasePath;
}
$this->basePath = $basePath;
// If the default task is set, register it as such
$defaultTask = $this->configProvider->get(
$this->component . '.views.' .
F0FInflector::singularize($this->view) . '.config.default_task', 'display'
);
if (array_key_exists('default_task', $config))
{
$this->registerDefaultTask($config['default_task']);
}
else
{
$this->registerDefaultTask($defaultTask);
}
// Set the models prefix
if (empty($this->model_prefix))
{
if (array_key_exists('model_prefix', $config))
{
// User-defined prefix
$this->model_prefix = $config['model_prefix'];
}
else
{
$this->model_prefix = $this->name . 'Model';
$this->model_prefix = $this->configProvider->get(
$this->component . '.views.' .
F0FInflector::singularize($this->view) . '.config.model_prefix', $this->model_prefix
);
}
}
// Set the default model search path
if (array_key_exists('model_path', $config))
{
// User-defined dirs
$this->addModelPath($config['model_path'], $this->model_prefix);
}
else
{
$modelPath = $this->basePath . '/models';
$altModelPath = $this->configProvider->get(
$this->component . '.views.' .
F0FInflector::singularize($this->view) . '.config.model_path', null
);
if (!is_null($altModelPath))
{
$modelPath = $this->basePath . '/' . $altModelPath;
}
$this->addModelPath($modelPath, $this->model_prefix);
}
// Set the default view search path
if (array_key_exists('view_path', $config))
{
// User-defined dirs
$this->setPath('view', $config['view_path']);
}
else
{
$viewPath = $this->basePath . '/views';
$altViewPath = $this->configProvider->get(
$this->component . '.views.' .
F0FInflector::singularize($this->view) . '.config.view_path', null
);
if (!is_null($altViewPath))
{
$viewPath = $this->basePath . '/' . $altViewPath;
}
$this->setPath('view', $viewPath);
}
// Set the default view.
if (array_key_exists('default_view', $config))
{
$this->default_view = $config['default_view'];
}
else
{
if (empty($this->default_view))
{
$this->default_view = $this->getName();
}
$this->default_view = $this->configProvider->get(
$this->component . '.views.' .
F0FInflector::singularize($this->view) . '.config.default_view', $this->default_view
);
}
// Set the CSRF protection
if (array_key_exists('csrf_protection', $config))
{
$this->csrfProtection = $config['csrf_protection'];
}
$this->csrfProtection = $this->configProvider->get(
$this->component . '.views.' .
F0FInflector::singularize($this->view) . '.config.csrf_protection', $this->csrfProtection
);
// Set any model/view name overrides
if (array_key_exists('viewName', $config))
{
$this->setThisViewName($config['viewName']);
}
else
{
$overrideViewName = $this->configProvider->get(
$this->component . '.views.' .
F0FInflector::singularize($this->view) . '.config.viewName', null
);
if ($overrideViewName)
{
$this->setThisViewName($overrideViewName);
}
}
if (array_key_exists('modelName', $config))
{
$this->setThisModelName($config['modelName']);
}
else
{
$overrideModelName = $this->configProvider->get(
$this->component . '.views.' .
F0FInflector::singularize($this->view) . '.config.modelName', null
);
if ($overrideModelName)
{
$this->setThisModelName($overrideModelName);
}
}
// Caching
if (array_key_exists('cacheableTasks', $config))
{
if (is_array($config['cacheableTasks']))
{
$this->cacheableTasks = $config['cacheableTasks'];
}
}
else
{
$cacheableTasks = $this->configProvider->get(
$this->component . '.views.' .
F0FInflector::singularize($this->view) . '.config.cacheableTasks', null
);
if ($cacheableTasks)
{
$cacheableTasks = explode(',', $cacheableTasks);
if (count($cacheableTasks))
{
$temp = array();
foreach ($cacheableTasks as $t)
{
$temp[] = trim($t);
}
$temp = array_unique($temp);
$this->cacheableTasks = $temp;
}
}
}
// Bit mask for auto routing on setRedirect
$this->autoRouting = $this->configProvider->get(
$this->component . '.views.' .
F0FInflector::singularize($this->view) . '.config.autoRouting', $this->autoRouting
);
if (array_key_exists('autoRouting', $config))
{
$this->autoRouting = $config['autoRouting'];
}
// Apply task map
$taskmap = $this->configProvider->get(
$this->component . '.views.' .
F0FInflector::singularize($this->view) . '.taskmap'
);
if (is_array($taskmap) && !empty($taskmap))
{
foreach ($taskmap as $aliasedtask => $realmethod)
{
$this->registerTask($aliasedtask, $realmethod);
}
}
}
/**
* Adds to the stack of model paths in LIFO order.
*
* @param mixed $path The directory (string) , or list of directories (array) to add.
* @param string $prefix A prefix for models
*
* @return void
*/
public static function addModelPath($path, $prefix = '')
{
F0FModel::addIncludePath($path, $prefix);
}
/**
* Adds to the search path for templates and resources.
*
* @param string $type The path type (e.g. 'model', 'view').
* @param mixed $path The directory string or stream array to search.
*
* @return F0FController A F0FController object to support chaining.
*/
protected function addPath($type, $path)
{
// Just force path to array
settype($path, 'array');
$filesystem = F0FPlatform::getInstance()->getIntegrationObject('filesystem');
if (!isset($this->paths[$type]))
{
$this->paths[$type] = array();
}
// Loop through the path directories
foreach ($path as $dir)
{
// No surrounding spaces allowed!
$dir = rtrim($filesystem->pathCheck($dir, '/'), '/') . '/';
// Add to the top of the search dirs
array_unshift($this->paths[$type], $dir);
}
return $this;
}
/**
* Add one or more view paths to the controller's stack, in LIFO order.
*
* @param mixed $path The directory (string) or list of directories (array) to add.
*
* @return F0FController This object to support chaining.
*/
public function addViewPath($path)
{
$this->addPath('view', $path);
return $this;
}
/**
* Authorisation check
*
* @param string $task The ACO Section Value to check access on.
*
* @return boolean True if authorised
*
* @deprecated 2.0 Use JAccess instead.
*/
public function authorise($task)
{
F0FPlatform::getInstance()->logDeprecated(__CLASS__ . '::' .__METHOD__ . ' is deprecated. Use checkACL() instead.');
return true;
}
/**
* Create the filename for a resource.
*
* @param string $type The resource type to create the filename for.
* @param array $parts An associative array of filename information. Optional.
*
* @return string The filename.
*/
protected static function createFileName($type, $parts = array())
{
$filename = '';
switch ($type)
{
case 'controller':
if (!empty($parts['format']))
{
if ($parts['format'] == 'html')
{
$parts['format'] = '';
}
else
{
$parts['format'] = '.' . $parts['format'];
}
}
else
{
$parts['format'] = '';
}
$filename = strtolower($parts['name'] . $parts['format'] . '.php');
break;
case 'view':
if (!empty($parts['type']))
{
$parts['type'] = '.' . $parts['type'];
}
else
{
$parts['type'] = '';
}
$filename = strtolower($parts['name'] . '/view' . $parts['type'] . '.php');
break;
}
return $filename;
}
/**
* Executes a given controller task. The onBefore<task> and onAfter<task>
* methods are called automatically if they exist.
*
* @param string $task The task to execute, e.g. "browse"
*
* @throws Exception Exception thrown if the onBefore<task> returns false
*
* @return null|bool False on execution failure
*/
public function execute($task)
{
$this->task = $task;
$method_name = 'onBefore' . ucfirst($task);
if (!method_exists($this, $method_name))
{
$result = $this->onBeforeGenericTask($task);
}
elseif (method_exists($this, $method_name))
{
$result = $this->$method_name();
}
else
{
$result = true;
}
if ($result)
{
$plugin_event = F0FInflector::camelize('on before ' . $this->bareComponent . ' controller ' . $this->view . ' ' . $task);
$plugin_result = F0FPlatform::getInstance()->runPlugins($plugin_event, array(&$this, &$this->input));
if (in_array(false, $plugin_result, true))
{
$result = false;
}
}
if (!$result)
{
throw new Exception(JText::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'), 403);
}
// Do not allow the display task to be directly called
$task = strtolower($task);
if (isset($this->taskMap[$task]))
{
$doTask = $this->taskMap[$task];
}
elseif (isset($this->taskMap['__default']))
{
$doTask = $this->taskMap['__default'];
}
else
{
$doTask = null;
}
if ($doTask == 'display')
{
F0FPlatform::getInstance()->setHeader('Status', '400 Bad Request', true);
throw new Exception('Bad Request', 400);
}
$this->doTask = $doTask;
$ret = $this->$doTask();
$method_name = 'onAfter' . ucfirst($task);
if (method_exists($this, $method_name))
{
$result = $this->$method_name();
}
else
{
$result = true;
}
if ($result)
{
$plugin_event = F0FInflector::camelize('on after ' . $this->bareComponent . ' controller ' . $this->view . ' ' . $task);
$plugin_result = F0FPlatform::getInstance()->runPlugins($plugin_event, array(&$this, &$this->input, &$ret));
if (in_array(false, $plugin_result, true))
{
$result = false;
}
}
if (!$result)
{
throw new Exception(JText::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'), 403);
}
return $ret;
}
/**
* Default task. Assigns a model to the view and asks the view to render
* itself.
*
* YOU MUST NOT USETHIS TASK DIRECTLY IN A URL. It is supposed to be
* used ONLY inside your code. In the URL, use task=browse instead.
*
* @param bool $cachable Is this view cacheable?
* @param bool $urlparams Add your safe URL parameters (see further down in the code)
* @param string $tpl The name of the template file to parse
*
* @return bool
*/
public function display($cachable = false, $urlparams = false, $tpl = null)
{
$document = F0FPlatform::getInstance()->getDocument();
if ($document instanceof JDocument)
{
$viewType = $document->getType();
}
else
{
$viewType = $this->input->getCmd('format', 'html');
}
$view = $this->getThisView();
// Get/Create the model
if ($model = $this->getThisModel())
{
// Push the model into the view (as default)
$view->setModel($model, true);
}
// Set the layout
$view->setLayout(is_null($this->layout) ? 'default' : $this->layout);
// Display the view
$conf = F0FPlatform::getInstance()->getConfig();
if (F0FPlatform::getInstance()->isFrontend() && $cachable && ($viewType != 'feed') && $conf->get('caching') >= 1)
{
// Get a JCache object
$option = $this->input->get('option', 'com_foobar', 'cmd');
$cache = JFactory::getCache($option, 'view');
// Set up a cache ID based on component, view, task and user group assignment
$user = F0FPlatform::getInstance()->getUser();
if ($user->guest)
{
$groups = array();
}
else
{
$groups = $user->groups;
}
$importantParameters = array();
// Set up safe URL parameters
if (!is_array($urlparams))
{
$urlparams = array(
'option' => 'CMD',
'view' => 'CMD',
'task' => 'CMD',
'format' => 'CMD',
'layout' => 'CMD',
'id' => 'INT',
);
}
if (is_array($urlparams))
{
$app = JFactory::getApplication();
$registeredurlparams = null;
if (version_compare(JVERSION, '3.0', 'ge'))
{
if (property_exists($app, 'registeredurlparams'))
{
$registeredurlparams = $app->registeredurlparams;
}
}
else
{
$registeredurlparams = $app->get('registeredurlparams');
}
if (empty($registeredurlparams))
{
$registeredurlparams = new stdClass;
}
foreach ($urlparams AS $key => $value)
{
// Add your safe url parameters with variable type as value {@see JFilterInput::clean()}.
$registeredurlparams->$key = $value;
// Add the URL-important parameters into the array
$importantParameters[$key] = $this->input->get($key, null, $value);
}
if (version_compare(JVERSION, '3.0', 'ge'))
{
$app->registeredurlparams = $registeredurlparams;
}
else
{
$app->set('registeredurlparams', $registeredurlparams);
}
}
// Create the cache ID after setting the registered URL params, as they are used to generate the ID
$cacheId = md5(serialize(array(JCache::makeId(), $view->getName(), $this->doTask, $groups, $importantParameters)));
// Get the cached view or cache the current view
$cache->get($view, 'display', $cacheId);
}
else
{
// Display without caching
$view->display($tpl);
}
return true;
}
/**
* Implements a default browse task, i.e. read a bunch of records and send
* them to the browser.
*
* @return boolean
*/
public function browse()
{
if ($this->input->get('savestate', -999, 'int') == -999)
{
$this->input->set('savestate', true);
}
// Do I have a form?
$model = $this->getThisModel();
if (empty($this->layout))
{
$formname = 'form.default';
}
else
{
$formname = 'form.' . $this->layout;
}
$model->setState('form_name', $formname);
$form = $model->getForm();
if ($form !== false)
{
$this->hasForm = true;
}
$this->display(in_array('browse', $this->cacheableTasks));
return true;
}
/**
* Single record read. The id set in the request is passed to the model and
* then the item layout is used to render the result.
*
* @return bool
*/
public function read()
{
// Load the model
$model = $this->getThisModel();
if (!$model->getId())
{
$model->setIDsFromRequest();
}
// Set the layout to item, if it's not set in the URL
if (is_null($this->layout))
{
$this->layout = 'item';
}
// Do I have a form?
$model->setState('form_name', 'form.' . $this->layout);
$item = $model->getItem();
if (!($item instanceof F0FTable))
{
return false;
}
$itemKey = $item->getKeyName();
if ($item->$itemKey != $model->getId())
{
return false;
}
$formData = is_object($item) ? $item->getData() : array();
$form = $model->getForm($formData);
if ($form !== false)
{
$this->hasForm = true;
}
// Display
$this->display(in_array('read', $this->cacheableTasks));
return true;
}
/**
* Single record add. The form layout is used to present a blank page.
*
* @return false|void
*/
public function add()
{
// Load and reset the model
$model = $this->getThisModel();
$model->reset();
// Set the layout to form, if it's not set in the URL
if (!$this->layout)
{
$this->layout = 'form';
}
// Do I have a form?
$model->setState('form_name', 'form.' . $this->layout);
$item = $model->getItem();
if (!($item instanceof F0FTable))
{
return false;
}
$formData = is_object($item) ? $item->getData() : array();
$form = $model->getForm($formData);
if ($form !== false)
{
$this->hasForm = true;
}
// Display
$this->display(in_array('add', $this->cacheableTasks));
}
/**
* Single record edit. The ID set in the request is passed to the model,
* then the form layout is used to edit the result.
*
* @return bool
*/
public function edit()
{
// Load the model
$model = $this->getThisModel();
if (!$model->getId())
{
$model->setIDsFromRequest();
}
$status = $model->checkout();
if (!$status)
{
// Redirect on error
if ($customURL = $this->input->get('returnurl', '', 'string'))
{
$customURL = base64_decode($customURL);
}
$url = !empty($customURL) ? $customURL : 'index.php?option=' . $this->component . '&view=' . F0FInflector::pluralize($this->view) . $this->getItemidURLSuffix();
$this->setRedirect($url, $model->getError(), 'error');
return false;
}
// Set the layout to form, if it's not set in the URL
if (is_null($this->layout))
{
$this->layout = 'form';
}
// Do I have a form?
$model->setState('form_name', 'form.' . $this->layout);
$item = $model->getItem();
if (!($item instanceof F0FTable))
{
return false;
}
$itemKey = $item->getKeyName();
if ($item->$itemKey != $model->getId())
{
return false;
}
$formData = is_object($item) ? $item->getData() : array();
$form = $model->getForm($formData);
if ($form !== false)
{
$this->hasForm = true;
}
// Display
$this->display(in_array('edit', $this->cacheableTasks));
return true;
}
/**
* Save the incoming data and then return to the Edit task
*
* @return bool
*/
public function apply()
{
// CSRF prevention
if ($this->csrfProtection)
{
$this->_csrfProtection();
}
$model = $this->getThisModel();
$result = $this->applySave();
// Redirect to the edit task
if ($result)
{
$id = $this->input->get('id', 0, 'int');
$textkey = strtoupper($this->component) . '_LBL_' . strtoupper($this->view) . '_SAVED';
if ($customURL = $this->input->get('returnurl', '', 'string'))
{
$customURL = base64_decode($customURL);
}
$url = !empty($customURL) ? $customURL : 'index.php?option=' . $this->component . '&view=' . $this->view . '&task=edit&id=' . $id . $this->getItemidURLSuffix();
$this->setRedirect($url, JText::_($textkey));
}
return $result;
}
/**
* Duplicates selected items
*
* @return bool
*/
public function copy()
{
// CSRF prevention
if ($this->csrfProtection)
{
$this->_csrfProtection();
}
$model = $this->getThisModel();
if (!$model->getId())
{
$model->setIDsFromRequest();
}
$status = $model->copy();
// Redirect
if ($customURL = $this->input->get('returnurl', '', 'string'))
{
$customURL = base64_decode($customURL);
}
$url = !empty($customURL) ? $customURL : 'index.php?option=' . $this->component . '&view=' . F0FInflector::pluralize($this->view) . $this->getItemidURLSuffix();
if (!$status)
{
$this->setRedirect($url, $model->getError(), 'error');
return false;
}
else
{
if(!F0FPlatform::getInstance()->isCli())
{
F0FPlatform::getInstance()->setHeader('Status', '201 Created', true);
}
$this->setRedirect($url);
return true;
}
}
/**
* Save the incoming data and then return to the Browse task
*
* @return bool
*/
public function save()
{
// CSRF prevention
if ($this->csrfProtection)
{
$this->_csrfProtection();
}
$result = $this->applySave();
// Redirect to the display task
if ($result)
{
$textkey = strtoupper($this->component) . '_LBL_' . strtoupper($this->view) . '_SAVED';
if ($customURL = $this->input->get('returnurl', '', 'string'))
{
$customURL = base64_decode($customURL);
}
$url = !empty($customURL) ? $customURL : 'index.php?option=' . $this->component . '&view=' . F0FInflector::pluralize($this->view) . $this->getItemidURLSuffix();
$this->setRedirect($url, JText::_($textkey));
}
return $result;
}
/**
* Save the incoming data and then return to the Add task
*
* @return bool
*/
public function savenew()
{
// CSRF prevention
if ($this->csrfProtection)
{
$this->_csrfProtection();
}
$result = $this->applySave();
// Redirect to the display task
if ($result)
{
$textkey = strtoupper($this->component) . '_LBL_' . strtoupper($this->view) . '_SAVED';
if ($customURL = $this->input->get('returnurl', '', 'string'))
{
$customURL = base64_decode($customURL);
}
$url = !empty($customURL) ? $customURL : 'index.php?option=' . $this->component . '&view=' . $this->view . '&task=add' . $this->getItemidURLSuffix();
$this->setRedirect($url, JText::_($textkey));
}
return $result;
}
/**
* Cancel the edit, check in the record and return to the Browse task
*
* @return bool
*/
public function cancel()
{
$model = $this->getThisModel();
if (!$model->getId())
{
$model->setIDsFromRequest();
}
$model->checkin();
// Remove any saved data
JFactory::getSession()->set($model->getHash() . 'savedata', null);
// Redirect to the display task
if ($customURL = $this->input->get('returnurl', '', 'string'))
{
$customURL = base64_decode($customURL);
}
$url = !empty($customURL) ? $customURL : 'index.php?option=' . $this->component . '&view=' . F0FInflector::pluralize($this->view) . $this->getItemidURLSuffix();
$this->setRedirect($url);
return true;
}
/**
* Method to load a row from version history
*
* @return boolean True if the content history is reverted, false otherwise
*
* @since 2.2
*/
public function loadhistory()
{
$app = JFactory::getApplication();
$lang = JFactory::getLanguage();
$model = $this->getThisModel();
$table = $model->getTable();
$historyId = $app->input->get('version_id', null, 'integer');
$status = $model->checkout();
$alias = $this->component . '.' . $this->view;
if (!$model->loadhistory($historyId, $table, $alias))
{
$this->setMessage($model->getError(), 'error');
$url = !empty($customURL) ? $customURL : 'index.php?option=' . $this->component . '&view=' . F0FInflector::pluralize($this->view) . $this->getItemidURLSuffix();
$this->setRedirect($url);
return false;
}
// Determine the name of the primary key for the data.
if (empty($key))
{
$key = $table->getKeyName();
}
$recordId = $table->$key;
// To avoid data collisions the urlVar may be different from the primary key.
$urlVar = empty($this->urlVar) ? $key : $this->urlVar;
// Access check.
$privilege = $this->configProvider->get(
$this->component . '.views.' .
F0FInflector::singularize($this->view) . '.acl.edit', 'core.edit'
);
if (!$this->checkACL($privilege))
{
$this->setError(JText::_('JLIB_APPLICATION_ERROR_EDIT_NOT_PERMITTED'));
$this->setMessage($this->getError(), 'error');
$url = !empty($customURL) ? $customURL : 'index.php?option=' . $this->component . '&view=' . F0FInflector::pluralize($this->view) . $this->getItemidURLSuffix();
$this->setRedirect($url);
$table->checkin();
return false;
}
$table->store();
$url = !empty($customURL) ? $customURL : 'index.php?option=' . $this->component . '&view=' . F0FInflector::pluralize($this->view) . $this->getItemidURLSuffix();
$this->setRedirect($url);
$this->setMessage(JText::sprintf('JLIB_APPLICATION_SUCCESS_LOAD_HISTORY', $model->getState('save_date'), $model->getState('version_note')));
return true;
}
/**
* Sets the access to public. Joomla! 1.5 compatibility.
*
* @return bool
*
* @deprecated since 2.0
*/
public function accesspublic()
{
// CSRF prevention
if ($this->csrfProtection)
{
$this->_csrfProtection();
}
return $this->setaccess(0);
}
/**
* Sets the access to registered. Joomla! 1.5 compatibility.
*
* @return bool
*
* @deprecated since 2.0
*/
public function accessregistered()
{
// CSRF prevention
if ($this->csrfProtection)
{
$this->_csrfProtection();
}
return $this->setaccess(1);
}
/**
* Sets the access to special. Joomla! 1.5 compatibility.
*
* @return bool
*
* @deprecated since 2.0
*/
public function accessspecial()
{
// CSRF prevention
if ($this->csrfProtection)
{
$this->_csrfProtection();
}
return $this->setaccess(2);
}
/**
* Publish (set enabled = 1) an item.
*
* @return bool
*/
public function publish()
{
// CSRF prevention
if ($this->csrfProtection)
{
$this->_csrfProtection();
}
return $this->setstate(1);
}
/**
* Unpublish (set enabled = 0) an item.
*
* @return bool
*/
public function unpublish()
{
// CSRF prevention
if ($this->csrfProtection)
{
$this->_csrfProtection();
}
return $this->setstate(0);
}
/**
* Archive (set enabled = 2) an item.
*
* @return bool
*/
public function archive()
{
// CSRF prevention
if ($this->csrfProtection)
{
$this->_csrfProtection();
}
return $this->setstate(2);
}
/**
* Trash (set enabled = -2) an item.
*
* @return bool
*/
public function trash()
{
// CSRF prevention
if ($this->csrfProtection)
{
$this->_csrfProtection();
}
return $this->setstate(-2);
}
/**
* Saves the order of the items
*
* @return bool
*/
public function saveorder()
{
// CSRF prevention
if ($this->csrfProtection)
{
$this->_csrfProtection();
}
$model = $this->getThisModel();
if (!$model->getId())
{
$model->setIDsFromRequest();
}
$ordering = $model->getTable()->getColumnAlias('ordering');
$ids = $model->getIds();
$orders = $this->input->get('order', array(), 'array');
if ($n = count($ids))
{
for ($i = 0; $i < $n; $i++)
{
$model->setId($ids[$i]);
$neworder = (int) $orders[$i];
$item = $model->getItem();
if (!($item instanceof F0FTable))
{
return false;
}
$key = $item->getKeyName();
if ($item->$key == $ids[$i])
{
$item->$ordering = $neworder;
$model->save($item);
}
}
}
$status = $model->reorder();
// Redirect
if ($customURL = $this->input->get('returnurl', '', 'string'))
{
$customURL = base64_decode($customURL);
}
$url = !empty($customURL) ? $customURL : 'index.php?option=' . $this->component . '&view=' . F0FInflector::pluralize($this->view) . $this->getItemidURLSuffix();
$this->setRedirect($url);
return $status;
}
/**
* Moves selected items one position down the ordering list
*
* @return bool
*/
public function orderdown()
{
// CSRF prevention
if ($this->csrfProtection)
{
$this->_csrfProtection();
}
$model = $this->getThisModel();
if (!$model->getId())
{
$model->setIDsFromRequest();
}
$status = $model->move(1);
// Redirect
if ($customURL = $this->input->get('returnurl', '', 'string'))
{
$customURL = base64_decode($customURL);
}
$url = !empty($customURL) ? $customURL : 'index.php?option=' . $this->component . '&view=' . F0FInflector::pluralize($this->view) . $this->getItemidURLSuffix();
if (!$status)
{
$this->setRedirect($url, $model->getError(), 'error');
}
else
{
$this->setRedirect($url);
}
return $status;
}
/**
* Moves selected items one position up the ordering list
*
* @return bool
*/
public function orderup()
{
// CSRF prevention
if ($this->csrfProtection)
{
$this->_csrfProtection();
}
$model = $this->getThisModel();
if (!$model->getId())
{
$model->setIDsFromRequest();
}
$status = $model->move(-1);
// Redirect
if ($customURL = $this->input->get('returnurl', '', 'string'))
{
$customURL = base64_decode($customURL);
}
$url = !empty($customURL) ? $customURL : 'index.php?option=' . $this->component . '&view=' . F0FInflector::pluralize($this->view) . $this->getItemidURLSuffix();
if (!$status)
{
$this->setRedirect($url, $model->getError(), 'error');
}
else
{
$this->setRedirect($url);
}
return $status;
}
/**
* Delete selected item(s)
*
* @return bool
*/
public function remove()
{
// CSRF prevention
if ($this->csrfProtection)
{
$this->_csrfProtection();
}
$model = $this->getThisModel();
if (!$model->getId())
{
$model->setIDsFromRequest();
}
$status = $model->delete();
// Redirect
if ($customURL = $this->input->get('returnurl', '', 'string'))
{
$customURL = base64_decode($customURL);
}
$url = !empty($customURL) ? $customURL : 'index.php?option=' . $this->component . '&view=' . F0FInflector::pluralize($this->view) . $this->getItemidURLSuffix();
if (!$status)
{
$this->setRedirect($url, $model->getError(), 'error');
}
else
{
$this->setRedirect($url);
}
return $status;
}
/**
* Redirects the browser or returns false if no redirect is set.
*
* @return boolean False if no redirect exists.
*/
public function redirect()
{
if ($this->redirect)
{
$app = JFactory::getApplication();
$app->enqueueMessage($this->message, $this->messageType);
$app->redirect($this->redirect);
return true;
}
return false;
}
/**
* Returns true if there is a redirect set in the controller
*
* @return boolean
*/
public function hasRedirect()
{
return !empty($this->redirect);
}
/**
* Register the default task to perform if a mapping is not found.
*
* @param string $method The name of the method in the derived class to perform if a named task is not found.
*
* @return F0FController A F0FController object to support chaining.
*/
public function registerDefaultTask($method)
{
$this->registerTask('__default', $method);
return $this;
}
/**
* Register (map) a task to a method in the class.
*
* @param string $task The task.
* @param string $method The name of the method in the derived class to perform for this task.
*
* @return F0FController A F0FController object to support chaining.
*/
public function registerTask($task, $method)
{
if (in_array(strtolower($method), $this->methods))
{
$this->taskMap[strtolower($task)] = $method;
}
return $this;
}
/**
* Unregister (unmap) a task in the class.
*
* @param string $task The task.
*
* @return F0FController This object to support chaining.
*/
public function unregisterTask($task)
{
unset($this->taskMap[strtolower($task)]);
return $this;
}
/**
* Sets the internal message that is passed with a redirect
*
* @param string $text Message to display on redirect.
* @param string $type Message type. Optional, defaults to 'message'.
*
* @return string Previous message
*/
public function setMessage($text, $type = 'message')
{
$previous = $this->message;
$this->message = $text;
$this->messageType = $type;
return $previous;
}
/**
* Sets an entire array of search paths for resources.
*
* @param string $type The type of path to set, typically 'view' or 'model'.
* @param string $path The new set of search paths. If null or false, resets to the current directory only.
*
* @return void
*/
protected function setPath($type, $path)
{
// Clear out the prior search dirs
$this->paths[$type] = array();
// Actually add the user-specified directories
$this->addPath($type, $path);
}
/**
* Registers a redirection with an optional message. The redirection is
* carried out when you use the redirect method.
*
* @param string $url The URL to redirect to
* @param string $msg The message to be pushed to the application
* @param string $type The message type to be pushed to the application, e.g. 'error'
*
* @return F0FController This object to support chaining
*/
public function setRedirect($url, $msg = null, $type = null)
{
// Do the logic only if we're parsing a raw url (index.php?foo=bar&etc=etc)
if (strpos($url, 'index.php') === 0)
{
$isAdmin = F0FPlatform::getInstance()->isBackend();
$auto = false;
if (($this->autoRouting == 2 || $this->autoRouting == 3) && $isAdmin)
{
$auto = true;
}
elseif (($this->autoRouting == 1 || $this->autoRouting == 3) && !$isAdmin)
{
$auto = true;
}
if ($auto)
{
$url = JRoute::_($url, false);
}
}
$this->redirect = $url;
if ($msg !== null)
{
// Controller may have set this directly
$this->message = $msg;
}
// Ensure the type is not overwritten by a previous call to setMessage.
if (empty($type))
{
if (empty($this->messageType))
{
$this->messageType = 'message';
}
}
// If the type is explicitly set, set it.
else
{
$this->messageType = $type;
}
return $this;
}
/**
* Sets the published state (the enabled field) of the selected item(s)
*
* @param integer $state The desired state. 0 is unpublished, 1 is published.
*
* @return bool
*/
protected function setstate($state = 0)
{
$model = $this->getThisModel();
if (!$model->getId())
{
$model->setIDsFromRequest();
}
$status = $model->publish($state);
// Redirect
if ($customURL = $this->input->get('returnurl', '', 'string'))
{
$customURL = base64_decode($customURL);
}
$url = !empty($customURL) ? $customURL : 'index.php?option=' . $this->component . '&view=' . F0FInflector::pluralize($this->view) . $this->getItemidURLSuffix();
if (!$status)
{
$this->setRedirect($url, $model->getError(), 'error');
}
else
{
$this->setRedirect($url);
}
return $status;
}
/**
* Sets the access level of the selected item(s).
*
* @param integer $level The desired viewing access level ID
*
* @return bool
*/
protected function setaccess($level = 0)
{
$model = $this->getThisModel();
if (!$model->getId())
{
$model->setIDsFromRequest();
}
$id = $model->getId();
$item = $model->getItem();
if (!($item instanceof F0FTable))
{
return false;
}
$accessField = $item->getColumnAlias('access');
$key = $item->getKeyName();
$loadedid = $item->$key;
if ($id == $loadedid)
{
$item->$accessField = $level;
$status = $model->save($item);
}
else
{
$status = false;
}
// Redirect
if ($customURL = $this->input->get('returnurl', '', 'string'))
{
$customURL = base64_decode($customURL);
}
$url = !empty($customURL) ? $customURL : 'index.php?option=' . $this->component . '&view=' . F0FInflector::pluralize($this->view) . $this->getItemidURLSuffix();
if (!$status)
{
$this->setRedirect($url, $model->getError(), 'error');
}
else
{
$this->setRedirect($url);
}
return $status;
}
/**
* Common method to handle apply and save tasks
*
* @return boolean Returns true on success
*/
final private function applySave()
{
// Load the model
$model = $this->getThisModel();
if (!$model->getId())
{
$model->setIDsFromRequest();
}
$id = $model->getId();
$data = $this->input->getData();
if (!$this->onBeforeApplySave($data))
{
return false;
}
// Set the layout to form, if it's not set in the URL
if (is_null($this->layout))
{
$this->layout = 'form';
}
// Do I have a form?
$model->setState('form_name', 'form.' . $this->layout);
$status = $model->save($data);
if ($status && ($id != 0))
{
F0FPlatform::getInstance()->setHeader('Status', '201 Created', true);
// Try to check-in the record if it's not a new one
$status = $model->checkin();
}
if ($status)
{
$status = $this->onAfterApplySave();
}
$this->input->set('id', $model->getId());
if (!$status)
{
// Redirect on error
$id = $model->getId();
if ($customURL = $this->input->get('returnurl', '', 'string'))
{
$customURL = base64_decode($customURL);
}
if (!empty($customURL))
{
$url = $customURL;
}
elseif ($id != 0)
{
$url = 'index.php?option=' . $this->component . '&view=' . $this->view . '&task=edit&id=' . $id . $this->getItemidURLSuffix();
}
else
{
$url = 'index.php?option=' . $this->component . '&view=' . $this->view . '&task=add' . $this->getItemidURLSuffix();
}
$this->setRedirect($url, '<li>' . implode('</li><li>', $model->getErrors()) . '</li>', 'error');
return false;
}
else
{
$session = JFactory::getSession();
$session->set($model->getHash() . 'savedata', null);
return true;
}
}
/**
* Returns the default model associated with the current view
*
* @param array $config Configuration variables for the model
*
* @return F0FModel The global instance of the model (singleton)
*/
final public function getThisModel($config = array())
{
if (!is_object($this->_modelObject))
{
// Make sure $config is an array
if (is_object($config))
{
$config = (array) $config;
}
elseif (!is_array($config))
{
$config = array();
}
if (!empty($this->modelName))
{
$parts = F0FInflector::explode($this->modelName);
$modelName = ucfirst(array_pop($parts));
$prefix = F0FInflector::implode($parts);
}
else
{
$prefix = ucfirst($this->bareComponent) . 'Model';
$modelName = ucfirst(F0FInflector::pluralize($this->view));
}
if (!array_key_exists('input', $config) || !($config['input'] instanceof F0FInput))
{
$config['input'] = $this->input;
}
$this->_modelObject = $this->getModel($modelName, $prefix, $config);
}
return $this->_modelObject;
}
/**
* Method to get a model object, loading it if required.
*
* @param string $name The model name. Optional.
* @param string $prefix The class prefix. Optional.
* @param array $config Configuration array for model. Optional.
*
* @return object The model.
*/
public function getModel($name = '', $prefix = '', $config = array())
{
// Make sure $config is an array
if (is_object($config))
{
$config = (array) $config;
}
elseif (!is_array($config) || empty($config))
{
// array_merge is required to create a copy instead of assigning by reference
$config = array_merge($this->config);
}
if (empty($name))
{
$name = $this->getName();
}
if (empty($prefix))
{
$prefix = $this->model_prefix;
}
if ($model = $this->createModel($name, $prefix, $config))
{
// Task is a reserved state
$model->setState('task', $this->task);
// Let's get the application object and set menu information if it's available
if (!F0FPlatform::getInstance()->isCli())
{
$app = JFactory::getApplication();
$menu = $app->getMenu();
if (is_object($menu))
{
if ($item = $menu->getActive())
{
$params = $menu->getParams($item->id);
// Set default state data
$model->setState('parameters.menu', $params);
}
}
}
}
return $model;
}
/**
* Returns current view object
*
* @param array $config Configuration variables for the model
*
* @return F0FView The global instance of the view object (singleton)
*/
final public function getThisView($config = array())
{
if (!is_object($this->_viewObject))
{
// Make sure $config is an array
if (is_object($config))
{
$config = (array) $config;
}
elseif (!is_array($config) || empty($config))
{
// array_merge is required to create a copy instead of assigning by reference
$config = array_merge($this->config);
}
$prefix = null;
$viewName = null;
$viewType = null;
if (!empty($this->viewName))
{
$parts = F0FInflector::explode($this->viewName);
$viewName = ucfirst(array_pop($parts));
$prefix = F0FInflector::implode($parts);
}
else
{
$prefix = ucfirst($this->bareComponent) . 'View';
$viewName = ucfirst($this->view);
}
$document = F0FPlatform::getInstance()->getDocument();
if ($document instanceof JDocument)
{
$viewType = $document->getType();
}
else
{
$viewType = $this->input->getCmd('format', 'html');
}
if (($viewType == 'html') && $this->hasForm)
{
$viewType = 'form';
}
if (!array_key_exists('input', $config) || !($config['input'] instanceof F0FInput))
{
$config['input'] = $this->input;
}
$config['input']->set('base_path', $this->basePath);
$this->_viewObject = $this->getView($viewName, $viewType, $prefix, $config);
}
return $this->_viewObject;
}
/**
* Method to get the controller name
*
* The dispatcher name is set by default parsed using the classname, or it can be set
* by passing a $config['name'] in the class constructor
*
* @throws Exception
*
* @return string The name of the dispatcher
*/
public function getName()
{
if (empty($this->name))
{
if (empty($this->bareComponent))
{
$r = null;
if (!preg_match('/(.*)Controller/i', get_class($this), $r))
{
throw new Exception(JText::_('JLIB_APPLICATION_ERROR_CONTROLLER_GET_NAME'), 500);
}
$this->name = strtolower($r[1]);
}
else
{
$this->name = $this->bareComponent;
}
}
return $this->name;
}
/**
* Get the last task that is being performed or was most recently performed.
*
* @return string The task that is being performed or was most recently performed.
*/
public function getTask()
{
return $this->task;
}
/**
* Gets the available tasks in the controller.
*
* @return array Array[i] of task names.
*/
public function getTasks()
{
return $this->methods;
}
/**
* Method to get a reference to the current view and load it if necessary.
*
* @param string $name The view name. Optional, defaults to the controller name.
* @param string $type The view type. Optional.
* @param string $prefix The class prefix. Optional.
* @param array $config Configuration array for view. Optional.
*
* @throws Exception
*
* @return F0FView Reference to the view or an error.
*/
public function getView($name = '', $type = '', $prefix = '', $config = array())
{
// Make sure $config is an array
if (is_object($config))
{
$config = (array) $config;
}
elseif (!is_array($config))
{
$config = array();
}
if (empty($name))
{
$name = $this->getName();
}
if (empty($prefix))
{
$prefix = $this->getName() . 'View';
}
$signature = md5($name . $type . $prefix . serialize($config));
if (empty($this->viewsCache[$signature]))
{
if ($view = $this->createView($name, $prefix, $type, $config))
{
$this->viewsCache[$signature] = & $view;
}
else
{
throw new Exception(JText::sprintf('JLIB_APPLICATION_ERROR_VIEW_NOT_FOUND', $name, $type, $prefix), 500);
}
}
return $this->viewsCache[$signature];
}
/**
* Creates a new model object
*
* @param string $name The name of the model class, e.g. Items
* @param string $prefix The prefix of the model class, e.g. FoobarModel
* @param array $config The configuration parameters for the model class
*
* @return F0FModel The model object
*/
protected function createModel($name, $prefix = '', $config = array())
{
// Make sure $config is an array
if (is_object($config))
{
$config = (array) $config;
}
elseif (!is_array($config))
{
$config = array();
}
$result = null;
// Clean the model name
$modelName = preg_replace('/[^A-Z0-9_]/i', '', $name);
$classPrefix = preg_replace('/[^A-Z0-9_]/i', '', $prefix);
$result = F0FModel::getAnInstance($modelName, $classPrefix, $config);
return $result;
}
/**
* Method to load and return a model object.
*
* @param string $name The name of the model.
* @param string $prefix Optional model prefix.
* @param array $config Configuration array for the model. Optional.
*
* @return mixed Model object on success; otherwise null
*/
protected function &_createModel($name, $prefix = '', $config = array())
{
F0FPlatform::getInstance()->logDeprecated(__CLASS__ . '::' .__METHOD__ . ' is deprecated. Use createModel() instead.');
return $this->createModel($name, $prefix, $config);
}
/**
* Creates a View object instance and returns it
*
* @param string $name The name of the view, e.g. Items
* @param string $prefix The prefix of the view, e.g. FoobarView
* @param string $type The type of the view, usually one of Html, Raw, Json or Csv
* @param array $config The configuration variables to use for creating the view
*
* @return F0FView
*/
protected function createView($name, $prefix = '', $type = '', $config = array())
{
// Make sure $config is an array
if (is_object($config))
{
$config = (array) $config;
}
elseif (!is_array($config))
{
$config = array();
}
$result = null;
// Clean the view name
$viewName = preg_replace('/[^A-Z0-9_]/i', '', $name);
$classPrefix = preg_replace('/[^A-Z0-9_]/i', '', $prefix);
$viewType = preg_replace('/[^A-Z0-9_]/i', '', $type);
if (!isset($config['input']))
{
$config['input'] = $this->input;
}
if (($config['input'] instanceof F0FInput))
{
$tmpInput = $config['input'];
}
else
{
$tmpInput = new F0FInput($config['input']);
}
// Guess the component name and view
if (!empty($prefix))
{
preg_match('/(.*)View$/', $prefix, $m);
$component = 'com_' . strtolower($m[1]);
}
else
{
$component = '';
}
if (empty($component) && array_key_exists('input', $config))
{
$component = $tmpInput->get('option', $component, 'cmd');
}
if (array_key_exists('option', $config))
{
if ($config['option'])
{
$component = $config['option'];
}
}
$config['option'] = $component;
$view = strtolower($viewName);
if (empty($view) && array_key_exists('input', $config))
{
$view = $tmpInput->get('view', $view, 'cmd');
}
if (array_key_exists('view', $config))
{
if ($config['view'])
{
$view = $config['view'];
}
}
$config['view'] = $view;
if (array_key_exists('input', $config))
{
$tmpInput->set('option', $config['option']);
$tmpInput->set('view', $config['view']);
$config['input'] = $tmpInput;
}
// Get the component directories
$componentPaths = F0FPlatform::getInstance()->getComponentBaseDirs($config['option']);
// Get the base paths where the view class files are expected to live
$basePaths = array(
$componentPaths['main'],
$componentPaths['alt']
);
$basePaths = array_merge($this->paths['view']);
// Get the alternate (singular/plural) view name
$altViewName = F0FInflector::isPlural($viewName) ? F0FInflector::singularize($viewName) : F0FInflector::pluralize($viewName);
$suffixes = array(
$viewName,
$altViewName,
'default'
);
$filesystem = F0FPlatform::getInstance()->getIntegrationObject('filesystem');
foreach ($suffixes as $suffix)
{
// Build the view class name
$viewClass = $classPrefix . ucfirst($suffix);
if (class_exists($viewClass))
{
// The class is already loaded
break;
}
// The class is not loaded. Let's load it!
$viewPath = $this->createFileName('view', array('name' => $suffix, 'type' => $viewType));
$path = $filesystem->pathFind($basePaths, $viewPath);
if ($path)
{
require_once $path;
}
if (class_exists($viewClass))
{
// The class was loaded successfully
break;
}
}
if (!class_exists($viewClass))
{
$viewClass = 'F0FView' . ucfirst($type);
}
$templateOverridePath = F0FPlatform::getInstance()->getTemplateOverridePath($config['option']);
// Setup View configuration options
if (!array_key_exists('template_path', $config))
{
$config['template_path'][] = $componentPaths['main'] . '/views/' . F0FInflector::pluralize($config['view']) . '/tmpl';
if ($templateOverridePath)
{
$config['template_path'][] = $templateOverridePath . '/' . F0FInflector::pluralize($config['view']);
}
$config['template_path'][] = $componentPaths['main'] . '/views/' . F0FInflector::singularize($config['view']) . '/tmpl';
if ($templateOverridePath)
{
$config['template_path'][] = $templateOverridePath . '/' . F0FInflector::singularize($config['view']);
}
$config['template_path'][] = $componentPaths['main'] . '/views/' . $config['view'] . '/tmpl';
if ($templateOverridePath)
{
$config['template_path'][] = $templateOverridePath . '/' . $config['view'];
}
}
$extraTemplatePath = $this->configProvider->get($config['option'] . '.views.' . $config['view'] . '.config.template_path', null);
if ($extraTemplatePath)
{
array_unshift($config['template_path'], $componentPaths['main'] . '/' . $extraTemplatePath);
}
if (!array_key_exists('helper_path', $config))
{
$config['helper_path'] = array(
$componentPaths['main'] . '/helpers',
$componentPaths['admin'] . '/helpers'
);
}
$extraHelperPath = $this->configProvider->get($config['option'] . '.views.' . $config['view'] . '.config.helper_path', null);
if ($extraHelperPath)
{
$config['helper_path'][] = $componentPaths['main'] . '/' . $extraHelperPath;
}
// Set up the page title
$setFrontendPageTitle = $this->configProvider->get($config['option'] . '.views.' . $config['view'] . '.config.setFrontendPageTitle', null);
if ($setFrontendPageTitle)
{
$setFrontendPageTitle = strtolower($setFrontendPageTitle);
$config['setFrontendPageTitle'][] = in_array($setFrontendPageTitle, array('1', 'yes', 'true', 'on'));
}
$defaultPageTitle = $this->configProvider->get($config['option'] . '.views.' . $config['view'] . '.config.defaultPageTitle', null);
if ($defaultPageTitle)
{
$config['defaultPageTitle'][] = in_array($defaultPageTitle, array('1', 'yes', 'true', 'on'));
}
// Set the use_hypermedia flag in $config if it's not already set
if (!isset($config['use_hypermedia']))
{
$config['use_hypermedia'] = $this->configProvider->get($config['option'] . '.views.' . $config['view'] . '.config.use_hypermedia', false);
}
// Set also the linkbar_style
if (!isset($config['linkbar_style']))
{
$style = $this->configProvider->get($config['option'] . '.views.' . $config['view'] . '.config.linkbar_style', false);
if ($style) {
$config['linkbar_style'] = $style;
}
}
/**
* Some administrative templates force format=utf (yeah, I know, what the heck, right?) when a format
* URL parameter does not exist in the URL. Of course there is no such thing as F0FViewUtf (why the heck would
* it be, there is no such thing as a format=utf in Joomla! for crying out loud) which causes a Fatal Error. So
* we have to detect that and force $type='html'...
*/
if (!class_exists($viewClass) && ($type != 'html'))
{
$type = 'html';
$result = $this->createView($name, $prefix, $type, $config);
}
else
{
$result = new $viewClass($config);
}
return $result;
}
/**
* Deprecated function to create a View object instance
*
* @param string $name The name of the view, e.g. 'Items'
* @param string $prefix The prefix of the view, e.g. 'FoobarView'
* @param string $type The view type, e.g. 'html'
* @param array $config The configuration array for the view
*
* @return F0FView
*
* @see F0FController::createView
*
* @deprecated since version 2.0
*/
protected function &_createView($name, $prefix = '', $type = '', $config = array())
{
F0FPlatform::getInstance()->logDeprecated(__CLASS__ . '::' . __METHOD__ . ' is deprecated. Use createView() instead.');
return $this->createView($name, $prefix, $type, $config);
}
/**
* Set the name of the view to be used by this Controller
*
* @param string $viewName The name of the view
*
* @return void
*/
public function setThisViewName($viewName)
{
$this->viewName = $viewName;
}
/**
* Set the name of the model to be used by this Controller
*
* @param string $modelName The name of the model
*
* @return void
*/
public function setThisModelName($modelName)
{
$this->modelName = $modelName;
}
/**
* Checks if the current user has enough privileges for the requested ACL
* area.
*
* @param string $area The ACL area, e.g. core.manage.
*
* @return boolean True if the user has the ACL privilege specified
*/
protected function checkACL($area)
{
if (in_array(strtolower($area), array('false','0','no','403')))
{
return false;
}
if (in_array(strtolower($area), array('true','1','yes')))
{
return true;
}
elseif (empty($area))
{
return true;
}
else
{
// Check if we're dealing with ids
$ids = null;
// First, check if there is an asset for this record
$table = $this->getThisModel()->getTable();
if ($table && $table->isAssetsTracked())
{
$ids = $this->getThisModel()->getId() ? $this->getThisModel()->getId() : null;
}
// Generic or Asset tracking
if (empty($ids))
{
return F0FPlatform::getInstance()->authorise($area, $this->component);
}
else
{
if (!is_array($ids))
{
$ids = array($ids);
}
$resource = F0FInflector::singularize($this->view);
$isEditState = ($area == 'core.edit.state');
foreach ($ids as $id)
{
$asset = $this->component . '.' . $resource . '.' . $id;
// Dedicated permission found, check it!
if (F0FPlatform::getInstance()->authorise($area, $asset) )
{
return true;
}
// Fallback on edit.own, if not edit.state. First test if the permission is available.
if ((!$isEditState) && (F0FPlatform::getInstance()->authorise('core.edit.own', $asset)))
{
$table = $this->getThisModel()->getTable();
$table->load($id);
$created_by = $table->getColumnAlias('created_by');
if ($table && isset($table->$created_by))
{
// Now test the owner is the user.
$owner_id = (int) $table->$created_by;
// If the owner matches 'me' then do the test.
if ($owner_id == F0FPlatform::getInstance()->getUser()->id)
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
}
}
}
return false;
}
/**
* A catch-all method for all tasks without a corresponding onBefore
* method. Applies the ACL preferences defined in fof.xml.
*
* @param string $task The task being executed
*
* @return boolean True to allow execution of the task
*/
protected function onBeforeGenericTask($task)
{
$privilege = $this->configProvider->get(
$this->component . '.views.' .
F0FInflector::singularize($this->view) . '.acl.' . $task, ''
);
return $this->checkACL($privilege);
}
/**
* Execute something before applySave is called. Return false to prevent
* applySave from executing.
*
* @param array &$data The data upon which applySave will act
*
* @return boolean True to allow applySave to run
*/
protected function onBeforeApplySave(&$data)
{
return true;
}
/**
* Execute something after applySave has run.
*
* @return boolean True to allow normal return, false to cause a 403 error
*/
protected function onAfterApplySave()
{
return true;
}
/**
* ACL check before changing the access level; override to customise
*
* @return boolean True to allow accesspublic() to run
*/
protected function onBeforeAccesspublic()
{
$privilege = $this->configProvider->get(
$this->component . '.views.' .
F0FInflector::singularize($this->view) . '.acl.accesspublic', 'core.edit.state');
return $this->checkACL($privilege);
}
/**
* ACL check before changing the access level; override to customise
*
* @return boolean True to allow the method to run
*/
protected function onBeforeAccessregistered()
{
$privilege = $this->configProvider->get(
$this->component . '.views.' .
F0FInflector::singularize($this->view) . '.acl.accessregistered', 'core.edit.state'
);
return $this->checkACL($privilege);
}
/**
* ACL check before changing the access level; override to customise
*
* @return boolean True to allow the method to run
*/
protected function onBeforeAccessspecial()
{
$privilege = $this->configProvider->get(
$this->component . '.views.' .
F0FInflector::singularize($this->view) . '.acl.accessspecial', 'core.edit.state'
);
return $this->checkACL($privilege);
}
/**
* ACL check before adding a new record; override to customise
*
* @return boolean True to allow the method to run
*/
protected function onBeforeAdd()
{
$privilege = $this->configProvider->get(
$this->component . '.views.' .
F0FInflector::singularize($this->view) . '.acl.add', 'core.create'
);
return $this->checkACL($privilege);
}
/**
* ACL check before saving a new/modified record; override to customise
*
* @return boolean True to allow the method to run
*/
protected function onBeforeApply()
{
$model = $this->getThisModel();
if (!$model->getId())
{
$model->setIDsFromRequest();
}
$id = $model->getId();
if(!$id)
{
$defaultPrivilege = 'core.create';
}
else
{
$defaultPrivilege = 'core.edit';
}
$privilege = $this->configProvider->get(
$this->component . '.views.' .
F0FInflector::singularize($this->view) . '.acl.apply', $defaultPrivilege
);
return $this->checkACL($privilege);
}
/**
* ACL check before allowing someone to browse
*
* @return boolean True to allow the method to run
*/
protected function onBeforeBrowse()
{
$defaultPrivilege = '';
$privilege = $this->configProvider->get(
$this->component . '.views.' .
F0FInflector::singularize($this->view) . '.acl.browse', $defaultPrivilege
);
return $this->checkACL($privilege);
}
/**
* ACL check before cancelling an edit
*
* @return boolean True to allow the method to run
*/
protected function onBeforeCancel()
{
$model = $this->getThisModel();
if (!$model->getId())
{
$model->setIDsFromRequest();
}
$id = $model->getId();
if(!$id)
{
$defaultPrivilege = 'core.create';
}
else
{
$defaultPrivilege = 'core.edit';
}
$privilege = $this->configProvider->get(
$this->component . '.views.' .
F0FInflector::singularize($this->view) . '.acl.cancel', $defaultPrivilege
);
return $this->checkACL($privilege);
}
/**
* ACL check before editing a record; override to customise
*
* @return boolean True to allow the method to run
*/
protected function onBeforeEdit()
{
$privilege = $this->configProvider->get(
$this->component . '.views.' .
F0FInflector::singularize($this->view) . '.acl.edit', 'core.edit'
);
return $this->checkACL($privilege);
}
/**
* ACL check before changing the ordering of a record; override to customise
*
* @return boolean True to allow the method to run
*/
protected function onBeforeOrderdown()
{
$privilege = $this->configProvider->get(
$this->component . '.views.' .
F0FInflector::singularize($this->view) . '.acl.orderdown', 'core.edit.state'
);
return $this->checkACL($privilege);
}
/**
* ACL check before changing the ordering of a record; override to customise
*
* @return boolean True to allow the method to run
*/
protected function onBeforeOrderup()
{
$privilege = $this->configProvider->get(
$this->component . '.views.' .
F0FInflector::singularize($this->view) . '.acl.orderup', 'core.edit.state'
);
return $this->checkACL($privilege);
}
/**
* ACL check before changing the publish status of a record; override to customise
*
* @return boolean True to allow the method to run
*/
protected function onBeforePublish()
{
$privilege = $this->configProvider->get(
$this->component . '.views.' .
F0FInflector::singularize($this->view) . '.acl.publish', 'core.edit.state'
);
return $this->checkACL($privilege);
}
/**
* ACL check before removing a record; override to customise
*
* @return boolean True to allow the method to run
*/
protected function onBeforeRemove()
{
$privilege = $this->configProvider->get(
$this->component . '.views.' .
F0FInflector::singularize($this->view) . '.acl.remove', 'core.delete'
);
return $this->checkACL($privilege);
}
/**
* ACL check before saving a new/modified record; override to customise
*
* @return boolean True to allow the method to run
*/
protected function onBeforeSave()
{
$model = $this->getThisModel();
if (!$model->getId())
{
$model->setIDsFromRequest();
}
$id = $model->getId();
if(!$id)
{
$defaultPrivilege = 'core.create';
}
else
{
$defaultPrivilege = 'core.edit';
}
$privilege = $this->configProvider->get(
$this->component . '.views.' .
F0FInflector::singularize($this->view) . '.acl.save', $defaultPrivilege
);
return $this->checkACL($privilege);
}
/**
* ACL check before saving a new/modified record; override to customise
*
* @return boolean True to allow the method to run
*/
protected function onBeforeSavenew()
{
$privilege = $this->configProvider->get(
$this->component . '.views.' .
F0FInflector::singularize($this->view) . '.acl.savenew', 'core.create'
);
return $this->checkACL($privilege);
}
/**
* ACL check before changing the ordering of a record; override to customise
*
* @return boolean True to allow the method to run
*/
protected function onBeforeSaveorder()
{
$privilege = $this->configProvider->get(
$this->component . '.views.' .
F0FInflector::singularize($this->view) . '.acl.saveorder', 'core.edit.state'
);
return $this->checkACL($privilege);
}
/**
* ACL check before changing the publish status of a record; override to customise
*
* @return boolean True to allow the method to run
*/
protected function onBeforeUnpublish()
{
$privilege = $this->configProvider->get(
$this->component . '.views.' .
F0FInflector::singularize($this->view) . '.acl.unpublish', 'core.edit.state'
);
return $this->checkACL($privilege);
}
/**
* Gets a URL suffix with the Itemid parameter. If it's not the front-end of the site, or if
* there is no Itemid set it returns an empty string.
*
* @return string The &Itemid=123 URL suffix, or an empty string if Itemid is not applicable
*/
public function getItemidURLSuffix()
{
if (F0FPlatform::getInstance()->isFrontend() && ($this->input->getCmd('Itemid', 0) != 0))
{
return '&Itemid=' . $this->input->getInt('Itemid', 0);
}
else
{
return '';
}
}
/**
* Applies CSRF protection by means of a standard Joomla! token (nonce) check.
* Raises a 403 Access Forbidden error through the platform if the check fails.
*
* TODO Move this check inside the platform
*
* @return boolean True if the CSRF check is successful
*
* @throws Exception
*/
protected function _csrfProtection()
{
static $isCli = null, $isAdmin = null;
if (is_null($isCli))
{
$isCli = F0FPlatform::getInstance()->isCli();
$isAdmin = F0FPlatform::getInstance()->isBackend();
}
switch ($this->csrfProtection)
{
// Never
case 0:
return true;
break;
// Always
case 1:
break;
// Only back-end and HTML format
case 2:
if ($isCli)
{
return true;
}
elseif (!$isAdmin && ($this->input->get('format', 'html', 'cmd') != 'html'))
{
return true;
}
break;
// Only back-end
case 3:
if (!$isAdmin)
{
return true;
}
break;
}
$hasToken = false;
$session = JFactory::getSession();
// Joomla! 1.5/1.6/1.7/2.5 (classic Joomla! API) method
if (method_exists('JUtility', 'getToken'))
{
$token = JUtility::getToken();
$hasToken = $this->input->get($token, false, 'none') == 1;
if (!$hasToken)
{
$hasToken = $this->input->get('_token', null, 'none') == $token;
}
}
// Joomla! 2.5+ (Platform 12.1+) method
if (!$hasToken)
{
if (method_exists($session, 'getToken'))
{
$token = $session->getToken();
$hasToken = $this->input->get($token, false, 'none') == 1;
if (!$hasToken)
{
$hasToken = $this->input->get('_token', null, 'none') == $token;
}
}
}
// Joomla! 2.5+ formToken method
if (!$hasToken)
{
if (method_exists($session, 'getFormToken'))
{
$token = $session->getFormToken();
$hasToken = $this->input->get($token, false, 'none') == 1;
if (!$hasToken)
{
$hasToken = $this->input->get('_token', null, 'none') == $token;
}
}
}
if (!$hasToken)
{
F0FPlatform::getInstance()->raiseError(403, JText::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'));
return false;
}
}
}
home/wuectly/www/components/com_wrapper/controller.php 0000604 00000001777 15245572040 0017427 0 ustar 00 <?php
/**
* @package Joomla.Site
* @subpackage com_wrapper
*
* @copyright (C) 2009 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Content Component Controller
*
* @since 1.5
*/
class WrapperController extends JControllerLegacy
{
/**
* Method to display a view.
*
* @param boolean $cachable If true, the view output will be cached
* @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
*
* @return JControllerLegacy This object to support chaining.
*
* @since 1.5
*/
public function display($cachable = false, $urlparams = array())
{
$cachable = true;
// Set the default view name and format from the Request.
$vName = $this->input->get('view', 'wrapper');
$this->input->set('view', $vName);
return parent::display($cachable, array('Itemid' => 'INT'));
}
}
home/wuectly/www/components/com_finder/controller.php 0000604 00000003032 15245572103 0017200 0 ustar 00 <?php
/**
* @package Joomla.Site
* @subpackage com_finder
*
* @copyright (C) 2011 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
JLoader::register('FinderHelperLanguage', JPATH_ADMINISTRATOR . '/components/com_finder/helpers/language.php');
/**
* Finder Component Controller.
*
* @since 2.5
*/
class FinderController extends JControllerLegacy
{
/**
* Method to display a view.
*
* @param boolean $cachable If true, the view output will be cached. [optional]
* @param array $urlparams An array of safe URL parameters and their variable types,
* for valid values see {@link JFilterInput::clean()}. [optional]
*
* @return JControllerLegacy This object is to support chaining.
*
* @since 2.5
*/
public function display($cachable = false, $urlparams = array())
{
$input = JFactory::getApplication()->input;
$cachable = true;
// Load plugin language files.
FinderHelperLanguage::loadPluginLanguage();
// Set the default view name and format from the Request.
$viewName = $input->get('view', 'search', 'word');
$input->set('view', $viewName);
// Don't cache view for search queries
if ($input->get('q', null, 'string') || $input->get('f', null, 'int') || $input->get('t', null, 'array'))
{
$cachable = false;
}
$safeurlparams = array(
'f' => 'INT',
'lang' => 'CMD'
);
return parent::display($cachable, $safeurlparams);
}
}
home/wuectly/www/libraries/fof/controller/controller.php 0000604 00000227522 15245573317 0017643 0 ustar 00 <?php
/**
* @package FrameworkOnFramework
* @subpackage controller
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba Ltd. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
* @note This file has been modified by the Joomla! Project and no longer reflects the original work of its author.
*/
// Protect from unauthorized access
defined('FOF_INCLUDED') or die;
/**
* FrameworkOnFramework controller class. FOF is based on the thin controller
* paradigm, where the controller is mainly used to set up the model state and
* spawn the view.
*
* @package FrameworkOnFramework
* @since 1.0
*/
class FOFController extends FOFUtilsObject
{
/**
* @var int Bit mask to enable Routing on redirects.
* 0 = never
* 1 = frontend only
* 2 = backend only
* 3 = always
*/
protected $autoRouting = 0;
/**
* The current component's name without the com_ prefix
*
* @var string
*/
protected $bareComponent = 'foobar';
/**
* The base path of the controller
*
* @var string
*/
protected $basePath;
/**
* The tasks for which caching should be enabled by default
*
* @var array
*/
protected $cacheableTasks = array('browse', 'read');
/**
* The current component's name; you can override it in the configuration
*
* @var string
*/
protected $component = 'com_foobar';
/**
* A cached copy of the class configuration parameter passed during initialisation
*
* @var array
*/
protected $config = array();
/**
* An instance of FOFConfigProvider to provision configuration overrides
*
* @var FOFConfigProvider
*/
protected $configProvider = null;
/**
* Set to true to enable CSRF protection on selected tasks. The possible
* values are:
* 0 Disabled; no token checks are performed
* 1 Enabled; token checks are always performed
* 2 Only on HTML requests and backend; token checks are always performed in the back-end and in the front-end only when format is 'html'
* 3 Only on back-end; token checks are performer only in the back-end
*
* @var integer
*/
protected $csrfProtection = 2;
/**
* The default view for the display method.
*
* @var string
*/
protected $default_view;
/**
* The mapped task that was performed.
*
* @var string
*/
protected $doTask;
/**
* The input object for this MVC triad; you can override it in the configuration
*
* @var FOFInput
*/
protected $input = array();
/**
* Redirect message.
*
* @var string
*/
protected $message;
/**
* Redirect message type.
*
* @var string
*/
protected $messageType;
/**
* The current layout; you can override it in the configuration
*
* @var string
*/
protected $layout = null;
/**
* Array of class methods
*
* @var array
*/
protected $methods;
/**
* The prefix of the models
*
* @var string
*/
protected $model_prefix;
/**
* Overrides the name of the view's default model
*
* @var string
*/
protected $modelName = null;
/**
* The set of search directories for resources (views).
*
* @var array
*/
protected $paths;
/**
* URL for redirection.
*
* @var string
*/
protected $redirect;
/**
* Current or most recently performed task.
*
* @var string
*/
protected $task;
/**
* Array of class methods to call for a given task.
*
* @var array
*/
protected $taskMap;
/**
* The name of the controller
*
* @var array
*/
protected $name;
/**
* The current view name; you can override it in the configuration
*
* @var string
*/
protected $view = '';
/**
* Overrides the name of the view's default view
*
* @var string
*/
protected $viewName = null;
/**
* A copy of the FOFView object used in this triad
*
* @var FOFView
*/
private $_viewObject = null;
/**
* A cache for the view item objects created in this controller
*
* @var array
*/
protected $viewsCache = array();
/**
* A copy of the FOFModel object used in this triad
*
* @var FOFModel
*/
private $_modelObject = null;
/**
* Does this tried have a FOFForm which will be used to render it?
*
* @var boolean
*/
protected $hasForm = false;
/**
* Gets a static (Singleton) instance of a controller class. It loads the
* relevant controller file from the component's directory or, if it doesn't
* exist, creates a new controller object out of thin air.
*
* @param string $option Component name, e.g. com_foobar
* @param string $view The view name, also used for the controller name
* @param array $config Configuration parameters
*
* @return FOFController
*/
public static function &getAnInstance($option = null, $view = null, $config = array())
{
static $instances = array();
// Make sure $config is an array
if (is_object($config))
{
$config = (array) $config;
}
elseif (!is_array($config))
{
$config = array();
}
$hash = $option . $view;
if (!array_key_exists($hash, $instances))
{
$instances[$hash] = self::getTmpInstance($option, $view, $config);
}
return $instances[$hash];
}
/**
* Gets a temporary instance of a controller object. A temporary instance is
* not a Singleton and can be disposed off after use.
*
* @param string $option The component name, e.g. com_foobar
* @param string $view The view name, e.g. cpanel
* @param array $config Configuration parameters
*
* @return \FOFController A disposable class instance
*/
public static function &getTmpInstance($option = null, $view = null, $config = array())
{
// Make sure $config is an array
if (is_object($config))
{
$config = (array) $config;
}
elseif (!is_array($config))
{
$config = array();
}
// Get an input object
if (array_key_exists('input', $config))
{
$input = $config['input'];
}
else
{
$input = null;
}
if (array_key_exists('input_options', $config))
{
$input_options = $config['input_options'];
}
else
{
$input_options = array();
}
if (!($input instanceof FOFInput))
{
$input = new FOFInput($input, $input_options);
}
// Determine the option (component name) and view
$config['option'] = !is_null($option) ? $option : $input->getCmd('option', 'com_foobar');
$config['view'] = !is_null($view) ? $view : $input->getCmd('view', 'cpanel');
// Get the class base name, e.g. FoobarController
$classBaseName = ucfirst(str_replace('com_', '', $config['option'])) . 'Controller';
// Get the class name suffixes, in the order to be searched for: plural, singular, 'default'
$classSuffixes = array(
FOFInflector::pluralize($config['view']),
FOFInflector::singularize($config['view']),
'default'
);
// Get the path names for the component
$componentPaths = FOFPlatform::getInstance()->getComponentBaseDirs($config['option']);
$filesystem = FOFPlatform::getInstance()->getIntegrationObject('filesystem');
// Look for the best classname match
foreach ($classSuffixes as $suffix)
{
$className = $classBaseName . ucfirst($suffix);
if (class_exists($className))
{
// The class is already loaded. We have a match!
break;
}
// The class is not already loaded. Try to find and load it.
$searchPaths = array(
$componentPaths['main'] . '/controllers',
$componentPaths['admin'] . '/controllers'
);
// If we have a searchpath in the configuration please search it first
if (array_key_exists('searchpath', $config))
{
array_unshift($searchPaths, $config['searchpath']);
}
else
{
$configProvider = new FOFConfigProvider;
$searchPath = $configProvider->get($config['option'] . '.views.' . FOFInflector::singularize($config['view']) . '.config.searchpath', null);
if ($searchPath)
{
array_unshift($searchPaths, $componentPaths['admin'] . '/' . $searchPath);
array_unshift($searchPaths, $componentPaths['main'] . '/' . $searchPath);
}
}
/**
* Try to find the path to this file. First try to find the
* format-specific controller file, e.g. foobar.json.php for
* format=json, then the regular one-size-fits-all controller
*/
$format = $input->getCmd('format', 'html');
$path = null;
if (!empty($format))
{
$path = $filesystem->pathFind(
$searchPaths, strtolower($suffix) . '.' . strtolower($format) . '.php'
);
}
if (!$path)
{
$path = $filesystem->pathFind(
$searchPaths, strtolower($suffix) . '.php'
);
}
// The path is found. Load the file and make sure the expected class name exists.
if ($path)
{
require_once $path;
if (class_exists($className))
{
// The class was loaded successfully. We have a match!
break;
}
}
}
if (!class_exists($className))
{
// If no specialised class is found, instantiate the generic FOFController
$className = 'FOFController';
}
$instance = new $className($config);
return $instance;
}
/**
* Public constructor of the Controller class
*
* @param array $config Optional configuration parameters
*/
public function __construct($config = array())
{
// Make sure $config is an array
if (is_object($config))
{
$config = (array) $config;
}
elseif (!is_array($config))
{
$config = array();
}
$this->methods = array();
$this->message = null;
$this->messageType = 'message';
$this->paths = array();
$this->redirect = null;
$this->taskMap = array();
// Cache the config
$this->config = $config;
// Get the input for this MVC triad
if (array_key_exists('input', $config))
{
$input = $config['input'];
}
else
{
$input = null;
}
if (array_key_exists('input_options', $config))
{
$input_options = $config['input_options'];
}
else
{
$input_options = array();
}
if ($input instanceof FOFInput)
{
$this->input = $input;
}
else
{
$this->input = new FOFInput($input, $input_options);
}
// Load the configuration provider
$this->configProvider = new FOFConfigProvider;
// Determine the methods to exclude from the base class.
$xMethods = get_class_methods('FOFController');
// Some methods must always be considered valid tasks
$iMethods = array('accesspublic', 'accessregistered', 'accessspecial',
'add', 'apply', 'browse', 'cancel', 'copy', 'edit', 'orderdown',
'orderup', 'publish', 'read', 'remove', 'save', 'savenew',
'saveorder', 'unpublish', 'display', 'archive', 'trash', 'loadhistory');
// Get the public methods in this class using reflection.
$r = new ReflectionClass($this);
$rMethods = $r->getMethods(ReflectionMethod::IS_PUBLIC);
foreach ($rMethods as $rMethod)
{
$mName = $rMethod->getName();
// If the developer screwed up and declared one of the helper method public do NOT make them available as
// tasks.
if ((substr($mName, 0, 8) == 'onBefore') || (substr($mName, 0, 7) == 'onAfter') || substr($mName, 0, 1) == '_')
{
continue;
}
// Add default display method if not explicitly declared.
if (!in_array($mName, $xMethods) || in_array($mName, $iMethods))
{
$this->methods[] = strtolower($mName);
// Auto register the methods as tasks.
$this->taskMap[strtolower($mName)] = $mName;
}
}
// Get the default values for the component and view names
$classNameParts = FOFInflector::explode(get_class($this));
if (count($classNameParts) == 3)
{
$defComponent = "com_" . $classNameParts[0];
$defView = $classNameParts[2];
}
else
{
$defComponent = 'com_foobar';
$defView = 'cpanel';
}
$this->component = $this->input->get('option', $defComponent, 'cmd');
$this->view = $this->input->get('view', $defView, 'cmd');
$this->layout = $this->input->get('layout', null, 'cmd');
// Overrides from the config
if (array_key_exists('option', $config))
{
$this->component = $config['option'];
}
if (array_key_exists('view', $config))
{
$this->view = $config['view'];
}
if (array_key_exists('layout', $config))
{
$this->layout = $config['layout'];
}
$this->layout = $this->configProvider->get($this->component . '.views.' . FOFInflector::singularize($this->view) . '.config.layout', $this->layout);
$this->input->set('option', $this->component);
// Set the bareComponent variable
$this->bareComponent = str_replace('com_', '', strtolower($this->component));
// Set the $name variable
$this->name = $this->bareComponent;
// Set the basePath variable
$componentPaths = FOFPlatform::getInstance()->getComponentBaseDirs($this->component);
$basePath = $componentPaths['main'];
if (array_key_exists('base_path', $config))
{
$basePath = $config['base_path'];
}
$altBasePath = $this->configProvider->get(
$this->component . '.views.' .
FOFInflector::singularize($this->view) . '.config.base_path', null
);
if (!is_null($altBasePath))
{
$platformDirs = FOFPlatform::getInstance()->getPlatformBaseDirs();
$basePath = $platformDirs['public'] . '/' . $altBasePath;
}
$this->basePath = $basePath;
// If the default task is set, register it as such
$defaultTask = $this->configProvider->get(
$this->component . '.views.' .
FOFInflector::singularize($this->view) . '.config.default_task', 'display'
);
if (array_key_exists('default_task', $config))
{
$this->registerDefaultTask($config['default_task']);
}
else
{
$this->registerDefaultTask($defaultTask);
}
// Set the models prefix
if (empty($this->model_prefix))
{
if (array_key_exists('model_prefix', $config))
{
// User-defined prefix
$this->model_prefix = $config['model_prefix'];
}
else
{
$this->model_prefix = $this->name . 'Model';
$this->model_prefix = $this->configProvider->get(
$this->component . '.views.' .
FOFInflector::singularize($this->view) . '.config.model_prefix', $this->model_prefix
);
}
}
// Set the default model search path
if (array_key_exists('model_path', $config))
{
// User-defined dirs
$this->addModelPath($config['model_path'], $this->model_prefix);
}
else
{
$modelPath = $this->basePath . '/models';
$altModelPath = $this->configProvider->get(
$this->component . '.views.' .
FOFInflector::singularize($this->view) . '.config.model_path', null
);
if (!is_null($altModelPath))
{
$modelPath = $this->basePath . '/' . $altModelPath;
}
$this->addModelPath($modelPath, $this->model_prefix);
}
// Set the default view search path
if (array_key_exists('view_path', $config))
{
// User-defined dirs
$this->setPath('view', $config['view_path']);
}
else
{
$viewPath = $this->basePath . '/views';
$altViewPath = $this->configProvider->get(
$this->component . '.views.' .
FOFInflector::singularize($this->view) . '.config.view_path', null
);
if (!is_null($altViewPath))
{
$viewPath = $this->basePath . '/' . $altViewPath;
}
$this->setPath('view', $viewPath);
}
// Set the default view.
if (array_key_exists('default_view', $config))
{
$this->default_view = $config['default_view'];
}
else
{
if (empty($this->default_view))
{
$this->default_view = $this->getName();
}
$this->default_view = $this->configProvider->get(
$this->component . '.views.' .
FOFInflector::singularize($this->view) . '.config.default_view', $this->default_view
);
}
// Set the CSRF protection
if (array_key_exists('csrf_protection', $config))
{
$this->csrfProtection = $config['csrf_protection'];
}
$this->csrfProtection = $this->configProvider->get(
$this->component . '.views.' .
FOFInflector::singularize($this->view) . '.config.csrf_protection', $this->csrfProtection
);
// Set any model/view name overrides
if (array_key_exists('viewName', $config))
{
$this->setThisViewName($config['viewName']);
}
else
{
$overrideViewName = $this->configProvider->get(
$this->component . '.views.' .
FOFInflector::singularize($this->view) . '.config.viewName', null
);
if ($overrideViewName)
{
$this->setThisViewName($overrideViewName);
}
}
if (array_key_exists('modelName', $config))
{
$this->setThisModelName($config['modelName']);
}
else
{
$overrideModelName = $this->configProvider->get(
$this->component . '.views.' .
FOFInflector::singularize($this->view) . '.config.modelName', null
);
if ($overrideModelName)
{
$this->setThisModelName($overrideModelName);
}
}
// Caching
if (array_key_exists('cacheableTasks', $config))
{
if (is_array($config['cacheableTasks']))
{
$this->cacheableTasks = $config['cacheableTasks'];
}
}
else
{
$cacheableTasks = $this->configProvider->get(
$this->component . '.views.' .
FOFInflector::singularize($this->view) . '.config.cacheableTasks', null
);
if ($cacheableTasks)
{
$cacheableTasks = explode(',', $cacheableTasks);
if (count($cacheableTasks))
{
$temp = array();
foreach ($cacheableTasks as $t)
{
$temp[] = trim($t);
}
$temp = array_unique($temp);
$this->cacheableTasks = $temp;
}
}
}
// Bit mask for auto routing on setRedirect
$this->autoRouting = $this->configProvider->get(
$this->component . '.views.' .
FOFInflector::singularize($this->view) . '.config.autoRouting', $this->autoRouting
);
if (array_key_exists('autoRouting', $config))
{
$this->autoRouting = $config['autoRouting'];
}
// Apply task map
$taskmap = $this->configProvider->get(
$this->component . '.views.' .
FOFInflector::singularize($this->view) . '.taskmap'
);
if (is_array($taskmap) && !empty($taskmap))
{
foreach ($taskmap as $aliasedtask => $realmethod)
{
$this->registerTask($aliasedtask, $realmethod);
}
}
}
/**
* Adds to the stack of model paths in LIFO order.
*
* @param mixed $path The directory (string) , or list of directories (array) to add.
* @param string $prefix A prefix for models
*
* @return void
*/
public static function addModelPath($path, $prefix = '')
{
FOFModel::addIncludePath($path, $prefix);
}
/**
* Adds to the search path for templates and resources.
*
* @param string $type The path type (e.g. 'model', 'view').
* @param mixed $path The directory string or stream array to search.
*
* @return FOFController A FOFController object to support chaining.
*/
protected function addPath($type, $path)
{
// Just force path to array
settype($path, 'array');
$filesystem = FOFPlatform::getInstance()->getIntegrationObject('filesystem');
if (!isset($this->paths[$type]))
{
$this->paths[$type] = array();
}
// Loop through the path directories
foreach ($path as $dir)
{
// No surrounding spaces allowed!
$dir = rtrim($filesystem->pathCheck($dir, '/'), '/') . '/';
// Add to the top of the search dirs
array_unshift($this->paths[$type], $dir);
}
return $this;
}
/**
* Add one or more view paths to the controller's stack, in LIFO order.
*
* @param mixed $path The directory (string) or list of directories (array) to add.
*
* @return FOFController This object to support chaining.
*/
public function addViewPath($path)
{
$this->addPath('view', $path);
return $this;
}
/**
* Authorisation check
*
* @param string $task The ACO Section Value to check access on.
*
* @return boolean True if authorised
*
* @deprecated 2.0 Use JAccess instead.
*/
public function authorise($task)
{
FOFPlatform::getInstance()->logDeprecated(__CLASS__ . '::' .__METHOD__ . ' is deprecated. Use checkACL() instead.');
return true;
}
/**
* Create the filename for a resource.
*
* @param string $type The resource type to create the filename for.
* @param array $parts An associative array of filename information. Optional.
*
* @return string The filename.
*/
protected static function createFileName($type, $parts = array())
{
$filename = '';
switch ($type)
{
case 'controller':
if (!empty($parts['format']))
{
if ($parts['format'] == 'html')
{
$parts['format'] = '';
}
else
{
$parts['format'] = '.' . $parts['format'];
}
}
else
{
$parts['format'] = '';
}
$filename = strtolower($parts['name'] . $parts['format'] . '.php');
break;
case 'view':
if (!empty($parts['type']))
{
$parts['type'] = '.' . $parts['type'];
}
else
{
$parts['type'] = '';
}
$filename = strtolower($parts['name'] . '/view' . $parts['type'] . '.php');
break;
}
return $filename;
}
/**
* Executes a given controller task. The onBefore<task> and onAfter<task>
* methods are called automatically if they exist.
*
* @param string $task The task to execute, e.g. "browse"
*
* @throws Exception Exception thrown if the onBefore<task> returns false
*
* @return null|bool False on execution failure
*/
public function execute($task)
{
$this->task = $task;
$method_name = 'onBefore' . ucfirst($task);
if (!method_exists($this, $method_name))
{
$result = $this->onBeforeGenericTask($task);
}
elseif (method_exists($this, $method_name))
{
$result = $this->$method_name();
}
else
{
$result = true;
}
if ($result)
{
$plugin_event = FOFInflector::camelize('on before ' . $this->bareComponent . ' controller ' . $this->view . ' ' . $task);
$plugin_result = FOFPlatform::getInstance()->runPlugins($plugin_event, array(&$this, &$this->input));
if (in_array(false, $plugin_result, true))
{
$result = false;
}
}
if (!$result)
{
throw new Exception(JText::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'), 403);
}
// Do not allow the display task to be directly called
$task = strtolower($task);
if (isset($this->taskMap[$task]))
{
$doTask = $this->taskMap[$task];
}
elseif (isset($this->taskMap['__default']))
{
$doTask = $this->taskMap['__default'];
}
else
{
$doTask = null;
}
if ($doTask == 'display')
{
FOFPlatform::getInstance()->setHeader('Status', '400 Bad Request', true);
throw new Exception('Bad Request', 400);
}
$this->doTask = $doTask;
$ret = $this->$doTask();
$method_name = 'onAfter' . ucfirst($task);
if (method_exists($this, $method_name))
{
$result = $this->$method_name();
}
else
{
$result = true;
}
if ($result)
{
$plugin_event = FOFInflector::camelize('on after ' . $this->bareComponent . ' controller ' . $this->view . ' ' . $task);
$plugin_result = FOFPlatform::getInstance()->runPlugins($plugin_event, array(&$this, &$this->input, &$ret));
if (in_array(false, $plugin_result, true))
{
$result = false;
}
}
if (!$result)
{
throw new Exception(JText::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'), 403);
}
return $ret;
}
/**
* Default task. Assigns a model to the view and asks the view to render
* itself.
*
* YOU MUST NOT USETHIS TASK DIRECTLY IN A URL. It is supposed to be
* used ONLY inside your code. In the URL, use task=browse instead.
*
* @param bool $cachable Is this view cacheable?
* @param bool $urlparams Add your safe URL parameters (see further down in the code)
* @param string $tpl The name of the template file to parse
*
* @return bool
*/
public function display($cachable = false, $urlparams = false, $tpl = null)
{
$document = FOFPlatform::getInstance()->getDocument();
if ($document instanceof JDocument)
{
$viewType = $document->getType();
}
else
{
$viewType = $this->input->getCmd('format', 'html');
}
$view = $this->getThisView();
// Get/Create the model
if ($model = $this->getThisModel())
{
// Push the model into the view (as default)
$view->setModel($model, true);
}
// Set the layout
$view->setLayout(is_null($this->layout) ? 'default' : $this->layout);
// Display the view
$conf = FOFPlatform::getInstance()->getConfig();
if (FOFPlatform::getInstance()->isFrontend() && $cachable && ($viewType != 'feed') && $conf->get('caching') >= 1)
{
// Get a JCache object
$option = $this->input->get('option', 'com_foobar', 'cmd');
$cache = JFactory::getCache($option, 'view');
// Set up a cache ID based on component, view, task and user group assignment
$user = FOFPlatform::getInstance()->getUser();
if ($user->guest)
{
$groups = array();
}
else
{
$groups = $user->groups;
}
$importantParameters = array();
// Set up safe URL parameters
if (!is_array($urlparams))
{
$urlparams = array(
'option' => 'CMD',
'view' => 'CMD',
'task' => 'CMD',
'format' => 'CMD',
'layout' => 'CMD',
'id' => 'INT',
);
}
if (is_array($urlparams))
{
$app = JFactory::getApplication();
$registeredurlparams = null;
if (version_compare(JVERSION, '3.0', 'ge'))
{
if (property_exists($app, 'registeredurlparams'))
{
$registeredurlparams = $app->registeredurlparams;
}
}
else
{
$registeredurlparams = $app->get('registeredurlparams');
}
if (empty($registeredurlparams))
{
$registeredurlparams = new stdClass;
}
foreach ($urlparams AS $key => $value)
{
// Add your safe url parameters with variable type as value {@see JFilterInput::clean()}.
$registeredurlparams->$key = $value;
// Add the URL-important parameters into the array
$importantParameters[$key] = $this->input->get($key, null, $value);
}
if (version_compare(JVERSION, '3.0', 'ge'))
{
$app->registeredurlparams = $registeredurlparams;
}
else
{
$app->set('registeredurlparams', $registeredurlparams);
}
}
// Create the cache ID after setting the registered URL params, as they are used to generate the ID
$cacheId = md5(serialize(array(JCache::makeId(), $view->getName(), $this->doTask, $groups, $importantParameters)));
// Get the cached view or cache the current view
$cache->get($view, 'display', $cacheId);
}
else
{
// Display without caching
$view->display($tpl);
}
return true;
}
/**
* Implements a default browse task, i.e. read a bunch of records and send
* them to the browser.
*
* @return boolean
*/
public function browse()
{
if ($this->input->get('savestate', -999, 'int') == -999)
{
$this->input->set('savestate', true);
}
// Do I have a form?
$model = $this->getThisModel();
if (empty($this->layout))
{
$formname = 'form.default';
}
else
{
$formname = 'form.' . $this->layout;
}
$model->setState('form_name', $formname);
$form = $model->getForm();
if ($form !== false)
{
$this->hasForm = true;
}
$this->display(in_array('browse', $this->cacheableTasks));
return true;
}
/**
* Single record read. The id set in the request is passed to the model and
* then the item layout is used to render the result.
*
* @return bool
*/
public function read()
{
// Load the model
$model = $this->getThisModel();
if (!$model->getId())
{
$model->setIDsFromRequest();
}
// Set the layout to item, if it's not set in the URL
if (is_null($this->layout))
{
$this->layout = 'item';
}
// Do I have a form?
$model->setState('form_name', 'form.' . $this->layout);
$item = $model->getItem();
if (!($item instanceof FOFTable))
{
return false;
}
$itemKey = $item->getKeyName();
if ($item->$itemKey != $model->getId())
{
return false;
}
$formData = is_object($item) ? $item->getData() : array();
$form = $model->getForm($formData);
if ($form !== false)
{
$this->hasForm = true;
}
// Display
$this->display(in_array('read', $this->cacheableTasks));
return true;
}
/**
* Single record add. The form layout is used to present a blank page.
*
* @return false|void
*/
public function add()
{
// Load and reset the model
$model = $this->getThisModel();
$model->reset();
// Set the layout to form, if it's not set in the URL
if (!$this->layout)
{
$this->layout = 'form';
}
// Do I have a form?
$model->setState('form_name', 'form.' . $this->layout);
$item = $model->getItem();
if (!($item instanceof FOFTable))
{
return false;
}
$formData = is_object($item) ? $item->getData() : array();
$form = $model->getForm($formData);
if ($form !== false)
{
$this->hasForm = true;
}
// Display
$this->display(in_array('add', $this->cacheableTasks));
}
/**
* Single record edit. The ID set in the request is passed to the model,
* then the form layout is used to edit the result.
*
* @return bool
*/
public function edit()
{
// Load the model
$model = $this->getThisModel();
if (!$model->getId())
{
$model->setIDsFromRequest();
}
$status = $model->checkout();
if (!$status)
{
// Redirect on error
if ($customURL = $this->input->get('returnurl', '', 'string'))
{
$customURL = base64_decode($customURL);
}
$url = !empty($customURL) ? $customURL : 'index.php?option=' . $this->component . '&view=' . FOFInflector::pluralize($this->view) . $this->getItemidURLSuffix();
$this->setRedirect($url, $model->getError(), 'error');
return false;
}
// Set the layout to form, if it's not set in the URL
if (is_null($this->layout))
{
$this->layout = 'form';
}
// Do I have a form?
$model->setState('form_name', 'form.' . $this->layout);
$item = $model->getItem();
if (!($item instanceof FOFTable))
{
return false;
}
$itemKey = $item->getKeyName();
if ($item->$itemKey != $model->getId())
{
return false;
}
$formData = is_object($item) ? $item->getData() : array();
$form = $model->getForm($formData);
if ($form !== false)
{
$this->hasForm = true;
}
// Display
$this->display(in_array('edit', $this->cacheableTasks));
return true;
}
/**
* Save the incoming data and then return to the Edit task
*
* @return bool
*/
public function apply()
{
// CSRF prevention
if ($this->csrfProtection)
{
$this->_csrfProtection();
}
$model = $this->getThisModel();
$result = $this->applySave();
// Redirect to the edit task
if ($result)
{
$id = $this->input->get('id', 0, 'int');
$textkey = strtoupper($this->component) . '_LBL_' . strtoupper($this->view) . '_SAVED';
if ($customURL = $this->input->get('returnurl', '', 'string'))
{
$customURL = base64_decode($customURL);
}
$url = !empty($customURL) ? $customURL : 'index.php?option=' . $this->component . '&view=' . $this->view . '&task=edit&id=' . $id . $this->getItemidURLSuffix();
$this->setRedirect($url, JText::_($textkey));
}
return $result;
}
/**
* Duplicates selected items
*
* @return bool
*/
public function copy()
{
// CSRF prevention
if ($this->csrfProtection)
{
$this->_csrfProtection();
}
$model = $this->getThisModel();
if (!$model->getId())
{
$model->setIDsFromRequest();
}
$status = $model->copy();
// Redirect
if ($customURL = $this->input->get('returnurl', '', 'string'))
{
$customURL = base64_decode($customURL);
}
$url = !empty($customURL) ? $customURL : 'index.php?option=' . $this->component . '&view=' . FOFInflector::pluralize($this->view) . $this->getItemidURLSuffix();
if (!$status)
{
$this->setRedirect($url, $model->getError(), 'error');
return false;
}
else
{
if(!FOFPlatform::getInstance()->isCli())
{
FOFPlatform::getInstance()->setHeader('Status', '201 Created', true);
}
$this->setRedirect($url);
return true;
}
}
/**
* Save the incoming data and then return to the Browse task
*
* @return bool
*/
public function save()
{
// CSRF prevention
if ($this->csrfProtection)
{
$this->_csrfProtection();
}
$result = $this->applySave();
// Redirect to the display task
if ($result)
{
$textkey = strtoupper($this->component) . '_LBL_' . strtoupper($this->view) . '_SAVED';
if ($customURL = $this->input->get('returnurl', '', 'string'))
{
$customURL = base64_decode($customURL);
}
$url = !empty($customURL) ? $customURL : 'index.php?option=' . $this->component . '&view=' . FOFInflector::pluralize($this->view) . $this->getItemidURLSuffix();
$this->setRedirect($url, JText::_($textkey));
}
return $result;
}
/**
* Save the incoming data and then return to the Add task
*
* @return bool
*/
public function savenew()
{
// CSRF prevention
if ($this->csrfProtection)
{
$this->_csrfProtection();
}
$result = $this->applySave();
// Redirect to the display task
if ($result)
{
$textkey = strtoupper($this->component) . '_LBL_' . strtoupper($this->view) . '_SAVED';
if ($customURL = $this->input->get('returnurl', '', 'string'))
{
$customURL = base64_decode($customURL);
}
$url = !empty($customURL) ? $customURL : 'index.php?option=' . $this->component . '&view=' . $this->view . '&task=add' . $this->getItemidURLSuffix();
$this->setRedirect($url, JText::_($textkey));
}
return $result;
}
/**
* Cancel the edit, check in the record and return to the Browse task
*
* @return bool
*/
public function cancel()
{
$model = $this->getThisModel();
if (!$model->getId())
{
$model->setIDsFromRequest();
}
$model->checkin();
// Remove any saved data
JFactory::getSession()->set($model->getHash() . 'savedata', null);
// Redirect to the display task
if ($customURL = $this->input->get('returnurl', '', 'string'))
{
$customURL = base64_decode($customURL);
}
$url = !empty($customURL) ? $customURL : 'index.php?option=' . $this->component . '&view=' . FOFInflector::pluralize($this->view) . $this->getItemidURLSuffix();
$this->setRedirect($url);
return true;
}
/**
* Method to load a row from version history
*
* @return boolean True if the content history is reverted, false otherwise
*
* @since 2.2
*/
public function loadhistory()
{
$app = JFactory::getApplication();
$lang = JFactory::getLanguage();
$model = $this->getThisModel();
$table = $model->getTable();
$historyId = $app->input->get('version_id', null, 'integer');
$status = $model->checkout();
$alias = $this->component . '.' . $this->view;
if (!$model->loadhistory($historyId, $table, $alias))
{
$this->setMessage($model->getError(), 'error');
$url = !empty($customURL) ? $customURL : 'index.php?option=' . $this->component . '&view=' . FOFInflector::pluralize($this->view) . $this->getItemidURLSuffix();
$this->setRedirect($url);
return false;
}
// Determine the name of the primary key for the data.
if (empty($key))
{
$key = $table->getKeyName();
}
$recordId = $table->$key;
// To avoid data collisions the urlVar may be different from the primary key.
$urlVar = empty($this->urlVar) ? $key : $this->urlVar;
// Access check.
$privilege = $this->configProvider->get(
$this->component . '.views.' .
FOFInflector::singularize($this->view) . '.acl.edit', 'core.edit'
);
if (!$this->checkACL($privilege))
{
$this->setError(JText::_('JLIB_APPLICATION_ERROR_EDIT_NOT_PERMITTED'));
$this->setMessage($this->getError(), 'error');
$url = !empty($customURL) ? $customURL : 'index.php?option=' . $this->component . '&view=' . FOFInflector::pluralize($this->view) . $this->getItemidURLSuffix();
$this->setRedirect($url);
$table->checkin();
return false;
}
$table->store();
$url = !empty($customURL) ? $customURL : 'index.php?option=' . $this->component . '&view=' . FOFInflector::pluralize($this->view) . $this->getItemidURLSuffix();
$this->setRedirect($url);
$this->setMessage(JText::sprintf('JLIB_APPLICATION_SUCCESS_LOAD_HISTORY', $model->getState('save_date'), $model->getState('version_note')));
return true;
}
/**
* Sets the access to public. Joomla! 1.5 compatibility.
*
* @return bool
*
* @deprecated since 2.0
*/
public function accesspublic()
{
// CSRF prevention
if ($this->csrfProtection)
{
$this->_csrfProtection();
}
return $this->setaccess(0);
}
/**
* Sets the access to registered. Joomla! 1.5 compatibility.
*
* @return bool
*
* @deprecated since 2.0
*/
public function accessregistered()
{
// CSRF prevention
if ($this->csrfProtection)
{
$this->_csrfProtection();
}
return $this->setaccess(1);
}
/**
* Sets the access to special. Joomla! 1.5 compatibility.
*
* @return bool
*
* @deprecated since 2.0
*/
public function accessspecial()
{
// CSRF prevention
if ($this->csrfProtection)
{
$this->_csrfProtection();
}
return $this->setaccess(2);
}
/**
* Publish (set enabled = 1) an item.
*
* @return bool
*/
public function publish()
{
// CSRF prevention
if ($this->csrfProtection)
{
$this->_csrfProtection();
}
return $this->setstate(1);
}
/**
* Unpublish (set enabled = 0) an item.
*
* @return bool
*/
public function unpublish()
{
// CSRF prevention
if ($this->csrfProtection)
{
$this->_csrfProtection();
}
return $this->setstate(0);
}
/**
* Archive (set enabled = 2) an item.
*
* @return bool
*/
public function archive()
{
// CSRF prevention
if ($this->csrfProtection)
{
$this->_csrfProtection();
}
return $this->setstate(2);
}
/**
* Trash (set enabled = -2) an item.
*
* @return bool
*/
public function trash()
{
// CSRF prevention
if ($this->csrfProtection)
{
$this->_csrfProtection();
}
return $this->setstate(-2);
}
/**
* Saves the order of the items
*
* @return bool
*/
public function saveorder()
{
// CSRF prevention
if ($this->csrfProtection)
{
$this->_csrfProtection();
}
$model = $this->getThisModel();
if (!$model->getId())
{
$model->setIDsFromRequest();
}
$ordering = $model->getTable()->getColumnAlias('ordering');
$ids = $model->getIds();
$orders = $this->input->get('order', array(), 'array');
if ($n = count($ids))
{
for ($i = 0; $i < $n; $i++)
{
$model->setId($ids[$i]);
$neworder = (int) $orders[$i];
$item = $model->getItem();
if (!($item instanceof FOFTable))
{
return false;
}
$key = $item->getKeyName();
if ($item->$key == $ids[$i])
{
$item->$ordering = $neworder;
$model->save($item);
}
}
}
$status = $model->reorder();
// Redirect
if ($customURL = $this->input->get('returnurl', '', 'string'))
{
$customURL = base64_decode($customURL);
}
$url = !empty($customURL) ? $customURL : 'index.php?option=' . $this->component . '&view=' . FOFInflector::pluralize($this->view) . $this->getItemidURLSuffix();
$this->setRedirect($url);
return $status;
}
/**
* Moves selected items one position down the ordering list
*
* @return bool
*/
public function orderdown()
{
// CSRF prevention
if ($this->csrfProtection)
{
$this->_csrfProtection();
}
$model = $this->getThisModel();
if (!$model->getId())
{
$model->setIDsFromRequest();
}
$status = $model->move(1);
// Redirect
if ($customURL = $this->input->get('returnurl', '', 'string'))
{
$customURL = base64_decode($customURL);
}
$url = !empty($customURL) ? $customURL : 'index.php?option=' . $this->component . '&view=' . FOFInflector::pluralize($this->view) . $this->getItemidURLSuffix();
if (!$status)
{
$this->setRedirect($url, $model->getError(), 'error');
}
else
{
$this->setRedirect($url);
}
return $status;
}
/**
* Moves selected items one position up the ordering list
*
* @return bool
*/
public function orderup()
{
// CSRF prevention
if ($this->csrfProtection)
{
$this->_csrfProtection();
}
$model = $this->getThisModel();
if (!$model->getId())
{
$model->setIDsFromRequest();
}
$status = $model->move(-1);
// Redirect
if ($customURL = $this->input->get('returnurl', '', 'string'))
{
$customURL = base64_decode($customURL);
}
$url = !empty($customURL) ? $customURL : 'index.php?option=' . $this->component . '&view=' . FOFInflector::pluralize($this->view) . $this->getItemidURLSuffix();
if (!$status)
{
$this->setRedirect($url, $model->getError(), 'error');
}
else
{
$this->setRedirect($url);
}
return $status;
}
/**
* Delete selected item(s)
*
* @return bool
*/
public function remove()
{
// CSRF prevention
if ($this->csrfProtection)
{
$this->_csrfProtection();
}
$model = $this->getThisModel();
if (!$model->getId())
{
$model->setIDsFromRequest();
}
$status = $model->delete();
// Redirect
if ($customURL = $this->input->get('returnurl', '', 'string'))
{
$customURL = base64_decode($customURL);
}
$url = !empty($customURL) ? $customURL : 'index.php?option=' . $this->component . '&view=' . FOFInflector::pluralize($this->view) . $this->getItemidURLSuffix();
if (!$status)
{
$this->setRedirect($url, $model->getError(), 'error');
}
else
{
$this->setRedirect($url);
}
return $status;
}
/**
* Redirects the browser or returns false if no redirect is set.
*
* @return boolean False if no redirect exists.
*/
public function redirect()
{
if ($this->redirect)
{
$app = JFactory::getApplication();
$app->enqueueMessage($this->message, $this->messageType);
$app->redirect($this->redirect);
return true;
}
return false;
}
/**
* Returns true if there is a redirect set in the controller
*
* @return boolean
*/
public function hasRedirect()
{
return !empty($this->redirect);
}
/**
* Register the default task to perform if a mapping is not found.
*
* @param string $method The name of the method in the derived class to perform if a named task is not found.
*
* @return FOFController A FOFController object to support chaining.
*/
public function registerDefaultTask($method)
{
$this->registerTask('__default', $method);
return $this;
}
/**
* Register (map) a task to a method in the class.
*
* @param string $task The task.
* @param string $method The name of the method in the derived class to perform for this task.
*
* @return FOFController A FOFController object to support chaining.
*/
public function registerTask($task, $method)
{
if (in_array(strtolower($method), $this->methods))
{
$this->taskMap[strtolower($task)] = $method;
}
return $this;
}
/**
* Unregister (unmap) a task in the class.
*
* @param string $task The task.
*
* @return FOFController This object to support chaining.
*/
public function unregisterTask($task)
{
unset($this->taskMap[strtolower($task)]);
return $this;
}
/**
* Sets the internal message that is passed with a redirect
*
* @param string $text Message to display on redirect.
* @param string $type Message type. Optional, defaults to 'message'.
*
* @return string Previous message
*/
public function setMessage($text, $type = 'message')
{
$previous = $this->message;
$this->message = $text;
$this->messageType = $type;
return $previous;
}
/**
* Sets an entire array of search paths for resources.
*
* @param string $type The type of path to set, typically 'view' or 'model'.
* @param string $path The new set of search paths. If null or false, resets to the current directory only.
*
* @return void
*/
protected function setPath($type, $path)
{
// Clear out the prior search dirs
$this->paths[$type] = array();
// Actually add the user-specified directories
$this->addPath($type, $path);
}
/**
* Registers a redirection with an optional message. The redirection is
* carried out when you use the redirect method.
*
* @param string $url The URL to redirect to
* @param string $msg The message to be pushed to the application
* @param string $type The message type to be pushed to the application, e.g. 'error'
*
* @return FOFController This object to support chaining
*/
public function setRedirect($url, $msg = null, $type = null)
{
// Do the logic only if we're parsing a raw url (index.php?foo=bar&etc=etc)
if (strpos($url, 'index.php') === 0)
{
$isAdmin = FOFPlatform::getInstance()->isBackend();
$auto = false;
if (($this->autoRouting == 2 || $this->autoRouting == 3) && $isAdmin)
{
$auto = true;
}
elseif (($this->autoRouting == 1 || $this->autoRouting == 3) && !$isAdmin)
{
$auto = true;
}
if ($auto)
{
$url = JRoute::_($url, false);
}
}
$this->redirect = $url;
if ($msg !== null)
{
// Controller may have set this directly
$this->message = $msg;
}
// Ensure the type is not overwritten by a previous call to setMessage.
if (empty($type))
{
if (empty($this->messageType))
{
$this->messageType = 'message';
}
}
// If the type is explicitly set, set it.
else
{
$this->messageType = $type;
}
return $this;
}
/**
* Sets the published state (the enabled field) of the selected item(s)
*
* @param integer $state The desired state. 0 is unpublished, 1 is published.
*
* @return bool
*/
protected function setstate($state = 0)
{
$model = $this->getThisModel();
if (!$model->getId())
{
$model->setIDsFromRequest();
}
$status = $model->publish($state);
// Redirect
if ($customURL = $this->input->get('returnurl', '', 'string'))
{
$customURL = base64_decode($customURL);
}
$url = !empty($customURL) ? $customURL : 'index.php?option=' . $this->component . '&view=' . FOFInflector::pluralize($this->view) . $this->getItemidURLSuffix();
if (!$status)
{
$this->setRedirect($url, $model->getError(), 'error');
}
else
{
$this->setRedirect($url);
}
return $status;
}
/**
* Sets the access level of the selected item(s).
*
* @param integer $level The desired viewing access level ID
*
* @return bool
*/
protected function setaccess($level = 0)
{
$model = $this->getThisModel();
if (!$model->getId())
{
$model->setIDsFromRequest();
}
$id = $model->getId();
$item = $model->getItem();
if (!($item instanceof FOFTable))
{
return false;
}
$accessField = $item->getColumnAlias('access');
$key = $item->getKeyName();
$loadedid = $item->$key;
if ($id == $loadedid)
{
$item->$accessField = $level;
$status = $model->save($item);
}
else
{
$status = false;
}
// Redirect
if ($customURL = $this->input->get('returnurl', '', 'string'))
{
$customURL = base64_decode($customURL);
}
$url = !empty($customURL) ? $customURL : 'index.php?option=' . $this->component . '&view=' . FOFInflector::pluralize($this->view) . $this->getItemidURLSuffix();
if (!$status)
{
$this->setRedirect($url, $model->getError(), 'error');
}
else
{
$this->setRedirect($url);
}
return $status;
}
/**
* Common method to handle apply and save tasks
*
* @return boolean Returns true on success
*/
private function applySave()
{
// Load the model
$model = $this->getThisModel();
if (!$model->getId())
{
$model->setIDsFromRequest();
}
$id = $model->getId();
$data = $this->input->getData();
if (!$this->onBeforeApplySave($data))
{
return false;
}
// Set the layout to form, if it's not set in the URL
if (is_null($this->layout))
{
$this->layout = 'form';
}
// Do I have a form?
$model->setState('form_name', 'form.' . $this->layout);
$status = $model->save($data);
if ($status && ($id != 0))
{
FOFPlatform::getInstance()->setHeader('Status', '201 Created', true);
// Try to check-in the record if it's not a new one
$status = $model->checkin();
}
if ($status)
{
$status = $this->onAfterApplySave();
}
$this->input->set('id', $model->getId());
if (!$status)
{
// Redirect on error
$id = $model->getId();
if ($customURL = $this->input->get('returnurl', '', 'string'))
{
$customURL = base64_decode($customURL);
}
if (!empty($customURL))
{
$url = $customURL;
}
elseif ($id != 0)
{
$url = 'index.php?option=' . $this->component . '&view=' . $this->view . '&task=edit&id=' . $id . $this->getItemidURLSuffix();
}
else
{
$url = 'index.php?option=' . $this->component . '&view=' . $this->view . '&task=add' . $this->getItemidURLSuffix();
}
$this->setRedirect($url, '<li>' . implode('</li><li>', $model->getErrors()) . '</li>', 'error');
return false;
}
else
{
$session = JFactory::getSession();
$session->set($model->getHash() . 'savedata', null);
return true;
}
}
/**
* Returns the default model associated with the current view
*
* @param array $config Configuration variables for the model
*
* @return FOFModel The global instance of the model (singleton)
*/
final public function getThisModel($config = array())
{
if (!is_object($this->_modelObject))
{
// Make sure $config is an array
if (is_object($config))
{
$config = (array) $config;
}
elseif (!is_array($config))
{
$config = array();
}
if (!empty($this->modelName))
{
$parts = FOFInflector::explode($this->modelName);
$modelName = ucfirst(array_pop($parts));
$prefix = FOFInflector::implode($parts);
}
else
{
$prefix = ucfirst($this->bareComponent) . 'Model';
$modelName = ucfirst(FOFInflector::pluralize($this->view));
}
if (!array_key_exists('input', $config) || !($config['input'] instanceof FOFInput))
{
$config['input'] = $this->input;
}
$this->_modelObject = $this->getModel($modelName, $prefix, $config);
}
return $this->_modelObject;
}
/**
* Method to get a model object, loading it if required.
*
* @param string $name The model name. Optional.
* @param string $prefix The class prefix. Optional.
* @param array $config Configuration array for model. Optional.
*
* @return object The model.
*/
public function getModel($name = '', $prefix = '', $config = array())
{
// Make sure $config is an array
if (is_object($config))
{
$config = (array) $config;
}
elseif (!is_array($config) || empty($config))
{
// array_merge is required to create a copy instead of assigning by reference
$config = array_merge($this->config);
}
if (empty($name))
{
$name = $this->getName();
}
if (empty($prefix))
{
$prefix = $this->model_prefix;
}
if ($model = $this->createModel($name, $prefix, $config))
{
// Task is a reserved state
$model->setState('task', $this->task);
// Let's get the application object and set menu information if it's available
if (!FOFPlatform::getInstance()->isCli())
{
$app = JFactory::getApplication();
$menu = $app->getMenu();
if (is_object($menu))
{
if ($item = $menu->getActive())
{
$params = $menu->getParams($item->id);
// Set default state data
$model->setState('parameters.menu', $params);
}
}
}
}
return $model;
}
/**
* Returns current view object
*
* @param array $config Configuration variables for the model
*
* @return FOFView The global instance of the view object (singleton)
*/
final public function getThisView($config = array())
{
if (!is_object($this->_viewObject))
{
// Make sure $config is an array
if (is_object($config))
{
$config = (array) $config;
}
elseif (!is_array($config) || empty($config))
{
// array_merge is required to create a copy instead of assigning by reference
$config = array_merge($this->config);
}
$prefix = null;
$viewName = null;
$viewType = null;
if (!empty($this->viewName))
{
$parts = FOFInflector::explode($this->viewName);
$viewName = ucfirst(array_pop($parts));
$prefix = FOFInflector::implode($parts);
}
else
{
$prefix = ucfirst($this->bareComponent) . 'View';
$viewName = ucfirst($this->view);
}
$document = FOFPlatform::getInstance()->getDocument();
if ($document instanceof JDocument)
{
$viewType = $document->getType();
}
else
{
$viewType = $this->input->getCmd('format', 'html');
}
if (($viewType == 'html') && $this->hasForm)
{
$viewType = 'form';
}
if (!array_key_exists('input', $config) || !($config['input'] instanceof FOFInput))
{
$config['input'] = $this->input;
}
$config['input']->set('base_path', $this->basePath);
$this->_viewObject = $this->getView($viewName, $viewType, $prefix, $config);
}
return $this->_viewObject;
}
/**
* Method to get the controller name
*
* The dispatcher name is set by default parsed using the classname, or it can be set
* by passing a $config['name'] in the class constructor
*
* @throws Exception
*
* @return string The name of the dispatcher
*/
public function getName()
{
if (empty($this->name))
{
if (empty($this->bareComponent))
{
$r = null;
if (!preg_match('/(.*)Controller/i', get_class($this), $r))
{
throw new Exception(JText::_('JLIB_APPLICATION_ERROR_CONTROLLER_GET_NAME'), 500);
}
$this->name = strtolower($r[1]);
}
else
{
$this->name = $this->bareComponent;
}
}
return $this->name;
}
/**
* Get the last task that is being performed or was most recently performed.
*
* @return string The task that is being performed or was most recently performed.
*/
public function getTask()
{
return $this->task;
}
/**
* Gets the available tasks in the controller.
*
* @return array Array[i] of task names.
*/
public function getTasks()
{
return $this->methods;
}
/**
* Method to get a reference to the current view and load it if necessary.
*
* @param string $name The view name. Optional, defaults to the controller name.
* @param string $type The view type. Optional.
* @param string $prefix The class prefix. Optional.
* @param array $config Configuration array for view. Optional.
*
* @throws Exception
*
* @return FOFView Reference to the view or an error.
*/
public function getView($name = '', $type = '', $prefix = '', $config = array())
{
// Make sure $config is an array
if (is_object($config))
{
$config = (array) $config;
}
elseif (!is_array($config))
{
$config = array();
}
if (empty($name))
{
$name = $this->getName();
}
if (empty($prefix))
{
$prefix = $this->getName() . 'View';
}
$signature = md5($name . $type . $prefix . serialize($config));
if (empty($this->viewsCache[$signature]))
{
if ($view = $this->createView($name, $prefix, $type, $config))
{
$this->viewsCache[$signature] = & $view;
}
else
{
throw new Exception(JText::sprintf('JLIB_APPLICATION_ERROR_VIEW_NOT_FOUND', $name, $type, $prefix), 500);
}
}
return $this->viewsCache[$signature];
}
/**
* Creates a new model object
*
* @param string $name The name of the model class, e.g. Items
* @param string $prefix The prefix of the model class, e.g. FoobarModel
* @param array $config The configuration parameters for the model class
*
* @return FOFModel The model object
*/
protected function createModel($name, $prefix = '', $config = array())
{
// Make sure $config is an array
if (is_object($config))
{
$config = (array) $config;
}
elseif (!is_array($config))
{
$config = array();
}
$result = null;
// Clean the model name
$modelName = preg_replace('/[^A-Z0-9_]/i', '', $name);
$classPrefix = preg_replace('/[^A-Z0-9_]/i', '', $prefix);
$result = FOFModel::getAnInstance($modelName, $classPrefix, $config);
return $result;
}
/**
* Method to load and return a model object.
*
* @param string $name The name of the model.
* @param string $prefix Optional model prefix.
* @param array $config Configuration array for the model. Optional.
*
* @return mixed Model object on success; otherwise null
*/
protected function &_createModel($name, $prefix = '', $config = array())
{
FOFPlatform::getInstance()->logDeprecated(__CLASS__ . '::' .__METHOD__ . ' is deprecated. Use createModel() instead.');
return $this->createModel($name, $prefix, $config);
}
/**
* Creates a View object instance and returns it
*
* @param string $name The name of the view, e.g. Items
* @param string $prefix The prefix of the view, e.g. FoobarView
* @param string $type The type of the view, usually one of Html, Raw, Json or Csv
* @param array $config The configuration variables to use for creating the view
*
* @return FOFView
*/
protected function createView($name, $prefix = '', $type = '', $config = array())
{
// Make sure $config is an array
if (is_object($config))
{
$config = (array) $config;
}
elseif (!is_array($config))
{
$config = array();
}
$result = null;
// Clean the view name
$viewName = preg_replace('/[^A-Z0-9_]/i', '', $name);
$classPrefix = preg_replace('/[^A-Z0-9_]/i', '', $prefix);
$viewType = preg_replace('/[^A-Z0-9_]/i', '', $type);
if (!isset($config['input']))
{
$config['input'] = $this->input;
}
if (($config['input'] instanceof FOFInput))
{
$tmpInput = $config['input'];
}
else
{
$tmpInput = new FOFInput($config['input']);
}
// Guess the component name and view
if (!empty($prefix))
{
preg_match('/(.*)View$/', $prefix, $m);
$component = 'com_' . strtolower($m[1]);
}
else
{
$component = '';
}
if (empty($component) && array_key_exists('input', $config))
{
$component = $tmpInput->get('option', $component, 'cmd');
}
if (array_key_exists('option', $config))
{
if ($config['option'])
{
$component = $config['option'];
}
}
$config['option'] = $component;
$view = strtolower($viewName);
if (empty($view) && array_key_exists('input', $config))
{
$view = $tmpInput->get('view', $view, 'cmd');
}
if (array_key_exists('view', $config))
{
if ($config['view'])
{
$view = $config['view'];
}
}
$config['view'] = $view;
if (array_key_exists('input', $config))
{
$tmpInput->set('option', $config['option']);
$tmpInput->set('view', $config['view']);
$config['input'] = $tmpInput;
}
// Get the component directories
$componentPaths = FOFPlatform::getInstance()->getComponentBaseDirs($config['option']);
// Get the base paths where the view class files are expected to live
$basePaths = array(
$componentPaths['main'],
$componentPaths['alt']
);
$basePaths = array_merge($this->paths['view']);
// Get the alternate (singular/plural) view name
$altViewName = FOFInflector::isPlural($viewName) ? FOFInflector::singularize($viewName) : FOFInflector::pluralize($viewName);
$suffixes = array(
$viewName,
$altViewName,
'default'
);
$filesystem = FOFPlatform::getInstance()->getIntegrationObject('filesystem');
foreach ($suffixes as $suffix)
{
// Build the view class name
$viewClass = $classPrefix . ucfirst($suffix);
if (class_exists($viewClass))
{
// The class is already loaded
break;
}
// The class is not loaded. Let's load it!
$viewPath = $this->createFileName('view', array('name' => $suffix, 'type' => $viewType));
$path = $filesystem->pathFind($basePaths, $viewPath);
if ($path)
{
require_once $path;
}
if (class_exists($viewClass))
{
// The class was loaded successfully
break;
}
}
if (!class_exists($viewClass))
{
$viewClass = 'FOFView' . ucfirst($type);
}
$templateOverridePath = FOFPlatform::getInstance()->getTemplateOverridePath($config['option']);
// Setup View configuration options
if (!array_key_exists('template_path', $config))
{
$config['template_path'][] = $componentPaths['main'] . '/views/' . FOFInflector::pluralize($config['view']) . '/tmpl';
if ($templateOverridePath)
{
$config['template_path'][] = $templateOverridePath . '/' . FOFInflector::pluralize($config['view']);
}
$config['template_path'][] = $componentPaths['main'] . '/views/' . FOFInflector::singularize($config['view']) . '/tmpl';
if ($templateOverridePath)
{
$config['template_path'][] = $templateOverridePath . '/' . FOFInflector::singularize($config['view']);
}
$config['template_path'][] = $componentPaths['main'] . '/views/' . $config['view'] . '/tmpl';
if ($templateOverridePath)
{
$config['template_path'][] = $templateOverridePath . '/' . $config['view'];
}
}
$extraTemplatePath = $this->configProvider->get($config['option'] . '.views.' . $config['view'] . '.config.template_path', null);
if ($extraTemplatePath)
{
array_unshift($config['template_path'], $componentPaths['main'] . '/' . $extraTemplatePath);
}
if (!array_key_exists('helper_path', $config))
{
$config['helper_path'] = array(
$componentPaths['main'] . '/helpers',
$componentPaths['admin'] . '/helpers'
);
}
$extraHelperPath = $this->configProvider->get($config['option'] . '.views.' . $config['view'] . '.config.helper_path', null);
if ($extraHelperPath)
{
$config['helper_path'][] = $componentPaths['main'] . '/' . $extraHelperPath;
}
// Set up the page title
$setFrontendPageTitle = $this->configProvider->get($config['option'] . '.views.' . $config['view'] . '.config.setFrontendPageTitle', null);
if ($setFrontendPageTitle)
{
$setFrontendPageTitle = strtolower($setFrontendPageTitle);
$config['setFrontendPageTitle'][] = in_array($setFrontendPageTitle, array('1', 'yes', 'true', 'on'));
}
$defaultPageTitle = $this->configProvider->get($config['option'] . '.views.' . $config['view'] . '.config.defaultPageTitle', null);
if ($defaultPageTitle)
{
$config['defaultPageTitle'][] = in_array($defaultPageTitle, array('1', 'yes', 'true', 'on'));
}
// Set the use_hypermedia flag in $config if it's not already set
if (!isset($config['use_hypermedia']))
{
$config['use_hypermedia'] = $this->configProvider->get($config['option'] . '.views.' . $config['view'] . '.config.use_hypermedia', false);
}
// Set also the linkbar_style
if (!isset($config['linkbar_style']))
{
$style = $this->configProvider->get($config['option'] . '.views.' . $config['view'] . '.config.linkbar_style', false);
if ($style) {
$config['linkbar_style'] = $style;
}
}
/**
* Some administrative templates force format=utf (yeah, I know, what the heck, right?) when a format
* URL parameter does not exist in the URL. Of course there is no such thing as FOFViewUtf (why the heck would
* it be, there is no such thing as a format=utf in Joomla! for crying out loud) which causes a Fatal Error. So
* we have to detect that and force $type='html'...
*/
if (!class_exists($viewClass) && ($type != 'html'))
{
$type = 'html';
$result = $this->createView($name, $prefix, $type, $config);
}
else
{
$result = new $viewClass($config);
}
return $result;
}
/**
* Deprecated function to create a View object instance
*
* @param string $name The name of the view, e.g. 'Items'
* @param string $prefix The prefix of the view, e.g. 'FoobarView'
* @param string $type The view type, e.g. 'html'
* @param array $config The configuration array for the view
*
* @return FOFView
*
* @see FOFController::createView
*
* @deprecated since version 2.0
*/
protected function &_createView($name, $prefix = '', $type = '', $config = array())
{
FOFPlatform::getInstance()->logDeprecated(__CLASS__ . '::' . __METHOD__ . ' is deprecated. Use createView() instead.');
return $this->createView($name, $prefix, $type, $config);
}
/**
* Set the name of the view to be used by this Controller
*
* @param string $viewName The name of the view
*
* @return void
*/
public function setThisViewName($viewName)
{
$this->viewName = $viewName;
}
/**
* Set the name of the model to be used by this Controller
*
* @param string $modelName The name of the model
*
* @return void
*/
public function setThisModelName($modelName)
{
$this->modelName = $modelName;
}
/**
* Checks if the current user has enough privileges for the requested ACL
* area.
*
* @param string $area The ACL area, e.g. core.manage.
*
* @return boolean True if the user has the ACL privilege specified
*/
protected function checkACL($area)
{
if (in_array(strtolower($area), array('false','0','no','403')))
{
return false;
}
if (in_array(strtolower($area), array('true','1','yes')))
{
return true;
}
elseif (empty($area))
{
return true;
}
else
{
// Check if we're dealing with ids
$ids = null;
// First, check if there is an asset for this record
$table = $this->getThisModel()->getTable();
if ($table && $table->isAssetsTracked())
{
$ids = $this->getThisModel()->getId() ? $this->getThisModel()->getId() : null;
}
// Generic or Asset tracking
if (empty($ids))
{
return FOFPlatform::getInstance()->authorise($area, $this->component);
}
else
{
if (!is_array($ids))
{
$ids = array($ids);
}
$resource = FOFInflector::singularize($this->view);
$isEditState = ($area == 'core.edit.state');
foreach ($ids as $id)
{
$asset = $this->component . '.' . $resource . '.' . $id;
// Dedicated permission found, check it!
if (FOFPlatform::getInstance()->authorise($area, $asset) )
{
return true;
}
// Fallback on edit.own, if not edit.state. First test if the permission is available.
if ((!$isEditState) && (FOFPlatform::getInstance()->authorise('core.edit.own', $asset)))
{
$table = $this->getThisModel()->getTable();
$table->load($id);
$created_by = $table->getColumnAlias('created_by');
if ($table && isset($table->$created_by))
{
// Now test the owner is the user.
$owner_id = (int) $table->$created_by;
// If the owner matches 'me' then do the test.
if ($owner_id == FOFPlatform::getInstance()->getUser()->id)
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
}
}
}
return false;
}
/**
* A catch-all method for all tasks without a corresponding onBefore
* method. Applies the ACL preferences defined in fof.xml.
*
* @param string $task The task being executed
*
* @return boolean True to allow execution of the task
*/
protected function onBeforeGenericTask($task)
{
$privilege = $this->configProvider->get(
$this->component . '.views.' .
FOFInflector::singularize($this->view) . '.acl.' . $task, ''
);
return $this->checkACL($privilege);
}
/**
* Execute something before applySave is called. Return false to prevent
* applySave from executing.
*
* @param array &$data The data upon which applySave will act
*
* @return boolean True to allow applySave to run
*/
protected function onBeforeApplySave(&$data)
{
return true;
}
/**
* Execute something after applySave has run.
*
* @return boolean True to allow normal return, false to cause a 403 error
*/
protected function onAfterApplySave()
{
return true;
}
/**
* ACL check before changing the access level; override to customise
*
* @return boolean True to allow accesspublic() to run
*/
protected function onBeforeAccesspublic()
{
$privilege = $this->configProvider->get(
$this->component . '.views.' .
FOFInflector::singularize($this->view) . '.acl.accesspublic', 'core.edit.state');
return $this->checkACL($privilege);
}
/**
* ACL check before changing the access level; override to customise
*
* @return boolean True to allow the method to run
*/
protected function onBeforeAccessregistered()
{
$privilege = $this->configProvider->get(
$this->component . '.views.' .
FOFInflector::singularize($this->view) . '.acl.accessregistered', 'core.edit.state'
);
return $this->checkACL($privilege);
}
/**
* ACL check before changing the access level; override to customise
*
* @return boolean True to allow the method to run
*/
protected function onBeforeAccessspecial()
{
$privilege = $this->configProvider->get(
$this->component . '.views.' .
FOFInflector::singularize($this->view) . '.acl.accessspecial', 'core.edit.state'
);
return $this->checkACL($privilege);
}
/**
* ACL check before adding a new record; override to customise
*
* @return boolean True to allow the method to run
*/
protected function onBeforeAdd()
{
$privilege = $this->configProvider->get(
$this->component . '.views.' .
FOFInflector::singularize($this->view) . '.acl.add', 'core.create'
);
return $this->checkACL($privilege);
}
/**
* ACL check before saving a new/modified record; override to customise
*
* @return boolean True to allow the method to run
*/
protected function onBeforeApply()
{
$model = $this->getThisModel();
if (!$model->getId())
{
$model->setIDsFromRequest();
}
$id = $model->getId();
if(!$id)
{
$defaultPrivilege = 'core.create';
}
else
{
$defaultPrivilege = 'core.edit';
}
$privilege = $this->configProvider->get(
$this->component . '.views.' .
FOFInflector::singularize($this->view) . '.acl.apply', $defaultPrivilege
);
return $this->checkACL($privilege);
}
/**
* ACL check before allowing someone to browse
*
* @return boolean True to allow the method to run
*/
protected function onBeforeBrowse()
{
$defaultPrivilege = '';
$privilege = $this->configProvider->get(
$this->component . '.views.' .
FOFInflector::singularize($this->view) . '.acl.browse', $defaultPrivilege
);
return $this->checkACL($privilege);
}
/**
* ACL check before cancelling an edit
*
* @return boolean True to allow the method to run
*/
protected function onBeforeCancel()
{
$model = $this->getThisModel();
if (!$model->getId())
{
$model->setIDsFromRequest();
}
$id = $model->getId();
if(!$id)
{
$defaultPrivilege = 'core.create';
}
else
{
$defaultPrivilege = 'core.edit';
}
$privilege = $this->configProvider->get(
$this->component . '.views.' .
FOFInflector::singularize($this->view) . '.acl.cancel', $defaultPrivilege
);
return $this->checkACL($privilege);
}
/**
* ACL check before editing a record; override to customise
*
* @return boolean True to allow the method to run
*/
protected function onBeforeEdit()
{
$privilege = $this->configProvider->get(
$this->component . '.views.' .
FOFInflector::singularize($this->view) . '.acl.edit', 'core.edit'
);
return $this->checkACL($privilege);
}
/**
* ACL check before changing the ordering of a record; override to customise
*
* @return boolean True to allow the method to run
*/
protected function onBeforeOrderdown()
{
$privilege = $this->configProvider->get(
$this->component . '.views.' .
FOFInflector::singularize($this->view) . '.acl.orderdown', 'core.edit.state'
);
return $this->checkACL($privilege);
}
/**
* ACL check before changing the ordering of a record; override to customise
*
* @return boolean True to allow the method to run
*/
protected function onBeforeOrderup()
{
$privilege = $this->configProvider->get(
$this->component . '.views.' .
FOFInflector::singularize($this->view) . '.acl.orderup', 'core.edit.state'
);
return $this->checkACL($privilege);
}
/**
* ACL check before changing the publish status of a record; override to customise
*
* @return boolean True to allow the method to run
*/
protected function onBeforePublish()
{
$privilege = $this->configProvider->get(
$this->component . '.views.' .
FOFInflector::singularize($this->view) . '.acl.publish', 'core.edit.state'
);
return $this->checkACL($privilege);
}
/**
* ACL check before removing a record; override to customise
*
* @return boolean True to allow the method to run
*/
protected function onBeforeRemove()
{
$privilege = $this->configProvider->get(
$this->component . '.views.' .
FOFInflector::singularize($this->view) . '.acl.remove', 'core.delete'
);
return $this->checkACL($privilege);
}
/**
* ACL check before saving a new/modified record; override to customise
*
* @return boolean True to allow the method to run
*/
protected function onBeforeSave()
{
$model = $this->getThisModel();
if (!$model->getId())
{
$model->setIDsFromRequest();
}
$id = $model->getId();
if(!$id)
{
$defaultPrivilege = 'core.create';
}
else
{
$defaultPrivilege = 'core.edit';
}
$privilege = $this->configProvider->get(
$this->component . '.views.' .
FOFInflector::singularize($this->view) . '.acl.save', $defaultPrivilege
);
return $this->checkACL($privilege);
}
/**
* ACL check before saving a new/modified record; override to customise
*
* @return boolean True to allow the method to run
*/
protected function onBeforeSavenew()
{
$privilege = $this->configProvider->get(
$this->component . '.views.' .
FOFInflector::singularize($this->view) . '.acl.savenew', 'core.create'
);
return $this->checkACL($privilege);
}
/**
* ACL check before changing the ordering of a record; override to customise
*
* @return boolean True to allow the method to run
*/
protected function onBeforeSaveorder()
{
$privilege = $this->configProvider->get(
$this->component . '.views.' .
FOFInflector::singularize($this->view) . '.acl.saveorder', 'core.edit.state'
);
return $this->checkACL($privilege);
}
/**
* ACL check before changing the publish status of a record; override to customise
*
* @return boolean True to allow the method to run
*/
protected function onBeforeUnpublish()
{
$privilege = $this->configProvider->get(
$this->component . '.views.' .
FOFInflector::singularize($this->view) . '.acl.unpublish', 'core.edit.state'
);
return $this->checkACL($privilege);
}
/**
* Gets a URL suffix with the Itemid parameter. If it's not the front-end of the site, or if
* there is no Itemid set it returns an empty string.
*
* @return string The &Itemid=123 URL suffix, or an empty string if Itemid is not applicable
*/
public function getItemidURLSuffix()
{
if (FOFPlatform::getInstance()->isFrontend() && ($this->input->getCmd('Itemid', 0) != 0))
{
return '&Itemid=' . $this->input->getInt('Itemid', 0);
}
else
{
return '';
}
}
/**
* Applies CSRF protection by means of a standard Joomla! token (nonce) check.
* Raises a 403 Access Forbidden error through the platform if the check fails.
*
* TODO Move this check inside the platform
*
* @return boolean True if the CSRF check is successful
*
* @throws Exception
*/
protected function _csrfProtection()
{
static $isCli = null, $isAdmin = null;
if (is_null($isCli))
{
$isCli = FOFPlatform::getInstance()->isCli();
$isAdmin = FOFPlatform::getInstance()->isBackend();
}
switch ($this->csrfProtection)
{
// Never
case 0:
return true;
break;
// Always
case 1:
break;
// Only back-end and HTML format
case 2:
if ($isCli)
{
return true;
}
elseif (!$isAdmin && ($this->input->get('format', 'html', 'cmd') != 'html'))
{
return true;
}
break;
// Only back-end
case 3:
if (!$isAdmin)
{
return true;
}
break;
}
$hasToken = false;
$session = JFactory::getSession();
// Joomla! 1.5/1.6/1.7/2.5 (classic Joomla! API) method
if (method_exists('JUtility', 'getToken'))
{
$token = JUtility::getToken();
$hasToken = $this->input->get($token, false, 'none') == 1;
if (!$hasToken)
{
$hasToken = $this->input->get('_token', null, 'none') == $token;
}
}
// Joomla! 2.5+ (Platform 12.1+) method
if (!$hasToken)
{
if (method_exists($session, 'getToken'))
{
$token = $session->getToken();
$hasToken = $this->input->get($token, false, 'none') == 1;
if (!$hasToken)
{
$hasToken = $this->input->get('_token', null, 'none') == $token;
}
}
}
// Joomla! 2.5+ formToken method
if (!$hasToken)
{
if (method_exists($session, 'getFormToken'))
{
$token = $session->getFormToken();
$hasToken = $this->input->get($token, false, 'none') == 1;
if (!$hasToken)
{
$hasToken = $this->input->get('_token', null, 'none') == $token;
}
}
}
if (!$hasToken)
{
FOFPlatform::getInstance()->raiseError(403, JText::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'));
return false;
}
}
}
home/wuectly/www/components/com_privacy/controller.php 0000604 00000002646 15245573343 0017427 0 ustar 00 <?php
/**
* @package Joomla.Site
* @subpackage com_privacy
*
* @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Privacy Controller
*
* @since 3.9.0
*/
class PrivacyController extends JControllerLegacy
{
/**
* Method to display a view.
*
* @param boolean $cachable If true, the view output will be cached
* @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
*
* @return $this
*
* @since 3.9.0
*/
public function display($cachable = false, $urlparams = array())
{
$view = $this->input->get('view', $this->default_view);
// Submitting information requests and confirmation through the frontend is restricted to authenticated users at this time
if (in_array($view, array('confirm', 'request')) && JFactory::getUser()->guest)
{
$this->setRedirect(
JRoute::_('index.php?option=com_users&view=login&return=' . base64_encode('index.php?option=com_privacy&view=' . $view), false)
);
return $this;
}
// Set a Referrer-Policy header for views which require it
if (in_array($view, array('confirm', 'remind')))
{
JFactory::getApplication()->setHeader('Referrer-Policy', 'no-referrer', true);
}
return parent::display($cachable, $urlparams);
}
}
home/wuectly/www/components/com_xmap/controller.php 0000604 00000003623 15245603151 0016702 0 ustar 00 <?php
/**
* @version $Id$
* @copyright Copyright (C) 2005 - 2009 Joomla! Vargas. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
* @author Guillermo Vargas (guille@vargas.co.cr)
*/
// No direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
jimport('joomla.application.component.controller');
/**
* Xmap Component Controller
*
* @package Xmap
* @subpackage com_xmap
* @since 2.0
*/
class XmapController extends JControllerLegacy
{
/**
* Method to display a view.
*
* @param boolean If true, the view output will be cached
* @param array An array of safe url parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
*
* @return JController This object to support chaining.
* @since 1.5
*/
public function display($cachable = false, $urlparams = false)
{
$cachable = true;
$id = JRequest::getInt('id');
$viewName = JRequest::getCmd('view');
$viewLayout = JRequest::getCmd('layout', 'default');
$user = JFactory::getUser();
if ($user->get('id') || !in_array($viewName, array('html', 'xml')) || $viewLayout == 'xsl') {
$cachable = false;
}
if ($viewName) {
$document = JFactory::getDocument();
$viewType = $document->getType();
$view = $this->getView($viewName, $viewType, '', array('base_path' => $this->basePath, 'layout' => $viewLayout));
$sitemapmodel = $this->getModel('Sitemap');
$view->setModel($sitemapmodel, true);
}
$safeurlparams = array('id' => 'INT', 'itemid' => 'INT', 'uid' => 'CMD', 'action' => 'CMD', 'property' => 'CMD', 'value' => 'CMD');
parent::display($cachable, $safeurlparams);
return $this;
}
}
home/wuectly/www/components/com_tags/controller.php 0000604 00000002571 15245603156 0016701 0 ustar 00 <?php
/**
* @package Joomla.Site
* @subpackage com_tags
*
* @copyright (C) 2013 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Tags Component Controller
*
* @since 3.1
*/
class TagsController extends JControllerLegacy
{
/**
* Method to display a view.
*
* @param boolean $cachable If true, the view output will be cached
* @param mixed|boolean $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
*
* @return JControllerLegacy This object to support chaining.
*
* @since 3.1
*/
public function display($cachable = false, $urlparams = false)
{
$user = JFactory::getUser();
// Set the default view name and format from the Request.
$vName = $this->input->get('view', 'tags');
$this->input->set('view', $vName);
if ($user->get('id') || ($this->input->getMethod() === 'POST' && $vName === 'tags'))
{
$cachable = false;
}
$safeurlparams = array(
'id' => 'ARRAY',
'type' => 'ARRAY',
'limit' => 'UINT',
'limitstart' => 'UINT',
'filter_order' => 'CMD',
'filter_order_Dir' => 'CMD',
'lang' => 'CMD'
);
return parent::display($cachable, $safeurlparams);
}
}
home/wuectly/www/administrator/components/com_cache/controller.php 0000604 00000007607 15245604437 0021676 0 ustar 00 <?php
/**
* @package Joomla.Administrator
* @subpackage com_cache
*
* @copyright (C) 2008 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Cache Controller
*
* @since 1.6
*/
class CacheController extends JControllerLegacy
{
/**
* Display a view.
*
* @param boolean $cachable If true, the view output will be cached
* @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
*
* @return JController This object to support chaining.
*
* @since 1.5
*/
public function display($cachable = false, $urlparams = false)
{
JLoader::register('CacheHelper', JPATH_ADMINISTRATOR . '/components/com_cache/helpers/cache.php');
// Get the document object.
$document = JFactory::getDocument();
// Set the default view name and format from the Request.
$vName = $this->input->get('view', 'cache');
$vFormat = $document->getType();
$lName = $this->input->get('layout', 'default', 'string');
// Get and render the view.
if ($view = $this->getView($vName, $vFormat))
{
switch ($vName)
{
case 'purge':
break;
case 'cache':
default:
$model = $this->getModel($vName);
$view->setModel($model, true);
break;
}
$view->setLayout($lName);
// Push document object into the view.
$view->document = $document;
// Load the submenu.
CacheHelper::addSubmenu($this->input->get('view', 'cache'));
$view->display();
}
}
/**
* Method to delete a list of cache groups.
*
* @return void
*/
public function delete()
{
// Check for request forgeries
$this->checkToken();
$cid = (array) $this->input->post->get('cid', array(), 'string');
if (empty($cid))
{
JFactory::getApplication()->enqueueMessage(JText::_('JERROR_NO_ITEMS_SELECTED'), 'warning');
}
else
{
$result = $this->getModel('cache')->cleanlist($cid);
if ($result !== array())
{
JFactory::getApplication()->enqueueMessage(JText::sprintf('COM_CACHE_EXPIRED_ITEMS_DELETE_ERROR', implode(', ', $result)), 'error');
}
else
{
JFactory::getApplication()->enqueueMessage(JText::_('COM_CACHE_EXPIRED_ITEMS_HAVE_BEEN_DELETED'), 'message');
}
}
$this->setRedirect('index.php?option=com_cache');
}
/**
* Method to delete all cache groups.
*
* @return void
*
* @since 3.6.0
*/
public function deleteAll()
{
// Check for request forgeries
$this->checkToken();
$app = JFactory::getApplication();
$model = $this->getModel('cache');
$allCleared = true;
$clients = array(1, 0);
foreach ($clients as $client)
{
$mCache = $model->getCache($client);
$clientStr = JText::_($client ? 'JADMINISTRATOR' : 'JSITE') .' > ';
foreach ($mCache->getAll() as $cache)
{
if ($mCache->clean($cache->group) === false)
{
$app->enqueueMessage(JText::sprintf('COM_CACHE_EXPIRED_ITEMS_DELETE_ERROR', $clientStr . $cache->group), 'error');
$allCleared = false;
}
}
}
if ($allCleared)
{
$app->enqueueMessage(JText::_('COM_CACHE_MSG_ALL_CACHE_GROUPS_CLEARED'), 'message');
}
else
{
$app->enqueueMessage(JText::_('COM_CACHE_MSG_SOME_CACHE_GROUPS_CLEARED'), 'warning');
}
$app->triggerEvent('onAfterPurge', array());
$this->setRedirect('index.php?option=com_cache&view=cache');
}
/**
* Purge the cache.
*
* @return void
*/
public function purge()
{
// Check for request forgeries
$this->checkToken();
if (!$this->getModel('cache')->purge())
{
JFactory::getApplication()->enqueueMessage(JText::_('COM_CACHE_EXPIRED_ITEMS_PURGING_ERROR'), 'error');
}
else
{
JFactory::getApplication()->enqueueMessage(JText::_('COM_CACHE_EXPIRED_ITEMS_HAVE_BEEN_PURGED'), 'message');
}
$this->setRedirect('index.php?option=com_cache&view=purge');
}
}
home/wuectly/www/components/com_icagenda/controller.php 0000604 00000003560 15245607006 0017473 0 ustar 00 <?php
/**
*------------------------------------------------------------------------------
* iCagenda v3 by Jooml!C - Events Management Extension for Joomla! 2.5 / 3.x
*------------------------------------------------------------------------------
* @package com_icagenda
* @copyright Copyright (c)2012-2015 Cyril Rezé, Jooml!C - All rights reserved
*
* @license GNU General Public License version 3 or later; see LICENSE.txt
* @author Cyril Rezé (Lyr!C)
* @link http://www.joomlic.com
*
* @version 3.5.4 2015-04-11
* @since 1.0
*------------------------------------------------------------------------------
*/
// No direct access to this file
defined('_JEXEC') or die();
require_once(JPATH_COMPONENT_SITE . '/helpers/iCicons.class.php');
/**
* Controller class for iCagenda.
*/
class iCagendaController extends JControllerLegacy
{
public function display($cachable = false, $urlparams = false)
{
// $cachable = true;
$paramsC = JComponentHelper::getParams('com_icagenda');
$cache = $paramsC->get('enable_cache', 0);
$cachable = false;
if ($cache == 1)
{
$cachable = true;
}
$document = JFactory::getDocument();
$safeurlparams = array(
'catid' => 'INT',
'id' => 'INT',
'cid' => 'ARRAY',
'year' => 'INT',
'month' => 'INT',
'limit' => 'UINT',
'limitstart' => 'UINT',
'showall' => 'INT',
'return' => 'BASE64',
'filter' => 'STRING',
'filter_order' => 'CMD',
'filter_order_Dir' => 'CMD',
'filter-search' => 'STRING',
'print' => 'BOOLEAN',
'lang' => 'CMD',
'Itemid' => 'INT');
parent::display($cachable, $safeurlparams);
return $this;
}
public function payment()
{
// Set base path
JLayoutHelper::$defaultBasePath = JPATH_PLUGINS . '/content/ic_paypal/layouts';
// Render mylayout.php
$renderedLayout = JLayoutHelper::render('payment_test');
echo $renderedLayout;
}
}
home/wuectly/www/components/com_search/controller.php 0000604 00000005624 15245613465 0017216 0 ustar 00 <?php
/**
* @package Joomla.Site
* @subpackage com_search
*
* @copyright (C) 2007 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Search Component Controller
*
* @since 1.5
*/
class SearchController extends JControllerLegacy
{
/**
* Method to display a view.
*
* @param bool $cachable If true, the view output will be cached
* @param bool $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
*
* @return JControllerLegacy This object to support chaining.
*
* @since 1.5
*/
public function display($cachable = false, $urlparams = false)
{
// Force it to be the search view
$this->input->set('view', 'search');
return parent::display($cachable, $urlparams);
}
/**
* Search
*
* @return void
*
* @throws Exception
*/
public function search()
{
// Slashes cause errors, <> get stripped anyway later on. # causes problems.
$badchars = array('#', '>', '<', '\\');
$searchword = trim(str_replace($badchars, '', $this->input->post->getString('searchword')));
// If searchword enclosed in double quotes, strip quotes and do exact match
if (substr($searchword, 0, 1) === '"' && substr($searchword, -1) === '"')
{
$post['searchword'] = substr($searchword, 1, -1);
$this->input->set('searchphrase', 'exact');
}
else
{
$post['searchword'] = $searchword;
}
$post['ordering'] = $this->input->post->getWord('ordering');
$post['searchphrase'] = $this->input->post->getWord('searchphrase', 'all');
$post['limit'] = $this->input->post->getUInt('limit');
if ($post['limit'] === null)
{
unset($post['limit']);
}
$areas = $this->input->post->get('areas', null, 'array');
if ($areas)
{
foreach ($areas as $area)
{
$post['areas'][] = JFilterInput::getInstance()->clean($area, 'cmd');
}
}
// The Itemid from the request, we will use this if it's a search page or if there is no search page available
$post['Itemid'] = $this->input->getInt('Itemid');
// Set Itemid id for links from menu
$app = JFactory::getApplication();
$menu = $app->getMenu();
$item = $menu->getItem($post['Itemid']);
// The requested Item is not a search page so we need to find one
if ($item && ($item->component !== 'com_search' || $item->query['view'] !== 'search'))
{
// Get item based on component, not link. link is not reliable.
$item = $menu->getItems('component', 'com_search', true);
// If we found a search page, use that.
if (!empty($item))
{
$post['Itemid'] = $item->id;
}
}
unset($post['task'], $post['submit']);
$uri = JUri::getInstance();
$uri->setQuery($post);
$uri->setVar('option', 'com_search');
$this->setRedirect(JRoute::_('index.php' . $uri->toString(array('query', 'fragment')), false));
}
}
home/wuectly/www/administrator/components/com_modules/controller.php 0000604 00000006706 15245615152 0022276 0 ustar 00 <?php
/**
* @package Joomla.Administrator
* @subpackage com_modules
*
* @copyright (C) 2007 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Modules manager master display controller.
*
* @since 1.6
*/
class ModulesController extends JControllerLegacy
{
/**
* Method to display a view.
*
* @param boolean $cachable If true, the view output will be cached
* @param array|boolean $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}
*
* @return JController This object to support chaining.
*
* @since 1.5
*/
public function display($cachable = false, $urlparams = false)
{
$id = $this->input->getInt('id');
$document = JFactory::getDocument();
// For JSON requests
if ($document->getType() == 'json')
{
$view = new ModulesViewModule;
// Get/Create the model
if ($model = new ModulesModelModule)
{
// Checkin table entry
if (!$model->checkout($id))
{
JFactory::getApplication()->enqueueMessage(JText::_('JLIB_APPLICATION_ERROR_CHECKIN_USER_MISMATCH'), 'error');
return false;
}
// Push the model into the view (as default)
$view->setModel($model, true);
}
$view->document = $document;
return $view->display();
}
JLoader::register('ModulesHelper', JPATH_ADMINISTRATOR . '/components/com_modules/helpers/modules.php');
$layout = $this->input->get('layout', 'edit');
$id = $this->input->getInt('id');
// Check for edit form.
if ($layout == 'edit' && !$this->checkEditId('com_modules.edit.module', $id))
{
// Somehow the person just went to the form - we don't allow that.
$this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id));
$this->setMessage($this->getError(), 'error');
$this->setRedirect(JRoute::_('index.php?option=com_modules&view=modules', false));
return false;
}
// Load the submenu.
ModulesHelper::addSubmenu($this->input->get('view', 'modules'));
// Check custom administrator menu modules
if (JModuleHelper::isAdminMultilang())
{
$languages = JLanguageHelper::getInstalledLanguages(1, true);
$langCodes = array();
foreach ($languages as $language)
{
if (isset($language->metadata['nativeName']))
{
$languageName = $language->metadata['nativeName'];
}
else
{
$languageName = $language->metadata['name'];
}
$langCodes[$language->metadata['tag']] = $languageName;
}
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select($db->qn('m.language'))
->from($db->qn('#__modules', 'm'))
->where($db->qn('m.module') . ' = ' . $db->quote('mod_menu'))
->where($db->qn('m.published') . ' = 1')
->where($db->qn('m.client_id') . ' = 1')
->group($db->qn('m.language'));
$mLanguages = $db->setQuery($query)->loadColumn();
// Check if we have a mod_menu module set to All languages or a mod_menu module for each admin language.
if (!in_array('*', $mLanguages) && count($langMissing = array_diff(array_keys($langCodes), $mLanguages)))
{
$app = JFactory::getApplication();
$langMissing = array_intersect_key($langCodes, array_flip($langMissing));
$app->enqueueMessage(JText::sprintf('JMENU_MULTILANG_WARNING_MISSING_MODULES', implode(', ', $langMissing)), 'warning');
}
}
return parent::display();
}
}
home/wuectly/www/libraries/joomla/controller/controller.php 0000604 00000002234 15245617007 0020334 0 ustar 00 <?php
/**
* @package Joomla.Platform
* @subpackage Controller
*
* @copyright (C) 2012 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_PLATFORM') or die;
use Joomla\Application\AbstractApplication;
/**
* Joomla Platform Controller Interface
*
* @since 3.0.0
* @deprecated 4.0 Use the default MVC library
*/
interface JController extends Serializable
{
/**
* Execute the controller.
*
* @return boolean True if controller finished execution, false if the controller did not
* finish execution. A controller might return false if some precondition for
* the controller to run has not been satisfied.
*
* @since 3.0.0
* @throws LogicException
* @throws RuntimeException
*/
public function execute();
/**
* Get the application object.
*
* @return AbstractApplication The application object.
*
* @since 3.0.0
*/
public function getApplication();
/**
* Get the input object.
*
* @return JInput The input object.
*
* @since 3.0.0
*/
public function getInput();
}
home/wuectly/www/administrator/components/com_privacy/controller.php 0000604 00000007453 15245622234 0022302 0 ustar 00 <?php
/**
* @package Joomla.Administrator
* @subpackage com_privacy
*
* @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Response\JsonResponse;
use Joomla\CMS\Session\Session;
/**
* Privacy Controller
*
* @since 3.9.0
*/
class PrivacyController extends JControllerLegacy
{
/**
* The default view.
*
* @var string
* @since 3.9.0
*/
protected $default_view = 'dashboard';
/**
* Method to display a view.
*
* @param boolean $cachable If true, the view output will be cached
* @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
*
* @return $this
*
* @since 3.9.0
*/
public function display($cachable = false, $urlparams = array())
{
JLoader::register('PrivacyHelper', JPATH_ADMINISTRATOR . '/components/com_privacy/helpers/privacy.php');
// Get the document object.
$document = JFactory::getDocument();
// Set the default view name and format from the Request.
$vName = $this->input->get('view', $this->default_view);
$vFormat = $document->getType();
$lName = $this->input->get('layout', 'default', 'string');
// Get and render the view.
if ($view = $this->getView($vName, $vFormat))
{
$model = $this->getModel($vName);
$view->setModel($model, true);
// For the dashboard view, we need to also push the requests model into the view
if ($vName === 'dashboard')
{
$requestsModel = $this->getModel('Requests');
$view->setModel($requestsModel, false);
}
if ($vName === 'request')
{
// For the default layout, we need to also push the action logs model into the view
if ($lName === 'default')
{
JLoader::register('ActionlogsHelper', JPATH_ADMINISTRATOR . '/components/com_actionlogs/helpers/actionlogs.php');
JModelLegacy::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_actionlogs/models', 'ActionlogsModel');
$logsModel = $this->getModel('Actionlogs', 'ActionlogsModel');
// Set default ordering for the context
$logsModel->setState('list.fullordering', 'a.log_date DESC');
// And push the model into the view
$view->setModel($logsModel, false);
}
// For the edit layout, if mail sending is disabled then redirect back to the list view as the form is unusable in this state
if ($lName === 'edit' && !JFactory::getConfig()->get('mailonline', 1))
{
$this->setRedirect(
JRoute::_('index.php?option=com_privacy&view=requests', false),
JText::_('COM_PRIVACY_WARNING_CANNOT_CREATE_REQUEST_WHEN_SENDMAIL_DISABLED'),
'warning'
);
return $this;
}
}
$view->setLayout($lName);
// Push document object into the view.
$view->document = $document;
// Load the submenu.
PrivacyHelper::addSubmenu($this->input->get('view', $this->default_view));
$view->display();
}
return $this;
}
/**
* Fetch and report number urgent privacy requests in JSON format, for AJAX requests
*
* @return void
*
* @since 3.9.0
*/
public function getNumberUrgentRequests()
{
$app = Factory::getApplication();
// Check for a valid token. If invalid, send a 403 with the error message.
if (!Session::checkToken('get'))
{
$app->setHeader('status', 403, true);
$app->sendHeaders();
echo new JsonResponse(new \Exception(Text::_('JINVALID_TOKEN'), 403));
$app->close();
}
/** @var PrivacyModelRequests $model */
$model = $this->getModel('requests');
$numberUrgentRequests = $model->getNumberUrgentRequests();
echo new JResponseJson(array('number_urgent_requests' => $numberUrgentRequests));
$app->close();
}
}
home/wuectly/www/components/com_banners/controller.php 0000604 00000001331 15245624453 0017367 0 ustar 00 <?php
/**
* @package Joomla.Site
* @subpackage com_banners
*
* @copyright (C) 2006 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Banners Controller
*
* @since 1.5
*/
class BannersController extends JControllerLegacy
{
/**
* Method when a banner is clicked on.
*
* @return void
*
* @since 1.5
*/
public function click()
{
$id = $this->input->getInt('id', 0);
if ($id)
{
$model = $this->getModel('Banner', 'BannersModel', array('ignore_request' => true));
$model->setState('banner.id', $id);
$model->click();
$this->setRedirect($model->getUrl());
}
}
}
home/wuectly/www/administrator/components/com_config/controller.php 0000604 00000002360 15245630172 0022062 0 ustar 00 <?php
/**
* @package Joomla.Administrator
* @subpackage com_config
*
* @copyright (C) 2006 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Config Component Controller
*
* @since 1.5
*/
class ConfigController extends JControllerLegacy
{
/**
* @var string The default view.
* @since 1.6
*/
protected $default_view = 'application';
/**
* Method to display the view.
*
* @param boolean $cachable If true, the view output will be cached
* @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
*
* @return ConfigController This object to support chaining.
*
* @since 1.5
*/
public function display($cachable = false, $urlparams = array())
{
// Set the default view name and format from the Request.
$vName = $this->input->get('view', 'application');
if (ucfirst($vName) == 'Application')
{
$controller = new ConfigControllerApplicationDisplay;
}
elseif (ucfirst($vName) == 'Component')
{
$controller = new ConfigControllerComponentDisplay;
}
return $controller->execute();
}
}
home/wuectly/www/administrator/components/com_actionlogs/controller.php 0000604 00000000572 15245630226 0022762 0 ustar 00 <?php
/**
* @package Joomla.Administrator
* @subpackage com_actionlogs
*
* @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Actionlogs Controller
*
* @since 3.9.0
*/
class ActionlogsController extends JControllerLegacy
{
}
home/wuectly/www/administrator/components/com_templates/controller.php 0000604 00000003700 15245630235 0022612 0 ustar 00 <?php
/**
* @package Joomla.Administrator
* @subpackage com_templates
*
* @copyright (C) 2006 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Templates manager master display controller.
*
* @since 1.6
*/
class TemplatesController extends JControllerLegacy
{
/**
* @var string The default view.
* @since 1.6
*/
protected $default_view = 'styles';
/**
* Method to display a view.
*
* @param boolean $cachable If true, the view output will be cached
* @param boolean $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
*
* @return TemplatesController This object to support chaining.
*
* @since 1.5
*/
public function display($cachable = false, $urlparams = false)
{
$view = $this->input->get('view', 'styles');
$layout = $this->input->get('layout', 'default');
$id = $this->input->getInt('id');
$document = JFactory::getDocument();
// For JSON requests
if ($document->getType() == 'json')
{
$view = new TemplatesViewStyle;
// Get/Create the model
if ($model = new TemplatesModelStyle)
{
$model->addTablePath(JPATH_ADMINISTRATOR . '/components/com_templates/tables');
// Push the model into the view (as default)
$view->setModel($model, true);
}
$view->document = $document;
return $view->display();
}
// Check for edit form.
if ($view == 'style' && $layout == 'edit' && !$this->checkEditId('com_templates.edit.style', $id))
{
// Somehow the person just went to the form - we don't allow that.
$this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id));
$this->setMessage($this->getError(), 'error');
$this->setRedirect(JRoute::_('index.php?option=com_templates&view=styles', false));
return false;
}
return parent::display();
}
}
home/wuectly/www/administrator/components/com_categories/controller.php 0000604 00000005453 15245630376 0022756 0 ustar 00 <?php
/**
* @package Joomla.Administrator
* @subpackage com_categories
*
* @copyright (C) 2008 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Categories view class for the Category package.
*
* @since 1.6
*/
class CategoriesController extends JControllerLegacy
{
/**
* The extension for which the categories apply.
*
* @var string
* @since 1.6
*/
protected $extension;
/**
* Constructor.
*
* @param array $config An optional associative array of configuration settings.
*
* @see JControllerLegacy
* @since 1.6
*/
public function __construct($config = array())
{
parent::__construct($config);
// Guess the JText message prefix. Defaults to the option.
if (empty($this->extension))
{
$this->extension = $this->input->get('extension', 'com_content');
}
}
/**
* Method to display a view.
*
* @param boolean $cachable If true, the view output will be cached
* @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
*
* @return CategoriesController This object to support chaining.
*
* @since 1.5
*/
public function display($cachable = false, $urlparams = array())
{
// Get the document object.
$document = JFactory::getDocument();
// Set the default view name and format from the Request.
$vName = $this->input->get('view', 'categories');
$vFormat = $document->getType();
$lName = $this->input->get('layout', 'default', 'string');
$id = $this->input->getInt('id');
// Check for edit form.
if ($vName == 'category' && $lName == 'edit' && !$this->checkEditId('com_categories.edit.category', $id))
{
// Somehow the person just went to the form - we don't allow that.
$this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id));
$this->setMessage($this->getError(), 'error');
$this->setRedirect(JRoute::_('index.php?option=com_categories&view=categories&extension=' . $this->extension, false));
return false;
}
// Get and render the view.
if ($view = $this->getView($vName, $vFormat))
{
// Get the model for the view.
$model = $this->getModel($vName, 'CategoriesModel', array('name' => $vName . '.' . substr($this->extension, 4)));
// Push the model into the view (as default).
$view->setModel($model, true);
$view->setLayout($lName);
// Push document object into the view.
$view->document = $document;
// Load the submenu.
JLoader::register('CategoriesHelper', JPATH_ADMINISTRATOR . '/components/com_categories/helpers/categories.php');
CategoriesHelper::addSubmenu($model->getState('filter.extension'));
$view->display();
}
return $this;
}
}
home/wuectly/www/components/com_content/controller.php 0000604 00000006404 15245632236 0017415 0 ustar 00 <?php
/**
* @package Joomla.Site
* @subpackage com_content
*
* @copyright (C) 2006 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
use Joomla\CMS\Component\ComponentHelper;
/**
* Content Component Controller
*
* @since 1.5
*/
class ContentController extends JControllerLegacy
{
/**
* Constructor.
*
* @param array $config 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 3.0.1
*/
public function __construct($config = array())
{
$this->input = JFactory::getApplication()->input;
// Article frontpage Editor pagebreak proxying:
if ($this->input->get('view') === 'article' && $this->input->get('layout') === 'pagebreak')
{
$config['base_path'] = JPATH_COMPONENT_ADMINISTRATOR;
}
// Article frontpage Editor article proxying:
elseif ($this->input->get('view') === 'articles' && $this->input->get('layout') === 'modal')
{
JHtml::_('stylesheet', 'system/adminlist.css', array('version' => 'auto', 'relative' => true));
$config['base_path'] = JPATH_COMPONENT_ADMINISTRATOR;
}
parent::__construct($config);
}
/**
* Method to display a view.
*
* @param boolean $cachable If true, the view output will be cached.
* @param boolean $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
*
* @return JController This object to support chaining.
*
* @since 1.5
*/
public function display($cachable = false, $urlparams = false)
{
$cachable = true;
/**
* Set the default view name and format from the Request.
* Note we are using a_id to avoid collisions with the router and the return page.
* Frontend is a bit messier than the backend.
*/
$id = $this->input->getInt('a_id');
$vName = $this->input->getCmd('view', 'categories');
$this->input->set('view', $vName);
$user = JFactory::getUser();
if ($user->get('id')
|| ($this->input->getMethod() === 'POST'
&& (($vName === 'category' && $this->input->get('layout') !== 'blog') || $vName === 'archive' )))
{
$cachable = false;
}
$safeurlparams = array(
'catid' => 'INT',
'id' => 'INT',
'cid' => 'ARRAY',
'year' => 'INT',
'month' => 'INT',
'limit' => 'UINT',
'limitstart' => 'UINT',
'showall' => 'INT',
'return' => 'BASE64',
'filter' => 'STRING',
'filter_order' => 'CMD',
'filter_order_Dir' => 'CMD',
'filter-search' => 'STRING',
'print' => 'BOOLEAN',
'lang' => 'CMD',
'Itemid' => 'INT');
// Check for edit form.
if ($vName === 'form' && !$this->checkEditId('com_content.edit.article', $id))
{
// Somehow the person just went to the form - we don't allow that.
return JError::raiseError(403, JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id));
}
if ($vName === 'article')
{
// Get/Create the model
if ($model = $this->getModel($vName))
{
if (ComponentHelper::getParams('com_content')->get('record_hits', 1) == 1)
{
$model->hit();
}
}
}
parent::display($cachable, $safeurlparams);
return $this;
}
}
home/wuectly/www/components/com_mailto/controller.php 0000604 00000007432 15245632244 0017231 0 ustar 00 <?php
/**
* @package Joomla.Site
* @subpackage com_mailto
*
* @copyright (C) 2006 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Mailer Component Controller.
*
* @since 1.5
*/
class MailtoController extends JControllerLegacy
{
/**
* Show the form so that the user can send the link to someone.
*
* @return void
*
* @since 1.5
*/
public function mailto()
{
$this->input->set('view', 'mailto');
$this->display();
}
/**
* Send the message and display a notice
*
* @return void
*
* @since 1.5
*/
public function send()
{
// Check for request forgeries
$this->checkToken();
$app = JFactory::getApplication();
$model = $this->getModel('mailto');
$data = $model->getData();
// Validate the posted data.
$form = $model->getForm();
if (!$form)
{
JError::raiseError(500, $model->getError());
return false;
}
if (!$model->validate($form, $data))
{
$errors = $model->getErrors();
foreach ($errors as $error)
{
$errorMessage = $error;
if ($error instanceof Exception)
{
$errorMessage = $error->getMessage();
}
$app->enqueueMessage($errorMessage, 'error');
}
return $this->mailto();
}
// An array of email headers we do not want to allow as input
$headers = array (
'Content-Type:',
'MIME-Version:',
'Content-Transfer-Encoding:',
'bcc:',
'cc:'
);
/*
* Here is the meat and potatoes of the header injection test. We
* iterate over the array of form input and check for header strings.
* If we find one, send an unauthorized header and die.
*/
foreach ($data as $key => $value)
{
foreach ($headers as $header)
{
if (is_string($value) && strpos($value, $header) !== false)
{
JError::raiseError(403, '');
}
}
}
/*
* Free up memory
*/
unset($headers, $fields);
$siteName = $app->get('sitename');
$link = MailtoHelper::validateHash($this->input->post->get('link', '', 'post'));
// Verify that this is a local link
if (!$link || !JUri::isInternal($link))
{
// Non-local url...
JError::raiseNotice(500, JText::_('COM_MAILTO_EMAIL_NOT_SENT'));
return $this->mailto();
}
$subject_default = JText::sprintf('COM_MAILTO_SENT_BY', $data['sender']);
$subject = $data['subject'] !== '' ? $data['subject'] : $subject_default;
// Check for a valid to address
$error = false;
if (!$data['emailto'] || !JMailHelper::isEmailAddress($data['emailto']))
{
$error = JText::sprintf('COM_MAILTO_EMAIL_INVALID', $data['emailto']);
JError::raiseWarning(0, $error);
}
// Check for a valid from address
if (!$data['emailfrom'] || !JMailHelper::isEmailAddress($data['emailfrom']))
{
$error = JText::sprintf('COM_MAILTO_EMAIL_INVALID', $data['emailfrom']);
JError::raiseWarning(0, $error);
}
if ($error)
{
return $this->mailto();
}
// Build the message to send
$msg = JText::_('COM_MAILTO_EMAIL_MSG');
$body = sprintf($msg, $siteName, $data['sender'], $data['emailfrom'], $link);
// Clean the email data
$subject = JMailHelper::cleanSubject($subject);
$body = JMailHelper::cleanBody($body);
// To send we need to use punycode.
$data['emailfrom'] = JStringPunycode::emailToPunycode($data['emailfrom']);
$data['emailfrom'] = JMailHelper::cleanAddress($data['emailfrom']);
$data['emailto'] = JStringPunycode::emailToPunycode($data['emailto']);
// Send the email
if (JFactory::getMailer()->sendMail($data['emailfrom'], $data['sender'], $data['emailto'], $subject, $body) !== true)
{
JError::raiseNotice(500, JText::_('COM_MAILTO_EMAIL_NOT_SENT'));
return $this->mailto();
}
$this->input->set('view', 'sent');
$this->display();
}
}
home/wuectly/www/components/com_fields/controller.php 0000604 00000002230 15245632246 0017203 0 ustar 00 <?php
/**
* @package Joomla.Site
* @subpackage com_fields
*
* @copyright (C) 2016 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Base controller class for Fields Component.
*
* @since 3.7.0
*/
class FieldsController extends JControllerLegacy
{
/**
* Constructor.
*
* @param array $config 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 3.7.0
*/
public function __construct($config = array())
{
$this->input = JFactory::getApplication()->input;
// Frontpage Editor Fields Button proxying:
if ($this->input->get('view') === 'fields' && $this->input->get('layout') === 'modal')
{
// Load the backend language file.
$lang = JFactory::getLanguage();
$lang->load('com_fields', JPATH_ADMINISTRATOR);
$config['base_path'] = JPATH_COMPONENT_ADMINISTRATOR;
}
parent::__construct($config);
}
}
home/wuectly/www/administrator/components/com_icagenda/controller.php 0000604 00000003353 15245632314 0022353 0 ustar 00 <?php
/**
*------------------------------------------------------------------------------
* iCagenda v3 by Jooml!C - Events Management Extension for Joomla! 2.5 / 3.x
*------------------------------------------------------------------------------
* @package com_icagenda
* @copyright Copyright (c)2012-2015 Cyril Rezé, Jooml!C - All rights reserved
*
* @license GNU General Public License version 3 or later; see LICENSE.txt
* @author Cyril Rezé (Lyr!C)
* @link http://www.joomlic.com
*
* @version 3.5.6 2015-06-23
* @since 1.0
*------------------------------------------------------------------------------
*/
// No direct access to this file
defined('_JEXEC') or die();
/**
* Controller class - iCagenda.
*/
class iCagendaController extends JControllerLegacy
{
/**
* Method to display a view.
*
* @param boolean $cachable If true, the view output will be cached
* @param array $urlparams An array of safe url parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
*
* @return JController This object to support chaining.
* @since 1.5
*/
public function display($cachable = false, $urlparams = false)
{
require_once JPATH_COMPONENT . '/helpers/icagenda.php';
// Set Input J3
$jinput = JFactory::getApplication()->input;
// Load the submenu.
if (version_compare(JVERSION, '3.0', 'lt'))
{
iCagendaHelper::addSubmenu(JRequest::getCmd('view', 'icagenda'));
$view = JRequest::getCmd('view', 'icagenda');
JRequest::setVar('view', $view);
}
else
{
iCagendaHelper::addSubmenu($jinput->get('view', 'icagenda'));
$view = $jinput->get('view', 'icagenda');
$jinput->set('view', $view);
}
parent::display();
return $this;
}
}
home/wuectly/www/administrator/components/com_menus/controller.php 0000604 00000004374 15245632677 0021767 0 ustar 00 <?php
/**
* @package Joomla.Administrator
* @subpackage com_menus
*
* @copyright (C) 2006 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Base controller class for Menu Manager.
*
* @since 1.6
*/
class MenusController extends JControllerLegacy
{
/**
* Method to display a view.
*
* @param boolean $cachable If true, the view output will be cached
* @param array|boolean $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
*
* @return JController This object to support chaining.
*
* @since 1.5
*/
public function display($cachable = false, $urlparams = false)
{
JLoader::register('MenusHelper', JPATH_ADMINISTRATOR . '/components/com_menus/helpers/menus.php');
// Check custom administrator menu modules
if (JModuleHelper::isAdminMultilang())
{
$languages = JLanguageHelper::getInstalledLanguages(1, true);
$langCodes = array();
foreach ($languages as $language)
{
if (isset($language->metadata['nativeName']))
{
$languageName = $language->metadata['nativeName'];
}
else
{
$languageName = $language->metadata['name'];
}
$langCodes[$language->metadata['tag']] = $languageName;
}
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select($db->qn('m.language'))
->from($db->qn('#__modules', 'm'))
->where($db->qn('m.module') . ' = ' . $db->quote('mod_menu'))
->where($db->qn('m.published') . ' = 1')
->where($db->qn('m.client_id') . ' = 1')
->group($db->qn('m.language'));
$mLanguages = $db->setQuery($query)->loadColumn();
// Check if we have a mod_menu module set to All languages or a mod_menu module for each admin language.
if (!in_array('*', $mLanguages) && count($langMissing = array_diff(array_keys($langCodes), $mLanguages)))
{
$app = JFactory::getApplication();
$langMissing = array_intersect_key($langCodes, array_flip($langMissing));
$app->enqueueMessage(JText::sprintf('JMENU_MULTILANG_WARNING_MISSING_MODULES', implode(', ', $langMissing)), 'warning');
}
}
return parent::display();
}
}
home/wuectly/www/administrator/components/com_plugins/controller.php 0000604 00000003111 15245660040 0022266 0 ustar 00 <?php
/**
* @package Joomla.Administrator
* @subpackage com_plugins
*
* @copyright (C) 2007 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Plugins master display controller.
*
* @since 1.5
*/
class PluginsController extends JControllerLegacy
{
/**
* Method to display a view.
*
* @param boolean $cachable If true, the view output will be cached
* @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
*
* @return JController This object to support chaining.
*
* @since 1.5
*/
public function display($cachable = false, $urlparams = false)
{
JLoader::register('PluginsHelper', JPATH_ADMINISTRATOR . '/components/com_plugins/helpers/plugins.php');
// Load the submenu.
PluginsHelper::addSubmenu($this->input->get('view', 'plugins'));
$view = $this->input->get('view', 'plugins');
$layout = $this->input->get('layout', 'default');
$id = $this->input->getInt('extension_id');
// Check for edit form.
if ($view == 'plugin' && $layout == 'edit' && !$this->checkEditId('com_plugins.edit.plugin', $id))
{
// Somehow the person just went to the form - we don't allow that.
$this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id));
$this->setMessage($this->getError(), 'error');
$this->setRedirect(JRoute::_('index.php?option=com_plugins&view=plugins', false));
return false;
}
parent::display();
}
}
home/wuectly/www/administrator/components/com_redirect/controller.php 0000604 00000003242 15245662515 0022424 0 ustar 00 <?php
/**
* @package Joomla.Administrator
* @subpackage com_redirect
*
* @copyright (C) 2009 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Redirect master display controller.
*
* @since 1.6
*/
class RedirectController extends JControllerLegacy
{
/**
* @var string The default view.
* @since 1.6
*/
protected $default_view = 'links';
/**
* Method to display a view.
*
* @param boolean $cachable If true, the view output will be cached.
* @param mixed $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
*
* @return JController This object to support chaining.
*
* @since 1.5
*/
public function display($cachable = false, $urlparams = false)
{
JLoader::register('RedirectHelper', JPATH_ADMINISTRATOR . '/components/com_redirect/helpers/redirect.php');
// Load the submenu.
RedirectHelper::addSubmenu($this->input->get('view', 'links'));
$view = $this->input->get('view', 'links');
$layout = $this->input->get('layout', 'default');
$id = $this->input->getInt('id');
// Check for edit form.
if ($view == 'link' && $layout == 'edit' && !$this->checkEditId('com_redirect.edit.link', $id))
{
// Somehow the person just went to the form - we don't allow that.
$this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id));
$this->setMessage($this->getError(), 'error');
$this->setRedirect(JRoute::_('index.php?option=com_redirect&view=links', false));
return false;
}
parent::display();
}
}
home/wuectly/www/administrator/components/com_admin/controller.php 0000604 00000002173 15245662734 0021720 0 ustar 00 <?php
/**
* @package Joomla.Administrator
* @subpackage com_admin
*
* @copyright (C) 2008 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Admin Controller
*
* @since 1.6
*/
class AdminController extends JControllerLegacy
{
/**
* View method
*
* @param boolean $cachable If true, the view output will be cached
* @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link \JFilterInput::clean()}.
*
* @return \JControllerLegacy A \JControllerLegacy object to support chaining.
*
* @since 3.9
*/
public function display($cachable = false, $urlparams = array())
{
$viewName = $this->input->get('view', $this->default_view);
$format = $this->input->get('format', 'html');
// Check CSRF token for sysinfo export views
if ($viewName === 'sysinfo' && ($format === 'text' || $format === 'json'))
{
// Check for request forgeries.
$this->checkToken('GET');
}
return parent::display($cachable, $urlparams);
}
}
home/wuectly/www/components/com_menus/controller.php 0000604 00000002124 15245663070 0017065 0 ustar 00 <?php
/**
* @package Joomla.Site
* @subpackage com_menus
*
* @copyright (C) 2016 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Menus manager master display controller.
*
* @since 3.7.0
*/
class MenusController extends JControllerLegacy
{
/**
* Constructor.
*
* @param array $config 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 3.7.0
*/
public function __construct($config = array())
{
$this->input = JFactory::getApplication()->input;
// Menus frontpage Editor Menu proxying:
if ($this->input->get('view') === 'items' && $this->input->get('layout') === 'modal')
{
JHtml::_('stylesheet', 'system/adminlist.css', array(), true);
$config['base_path'] = JPATH_COMPONENT_ADMINISTRATOR;
}
parent::__construct($config);
}
}
home/wuectly/www/administrator/components/com_xmap/controller.php 0000604 00000007227 15245667616 0021606 0 ustar 00 <?php
/**
* @version $Id$
* @copyright Copyright (C) 2007 - 2009 Joomla! Vargas. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
* @author Guillermo Vargas (guille@vargas.co.cr)
*/
// no direct access
defined('_JEXEC') or die;
jimport('joomla.application.component.controller');
/**
* Component Controller
*
* @package Xmap
* @subpackage com_xmap
*/
class XmapController extends JControllerLegacy
{
function __construct()
{
parent::__construct();
$this->registerTask('navigator-links', 'navigatorLinks');
}
/**
* Display the view
*/
public function display($cachable = false, $urlparams = false)
{
require_once JPATH_COMPONENT . '/helpers/xmap.php';
// Get the document object.
$document = JFactory::getDocument();
// Set the default view name and format from the Request.
$vName = JRequest::getWord('view', 'sitemaps');
$vFormat = $document->getType();
$lName = JRequest::getWord('layout', 'default');
// Get and render the view.
if ($view = $this->getView($vName, $vFormat)) {
// Get the model for the view.
$model = $this->getModel($vName);
// Push the model into the view (as default).
$view->setModel($model, true);
$view->setLayout($lName);
// Push document object into the view.
$view->assignRef('document', $document);
$view->display();
}
}
function navigator()
{
$db = JFactory::getDBO();
$document = JFactory::getDocument();
$app = JFactory::getApplication('administrator');
$id = JRequest::getInt('sitemap', 0);
$link = urldecode(JRequest::getVar('link', ''));
$name = JRequest::getCmd('e_name', '');
if (!$id) {
$id = $this->getDefaultSitemapId();
}
if (!$id) {
JError::raiseWarning(500, JText::_('Xmap_Not_Sitemap_Selected'));
return false;
}
$app->setUserState('com_xmap.edit.sitemap.id', $id);
$view = $this->getView('sitemap', $document->getType());
$model = $this->getModel('Sitemap');
$view->setLayout('navigator');
$view->setModel($model, true);
// Push document object into the view.
$view->assignRef('document', $document);
$view->navigator();
}
function navigatorLinks()
{
$db = JFactory::getDBO();
$document = JFactory::getDocument();
$app = JFactory::getApplication('administrator');
$id = JRequest::getInt('sitemap', 0);
$link = urldecode(JRequest::getVar('link', ''));
$name = JRequest::getCmd('e_name', '');
if (!$id) {
$id = $this->getDefaultSitemapId();
}
if (!$id) {
JError::raiseWarning(500, JText::_('Xmap_Not_Sitemap_Selected'));
return false;
}
$app->setUserState('com_xmap.edit.sitemap.id', $id);
$view = $this->getView('sitemap', $document->getType());
$model = $this->getModel('Sitemap');
$view->setLayout('navigator');
$view->setModel($model, true);
// Push document object into the view.
$view->assignRef('document', $document);
$view->navigatorLinks();
}
private function getDefaultSitemapId()
{
$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query->select('id');
$query->from($db->quoteName('#__xmap_sitemap'));
$query->where('is_default=1');
$db->setQuery($query);
return $db->loadResult();
}
} home/wuectly/www/administrator/components/com_checkin/controller.php 0000604 00000004116 15245670154 0022226 0 ustar 00 <?php
/**
* @package Joomla.Administrator
* @subpackage com_checkin
*
* @copyright (C) 2008 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Checkin Controller
*
* @since 1.6
*/
class CheckinController extends JControllerLegacy
{
/**
* Method to display a view.
*
* @param boolean $cachable If true, the view output will be cached
* @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
*
* @return CheckinController A JControllerLegacy object to support chaining.
*/
public function display($cachable = false, $urlparams = array())
{
// Load the submenu.
$this->addSubmenu($this->input->getWord('option', 'com_checkin'));
return parent::display();
}
/**
* Check in a list of items.
*
* @return void
*/
public function checkin()
{
// Check for request forgeries
$this->checkToken();
$ids = (array) $this->input->get('cid', array(), 'string');
if (empty($ids))
{
JError::raiseWarning(500, JText::_('JLIB_HTML_PLEASE_MAKE_A_SELECTION_FROM_THE_LIST'));
}
else
{
// Get the model.
/** @var CheckinModelCheckin $model */
$model = $this->getModel();
// Checked in the items.
$this->setMessage(JText::plural('COM_CHECKIN_N_ITEMS_CHECKED_IN', $model->checkin($ids)));
}
$this->setRedirect('index.php?option=com_checkin');
}
/**
* Configure the Linkbar.
*
* @param string $vName The name of the active view.
*
* @return void
*
* @since 1.6
*/
protected function addSubmenu($vName)
{
JHtmlSidebar::addEntry(
JText::_('JGLOBAL_SUBMENU_CHECKIN'),
'index.php?option=com_checkin',
$vName == 'com_checkin'
);
JHtmlSidebar::addEntry(
JText::_('JGLOBAL_SUBMENU_CLEAR_CACHE'),
'index.php?option=com_cache',
$vName == 'cache'
);
JHtmlSidebar::addEntry(
JText::_('JGLOBAL_SUBMENU_PURGE_EXPIRED_CACHE'),
'index.php?option=com_cache&view=purge',
$vName == 'purge'
);
}
}
home/wuectly/www/administrator/components/com_languages/controller.php 0000604 00000003147 15245700511 0022562 0 ustar 00 <?php
/**
* @package Joomla.Administrator
* @subpackage com_languages
*
* @copyright (C) 2008 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Languages Controller.
*
* @since 1.5
*/
class LanguagesController extends JControllerLegacy
{
/**
* @var string The default view.
* @since 1.6
*/
protected $default_view = 'installed';
/**
* Method to display a view.
*
* @param boolean $cachable If true, the view output will be cached.
* @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
*
* @return LanguagesController This object to support chaining.
*
* @since 1.5
*/
public function display($cachable = false, $urlparams = false)
{
JLoader::register('LanguagesHelper', JPATH_ADMINISTRATOR . '/components/com_languages/helpers/languages.php');
$view = $this->input->get('view', 'languages');
$layout = $this->input->get('layout', 'default');
$id = $this->input->getInt('id');
// Check for edit form.
if ($view == 'language' && $layout == 'edit' && !$this->checkEditId('com_languages.edit.language', $id))
{
// Somehow the person just went to the form - we don't allow that.
$this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id));
$this->setMessage($this->getError(), 'error');
$this->setRedirect(JRoute::_('index.php?option=com_languages&view=languages', false));
return false;
}
return parent::display();
}
}
home/wuectly/www/administrator/components/com_mailjet/controller.php 0000604 00000020737 15245700512 0022246 0 ustar 00 <?php
/**
* @author Mailjet SAS
*
* @copyright Copyright (C) 2014 Mailjet SAS.
* @license GNU General Public License version 2 or later; see LICENSE
*/
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
ini_set('display_errors', 0);
// import Joomla controller library
jimport('joomla.application.component.controller');
if (!function_exists('class_alias')) { // For php older then 5.3
function class_alias($orig, $alias) {
eval('abstract class ' . $alias . ' extends ' . $orig . ' {}');
}
}
if (!class_exists('JControllerLegacy')) {
class_alias('JController','JControllerLegacy');
}
/**
* General Controller of HelloWorld component
*/
class MailjetController extends JControllerLegacy
{
/**
* display task
*
* @return void
*/
function display($cachable = false, $urlparams = false)
{
require_once JPATH_COMPONENT.'/helpers/mailjet.php';
// set default view if not set
JRequest::setVar('view', JRequest::getCmd('view', 'mailjet'));
$view = $this->input->get('view', 'messages');
$layout = $this->input->get('layout', 'default');
$id = $this->input->getInt('id');
MailjetHelper::addSubmenu($this->input->get('view', 'mailjet'));
// call parent behavior
parent::display($cachable);
}
function save ()
{
JRequest::checkToken () or jexit ('Invalid Token');
$error = FALSE;
$mailjetConfig = sPrintF ('%s/components/%s/config.php', JPATH_ADMINISTRATOR, 'com_mailjet');
$fileConfig = JPATH_ROOT.'/configuration.php';
require_once ($mailjetConfig);
$conf = new JMailjetConfig ();
$host = $conf->host;
$prev = new JConfig();
$prev = JArrayHelper::fromObject($prev);
$fields ['bak_mailer'] = $prev ['mailer'];
$fields ['bak_smtpauth'] = $prev ['smtpauth'];
$fields ['bak_smtpuser'] = $prev ['smtpuser'];
$fields ['bak_smtppass'] = $prev ['smtppass'];
$fields ['bak_smtphost'] = $prev ['smtphost'];
$fields ['bak_smtpsecure'] = $prev ['smtpsecure'];
$fields ['bak_smtpport'] = $prev ['smtpport'];
$data = JRequest::get ('post');
$fields ['enable'] = isSet ($data ['enable']);
$fields ['test'] = isSet ($data ['test']);
$fields ['test_address'] = $data ['test_address'];
$fields ['username'] = $data ['username'];
$fields ['password'] = $data ['password'];
$fields ['host'] = $host;
$configs = array (array ('ssl://', 465),
array ('tls://', 587),
array ('', 587),
array ('', 588),
array ('tls://', 25),
array ('', 25),
array ('', 80));
$connected = FALSE;
for ($i = 0; $i < count ($configs); ++$i)
{
$soc = @ fSockOpen ($configs [$i] [0].$host, $configs [$i] [1], $errno, $errstr, 5);
if ($soc)
{
fClose ($soc);
$connected = TRUE;
break;
}
}
if ($connected)
{
if ('ssl://' == $configs [$i] [0])
{
$fields ['secure'] = 'ssl';
}
elseif ('tls://' == $configs [$i] [0])
{
$fields ['secure'] = 'tls';
}
else
{
$fields ['secure'] = 'none';
}
$fields ['port'] = $configs [$i] [1];
}
else
{
JError::raiseWarning (0, sPrintF (JText::_('COM_MAILJET_CONTACT_SUPPORT_ERROR'), $errno, $errstr));
}
jimport ('joomla.mail.helper');
if ($fields ['test'] && (empty ($fields ['test_address']) || ! JMailHelper::isEmailAddress ($fields ['test_address'])))
{
JError::raiseWarning (0, JText::_('COM_MAILJET_RECIPIENT_INVALID', $fields ['test_address']));
$error = TRUE;
}
if (empty ($fields ['username']) || empty ($fields ['password']))
{
JError::raiseWarning (0, JText::_('COM_MAILJET_SETTINGS_MANDATORY'));
$error = TRUE;
}
if (! $error)
{
jimport ('joomla.filesystem.path');
jimport ('joomla.filesystem.file');
$config = new JRegistry ('config');
$config->loadArray ($fields);
$configString = $config->toString ('PHP', array ('class' => 'JMailjetConfig', 'closingtag' => false));
if (! JFile::write ($mailjetConfig, $configString))
{
JError::raiseWarning (0, JText::_ ('COM_MAILJET_CONFIG_FILE_UNWRITABLE'));
}
$mailjetData = sPrintF ('%s/components/%s/lib/db/data', JPATH_ADMINISTRATOR, 'com_mailjet');
$JSONString = json_encode(array(
'apiKey' => $fields['username'],
'apiSecret' => $fields['password'],
'token' => null,
'test_address' => $fields['test_address'],
'enable' => $fields['enable'],
));
if (! JFile::write ($mailjetData, $JSONString))
{
JError::raiseWarning (0, JText::_ ('Unable to write data file for Mailjet\'s settings.'));
}
if ($fields ['enable'])
{
$prev ['mailer'] = 'smtp';
$prev ['smtpauth'] = '1';
$prev ['smtpuser'] = $fields ['username'];
$prev ['smtppass'] = $fields ['password'];
$prev ['smtphost'] = $fields ['host'];
$prev ['smtpsecure'] = $fields ['secure'];
$prev ['smtpport'] = $fields ['port'];
}
else
{
$prev ['mailer'] = $fields ['bak_mailer'];
$prev ['smtpauth'] = $fields ['bak_smtpauth'];
$prev ['smtpuser'] = $fields ['bak_smtpuser'];
$prev ['smtppass'] = $fields ['bak_smtppass'];
$prev ['smtphost'] = $fields ['bak_smtphost'];
$prev ['smtpsecure'] = $fields ['bak_smtpsecure'];
$prev ['smtpport'] = $fields ['bak_smtpport'];
}
$config = new JRegistry ('config');
$config->loadArray ($prev);
if (!JPath::setPermissions ($fileConfig, '0644'))
{
JError::raiseNotice ('SOME_ERROR_CODE', JText::_ ('COM_CONFIG_ERROR_CONFIGURATION_PHP_NOTWRITABLE'));
}
$configString = $config->toString('PHP', array ('class' => 'JConfig', 'closingtag' => false));
if (!JFile::write($fileConfig, $configString))
{
JError::raiseWarning (0, JText::_ ('COM_CONFIG_ERROR_WRITE_FAILED'));
}
if (!JPath::setPermissions($fileConfig, '0444'))
{
JError::raiseNotice ('SOME_ERROR_CODE', JText::_ ('COM_CONFIG_ERROR_CONFIGURATION_PHP_NOTUNWRITABLE'));
}
// Extablish API connection because we will need it to check if the API Key and Secrect Key are correct
require_once(dirname(__FILE__).'/lib/lib/mailjet-api-strategy.php');
$api = new Mailjet_Api($fields['username'], $fields['password']);
if($api->apiUrl === null){
JError::raiseWarning (0, JText::_ ('COM_MAILJET_API_KEY_ERROR'));
}
if ($fields ['test'])
{
$jversion = new JVersion();
if (version_compare($jversion->getShortVersion(), '2.5.6', 'lt')) {
if (JUtility::sendMail ($prev ['mailfrom'], $prev ['fromname'], $fields ['test_address'], JText::_ ('Your test mail from Mailjet and Joomla'), JText::_ ('COM_MAILJET_CONFIG_OK')) !== TRUE)
{
JError::raiseNotice (500, JText:: _ ('COM_MAILJET_TEST_EMAIL_NOT_SENT'));
}
} else {
$mail = JMail::getInstance();
$mail->useSMTP(true, $prev ['smtphost'], $prev ['smtpuser'], $prev ['smtppass'], 'tls', 587);
if ($mail->sendMail ($prev ['mailfrom'], $prev ['fromname'], $fields ['test_address'], JText::_ ('Your test mail from Mailjet and Joomla'), JText::_ ('COM_MAILJET_CONFIG_OK')) !== TRUE)
{
JError::raiseNotice (500, JText:: _ ('COM_MAILJET_TEST_EMAIL_NOT_SENT'));
}
}
}
JFactory::getApplication()->enqueueMessage(JText:: _ ('COM_MAILJET_SETTINGS_SAVED'));
}
$this->display();
}
}
home/wuectly/www/administrator/components/com_installer/controller.php 0000604 00000003262 15245700574 0022620 0 ustar 00 <?php
/**
* @package Joomla.Administrator
* @subpackage com_installer
*
* @copyright (C) 2006 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Installer Controller
*
* @since 1.5
*/
class InstallerController extends JControllerLegacy
{
/**
* Method to display a view.
*
* @param boolean $cachable If true, the view output will be cached
* @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
*
* @return JController This object to support chaining.
*
* @since 1.5
*/
public function display($cachable = false, $urlparams = false)
{
JLoader::register('InstallerHelper', JPATH_ADMINISTRATOR . '/components/com_installer/helpers/installer.php');
// Get the document object.
$document = JFactory::getDocument();
// Set the default view name and format from the Request.
$vName = $this->input->get('view', 'install');
$vFormat = $document->getType();
$lName = $this->input->get('layout', 'default', 'string');
// Get and render the view.
if ($view = $this->getView($vName, $vFormat))
{
$ftp = JClientHelper::setCredentialsFromRequest('ftp');
$view->ftp = &$ftp;
// Get the model for the view.
$model = $this->getModel($vName);
// Push the model into the view (as default).
$view->setModel($model, true);
$view->setLayout($lName);
// Push document object into the view.
$view->document = $document;
// Load the submenu.
InstallerHelper::addSubmenu($vName);
$view->display();
}
return $this;
}
}
home/wuectly/www/administrator/components/com_cpanel/controller.php 0000604 00000000554 15245703405 0022062 0 ustar 00 <?php
/**
* @package Joomla.Administrator
* @subpackage com_cpanel
*
* @copyright (C) 2008 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Cpanel Controller
*
* @since 1.5
*/
class CpanelController extends JControllerLegacy
{
}
home/wuectly/www/components/com_newsfeeds/controller.php 0000604 00000002471 15245721221 0017717 0 ustar 00 <?php
/**
* @package Joomla.Site
* @subpackage com_newsfeeds
*
* @copyright (C) 2006 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Newsfeeds Component Controller
*
* @since 1.5
*/
class NewsfeedsController extends JControllerLegacy
{
/**
* Method to show a newsfeeds view
*
* @param boolean $cachable If true, the view output will be cached
* @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
*
* @return JControllerLegacy This object to support chaining.
*
* @since 1.5
*/
public function display($cachable = false, $urlparams = false)
{
$cachable = true;
// Set the default view name and format from the Request.
$vName = $this->input->get('view', 'categories');
$this->input->set('view', $vName);
$user = JFactory::getUser();
if ($user->get('id') || ($this->input->getMethod() === 'POST' && $vName === 'category'))
{
$cachable = false;
}
$safeurlparams = array('id' => 'INT', 'limit' => 'UINT', 'limitstart' => 'UINT',
'filter_order' => 'CMD', 'filter_order_Dir' => 'CMD', 'lang' => 'CMD');
parent::display($cachable, $safeurlparams);
}
}
home/wuectly/www/administrator/components/com_jce/controller.php 0000604 00000010321 15245721550 0021353 0 ustar 00 <?php
/**
* @copyright Copyright (c) 2009-2024 Ryan Demmer. All rights reserved
* @license GNU/GPL 3 - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* JCE is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses
*/
// no direct access
\defined('_JEXEC') or die;
use Joomla\CMS\MVC\Controller\BaseController;
use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Uri\Uri;
/**
* JCE Component Controller.
*
* @since 1.5
*/
class JceController extends BaseController
{
/**
* @var string The extension for which the categories apply
*
* @since 1.6
*/
protected $extension;
/**
* Constructor.
*
* @param array $config An optional associative array of configuration settings
*
* @see JController
* @since 1.5
*/
public function __construct($config = array())
{
parent::__construct($config);
// Guess the JText message prefix. Defaults to the option.
if (empty($this->extension)) {
$this->extension = $this->input->get('extension', 'com_jce');
}
}
/**
* Method to display a view.
*
* @param bool $cachable If true, the view output will be cached
* @param array $urlparams An array of safe url parameters and their variable types, for valid values see {@link JFilterInput::clean()}
*
* @return JController This object to support chaining
*
* @since 1.5
*/
public function display($cachable = false, $urlparams = false)
{
// Get the document object.
$document = Factory::getDocument();
$app = Factory::getApplication();
$user = Factory::getUser();
Factory::getLanguage()->load('com_jce', JPATH_ADMINISTRATOR);
// Set the default view name and format from the Request.
$vName = $app->input->get('view', 'cpanel');
$vFormat = $document->getType();
$lName = $app->input->get('layout', 'default');
// legacy front-end popup view
if ($vName === "popup") {
// add a view path
$this->addViewPath(JPATH_SITE . '/components/com_jce/views');
$view = $this->getView($vName, $vFormat);
if ($view) {
$view->display();
}
return $this;
}
$adminViews = array('config', 'profiles', 'profile', 'mediabox');
if (in_array($vName, $adminViews) && !$user->authorise('core.manage', 'com_jce')) {
throw new Exception(Text::_('JERROR_ALERTNOAUTHOR'), 403);
}
// create view
$view = $this->getView($vName, $vFormat);
// Get and render the view.
if ($view) {
if ($vName != "cpanel") {
// use "profiles" for validating "profile" view
if ($vName == "profile") {
$vName = "profiles";
}
if (!$user->authorise('jce.' . $vName, 'com_jce')) {
throw new Exception(Text::_('JERROR_ALERTNOAUTHOR'), 403);
}
}
// reset view name
$vName = $view->getName();
// Get the model for the view.
$model = $this->getModel($vName, 'JceModel', array('name' => $vName));
// Push the model into the view (as default).
$view->setModel($model, true);
$view->setLayout($lName);
// Push document object into the view.
$view->document = $document;
$document->addStyleSheet(Uri::root(true) . '/media/com_jce/admin/css/global.min.css?' . md5(WF_VERSION));
// only for Joomla 3.x
if (version_compare(JVERSION, '4', 'lt')) {
require_once __DIR__ . '/includes/classmap.php';
JceHelperAdmin::addSubmenu($vName);
$document->addStyleSheet(Uri::root(true) . '/media/com_jce/admin/css/compat.min.css?' . md5(WF_VERSION));
}
$view->display();
}
return $this;
}
}
home/wuectly/www/administrator/components/com_users/controller.php 0000604 00000006175 15245723361 0021771 0 ustar 00 <?php
/**
* @package Joomla.Administrator
* @subpackage com_users
*
* @copyright (C) 2005 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Users master display controller.
*
* @since 1.6
*/
class UsersController extends JControllerLegacy
{
/**
* Checks whether a user can see this view.
*
* @param string $view The view name.
*
* @return boolean
*
* @since 1.6
*/
protected function canView($view)
{
$canDo = JHelperContent::getActions('com_users');
switch ($view)
{
// Special permissions.
case 'groups':
case 'group':
case 'levels':
case 'level':
return $canDo->get('core.admin');
break;
// Default permissions.
default:
return true;
}
}
/**
* Method to display a view.
*
* @param boolean $cachable If true, the view output will be cached
* @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
*
* @return JController This object to support chaining.
*
* @since 1.5
*/
public function display($cachable = false, $urlparams = false)
{
$view = $this->input->get('view', 'users');
$layout = $this->input->get('layout', 'default');
$id = $this->input->getInt('id');
if (!$this->canView($view))
{
throw new JAccessExceptionNotallowed(JText::_('JERROR_ALERTNOAUTHOR'), 403);
}
// Check for edit form.
if ($view == 'user' && $layout == 'edit' && !$this->checkEditId('com_users.edit.user', $id))
{
// Somehow the person just went to the form - we don't allow that.
$this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id));
$this->setMessage($this->getError(), 'error');
$this->setRedirect(JRoute::_('index.php?option=com_users&view=users', false));
return false;
}
elseif ($view == 'group' && $layout == 'edit' && !$this->checkEditId('com_users.edit.group', $id))
{
// Somehow the person just went to the form - we don't allow that.
$this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id));
$this->setMessage($this->getError(), 'error');
$this->setRedirect(JRoute::_('index.php?option=com_users&view=groups', false));
return false;
}
elseif ($view == 'level' && $layout == 'edit' && !$this->checkEditId('com_users.edit.level', $id))
{
// Somehow the person just went to the form - we don't allow that.
$this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id));
$this->setMessage($this->getError(), 'error');
$this->setRedirect(JRoute::_('index.php?option=com_users&view=levels', false));
return false;
}
elseif ($view == 'note' && $layout == 'edit' && !$this->checkEditId('com_users.edit.note', $id))
{
// Somehow the person just went to the form - we don't allow that.
$this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id));
$this->setMessage($this->getError(), 'error');
$this->setRedirect(JRoute::_('index.php?option=com_users&view=notes', false));
return false;
}
return parent::display();
}
}