| Current Path : /home/sunflowe/www2/j15/administrator/components/com_jce/installer/adapters/ |
| Current File : /home/sunflowe/www2/j15/administrator/components/com_jce/installer/adapters/language.php |
<?php
/**
* @version $Id: language.php 97 2009-06-21 19:18:07Z happynoodleboy $
* @package JCE
* @copyright Copyright (C) 2009 Ryan Demmer. All rights reserved.
* @copyright Copyright (C) 2005 - 2007 Open Source Matters. All rights reserved.
* @license GNU/GPL
* 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.
*/
// Check to ensure this file is within the rest of the framework
defined('JPATH_BASE') or die ();
/**
* Language installer
*
* @package JCE
* @subpackage Installer
* @since 1.5
*/
class JCEInstallerLanguage extends JObject
{
/**
* Constructor
*
* @access protected
* @param object $parent Parent object [JInstaller instance]
* @return void
* @since 1.5
*/
function __construct( & $parent)
{
$this->parent = & $parent;
}
/**
* Custom install method
*
* @access public
* @return boolean True on success
* @since 1.5
*/
function install()
{
// Get database connector object
$manifest = & $this->parent->getManifest();
$this->manifest = & $manifest->document;
// Get the language name
// Set the extensions name
$name = & $this->manifest->getElementByPath('name');
$name = JFilterInput::clean($name->data(), 'cmd');
$this->set('name', $name);
// Get the Language tag [ISO tag, eg. en-GB]
$tag = & $this->manifest->getElementByPath('tag');
// Check if we found the tag - if we didn't, we may be trying to install from an older language package
if (!$tag)
{
$this->parent->abort(JText::_('Language').' '.JText::_('Install').': '.JText::_('NO LANGUAGE TAG?'));
return false;
}
$this->set('tag', $tag->data());
$folder = $tag->data();
$sitePath = JPATH_SITE.DS."language".DS.$folder;
$adminPath = JPATH_ADMINISTRATOR.DS."language".DS.$folder;
$tinyPath = JPATH_PLUGINS.DS."editors".DS."jce".DS."tiny_mce";
// Set the installation target paths
$this->parent->setPath('extension_site', $sitePath);
$this->parent->setPath('extension_administrator', $adminPath);
$this->adminElement = & $this->manifest->getElementByPath('administration');
$this->siteElement = & $this->manifest->getElementByPath('site');
$this->tinyElement = & $this->manifest->getElementByPath('tinymce');
// Set overwrite flag if not set by Manifest
if (!$this->parent->getOverwrite()) {
$this->parent->setOverwrite(true);
}
// Copy site files
foreach ($this->siteElement->children() as $child)
{
if (is_a($child, 'JSimpleXMLElement') && $child->name() == 'files') {
if ($this->parent->parseFiles($child) === false) {
// Install failed, rollback any changes
$this->parent->abort();
return false;
}
}
}
// Copy admin files
foreach ($this->adminElement->children() as $child)
{
if (is_a($child, 'JSimpleXMLElement') && $child->name() == 'files') {
if ($this->parent->parseFiles($child, 1) === false) {
// Install failed, rollback any changes
$this->parent->abort();
return false;
}
}
}
// Copy tinymce files
$this->parent->setPath('extension_site', $tinyPath);
foreach ($this->tinyElement->children() as $child)
{
if (is_a($child, 'JSimpleXMLElement') && $child->name() == 'files') {
if ($this->parent->parseFiles($child) === false) {
// Install failed, rollback any changes
$this->parent->abort();
return false;
}
}
}
// Set path back to site for manifest
$this->parent->setPath('extension_site', $sitePath);
// Lastly, we will copy the manifest file to its appropriate place.
if (!$this->parent->copyManifest(0)) {
// Install failed, rollback changes
$this->parent->abort(JText::_('Component').' '.JText::_('Install').': '.JText::_('Could not copy setup file'));
return false;
}
// Get the language description
$description = & $this->manifest->getElementByPath('description');
if (is_a($description, 'JSimpleXMLElement')) {
$this->parent->set('message', $description->data());
} else {
$this->parent->set('message', '');
}
return true;
}
/**
* Custom uninstall method
*
* @access public
* @param string $tag The tag of the language to uninstall
* @param int $clientId The id of the client (unused)
* @return mixed Return value for uninstall method in component uninstall file
* @since 1.5
*/
function uninstall($tag, $clientId)
{
$path = trim($tag);
if (!JFolder::exists($path)) {
JError::raiseWarning(100, 'Language Uninstall: '.JText::_('Language path is empty, cannot uninstall files'));
return false;
}
$tag = basename($path);
// Because JCE languages don't have their own folders we cannot use the standard method of finding an installation manifest
$manifestFile = JPATH_ROOT.DS.'language'.DS.$tag.DS.$tag.'.com_jce.xml';
if (file_exists($manifestFile))
{
$xml = & JFactory::getXMLParser('Simple');
// If we cannot load the xml file return null
if (!$xml->loadFile($manifestFile)) {
JError::raiseWarning(100, JText::_('Language').' '.JText::_('Uninstall').': '.JText::_('Could not load manifest file'));
return false;
}
/*
* Check for a valid XML root tag.
*/
$root = & $xml->document;
if ($root->name() != 'install' && $root->attributes('type') != 'language') {
JError::raiseWarning(100, JText::_('Language').' '.JText::_('Uninstall').': '.JText::_('Invalid manifest file'));
return false;
}
// Get the admin and site paths for the component
$sitePath = JPATH_SITE.DS."language".DS.$tag;
$adminPath = JPATH_ADMINISTRATOR.DS."language".DS.$tag;
$tinyPath = JPATH_PLUGINS.DS."editors".DS."jce".DS."tiny_mce";
// Set the installation target paths
$this->parent->setPath('extension_site', $sitePath);
$this->parent->setPath('extension_administrator', $adminPath);
if (!$this->parent->removeFiles($root->getElementByPath('site/files'))) {
JError::raiseWarning(100, JText::_('Language').' '.JText::_('Uninstall').': '.JText::_('Unable to delete files'));
return false;
}
if (!$this->parent->removeFiles($root->getElementByPath('administration/files'), 1)) {
JError::raiseWarning(100, JText::_('Language').' '.JText::_('Uninstall').': '.JText::_('Unable to delete files'));
return false;
}
$this->parent->setPath('extension_site', $tinyPath);
if (!$this->parent->removeFiles($root->getElementByPath('tinymce/files'))) {
JError::raiseWarning(100, JText::_('Language').' '.JText::_('Uninstall').': '.JText::_('Unable to delete files'));
return false;
}
JFile::delete($manifestFile);
} else {
JError::raiseWarning(100, 'Language Uninstall: Manifest File invalid or not found');
return false;
}
return true;
}
}