Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
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
2 changes: 1 addition & 1 deletion .php-cs-fixer.cache
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"php":"8.3.20","version":"3.64.0:v3.64.0#58dd9c931c785a79739310aef5178928305ffa67","indent":" ","lineEnding":"\n","rules":{"binary_operator_spaces":{"default":"at_least_single_space"},"blank_line_after_opening_tag":true,"blank_line_between_import_groups":true,"blank_lines_before_namespace":true,"braces_position":{"allow_single_line_empty_anonymous_classes":true},"class_definition":{"inline_constructor_arguments":false,"space_before_parenthesis":true},"compact_nullable_type_declaration":true,"declare_equal_normalize":true,"lowercase_cast":true,"lowercase_static_reference":true,"new_with_parentheses":true,"no_blank_lines_after_class_opening":true,"no_extra_blank_lines":{"tokens":["use"]},"no_leading_import_slash":true,"no_whitespace_in_blank_line":true,"ordered_class_elements":{"order":["use_trait"]},"ordered_imports":{"imports_order":["class","function","const"],"sort_algorithm":"none"},"return_type_declaration":true,"short_scalar_cast":true,"single_import_per_statement":{"group_to_single_imports":false},"single_space_around_construct":{"constructs_followed_by_a_single_space":["abstract","as","case","catch","class","const_import","do","else","elseif","final","finally","for","foreach","function","function_import","if","insteadof","interface","namespace","new","private","protected","public","static","switch","trait","try","use","use_lambda","while"],"constructs_preceded_by_a_single_space":["as","else","elseif","use_lambda"]},"single_trait_insert_per_statement":true,"ternary_operator_spaces":true,"unary_operator_spaces":{"only_dec_inc":true},"visibility_required":true,"blank_line_after_namespace":true,"constant_case":true,"control_structure_braces":true,"control_structure_continuation_position":true,"elseif":true,"function_declaration":true,"indentation_type":true,"line_ending":true,"lowercase_keywords":true,"method_argument_space":{"attribute_placement":"ignore","on_multiline":"ensure_fully_multiline"},"no_break_comment":true,"no_closing_tag":true,"no_multiple_statements_per_line":true,"no_space_around_double_colon":true,"no_spaces_after_function_name":true,"no_trailing_whitespace":true,"no_trailing_whitespace_in_comment":true,"single_blank_line_at_eof":true,"single_class_element_per_statement":{"elements":["property"]},"single_line_after_imports":true,"spaces_inside_parentheses":true,"statement_indentation":true,"switch_case_semicolon_to_colon":true,"switch_case_space":true,"encoding":true,"full_opening_tag":true},"hashes":{"lib\/QuickNavigation\/Utility\/BuildNavigationArray.php":"d2a23cc394de4fd4e83bb34da8b3c0bc","lib\/QuickNavigation\/Media\/QuickNavigationMedia.php":"cb133a466b0024e0d2682de04cefdf0c","lib\/QuickNavigation\/LinkMap\/QuickNavigationLinkMap.php":"3060d0975067e724f1dd427eadb02d47","lib\/QuickNavigation\/rex_api_quicknavigation_render.php":"bf8a3f8aa45712984014768a68ba441f","lib\/QuickNavigation\/Minibar\/ArticleHistoryElement.php":"fa606bdfb8e44afdcd46695f36b5d327","lib\/QuickNavigation\/QuickNavigationApi.php":"4eabc25eae94790b9095085102dc278a","lib\/QuickNavigation\/Button\/ButtonInterface.php":"943bf3db82d39b6854401e16fe7e36b6","lib\/QuickNavigation\/Button\/ArticleNavigationButton.php":"0036d750da4417a5cf81bda896b01de7","lib\/QuickNavigation\/Button\/ButtonRegistry.php":"0ecf7951feeb0b3524fa1b8c92ac6288","lib\/QuickNavigation\/Button\/ArticleHistoryButton.php":"b60589453343c834038edfd26f3c7220","lib\/QuickNavigation\/Button\/CategoryButton.php":"fa0637c3410b461739392b4f4aa50c9d","lib\/QuickNavigation\/Button\/FavoriteButton.php":"382a3446b216ca0aaef31fa2f21e82d4","lib\/QuickNavigation\/Button\/WatsonButton.php":"ef0d3641591e83b6e7dfec54008e36a8","lib\/QuickNavigation\/Button\/YformButton.php":"0f33ef81e17add648d4bf64770faf19e","lib\/QuickNavigation\/QuickNavigation.php":"e7879d206a5a091437921d1570285cd9","lib\/QuickNavigation\/ApiFunction\/MenuRender.php":"fa555351a229780f110eba970ed42a59","fragments\/QuickNavigation\/MinibarList.php":"6c40eb3f991f48d730f45b8d222914b1","fragments\/QuickNavigation\/Dropdown.php":"7cc52d767a1b8fa704e4d89c9a3e48a7","fragments\/QuickNavigation\/NoResult.php":"9b879a1abf902a8aa81cb9e6ce5d921a","fragments\/QuickNavigation\/List.php":"e90ddecd29ce153eec1083841a3088e2","pages\/config.php":"dbdfa612c57ba9c8a2818118317d92db","pages\/index.php":"daf2b1a819e7a27391553c599d053802","update.php":"77c556570fd24e393bfa5653a276578f","boot.php":"0c2623ef04ca59e9779af0fcabdc361a"}}
{"php":"8.3.20","version":"3.64.0:v3.64.0#58dd9c931c785a79739310aef5178928305ffa67","indent":" ","lineEnding":"\n","rules":{"binary_operator_spaces":{"default":"at_least_single_space"},"blank_line_after_opening_tag":true,"blank_line_between_import_groups":true,"blank_lines_before_namespace":true,"braces_position":{"allow_single_line_empty_anonymous_classes":true},"class_definition":{"inline_constructor_arguments":false,"space_before_parenthesis":true},"compact_nullable_type_declaration":true,"declare_equal_normalize":true,"lowercase_cast":true,"lowercase_static_reference":true,"new_with_parentheses":true,"no_blank_lines_after_class_opening":true,"no_extra_blank_lines":{"tokens":["use"]},"no_leading_import_slash":true,"no_whitespace_in_blank_line":true,"ordered_class_elements":{"order":["use_trait"]},"ordered_imports":{"imports_order":["class","function","const"],"sort_algorithm":"none"},"return_type_declaration":true,"short_scalar_cast":true,"single_import_per_statement":{"group_to_single_imports":false},"single_space_around_construct":{"constructs_followed_by_a_single_space":["abstract","as","case","catch","class","const_import","do","else","elseif","final","finally","for","foreach","function","function_import","if","insteadof","interface","namespace","new","private","protected","public","static","switch","trait","try","use","use_lambda","while"],"constructs_preceded_by_a_single_space":["as","else","elseif","use_lambda"]},"single_trait_insert_per_statement":true,"ternary_operator_spaces":true,"unary_operator_spaces":{"only_dec_inc":true},"visibility_required":true,"blank_line_after_namespace":true,"constant_case":true,"control_structure_braces":true,"control_structure_continuation_position":true,"elseif":true,"function_declaration":true,"indentation_type":true,"line_ending":true,"lowercase_keywords":true,"method_argument_space":{"attribute_placement":"ignore","on_multiline":"ensure_fully_multiline"},"no_break_comment":true,"no_closing_tag":true,"no_multiple_statements_per_line":true,"no_space_around_double_colon":true,"no_spaces_after_function_name":true,"no_trailing_whitespace":true,"no_trailing_whitespace_in_comment":true,"single_blank_line_at_eof":true,"single_class_element_per_statement":{"elements":["property"]},"single_line_after_imports":true,"spaces_inside_parentheses":true,"statement_indentation":true,"switch_case_semicolon_to_colon":true,"switch_case_space":true,"encoding":true,"full_opening_tag":true},"hashes":{"lib\/QuickNavigation\/Utility\/BuildNavigationArray.php":"d2a23cc394de4fd4e83bb34da8b3c0bc","lib\/QuickNavigation\/Media\/QuickNavigationMedia.php":"53ed78c69f00c24375da79a9725e837c","lib\/QuickNavigation\/LinkMap\/QuickNavigationLinkMap.php":"3060d0975067e724f1dd427eadb02d47","lib\/QuickNavigation\/rex_api_quicknavigation_render.php":"bf8a3f8aa45712984014768a68ba441f","lib\/QuickNavigation\/Minibar\/ArticleHistoryElement.php":"fa606bdfb8e44afdcd46695f36b5d327","lib\/QuickNavigation\/QuickNavigationApi.php":"4eabc25eae94790b9095085102dc278a","lib\/QuickNavigation\/Button\/ButtonInterface.php":"943bf3db82d39b6854401e16fe7e36b6","lib\/QuickNavigation\/Button\/ArticleNavigationButton.php":"0036d750da4417a5cf81bda896b01de7","lib\/QuickNavigation\/Button\/ButtonRegistry.php":"0ecf7951feeb0b3524fa1b8c92ac6288","lib\/QuickNavigation\/Button\/ArticleHistoryButton.php":"b60589453343c834038edfd26f3c7220","lib\/QuickNavigation\/Button\/CategoryButton.php":"fa0637c3410b461739392b4f4aa50c9d","lib\/QuickNavigation\/Button\/FavoriteButton.php":"382a3446b216ca0aaef31fa2f21e82d4","lib\/QuickNavigation\/Button\/WatsonButton.php":"ef0d3641591e83b6e7dfec54008e36a8","lib\/QuickNavigation\/Button\/YformButton.php":"0f33ef81e17add648d4bf64770faf19e","lib\/QuickNavigation\/QuickNavigation.php":"e7879d206a5a091437921d1570285cd9","lib\/QuickNavigation\/ApiFunction\/MenuRender.php":"fa555351a229780f110eba970ed42a59","fragments\/QuickNavigation\/MinibarList.php":"6c40eb3f991f48d730f45b8d222914b1","fragments\/QuickNavigation\/Dropdown.php":"7cc52d767a1b8fa704e4d89c9a3e48a7","fragments\/QuickNavigation\/NoResult.php":"9b879a1abf902a8aa81cb9e6ce5d921a","fragments\/QuickNavigation\/List.php":"e90ddecd29ce153eec1083841a3088e2","pages\/config.php":"9f7cf272364c09f38e33d861d33e9727","pages\/index.php":"daf2b1a819e7a27391553c599d053802","update.php":"77c556570fd24e393bfa5653a276578f","boot.php":"0d9560c256e3636dccd102fc6a2b2ab1","lib\/QuickNavigation\/Button\/MediaSortButton.php":"11b7ff2c4b53cddada3229d898b9ed95","lib\/QuickNavigation\/Media\/MediaSorter.php":"427ad7f2ac3595cae5dca56ef85da78e"}}
8 changes: 7 additions & 1 deletion boot.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,11 @@
use FriendsOfRedaxo\QuickNavigation\Button\ArticleNavigationButton;
use FriendsOfRedaxo\QuickNavigation\Button\CategoryButton;
use FriendsOfRedaxo\QuickNavigation\Button\FavoriteButton;
use FriendsOfRedaxo\QuickNavigation\Button\MediaSortButton;
use FriendsOfRedaxo\QuickNavigation\Button\WatsonButton;
use FriendsOfRedaxo\QuickNavigation\Button\YformButton;
use FriendsOfRedaxo\QuickNavigation\Linkmap\QuickNavigationLinkMap;
use FriendsOfRedaxo\QuickNavigation\Media\MediaSorter;
use FriendsOfRedaxo\QuickNavigation\Media\QuickNavigationMedia;
use FriendsOfRedaxo\QuickNavigation\Minibar\ArticleHistoryElement;
use rex;
Expand All @@ -29,6 +31,7 @@
use rex_be_controller;
use rex_clang;
use rex_extension;
use rex_extension_point;
use rex_minibar;
use rex_perm;
use rex_url;
Expand Down Expand Up @@ -56,7 +59,7 @@
rex_perm::register('quick_navigation[history]');
rex_perm::register('quick_navigation[all_changes]');

rex_extension::register('PAGE_TITLE', static function ($ep) {
rex_extension::register('PAGE_TITLE', static function (\rex_extension_point $ep) {
if (rex_be_controller::getCurrentPageObject()->isPopup()) {
return $ep->getSubject();
}
Expand All @@ -78,6 +81,9 @@
});
rex_extension::register('PAGE_TITLE_SHOWN', QuickNavigationLinkMap::LinkMapNavigation(...));
rex_extension::register('MEDIA_LIST_TOOLBAR', QuickNavigationMedia::MediaHistory(...));

// Registriere den Extension Point für die Mediensortierung
rex_extension::register('MEDIA_LIST_QUERY', [QuickNavigationMedia::class, 'ModifyMediaListQuery']);
}
}

Expand Down
5 changes: 5 additions & 0 deletions lang/de_de.lang
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,8 @@ quick_navigation_favorite_article_add = Artikel hinzufügen in:
quick_navigation_favorite_category_add = Kategorie hinzufügen in:
quick_navigation_yform = YForm
quick_navigation_yform_add = Datensatz hinzufügen in:

# Medienpool-Sortierung (nur die Beschriftungen für den Button beibehalten)
quick_navigation_media_sort_alpha = Nach Dateinamen sortieren (A-Z)
quick_navigation_media_sort_date = Nach Datum sortieren (neueste zuerst)
quick_navigation_media_sort_title = Nach Titel sortieren (A-Z)
57 changes: 57 additions & 0 deletions lib/QuickNavigation/Button/MediaSortButton.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
<?php

namespace FriendsOfRedaxo\QuickNavigation\Button;

use rex;
use rex_addon;
use rex_i18n;
use rex_request;

class MediaSortButton implements ButtonInterface
{
public function get(): string
{
// Prüfen, ob der Benutzer die Berechtigung hat und ob die Funktion aktiviert ist
$user = rex::getUser()->getId();
$package = rex_addon::get('quick_navigation');

if (!rex::getUser() || $package->getConfig('quick_navigation_mediasort' . $user) !== '1') {
return '';
}

// Aktuellen Sortierstatus aus dem Cookie oder Session auslesen
$sortMode = rex_request::cookie('media_sort_alphabetical', 'string', 'false');

// Icon und Titel basierend auf dem aktuellen Status setzen
$icon = $sortMode === 'true' ? 'fa-sort-alpha-asc' : 'fa-sort-numeric-desc';
$title = $sortMode === 'true' ? rex_i18n::msg('quick_navigation_media_sort_date') : rex_i18n::msg('quick_navigation_media_sort_alpha');

return '<div class="btn-group">
<a class="btn btn-default" id="qn-mediasort-toggle" title="' . $title . '">
<i class="fa ' . $icon . '"></i>
</a>
</div>
<script>
document.addEventListener("DOMContentLoaded", function() {
var sortButton = document.getElementById("qn-mediasort-toggle");
if (sortButton) {
sortButton.addEventListener("click", function() {
// Cookie umschalten
var currentSort = getCookie("media_sort_alphabetical") === "true";
document.cookie = "media_sort_alphabetical=" + (!currentSort) + "; path=/";

// Seite neu laden
window.location.reload();
});
}

function getCookie(name) {
var value = "; " + document.cookie;
var parts = value.split("; " + name + "=");
if (parts.length === 2) return parts.pop().split(";").shift();
return "false";
}
});
</script>';
}
}
45 changes: 45 additions & 0 deletions lib/QuickNavigation/Media/MediaSorter.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<?php

namespace FriendsOfRedaxo\QuickNavigation\Media;

use rex;
use rex_addon;
use rex_extension_point;
use rex_request;

class MediaSorter
{
/**
* Verändert die Sortierung der Medienliste je nach Einstellung im Cookie
*
* @param rex_extension_point $ep
* @return string
*/
public static function modifyMediaListQuery(rex_extension_point $ep): string
{
// Nur ausführen, wenn der Benutzer die Berechtigung hat und die Funktion aktiviert ist
$user = rex::getUser()->getId();
$package = rex_addon::get('quick_navigation');

if (!rex::getUser() || $package->getConfig('quick_navigation_mediasort' . $user) !== '1') {
return $ep->getSubject();
}

// Aktuellen Sortierstatus aus dem Cookie auslesen
$sortMode = rex_request::cookie('media_sort_alphabetical', 'string', 'false');

// Wenn alphabetische Sortierung gewünscht ist
if ($sortMode === 'true') {
$subject = $ep->getSubject();

// Ab REDAXO 5.13.3 ist das korrekte Feld 'f.filename'
$subject = str_replace("f.updatedate", "f.filename, f.updatedate", $subject);
$subject = str_replace("desc", "asc", $subject);

return $subject;
}

// Ansonsten die Standardsortierung beibehalten
return $ep->getSubject();
}
}
Loading