diff --git a/.php-cs-fixer.cache b/.php-cs-fixer.cache index c8512b7..2b5d272 100644 --- a/.php-cs-fixer.cache +++ b/.php-cs-fixer.cache @@ -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"}} \ No newline at end of file +{"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"}} \ No newline at end of file diff --git a/boot.php b/boot.php index e5d3f02..983d622 100644 --- a/boot.php +++ b/boot.php @@ -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; @@ -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; @@ -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(); } @@ -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']); } } diff --git a/lang/de_de.lang b/lang/de_de.lang index ee0c420..d4c42c9 100644 --- a/lang/de_de.lang +++ b/lang/de_de.lang @@ -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) diff --git a/lib/QuickNavigation/Button/MediaSortButton.php b/lib/QuickNavigation/Button/MediaSortButton.php new file mode 100644 index 0000000..69f9732 --- /dev/null +++ b/lib/QuickNavigation/Button/MediaSortButton.php @@ -0,0 +1,57 @@ +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 '