Files
2024-12-17 17:34:10 +01:00

2138 lines
82 KiB
PHP

<?php
/**
* @version 6.2.6 tabulizer $
* @package tabulizer
* @copyright Copyright © 2011 - All rights reserved.
* @license GNU/GPL
* @author Dimitrios Mourloukos
* @author mail info@alterora.gr
* @website www.tabulizer.com
*
*/
// no direct access
defined('_JEXEC') or die('Restricted access');
jimport('joomla.application.component.controller');
class tabulizerController extends JControllerLegacy
{
/**
* Custom Constructor
*/
function __construct() {
parent::__construct();
}
function display($cachable = false, $urlparams = false) {
$this->viewRulesetArchives();
}
//=============================================================================================
// DIALOG
//=============================================================================================
function dialog() {
TabulizerPath::requireLib('tabdialog','dialog');
}
function convert() {
TabulizerPath::requireLib('convert','dialog');
}
function dsdata() {
TabulizerPath::requireLib('dsdata','dialog');
}
function extract_table_data() {
TabulizerPath::requireLib('extract_table_data','dialog');
}
function extract_excel_data() {
TabulizerPath::requireLib('extract_excel_data','dialog');
}
function upload_excel_file() {
TabulizerPath::requireLib('upload_excel_file','dialog');
}
function extract_csv_data() {
TabulizerPath::requireLib('extract_csv_data','dialog');
}
function upload_csv_file() {
TabulizerPath::requireLib('upload_csv_file','dialog');
}
function extract_grid_data() {
TabulizerPath::requireLib('extract_grid_data','dialog');
}
function save_grid_data() {
TabulizerPath::requireLib('save_grid_data','dialog');
}
function grab_table_data() {
TabulizerPath::requireLib('grab_table_data','dialog');
}
function dsselect() {
TabulizerPath::requireLib('dsselect','dialog');
}
function exportdata() {
TabulizerPath::requireLib('exportdata','dialog');
}
function outputDataSource() {
TabulizerPath::requireLib('datasource','output');
}
//=============================================================================================
// RULESET ARCHIVES
//=============================================================================================
function viewRulesetArchives() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$model = $this->getModel('rulesetarchives');
$view = $this->getView('rulesetarchives','html');
// Get pagination request variables
$mainframe = JFactory::getApplication();
if (CLIENT_SIDE_PAGINATION) {
$limit = 0;
$limitstart = 0;
} else {
$limit = $mainframe->getUserStateFromRequest('global.list.limit', 'limit', $mainframe->getCfg('list_limit'), 'int');
$limitstart = $jinput->getInt('limitstart', 0);
// In case limit has been changed, adjust it
if (empty($limit)) { $limit = $mainframe->getCfg('list_limit'); $limitstart = 0; }
$limitstart = ($limit != 0 ? (floor($limitstart / $limit) * $limit) : 0);
}
$editor_pugin_installed = TabulizerInfo::isEditorPluginInstalled();
if ($editor_pugin_installed) {
$model->loadRulesetArchives($limit, $limitstart);
$view->setModel($model, true);
$view->setLayout('default');
$view->display();
} else {
$msg = JText::_('COM_TABULIZER_EDITOR_PLUGIN_NOT_INSTALLED');
TabulizerUserMessage::printInfo($msg);
}
}
//=============================================================================================
// USER_PREFERENCES
//=============================================================================================
function editUserPreferences() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$error_msg = null;
$model = $this->getModel('rulesetarchives');
$view = $this->getView('rulesetarchives','html');
$editor_pugin_installed = TabulizerInfo::isEditorPluginInstalled();
if ($editor_pugin_installed) {
if ($model->loadUserPreferences($error_msg)) {
$view->setModel($model, true);
$view->setLayout('user_preferences');
$view->displayUserPreferences();
} else {
$msg = sprintf(JText::_( 'COM_TABULIZER_USER_PREFERENCES_LOAD_FAILURE' ),$error_msg);
TabulizerUserMessage::printError($msg);
}
} else {
$msg = JText::_('COM_TABULIZER_EDITOR_PLUGIN_NOT_INSTALLED');
TabulizerUserMessage::printError($msg);
}
}
function saveUserPreferences() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option;
$msg_type = 'message';
$error_msg = null;
$model = $this->getModel('rulesetarchives');
if ($model->saveUserPreferences($error_msg)) {
$msg = JText::_( 'COM_TABULIZER_USER_PREFERENCES_SAVE_SUCCESS' );
$this->setRedirect($link, $msg, $msg_type);
} else {
$msg = sprintf(JText::_( 'COM_TABULIZER_USER_PREFERENCES_SAVE_FAILURE' ),$error_msg);
$msg_type = 'error';
$this->setRedirect($link, $msg, $msg_type);
}
return;
}
//=============================================================================================
// USER_PERMISSIONS
//=============================================================================================
function editUserPermissions() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$error_msg = null;
$model = $this->getModel('rulesetarchives');
$view = $this->getView('rulesetarchives','html');
if ($model->loadAccessPermissions($error_msg)) {
$view->setModel($model, true);
$view->setLayout('user_permissions');
$view->displayUserPermissions();
} else {
$msg = sprintf(JText::_( 'COM_TABULIZER_USER_PERMISSIONS_LOAD_FAILURE' ),$error_msg);
TabulizerUserMessage::printError($msg);
}
}
function saveUserPermissions() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option;
$msg_type = 'message';
$error_msg = null;
$model = $this->getModel('rulesetarchives');
if ($model->saveAccessPermissions($error_msg)) {
$msg = JText::_( 'COM_TABULIZER_USER_PERMISSIONS_SAVE_SUCCESS' );
$this->setRedirect($link, $msg, $msg_type);
} else {
$msg = sprintf(JText::_( 'COM_TABULIZER_USER_PERMISSIONS_SAVE_FAILURE' ),$error_msg);
$msg_type = 'error';
$this->setRedirect($link, $msg, $msg_type);
}
return;
}
//=============================================================================================
// SYSTEM STATUS
//=============================================================================================
function viewStatus() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option;
$msg_type = 'error';
$model = $this->getModel('rulesetarchives');
$view = $this->getView('rulesetarchives','html');
$editor_pugin_installed = TabulizerInfo::isEditorPluginInstalled();
if ($editor_pugin_installed) {
$model->loadStatus();
$view->setModel($model, true);
$view->setLayout('status');
$view->displayStatus();
} else {
$msg = JText::_('COM_TABULIZER_EDITOR_PLUGIN_NOT_INSTALLED');
$this->setRedirect($link, $msg, $msg_type);
TabulizerUserMessage::printInfo($msg);
}
}
//=============================================================================================
// DATA SOURCES
//=============================================================================================
function viewDataSourcesStart() {
if (isset($_REQUEST['limitstart'])) $_REQUEST['limitstart'] = 0;
$this->viewDataSources();
}
function viewDataSources() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$error_msg = null;
$model = $this->getModel('datasources');
$view = $this->getView('datasources','html');
// Get pagination request variables
$mainframe = JFactory::getApplication();
// We get all data sources as we will paginate them via javascript code on the client's side
// otherwise: use the default system limit and the given limitstart
if (CLIENT_SIDE_PAGINATION) {
$limit = 0;
$limitstart = 0;
} else {
$limit = $mainframe->getUserStateFromRequest('global.list.limit', 'limit', $mainframe->getCfg('list_limit'), 'int');
$limitstart = $jinput->getInt('limitstart', 0);
// In case limit has been changed, adjust it
if (empty($limit)) { $limit = $mainframe->getCfg('list_limit'); $limitstart = 0; }
$limitstart = ($limit != 0 ? (floor($limitstart / $limit) * $limit) : 0);
}
$editor_pugin_installed = TabulizerInfo::isEditorPluginInstalled();
if ($editor_pugin_installed) {
$model->loadDataSources($limit, $limitstart, $error_msg);
$view->setModel($model, true);
$view->setLayout('default');
$view->display();
} else {
$msg = JText::_('COM_TABULIZER_EDITOR_PLUGIN_NOT_INSTALLED');
TabulizerUserMessage::printInfo($msg);
}
}
function newDataSource() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$model = $this->getModel('datasources');
$view = $this->getView('datasources','html');
$view->setModel($model, true);
$view->setLayout('form');
$view->displayNew();
}
function previewDataSource() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option;
$msg_type = 'error';
$id = $jinput->getInt( 'ds_id', null );
if (empty($id)) {
$msg = JText::_('COM_TABULIZER_NO_DATA_SOURCE_IS_SPECIFIED');
$this->setRedirect($link, $msg, $msg_type);
} else {
$model = $this->getModel('datasources');
$view = $this->getView('datasources','html');
$data_source = $model->loadDataSource($id);
if (empty($data_source)) {
$msg = JText::_('COM_TABULIZER_SPECIFIED_DATA_SOURCE_IS_EMPTY_OR_NOT_FOUND');
$this->setRedirect($link, $msg, $msg_type);
} else {
$view->setModel($model, true);
$view->setLayout('preview');
$view->displayPreview();
}
}
}
function editDataSource() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option;
$msg_type = 'error';
$id = $jinput->getInt( 'ds_id', null );
if (empty($id)) {
$msg = JText::_('COM_TABULIZER_NO_DATA_SOURCE_IS_SPECIFIED');
$this->setRedirect($link, $msg, $msg_type);
} else {
$model = $this->getModel('datasources');
$view = $this->getView('datasources','html');
$data_source = $model->loadDataSource($id);
if (empty($data_source)) {
$msg = JText::_('COM_TABULIZER_SPECIFIED_DATA_SOURCE_IS_EMPTY_OR_NOT_FOUND');
$this->setRedirect($link, $msg, $msg_type);
} else {
$view->setModel($model, true);
$view->setLayout('form');
$view->displayEdit();
}
}
}
function saveDataSource() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option.'&task=viewDataSources';
$msg_type = 'error';
$error_msg = null;
$data_source = array();
$data_source['id'] = $jinput->getInt('ds_id', null);
$data_source['tag'] = $jinput->getString('ds_tag', null);
$data_source['title'] = $jinput->getString('ds_title', null);
$data_source['source_type'] = $jinput->getString('ds_source_type', null);
$data_source['cache_type'] = $jinput->getInt('ds_cache_type', null);
$data_source['cache_time'] = $jinput->getInt('ds_cache_time', null);
$addcopy = $jinput->getInt('addcopy', 0);
if ($addcopy) {
$data_source['id'] = null;
$data_source['tag'] = TabulizerString::generateRandomString(24);
$data_source['title'] .= ' - ' . JText::_('COM_TABULIZER_COPY_OF');
}
$model = $this->getModel('datasources');
$data_source['source_params'] = $model->getDataSourceRequest($data_source['source_type'], 'ds_', $error_msg);
if (empty($data_source['source_params'])) {
$msg = JText::_('COM_TABULIZER_INVALID_DATA_SOURCE_SAVE_PARAMS') . $error_msg;
} else {
if ($model->saveDataSource($data_source, $error_msg)) {
$msg = JText::_('COM_TABULIZER_DATA_SOURCE_SAVED_SUCCESSFULLY');
$msg_type = 'message';
$addnew = $jinput->getInt('addnew', 0);
if ($addnew) {
$link = 'index.php?option='.$option.'&task=newDataSource';
}
} else {
$msg = JText::_('COM_TABULIZER_COULD_NOT_SAVE_DATA_SOURCE') . $error_msg;
}
}
$this->setRedirect($link, $msg, $msg_type);
}
function deleteDataSource() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option.'&task=viewDataSources';
$msg_type = 'error';
$error_msg = null;
$cid = $jinput->get( 'cid', array(), 'array' );
if (count( $cid )) {
$model = $this->getModel('datasources');
if ($model->deleteDataSource($cid, $error_msg)) {
$msg = JText::_('COM_TABULIZER_SELECTED_DATA_SOURCES_DELETED_SUCCESSFULLY');
$msg_type = 'message';
} else {
$msg = JText::_('COM_TABULIZER_DATA_SOURCES_DELETION_FAILED') . ' ' . $error_msg;
}
} else {
$msg = JText::_('COM_TABULIZER_NO_DATA_SOURCES_SELECTED_FOR_DELETION');
}
$this->setRedirect($link, $msg, $msg_type);
}
function editDataSourcePublishingPreferences() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option.'&task=viewDataSources';
$msg_type = 'error';
$msg = '';
$id = $jinput->getInt( 'ds_id', null );
if (empty($id)) {
$msg = JText::_('COM_TABULIZER_NO_DATA_SOURCE_IS_SPECIFIED');
$this->setRedirect($link, $msg, $msg_type);
} else {
$model = $this->getModel('datasources');
$view = $this->getView('datasources','html');
if ($model->loadDataSource($id)) {
$model->loadPublishingPreferences($msg);
$view->setModel($model, true);
$view->setLayout('publishing_preferences');
$view->editPublishingPreferences();
} else {
$msg = JText::_('COM_TABULIZER_SPECIFIED_DATA_SOURCE_IS_EMPTY_OR_NOT_FOUND');
$this->setRedirect($link, $msg, $msg_type);
}
}
}
function saveDataSourcePublishingPreferences() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option.'&task=viewDataSources';
$msg_type = 'error';
$msg = '';
$tag = $jinput->getString( 'ds_tag', null );
if (empty($tag)) {
$msg = JText::_('COM_TABULIZER_NO_DATA_SOURCE_IS_SPECIFIED');
$this->setRedirect($link, $msg, $msg_type);
} else {
$model = $this->getModel('datasources');
if ($model->savePublishingPreferences($tag, $msg)) {
$msg = JText::_('COM_TABULIZER_SPECIFIED_DATA_SOURCE_IS_EMPTY_OR_NOT_FOUND');
$msg_type = 'message';
} else {
$this->setRedirect($link, $msg, $msg_type);
}
}
$this->setRedirect($link, $msg, $msg_type);
}
function importDataSource() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option.'&task=viewDataSources';
$msg_type = 'error';
$importFileData = $jinput->getInt( 'import_file', 0);
$displayForm = ($importFileData)?false:true;
$model = $this->getModel('datasources');
if ($displayForm) {
$view = $this->getView('datasources','html');
$view->setModel($model, true);
$view->setLayout('import');
$view->displayImport();
return;
}
//import joomlas filesystem functions, we will do all the file writing with joomla's functions,
//so if the ftp layer is on, joomla will write with that, not the apache user, which might
//not have the correct permissions
jimport('joomla.filesystem.file');
jimport('joomla.filesystem.folder');
//this is the name of the field in the html form, filedata is the default name for swfupload
//so we will leave it as that
$fieldName = 'datasource_filename';
$file = $jinput->files->get($fieldName);
//any errors the server registered on uploading
$fileError = $file['error'];
if ($fileError > 0) {
switch ($fileError) {
case 1:
$msg = JText::_( 'COM_TABULIZER_FILE_UPLOAD_LARGER_THAN_PHP_INI_ALLOWS' );
break;
case 2:
$msg = JText::_( 'COM_TABULIZER_FILE_UPLOAD_LARGER_THAN_HTML_FORM_ALLOWS' );
break;
case 3:
$msg = JText::_( 'COM_TABULIZER_FILE_UPLOAD_ERROR_PARTIAL' );
break;
case 4:
$msg = JText::_( 'COM_TABULIZER_FILE_UPLOAD_ERROR_NO_FILE' );
break;
default:
$msg = JText::_( 'COM_TABULIZER_FILE_UPLOAD_ERROR_UNKNOWN' );
break;
}
$this->setRedirect($link, $msg, $msg_type);
return;
}
//check for filesize
$fileSize = $file['size'];
$maxAllowedFileSize = 20000000;
if($fileSize > $maxAllowedFileSize)
{
$msg = JText::_( 'COM_TABULIZER_FILE_UPLOAD_LARGER_THAN_COMPONENT_ALLOWS' );
$this->setRedirect($link, $msg, $msg_type);
return;
}
//check the file extension is ok
$fileName = $file['name'];
$uploadedFileNameParts = explode('.',$fileName);
$uploadedFileExtension = array_pop($uploadedFileNameParts);
$validFileExts = array('xml');
//assume the extension is false until we know its ok
$extOk = false;
//go through every ok extension, if the ok extension matches the file extension (case insensitive)
//then the file extension is ok
foreach($validFileExts as $key => $value)
{
if( preg_match("/$value/i", $uploadedFileExtension ) )
{
$extOk = true;
}
}
if ($extOk == false)
{
$msg = sprintf(JText::_( 'COM_TABULIZER_FILE_UPLOAD_INVALID_EXTENSION' ),implode(',',$validFileExts));
$this->setRedirect($link, $msg, $msg_type);
return;
}
//the name of the file in PHP's temp directory that we are going to move to our folder
$fileTemp = $file['tmp_name'];
//lose any special characters in the filename
$fileName = preg_replace("/[^A-Za-z0-9._]/", "-", $fileName);
//always use constants when making file paths, to avoid the possibilty of remote file inclusion
$uploadPath = TabulizerPath::getFilePath($fileName, 'datasources');
$overwrite = $jinput->getInt( 'overwrite_file', 0);
if (file_exists($uploadPath)) {
if ($overwrite) {
unlink($uploadPath);
} else {
$msg = sprintf(JText::_( 'COM_TABULIZER_FILE_UPLOAD_FILE_ALREADY_EXISTS' ),$fileName,$uploadPath);
$this->setRedirect($link, $msg, $msg_type);
return;
}
}
if(!TabulizerUtils::fileUpload($fileTemp, $uploadPath))
{
$msg = sprintf(JText::_( 'COM_TABULIZER_FILE_UPLOAD_FAILURE' ),$fileName);
$this->setRedirect($link, $msg, $msg_type);
return;
}
else
{
$ds_errors = array();
$model->importDataSourceArchive($uploadPath, $ds_errors);
if (empty($ds_errors)) {
$msg = sprintf(JText::_('COM_TABULIZER_DATA_SOURCE_IMPORTED_SUCCESSFULLY'),$fileName);
$msg_type = 'message';
$this->setRedirect($link, $msg, $msg_type);
return;
} else {
$msg = TabulizerUserMessage::printList(JText::_('COM_TABULIZER_DATA_SOURCE_IMPORTATION_ERROR'), $ds_errors, true);
$this->setRedirect($link, $msg, $msg_type);
return;
}
}
// normally we should never reach this line
$msg = JText::_('COM_TABULIZER_DATA_SOURCE_IMPORTATION_ERROR_GENERIC');
$this->setRedirect($link, $msg, $msg_type);
}
function exportDataSource() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option . '&task=viewDataSources';
$msg_type = 'error';
$error_msg = null;
$cid = $jinput->get( 'cid', array(), 'array' );
if (count( $cid )) {
$model = $this->getModel('datasources');
if (!$model->exportDataSources($cid, $error_msg)) {
$msg = sprintf(JText::_('COM_TABULIZER_DATA_SOURCE_EXPORT_FAILED'),$error_msg);
}
} else {
$msg = JText::_('COM_TABULIZER_NO_DATA_SOURCES_SELECTED_FOR_EXPORT');
}
$this->setRedirect($link, $msg, $msg_type);
}
function clearDataSourceCache() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option . '&task=viewDataSources';
$msg_type = 'error';
$error_msg = null;
$msg = '';
$ids = array();
$cid = $jinput->get( 'cid', array(), 'array' );
if (count( $cid )) {
$ids = $cid;
} else {
$id = $jinput->getInt( 'ds_id', null );
if (!empty($id)) {
$link .= '&task=editDataSource&ds_id='.$id.'&cid[]='.$id;
$ids = array($id);
}
}
$return_url = $jinput->get('data_sources_return_url',null,'raw');
if (!empty($return_url)) $link .= '&data_sources_return_url='.urlencode($return_url);
if (!empty($ids)) {
$model = $this->getModel('datasources');
foreach ($ids as $id) {
if (!$model->clearDataSourceCache($id, $error_msg)) {
$msg .= JText::_('COM_TABULIZER_DATA_SOURCE_CACHE_CLEARING_FAILED') . ' ' . $error_msg . "<br/>\n";
}
}
}
if (!isset($error_msg)) {
$msg = JText::_('COM_TABULIZER_DATA_SOURCE_CACHE_CLEARED_SUCCESSFULLY');
$msg_type = 'message';
}
$this->setRedirect($link, $msg, $msg_type);
}
function refreshDataSources() {
$jinput = JFactory::getApplication()->input;
$user_preferences = TabulizerInfo::getUserPreferences($error_msg);
$error_msg = null;
$valid_keyphrase = (isset($user_preferences['datasources_refresh_keyphrase']))?$user_preferences['datasources_refresh_keyphrase']:null;
$keyphrase = $jinput->getString('keyphrase',null);
$data_source_tag = $jinput->getString('ds_tag',null);
if (empty($valid_keyphrase)) {
$error_msg = JText::_('COM_TABULIZER_DATA_SOURCE_REFRESH_ERROR_NO_KEYPHRASE_SET');
} else if (empty($keyphrase)) {
$error_msg = JText::_('COM_TABULIZER_DATA_SOURCE_REFRESH_ERROR_NO_KEYPHRASE_GIVEN');
} else if ($keyphrase != $valid_keyphrase) {
$error_msg = JText::_('COM_TABULIZER_DATA_SOURCE_REFRESH_ERROR_INVALID_KEYPHRASE');
} else {
TabulizerPath::requireLib('data_source','common');
TabulizerDataSource::refreshDataSources($data_source_tag);
jexit("OK");
}
jexit("ERROR: ".$error_msg);
}
function manageDataFiles() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option;
$msg_type = 'error';
// Get pagination request variables
$mainframe = JFactory::getApplication();
$limit = $mainframe->getUserStateFromRequest('global.list.limit', 'limit', $mainframe->getCfg('list_limit'), 'int');
$limitstart = $jinput->getInt('limitstart', 0);
// We get all data sources as we will paginate them via javascript code on the client's side
// otherwise: use the default system limit and the given limitstart
if (CLIENT_SIDE_PAGINATION) {
$limit = 0;
$limitstart = 0;
} else {
$limit = $mainframe->getUserStateFromRequest('global.list.limit', 'limit', $mainframe->getCfg('list_limit'), 'int');
$limitstart = $jinput->getInt('limitstart', 0);
// In case limit has been changed, adjust it
if (empty($limit)) { $limit = $mainframe->getCfg('list_limit'); $limitstart = 0; }
$limitstart = ($limit != 0 ? (floor($limitstart / $limit) * $limit) : 0);
}
$model = $this->getModel('datasources');
$view = $this->getView('datasources','html');
$model->loadDataFiles($limit,$limitstart);
$view->setModel($model, true);
$view->setLayout('files');
$view->displayDataFiles();
}
function deleteDataFile() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option . '&task=manageDataFiles';
$msg_type = 'error';
$error_msg = null;
$cid = $jinput->get( 'cid', array(), 'array' );
if (count( $cid )) {
$model = $this->getModel('datasources');
if ($model->deleteDataFile($cid, $error_msg)) {
$msg = JText::_('COM_TABULIZER_SELECTED_DATA_FILE_DELETED_SUCCESSFULLY');
$msg_type = 'message';
} else {
$msg = sprintf(JText::_('COM_TABULIZER_DATA_FILE_DELETION_FAILED'),$error_msg);
}
} else {
$msg = JText::_('COM_TABULIZER_NO_DATA_FILE_SELECTED_FOR_DELETION');
}
$this->setRedirect($link, $msg, $msg_type);
}
function downloadDataFile() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option . '&task=manageDataFiles';
$msg_type = 'error';
$error_msg = null;
$cid = $jinput->get( 'cid', array(), 'array' );
if (count( $cid )) {
$model = $this->getModel('datasources');
if (!$model->outputDataFiles($cid, $error_msg)) {
$msg = sprintf(JText::_('COM_TABULIZER_DATA_FILE_DOWNLOAD_FAILED'),$error_msg);
}
} else {
$msg = JText::_('COM_TABULIZER_NO_DATA_FILE_SELECTED_FOR_DOWNLOAD');
}
$this->setRedirect($link, $msg, $msg_type);
}
function importDataFile() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option . '&task=manageDataFiles';
$msg_type = 'error';
$importFileData = $jinput->getInt( 'import_file', 0);
$displayForm = ($importFileData)?false:true;
if ($displayForm) {
$model = $this->getModel('datasources');
$view = $this->getView('datasources','html');
$view->setModel($model, true);
$view->setLayout('files_import');
$view->displayDataFileImport();
return;
}
//import joomlas filesystem functions, we will do all the filewriting with joomlas functions,
//so if the ftp layer is on, joomla will write with that, not the apache user, which might
//not have the correct permissions
jimport('joomla.filesystem.file');
jimport('joomla.filesystem.folder');
//this is the name of the field in the html form, filedata is the default name for swfupload
//so we will leave it as that
$fieldName = 'data_file';
$file = $jinput->files->get($fieldName);
//any errors the server registered on uploading
$fileError = $file['error'];
if ($fileError > 0) {
switch ($fileError) {
case 1:
$msg = JText::_( 'COM_TABULIZER_FILE_UPLOAD_LARGER_THAN_PHP_INI_ALLOWS' );
break;
case 2:
$msg = JText::_( 'COM_TABULIZER_FILE_UPLOAD_LARGER_THAN_HTML_FORM_ALLOWS' );
break;
case 3:
$msg = JText::_( 'COM_TABULIZER_FILE_UPLOAD_ERROR_PARTIAL' );
break;
case 4:
$msg = JText::_( 'COM_TABULIZER_FILE_UPLOAD_ERROR_NO_FILE' );
break;
default:
$msg = JText::_( 'COM_TABULIZER_FILE_UPLOAD_ERROR_UNKNOWN' );
break;
}
$this->setRedirect($link, $msg, $msg_type);
return;
}
//check for filesize
$fileSize = $file['size'];
$maxAllowedFileSize = 20000000;
if($fileSize > $maxAllowedFileSize)
{
$msg = JText::_( 'COM_TABULIZER_FILE_UPLOAD_LARGER_THAN_COMPONENT_ALLOWS' );
$this->setRedirect($link, $msg, $msg_type);
return;
}
//check the file extension is ok
$fileName = $file['name'];
$fileExt = strtolower(pathinfo($fileName,PATHINFO_EXTENSION));
$validFileExts = explode(',',ALLOWED_FILE_TYPES_FOR_DATA_IMPORTATION);
$validFileExts[] = 'zip';
$extOk = TabulizerValidator::isFilename($fileName, $validFileExts );
if ($extOk == false)
{
$msg = sprintf(JText::_( 'COM_TABULIZER_FILE_UPLOAD_INVALID_EXTENSION' ),implode(',',$validFileExts));
$this->setRedirect($link, $msg, $msg_type);
return;
}
//the name of the file in PHP's temp directory that we are going to move to our folder
$fileTemp = $file['tmp_name'];
$overwrite = $jinput->getInt( 'overwrite_file', 0);
if ($fileExt != 'zip') {
$uploadPath = TabulizerPath::getDirPath('data');
$uploadFilepath = TabulizerPath::getFilePath($fileName, 'data');
if (file_exists($uploadFilepath)) {
if ($overwrite) {
unlink($uploadFilepath);
} else {
$msg = sprintf(JText::_( 'COM_TABULIZER_DATA_FILE_UPLOAD_FILE_ALREADY_EXISTS' ),$fileName,$uploadPath);
$this->setRedirect($link, $msg, $msg_type);
return;
}
}
if(!TabulizerUtils::fileUpload($fileTemp, $uploadFilepath))
{
$msg = sprintf(JText::_( 'COM_TABULIZER_FILE_UPLOAD_UNABLE_TO_UNZIP_FILE' ),$fileName);
$this->setRedirect($link, $msg, $msg_type);
return;
}
else
{
$msg = sprintf(JText::_( 'COM_TABULIZER_DATA_FILE_UPLOAD_SUCCESS'),$fileName);
$msg_type = 'message';
$this->setRedirect($link, $msg, $msg_type);
return;
}
} else {
//always use constants when making file paths, to avoid the possibilty of remote file inclusion
$uploadPath = TabulizerPath::getFilePath($fileName, 'upload');
$unzipPath = TabulizerPath::getDirPath('data');
if (file_exists($uploadPath)) {
if ($overwrite) {
unlink($uploadPath);
} else {
$path_parts = pathinfo('/path/noextension');
$msg = sprintf(JText::_( 'COM_TABULIZER_DATA_FILE_UPLOAD_FILE_EXTRACT_ALREADY_EXISTS' ),$fileName,$path_parts['basename'],$unzipPath);
$this->setRedirect($link, $msg, $msg_type);
return;
}
}
if(!TabulizerUtils::fileUpload($fileTemp, $uploadPath))
{
$msg = sprintf(JText::_( 'COM_TABULIZER_FILE_UPLOAD_UNABLE_TO_UNZIP_FILE' ),$fileName);
$this->setRedirect($link, $msg, $msg_type);
return;
}
else
{
// unzip file
if (!class_exists('ZipArchive')) {
$data_file_dir = TabulizerPath::getDirPath('data');
$msg = sprintf(JText::_( 'COM_TABULIZER_DATA_FILE_UPLOAD_ZIP_LIBRARY_MISSING'), $data_file_dir);
$this->setRedirect($link, $msg, $msg_type);
return;
}
$zip = new ZipArchive;
$return_code = $zip->open($uploadPath);
if ($return_code === TRUE) {
$success = true;
for ($i=0; $i<$zip->numFiles;$i++) {
$entry_info = $zip->statIndex($i);
$file_entry = $unzipPath . $entry_info['name'];
if (file_exists($file_entry) && !$overwrite) {
if (!is_dir($file_entry)) {
$msg = sprintf(JText::_( 'COM_TABULIZER_DATA_FILE_UPLOAD_FILE_EXTRACT_ALREADY_EXISTS' ),$fileName,$entry_info['name'],$unzipPath);
$success = false;
break;
}
}
// security check: make sure the included paths in the archive are valid
$included_folder_name = dirname($entry_info['name']);
if ($included_folder_name != '.') {
$msg = sprintf(JText::_( 'COM_TABULIZER_DATA_FILE_UPLOAD_NO_SUBDIRECTORIES' ),$entry_info['name']);
$success = false;
break;
}
// security check: do not allow certain file type to be included and installed on the Joomla site
// as part of the data archive importation process
$extension = substr(strrchr($entry_info['name'], "."), 1);
$allowed_extensions = ALLOWED_FILE_TYPES_FOR_DATA_IMPORTATION;
if (!empty($extension)) {
$extension = strtolower($extension);
if (!TabulizerPermissions::isAllowedImportDataExtension($extension)) {
$msg = sprintf(JText::_( 'COM_TABULIZER_DATA_FILE_INVALID_EXTENSION' ),$entry_info['name'],$allowed_extensions);
$success = false;
}
} else {
$msg = sprintf(JText::_( 'COM_TABULIZER_DATA_FILE_NO_EXTENSION' ),$entry_info['name'],$allowed_extensions);
$success = false;
}
}
if ($success) {
if ($zip->extractTo($unzipPath)) {
$msg = sprintf(JText::_( 'COM_TABULIZER_FILE_UPLOAD_SUCCESS'),$fileName);
$msg_type = 'message';
} else {
$msg = sprintf(JText::_( 'COM_TABULIZER_FILE_UPLOAD_UNABLE_TO_EXTRACT_FILE' ),$fileName,$unzipPath);
}
}
$zip->close();
$this->setRedirect($link, $msg, $msg_type);
return;
} else {
$msg = sprintf(JText::_( 'COM_TABULIZER_DATA_FILE_UPLOAD_UNABLE_TO_UNZIP_FILE' ),$fileName);
$this->setRedirect($link, $msg, $msg_type);
return;
}
}
}
}
//=============================================================================================
// RULESET ARCHIVE
//=============================================================================================
function viewRulesetArchive() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option;
$msg_type = 'error';
$archive_filename = $jinput->getString( 'archive_filename', '' );
// Get pagination request variables
$mainframe = JFactory::getApplication();
$limit = $mainframe->getUserStateFromRequest('global.list.limit', 'limit', $mainframe->getCfg('list_limit'), 'int');
$limitstart = $jinput->getInt('limitstart', 0);
// We get all data sources as we will paginate them via javascript code on the client's side
// otherwise: use the default system limit and the given limitstart
if (CLIENT_SIDE_PAGINATION) {
$limit = 0;
$limitstart = 0;
} else {
$limit = $mainframe->getUserStateFromRequest('global.list.limit', 'limit', $mainframe->getCfg('list_limit'), 'int');
$limitstart = $jinput->getInt('limitstart', 0);
// In case limit has been changed, adjust it
if (empty($limit)) { $limit = $mainframe->getCfg('list_limit'); $limitstart = 0; }
$limitstart = ($limit != 0 ? (floor($limitstart / $limit) * $limit) : 0);
}
if (empty($archive_filename)) {
$msg = JText::_('COM_TABULIZER_NO_RULESET_ARCHIVE_IS_SPECIFIED');
$this->setRedirect($link, $msg, $msg_type);
} else {
$model = $this->getModel('rulesetarchive');
$view = $this->getView('rulesetarchive','html');
$ruleset_archive = $model->loadRulesetArchive($archive_filename,$limit,$limitstart);
if (empty($ruleset_archive)) {
$msg = JText::_('COM_TABULIZER_SPECIFIED_RULESET_ARCHIVE_IS_EMPTY_OR_NOT_FOUND');
$this->setRedirect($link, $msg, $msg_type);
} else {
$view->setModel($model, true);
$view->setLayout('default');
$view->display();
}
}
}
function viewRulesetArchivePreview() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option;
$msg_type = 'error';
$archive_filename = $jinput->getString( 'archive_filename', '' );
if (empty($archive_filename)) {
$msg = JText::_('COM_TABULIZER_NO_RULESET_ARCHIVE_IS_SPECIFIED');
$this->setRedirect($link, $msg, $msg_type);
} else {
$model = $this->getModel('rulesetarchive');
$view = $this->getView('rulesetarchive','html');
$ruleset_archive = $model->loadRulesetArchive($archive_filename);
if (empty($ruleset_archive)) {
$msg = JText::_('COM_TABULIZER_SPECIFIED_RULESET_ARCHIVE_IS_EMPTY_OR_NOT_FOUND');
$this->setRedirect($link, $msg, $msg_type);
} else {
$view->setModel($model, true);
$view->setLayout('preview');
$view->displayPreview();
}
}
}
function newRulesetArchive() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$model = $this->getModel('rulesetarchive');
$view = $this->getView('rulesetarchive','html');
$view->setModel($model, true);
$view->setLayout('form');
$view->displayNew();
}
function editRulesetArchive() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option;
$msg_type = 'error';
$ruleset_file = $jinput->getString( 'archive_filename', '' );
if (empty($ruleset_file)) {
$msg = JText::_('COM_TABULIZER_NO_RULESET_ARCHIVE_IS_SPECIFIED');
$this->setRedirect($link, $msg, $msg_type);
} else {
$model = $this->getModel('rulesetarchive');
$view = $this->getView('rulesetarchive','html');
$archive = $model->loadRulesetArchive($ruleset_file);
if (empty($archive)) {
$msg = JText::_('COM_TABULIZER_SPECIFIED_RULESET_ARCHIVE_IS_EMPTY_OR_NOT_FOUND');
$this->setRedirect($link, $msg, $msg_type);
} else {
$view->setModel($model, true);
$view->setLayout('form');
$view->displayEdit();
}
}
}
function saveRulesetArchive() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option;
$msg_type = 'error';
$ruleset_file = $jinput->getString( 'archive_filename', '' );
if (empty($ruleset_file)) {
$msg = JText::_('COM_TABULIZER_INVALID_ARGS');
} else {
if (TabulizerValidator::isFilename($ruleset_file,'xml')) {
$model = $this->getModel('rulesetarchive');
$archive_meta = array('compatibility'=>4, 'version'=>$jinput->getString('meta_version', null),'author_name'=>$jinput->getString('meta_author_name', null),'author_email'=>$jinput->getString('meta_author_email', null),'author_url'=>$jinput->getString('meta_author_url', null), 'compatibility'=>$jinput->getString('meta_compatibility', null),'generator'=>$jinput->getString('meta_generator', null),'last_modified'=>$jinput->getString('meta_last_modified', null));
$ruleset_archive = array('name'=>$jinput->getString('archive_name', null), 'title'=>$jinput->getString('archive_title',null), 'description'=>$jinput->getString('archive_description',null), 'style'=>$jinput->getString('archive_style',null),'meta'=>$archive_meta, 'filename'=>$ruleset_file);
if ($model->saveRulesetArchive($ruleset_archive)) {
$msg = JText::_('COM_TABULIZER_RULESET_ARCHIVE_SAVED_SUCCESSFULLY');
$msg_type = 'message';
$return_url = str_replace('&amp;','&',JRoute::_('index.php?option='.$option.'&task=viewrulesetarchives'));
$link = 'index.php?option='. $option.'&task=viewrulesetarchive&archive_filename='.urlencode($ruleset_file).'&archives_return_url='.urlencode($return_url);
} else {
$msg = JText::_('COM_TABULIZER_COULD_NOT_SAVE_RULESET_ARCHIVE');
}
} else {
$msg = JText::_('COM_TABULIZER_INVALID_RULESET_ARCHIVE_FILENAME');
}
}
$this->setRedirect($link, $msg, $msg_type);
}
function deleteRulesetArchive() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option;
$msg_type = 'error';
$cid = $jinput->get( 'cid', array(), 'array' );
if (count( $cid )) {
$model = $this->getModel('rulesetarchive');
if ($model->deleteRulesetArchive($cid)) {
$msg = JText::_('COM_TABULIZER_SELECTED_RULESET_ARCHIVES_DELETED_SUCCESSFULLY');
$msg_type = 'message';
} else {
$msg = JText::_('COM_TABULIZER_RULESET_ARCHIVES_DELETION_FAILED');
}
} else {
$msg = JText::_('COM_TABULIZER_NO_RULESET_ARCHIVES_SELECTED_FOR_DELETION');
}
$this->setRedirect($link, $msg, $msg_type);
}
function importRulesetArchive() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option;
$msg_type = 'error';
$importFileData = $jinput->getInt( 'import_file', 0);
$displayForm = ($importFileData)?false:true;
if ($displayForm) {
$model = $this->getModel('rulesetarchives');
$view = $this->getView('rulesetarchives','html');
$view->setModel($model, true);
$view->setLayout('import');
$view->displayImport();
return;
}
//import joomlas filesystem functions, we will do all the filewriting with joomlas functions,
//so if the ftp layer is on, joomla will write with that, not the apache user, which might
//not have the correct permissions
jimport('joomla.filesystem.file');
jimport('joomla.filesystem.folder');
//this is the name of the field in the html form, filedata is the default name for swfupload
//so we will leave it as that
$fieldName = 'zip_filename';
$file = $jinput->files->get($fieldName,null,'raw');
//any errors the server registered on uploading
$fileError = $file['error'];
if ($fileError > 0) {
switch ($fileError) {
case 1:
$msg = JText::_( 'COM_TABULIZER_FILE_UPLOAD_LARGER_THAN_PHP_INI_ALLOWS' );
break;
case 2:
$msg = JText::_( 'COM_TABULIZER_FILE_UPLOAD_LARGER_THAN_HTML_FORM_ALLOWS' );
break;
case 3:
$msg = JText::_( 'COM_TABULIZER_FILE_UPLOAD_ERROR_PARTIAL' );
break;
case 4:
$msg = JText::_( 'COM_TABULIZER_FILE_UPLOAD_ERROR_NO_FILE' );
break;
default:
$msg = JText::_( 'COM_TABULIZER_FILE_UPLOAD_ERROR_UNKNOWN' );
break;
}
$this->setRedirect($link, $msg, $msg_type);
return;
}
//check for filesize
$fileSize = $file['size'];
$maxAllowedFileSize = 20000000;
if($fileSize > $maxAllowedFileSize)
{
$msg = JText::_( 'COM_TABULIZER_FILE_UPLOAD_LARGER_THAN_COMPONENT_ALLOWS' );
$this->setRedirect($link, $msg, $msg_type);
return;
}
//check the file extension is ok
$fileName = $file['name'];
//lose any special characters in the filename
$fileName = preg_replace("/[^A-Za-z0-9._]/", "-", $fileName);
$validFileExts = array('zip');
$extOk = TabulizerValidator::isFilename($fileName, $validFileExts );
if ($extOk == false)
{
$msg = sprintf(JText::_( 'COM_TABULIZER_FILE_UPLOAD_INVALID_EXTENSION' ),implode(',',$validFileExts));
$this->setRedirect($link, $msg, $msg_type);
return;
}
//the name of the file in PHP's temp directory that we are going to move to our folder
$fileTemp = $file['tmp_name'];
//always use constants when making file paths, to avoid the possibilty of remote file inclusion
$uploadPath = TabulizerPath::getFilePath($fileName, 'upload');
$unzipPath = TabulizerPath::getDirPath('archives_root');
$overwrite = $jinput->getInt( 'overwrite_file', 0);
$overwrite_safemode = $jinput->getInt( 'overwrite_safemode', 0);
if (file_exists($uploadPath)) {
unlink($uploadPath);
/*
if ($overwrite) {
unlink($uploadPath);
} else {
$msg = sprintf(JText::_( 'COM_TABULIZER_FILE_UPLOAD_FILE_ALREADY_EXISTS' ),$fileName,$uploadPath);
$this->setRedirect($link, $msg, $msg_type);
return;
}
*/
}
if(!TabulizerUtils::fileUpload($fileTemp, $uploadPath))
{
$msg = sprintf(JText::_( 'COM_TABULIZER_FILE_UPLOAD_UNABLE_TO_UNZIP_FILE' ),$fileName);
$this->setRedirect($link, $msg, $msg_type);
return;
}
else
{
// unzip file
if (!class_exists('ZipArchive')) {
$css_dir = TabulizerPath::getDirPath('css');
$rules_dir = TabulizerPath::getDirPath('rules');
$msg = sprintf(JText::_( 'COM_TABULIZER_FILE_UPLOAD_ZIP_LIBRARY_MISSING'), $css_dir, $rules_dir);
$this->setRedirect($link, $msg, $msg_type);
return;
}
$zip = new ZipArchive;
$return_code = $zip->open($uploadPath);
if ($return_code === TRUE) {
$data_sources = array();
$success = true;
for ($i=0; $i<$zip->numFiles;$i++) {
$entry_info = $zip->statIndex($i);
$file_entry = $unzipPath . $entry_info['name'];
if (file_exists($file_entry) && !$overwrite) {
if (!is_dir($file_entry)) {
$msg = sprintf(JText::_( 'COM_TABULIZER_FILE_UPLOAD_FILE_EXTRACT_ALREADY_EXISTS' ),$fileName,$entry_info['name'],$unzipPath);
$success = false;
break;
}
}
// security check: make sure the included paths in the archive are valid
$included_folder_name = dirname($entry_info['name']);
if ($included_folder_name == '.') {
$included_folder_name = basename($entry_info['name']);
}
if (TabulizerPath::getDirPath($included_folder_name)===false) {
$msg = sprintf(JText::_( 'COM_TABULIZER_FILE_UPLOAD_INVALID_ARCHIVE_FOLDER' ),$included_folder_name,$entry_info['name']);
$success = false;
break;
}
// security check: do not allow certain file type to be included and installed on the Joomla site
// as part of the ruleset archive importation process
$extension = substr(strrchr($entry_info['name'], "."), 1);
if (!empty($extension)) {
$extension = strtolower($extension);
// check if you need to import a data source
if (preg_match('/^datasources(.+)\.xml$/', $entry_info['name'], $matches)) {
$data_sources[] = $entry_info['name'];
}
// check if extension needs special permission
if (preg_match('#^data[\\\/](.+)$#', $entry_info['name'], $matches)) {
if (!TabulizerPermissions::isAllowedImportDataExtension($extension)) {
$allowed_data_extensions = ALLOWED_FILE_TYPES_FOR_DATA_IMPORTATION;
$msg = sprintf(JText::_( 'COM_TABULIZER_FILE_UPLOAD_DATA_EXTENSION_NOT_ALLOWED' ),$entry_info['name'],$extension, $allowed_data_extensions);
$success = false;
break;
}
} else if (!TabulizerPermissions::isAllowedImportArchiveExtension($extension, $overwrite_safemode)) {
$msg = sprintf(JText::_( 'COM_TABULIZER_FILE_UPLOAD_FILE_EXTENSION_NOT_ALLOWED' ),$entry_info['name'],$extension);
$success = false;
break;
}
}
}
if ($success) {
if ($zip->extractTo($unzipPath)) {
$msg = sprintf(JText::_( 'COM_TABULIZER_FILE_UPLOAD_SUCCESS'),$fileName);
$msg_type = 'message';
// import data sources, if any
if (!empty($data_sources)) {
if (!TabulizerPermissions::isAllowedImportDataSources($overwrite_safemode)) {
$msg = JText::_('COM_TABULIZER_DATA_SOURCE_IMPORTATION_NOT_ALLOWED');
$msg_type = 'error';
} else {
$ds_model = $this->getModel('datasources');
$ds_errors = array();
foreach ($data_sources as $data_source) {
$data_source_filename = $unzipPath . $data_source;
$ds_model->importDataSourceArchive($data_source_filename, $ds_errors);
}
if (!empty($ds_errors)) {
$msg = TabulizerUserMessage::printList(JText::_('COM_TABULIZER_DATA_SOURCE_IMPORTATION_ERROR'), $ds_errors, true);
$msg_type = 'error';
}
}
}
} else {
$msg = sprintf(JText::_( 'COM_TABULIZER_FILE_UPLOAD_UNABLE_TO_EXTRACT_FILE' ),$fileName,$unzipPath);
}
}
$zip->close();
$this->setRedirect($link, $msg, $msg_type);
return;
} else {
$msg = sprintf(JText::_( 'COM_TABULIZER_FILE_UPLOAD_UNABLE_TO_UNZIP_FILE' ),$fileName);
$this->setRedirect($link, $msg, $msg_type);
return;
}
}
}
function exportRulesetArchive() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option . '&task=viewRulesetArchives';
$msg_type = 'error';
$error_msg = null;
$cid = $jinput->get( 'cid', array(), 'array' );
if (count( $cid )) {
$model = $this->getModel('rulesetarchives');
if (!$model->exportRulesetArchives($cid, $error_msg)) {
$msg = sprintf(JText::_('COM_TABULIZER_RULESET_ARCHIVE_EXPORT_FAILED'),$error_msg);
}
} else {
$msg = JText::_('COM_TABULIZER_NO_RULESET_ARCHIVES_SELECTED_FOR_EXPORT');
}
$this->setRedirect($link, $msg, $msg_type);
}
function editCSSFile() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option;
$msg_type = 'error';
$css_filename = $jinput->getString( 'css_filename', '' );
$archive_filename = $jinput->getString( 'archive_filename', '' );
$ruleset_name = $jinput->getString( 'ruleset_name', '' );
if (empty($css_filename)) {
$msg = JText::_('COM_TABULIZER_INVALID_ARGS');
$this->setRedirect($link, $msg, $msg_type);
} else {
if (TabulizerValidator::isFilename($css_filename, 'css')) {
$model = $this->getModel('rulesetarchive');
$view = $this->getView('rulesetarchive','html');
$model->loadCSSFile($css_filename, $archive_filename, $ruleset_name);
$view->setModel($model, true);
$view->setLayout('edit_css');
$view->displayCSSEdit();
} else {
$msg = sprintf(JText::_('COM_TABULIZER_INVALID_CSS_FILENAME'),$css_filename);
$msg_type = 'error';
$this->setRedirect($link, $msg, $msg_type);
}
}
}
function applyCSSFile() {
$this->saveCSSFile(true);
}
function saveCSSFile($apply = false) {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option;
$msg_type = 'error';
$css_filename = $jinput->getString( 'css_filename', '' );
$css_contents = $jinput->getString( 'css_contents', '' );
$ruleset_name = $jinput->getString( 'ruleset_name', '' );
$archive_filename = $jinput->getString( 'archive_filename', '' );
if (empty($css_filename) && empty($css_contents)) {
$msg = JText::_('COM_TABULIZER_INVALID_ARGS');
} else {
if (TabulizerValidator::isFilename($css_filename, 'css')) {
$model = $this->getModel('rulesetarchive');
if ($model->saveCSSFile($css_filename, $css_contents)) {
$msg = sprintf(JText::_('COM_TABULIZER_CSS_FILE_SAVED_SUCCESSFULLY'),$css_filename);
$msg_type = 'message';
if ($apply) {
$link = 'index.php?option='. $option . '&task=editCSSFile&css_filename='.$css_filename.'&archive_filename='.$archive_filename.'&ruleset_name='.$ruleset_name;
}
} else {
$msg = sprintf(JText::_('COM_TABULIZER_COULD_NOT_SAVE_CSS_FILE'),$css_filename);
}
} else {
$msg = sprintf(JText::_('COM_TABULIZER_INVALID_CSS_FILENAME'),$css_filename);
}
}
$this->setRedirect($link, $msg, $msg_type);
}
//=============================================================================================
// RULESET
//=============================================================================================
function getRulesetArgs(&$ruleset_name, &$ruleset_file) {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option;
$msg_type = 'error';
$ruleset_name = $jinput->getString( 'ruleset_name', '' );
$ruleset_file = $jinput->getString( 'archive_filename', '' );
if (empty($ruleset_file)) {
$msg = JText::_('COM_TABULIZER_NO_RULESET_ARCHIVE_IS_SPECIFIED');
$this->setRedirect($link, $msg, $msg_type);
} else if (empty($ruleset_name)) {
$msg = JText::_('COM_TABULIZER_NO_RULESET_NAME_IS_SPECIFIED');
$this->setRedirect($link, $msg, $msg_type);
} else {
return true;
}
return false;
}
function viewRuleset() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option;
$msg_type = 'error';
if ($this->getRulesetArgs($ruleset_name, $ruleset_file)) {
$model = $this->getModel('ruleset');
$view = $this->getView('ruleset','html');
$ruleset = $model->loadRuleset($ruleset_name, $ruleset_file);
if (empty($ruleset)) {
$msg = JText::_('COM_TABULIZER_SPECIFIED_RULESET_IS EMPTY_OR_NOT_FOUND');
} else {
$view->setModel($model, true);
$view->setLayout('default');
$view->display();
}
} else {
$msg = JText::_('COM_TABULIZER_INVALID_ARGS');
}
}
function viewRulesetPreview() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option;
$msg_type = 'error';
if ($this->getRulesetArgs($ruleset_name, $ruleset_file)) {
$model = $this->getModel('ruleset');
$view = $this->getView('ruleset','html');
$ruleset = $model->loadRuleset($ruleset_name, $ruleset_file);
if (empty($ruleset)) {
$msg = JText::_('COM_TABULIZER_SPECIFIED_RULESET_IS_EMPTY_OR_NOT_FOUND');
$this->setRedirect($link, $msg, $msg_type);
} else {
$view->setModel($model, true);
$view->setLayout('preview');
$view->displayPreview();
}
} else {
$msg = JText::_('COM_TABULIZER_INVALID_ARGS');
$this->setRedirect($link, $msg, $msg_type);
}
}
function newRuleset() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option;
$msg_type = 'error';
$ruleset_file = $jinput->getString( 'archive_filename', '' );
if (empty($ruleset_file)) {
$msg = JText::_('COM_TABULIZER_NO_RULESET_ARCHIVE_IS_SPECIFIED');
$this->setRedirect($link, $msg, $msg_type);
} else {
$model = $this->getModel('rulesetarchive');
$view = $this->getView('ruleset','html');
$archive = $model->loadRulesetArchive($ruleset_file);
if (empty($archive)) {
$msg = JText::_('COM_TABULIZER_SPECIFIED_RULESET_ARCHIVE_IS_EMPTY_OR_NOT_FOUND');
$this->setRedirect($link, $msg, $msg_type);
} else {
$view->setModel($model, true);
$view->setLayout('form');
$view->displayNew();
}
}
}
function editRuleset() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option;
$msg_type = 'error';
if ($this->getRulesetArgs($ruleset_name, $ruleset_file)) {
$model = $this->getModel('ruleset');
$view = $this->getView('ruleset','html');
$ruleset = $model->loadRuleset($ruleset_name, $ruleset_file);
if (empty($ruleset)) {
$msg = JText::_('COM_TABULIZER_SPECIFIED_RULESET_IS_EMPTY_OR_NOT_FOUND');
$this->setRedirect($link, $msg, $msg_type);
} else {
$view->setModel($model, true);
$view->setLayout('form');
$view->displayEdit();
}
} else {
$msg = JText::_('COM_TABULIZER_INVALID_ARGS');
$this->setRedirect($link, $msg, $msg_type);
}
}
function saveRuleset() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option;
$msg_type = 'error';
if ($this->getRulesetArgs($ruleset_name, $ruleset_file)) {
$model = $this->getModel('ruleset');
$link = 'index.php?option='.$option.'&task=viewrulesetarchive&archive_filename='.$ruleset_file;
$ruleset = array('name'=> $jinput->getString('ruleset_name', null), 'title'=>$jinput->getString('ruleset_title', null), 'description'=>$jinput->getString('ruleset_description', null), 'suffix'=> $jinput->getString('ruleset_suffix', null), 'style'=> $jinput->getString('ruleset_style', null), 'preselected' => $jinput->getString('ruleset_preselected', null), 'filename' => $ruleset_file);
$addcopy = $jinput->getInt('addcopy', 0);
if ($addcopy) {
TabulizerPath::requireLib('ruleset','admin');
$ruleset_obj = new Ruleset();
$source_name = $ruleset['name'];
$ruleset['name'] = $ruleset_obj->getRecommendedName($ruleset['name'].'_copy_');
$exclude_titles = array();
$all_ruleset_titles = $ruleset_obj->getAllRulesetTitles($exclude_titles,$ruleset_file);
if (in_array($ruleset['title'], $all_ruleset_titles)) {
for ($i = 1; $i < 1024; $i++) {
$title = $ruleset['title'] . ' - ' . sprintf(JText::_('COM_TABULIZER_COPY_OF_NUM'), $i);
if (!in_array($title, $all_ruleset_titles)) {
$ruleset['title'] = $title;
break;
}
}
}
// copy rules, if any
if (empty($ruleset_obj->rulesets)) {
$ruleset_obj->loadRulesets($ruleset['filename'],0,0,$total_count);
}
if (isset($ruleset_obj->rulesets)) {
foreach ($ruleset_obj->rulesets as $archive_name => $ruleset_archive) {
if (!empty($ruleset['filename']) && ($ruleset_archive['filename'] != $ruleset['filename'])) continue;
foreach ($ruleset_archive['rulesets'] as $ruleset_entry) {
if ($source_name == $ruleset_entry['name']) {
if (isset($ruleset_entry['rules'])) $ruleset['rules'] = $ruleset_entry['rules'];
}
}
}
}
$ruleset['preselected'] = null;
}
$sample_date = $jinput->getInt('sample_data_check', 0);
if (!empty($sample_date)) {
$sample_data_caption = $jinput->getString('sample_data_caption', null);
$sample_data_text = (isset($_REQUEST['sample_data_text']))?$_REQUEST['sample_data_text']:null; // allow HTML code
$sample_data_sep = $jinput->getString('sample_data_sep', null);
$sample_data_enc = $jinput->getString('sample_data_enc', null);
if (!empty($sample_data_text) && !empty($sample_data_sep)) {
$ruleset['sample_data'] = 1;
$ruleset['sample_data_caption'] = $sample_data_caption;
$ruleset['sample_data_text'] = $sample_data_text;
$ruleset['sample_data_sep'] = $sample_data_sep;
$ruleset['sample_data_enc'] = $sample_data_enc;
}
}
if ($model->saveRuleset($ruleset, $ruleset_file)) {
$msg = JText::_('COM_TABULIZER_RULESET_SAVED_SUCCESSFULLY');
$msg_type = 'message';
$return_url = str_replace('&amp;','&',JRoute::_('index.php?option='.$option.'&task=viewrulesetarchive&archive_filename='.$ruleset_file));
$link = 'index.php?option='.$option.'&task=viewRuleset&ruleset_name='.$ruleset['name'].'&archive_filename='.$ruleset_file.'&archive_return_url='.urlencode($return_url);
} else {
$msg = JText::_('COM_TABULIZER_COULD_NOT_SAVE_RULESET');
}
} else {
$msg = JText::_('COM_TABULIZER_INVALID_ARGS');
}
$this->setRedirect($link, $msg, $msg_type);
}
function deleteRuleset() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option;
$msg_type = 'error';
$cid = $jinput->get( 'cid', array(), 'array' );
if (count( $cid )) {
$ruleset_file = $jinput->getString( 'archive_filename', '' );
if (empty($ruleset_file)) {
$msg = JText::_('COM_TABULIZER_NO_RULESET_ARCHIVE_IS_SPECIFIED');
} else {
$model = $this->getModel('ruleset');
if ($model->deleteRuleset($cid, $ruleset_file)) {
$msg = JText::_('COM_TABULIZER_SELECTED_RULESETS_DELETED_SUCCESSFULLY');
$link = 'index.php?option='.$option.'&task=viewrulesetarchive&archive_filename='.$ruleset_file;
$msg_type = 'message';
} else {
$msg = JText::_('COM_TABULIZER_RULESETS_DELETION_FAILED');
}
}
} else {
$msg = JText::_('COM_TABULIZER_NO_RULESETS_SELECTED_FOR_DELETION');
}
$this->setRedirect($link, $msg, $msg_type);
}
//=============================================================================================
// RULE
//=============================================================================================
function getRuleArgs(&$rule_id, &$ruleset_name, &$ruleset_file) {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option;
$msg_type = 'error';
$rule_id = $jinput->getString( 'rule_id', '' );
$ruleset_name = $jinput->getString( 'ruleset_name', '' );
$ruleset_file = $jinput->getString( 'archive_filename', '' );
if (empty($ruleset_file)) {
$msg = JText::_('COM_TABULIZER_NO_RULESET_ARCHIVE_IS_SPECIFIED');
$this->setRedirect($link, $msg, $msg_type);
} else if (empty($ruleset_name)) {
$msg = JText::_('COM_TABULIZER_NO_RULESET_NAME_IS_SPECIFIED');
$this->setRedirect($link, $msg, $msg_type);
} else if (!is_numeric($rule_id)) {
$msg = JText::_('COM_TABULIZER_NO_RULE_ID_IS_SPECIFIED');
$this->setRedirect($link, $msg, $msg_type);
} else {
return true;
}
return false;
}
function viewRule() {
jexit('viewRule: Not yet implemented!');
}
function newRule() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option;
$msg_type = 'error';
$ruleset_name = $jinput->getString( 'ruleset_name', '' );
$ruleset_file = $jinput->getString( 'archive_filename', '' );
if (empty($ruleset_file)) {
$msg = JText::_('COM_TABULIZER_NO_RULESET_ARCHIVE_IS_SPECIFIED');
$this->setRedirect($link, $msg, $msg_type);
} else if (empty($ruleset_name)) {
$msg = JText::_('COM_TABULIZER_NO_RULESET_NAME_IS_SPECIFIED');
$this->setRedirect($link, $msg, $msg_type);
} else {
$model = $this->getModel('ruleset');
$view = $this->getView('rule','html');
$ruleset = $model->loadRuleset($ruleset_name, $ruleset_file);
if (empty($ruleset)) {
$msg = JText::_('COM_TABULIZER_SPECIFIED_RULESET_IS_EMPTY_OR_NOT_FOUND');
$this->setRedirect($link, $msg, $msg_type);
} else {
$view->setModel($model, true);
$view->setLayout('form');
$view->displayNew();
}
}
}
function editRule() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option;
$msg_type = 'error';
if ($this->getRuleArgs($rule_id, $ruleset_name, $ruleset_file)) {
$model = $this->getModel('rule');
$view = $this->getView('rule','html');
$rule = $model->loadRule($rule_id, $ruleset_name, $ruleset_file);
if (empty($rule)) {
$msg = JText::_('COM_TABULIZER_SPECIFIED_RULE_IS_EMPTY_OR_NOT_FOUND');
$this->setRedirect($link, $msg, $msg_type);
} else {
$view->setModel($model, true);
$view->setLayout('form');
$view->displayEdit();
}
} else {
$msg = JText::_('COM_TABULIZER_INVALID_ARGS');
$this->setRedirect($link, $msg, $msg_type);
}
}
function saveRule() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option;
$msg_type = 'error';
$return_urls = null;
if ($this->getRuleArgs($rule_id, $ruleset_name, $ruleset_file)) {
$addnew = $jinput->getInt('addnew', 0);
if ($addnew) {
$model = $this->getModel('ruleset');
if ($model->loadRuleset($ruleset_name, $ruleset_file)) {
$model->getReturnURLs($return_urls);
$link = 'index.php?option='.$option.'&task=viewruleset&task=newRule'.
'&ruleset_name='.urlencode($ruleset_name).
'&archive_filename='.urlencode($ruleset_file).'&archives_return_url='.urlencode($return_urls['archives']).
'&archive_return_url='.urlencode($return_urls['archive']);
}
} else {
$link = 'index.php?option='.$option.'&task=viewruleset&ruleset_name='.$ruleset_name.'&archive_filename='.$ruleset_file;
}
$rule = array('element'=> $jinput->getString('element', null),
'element_section'=> $jinput->get('element_section', null, 'raw'),
'range'=> $jinput->get('range', null, 'raw'),
'range_key'=> $jinput->getInt('range_key', null),
'priority'=> $jinput->getInt('priority', null),
'style'=> $jinput->getString('style', null),
'autospan'=> $jinput->getString('autospan', null),
'th_tag'=> $jinput->getString('th_tag', null),
'remove'=> $jinput->getString('remove', null),
'format'=> $jinput->get('format_data_type', null, 'raw'),
'prepend'=> $jinput->get('table_prepend', '', 'raw' ),
'append'=> $jinput->get('table_append', '', 'raw' ),
'add_files' => $jinput->getString('add_files',null),
'calculation' => $jinput->getString('calculation',null),
'modification' => $jinput->getString('modification',null),
'split' => $jinput->getString('table_split', null),
'pagination' => $jinput->getString('table_pagination', null),
'scroll' => $jinput->getString('table_scroll', null),
'filter' => $jinput->getString('table_filter', null),
'column_filter' => $jinput->getString('table_column_filter', null),
'sort' => $jinput->getString('table_sort', null),
'theme' => $jinput->getString('table_theme', null),
'responsive' => $jinput->getString('table_responsive', null),
'graph' => $jinput->getString('table_graph', null),
'export_table' => $jinput->getString('table_export_table', null));
// unset some values that do not make sense for the selected element
$element = strtolower(trim($rule['element']));
switch ($element) {
case 'table':
$unset_keys = array('element_section','range_key','autospan');
break;
case 'row':
case 'column':
$unset_keys = array('prepend','append','add_files','modification','split','pagination','scroll','filter','column_filter','sort','responsive','graph','export_table');
break;
case 'cell':
$unset_keys = array('element_section','range_key','autospan','prepend','append','add_files','calculation','modification','split','pagination','scroll','filter','column_filter','sort','responsive','graph','export_table');
break;
default:
$unset_keys = array();
}
if (!empty($unset_keys)) {
foreach ($unset_keys as $unset_key) {
$rule[$unset_key] = null;
}
}
// attribute
# We give the use free access to html tags, include img that would be strips form $jinput->get function
$attribute_name = $jinput->post->get('attribute_name', '', 'raw' );
$attribute_value = $jinput->post->get('attribute_value', '', 'raw' );
if ((!empty($attribute_name))&&($attribute_value!='')) {
$rule['attribute'] = $attribute_name . ATTRIBUTE_SEPARATOR . $attribute_value;
}
// replacement
# We give the use free access to html tags, include img that would be strips form $jinput->get function
$replace_from = $jinput->post->get('replace_from', '', 'raw' );
$replace_to = $jinput->post->get('replace_to', '', 'raw' );
$replace_cs = $jinput->getInt('replace_cs', 0);
if ((!empty($replace_from))||(!empty($replace_from))) {
$rule['replacement'] = $replace_cs . REPLACEMENT_SEPARATOR . $replace_from . REPLACEMENT_SEPARATOR . $replace_to;
}
if ($rule['format']) {
$data_type_params = $jinput->get('format_data_type_params','','raw');
if (!empty($data_type_params)) {
$rule['format'] = $rule['format'] . DATA_TYPE_SEPARATOR . $data_type_params;
} else {
unset($rule['format']);
}
}
$model = $this->getModel('rule');
if ($model->saveRule($rule, $rule_id, $ruleset_name, $ruleset_file)) {
$msg = JText::_('COM_TABULIZER_RULE_SAVED_SUCCESSFULLY');
$msg_type = 'message';
} else {
$msg = JText::_('COM_TABULIZER_COULD_NOT_SAVE_RULE');
}
} else {
$msg = JText::_('COM_TABULIZER_INVALID_ARGS');
}
$this->setRedirect($link, $msg, $msg_type);
}
function deleteRule() {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option;
$msg_type = 'error';
$cid = $jinput->get( 'cid', array(), 'array' );
JArrayHelper::toInteger($cid);
if (count( $cid )) {
$ruleset_name = $jinput->getString( 'ruleset_name', '' );
$ruleset_file = $jinput->getString( 'archive_filename', '' );
if (empty($ruleset_file)) {
$msg = JText::_('COM_TABULIZER_NO_RULESET_ARCHIVE_IS_SPECIFIED');
} else if (empty($ruleset_name)) {
$msg = JText::_('COM_TABULIZER_NO_RULESET_NAME_IS_SPECIFIED');
} else {
$model = $this->getModel('rule');
if ($model->deleteRule($cid, $ruleset_name, $ruleset_file)) {
$msg = JText::_('COM_TABULIZER_SELECTED_RULES_DELETED_SUCCESSFULLY');
$link = 'index.php?option='.$option.'&task=viewruleset&ruleset_name='.$ruleset_name.'&archive_filename='.$ruleset_file;
$msg_type = 'message';
} else {
$msg = JText::_('COM_TABULIZER_RULES_DELETION_FAILED');
}
}
} else {
$msg = JText::_('COM_TABULIZER_NO_RULES_SELECTED_FOR_DELETION');
}
$this->setRedirect($link, $msg, $msg_type);
}
function isAllowed($task, &$user_msg) {
$allowed = 1; // unless otherwise proven
switch ($task) {
case 'dsdata':
case 'outputDataSource':
case 'exportdata':
$allowed = 1;
break;
case 'dialog':
case 'convert':
case 'dsselect':
case 'extract_table_data':
case 'extract_grid_data':
case 'save_grid_data':
case 'grab_table_data':
case 'viewStatus':
case 'editUserPreferences':
case 'saveUserPreferences':
$allowed = (TabulizerPermissions::isAllowed('ruleset-use'))?1:0;
$user_msg = JText::_('COM_TABULIZER_PERMISSION_REQUIRED_FOR_RULESET_USE');
break;
case 'viewRulesetArchives':
case 'viewDataSources':
case 'viewRulesetArchive':
case 'viewRulesetArchivePreview':
case 'viewRuleset':
case 'viewRulesetPreview':
case 'viewRule':
$allowed = (TabulizerPermissions::isAllowed('ruleset-view'))?1:0;
$user_msg = JText::_('COM_TABULIZER_PERMISSION_REQUIRED_FOR_RULESET_VIEW');
break;
case 'newRulesetArchive':
case 'editRulesetArchive':
case 'saveRulesetArchive':
case 'deleteRulesetArchive':
case 'getRulesetArgs':
case 'newRuleset':
case 'editRuleset':
case 'saveRuleset':
case 'deleteRuleset':
case 'getRuleArgs':
case 'newRule':
case 'editRule':
case 'saveRule':
case 'deleteRule':
case 'editCSSFile':
case 'applyCSSFile':
case 'saveCSSFile':
$allowed = (TabulizerPermissions::isAllowed('ruleset-edit'))?1:0;
$user_msg = JText::_('COM_TABULIZER_PERMISSION_REQUIRED_FOR_RULESET_EDIT');
break;
case 'importRulesetArchive':
$allowed = (TabulizerPermissions::isAllowed('ruleset-import'))?1:0;
$user_msg = JText::_('COM_TABULIZER_PERMISSION_REQUIRED_FOR_RULESET_IMPORT');
break;
case 'exportRulesetArchive':
$allowed = (TabulizerPermissions::isAllowed('ruleset-export'))?1:0;
$user_msg = JText::_('COM_TABULIZER_PERMISSION_REQUIRED_FOR_RULESET_EXPORT');
break;
case 'previewDataSource':
case 'viewDataSourcesStart':
$allowed = (TabulizerPermissions::isAllowed('data-source-view'))?1:0;
$user_msg = JText::_('COM_TABULIZER_PERMISSION_REQUIRED_FOR_DATA_SOURCE_VIEW');
break;
case 'newDataSource':
case 'editDataSource':
case 'saveDataSource':
case 'deleteDataSource':
case 'clearDataSourceCache':
$allowed = (TabulizerPermissions::isAllowed('data-source-edit'))?1:0;
$user_msg = JText::_('COM_TABULIZER_PERMISSION_REQUIRED_FOR_DATA_SOURCE_EDIT');
break;
case 'importDataSource':
$allowed = (TabulizerPermissions::isAllowed('data-source-import'))?1:0;
$user_msg = JText::_('COM_TABULIZER_PERMISSION_REQUIRED_FOR_DATA_SOURCE_IMPORT');
break;
case 'editDataSourcePublishingPreferences':
case 'saveDataSourcePublishingPreferences':
case 'exportDataSource':
$allowed = (TabulizerPermissions::isAllowed('data-source-export'))?1:0;
$user_msg = JText::_('COM_TABULIZER_PERMISSION_REQUIRED_FOR_DATA_SOURCE_EXPORT');
break;
case 'extract_excel_data':
case 'upload_excel_file':
case 'extract_csv_data':
case 'upload_csv_file':
$allowed = (TabulizerPermissions::isAllowed('data-import'))?1:0;
$user_msg = JText::_('COM_TABULIZER_PERMISSION_REQUIRED_FOR_EXCEL_IMPORT');
break;
case 'manageDataFiles':
case 'deleteDataFile':
case 'downloadDataFile':
case 'importDataFile':
$allowed = (TabulizerPermissions::isAllowed('data-import'))?1:0;
$user_msg = JText::_('COM_TABULIZER_PERMISSION_REQUIRED_FOR_DATA_FILE');
break;
case 'editUserPermissions':
case 'saveUserPermissions':
$allowed = TabulizerPermissions::isAdmin();
$user_msg = JText::_('COM_TABULIZER_PERMISSION_REQUIRED_FOR_USER_PERMISSIONS_SAVE');
break;
case 'system-save':
$allowed = TabulizerPermissions::isAdmin();
$user_msg = JText::_('COM_TABULIZER_PERMISSION_REQUIRED_FOR_USER_SYSTEM_PREFERENCES_SAVE');
break;
}
return $allowed;
}
function checkSessionTokenValidity($task) {
$jinput = JFactory::getApplication()->input;
$option = $jinput->getCmd('option');
$link = 'index.php?option='. $option;
$msg = JText::_('COM_TABULIZER_SESSION_TOKEN_INVALID');
$msg_type = 'error';
$valid = false;
switch ($task) {
case 'saveRulesetArchive':
case 'saveRuleset':
case 'saveRule':
$valid = JSession::checkToken();
if (!$valid) {
$this->setRedirect($link, $msg, $msg_type);
}
break;
case 'deleteRulesetArchive':
case 'deleteRuleset':
case 'deleteRule':
// token in URL
$valid = JSession::checkToken( 'get' );
// token in form (hidden field)
if (!$valid) $valid = JSession::checkToken();
if (!$valid) {
$this->setRedirect($link, $msg, $msg_type);
}
break;
case 'importRulesetArchive':
$importFileData = $jinput->getInt( 'import_file', 0);
$displayForm = ($importFileData)?false:true;
if ($displayForm) $valid = true;
else $valid = JSession::checkToken();
if (!$valid) {
$this->setRedirect($link, $msg, $msg_type);
}
break;
case 'exportDataSource':
case 'exportRulesetArchive':
$valid = JSession::checkToken();
if (!$valid) {
$this->setRedirect($link, $msg, $msg_type);
}
break;
case 'importDataFile':
case 'deleteDataFile':
// token in URL
$valid = JSession::checkToken( 'get' );
// token in form (hidden field)
if (!$valid) $valid = JSession::checkToken();
if (!$valid) {
$this->setRedirect($link, $msg, $msg_type);
}
break;
case 'extract_table_data':
case 'extract_excel_data':
case 'upload_excel_file':
$valid = JSession::checkToken();
if (!$valid) {
$output = json_encode(array("error_msg" => $msg));
jexit($output);
}
break;
case 'convert':
$valid = JSession::checkToken();
if (!$valid) {
$html = ERROR_CODE_PREFIX;
$html .= '<error>'.$msg.'</error>';
jexit($msg);
}
break;
default:
$valid = true;
break;
}
return $valid;
}
function printWarning($msg, $use_html = true) {
if ($use_html) {
TabulizerUserMessage::printError($msg);
} else {
echo $msg;
}
}
}
?>