Current Path : /var/www/html/clients/kampol.e-nk.ru/administrator/components/com_jce/ |
Current File : /var/www/html/clients/kampol.e-nk.ru/administrator/components/com_jce/updater.php |
<?php /** * @version $Id: updater.php 116 2009-06-23 11:32:04Z happynoodleboy $ * @package JCE Component * @copyright Copyright (C) 2006 - 2009 Ryan Demmer. All rights reserved. * @license GNU/GPL * JCE is free software. This version may have been modified pursuant * to the GNU General Public License, and as distributed it includes or * is derivative of works licensed under the GNU General Public License or * other free or open source software licenses. */ class JCEUpdater extends JObject { /** * Constructor activating the default information of the class * * @access protected */ function __construct() { $language =& JFactory::getLanguage(); $language->load('com_jce', JPATH_ADMINISTRATOR); } /** * Returns a reference to a editor object * * This method must be invoked as: * <pre> $browser = &JContentEditor::getInstance();</pre> * * @access public * @return JCE The editor object. * @since 1.5 */ function &getInstance() { static $instance; if (!is_object($instance)) { $instance = new JCEUpdater(); } return $instance; } /** * Check upgrade / database status */ function initCheck() { global $mainframe; // Check Plugins DB if (!$this->checkTable('plugins')) { $link = JHTML::link('index.php?option=com_jce&task=repair&type=plugins', JText::_('DB CREATE RESTORE')); return $this->redirect(JText::_('DB PLUGINS ERROR') .' - '. $link, 'error'); } // Check Groups DB if (!$this->checkTable('groups')) { $link = JHTML::link('index.php?option=com_jce&task=repair&type=groups', JText::_('DB CREATE RESTORE')); return $this->redirect(JText::_('DB GROUPS ERROR') .' - '. $link, 'error'); } // Check Editor is installed if (!$this->checkEditorFiles()) { return $this->redirect(JText::_('EDITOR FILES ERROR'), 'error'); } if (!$this->checkEditor() && $this->checkEditorFiles()) { $link = JHTML::link('index.php?option=com_jce&task=repair&type=editor', JText::_('EDITOR INSTALL')); return $this->redirect(JText::_('EDITOR INSTALLED MANUAL ERROR') .' - '. $link, 'error'); } // Check Editor is installed if (!$this->checkEditor()) { return $this->redirect(JText::_('EDITOR INSTALLED ERROR'), 'error'); } // Check Editor is enabled if (!$this->checkEditorEnabled()) { return $this->redirect(JText::_('EDITOR ENABLED ERROR'), 'error'); } if (!$this->checkEditorDefault()) { $mainframe->enqueueMessage(JText::_('EDITOR DEFAULT NOTICE'), 'notice'); } // Check Update if (!$this->checkUpdate()) { $link = JHTML::link('index.php?option=com_jce&task=repair&type=update', JText::_('DB UPDATE')); return $this->redirect(JText::_('DB UPDATE MSG') .' - '. $link, 'error'); } } /** * Redirect with message * @param object $msg[optional] Message to display * @param object $state[optional] Message type */ function redirect($msg = '', $state = '') { global $mainframe; if ($msg) { $mainframe->enqueueMessage($msg, $state); } JRequest::setVar('type', 'cpanel'); JRequest::setVar('task', ''); return false; } /** * Backup a table by renaming to [table_name]_tmp * @return boolean * @param string $table Table to backup */ function backupTable($table) { $db =& JFactory::getDBO(); // Table must exist if ($this->checkTable($table)) { // Check for tmp table if (!$this->checkTable($table . '_tmp')) { $query = 'RENAME TABLE #__jce_'. $table .' TO #__jce_'. $table .'_tmp'; $db->setQuery($query); return $db->query(); } return true; } else { return $this->checkTable($table . '_tmp'); } return false; } /** * Check whether a table exists * @return boolean * @param string $table Table name */ function checkTable($table) { $db =& JFactory::getDBO(); $query = 'SELECT COUNT(id) FROM #__jce_'. $table; $db->setQuery($query); return $db->loadResult(); } /** * Rename / Backup all tables */ function purgeDB() { global $mainframe; $db =& JFactory::getDBO(); $tables = array('plugins', 'extensions', 'groups'); foreach ($tables as $table) { // Backup table to temp. Will be removed on uninstall if (!$this->backupTable($table)) { $msg = JText::_('DB PURGE '. strtoupper($table) .' ERROR'); $state = 'error'; } else { $msg = JText::_('DB PURGE '. strtoupper($table) .' SUCCESS'); $state = ''; } $mainframe->enqueueMessage($msg, $state); } $this->redirect(); } /** * Check if all backup tables exist * @return boolean */ function purgeCheck() { $ret = false; $tables = array('plugins', 'extensions', 'groups'); foreach ($tables as $table) { $ret = $this->checkTable($table) && !$this->checkTable($table .'_tmp'); } return $ret; } /** * Remove all backup tables */ function cleanupDB() { $db =& JFactory::getDBO(); $tables = array('plugins', 'groups', 'extensions'); foreach ($tables as $table) { $query = 'DROP TABLE IF EXISTS #__jce_'. $table .'_tmp'; $db->setQuery($query); $db->query(); } } /** * Check for earlier version to trigger update * @return boolean */ function checkUpdate() { // Check for Readmore plugin indicates 1.5.0 global $mainframe; $db =& JFactory::getDBO(); $ret = false; $query = 'SELECT count(id)' . ' FROM #__jce_plugins' . ' WHERE name = '. $db->Quote('readmore') ; $db->setQuery($query); $ret = $db->loadResult() ? false : true; return $ret; } /** * Check whether the editor is installed * @return boolean */ function checkEditor() { $db =& JFactory::getDBO(); $query = 'SELECT id' . ' FROM #__plugins' . ' WHERE element = '. $db->Quote('jce') ; $db->setQuery($query); return $db->loadResult(); } /** * Check for existence of editor files and folder * @return boolean */ function checkEditorFiles() { $path = JPATH_PLUGINS .DS. 'editors'; // Check for JCE plugin files return file_exists($path .DS. 'jce.php') && file_exists($path .DS. 'jce.xml') && is_dir($path .DS. 'jce'); } /** * Check if the editor is enabled * @return boolean */ function checkEditorEnabled() { $db =& JFactory::getDBO(); $query = 'SELECT published FROM #__plugins' .' WHERE element = '. $db->Quote('jce') ; $db->setQuery($query); return $db->loadResult(); } /** * Check if the editor is set as the default wysiwyg * @return boolean */ function checkEditorDefault() { $conf =& JFactory::getConfig(); if (JRequest::getVar('type', 'cpanel') == 'cpanel') { return $conf->getValue('config.editor') == 'jce'; } return true; } /** * Format / escape an IN / NOT IN list * @return * @param object $list */ function dbList($list) { if (is_array($list)) { $ret = array(); foreach ($list as $item) { $ret[] = "'". $item ."'"; } return implode(',', $ret); } return $list; } /** * Update the JCE Tables * @return Redirect * @param object $install[optional] */ function updateDB($install = false) { global $mainframe; $db =& JFactory::getDBO(); // Create tmp tables if ($this->backupTable('plugins') && $this->backupTable('groups')) { // Update Plugins if ($this->updatePlugins()) { // Update Groups if (!$this->updateGroups()) { $mainframe->enqueueMessage(JText::_('UPDATE GROUPS ERROR'), 'error'); } } else { $mainframe->enqueueMessage(JText::_('UPDATE PLUGINS ERROR'), 'error'); } } else { // Unable to perform update! $mainframe->enqueueMessage(JText::_('UPDATE ERROR'), 'error'); } // Add Admin Menu options $query = "UPDATE #__components SET `admin_menu_img` = '../administrator/components/com_jce/img/logo.png'" . " WHERE link = " . $db->Quote('option=com_jce') ; $db->setQuery($query); if (!$db->query()) { $mainframe->enqueueMessage(JText::_('ADMIN MENU IMAGE ERROR'), 'error'); } if (!$install) { $this->redirect(); } } /** * Get an array of commands / plugins * @return array */ function getButtons() { $buttons = array( 'contextmenu' => array( 'title' => 'Context Menu', 'row' => 0 ), 'browser' => array( 'title' => 'File Browser', 'row' => 0, 'editable' => 1 ), 'inlinepopups' => array( 'title' => 'Inline Popups', 'row' => 0 ), 'media' => array( 'title' => 'Media Support', 'row' => 0, 'editable' => 1 ), 'safari' => array( 'title' => 'Safari Browser Support', 'row' => 0 ), 'help' => array( 'title' => 'Help', 'row' => 1 ), 'newdocument' => array( 'title' => 'New Document', 'row' => 1 ), 'bold' => array( 'title' => 'Bold', 'row' => 1 ), 'italic' => array( 'title' => 'Italic', 'row' => 1 ), 'underline' => array( 'title' => 'Underline', 'row' => 1 ), 'fontselect' => array( 'title' => 'Font Select', 'row' => 1 ), 'fontsizeselect' => array( 'title' => 'Font Size Select', 'row' => 1 ), 'styleselect' => array( 'title' => 'Style Select', 'row' => 1 ), 'strikethrough' => array( 'title' => 'StrikeThrough', 'row' => 1 ), 'full' => array( 'title' => 'Justify Full', 'row' => 1, 'icon' => 'justifyfull', 'layout'=> 'justifyfull' ), 'center' => array( 'title' => 'Justify Center', 'row' => 1, 'icon' => 'justifycenter', 'layout'=> 'justifycenter' ), 'left' => array( 'title' => 'Justify Left', 'row' => 1, 'icon' => 'justifyleft', 'layout'=> 'justifyleft' ), 'right' => array( 'title' => 'Justify Right', 'row' => 1, 'icon' => 'justifyright', 'layout'=> 'justifyright' ), 'formatselect' => array( 'title' => 'Format Select', 'row' => 1 ), 'paste' => array( 'title' => 'Paste', 'icon' => 'pasteword,pastetext', 'row' => 2, 'editable' => 1 ), 'searchreplace' => array( 'title' => 'Search Replace', 'icon' => 'search,replace', 'row' => 2 ), 'forecolor' => array( 'title' => 'Font ForeColour', 'row' => 2 ), 'backcolor' => array( 'title' => 'Font BackColour', 'row' => 2 ), 'unlink' => array( 'title' => 'Unlink', 'row' => 2 ), 'indent' => array( 'title' => 'Indent', 'row' => 2 ), 'outdent' => array( 'title' => 'Outdent', 'row' => 2 ), 'undo' => array( 'title' => 'Undo', 'row' => 2 ), 'redo' => array( 'title' => 'Redo', 'row' => 2 ), 'html' => array( 'title' => 'HTML', 'icon' => 'code', 'layout'=> 'code', 'row' => 2 ), 'numlist' => array( 'title' => 'Numbered List', 'row' => 2 ), 'bullist' => array( 'title' => 'Bullet List', 'row' => 2 ), 'clipboard' => array( 'title' => 'Clipboard Actions', 'icon' => 'cut,copy,paste', 'row' => 2 ), 'anchor' => array( 'title' => 'Anchor', 'row' => 2 ), 'image' => array( 'title' => 'Image', 'row' => 2 ), 'link' => array( 'title' => 'Link', 'row' => 2 ), 'cleanup' => array( 'title' => 'Code Cleanup', 'row' => 2 ), 'directionality' => array( 'title' => 'Directionality', 'icon' => 'ltr,rtl', 'row' => 3 ), 'emotions' => array( 'title' => 'Emotions', 'row' => 3 ), 'fullscreen' => array( 'title' => 'Fullscreen', 'row' => 3 ), 'preview' => array( 'title' => 'Preview', 'row' => 3 ), 'table' => array( 'title' => 'Tables', 'icon' => 'tablecontrols', 'layout'=> 'buttons', 'row' => 3 ), 'print' => array( 'title' => 'Print', 'row' => 3 ), 'hr' => array( 'title' => 'Horizontal Rule', 'row' => 3 ), 'sub' => array( 'title' => 'Subscript', 'row' => 3 ), 'sup' => array( 'title' => 'Superscript', 'row' => 3 ), 'visualaid' => array( 'title' => 'Visual Aid', 'row' => 3 ), 'charmap' => array( 'title' => 'Character Map', 'row' => 3 ), 'removeformat' => array( 'title' => 'Remove Format', 'row' => 3 ), 'style' => array( 'title' => 'Styles', 'icon' => 'styleprops', 'row' => 4 ), 'nonbreaking' => array( 'title' => 'Non-Breaking', 'row' => 4 ), 'visualchars' => array( 'title' => 'Visual Characters', 'row' => 4 ), 'xhtmlxtras' => array( 'title' => 'XHTML Xtras', 'icon' => 'cite,abbr,acronym,del,ins,attribs', 'row' => 4 ), 'imgmanager' => array( 'title' => 'Image Manager', 'row' => 4, 'editable' => 1 ), 'advlink' => array( 'title' => 'Advanced Link', 'row' => 4, 'editable' => 1 ), 'spellchecker' => array( 'title' => 'Spell Checker', 'row' => 4, 'editable' => 1 ), 'layer' => array( 'title' => 'Layers', 'icon' => 'insertlayer,moveforward,movebackward,absolute', 'row' => 4 ), 'advcode' => array( 'title' => 'Advanced Code Editor', 'row' => 4 ), 'article' => array( 'title' => 'Article Breaks', 'icon' => 'readmore,pagebreak', 'row' => 4 ) ); return $buttons; } /** * Create the Plugins table * @return boolean */ function createPluginsTable() { global $mainframe; $db =& JFactory::getDBO(); $query = "CREATE TABLE IF NOT EXISTS `#__jce_plugins` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `name` varchar(255) NOT NULL, `type` varchar(255) NOT NULL, `icon` varchar(255) NOT NULL, `layout` varchar(255) NOT NULL, `row` int(11) NOT NULL, `ordering` int(11) NOT NULL, `published` tinyint(3) NOT NULL, `editable` tinyint(3) NOT NULL, `iscore` tinyint(3) NOT NULL, `elements` varchar(255) NOT NULL, `checked_out` int(11) NOT NULL, `checked_out_time` datetime NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `plugin` (`name`) );"; $db->setQuery($query); if (!$db->query()) { $mainframe->enqueueMessage(JText::_('CREATE TABLE PLUGINS ERROR'), 'error'); return false; } else { return true; } } /** * Create the Plugin Extensions table * @return boolean */ function createExtensionsTable() { global $mainframe; $db =& JFactory::getDBO(); // Extensions $query = "CREATE TABLE IF NOT EXISTS `#__jce_extensions` ( `id` int(11) NOT NULL auto_increment, `pid` int(11) NOT NULL, `name` varchar(100) NOT NULL, `extension` varchar(255) NOT NULL, `folder` varchar(255) NOT NULL, `published` tinyint(3) NOT NULL, PRIMARY KEY (`id`) )"; $db->setQuery($query); if (!$db->query()) { $mainframe->enqueueMessage(JText::_('CREATE TABLE EXTENSIONS ERROR'), 'error'); return false; } else { return true; } } /** * Create the Groups table * @return boolean */ function createGroupsTable() { global $mainframe; $db =& JFactory::getDBO(); $query = "CREATE TABLE IF NOT EXISTS `#__jce_groups` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `description` varchar(255) NOT NULL, `users` text NOT NULL, `types` varchar(255) NOT NULL, `components` text NOT NULL, `rows` text NOT NULL, `plugins` varchar(255) NOT NULL, `published` tinyint(3) NOT NULL, `ordering` int(11) NOT NULL, `checked_out` tinyint(3) NOT NULL, `checked_out_time` datetime NOT NULL, `params` text NOT NULL, PRIMARY KEY (`id`) );"; $db->setQuery($query); if (!$db->query()) { $mainframe->enqueueMessage(JText::_('CREATE TABLE GROUPS ERROR'), 'error'); return false; } else { return true; } } /** * Install Groups * @return boolean * @param object $install[optional] */ function installGroups($install = false) { global $mainframe; $db =& JFactory::getDBO(); $ret = false; JTable::addIncludePath(JPATH_ADMINISTRATOR .DS. 'components' .DS. 'com_jce' .DS. 'groups'); if ($this->createGroupsTable()) { $ret = true; $query = 'SELECT count(id) FROM #__jce_groups'; $db->setQuery($query); $groups = array( 'Default' => false, 'Front End' => false ); // No Groups table data if (!$db->loadResult()) { // Exclude these. Will be removed in 1.6 $exclude = array('layer', 'image', 'link', 'html'); $query = 'SELECT id FROM #__jce_plugins' . ' WHERE type = '. $db->Quote('plugin') . ' AND name NOT IN ('. $this->dbList($exclude) .')' . ' AND published = 1'; $db->setQuery($query); $plugins = $db->loadResultArray(); $rows = array(); $query = 'SELECT DISTINCT row FROM #__jce_plugins WHERE row > 0'; $db->setQuery($query); $num = $db->loadResultArray(); foreach ($num as $n) { $query = 'SELECT id FROM #__jce_plugins WHERE row = '. $n .' AND name NOT IN ('. $this->dbList($exclude) .')'; $db->setQuery($query); $rows[] = implode(',', $db->loadResultArray()); } $row =& JTable::getInstance('groups', 'JCETable'); $row->name = 'Default'; $row->description = 'Default group for all users with edit access'; $row->types = '19,20,21,23,24,25'; $row->rows = implode(';', $rows); $row->plugins = implode(',', $plugins); $row->published = 1; $row->ordering = 1; $groups['Default'] = $row->store(); // TODO : Move this out to an xml file or something $row =& JTable::getInstance('groups', 'JCETable'); $tmpl = array( 'help,newdocument,undo,redo,bold,italic,underline,strikethrough,left,center,full,right,styleselect,formatselect', 'sub,sup,numlist,bullist,indent,outdent,hr,charmap,visualchars,nonbreaking,searchreplace,clipboard,paste,removeformat,cleanup', 'fullscreen,preview,print,visualaid,style,xhtmlxtras,anchor,unlink,advlink,imgmanager,spellchecker,advcode,article,contextmenu,safari,inlinepopups' ); $plugins = array(); $rows = array(); foreach ($tmpl as $item) { $query = 'SELECT id FROM #__jce_plugins WHERE name IN ('. $this->dbList(explode(',', $item)) .') AND row > 0'; $db->setQuery($query); $rows[] = implode(',', $db->loadResultArray()); $query = 'SELECT id FROM #__jce_plugins WHERE name IN ('. $this->dbList(explode(',', $item)) .') AND type = '. $db->Quote('plugin'); $db->setQuery($query); $plugins[] = implode(',', $db->loadResultArray()); } $row->name = 'Front End'; $row->description = 'Sample Group for Authors, Editors, Publishers'; $row->types = '19,20,21'; $row->rows = implode(';', $rows); $row->plugins = implode(',', $plugins); $row->published = 0; $row->ordering = 2; $groups['Front End'] = $row->store(); // Print message foreach ($groups as $k => $v) { if (!$v) { $mainframe->enqueueMessage(JText::_('GROUP INSTALL ERROR '). ' - '. $k, 'error'); } } } } if (!$install) { $this->redirect(); } return $ret; } /** * Update Groups table * @return boolean */ function updateGroups() { global $mainframe; $db =& JFactory::getDBO(); if ($this->installGroups(true)) { // Check for tmp tables if ($this->checkTable('groups_tmp')) { // empty Groups table $query = 'TRUNCATE TABLE #__jce_groups'; $db->setQuery($query); $db->query() or die($db->stdErr()); JTable::addIncludePath(JPATH_ADMINISTRATOR .DS. 'components' .DS. 'com_jce' .DS. 'groups'); // Get old Groups list $query = 'SELECT * FROM #__jce_groups_tmp'; $db->setQuery($query); $groups = $db->loadObjectList(); foreach ($groups as $group) { $rows = explode(';', $group->rows); $items = array(); // tmp Plugins table must exist for proper upgrade if ($this->checkTable('plugins_tmp')) { $query = 'SELECT a.id from #__jce_plugins AS a' . ' INNER JOIN #__jce_plugins_tmp AS b ON a.name = b.name' . ' WHERE b.id IN ('. $group->plugins .')' ; $db->setQuery($query); $plugins = $db->loadResultArray(); } else { $plugins = $group->plugins; } $row =& JTable::getInstance('groups', 'JCETable'); $row->plugins = implode(',', $plugins); // tmp Plugins table must exist for proper upgrade if ($this->checkTable('plugins_tmp')) { foreach ($rows as $item) { $query = 'SELECT a.id from #__jce_plugins AS a' . ' INNER JOIN #__jce_plugins_tmp AS b ON a.name = b.name' . ' WHERE b.id IN ('. $item .')' ; $db->setQuery($query); $items[] = implode(',', $db->loadResultArray()); } } else { $items = $rows; } $row->rows = implode(';', $items); // Add additional properties $row->name = $group->name; $row->description = $group->description; $row->components = $group->components; $row->users = $group->users; $row->types = $group->types; $row->published = $group->published; $row->ordering = $group->ordering; $row->params = $group->params; if (!$row->store()) { $mainframe->enqueueMessage(JText::_('GROUP UPDATE ERROR ') . $group->name, 'error'); } } $this->cleanupDB(); } } } /** * Install Plugins * @return boolean * @param object $install[optional] */ function installPlugins($install = false) { global $mainframe; $db =& JFactory::getDBO(); $ret = false; JTable::addIncludePath(JPATH_ADMINISTRATOR .DS. 'components' .DS. 'com_jce' .DS. 'plugins'); if ($this->createPluginsTable()) { $ret = true; $query = 'SELECT count(id) FROM #__jce_plugins'; $db->setQuery($query); if (!$db->loadResult()) { // Load table class require_once(dirname(__FILE__) .DS. 'plugins' .DS. 'plugin.php'); // Get list from editor if installed $plugins = array('contextmenu','directionality','emotions','fullscreen','paste','preview','table','print','searchreplace','style','layer','nonbreaking','visualchars','xhtmlxtras','imgmanager','advlink','spellchecker','help','browser','inlinepopups','media','safari','advcode','article','code','media'); $errors = array(); $r = 1; $x = 0; $row =& JTable::getInstance('plugin', 'JCETable'); $query = 'INSERT INTO #__jce_plugins ('; foreach ($row as $k => $v) { if ($k{0} != '_') { $query .= '`'. $k . '`,'; } } $query = substr($query, 0, -1) . ') VALUES '; // Get the buttons array $buttons = $this->getButtons(); foreach ($buttons as $k => $v) { $row =& JTable::getInstance('plugin', 'JCETable'); $row->name = $k; $row->published = 1; $row->iscore = 1; $row->editable = 0; $row->type = in_array($k, $plugins) ? 'plugin' : 'command'; $row->bind($v); // Set Icon and Layout if ($row->row) { if (!isset($row->icon)) { $row->icon = $row->name; } if (!isset($row->layout)) { $row->layout = $row->name; } // Set ordering if ($row->row == $r) { $x++; } else { $r = $row->row; $x = 1; } $row->ordering = $x; } $query .= '('; foreach ($row as $k => $v) { if ($k{0} != '_') { $query .= "'". $v . "',"; } } $query = substr($query, 0, -1) . '),'; } $query = substr($query, 0, -1); $db->setQuery($query); if (!$db->query()) { $mainframe->enqueueMessage(JText::_('PLUGINS INSTALL ERROR'), 'error'); } } } if ($this->createExtensionsTable()) { // Check for JoomlaLinks $query = 'SELECT id FROM #__jce_extensions WHERE extension = '. $db->Quote('joomlalinks'); $db->setQuery($query); // JoomlaLinks is not installed if (!$db->loadResult()) { // Get AdvLink id $query = 'SELECT id FROM #__jce_plugins WHERE name = '. $db->Quote('advlink'); $db->setQuery($query); $id = $db->loadResult(); // If Advlink installed if ($id) { $row =& JTable::getInstance('extension', 'JCETable'); $row->pid = $id; $row->name = 'Joomla Links for Advanced Link'; $row->extension = 'joomlalinks'; $row->folder = 'links'; $row->published = 1; if (!$row->store()) { $mainframe->enqueueMessage(JText::_('EXTENSIONS INSTALL ERROR'), 'error'); } } } } if (!$install) { $this->redirect(); } return $ret; } /** * Update Plugins table * @return boolean */ function updatePlugins() { global $mainframe; $db =& JFactory::getDBO(); JTable::addIncludePath(JPATH_ADMINISTRATOR .DS. 'components' .DS. 'com_jce' .DS. 'plugins'); // Create and install Plugins tables if ($this->installPlugins(true)) { if ($this->checkTable('plugins_tmp')) { // Get installed plugins $query = 'SELECT * FROM #__jce_plugins_tmp WHERE iscore = 0'; $db->setQuery($query); $plugins = $db->loadObjectList(); foreach ($plugins as $plugin) { $row =& JTable::getInstance('plugin', 'JCETable'); // Pass properties to $row object $row->title = $plugin->title; $row->name = $plugin->name; $row->icon = $plugin->icon; $row->layout = $plugin->layout; $row->row = $plugin->row; $row->ordering = $plugin->ordering; // Store if (!$row->store()) { $mainframe->enqueueMessage(JText::_('PLUGIN INSTALL ERROR '. $plugin->title), 'error'); } } // Additional Extensions $query = 'SELECT * FROM #__jce_extensions_tmp WHERE extension != '. $db->Quote('joomlalinks'); $db->setQuery($query); $extensions = $db->loadObjectList(); if (!empty($extensions)) { foreach ($extensions as $extension) { $row =& JTable::getInstance('extension', 'JCETable'); // Pass properties to $row object $row->pid = $extension->pid; $row->name = $extension->name; $row->extension = $extension->extension; $row->folder = $extension->folder; // Store if (!$row->store()) { $mainframe->enqueueMessage(JText::_('EXTENSION INSTALL ERROR '. $extension->name), 'error'); } } } } } } /** * Install the Editor Plugin * @return boolean * @param object $install[optional] */ function installEditor($install = false) { global $mainframe; $db =& JFactory::getDBO(); $path = JPATH_PLUGINS .DS. 'editors'; $ret = true; if ($this->checkEditorFiles()) { // Sourced from various Joomla! core files including the installer plugin adapter $xml =& JFactory::getXMLParser('Simple'); $name = 'JCE Editor 1.5.x'; if ($xml->loadFile($path .DS. 'jce.xml')) { $root =& $xml->document; // Get the element of the tag names $name = $root->getElementByPath('name'); $name = JFilterInput::clean($name->data(), 'string'); } JTable::addIncludePath(JPATH_LIBRARIES .DS. 'joomla' .DS. 'database' .DS. 'table'); // Get Editor id if installed $id = $this->checkEditor(); $row =& JTable::getInstance('plugin'); // Load editor if valid id if($id){ $row->load($id); } $row->name = $name; $row->ordering = 0; $row->folder = 'editors'; $row->iscore = 0; $row->access = 0; $row->published = 1; $row->client_id = 0; $row->element = 'jce'; if (!$row->store()) { $mainframe->enqueueMessage(JText::_('Plugin').' '.JText::_('Install').': '.$db->stderr(true)); $ret = false; } } else { $mainframe->enqueueMessage(JText::_('EDITOR FILES MISSING'), 'error'); $ret = false; } $mainframe->enqueueMessage(JText::_('EDITOR INSTALL SUCCESS')); $ret = true; if(!$install){ $this->redirect(); }else{ return $ret; } } /** * Uninstall the editor * @return boolean */ function removeEditor() { global $mainframe; $db = & JFactory::getDBO(); jimport('joomla.filesystem.folder'); jimport('joomla.filesystem.file'); $query = 'DELETE FROM #__plugins' .' WHERE folder = '.$db->Quote('editors') .' AND element = '.$db->Quote('jce') ; $db->setQuery($query); if (!$db->query()) { $msg = JText::sprintf('UNINSTALLEXT', 'Editor', JText::_('Error')); $ret = false; } else { $path = JPATH_PLUGINS.DS.'editors'; $files = array ( $path.DS.'jce.php', $path.DS.'jce.xml', JPATH_SITE.DS.'language'.DS.'en-GB'.DS.'en-GB.plg_editors_jce.ini' ); foreach ($files as $file) { if (file_exists($file)) { JFile::delete($file); } } JFolder::delete($path.DS.'jce'); $msg = JText::sprintf('UNINSTALLEXT', 'Editor', JText::_('Success')); $ret = true; } $mainframe->enqueueMessage($msg); return $ret; } } ?>