/** * Uninstalls the package. Removes any blocks, themes, or pages associated with the package. */ public function uninstall() { $db = Loader::db(); $items = $this->getPackageItems(); foreach ($items as $k => $array) { if (!is_array($array)) { continue; } foreach ($array as $item) { if (is_a($item, 'Job')) { $item->uninstall(); } else { if (is_a($item, 'AttributeKey') || is_a($item, 'MailImporter')) { $item->delete(); } else { switch (get_class($item)) { case 'BlockType': case 'GatheringDataSource': case 'BlockTypeSet': case 'Feature': case 'FeatureCategory': case 'GatheringItemTemplate': case 'ConversationEditor': case 'ConversationRatingType': case 'PageTypePublishTargetType': case 'PageTypeComposerControlType': case 'PageTemplate': $item->delete(); break; case 'PageTheme': $item->uninstall(); break; case 'Page': @$item->delete(); // we suppress errors because sometimes the wrapper pages can delete first. break; case 'SystemCaptchaLibrary': case 'SystemContentEditorSnippet': case 'SystemAntispamLibrary': $item->delete(); break; case 'PageType': $item->delete(); break; case 'MailImporter': $item->delete(); break; case 'UserPointAction': case 'AttributeKeyCategory': case 'PermissionKeyCategory': case 'AttributeSet': case 'GroupSet': case 'AttributeType': case 'WorkflowType': case 'PermissionKey': case 'PermissionAccessEntityType': $item->delete(); break; default: if (method_exists($item, 'delete')) { $item->delete(); } elseif (method_exists($item, 'uninstall')) { $item->uninstall(); } break; } } } } } \Config::clearNamespace($this->getPackageHandle()); \Core::make('database_config')->clearNamespace($this->getPackageHandle()); $db->Execute("delete from Packages where pkgID = ?", array($this->pkgID)); }
public function uninstall() { $manager = new Manager($this->app); $categories = $manager->getPackageItemCategories(); $package = $this->getPackageEntity(); foreach ($categories as $category) { if ($category->hasItems($package)) { $category->removeItems($package); } } \Config::clearNamespace($this->getPackageHandle()); $this->app->make('config/database')->clearNamespace($this->getPackageHandle()); $em = $this->getPackageEntityManager(); if (is_object($em)) { $this->destroyProxyClasses($em); } $em = \ORM::entityManager(); $em->remove($package); $em->flush(); \Localization::clearCache(); }