/**
  * 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));
 }
Example #2
0
 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();
 }