540 lines
27 KiB
PHP
540 lines
27 KiB
PHP
<?php
|
|
/**
|
|
* @package Tabulizer
|
|
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
|
|
**/
|
|
|
|
defined('_JEXEC') or die('Restricted access');
|
|
|
|
jimport('joomla.installer.installer');
|
|
jimport('joomla.installer.helper');
|
|
jimport('joomla.version');
|
|
|
|
class tabulizerInstallHelper {
|
|
private $app = null;
|
|
private $db = null;
|
|
private $parent = null;
|
|
private $status = null;
|
|
private $legacy = false;
|
|
|
|
public function __construct() {
|
|
$this->app = JFactory::getApplication();
|
|
$this->db = JFactory::getDBO();
|
|
|
|
$this->status = new JObject();
|
|
$this->status->plugins = array();
|
|
$this->status->extra = array();
|
|
$this->status->texts = array();
|
|
$this->status->operation = '';
|
|
}
|
|
|
|
private function executeQuery($query) {
|
|
$this->db->setQuery($query);
|
|
if (version_compare(JVERSION, '3', 'ge')) {
|
|
$this->db->execute();
|
|
} else {
|
|
$this->db->query();
|
|
}
|
|
}
|
|
|
|
private function setParent($parent) {
|
|
if (!$this->parent) {
|
|
$this->parent = $parent->getParent();
|
|
$this->manifest = $this->parent->getManifest();
|
|
}
|
|
$this->status->src = $this->parent->getPath('source');
|
|
$this->status->trg = $this->parent->getPath('extension_administrator');
|
|
|
|
$lang = JFactory::getLanguage();
|
|
$lang->load('com_tabulizer',JPATH_ADMINISTRATOR);
|
|
}
|
|
|
|
private function installPlugins() {
|
|
|
|
$plugins = &$this->manifest->plugins;
|
|
if (is_array($plugins)) $plugins = &$plugins[0];
|
|
if (isset($plugins)) {
|
|
$attributes = $plugins->attributes();
|
|
$folder = isset($attributes['folder']) ? $attributes['folder'] : 'plugins';
|
|
foreach ($plugins->children() as $plugin) {
|
|
$attributes = $plugin->attributes();
|
|
$name = isset($attributes['plugin']) ? $attributes['plugin'] : '';
|
|
$group = isset($attributes['group']) ? $attributes['group'] : '';
|
|
if (!empty($name) && !empty($group)) {
|
|
$path = $this->status->src.DIRECTORY_SEPARATOR.$folder.DIRECTORY_SEPARATOR.$group.DIRECTORY_SEPARATOR.$name;
|
|
$query = "SELECT 1 FROM #__extensions WHERE type='plugin' and element=".$this->db->Quote($name)." AND folder=".$this->db->Quote($group);
|
|
$this->db->setQuery($query);
|
|
$installed = $this->db->loadResult();
|
|
|
|
$installer = new JInstaller;
|
|
$result = $installer->install($path);
|
|
if ($result) {
|
|
if ($installed) $text_result = JText::_('COM_TABULIZER_INSTALL_UPDATED');
|
|
else $text_result = JText::_('COM_TABULIZER_INSTALL_INSTALLED');
|
|
} else {
|
|
if ($installed) $text_result = JText::_('COM_TABULIZER_INSTALL_NOT_UPDATED');
|
|
else $text_result = JText::_('COM_TABULIZER_INSTALL_NOT_INSTALLED');
|
|
}
|
|
$this->status->plugins[] = array('name'=>$name, 'group'=>$group, 'result'=>$result, 'text_result'=>$text_result);
|
|
|
|
if (!$installed) {
|
|
$query = "UPDATE #__extensions SET enabled=1 WHERE type='plugin' and element=".$this->db->Quote($name)." AND folder=".$this->db->Quote($group);
|
|
$this->executeQuery($query);
|
|
|
|
if (($name == 'tabulizercsslegacy') && ($group=='system') && (!$this->legacy)) {
|
|
$query = "UPDATE #__extensions SET enabled=0 WHERE type='plugin' and element=".$this->db->Quote($name)." AND folder=".$this->db->Quote($group);
|
|
$this->executeQuery($query);
|
|
}
|
|
|
|
if (($name == 'tabulizerds') && ($group=='search')) {
|
|
$query = "UPDATE #__extensions SET enabled=0 WHERE type='plugin' and element=".$this->db->Quote($name)." AND folder=".$this->db->Quote($group);
|
|
$this->executeQuery($query);
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public function install($parent) {
|
|
$this->setParent($parent);
|
|
|
|
$this->status->operation = 'install';
|
|
$this->status->texts['ok'] = JText::_('COM_TABULIZER_INSTALL_INSTALLED');
|
|
$this->status->texts['ko'] = JText::_('COM_TABULIZER_INSTALL_NOT_INSTALLED');
|
|
$this->status->texts['heading'] = JText::_('COM_TABULIZER_INSTALL_INSTALL_HEADING');
|
|
|
|
$this->prepareTabulizerInstallation();
|
|
|
|
$this->installDatabaseTables();
|
|
|
|
$this->installPlugins();
|
|
}
|
|
|
|
private function uninstallPlugins() {
|
|
$plugins = &$this->manifest->plugins;
|
|
if (is_array($plugins)) $plugins = &$plugins[0];
|
|
if (isset($plugins)) {
|
|
foreach ($plugins->children() as $plugin) {
|
|
$attributes = $plugin->attributes();
|
|
$name = isset($attributes['plugin']) ? $attributes['plugin'] : '';
|
|
$group = isset($attributes['group']) ? $attributes['group'] : '';
|
|
if (!empty($name) && !empty($group)) {
|
|
$query = "SELECT extension_id FROM #__extensions WHERE type='plugin' and folder=".$this->db->Quote($group)." and element=".$this->db->Quote($name)."";
|
|
$this->db->setQuery($query);
|
|
$db_plugins = $this->db->loadObjectList();
|
|
$result = false;
|
|
if (count($db_plugins)) {
|
|
$result = true;
|
|
foreach ($db_plugins as $db_plugin) {
|
|
$installer = new JInstaller;
|
|
$result = $installer->uninstall('plugin', $db_plugin->extension_id, 0) && $result;
|
|
}
|
|
}
|
|
if ($result) $text_result = JText::_('COM_TABULIZER_INSTALL_REMOVED');
|
|
else $text_result = JText::_('COM_TABULIZER_INSTALL_NOT_REMOVED');
|
|
$this->status->plugins[] = array ('name'=>$name, 'group'=>$group, 'result'=>$result, 'text_result'=>$text_result);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
This is a Tabulizer only process that takes care of two things:
|
|
1. Creates the joomla library folder specific for Tabulizer, if it does not exist.
|
|
2. Checks to see if a previous (legacy) installation has rules and css files that need to be moved to the Tabulizer library folder
|
|
*/
|
|
private function prepareTabulizerInstallation() {
|
|
$library_path = JPATH_SITE .DIRECTORY_SEPARATOR. 'templates' .DIRECTORY_SEPARATOR. 'tabulizer';
|
|
|
|
# new directories that need to be created
|
|
$new_directories = array(
|
|
$library_path,
|
|
$library_path .DIRECTORY_SEPARATOR. 'rules',
|
|
$library_path .DIRECTORY_SEPARATOR. 'css',
|
|
$library_path .DIRECTORY_SEPARATOR. 'images',
|
|
$library_path .DIRECTORY_SEPARATOR. 'calc',
|
|
$library_path .DIRECTORY_SEPARATOR. 'modify',
|
|
$library_path .DIRECTORY_SEPARATOR. 'graph',
|
|
$library_path .DIRECTORY_SEPARATOR. 'js',
|
|
$library_path .DIRECTORY_SEPARATOR. 'language',
|
|
$library_path .DIRECTORY_SEPARATOR. 'htc',
|
|
$library_path .DIRECTORY_SEPARATOR. 'docs',
|
|
$library_path .DIRECTORY_SEPARATOR. 'themes',
|
|
$library_path .DIRECTORY_SEPARATOR. 'datasources',
|
|
$library_path .DIRECTORY_SEPARATOR. 'data',
|
|
$library_path .DIRECTORY_SEPARATOR. 'uploads',
|
|
$library_path .DIRECTORY_SEPARATOR. 'legacy', $library_path .DIRECTORY_SEPARATOR. 'legacy' .DIRECTORY_SEPARATOR. 'rules', $library_path .DIRECTORY_SEPARATOR. 'legacy' .DIRECTORY_SEPARATOR. 'css', $library_path .DIRECTORY_SEPARATOR. 'legacy' .DIRECTORY_SEPARATOR. 'images'
|
|
);
|
|
|
|
#some of them may already exists, so check for their existance before creating them
|
|
foreach ($new_directories as $new_directory) {
|
|
if (!file_exists($new_directory)) {
|
|
$result = @mkdir($new_directory, 0755, true);
|
|
if (!$result) {
|
|
$this->status->extra[] = array('name'=>JText::_('COM_TABULIZER_INSTALL_LIBRARY'),'result'=>false, 'text_result'=> JText::_('COM_TABULIZER_INSTALL_NOT_CREATED'));
|
|
$msg = sprintf(JText::_('COM_TABULIZER_INSTALL_WRONG_DIR_PERMISSIONS'),$new_directory);
|
|
JFactory::getApplication()->enqueueMessage($msg, 'warning');
|
|
return false;
|
|
}
|
|
$this->status->extra[] = array('name'=>JText::_('COM_TABULIZER_INSTALL_LIBRARY'),'result'=>true, 'text_result'=> JText::_('COM_TABULIZER_INSTALL_CREATED'));
|
|
}
|
|
}
|
|
|
|
# check to see if you need to move rulesets compatible with Tabulizer 2.5 to the new location
|
|
$old_library_path = JPATH_LIBRARIES .DIRECTORY_SEPARATOR. 'alterora/tabulizer';
|
|
$old_library_dirs = array($old_library_path.DIRECTORY_SEPARATOR. 'rules' => $library_path .DIRECTORY_SEPARATOR. 'rules',
|
|
$old_library_path.DIRECTORY_SEPARATOR. 'css' => $library_path .DIRECTORY_SEPARATOR. 'css',
|
|
$old_library_path.DIRECTORY_SEPARATOR. 'images' => $library_path .DIRECTORY_SEPARATOR. 'images');
|
|
foreach ($old_library_dirs as $old_dir => $new_dir) {
|
|
if (file_exists($old_dir)) {
|
|
$old_moved = true;
|
|
// copy all files
|
|
if ($handle = opendir($old_dir)) {
|
|
while (false !== ($entry = readdir($handle))) {
|
|
if (($entry != '.') && ($entry != '..')) {
|
|
$source_file = $old_dir .DIRECTORY_SEPARATOR. $entry;
|
|
$destination_file = $new_dir .DIRECTORY_SEPARATOR. $entry;
|
|
if (is_file($source_file) && !file_exists($destination_file)) {
|
|
$result = @copy($source_file, $destination_file);
|
|
if (!$result) {
|
|
$this->status->extra[] = array('name'=>JText::_('COM_TABULIZER_INSTALL_LIBRARY_OLD'),'result'=>false, 'text_result'=> JText::_('COM_TABULIZER_INSTALL_NOT_MOVED'));
|
|
$msg = sprintf(JText::_('COM_TABULIZER_INSTALL_WRONG_FILE_PERMISSIONS'),$destination_file);
|
|
JFactory::getApplication()->enqueueMessage($msg, 'warning');
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
closedir($handle);
|
|
}
|
|
}
|
|
}
|
|
|
|
# check to see if you need to create a legacy directory and activate the related system plugin
|
|
$legacy_dirs = array(JPATH_PLUGINS.DIRECTORY_SEPARATOR.'editors-xtd'.DIRECTORY_SEPARATOR. 'tabulizer' .DIRECTORY_SEPARATOR. 'tabulizer'.DIRECTORY_SEPARATOR. 'rules' => $library_path .DIRECTORY_SEPARATOR. 'legacy' .DIRECTORY_SEPARATOR. 'rules',
|
|
JPATH_PLUGINS.DIRECTORY_SEPARATOR.'editors-xtd'.DIRECTORY_SEPARATOR. 'tabulizer' .DIRECTORY_SEPARATOR. 'tabulizer'.DIRECTORY_SEPARATOR. 'css' => $library_path .DIRECTORY_SEPARATOR. 'legacy' .DIRECTORY_SEPARATOR. 'css',
|
|
JPATH_PLUGINS.DIRECTORY_SEPARATOR.'editors-xtd'.DIRECTORY_SEPARATOR. 'tabulizer' .DIRECTORY_SEPARATOR. 'tabulizer'.DIRECTORY_SEPARATOR. 'images' => $library_path .DIRECTORY_SEPARATOR. 'legacy' .DIRECTORY_SEPARATOR. 'images');
|
|
|
|
$legacy_moved = false;
|
|
|
|
foreach ($legacy_dirs as $legacy_dir => $new_dir) {
|
|
if (file_exists($legacy_dir)) {
|
|
$legacy_moved = true;
|
|
// copy all files
|
|
if ($handle = opendir($legacy_dir)) {
|
|
while (false !== ($entry = readdir($handle))) {
|
|
if (($entry != '.') && ($entry != '..')) {
|
|
$source_file = $legacy_dir .DIRECTORY_SEPARATOR. $entry;
|
|
$destination_file = $new_dir .DIRECTORY_SEPARATOR. $entry;
|
|
if (is_file($source_file) && !file_exists($destination_file)) {
|
|
$result = @copy($source_file, $destination_file);
|
|
if (!$result) {
|
|
$this->status->extra[] = array('name'=>JText::_('COM_TABULIZER_INSTALL_LIBRARY_LEGACY'),'result'=>false, 'text_result'=> JText::_('COM_TABULIZER_INSTALL_NOT_MOVED'));
|
|
$msg = sprintf(JText::_('COM_TABULIZER_INSTALL_WRONG_FILE_PERMISSIONS'),$destination_file);
|
|
JFactory::getApplication()->enqueueMessage($msg, 'warning');
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
closedir($handle);
|
|
}
|
|
} else if (file_exists($new_dir)) {
|
|
// check if the folder are empty
|
|
if ($handle = opendir($new_dir)) {
|
|
while (false !== ($entry = readdir($handle))) {
|
|
if (($entry != '.') && ($entry != '..')) {
|
|
$source_file = $new_dir .DIRECTORY_SEPARATOR. $entry;
|
|
if (is_file($source_file)){
|
|
$this->legacy = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
closedir($handle);
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($legacy_moved) {
|
|
$this->legacy = true;
|
|
$this->status->extra[] = array('name'=>JText::_('COM_TABULIZER_INSTALL_LIBRARY_LEGACY'),'result'=>true, 'text_result'=> JText::_('COM_TABULIZER_INSTALL_MOVED'));
|
|
}
|
|
|
|
# uninstall the Tabulizer legacy system CSS plugin (if present)
|
|
$name = 'tabulizercss';
|
|
$group = 'system';
|
|
$query = "SELECT extension_id FROM #__extensions WHERE type='plugin' and folder=".$this->db->Quote($group)." and element=".$this->db->Quote($name)."";
|
|
$this->db->setQuery($query);
|
|
$db_plugin = $this->db->loadResult();
|
|
if ($db_plugin) {
|
|
$installer = new JInstaller;
|
|
$result = $installer->uninstall('plugin', $db_plugin, 0);
|
|
if ($result) $text_result = JText::_('COM_TABULIZER_INSTALL_REMOVED');
|
|
else $text_result = JText::_('COM_TABULIZER_INSTALL_NOT_REMOVED');
|
|
$this->status->plugins[] = array ('name'=>$name, 'group'=>$group, 'result'=>$result, 'text_result'=>$text_result);
|
|
}
|
|
|
|
# uninstall the rest of plugins from previous installations (if present)
|
|
$plugins = &$this->manifest->plugins;
|
|
if (is_array($plugins)) $plugins = &$plugins[0];
|
|
if (isset($plugins)) {
|
|
foreach ($plugins->children() as $plugin) {
|
|
$attributes = $plugin->attributes();
|
|
$name = isset($attributes['plugin']) ? $attributes['plugin'] : '';
|
|
$group = isset($attributes['group']) ? $attributes['group'] : '';
|
|
if (!empty($name) && !empty($group)) {
|
|
$query = "SELECT extension_id FROM #__extensions WHERE type='plugin' and folder=".$this->db->Quote($group)." and element=".$this->db->Quote($name)."";
|
|
$this->db->setQuery($query);
|
|
$db_plugins = $this->db->loadObjectList();
|
|
if (count($db_plugins)) {
|
|
$result = true;
|
|
foreach ($db_plugins as $db_plugin) {
|
|
$installer = new JInstaller;
|
|
$result = $installer->uninstall('plugin', $db_plugin->extension_id, 0) && $result;
|
|
}
|
|
if ($result) $text_result = JText::_('COM_TABULIZER_INSTALL_REMOVED');
|
|
else $text_result = JText::_('COM_TABULIZER_INSTALL_NOT_REMOVED');
|
|
$this->status->plugins[] = array ('name'=>$name, 'group'=>$group, 'result'=>$result, 'text_result'=>$text_result);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
private function installDatabaseTables() {
|
|
$query = 'CREATE TABLE IF NOT EXISTS #__tabulizer_user_preferences ( `user_id` int(11) NOT NULL, `key` varchar(63) NOT NULL, `value` varchar(255) NOT NULL, PRIMARY KEY (`user_id`,`key`)) ENGINE=InnoDB DEFAULT CHARSET=utf8';
|
|
$this->executeQuery($query);
|
|
|
|
$query = 'CREATE TABLE IF NOT EXISTS #__tabulizer_user_permissions (`action` varchar(255) NOT NULL, `roles` varchar(255) NOT NULL, PRIMARY KEY (`action`)) ENGINE=InnoDB DEFAULT CHARSET=utf8';
|
|
$this->executeQuery($query);
|
|
|
|
$query = 'CREATE TABLE IF NOT EXISTS `#__tabulizer_data_source` (`id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `tag` varchar(255) NOT NULL, `source_type` varchar(24) NOT NULL, `source_params` text NOT NULL, `cache_type` int(11) NOT NULL DEFAULT \'0\', `cache_time` int(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `tag` (`tag`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1';
|
|
$this->executeQuery($query);
|
|
|
|
$query = 'DROP TABLE IF EXISTS `#__tabulizer_data_source_cache`';
|
|
$this->executeQuery($query);
|
|
$query = 'CREATE TABLE IF NOT EXISTS `#__tabulizer_data_source_cache` (`cache_id` int(11) NOT NULL, `row_start` int(11) NOT NULL, `num_of_rows` int(11) NOT NULL, `num_of_columns` int(11) NOT NULL, `contents` mediumtext NOT NULL, PRIMARY KEY (`cache_id`,`row_start`)) ENGINE=InnoDB DEFAULT CHARSET=utf8';
|
|
$this->executeQuery($query);
|
|
|
|
$query = 'DROP TABLE IF EXISTS `#__tabulizer_data_source_cache_key_map`';
|
|
$this->executeQuery($query);
|
|
$query = 'CREATE TABLE IF NOT EXISTS `#__tabulizer_data_source_cache_key_map` (`cache_key` varchar(255) NOT NULL, `cache_id` bigint(20) unsigned NOT NULL, `cache_properties` varchar(255) DEFAULT NULL, `cache_expiration` int(11) DEFAULT NULL, `tag` varchar(255) NOT NULL, PRIMARY KEY (`cache_key`)) ENGINE=InnoDB DEFAULT CHARSET=utf8';
|
|
$this->executeQuery($query);
|
|
|
|
$query = 'DROP TABLE IF EXISTS `#__tabulizer_data_source_cache_properties`';
|
|
$this->executeQuery($query);
|
|
$query = 'CREATE TABLE IF NOT EXISTS `#__tabulizer_data_source_cache_properties` ( `id` int(11) NOT NULL, `cache_id` int(11) NOT NULL, `part_id` int(11) NOT NULL, `part_contents` mediumtext NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;';
|
|
$this->executeQuery($query);
|
|
|
|
$query = 'DROP TABLE IF EXISTS `#__tabulizer_data_source_publishing_preferences`';
|
|
$this->executeQuery($query);
|
|
$query = 'CREATE TABLE IF NOT EXISTS `#__tabulizer_data_source_publishing_preferences` ( `id` int(11) NOT NULL AUTO_INCREMENT, `tag` varchar(255) NOT NULL, `status` int(11) NOT NULL DEFAULT \'0\', `mode` varchar(16) NOT NULL, `keyphrases` text, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;';
|
|
$this->executeQuery($query);
|
|
}
|
|
|
|
private function updateDatabaseTables() {
|
|
$query = 'CREATE TABLE IF NOT EXISTS #__tabulizer_user_preferences ( `user_id` int(11) NOT NULL, `key` varchar(63) NOT NULL, `value` varchar(255) NOT NULL, PRIMARY KEY (`user_id`,`key`)) ENGINE=InnoDB DEFAULT CHARSET=utf8';
|
|
$this->executeQuery($query);
|
|
|
|
$query = 'CREATE TABLE IF NOT EXISTS #__tabulizer_user_permissions (`action` varchar(255) NOT NULL, `roles` varchar(255) NOT NULL, PRIMARY KEY (`action`)) ENGINE=InnoDB DEFAULT CHARSET=utf8';
|
|
$this->executeQuery($query);
|
|
|
|
$query = 'CREATE TABLE IF NOT EXISTS `#__tabulizer_data_source` (`id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `tag` varchar(255) NOT NULL, `source_type` varchar(24) NOT NULL, `source_params` text NOT NULL, `cache_type` int(11) NOT NULL DEFAULT \'0\', `cache_time` int(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `tag` (`tag`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1';
|
|
$this->executeQuery($query);
|
|
|
|
$query = 'DROP TABLE IF EXISTS `#__tabulizer_data_source_cache`';
|
|
$this->executeQuery($query);
|
|
$query = 'CREATE TABLE IF NOT EXISTS `#__tabulizer_data_source_cache` (`cache_id` int(11) NOT NULL, `row_start` int(11) NOT NULL, `num_of_rows` int(11) NOT NULL, `num_of_columns` int(11) NOT NULL, `contents` mediumtext NOT NULL, PRIMARY KEY (`cache_id`,`row_start`)) ENGINE=InnoDB DEFAULT CHARSET=utf8';
|
|
$this->executeQuery($query);
|
|
|
|
$query = 'DROP TABLE IF EXISTS `#__tabulizer_data_source_cache_key_map`';
|
|
$this->executeQuery($query);
|
|
$query = 'CREATE TABLE IF NOT EXISTS `#__tabulizer_data_source_cache_key_map` (`cache_key` varchar(255) NOT NULL, `cache_id` bigint(20) unsigned NOT NULL, `cache_properties` varchar(255) DEFAULT NULL, `cache_expiration` int(11) DEFAULT NULL, `tag` varchar(255) NOT NULL, PRIMARY KEY (`cache_key`)) ENGINE=InnoDB DEFAULT CHARSET=utf8';
|
|
$this->executeQuery($query);
|
|
|
|
$query = 'DROP TABLE IF EXISTS `#__tabulizer_data_source_cache_properties`';
|
|
$this->executeQuery($query);
|
|
$query = 'CREATE TABLE IF NOT EXISTS `#__tabulizer_data_source_cache_properties` ( `id` int(11) NOT NULL, `cache_id` int(11) NOT NULL, `part_id` int(11) NOT NULL, `part_contents` mediumtext NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;';
|
|
$this->executeQuery($query);
|
|
|
|
$query = 'DROP TABLE IF EXISTS `#__tabulizer_data_source_publishing_preferences`';
|
|
$this->executeQuery($query);
|
|
$query = 'CREATE TABLE IF NOT EXISTS `#__tabulizer_data_source_publishing_preferences` ( `id` int(11) NOT NULL AUTO_INCREMENT, `tag` varchar(255) NOT NULL, `status` int(11) NOT NULL DEFAULT \'0\', `mode` varchar(16) NOT NULL, `keyphrases` text, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;';
|
|
$this->executeQuery($query);
|
|
}
|
|
|
|
private function uninstallDatabaseTables() {
|
|
$query = 'DROP TABLE IF EXISTS #__tabulizer_user_preferences';
|
|
$this->executeQuery($query);
|
|
|
|
$query = 'CREATE TABLE IF NOT EXISTS #__tabulizer_user_permissions (`action` varchar(255) NOT NULL, `roles` varchar(255) NOT NULL, PRIMARY KEY (`action`)) ENGINE=InnoDB DEFAULT CHARSET=utf8';
|
|
$this->executeQuery($query);
|
|
|
|
$query = 'DROP TABLE IF EXISTS `#__tabulizer_data_source`';
|
|
$this->executeQuery($query);
|
|
|
|
$query = 'DROP TABLE IF EXISTS `#__tabulizer_data_source_cache`';
|
|
$this->executeQuery($query);
|
|
|
|
$query = 'DROP TABLE IF EXISTS `#__tabulizer_data_source_cache_key_map`';
|
|
$this->executeQuery($query);
|
|
|
|
$query = 'DROP TABLE IF EXISTS `#__tabulizer_data_source_cache_properties`';
|
|
$this->executeQuery($query);
|
|
|
|
$query = 'DROP TABLE IF EXISTS `#__tabulizer_data_source_publishing_preferences`';
|
|
$this->executeQuery($query);
|
|
}
|
|
|
|
private function installNewRulesets() {
|
|
$library_path = JPATH_SITE .DIRECTORY_SEPARATOR. 'templates' .DIRECTORY_SEPARATOR. 'tabulizer';
|
|
|
|
# install new rulesets that came with the installation distribution (may override previous ones)
|
|
$installation_rulesets_dir = JPATH_ADMINISTRATOR .DIRECTORY_SEPARATOR. 'components/com_tabulizer/assets/rulesets/';
|
|
|
|
$installation_dirs = array(
|
|
$installation_rulesets_dir . 'rules' => $library_path .DIRECTORY_SEPARATOR. 'rules',
|
|
$installation_rulesets_dir . 'css' => $library_path .DIRECTORY_SEPARATOR. 'css',
|
|
$installation_rulesets_dir . 'images' => $library_path .DIRECTORY_SEPARATOR. 'images',
|
|
$installation_rulesets_dir . 'calc' => $library_path .DIRECTORY_SEPARATOR. 'calc',
|
|
$installation_rulesets_dir . 'modify' => $library_path .DIRECTORY_SEPARATOR. 'modify',
|
|
$installation_rulesets_dir . 'graph' => $library_path .DIRECTORY_SEPARATOR. 'graph',
|
|
$installation_rulesets_dir . 'js' => $library_path .DIRECTORY_SEPARATOR. 'js',
|
|
$installation_rulesets_dir . 'language' => $library_path .DIRECTORY_SEPARATOR. 'language',
|
|
$installation_rulesets_dir . 'htc' => $library_path .DIRECTORY_SEPARATOR. 'htc',
|
|
$installation_rulesets_dir . 'docs' => $library_path .DIRECTORY_SEPARATOR. 'docs',
|
|
$installation_rulesets_dir . 'themes' => $library_path .DIRECTORY_SEPARATOR. 'themes',
|
|
$installation_rulesets_dir . 'datasources' => $library_path .DIRECTORY_SEPARATOR. 'datasources',
|
|
$installation_rulesets_dir . 'data' => $library_path .DIRECTORY_SEPARATOR. 'data',
|
|
$installation_rulesets_dir . 'uploads' => $library_path .DIRECTORY_SEPARATOR. 'uploads'
|
|
);
|
|
|
|
$new_moved = false;
|
|
foreach ($installation_dirs as $installation_dir => $new_dir) {
|
|
if (file_exists($installation_dir)) {
|
|
$new_moved = true;
|
|
// copy all files
|
|
if ($handle = opendir($installation_dir)) {
|
|
while (false !== ($entry = readdir($handle))) {
|
|
if (($entry != '.') && ($entry != '..')) {
|
|
$source_file = $installation_dir .DIRECTORY_SEPARATOR. $entry;
|
|
$destination_file = $new_dir .DIRECTORY_SEPARATOR. $entry;
|
|
if (is_file($source_file) && !file_exists($destination_file)) {
|
|
$result = @copy($source_file, $destination_file);
|
|
if (!$result) {
|
|
$this->status->extra[] = array('name'=>JText::_('COM_TABULIZER_INSTALL_NEW_RULESETS'),'result'=>false, 'text_result'=> JText::_('COM_TABULIZER_INSTALL_NOT_INSTALLED'));
|
|
$msg = sprintf(JText::_('COM_TABULIZER_INSTALL_WRONG_FILE_PERMISSIONS'),$destination_file);
|
|
JFactory::getApplication()->enqueueMessage($msg, 'warning');
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
closedir($handle);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
if ($new_moved) {
|
|
$this->status->extra[] = array('name'=>JText::_('COM_TABULIZER_INSTALL_NEW_RULESETS'),'result'=>true, 'text_result'=> JText::_('COM_TABULIZER_INSTALL_INSTALLED'));
|
|
}
|
|
|
|
}
|
|
|
|
public function uninstall($parent) {
|
|
$this->setParent($parent);
|
|
|
|
$this->status->operation = 'uninstall';
|
|
$this->status->texts['ok'] = JText::_('COM_TABULIZER_INSTALL_REMOVED');
|
|
$this->status->texts['ko'] = JText::_('COM_TABULIZER_INSTALL_NOT_REMOVED');
|
|
$this->status->texts['heading'] = JText::_('COM_TABULIZER_INSTALL_UNINSTALL_HEADING');
|
|
|
|
$this->uninstallDatabaseTables();
|
|
|
|
$this->uninstallPlugins();
|
|
|
|
$this->displayStatus();
|
|
}
|
|
|
|
public function update($parent) {
|
|
$this->setParent($parent);
|
|
|
|
$this->status->operation = 'update';
|
|
$this->status->texts['ok'] = JText::_('COM_TABULIZER_INSTALL_UPDATED');
|
|
$this->status->texts['ko'] = JText::_('COM_TABULIZER_INSTALL_NOT_UPDATED');
|
|
$this->status->texts['heading'] = JText::_('COM_TABULIZER_INSTALL_UPDATE_HEADING');
|
|
|
|
$this->prepareTabulizerInstallation();
|
|
|
|
$this->updateDatabaseTables();
|
|
|
|
$this->installPlugins();
|
|
}
|
|
|
|
public function postflight($type, $parent) {
|
|
$this->installNewRulesets();
|
|
$this->displayStatus();
|
|
}
|
|
|
|
private function displayStatus() {
|
|
$k = 0;
|
|
$status = &$this->status;
|
|
?>
|
|
<h2><?php echo $status->texts['heading']; ?></h2>
|
|
<table class="table table-striped" id="itemList">
|
|
<thead>
|
|
<tr>
|
|
<th class="title" colspan="2"><?php echo JText::_('COM_TABULIZER_INSTALL_EXTENSION'); ?></th>
|
|
<th width="30%" align="center"><?php echo JText::_('COM_TABULIZER_INSTALL_STATUS'); ?></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="row0">
|
|
<td class="key" colspan="2"><?php echo JText::_('COM_TABULIZER_INSTALL_COMPONENT'); ?></td>
|
|
<td><strong style="color: green;"><?php echo $status->texts['ok']; ?></strong></td>
|
|
</tr>
|
|
<?php if (count($status->plugins)) { ?>
|
|
<tr class="row<?php echo (++$k % 2); ?>">
|
|
<th><?php echo JText::_('COM_TABULIZER_INSTALL_PLUGIN'); ?></th>
|
|
<th><?php echo JText::_('COM_TABULIZER_INSTALL_GROUP'); ?></th>
|
|
<th> </th>
|
|
</tr>
|
|
<?php foreach ($status->plugins as $plugin) { ?>
|
|
<tr class="row<?php echo (++$k % 2); ?>">
|
|
<td class="key"><?php echo $plugin['name']; ?></td>
|
|
<td class="key"><?php echo $plugin['group']; ?></td>
|
|
<td><strong style="color: <?php echo ($plugin['result']) ? 'green' : 'red' ?>;"><?php echo $plugin['text_result']; ?></strong></td>
|
|
</tr>
|
|
<?php } ?>
|
|
<?php } ?>
|
|
<?php if (count($status->extra)) { ?>
|
|
<tr class="row<?php echo (++$k % 2); ?>">
|
|
<th colspan=2><?php echo JText::_('COM_TABULIZER_INSTALL_EXTRA'); ?></th>
|
|
<th> </th>
|
|
</tr>
|
|
<?php foreach ($status->extra as $extra) { ?>
|
|
<tr class="row<?php echo (++$k % 2); ?>">
|
|
<td class="key" colspan="2"><?php echo $extra['name']; ?></td>
|
|
<td><strong style="color: <?php echo ($extra['result']) ? 'green' : 'red' ?>;"><?php echo $extra['text_result']; ?></strong></td>
|
|
</tr>
|
|
<?php } ?>
|
|
<?php } ?>
|
|
</tbody>
|
|
</table>
|
|
<?php
|
|
if ($status->operation != 'uninstall') {
|
|
$lang = JFactory::getLanguage();
|
|
if (JFile::exists($status->trg.DIRECTORY_SEPARATOR.'install'.DIRECTORY_SEPARATOR.'notes'.DIRECTORY_SEPARATOR.$lang->getTag().'.php'))
|
|
require($status->trg.DIRECTORY_SEPARATOR.'install'.DIRECTORY_SEPARATOR.'notes'.DIRECTORY_SEPARATOR.$lang->getTag().'.php');
|
|
elseif (JFile::exists($status->trg.DIRECTORY_SEPARATOR.'install'.DIRECTORY_SEPARATOR.'notes'.DIRECTORY_SEPARATOR.'en-GB.php'))
|
|
require($status->trg.DIRECTORY_SEPARATOR.'install'.DIRECTORY_SEPARATOR.'notes'.DIRECTORY_SEPARATOR.'en-GB.php');
|
|
}
|
|
}
|
|
}
|
|
?>
|