/** * Process themes method * * @param array $post * @return void */ public function processModules($post) { foreach ($post as $key => $value) { if (strpos($key, 'module_active_') !== false) { $id = substr($key, strrpos($key, '_') + 1); $ext = Table\Extensions::findById($id); if (isset($ext->id)) { $ext->active = (int) $value; $ext->save(); } } } $path = BASE_PATH . APP_URI; if ($path == '') { $path = '/'; } $modulePath1 = $_SERVER['DOCUMENT_ROOT'] . BASE_PATH . CONTENT_PATH . '/extensions/modules'; $modulePath2 = __DIR__ . '/../../../../../module'; $phireCookie = null; if (php_sapi_name() != 'cli') { $cookie = Cookie::getInstance(array('path' => $path)); if (isset($cookie->phire)) { if (null === $phireCookie) { $phireCookie = $cookie->phire; } } } if (isset($post['remove_modules'])) { foreach ($post['remove_modules'] as $id) { $ext = Table\Extensions::findById($id); if (isset($ext->id)) { $modPath = file_exists($modulePath1 . '/' . $ext->file) ? $modulePath1 : $modulePath2; $assets = unserialize($ext->assets); if (count($assets['tables']) > 0) { $db = Table\Extensions::getDb(); if (DB_INTERFACE == 'Mysqli' || DB_TYPE == 'mysql') { $db->adapter()->query('SET foreign_key_checks = 0;'); foreach ($assets['tables'] as $table) { $db->adapter()->query('DROP TABLE ' . $table); } $db->adapter()->query('SET foreign_key_checks = 1;'); } else { if (DB_INTERFACE == 'Pgsql' || DB_TYPE == 'pgsql') { foreach ($assets['tables'] as $table) { $db->adapter()->query('DROP TABLE ' . $table . ' CASCADE'); } } else { foreach ($assets['tables'] as $table) { $db->adapter()->query('DROP TABLE ' . $table); } } } } $contentPath = $_SERVER['DOCUMENT_ROOT'] . BASE_PATH . CONTENT_PATH; $exts = array('.zip', '.tar.gz', '.tar.bz2', '.tgz', '.tbz', '.tbz2'); // Check for a config and remove function if (file_exists($modPath . '/' . $ext->name . '/config') && file_exists($modPath . '/' . $ext->name . '/config/module.php')) { $config = (include $modPath . '/' . $ext->name . '/config/module.php'); if (null !== $config[$ext->name]->remove) { $removeFunc = $config[$ext->name]->remove; $removeFunc(); } } if (file_exists($contentPath . '/extensions/modules/' . $ext->name)) { $dir = new Dir($contentPath . '/extensions/modules/' . $ext->name); $dir->emptyDir(null, true); } foreach ($exts as $e) { if (file_exists($contentPath . '/extensions/modules/' . $ext->name . $e) && is_writable($contentPath . '/extensions/modules/' . $ext->name . $e)) { unlink($contentPath . '/extensions/modules/' . $ext->name . $e); } } if (file_exists(__DIR__ . '/../../../../../module/' . $ext->name)) { $dir = new Dir(__DIR__ . '/../../../../../module/' . $ext->name); $dir->emptyDir(null, true); } foreach ($exts as $e) { if (file_exists(__DIR__ . '/../../../../../module/' . $ext->name . $e) && is_writable(__DIR__ . '/../../../../../module/' . $ext->name . $e)) { unlink(__DIR__ . '/../../../../../module/' . $ext->name . $e); } } if (file_exists($contentPath . '/assets/' . strtolower($ext->name))) { $dir = new Dir($contentPath . '/assets/' . strtolower($ext->name)); $dir->emptyDir(null, true); } if (null !== $phireCookie) { foreach ($phireCookie->modules as $key => $value) { if ($value->name == $ext->name) { $modules = (array) $phireCookie->modules; unset($modules[$key]); $phireCookie->modules = $modules; } } } $ext->delete(); } } } if (null !== $phireCookie) { $cookie = Cookie::getInstance(array('path' => $path)); $cookie->set('phire', $phireCookie); } }