| Current Path : /home/cbequiperp/www/administrator/components/com_flexicontent/controllers/ |
| Current File : /home/cbequiperp/www/administrator/components/com_flexicontent/controllers/types.php |
<?php
/**
* @package FLEXIcontent
* @version 3.3
*
* @author Emmanuel Danan, Georgios Papadakis, Yannick Berges, others, see contributor page
* @link https://flexicontent.org
* @copyright Copyright © 2018, FLEXIcontent team, All Rights Reserved
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
*/
defined('_JEXEC') or die;
use Joomla\String\StringHelper;
use Joomla\Utilities\ArrayHelper;
JLoader::register('FlexicontentControllerBaseAdmin', JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_flexicontent' . DS . 'controllers' . DS . 'base' . DS . 'baseadmin.php');
// Manually import models in case used by frontend, then models will not be autoloaded correctly via getModel('name')
require_once JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_flexicontent' . DS . 'models' . DS . 'type.php';
require_once JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_flexicontent' . DS . 'models' . DS . 'types.php';
/**
* FLEXIcontent Types Controller
*
* NOTE: -Only- if this controller is needed by frontend URLs, then create a derived controller in frontend 'controllers' folder
*
* @since 3.3
*/
class FlexicontentControllerTypes extends FlexicontentControllerBaseAdmin
{
var $records_dbtbl = 'flexicontent_types';
var $records_jtable = 'flexicontent_types';
var $record_name = 'type';
var $record_name_pl = 'types';
var $_NAME = 'TYPE';
var $record_alias = 'alias';
var $runMode = 'standalone';
var $exitHttpHead = null;
var $exitMessages = array();
var $exitLogTexts = array();
var $exitSuccess = true;
/**
* Constructor
*
* @param array $config associative array of configuration settings.
*
* @since 3.3
*/
public function __construct($config = array())
{
parent::__construct($config);
// Register task aliases
$this->registerTask('add', 'edit');
$this->registerTask('apply', 'save');
$this->registerTask('apply_ajax', 'save');
$this->registerTask('save2new', 'save');
$this->registerTask('save2copy', 'save');
$this->registerTask('exportxml', 'export');
$this->registerTask('exportsql', 'export');
$this->registerTask('exportcsv', 'export');
// Can manage ACL
$this->canManage = FlexicontentHelperPerm::getPerm()->CanTypes;
// Error messages
$this->err_locked_recs_changestate = 'FLEXI_YOU_CANNOT_CHANGE_STATE_OF_THIS_TYPE_THERE_ARE_STILL_ITEMS_ASSOCIATED';
$this->err_locked_recs_delete = 'FLEXI_YOU_CANNOT_REMOVE_THIS_TYPE_THERE_ARE_STILL_ITEMS_ASSOCIATED';
// Warning messages
$this->warn_locked_recs_skipped = 'FLEXI_SKIPPED_N_ROWS_WITH_ASSOCIATIONS';
$this->warn_noauth_recs_skipped = 'FLEXI_SKIPPED_N_ROWS_UNAUTHORISED';
// Messages about related data
$this->msg_relations_deleted = 'FLEXI_ASSIGNMENTS_DELETED';
}
/**
* Logic to save a record
*
* @return void
*
* @since 3.3
*/
public function save()
{
parent::save();
}
/**
* Check in a record
*
* @since 3.3
*/
public function checkin()
{
parent::checkin();
}
/**
* Cancel the edit, check in the record and return to the records manager
*
* @return bool
*
* @since 3.3
*/
public function cancel()
{
return parent::cancel();
}
/**
* Logic to publish records
*
* @return void
*
* @since 3.3
*/
public function publish()
{
parent::publish();
}
/**
* Logic to unpublish records
*
* @return void
*
* @since 3.3
*/
public function unpublish()
{
parent::unpublish();
}
/**
* Logic to delete records
*
* @return void
*
* @since 3.3
*/
public function remove()
{
parent::remove();
}
/**
* Logic to create the view for record editing
*
* @return void
*
* @since 3.3
*/
public function edit()
{
parent::edit();
}
/**
* Logic to set the access level of the records
*
* @return void
*
* @since 3.3
*/
public function access()
{
parent::access();
}
/**
* Method for clearing cache of data depending on records type
*
* @return void
*
* @since 3.2.0
*/
protected function _cleanCache()
{
$this->input->get('task', '', 'cmd') !== __FUNCTION__ or die(__FUNCTION__ . ' : direct call not allowed');
parent::_cleanCache();
$cache_site = FLEXIUtilities::getCache($group = '', $client = 0);
$cache_site->clean('com_flexicontent_items');
$cache_site->clean('com_flexicontent_filters');
$cache_admin = FLEXIUtilities::getCache($group = '', $client = 1);
$cache_admin->clean('com_flexicontent_items');
$cache_admin->clean('com_flexicontent_filters');
// Also clean this as it contains Joomla frontend view cache of the component)
$cache_site->clean('com_flexicontent');
}
/**
* Method for extra form validation after JForm validation is executed
*
* @param array $validated_data The already jform-validated data of the record
* @param object $model The Model object of current controller instance
* @param array $data The original posted data of the record
*
* @return boolean true on success, false on failure
*
* @since 3.3
*/
protected function _afterModelValidation(& $validated_data, & $data, $model)
{
$this->input->get('task', '', 'cmd') !== __FUNCTION__ or die(__FUNCTION__ . ' : direct call not allowed');
if (!parent::_afterModelValidation($validated_data, $data, $model))
{
return false;
}
return true;
}
/**
* Method for doing some record type specific work before calling model store
*
* @return boolean true on success, false on failure
*
* @since 3.3
*/
protected function _beforeModelStore(& $validated_data, & $data, $model)
{
$this->input->get('task', '', 'cmd') !== __FUNCTION__ or die(__FUNCTION__ . ' : direct call not allowed');
return true;
}
/**
* Logic to copy the records
*
* @return void
*
* @since 3.3
*/
public function copy()
{
// Check for request forgeries
JSession::checkToken('request') or die(JText::_('JINVALID_TOKEN'));
// Initialize variables
$app = JFactory::getApplication();
$user = JFactory::getUser();
$task = $this->input->get('task', 'copy', 'cmd');
$option = $this->input->get('option', '', 'cmd');
// Get model
$model = $this->getModel($this->record_name_pl);
// Get and santize records ids
$cid = $this->input->get('cid', array(), 'array');
$cid = ArrayHelper::toInteger($cid);
// Check at least one item was selected
if (!count($cid))
{
$app->enqueueMessage(JText::_('FLEXI_SELECT_ITEMS'), 'error');
$app->setHeader('status', 500, true);
$this->setRedirect($this->returnURL);
return;
}
// Calculate access
$is_authorised = $this->canManage;
// Check access
if (!$is_authorised)
{
$app->enqueueMessage(JText::_('FLEXI_ALERTNOTAUTH_TASK'), 'error');
$app->setHeader('status', 403, true);
$this->setRedirect($this->returnURL);
return;
}
if ($model->copy($cid, $copyRelations = true) === false)
{
$msg = JText::_('FLEXI_TYPES_COPY_FAILED') . ' : ' . $model->getError();
throw new Exception($msg, 500);
}
$msg = JText::_('FLEXI_TYPES_COPY_SUCCESS');
// Clear dependent cache data
$this->_cleanCache();
$this->setRedirect($this->returnURL, $msg);
}
/**
* START OF CONTROLLER SPECIFIC METHODS
*/
/**
* Logic to set property defining how joomla native article view is handled
*
* @return void
*
* @since 3.3
*/
function toggle_jview()
{
// Check for request forgeries
JSession::checkToken('request') or die(JText::_('JINVALID_TOKEN'));
$app = JFactory::getApplication();
$user = JFactory::getUser();
// Get model (NOTE: For this task we will use singular model)
$model = $this->getModel($this->record_name);
// Get and santize records ids
$cid = $this->input->get('cid', array(), 'array');
$cid = ArrayHelper::toInteger($cid);
// Check at least one item was selected
if (!count($cid))
{
$app->enqueueMessage(JText::_('FLEXI_SELECT_ITEMS'), 'error');
$app->setHeader('status', 500, true);
$this->setRedirect($this->returnURL);
return;
}
// Calculate access
$is_authorised = $this->canManage;
// Check access
if (!$is_authorised)
{
$app->enqueueMessage(JText::_('FLEXI_ALERTNOTAUTH_TASK'), 'error');
$app->setHeader('status', 403, true);
$this->setRedirect($this->returnURL);
return;
}
// Get new value(s) for 'allow_jview'
$allow_jview_arr = $this->input->get('allow_jview', array(0), 'array');
$toggle_count = 0;
foreach ($cid as $id)
{
if (!$id)
{
continue;
}
// Attempt to modify attributes
if (!$model->setAttributeValues($id, array('allow_jview' => $allow_jview_arr[$id]), 'attribs'))
{
$app->enqueueMessage($model->getError(), 'error');
$app->setHeader('status', 500, true);
$this->setRedirect($this->returnURL);
return;
}
$toggle_count++;
}
$msg = $toggle_count ? 'Toggle view method for ' . $toggle_count . ' types' : '';
$this->setRedirect($this->returnURL, $msg);
}
}