Exemplo n.º 1
0
 function Uninstall()
 {
     $result = FALSE;
     if ($this->serial) {
         // Checks if the module exists in modules table
         //
         $modquery =& $this->ampdb->Execute('SELECT * FROM modules WHERE id=' . (int) $this->serial);
         if ($modquery->NumRows() == 1) {
             $moddata = $modquery->Fields();
             // Checks if the module is Ampoliros itself
             //
             if ($moddata['modid'] != 'ampoliros') {
                 // Checks if the structure file still exists
                 //
                 if (file_exists(MODULE_PATH . $moddata['modid'] . '/' . Module::STRUCTURE_FILE)) {
                     $this->modname = $moddata['modid'];
                     // Checks if there are depengind modules
                     //
                     $moddeps = new ModuleDep($this->ampdb);
                     $pendingdeps = $moddeps->CheckDependingModules($moddata['modid']);
                     // If dependencies are ok, go on
                     //
                     if ($pendingdeps == FALSE) {
                         if ($moddata['onlyextension'] != $this->ampdb->fmttrue) {
                             $this->DisableToAllSites($moddata['modid']);
                         }
                         $this->HandleStructure(MODULE_PATH . $moddata['modid'] . '/' . Module::STRUCTURE_FILE, Module::INSTALL_MODE_UNINSTALL, TMP_PATH . 'modinst/');
                         // Removes module archive and directory
                         //
                         if (file_exists(MODULE_PATH . $moddata['modfile'])) {
                             @unlink(MODULE_PATH . $moddata['modfile']);
                         }
                         RecRemoveDir(MODULE_PATH . $moddata['modid']);
                         // Module rows in modules table
                         //
                         $this->ampdb->Execute('DELETE FROM modules WHERE id=' . (int) $this->serial);
                         // Remove cached items
                         //
                         Carthag::import('com.solarix.ampoliros.datatransfer.cache.CacheGarbageCollector');
                         $cache_gc = new CacheGarbageCollector();
                         $cache_gc->RemoveModuleItems($moddata['modid']);
                         // Remove dependencies
                         //
                         $moddeps->RemallDep($this->serial);
                         $this->serial = 0;
                         $result = true;
                         if ($GLOBALS['gEnv']['core']['config']->Value('ALERT_ON_MODULE_OPERATION') == '1') {
                             Carthag::import('com.solarix.ampoliros.security.SecurityLayer');
                             $amp_security = new SecurityLayer();
                             $amp_security->SendAlert('Module ' . $moddata['modid'] . ' has been removed');
                             unset($amp_security);
                         }
                     } else {
                         $this->unmetdeps = $pendingdeps;
                     }
                     if ($result == TRUE) {
                         import('com.solarix.ampoliros.io.log.Logger');
                         $log = new Logger(AMP_LOG);
                         $log->LogEvent('Ampoliros', 'Uninstalled module ' . $this->modname, LOGGER_NOTICE);
                     }
                 } else {
                     import('com.solarix.ampoliros.io.log.Logger');
                     $log = new Logger(AMP_LOG);
                     $log->LogEvent('ampoliros.modules_library.modules_class.uninstall', 'Structure file ' . MODULE_PATH . $moddata['modid'] . '/' . Module::STRUCTURE_FILE . ' for module ' . $moddata['modid'] . ' was not found', LOGGER_ERROR);
                 }
             } else {
                 import('com.solarix.ampoliros.io.log.Logger');
                 $log = new Logger(AMP_LOG);
                 $log->LogEvent('ampoliros.modules_library.modules_class.uninstall', 'Cannot uninstall Ampoliros', LOGGER_ERROR);
             }
         } else {
             import('com.solarix.ampoliros.io.log.Logger');
             $log = new Logger(AMP_LOG);
             $log->LogEvent('ampoliros.modules_library.modules_class.uninstall', 'A module with serial ' . $this->serial . ' was not found in modules table', LOGGER_ERROR);
         }
         $modquery->Free();
     } else {
         import('com.solarix.ampoliros.io.log.Logger');
         $log = new Logger(AMP_LOG);
         $log->LogEvent('ampoliros.modules_library.modules_class.uninstall', 'Empty module serial', LOGGER_ERROR);
     }
     return $result;
 }