mirror of
https://github.com/owncloud/bookmarks.git
synced 2025-02-20 17:54:25 +01:00
First step of filtering by tags and related tags
This commit is contained in:
parent
8c0a621fb3
commit
b59cbe425d
@ -28,8 +28,9 @@ OCP\JSON::checkAppEnabled('bookmarks');
|
||||
|
||||
|
||||
//Filter for tag?
|
||||
$filterTag = isset($_POST['tag']) ? htmlspecialchars_decode($_POST['tag']) : false;
|
||||
|
||||
$filterTag = isset($_POST['tag']) ? htmlspecialchars_decode($_POST['tag']) : '';
|
||||
$filterTag = explode(',',$filterTag);
|
||||
if($filterTag[0] =='') unset($filterTag[0]);
|
||||
$offset = isset($_POST['page']) ? intval($_POST['page']) * 10 : 0;
|
||||
|
||||
$sort = isset($_POST['sort']) ? ($_POST['sort']) : 'bookmarks_sorting_recent';
|
||||
@ -39,7 +40,6 @@ if($sort == 'bookmarks_sorting_clicks') {
|
||||
$sqlSortColumn = 'id';
|
||||
}
|
||||
|
||||
|
||||
$bookmarks = OC_Bookmarks_Bookmarks::findBookmarks($offset, $sqlSortColumn, $filterTag, true);
|
||||
|
||||
OCP\JSON::success(array('data' => $bookmarks));
|
||||
|
@ -31,11 +31,13 @@ OCP\App::setActiveNavigationEntry( 'bookmarks_index' );
|
||||
|
||||
OCP\Util::addscript('bookmarks','bookmarks');
|
||||
OCP\Util::addStyle('bookmarks', 'bookmarks');
|
||||
|
||||
$qtags = OC_Bookmarks_Bookmarks::findTags();
|
||||
$tags = explode(',', isset($_GET['tag']) ? $_GET['tag'] : '');
|
||||
if($tags[0] =='') unset($tags[0]);
|
||||
$qtags = OC_Bookmarks_Bookmarks::findTags($tags);
|
||||
$shared = OC_Bookmarks_Bookmarks::findSharing();
|
||||
|
||||
$tmpl = new OCP\Template( 'bookmarks', 'list', 'user' );
|
||||
$tmpl->assign('req_tag',isset($_GET['tag']) ? $_GET['tag'] : '');
|
||||
$tmpl->assign('tags', $qtags);
|
||||
$tmpl->assign('shared', $shared);
|
||||
$tmpl->printPage();
|
||||
|
@ -37,9 +37,20 @@ class OC_Bookmarks_Bookmarks{
|
||||
/**
|
||||
* @brief Finds all tags for bookmarks
|
||||
*/
|
||||
public static function findTags($offset = 0, $limit = 10){
|
||||
$query = OCP\DB::prepare('SELECT tag, count(*) as nbr from *PREFIX*bookmarks_tags group by tag LIMIT '.$offset.', '.$limit);
|
||||
$tags = $query->execute()->fetchAll();
|
||||
public static function findTags($filterTags = array(), $offset = 0, $limit = 10){
|
||||
//$query = OCP\DB::prepare('SELECT tag, count(*) as nbr from *PREFIX*bookmarks_tags group by tag LIMIT '.$offset.', '.$limit);
|
||||
|
||||
$params = array_merge($filterTags,$filterTags);
|
||||
$not_in = '';
|
||||
|
||||
if(!empty($filterTags) ) {
|
||||
$not_in = ' where tag not in ('. implode(',',array_fill(0, count($filterTags) ,'?') ) .')'.
|
||||
str_repeat(" AND exists (select 1 from *PREFIX*bookmarks_tags t2 where t2.bookmark_id = t.bookmark_id and tag = ?) ", count($filterTags));
|
||||
}
|
||||
$sql = 'SELECT tag, count(*) as nbr from *PREFIX*bookmarks_tags t '.$not_in.
|
||||
'group by tag Order by nbr DESC LIMIT '.$offset.', '.$limit;
|
||||
$query = OCP\DB::prepare($sql);
|
||||
$tags = $query->execute($params)->fetchAll();
|
||||
return $tags;
|
||||
}
|
||||
/**
|
||||
@ -54,85 +65,22 @@ class OC_Bookmarks_Bookmarks{
|
||||
$CONFIG_DBTYPE = OCP\Config::getSystemValue( 'dbtype', 'sqlite' );
|
||||
$limit = 10;
|
||||
$params=array(OCP\USER::getUser());
|
||||
$sql = "SELECT *, (select GROUP_CONCAT(tag) from oc_bookmarks_tags where bookmark_id = id) as tags
|
||||
FROM *PREFIX*bookmarks
|
||||
WHERE user_id = ?
|
||||
ORDER BY *PREFIX*bookmarks.".$sqlSortColumn." DESC
|
||||
//@TODO replace GROUP_CONCAT for postgresql
|
||||
$sql = "SELECT *, (select GROUP_CONCAT(tag) from oc_bookmarks_tags where bookmark_id = b.id) as tags
|
||||
FROM *PREFIX*bookmarks b
|
||||
WHERE user_id = ? ";
|
||||
|
||||
if($filterTagOnly) {
|
||||
if(is_string($filter)) $filter = array($filter);
|
||||
|
||||
$sql .= str_repeat(" AND exists (select id from *PREFIX*bookmarks_tags t2 where t2.bookmark_id = b.id and tag = ?) ", count($filter));
|
||||
$params = array_merge($params, $filter);
|
||||
}
|
||||
$sql .= " ORDER BY ".$sqlSortColumn." DESC
|
||||
LIMIT $limit
|
||||
OFFSET $offset";
|
||||
|
||||
$query = OCP\DB::prepare($sql);
|
||||
/*
|
||||
if( $CONFIG_DBTYPE == 'sqlite' or $CONFIG_DBTYPE == 'sqlite3' ){
|
||||
$_gc_separator = ', \' \'';
|
||||
} else {
|
||||
$_gc_separator = 'SEPARATOR \' \'';
|
||||
}
|
||||
|
||||
if($filter){
|
||||
if($CONFIG_DBTYPE == 'pgsql' )
|
||||
$tagString = 'array_to_string(array_agg(tag), \' \')';
|
||||
else
|
||||
$tagString = 'tags';
|
||||
|
||||
$sqlFilterTag = 'HAVING ';
|
||||
if(is_array($filter)){
|
||||
$first = true;
|
||||
$filterstring = '';
|
||||
foreach ($filter as $singleFilter){
|
||||
$filterstring = $filterstring . ($first?'':' AND ') . $tagString.' LIKE ? ';
|
||||
$params[] = '%'.$singleFilter.'%';
|
||||
$first=false;
|
||||
}
|
||||
$sqlFilterTag = $sqlFilterTag . $filterstring;
|
||||
} else{
|
||||
$sqlFilterTag = $sqlFilterTag .$tagString.' LIKE ? ';
|
||||
$params[] = '%'.$filter.'%';
|
||||
}
|
||||
} else {
|
||||
$sqlFilterTag = '';
|
||||
}
|
||||
|
||||
if($CONFIG_DBTYPE == 'pgsql' ){
|
||||
$query = OCP\DB::prepare('
|
||||
SELECT `id`, `url`, `title`, '.($filterTagOnly?'':'`url` || `title` ||').' array_to_string(array_agg(`tag`), \' \') as `tags`
|
||||
FROM `*PREFIX*bookmarks`
|
||||
LEFT JOIN `*PREFIX*bookmarks_tags` ON `*PREFIX*bookmarks`.`id` = `*PREFIX*bookmarks_tags`.`bookmark_id`
|
||||
WHERE
|
||||
`*PREFIX*bookmarks`.`user_id` = ?
|
||||
GROUP BY `id`, `url`, `title`
|
||||
'.$sqlFilterTag.'
|
||||
ORDER BY `*PREFIX*bookmarks`.`'.$sqlSortColumn.'` DESC',
|
||||
10,$offset);
|
||||
} else {
|
||||
if( $CONFIG_DBTYPE == 'sqlite' or $CONFIG_DBTYPE == 'sqlite3' )
|
||||
$concatFunction = '(url || title || ';
|
||||
else
|
||||
$concatFunction = 'Concat(Concat( url, title), ';
|
||||
|
||||
$query = OCP\DB::prepare('
|
||||
SELECT `id`, `url`, `title`, '
|
||||
.($filterTagOnly?'':$concatFunction).
|
||||
'CASE WHEN `*PREFIX*bookmarks`.`id` = `*PREFIX*bookmarks_tags`.`bookmark_id`
|
||||
THEN GROUP_CONCAT( `tag` ' .$_gc_separator. ' )
|
||||
ELSE \' \'
|
||||
END '
|
||||
.($filterTagOnly?'':')').'
|
||||
AS `tags`
|
||||
FROM `*PREFIX*bookmarks`
|
||||
LEFT JOIN `*PREFIX*bookmarks_tags` ON 1=1
|
||||
WHERE (`*PREFIX*bookmarks`.`id` = `*PREFIX*bookmarks_tags`.`bookmark_id`
|
||||
OR `*PREFIX*bookmarks`.`id` NOT IN (
|
||||
SELECT `*PREFIX*bookmarks_tags`.`bookmark_id` FROM `*PREFIX*bookmarks_tags`
|
||||
)
|
||||
)
|
||||
AND `*PREFIX*bookmarks`.`user_id` = ?
|
||||
GROUP BY `url`
|
||||
'.$sqlFilterTag.'
|
||||
ORDER BY `*PREFIX*bookmarks`.`'.$sqlSortColumn.'` DESC',
|
||||
10, $offset);
|
||||
}
|
||||
+*/
|
||||
$results = $query->execute($params)->fetchAll();
|
||||
$bookmarks = array();
|
||||
foreach($results as $result){
|
||||
|
@ -7,18 +7,19 @@
|
||||
* See the COPYING-README file.
|
||||
*/
|
||||
?>
|
||||
<input type="hidden" id="bookmarkFilterTag" value="<?php if(isset($_GET['tag'])) echo OCP\Util::sanitizeHTML($_GET['tag']); ?>" />
|
||||
<input type="hidden" id="bookmarkFilterTag" value="<?php echo $_['req_tag']; ?>" />
|
||||
<div id="controls">
|
||||
<input type="submit" value="<?php echo $l->t('New bookmark'); ?>" id="bookmark_add_submit" />
|
||||
</div>
|
||||
<div id="leftcontent">
|
||||
<p id="tag_filter">
|
||||
<input type="text" placeholder="Filter By tag" value="<?php if(isset($_GET['tag'])) echo OCP\Util::sanitizeHTML($_GET['tag']); ?>"/>
|
||||
<input type="text" placeholder="Filter By tag" value="<?php echo $_['req_tag']; ?>"/>
|
||||
</p>
|
||||
|
||||
<label><?php echo $l->t('Related Tags'); ?></label>
|
||||
<ul class="tag_list">
|
||||
<?php foreach($_['tags'] as $tag):?>
|
||||
<li><span class="tag"><?php echo $tag['tag'];?></span>
|
||||
<li><a href="<?php echo OCP\Util::linkToAbsolute( 'bookmarks', 'index.php').'&tag='.$_['req_tag'].','.$tag['tag'];?>" class="tag"><?php echo $tag['tag'];?></a>
|
||||
<p class="tags_actions">
|
||||
<span class="bookmark_edit">
|
||||
<img class="svg" src="<?php echo OCP\image_path('core','actions/rename.svg') ?>" title="Edit">
|
||||
@ -31,9 +32,8 @@
|
||||
</li>
|
||||
<?php endforeach;?>
|
||||
</ul>
|
||||
|
||||
<label><?php echo $l->t('Shared with'); ?></label>
|
||||
<hr />
|
||||
|
||||
<ul class="share_list">
|
||||
<?php foreach($_['shared'] as $users):?>
|
||||
<li><span class="tag"><?php echo $users['name'];?></span>
|
||||
|
Loading…
x
Reference in New Issue
Block a user