API16:JInstallerModule/uninstall
From Joomla! Documentation
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
Description:JInstallerModule/uninstall
Syntax
uninstall($id)
| Parameter Name | Default Value | Description |
|---|---|---|
| $id | $id The id of the module to uninstall |
Returns
boolean True on success
Defined in
libraries/joomla/installer/adapters/module.php
Importing
jimport( 'joomla.installer.adapters.module' );
Source Body
public function uninstall($id) { // Initialise variables. $row = null; $retval = true; $db = &$this->parent->getDbo(); // First order of business will be to load the module object table from the database. // This should give us the necessary information to proceed. $row = & JTable::getInstance('extension'); if (!$row->load((int) $id) || !strlen($row->element)) { JError::raiseWarning(100, JText::_('ERRORUNKOWNEXTENSION')); return false; } // Is the module we are trying to uninstall a core one? // Because that is not a good idea... if ($row->protected) { JError::raiseWarning(100, JText::_('Module').' '.JText::_('Uninstall').': '.JText::sprintf('WARNCOREMODULE', $row->name)."<br />".JText::_('WARNCOREMODULE2')); return false; } // Get the extension root path jimport('joomla.application.helper'); $element = $row->element; $client = &JApplicationHelper::getClientInfo($row->client_id); if ($client === false) { $this->parent->abort(JText::_('Module').' '.JText::_('Uninstall').': '.JText::_('Unknown client type').' ['.$row->client_id.']'); return false; } $this->parent->setPath('extension_root', $client->path.DS.'modules'.DS.$element); $this->parent->setPath('source', $this->parent->getPath('extension_root')); // Get the package manifest objecct $this->manifest = $this->parent->getManifest(); // If there is an manifest class file, lets load it $this->scriptElement = $this->manifest->scriptfile; $manifestScript = (string)$this->manifest->scriptfile; if ($manifestScript) { $manifestScriptFile = $this->parent->getPath('extension_root').DS.$manifestScript; if (is_file($manifestScriptFile)) { // load the file include_once $manifestScriptFile; } // Set the class name $classname = $element.'InstallerScript'; if (class_exists($classname)) { // create a new instance $this->parent->manifestClass = new $classname($this); // and set this so we can copy it later $this->set('manifest_script', $manifestScript); // Note: if we don't find the class, don't bother to copy the file } } ob_start(); ob_implicit_flush(false); // run uninstall if possible if ($this->parent->manifestClass && method_exists($this->parent->manifestClass,'uninstall')) { $this->parent->manifestClass->uninstall($this); } $msg = ob_get_contents(); ob_end_clean(); if (!$this->manifest INSTANCEOF JXMLElement) { // Make sure we delete the folders JFolder::delete($this->parent->getPath('extension_root')); JError::raiseWarning(100, 'Module Uninstall: Package manifest file invalid or not found'); return false; } /* * Let's run the uninstall queries for the component * If Joomla 1.5 compatible, with discreet sql files - execute appropriate * file for utf-8 support or non-utf support */ // try for Joomla 1.5 type queries // second argument is the utf compatible version attribute $utfresult = $this->parent->parseSQLFiles($this->manifest->uninstall->sql); if ($utfresult === false) { // Install failed, rollback changes JError::raiseWarning(100, JText::_('Module').' '.JText::_('Uninstall').': '.JText::_('SQLERRORORFILE')." ".$db->stderr(true)); $retval = false; } // Remove other files $this->parent->removeFiles($this->manifest->media); $this->parent->removeFiles($this->manifest->languages, $row->client_id); // Lets delete all the module copies for the type we are uninstalling $query = 'SELECT `id`' . ' FROM `#__modules`' . ' WHERE module = '.$db->Quote($row->element) . ' AND client_id = '.(int)$row->client_id; $db->setQuery($query); try { $modules = $db->loadResultArray(); } catch(JException $e) { $modules = array(); } // Do we have any module copies? if (count($modules)) { // Ensure the list is sane JArrayHelper::toInteger($modules); $modID = implode(',', $modules); // Wipe out any items assigned to menus $query = 'DELETE' . ' FROM #__modules_menu' . ' WHERE moduleid IN ('.$modID.')'; $db->setQuery($query); try { $db->query(); } catch(JException $e) { JError::raiseWarning(100, JText::_('Module').' '.JText::_('Uninstall').': '.$db->stderr(true)); $retval = false; } // Wipe out any instances in the modules table $query = 'DELETE' . ' FROM #__modules' . ' WHERE id IN ('.$modID.')'; $db->setQuery($query); try { $db->query(); } catch (JException $e) { JError::raiseWarning(100, JText::_('Module').' '.JText::_('Uninstall').': '.$db->stderr(true)); $retval = false; } } // Now we will no longer need the module object, so lets delete it and free up memory $row->delete($row->extension_id); $query = 'DELETE FROM `#__modules` WHERE module = '.$db->Quote($row->element) . ' AND client_id = ' . $row->client_id; $db->setQuery($query); try { $db->Query(); // clean up any other ones that might exist as well } catch(JException $e) { //Ignore the error... } unset ($row); // Remove the installation folder if (!JFolder::delete($this->parent->getPath('extension_root'))) { // JFolder should raise an error $retval = false; } return $retval; }
[Edit See Also] SeeAlso:JInstallerModule/uninstall
Examples
<CodeExamplesForm />
