예제 #1
0
 /**
  * Uninstalls subextensions (modules, plugins) bundled with the main extension
  *
  * @param   JInstaller $parent The parent object
  *
  * @return  stdClass  The subextension uninstallation status
  */
 protected function uninstallSubextensions($parent)
 {
     $db = F0FPlatform::getInstance()->getDbo();
     $status = new stdClass();
     $status->modules = array();
     $status->plugins = array();
     $src = $parent->getParent()->getPath('source');
     // Modules uninstallation
     if (isset($this->installation_queue['modules']) && count($this->installation_queue['modules'])) {
         foreach ($this->installation_queue['modules'] as $folder => $modules) {
             if (count($modules)) {
                 foreach ($modules as $module => $modulePreferences) {
                     // Find the module ID
                     $sql = $db->getQuery(true)->select($db->qn('extension_id'))->from($db->qn('#__extensions'))->where($db->qn('element') . ' = ' . $db->q('mod_' . $module))->where($db->qn('type') . ' = ' . $db->q('module'));
                     $db->setQuery($sql);
                     try {
                         $id = $db->loadResult();
                     } catch (Exception $exc) {
                         $id = 0;
                     }
                     // Uninstall the module
                     if ($id) {
                         $installer = new JInstaller();
                         $result = $installer->uninstall('module', $id, 1);
                         $status->modules[] = array('name' => 'mod_' . $module, 'client' => $folder, 'result' => $result);
                     }
                 }
             }
         }
     }
     // Plugins uninstallation
     if (isset($this->installation_queue['plugins']) && count($this->installation_queue['plugins'])) {
         foreach ($this->installation_queue['plugins'] as $folder => $plugins) {
             if (count($plugins)) {
                 foreach ($plugins as $plugin => $published) {
                     $sql = $db->getQuery(true)->select($db->qn('extension_id'))->from($db->qn('#__extensions'))->where($db->qn('type') . ' = ' . $db->q('plugin'))->where($db->qn('element') . ' = ' . $db->q($plugin))->where($db->qn('folder') . ' = ' . $db->q($folder));
                     $db->setQuery($sql);
                     try {
                         $id = $db->loadResult();
                     } catch (Exception $exc) {
                         $id = 0;
                     }
                     if ($id) {
                         $installer = new JInstaller();
                         $result = $installer->uninstall('plugin', $id, 1);
                         $status->plugins[] = array('name' => 'plg_' . $plugin, 'group' => $folder, 'result' => $result);
                     }
                 }
             }
         }
     }
     // Clear com_modules and com_plugins cache (needed when we alter module/plugin state)
     F0FUtilsCacheCleaner::clearPluginsAndModulesCache();
     return $status;
 }