Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Changelog

## [2.0.0]

### Behoben

- **Metainfo im Tab:** Das Speichern der Artikel-Metadaten im eigenen Tab wurde an den stabilen Core-Workflow angepasst.
- **Deprecated-Meldung entfernt:** Die HTML-DOM-Verarbeitung in der Tab-Variante nutzt keine deprecated `mb_convert_encoding(..., 'HTML-ENTITIES', ...)`-Umwandlung mehr.
- **PHP-8.4-DOM-API:** DOM-Manipulationen nutzen jetzt `Dom\HTMLDocument` statt der alten `DOMDocument`-API.
- **Inline-JS bereinigt:** Die kleine Initialisierung auf der Kategorienseite läuft jetzt über das zentrale Asset statt über ein zusätzliches Inline-Script im Formular.
- **Bestehende Logikfehler korrigiert:** Doppelte Initialisierungen und unnötige `empty()`-Prüfungen wurden entfernt.

### Verbessert

- **Namespace-Migration:** Eigene Klassen liegen jetzt unter `FriendsOfREDAXO\StructureTweaks`.
- **REDAXO-Zielversion:** Das AddOn wird nur noch für REDAXO ab 5.19 gepflegt; alte Kompatibilitätszweige wurden zurückgebaut.
- **Script-Sicherheit:** Verbleibende Inline-Skripte im Backend tragen jetzt einen REDAXO-Nonce.
9 changes: 2 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,8 @@ Es können Kategorien bestimmt werden, vor denen ein breiter Trenner mit optiona

### 4. Artikel-Metadaten

#### bis REDAXO 5.9: in der Seitenspalte anzeigen

Die Artikel-Metainfos des Metainfo-Addons können optional statt in einem Tab in der Seitenspalte angezeigt werden. Dort werden sie mit den Metadaten der Strukturansicht kombiniert. Außerdem kann die Anzeige des Artikelstatus zum On- und Offlineschalten des Artikels genutzt werden.

#### ab REDAXO 5.10: in einem Tab anzeigen

Ab REDAXO 5.10 werden Metadaten als Standard in der Seitenspalte angezeigt. Das Addon bietet ab dieser REDAXO-Version die Möglichkeit, die Metadaten in einen Tab zu verschieben.
Die Artikel-Metadaten können im AddOn in einem eigenen Tab angezeigt werden.
Der Speichern-Workflow bleibt dabei im Metadaten-Tab, und die Metadaten lassen sich direkt dort pflegen.

### Credits

Expand Down
22 changes: 22 additions & 0 deletions assets/script.js
Original file line number Diff line number Diff line change
Expand Up @@ -332,6 +332,22 @@ var structureTweaks = function() {
* @returns {structureTweaks}
*/
this.pageCategories = function() {
var $categorySelect = jQuery('#rex-structure-tweaks-startartikel-article-id');
if ($categorySelect.length) {
$categorySelect
.addClass('selectpicker show-menu-arrow')
.attr('data-live-search', 'true')
.attr('data-size', '15');

if (jQuery.fn.selectpicker) {
if ($categorySelect.parent().hasClass('bootstrap-select')) {
$categorySelect.selectpicker('refresh');
} else {
$categorySelect.selectpicker();
}
}
}

var value = jQuery('#rex-structure-tweaks-startartikel-type option:selected').val();
if (value === undefined) {
value = "";
Expand All @@ -354,3 +370,9 @@ var structureTweaks = function() {
return this;
};
};

$(document).on('rex:ready', function() {
if ($('#rex-structure-tweaks-startartikel-type').length) {
new structureTweaks().pageCategories();
}
});
16 changes: 8 additions & 8 deletions boot.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,12 @@
* @var rex_addon $this
*/

use FriendsOfREDAXO\StructureTweaks\structure_tweaks_category_splitter;
use FriendsOfREDAXO\StructureTweaks\structure_tweaks_hide_categories;
use FriendsOfREDAXO\StructureTweaks\structure_tweaks_hide_category_functions;
use FriendsOfREDAXO\StructureTweaks\structure_tweaks_hide_startarticle;
use FriendsOfREDAXO\StructureTweaks\structure_tweaks_move_metainfo_to_tab;

if (rex::isBackend() && rex::getUser() && !rex::isSetup()) {
if (rex_addon::get('metainfo')->isAvailable() || rex_addon::get('structure')->isAvailable()) {
rex_view::addCssFile($this->getAssetsUrl('style.css'));
Expand All @@ -27,13 +33,7 @@
$this->setProperty('page', $page);

// Move meta infos
if (rex_string::versionCompare(rex::getVersion(), '5.10.0-dev', '<')) {
if ($this->getConfig('move_meta_info_page')) {
structure_tweaks_move_metainfo::init();
}
} else {
if ($this->getConfig('move_meta_info_to_tab')) {
structure_tweaks_move_metainfo_to_tab::init();
}
if ($this->getConfig('move_meta_info_to_tab', $this->getConfig('move_meta_info_page'))) {
structure_tweaks_move_metainfo_to_tab::init();
}
}
2 changes: 1 addition & 1 deletion install.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,4 @@
;

// Ensure that all updates are also executed on re-install
include ('update.php');
include __DIR__ . '/update.php';
26 changes: 17 additions & 9 deletions lib/base.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,28 @@
* @author Daniel Weitenauer
*/

namespace FriendsOfREDAXO\StructureTweaks;

use rex;
use rex_addon;
use rex_addon_interface;
use rex_i18n;
use rex_sql;

class structure_tweaks_base
{
/**
* @return string
* @return non-empty-string
*/
protected static function name()
protected static function name(): string
{
return self::addon()->getName();
}

/**
* @return rex_addon
* @return rex_addon_interface
*/
protected static function addon()
protected static function addon(): rex_addon_interface
{
return rex_addon::get('structure_tweaks');
}
Expand All @@ -25,23 +33,23 @@ protected static function addon()
* @param $string
* @return string
*/
protected static function msg($string)
protected static function msg(string $string): string
{
return \rex_i18n::msg(self::name().'_'.$string);
}

/**
* @param string $type
* @return array
* @return array<int, int>
*/
protected static function getArticles($type)
protected static function getArticles(string $type): array
{
$sql = rex_sql::factory();
$articles = $sql->getArray('SELECT * FROM '.rex::getTable(self::name()).' WHERE `type` = ?', [ $type ]);
$articles = $sql->getArray('SELECT * FROM '.rex::getTable(self::name()).' WHERE `type` = ?', [$type]);

$return = [];
foreach ($articles as $article) {
$return[] = $article['article_id'];
$return[] = (int) $article['article_id'];
}

return $return;
Expand Down
38 changes: 23 additions & 15 deletions lib/category_splitter.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,23 @@
* @author Friends of REDAXO
*/

namespace FriendsOfREDAXO\StructureTweaks;

use rex;
use rex_addon;
use rex_extension;
use rex_extension_point;
use rex_i18n;
use rex_request;
use rex_response;
use rex_sql;

class structure_tweaks_category_splitter extends structure_tweaks_base
{
/**
* Split categories
*/
public static function init()
public static function init(): void
{
rex_extension::register('PACKAGES_INCLUDED', function () {
if (rex_addon::get('structure')->isAvailable() && rex_request('page', 'string') == 'structure') {
Expand All @@ -18,18 +29,18 @@ public static function init()
}

/**
* @return array
* @return array<int, array{article_id: int, label: string}>
*/
public static function getSplitterCategories()
public static function getSplitterCategories(): array
{
$sql = rex_sql::factory();
$articles = $sql->getArray('SELECT * FROM '.rex::getTable(self::name()).' WHERE `type` = "split_category"');

$return = [];
foreach ($articles as $article) {
$item = [
'article_id' => $article['article_id'],
'label' => rex_i18n::translate($article['label']),
'article_id' => (int) $article['article_id'],
'label' => rex_i18n::translate((string) $article['label']),
];

$return[] = $item;
Expand All @@ -39,23 +50,20 @@ public static function getSplitterCategories()
}

/**
* EP CALLBACK
* @param rex_extension_point $ep
* @return string
* @param rex_extension_point<mixed> $ep
*/
public static function ep(rex_extension_point $ep)
public static function ep(rex_extension_point $ep): string
{
$subject = $ep->getSubject();

// Pass splitting categories to JavaScript
$split_categories = self::getSplitterCategories();
if (!empty($split_categories)) {
if ($split_categories !== []) {
$subject .= '
<script>
let structureTweaks_splitCategories = new structureTweaks();
structureTweaks_splitCategories.setSplitterCategories(\''.json_encode($split_categories).'\').splitCategories();
$(document).on(\'rex:ready\', function() {
structureTweaks_splitCategories.splitCategories();
<script nonce="' . rex_response::getNonce() . '">
$(document).on("rex:ready", function() {
const structureTweaksSplitCategories = new structureTweaks();
structureTweaksSplitCategories.setSplitterCategories(\'' . json_encode($split_categories) . '\').splitCategories();
});
</script>
';
Expand Down
Loading