363 lines
11 KiB
PHP
363 lines
11 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.model' );
|
|
|
|
TabulizerPath::requireLib('ruleset','admin');
|
|
|
|
class tabulizerModelRulesetarchives extends JModelLegacy {
|
|
var $ruleset_archives = null;
|
|
var $css_code = null;
|
|
var $user_preferences = null;
|
|
var $user_permissions = null;
|
|
var $system_status = null;
|
|
var $limit = null;
|
|
var $limitstart = null;
|
|
var $total_count = null;
|
|
|
|
function __construct(){
|
|
parent::__construct();
|
|
}
|
|
|
|
function loadRulesetArchives($limit=0, $limitstart=0) {
|
|
$ruleset = new Ruleset();
|
|
$this->ruleset_archives = $ruleset->getRulesets(null,$limit,$limitstart,$total_count);
|
|
$this->limit = $limit;
|
|
$this->limitstart = $limitstart;
|
|
$this->total_count = $total_count;
|
|
return $this->ruleset_archives;
|
|
}
|
|
|
|
function getRulesetArchives() {
|
|
if (empty($this->ruleset_archives)) {
|
|
$this->loadRulesetArchives();
|
|
}
|
|
|
|
return $this->ruleset_archives;
|
|
}
|
|
|
|
function exportRulesetArchives($ids, &$error_msg) {
|
|
|
|
$ra_associated_files = array();
|
|
foreach ($ids as $archive_filename) {
|
|
$associated_files = TabulizerRulesetAssociation::loadArchiveFiles($archive_filename);
|
|
if ($associated_files) {
|
|
$ra_associated_files = TabulizerRulesetAssociation::mergeAssociations($ra_associated_files,$associated_files);
|
|
}
|
|
}
|
|
|
|
$archive_dir = TabulizerPath::getDirBase('temp');
|
|
$archive_filename = $archive_dir .DIRECTORY_SEPARATOR. 'archive_download.zip';
|
|
|
|
$zip = new ZipArchive;
|
|
$return_code = $zip->open($archive_filename,ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE);
|
|
if ($return_code === TRUE) {
|
|
foreach ($ra_associated_files as $zipdir => $files) {
|
|
if (empty($files)) continue;
|
|
$zip->addEmptyDir($zipdir);
|
|
foreach ($files as $filename => $filepath) {
|
|
$zip->addFile($filepath, $zipdir .DIRECTORY_SEPARATOR. $filename);
|
|
}
|
|
}
|
|
$zip->close();
|
|
} else {
|
|
$error_desc = TabulizerUtils::getZipArchiveErrorDescription($return_code);
|
|
$error_msg = sprintf(JText::_('COM_TABULIZER_DATA_FILE_ZIP_LIBRARY_MISSING'),$error_desc);
|
|
return false;
|
|
}
|
|
|
|
// finally output the temp zip file
|
|
header('Pragma: public');
|
|
header('Expires: 0');
|
|
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
|
|
header('Cache-Control: private', false); // required for certain browsers
|
|
header('Content-Type: application/zip');
|
|
|
|
header('Content-Disposition: attachment; filename="'. basename($archive_filename) . '";');
|
|
header('Content-Transfer-Encoding: binary');
|
|
header('Content-Length: ' . filesize($archive_filename));
|
|
|
|
ob_clean();
|
|
flush();
|
|
readfile($archive_filename);
|
|
|
|
// remove temporary files
|
|
@unlink($archive_filename);
|
|
|
|
exit;
|
|
}
|
|
|
|
|
|
function getPagination() {
|
|
$pagination = null;
|
|
if (!empty($this->limit) && !empty($this->total_count)) {
|
|
if ($this->total_count > $this->limit) {
|
|
jimport('joomla.html.pagination');
|
|
$pagination = new JPagination($this->total_count, $this->limitstart, $this->limit );
|
|
}
|
|
}
|
|
return $pagination;
|
|
}
|
|
|
|
function getReturnURLs(&$urls) {
|
|
$jinput = JFactory::getApplication()->input;
|
|
$option = $jinput->getCmd('option');
|
|
|
|
$urls = array();
|
|
$url = str_replace('&','&',JRoute::_('index.php?option='.$option.'&task=viewrulesetarchives&limit='.$this->limit.'&limitstart='.$this->limitstart));
|
|
$urls['archives'] = $url;
|
|
}
|
|
|
|
function getRulesetConflicts() {
|
|
TabulizerPath::requireLib('ruleset','admin');
|
|
$ruleset = new Ruleset();
|
|
return $ruleset->getRulesetConflicts();
|
|
}
|
|
|
|
function loadUserPreferences(&$error_msg) {
|
|
$preferences = TabulizerInfo::getUserPreferences($error_msg);
|
|
if ($preferences) {
|
|
$this->user_preferences = $preferences;
|
|
return true;
|
|
} else return false;
|
|
}
|
|
|
|
function getUserPreferences() {
|
|
return $this->user_preferences;
|
|
}
|
|
|
|
function saveUserPreferences(&$error_msg) {
|
|
$db = JFactory::getDbo();
|
|
$user = JFactory::getUser();
|
|
$jinput = JFactory::getApplication()->input;
|
|
|
|
if ($user->guest) {
|
|
$error_msg = JText::_('COM_TABULIZER_USER_PREFERENCES_NOT_LOGGED_ERROR');
|
|
return false;
|
|
}
|
|
$user_id = $user->id;
|
|
|
|
$action = 'system-save';
|
|
$allow_save = (TabulizerPermissions::isAllowed($action))?1:0;
|
|
if ($allow_save) {
|
|
if (!$this->saveSystemPreferences($error_msg)) return false;
|
|
}
|
|
|
|
$preferences = TabulizerInfo::getUserPreferences($error_msg, 'none');
|
|
|
|
// update or insert new preferences entry ?
|
|
$new_entry = true;
|
|
$update_keys = array();
|
|
|
|
$query = 'SELECT pref.* FROM #__tabulizer_user_preferences as pref WHERE user_id = '.$user_id;
|
|
$db->setQuery($query);
|
|
|
|
$rows = $db->loadObjectList();
|
|
if (!empty($rows)) {
|
|
$new_entry = false;
|
|
foreach ($rows as $row) {
|
|
if (!empty($row->key)) {
|
|
$preferences[$row->key] = $row->value;
|
|
$update_keys[$row->key] = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
$queries = array();
|
|
foreach ($preferences as $key => $value) {
|
|
$value = $jinput->getString($key,0);
|
|
if ($new_entry || empty($update_keys[$key])) {
|
|
$query = 'INSERT INTO #__tabulizer_user_preferences (`user_id`, `key`, `value`) VALUES ('.$user_id.','.$db->quote($key).','.$db->quote($value).')';
|
|
} else {
|
|
$query = 'UPDATE #__tabulizer_user_preferences SET `value` = '.$db->quote($value).' WHERE `user_id` = '.$user_id .' AND `key` = '. $db->quote($key);
|
|
}
|
|
$queries[] = $query;
|
|
}
|
|
|
|
foreach ($queries as $query) {
|
|
if (!TabulizerDatabase::executeQuery($query,$error_msg,$db)) {
|
|
$error_msg = JText::_('COM_TABULIZER_USER_PREFERENCES_DB_SAVE_ERROR').$error_msg;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
function saveSystemPreferences(&$error_msg) {
|
|
$db = JFactory::getDbo();
|
|
$user = JFactory::getUser();
|
|
$jinput = JFactory::getApplication()->input;
|
|
|
|
if ($user->guest) {
|
|
$error_msg = JText::_('COM_TABULIZER_USER_PREFERENCES_NOT_LOGGED_ERROR');
|
|
return false;
|
|
}
|
|
$user_id = 0; // 0 -> System user
|
|
|
|
$preferences = TabulizerInfo::getUserPreferences($error_msg, 'only');
|
|
|
|
// update or insert new preferences entry ?
|
|
$new_entry = true;
|
|
$update_keys = array();
|
|
|
|
$query = 'SELECT pref.* FROM #__tabulizer_user_preferences as pref WHERE user_id = ' . $user_id;
|
|
$db->setQuery($query);
|
|
|
|
$rows = $db->loadObjectList();
|
|
if (!empty($rows)) {
|
|
$new_entry = false;
|
|
foreach ($rows as $row) {
|
|
if (!empty($row->key)) {
|
|
$preferences[$row->key] = $row->value;
|
|
$update_keys[$row->key] = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
$queries = array();
|
|
foreach ($preferences as $key => $value) {
|
|
$value = $jinput->getString($key,0);
|
|
if ($new_entry || empty($update_keys[$key])) {
|
|
$query = 'INSERT INTO #__tabulizer_user_preferences (`user_id`, `key`, `value`) VALUES ('.$user_id.','.$db->quote($key).','.$db->quote($value).')';
|
|
} else {
|
|
$query = 'UPDATE #__tabulizer_user_preferences SET `value` = '.$db->quote($value).' WHERE `user_id` = '.$user_id .' AND `key` = '. $db->quote($key);
|
|
}
|
|
$queries[] = $query;
|
|
}
|
|
|
|
foreach ($queries as $query) {
|
|
$db->setQuery($query);
|
|
if (defined('JOOMLA_3_MODE')) {
|
|
if (!$db->execute()) {
|
|
$error_msg = JText::_('COM_TABULIZER_USER_PREFERENCES_DB_SAVE_ERROR');
|
|
return false;
|
|
}
|
|
} else {
|
|
if (!$db->query()) {
|
|
$error_msg = JText::_('COM_TABULIZER_USER_PREFERENCES_DB_SAVE_ERROR') . $db->getErrorMsg();
|
|
return false;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
function loadAccessPermissions(&$error_msg) {
|
|
// placeholder for other platforms
|
|
}
|
|
|
|
function saveAccessPermissions(&$error_msg) {
|
|
// placeholder for other platforms
|
|
}
|
|
|
|
function getAccessPermissions() {
|
|
return $this->user_permissions;
|
|
}
|
|
|
|
function loadDataSources($limit, $limitstart, &$error_msg) {
|
|
$jinput = JFactory::getApplication()->input;
|
|
$option = $jinput->getCmd('option');
|
|
$db = JFactory::getDbo();
|
|
|
|
$query = 'SELECT * FROM #__tabulizer_data_sources LIMIT '.intval($limitstart).', '.intval($limit);
|
|
$db->setQuery($query);
|
|
$rows = $db->loadObjectList();
|
|
if (!empty($rows)) {
|
|
foreach ($rows as $row) {
|
|
if (!empty($row->key)) {
|
|
$data_sources[$row->key] = $row->value;
|
|
}
|
|
}
|
|
} else {
|
|
$error_msg = JText::_('COM_TABULIZER_DATA_SOURCES_DB_LOAD_ERROR');
|
|
return false;
|
|
}
|
|
|
|
$this->data_sources = $data_sources;
|
|
return true;
|
|
}
|
|
|
|
function getDataSources() {
|
|
return $this->data_sources;
|
|
}
|
|
|
|
function saveDataSource(&$error_msg) {
|
|
$db = JFactory::getDbo();
|
|
$user = JFactory::getUser();
|
|
$jinput = JFactory::getApplication()->input;
|
|
|
|
if ($user->guest) {
|
|
$error_msg = JText::_('COM_TABULIZER_DATA_SOURCES_NOT_LOGGED_ERROR');
|
|
return false;
|
|
}
|
|
$user_id = $user->id;
|
|
|
|
$id = $jinput->getInt('ds_id', null);
|
|
$tag = $jinput->getString('ds_tag', null);
|
|
$source_type = $jinput->getString('ds_source_type', null);
|
|
$source_params = $jinput->getString('ds_source_params', null);
|
|
|
|
$new_entry = (empty($id))?true:false;
|
|
|
|
if (empty($tag)||empty($source_type)||empty($source_params)) {
|
|
$error_msg = JText::_('COM_TABULIZER_DATA_SOURCES_INVALID_PARAMS_ERROR');
|
|
return false;
|
|
}
|
|
|
|
if ($new_entry) {
|
|
$query = 'INSERT INTO #__tabulizer_data_sources (`tag`, `source_type`, `source_params`) VALUES ('.$db->quote($tag).','.$db->quote($source_type).','.$db->quote($source_params).')';
|
|
} else {
|
|
$query = 'UPDATE #__tabulizer_data_sources SET `tag` = '.$db->quote($tag).', `source_type`='.$db->quote($source_type).', `source_params`='.$db->quote($source_params);
|
|
}
|
|
|
|
$db->setQuery($query);
|
|
if (defined('JOOMLA_3_MODE')) {
|
|
if (!$db->execute()) {
|
|
$error_msg = JText::_('COM_TABULIZER_DATA_SOURCES_DB_SAVE_ERROR') . $db->getErrorMsg();
|
|
return false;
|
|
}
|
|
} else {
|
|
if (!$db->query()) {
|
|
$error_msg = JText::_('COM_TABULIZER_DATA_SOURCES_DB_SAVE_ERROR') . $db->getErrorMsg();
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
function loadStatus() {
|
|
TabulizerInfo::getSystemStatus($this->system_status);
|
|
}
|
|
|
|
function getStatus() {
|
|
return $this->system_status;
|
|
}
|
|
|
|
function exportRulesetArchivesSkeletonCSSCode($export_archive_filenames = array()) {
|
|
/* obsolete code */
|
|
return $this->css_code;
|
|
}
|
|
|
|
function getRulesetArchivesSkeletonCSSCode() {
|
|
return $this->css_code;
|
|
}
|
|
|
|
}
|
|
?>
|