Skip to content

Commit de8cc08

Browse files
authored
Merge pull request #169 from CarvingIT/feature/sortingcollections
Add collection sorting feature with gear icon dropdown.
2 parents 0f768e2 + 006215c commit de8cc08

File tree

2 files changed

+51
-2
lines changed

2 files changed

+51
-2
lines changed

app/Http/Controllers/CollectionController.php

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public function add_edit_collection($collection_id){
5050
}
5151

5252

53-
public function list(){
53+
public function list(Request $request){
5454
$collections = $this->userCollections(['VIEW_OWN','VIEW','MAINTAINER']);
5555
$stats = [];
5656
foreach($collections as $collection){
@@ -59,7 +59,32 @@ public function list(){
5959
"size" => $collection->size_active
6060
];
6161
}
62-
return view('collections', ['title'=>'Smart Repository','activePage'=>'collections','titlePage'=>'Collections','collections'=>$collections, 'stats'=>$stats]);
62+
63+
// Handle sorting
64+
$sort_by = $request->input('sort_by', 'name_asc'); // default to alphabetical ascending
65+
66+
switch($sort_by) {
67+
case 'name_asc':
68+
$collections = $collections->sortBy('name', SORT_NATURAL|SORT_FLAG_CASE);
69+
break;
70+
case 'name_desc':
71+
$collections = $collections->sortByDesc('name', SORT_NATURAL|SORT_FLAG_CASE);
72+
break;
73+
case 'size_asc':
74+
$collections = $collections->sortBy(function($collection) use ($stats) {
75+
return isset($stats[$collection->id]) ? (int)$stats[$collection->id]->cnt : 0;
76+
});
77+
break;
78+
case 'size_desc':
79+
$collections = $collections->sortByDesc(function($collection) use ($stats) {
80+
return isset($stats[$collection->id]) ? (int)$stats[$collection->id]->cnt : 0;
81+
});
82+
break;
83+
default:
84+
$collections = $collections->sortBy('name', SORT_NATURAL|SORT_FLAG_CASE);
85+
}
86+
87+
return view('collections', ['title'=>'Smart Repository','activePage'=>'collections','titlePage'=>'Collections','collections'=>$collections, 'stats'=>$stats, 'sort_by'=>$sort_by]);
6388
}
6489

6590
public function save(Request $request){

resources/views/collections.blade.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,30 @@
33
@section('content')
44
<div class="container">
55
<div class="container-fluid">
6+
<div class="row justify-content-end mb-3">
7+
<div class="col-auto">
8+
<div class="dropdown">
9+
<button class="btn btn-sm btn-primary dropdown-toggle" type="button" id="sortDropdown" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
10+
<i class="material-icons" style="font-size: 18px; vertical-align: middle;">settings</i> SORT
11+
</button>
12+
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="sortDropdown">
13+
<a class="dropdown-item {{ (isset($sort_by) && $sort_by == 'name_asc') ? 'active' : '' }}" href="/collections?sort_by=name_asc">
14+
<span style="display: inline-block; width: 35px;">A→Z</span> Name (A-Z)
15+
</a>
16+
<a class="dropdown-item {{ (isset($sort_by) && $sort_by == 'name_desc') ? 'active' : '' }}" href="/collections?sort_by=name_desc">
17+
<span style="display: inline-block; width: 35px;">Z→A</span> Name (Z-A)
18+
</a>
19+
<div class="dropdown-divider"></div>
20+
<a class="dropdown-item {{ (isset($sort_by) && $sort_by == 'size_desc') ? 'active' : '' }}" href="/collections?sort_by=size_desc">
21+
<i class="material-icons" style="font-size: 16px; vertical-align: middle; display: inline-block; width: 35px;">arrow_downward</i> Documents (High to Low)
22+
</a>
23+
<a class="dropdown-item {{ (isset($sort_by) && $sort_by == 'size_asc') ? 'active' : '' }}" href="/collections?sort_by=size_asc">
24+
<i class="material-icons" style="font-size: 16px; vertical-align: middle; display: inline-block; width: 35px;">arrow_upward</i> Documents (Low to High)
25+
</a>
26+
</div>
27+
</div>
28+
</div>
29+
</div>
630
<div class="row justify-content-center">
731
@foreach ($collections as $c)
832
@if($c->content_type == 'Web resources' && env('SHOW_WEB_RESOURCES') != 1)

0 commit comments

Comments
 (0)