diff --git a/core/controllers/playlists.php b/core/controllers/playlists.php
index b075ba7c..0a926d55 100644
--- a/core/controllers/playlists.php
+++ b/core/controllers/playlists.php
@@ -140,7 +140,10 @@ public function search()
$my = $this->data('my');
- $search_result = $this->models->playlists('search', $query, $limit, $offset, $sort_by, $sort_dir, $my);
+ $owner = $this->data('owner');
+ $group = $this->data('group');
+
+ $search_result = $this->models->playlists('search', $query, $limit, $offset, $sort_by, $sort_dir, $my, $owner, $group);
foreach ($search_result['playlists'] as &$playlist) {
$playlist['can_edit'] = $this->user_can_edit($playlist);
diff --git a/core/models/media_model.php b/core/models/media_model.php
index ad873823..5382fbab 100644
--- a/core/models/media_model.php
+++ b/core/models/media_model.php
@@ -954,7 +954,7 @@ public function search_filters_validate($args = [])
OBFHelpers::require_args($args, ['filters']);
$filters = $args['filters'];
- $allowed_filters = ['comments','artist','title','album','year','type','category','country','language','genre','duration','is_copyright_owner','status','dynamic_select'];
+ $allowed_filters = ['comments','artist','title','album','year','type','category','country','language','genre','duration','is_copyright_owner','status','dynamic_select','owner','group'];
$allowed_operators = [
// deprecated
'like',
@@ -1037,6 +1037,7 @@ public function search_filters_where_array($args = [])
$column_array['comments'] = 'media.comments';
$column_array['is_copyright_owner'] = 'media.is_copyright_owner';
$column_array['dynamic_select'] = 'media.dynamic_select';
+ $column_array['owner'] = 'media.owner_id';
$metadata_fields = $this->models->mediametadata('get_all');
$metadata_defaults = [];
@@ -1057,6 +1058,18 @@ public function search_filters_where_array($args = [])
}
}
+ // group filter uses a subquery on media_permissions_groups
+ if ($filter['filter'] === 'group') {
+ $group_id = $this->db->escape($filter['val']);
+ if (in_array($filter['op'], ['is', 'eq'])) {
+ $tmp_sql = 'media.id IN (SELECT media_id FROM media_permissions_groups WHERE group_id = "' . $group_id . '")';
+ } else {
+ $tmp_sql = 'media.id NOT IN (SELECT media_id FROM media_permissions_groups WHERE group_id = "' . $group_id . '")';
+ }
+ $where_array[] = $tmp_sql;
+ continue;
+ }
+
// find_in_set works a bit differently
// TODO note not_has deprecated
if (in_array($filter['op'], ['has','not_has','nhas'])) {
diff --git a/core/models/playlists_model.php b/core/models/playlists_model.php
index 86649a37..4563504b 100644
--- a/core/models/playlists_model.php
+++ b/core/models/playlists_model.php
@@ -294,7 +294,7 @@ public function where_used($id)
*
* @return [num_results, playlists]
*/
- public function search($query, $limit, $offset, $sort_by, $sort_dir, $my = false)
+ public function search($query, $limit, $offset, $sort_by, $sort_dir, $my = false, $owner = null, $group = null)
{
$where_strings = [];
@@ -310,6 +310,16 @@ public function search($query, $limit, $offset, $sort_by, $sort_dir, $my = false
$where_strings[] = 'owner_id = "' . $this->db->escape($this->user->param('id')) . '"';
}
+ // filter by owner
+ if (!empty($owner)) {
+ $where_strings[] = 'owner_id = "' . $this->db->escape($owner) . '"';
+ }
+
+ // filter by group
+ if (!empty($group)) {
+ $where_strings[] = 'playlists.id IN (SELECT playlist_id FROM playlists_permissions_groups WHERE group_id = "' . $this->db->escape($group) . '")';
+ }
+
if (count($where_strings) > 0) {
$this->db->where_string(implode(' AND ', $where_strings));
}
diff --git a/public/html/sidebar/advanced_search.html b/public/html/sidebar/advanced_search.html
index cffcba45..fc27bffc 100644
--- a/public/html/sidebar/advanced_search.html
+++ b/public/html/sidebar/advanced_search.html
@@ -23,6 +23,8 @@
+
+