public function getField()
 {
     $field = new rex_form_select_element();
     $field->setAttribute('class', 'form-control');
     $field->setLabel(rex_i18n::msg('system_setting_default_template_id'));
     $select = $field->getSelect();
     $select->setSize(1);
     $select->setSelected(rex_template::getDefaultId());
     $templates = rex_template::getTemplatesForCategory(0);
     if (empty($templates)) {
         $select->addOption(rex_i18n::msg('option_no_template'), 0);
     } else {
         $select->addArrayOptions($templates);
     }
     return $field;
 }
예제 #2
0
 /**
  * Erstellt eine neue Kategorie.
  *
  * @param int   $category_id KategorieId in der die neue Kategorie erstellt werden soll
  * @param array $data        Array mit den Daten der Kategorie
  *
  * @throws rex_api_exception
  *
  * @return string Eine Statusmeldung
  */
 public static function addCategory($category_id, array $data)
 {
     $message = '';
     if (!is_array($data)) {
         throw new rex_api_exception('Expecting $data to be an array!');
     }
     self::reqKey($data, 'catpriority');
     self::reqKey($data, 'catname');
     // parent may be null, when adding in the root cat
     $parent = rex_category::get($category_id);
     if ($parent) {
         $path = $parent->getPath();
         $path .= $parent->getId() . '|';
     } else {
         $path = '|';
     }
     if ($data['catpriority'] <= 0) {
         $data['catpriority'] = 1;
     }
     if (!isset($data['name'])) {
         $data['name'] = $data['catname'];
     }
     if (!isset($data['status'])) {
         $data['status'] = 0;
     }
     $contentAvailable = rex_plugin::get('structure', 'content')->isAvailable();
     if ($contentAvailable) {
         $startpageTemplates = [];
         if ($category_id != '') {
             // TemplateId vom Startartikel der jeweiligen Sprache vererben
             $sql = rex_sql::factory();
             // $sql->setDebug();
             $sql->setQuery('select clang_id,template_id from ' . rex::getTablePrefix() . "article where id={$category_id} and startarticle=1");
             for ($i = 0; $i < $sql->getRows(); $i++, $sql->next()) {
                 $startpageTemplates[$sql->getValue('clang_id')] = $sql->getValue('template_id');
             }
         }
         // Alle Templates der Kategorie
         $templates = rex_template::getTemplatesForCategory($category_id);
     }
     $user = rex::isBackend() ? null : 'frontend';
     // Kategorie in allen Sprachen anlegen
     $AART = rex_sql::factory();
     foreach (rex_clang::getAllIds() as $key) {
         if ($contentAvailable) {
             $template_id = rex_template::getDefaultId();
             if (isset($startpageTemplates[$key]) && $startpageTemplates[$key] != '') {
                 $template_id = $startpageTemplates[$key];
             }
             // Wenn Template nicht vorhanden, dann entweder erlaubtes nehmen
             // oder leer setzen.
             if (!isset($templates[$template_id])) {
                 $template_id = 0;
                 if (count($templates) > 0) {
                     $template_id = key($templates);
                 }
             }
         }
         $AART->setTable(rex::getTablePrefix() . 'article');
         if (!isset($id)) {
             $id = $AART->setNewId('id');
         } else {
             $AART->setValue('id', $id);
         }
         $AART->setValue('clang_id', $key);
         $AART->setValue('template_id', $template_id);
         $AART->setValue('name', $data['name']);
         $AART->setValue('catname', $data['catname']);
         $AART->setValue('catpriority', $data['catpriority']);
         $AART->setValue('parent_id', $category_id);
         $AART->setValue('priority', 1);
         $AART->setValue('path', $path);
         $AART->setValue('startarticle', 1);
         $AART->setValue('status', $data['status']);
         $AART->addGlobalUpdateFields($user);
         $AART->addGlobalCreateFields($user);
         try {
             $AART->insert();
             // ----- PRIOR
             if (isset($data['catpriority'])) {
                 self::newCatPrio($category_id, $key, 0, $data['catpriority']);
             }
             $message = rex_i18n::msg('category_added_and_startarticle_created');
             rex_article_cache::delete($id, $key);
             // ----- EXTENSION POINT
             // Objekte clonen, damit diese nicht von der extension veraendert werden koennen
             $message = rex_extension::registerPoint(new rex_extension_point('CAT_ADDED', $message, ['category' => clone $AART, 'id' => $id, 'parent_id' => $category_id, 'clang' => $key, 'name' => $data['catname'], 'priority' => $data['catpriority'], 'path' => $path, 'status' => $data['status'], 'article' => clone $AART, 'data' => $data]));
         } catch (rex_sql_exception $e) {
             throw new rex_api_exception($e);
         }
     }
     return $message;
 }
예제 #3
0
 /**
  * Bearbeitet einen Artikel.
  *
  * @param int   $article_id Id des Artikels der verändert werden soll
  * @param int   $clang      Id der Sprache
  * @param array $data       Array mit den Daten des Artikels
  *
  * @throws rex_api_exception
  *
  * @return string Eine Statusmeldung
  */
 public static function editArticle($article_id, $clang, $data)
 {
     if (!is_array($data)) {
         throw new rex_api_exception('Expecting $data to be an array!');
     }
     self::reqKey($data, 'name');
     // Artikel mit alten Daten selektieren
     $thisArt = rex_sql::factory();
     $thisArt->setQuery('select * from ' . rex::getTablePrefix() . 'article where id=' . $article_id . ' and clang_id=' . $clang);
     if ($thisArt->getRows() != 1) {
         throw new rex_api_exception('Unable to find article with id "' . $article_id . '" and clang "' . $clang . '"!');
     }
     $ooArt = rex_article::get($article_id, $clang);
     $data['category_id'] = $ooArt->getCategoryId();
     if (rex_plugin::get('structure', 'content')->isAvailable()) {
         $templates = rex_template::getTemplatesForCategory($data['category_id']);
         // Wenn Template nicht vorhanden, dann entweder erlaubtes nehmen
         // oder leer setzen.
         if (!isset($templates[$data['template_id']])) {
             $data['template_id'] = 0;
             if (count($templates) > 0) {
                 $data['template_id'] = key($templates);
             }
         }
     }
     if (isset($data['priority'])) {
         if ($data['priority'] <= 0) {
             $data['priority'] = 1;
         }
     }
     // complete remaining optional aprams
     foreach (['path', 'priority'] as $optionalData) {
         if (!isset($data[$optionalData])) {
             $data[$optionalData] = $thisArt->getValue($optionalData);
         }
     }
     $EA = rex_sql::factory();
     $EA->setTable(rex::getTablePrefix() . 'article');
     $EA->setWhere(['id' => $article_id, 'clang_id' => $clang]);
     $EA->setValue('name', $data['name']);
     $EA->setValue('template_id', $data['template_id']);
     $EA->setValue('priority', $data['priority']);
     $EA->addGlobalUpdateFields();
     try {
         $EA->update();
         $message = rex_i18n::msg('article_updated');
         // ----- PRIOR
         rex_sql::factory()->setTable(rex::getTable('article'))->setWhere('id = :id AND clang_id != :clang', ['id' => $article_id, 'clang' => $clang])->setValue('priority', $data['priority'])->addGlobalUpdateFields()->update();
         foreach (rex_clang::getAllIds() as $clangId) {
             self::newArtPrio($data['category_id'], $clangId, $data['priority'], $thisArt->getValue('priority'));
         }
         rex_article_cache::delete($article_id);
         // ----- EXTENSION POINT
         $message = rex_extension::registerPoint(new rex_extension_point('ART_UPDATED', $message, ['id' => $article_id, 'article' => clone $EA, 'article_old' => clone $thisArt, 'status' => $thisArt->getValue('status'), 'name' => $data['name'], 'clang' => $clang, 'parent_id' => $data['category_id'], 'priority' => $data['priority'], 'path' => $data['path'], 'template_id' => $data['template_id'], 'data' => $data]));
     } catch (rex_sql_exception $e) {
         throw new rex_api_exception($e);
     }
     return $message;
 }
예제 #4
0
파일: index.php 프로젝트: DECAF/redaxo
$fragment = new rex_fragment();
$fragment->setVar('heading', rex_i18n::msg('structure_categories_caption', $cat_name), false);
$fragment->setVar('content', $echo, false);
echo $fragment->parse('core/page/section.php');
// --------------------------------------------- ARTIKEL LISTE
$echo = '';
// --------------------- READ TEMPLATES
if ($category_id > 0 || $category_id == 0 && !rex::getUser()->getComplexPerm('structure')->hasMountpoints()) {
    $withTemplates = $this->getPlugin('content')->isAvailable();
    $tmpl_head = '';
    if ($withTemplates) {
        $template_select = new rex_select();
        $template_select->setName('template_id');
        $template_select->setSize(1);
        $template_select->setStyle('class="form-control"');
        $templates = rex_template::getTemplatesForCategory($category_id);
        if (count($templates) > 0) {
            foreach ($templates as $t_id => $t_name) {
                $template_select->addOption(rex_i18n::translate($t_name, false), $t_id);
                $TEMPLATE_NAME[$t_id] = rex_i18n::translate($t_name);
            }
        } else {
            $template_select->addOption(rex_i18n::msg('option_no_template'), '0');
        }
        $TEMPLATE_NAME[0] = rex_i18n::msg('template_default_name');
        $tmpl_head = '<th>' . rex_i18n::msg('header_template') . '</th>';
    }
    // --------------------- ARTIKEL LIST
    $art_add_link = '';
    if ($KATPERM) {
        $art_add_link = '<a href="' . $context->getUrl(['function' => 'add_art', 'artstart' => $artstart]) . '"' . rex::getAccesskey(rex_i18n::msg('article_add'), 'add_2') . '><i class="rex-icon rex-icon-add-article"></i></a>';