Actions

API16

JInstallerFile/uninstall

From Joomla! Documentation

< API16:JInstallerFile
Revision as of 22:01, 13 May 2013 by JoomlaWikiBot (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Replacement filing cabinet.png
This Namespace has been archived - Please Do Not Edit or Create Pages in this namespace. Pages contain information for a Joomla! version which is no longer supported. It exists only as a historical reference, will not be improved and its content may be incomplete.

Contents

Description

Custom uninstall method

[<! removed edit link to red link >]

<! removed transcluded page call, red link never existed >

Syntax

uninstall($id)
Parameter Name Default Value Description
$id $id The id of the file to uninstall

Returns

boolean True on success

Defined in

libraries/joomla/installer/adapters/file.php

Importing

jimport( 'joomla.installer.adapters.file' );

Source Body

function uninstall($id)
{
        // Initialise variables.
        $row    = JTable::getInstance('extension');
        if(!$row->load($id)) {
                JError::raiseWarning(100, JText::_('File').' '.JText::_('Uninstall').': '.JText::_('Could not load extension entry'));
                return false;
        }
 
        $retval = true;
        $manifestFile = JPATH_MANIFESTS.DS.'files' . DS . $row->element .'.xml';
 
        // Because files may not have their own folders we cannot use the standard method of finding an installation manifest
        if (file_exists($manifestFile))
        {
                // Set the plugin root path
                $this->parent->setPath('extension_root', JPATH_ROOT); //.DS.'files'.DS.$manifest->filename);
 
                $xml =JFactory::getXML($manifestFile);
 
                // If we cannot load the xml file return null
                if( ! $xml) {
                        JError::raiseWarning(100, JText::_('File').' '.JText::_('Uninstall').': '.JText::_('Could not load manifest file'));
                        return false;
                }
 
                /*
                 * Check for a valid XML root tag.
                 */
                if ($xml->getName() != 'extension') {
                        JError::raiseWarning(100, JText::_('File').' '.JText::_('Uninstall').': '.JText::_('Invalid manifest file'));
                        return false;
                }
 
                $this->manifest = $xml;
 
                // Set root folder names
                $packagePath = $this->parent->getPath('source');
                $jRootPath = JPath::clean(JPATH_ROOT);
 
                // loop through all elements and get list of files and folders
                foreach ($xml->fileset->files as $eFiles)
                {
                                $folder = (string)$eFiles->attributes()->folder;
                                $target = (string)$eFiles->attributes()->target;
                                //Create folder path
                                if(empty($target))
                                {
                                        $targetFolder = JPATH_ROOT;
                                }
                                else
                                {
                                        $targetFolder = JPATH_ROOT.DS.$target;
                                }
 
                                $folderList = array();
                                // Check if all children exists
                                if (count($eFiles->children()) > 0)
                                {
                                        // loop through all filenames elements
                                        foreach ($eFiles->children() as $eFileName)
                                        {
                                                if ($eFileName->getName() == 'folder') {
                                                        $folderList[] = $targetFolder.DS.$eFileName;
 
                                                } else {
                                                        $fileName = $targetFolder.DS.$eFileName;
                                                        JFile::delete($fileName);
                                                }
                                        }
                                }
 
                                // Delete any folders that don't have any content in them
                                foreach($folderList as $folder)
                                {
                                        $files = JFolder::files($folder);
                                        if(!count($files)) {
                                                JFolder::delete($folder);
                                        }
                                }
                }
 
                JFile::delete($manifestFile);
 
        } else {
                JError::raiseWarning(100, 'File Uninstall: Manifest File invalid or not found');
                // delete the row because its broken
                $row->delete();
                return false;
        }
 
        $this->parent->removeFiles($xml->languages);
 
        $row->delete();
 
        return $retval;
}

[<! removed edit link to red link >] <! removed transcluded page call, red link never existed >

Examples

<CodeExamplesForm />