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; }
/** * 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; }
/** * 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; }
$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>';