Example #1
0
 /**
  * Löscht eine Kategorie und reorganisiert die Prioritäten verbleibender Geschwister-Kategorien.
  *
  * @param int $category_id Id der Kategorie die gelöscht werden soll
  *
  * @throws rex_api_exception
  *
  * @return string Eine Statusmeldung
  */
 public static function deleteCategory($category_id)
 {
     $clang = 1;
     $thisCat = rex_sql::factory();
     $thisCat->setQuery('SELECT * FROM ' . rex::getTablePrefix() . 'article WHERE id=' . $category_id . ' and clang_id=' . $clang);
     // Prüfen ob die Kategorie existiert
     if ($thisCat->getRows() == 1) {
         $KAT = rex_sql::factory();
         $KAT->setQuery('select * from ' . rex::getTablePrefix() . "article where parent_id='{$category_id}' and clang_id='{$clang}' and startarticle=1");
         // Prüfen ob die Kategorie noch Unterkategorien besitzt
         if ($KAT->getRows() == 0) {
             $KAT->setQuery('select * from ' . rex::getTablePrefix() . "article where parent_id='{$category_id}' and clang_id='{$clang}' and startarticle=0");
             // Prüfen ob die Kategorie noch Artikel besitzt (ausser dem Startartikel)
             if ($KAT->getRows() == 0) {
                 $thisCat = rex_sql::factory();
                 $thisCat->setQuery('SELECT * FROM ' . rex::getTablePrefix() . 'article WHERE id=' . $category_id);
                 $parent_id = $thisCat->getValue('parent_id');
                 $message = rex_article_service::_deleteArticle($category_id);
                 foreach ($thisCat as $row) {
                     $_clang = $row->getValue('clang_id');
                     // ----- PRIOR
                     self::newCatPrio($parent_id, $_clang, 0, 1);
                     // ----- EXTENSION POINT
                     $message = rex_extension::registerPoint(new rex_extension_point('CAT_DELETED', $message, ['id' => $category_id, 'parent_id' => $parent_id, 'clang' => $_clang, 'name' => $row->getValue('catname'), 'priority' => $row->getValue('catpriority'), 'path' => $row->getValue('path'), 'status' => $row->getValue('status')]));
                 }
                 rex_complex_perm::removeItem('structure', $category_id);
             } else {
                 throw new rex_api_exception(rex_i18n::msg('category_could_not_be_deleted') . ' ' . rex_i18n::msg('category_still_contains_articles'));
             }
         } else {
             throw new rex_api_exception(rex_i18n::msg('category_could_not_be_deleted') . ' ' . rex_i18n::msg('category_still_contains_subcategories'));
         }
     } else {
         throw new rex_api_exception(rex_i18n::msg('category_could_not_be_deleted'));
     }
     return $message;
 }