| Current Path : /var/www/iplanru/data/www/i-plan.ru/administrator/components/com_widgetkit/ |
| Current File : /var/www/iplanru/data/www/i-plan.ru/administrator/components/com_widgetkit/installer.php |
<?php
/**
* @package Widgetkit
* @author YOOtheme http://www.yootheme.com
* @copyright Copyright (C) YOOtheme GmbH
* @license http://www.gnu.org/licenses/gpl.html GNU/GPL
*/
// no direct access
defined('_JEXEC') or die('Restricted access');
/*
Class: com_widgetkitInstallerScript
Installer script
*/
class com_widgetkitInstallerScript extends InstallerScript {}
/*
Class: InstallerScript
Installer script
*/
class InstallerScript {
public function install($parent) {
// init vars
$installer = $parent->getParent();
$extensions = $this->getAdditionalExtensions($installer);
// install additional extensions
foreach ($extensions as $extension) {
if (!$extension->preInstall() || !$extension->install()) {
// rollback on installation errors
$installer->abort(JText::_('Component').' '.JText::_('Install').': '.JText::_('Error'), 'component');
foreach ($extensions as $extension) {
if ($extension->status) {
$extension->abort();
}
}
break;
}
if ($extension->type == 'plugin') {
$extension->enable();
}
}
// display table
if ($extensions) {
self::displayAdditionalExtensions($extensions);
}
// update tinymce
$db = JFactory::getDBO();
$db->setQuery("SELECT e.params FROM #__extensions AS e WHERE e.name='plg_editors_tinymce'");
$data = new JRegistry($db->loadResult());
$data->set('extended_elements', $data->get('extended_elements').',@[data-lightbox],@[data-spotlight]');
$db->setQuery("UPDATE #__extensions AS e SET e.params='".$data->toString()."' WHERE e.name='plg_editors_tinymce'");
$db->query();
}
public function uninstall($parent) {
// init vars
$installer = $parent->getParent();
$extensions = $this->getAdditionalExtensions($installer);
// uninstall additional extensions
foreach ($extensions as $extension) {
$extension->uninstall();
}
// display table
if ($extensions) {
self::displayAdditionalExtensions($extensions);
}
}
public function update($parent) {
return $this->install($parent);
}
public function preflight($type, $parent) {
// remove ZOO from admin menus
$db = JFactory::getDBO();
$db->setQuery('DELETE FROM #__menu WHERE alias = "comwidgetkit" AND menutype = "main"');
$db->query();
$db->setQuery('DELETE FROM #__assets WHERE title = "widgetkit"');
$db->query();
}
public function postflight($type, $parent) {}
protected function getAdditionalExtensions($installer) {
// init vars
$extensions = array();
// additional extensions
if (($manifest = simplexml_load_file($installer->getPath('manifest'))) && ($additional = $manifest->xpath('additional/*'))) {
foreach ($additional as $data) {
$extensions[] = new AdditionalExtension($installer, $data);
}
}
return $extensions;
}
public static function displayAdditionalExtensions($extensions) {
?>
<table class="adminlist table table-bordered table-striped">
<thead>
<tr>
<th class="title"><?php echo JText::_('Extension'); ?></th>
<th width="60%"><?php echo JText::_('Status'); ?></th>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="2"> </td>
</tr>
</tfoot>
<tbody>
<?php
foreach ($extensions as $i => $extension) : ?>
<tr class="row<?php echo $i % 2; ?>">
<td class="key"><?php echo $extension->name; ?></td>
<td>
<?php $style = $extension->status ? 'font-weight: bold; color: green;' : 'font-weight: bold; color: red;'; ?>
<span style="<?php echo $style; ?>"><?php echo $extension->message; ?></span>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php
}
}
/*
Class: AdditionalExtension
Additional extension class
*/
class AdditionalExtension {
public $name;
public $element;
public $type;
public $status;
public $message;
public $data;
public $parent;
public $installer;
public $database;
public function __construct($parent, $data) {
// init vars
$this->name = (string) $data;
$this->element = (string) $data->attributes()->name;
$this->type = $data->getName();
$this->status = false;
$this->data = $data;
$this->parent = $parent;
$this->installer = new JInstaller();
$this->database = JFactory::getDBO();
$this->folder = (string) $data->attributes()->folder;
$this->source_path = rtrim($this->parent->getPath('source').'/'.$this->folder, "\\/") . '/';
}
public function preInstall() {
// remove zoo layout config files on update
if ($this->element == 'widgetkit_zoo' && JFolder::exists($this->source_path) && JFolder::exists(JPATH_ROOT.'/plugins/system/widgetkit_zoo')) {
foreach (JFolder::files($this->source_path, '(positions\.(config|xml)|metadata\.xml)$', true, true) as $file) {
JFile::delete($file);
}
}
return true;
}
public function install() {
// set message
if ($this->status = $this->installer->install($this->parent->getPath('source').'/'.$this->data->attributes()->folder)) {
$this->message = JText::_('Installed successfully');
} else {
$this->message = JText::_('NOT Installed');
}
return $this->status;
}
public function uninstall() {
// get extension id and client id
$result = $this->load();
$ext_id = isset($result->extension_id) ? $result->extension_id : 0;
$client_id = isset($result->client_id) ? $result->client_id : 0;
// set message
if ($this->status = $ext_id > 0 && $this->installer->uninstall($this->type, $ext_id, $client_id)) {
$this->message = JText::_('Uninstalled successfully');
} else {
$this->message = JText::_('Uninstall FAILED');
}
return $this->status;
}
public function abort() {
$this->installer->abort(JText::_($this->type).' '.JText::_('Install').': '.JText::_('Error'), $this->type);
$this->status = false;
}
public function load() {
$this->database->setQuery(sprintf("SELECT * FROM #__extensions WHERE type='%s' AND element='%s'", $this->type, $this->element));
return $this->database->loadObject();
}
public function enable() {
$this->database->setQuery(sprintf("UPDATE #__extensions SET enabled=1 WHERE type='%s' AND element='%s'", $this->type, $this->element));
$this->database->query();
}
}