2012-01-29 19:32:33 +01:00
< ? php
/**
* ownCloud - bookmarks plugin
*
* @ author Arthur Schiwon
* @ copyright 2011 Arthur Schiwon blizzz @ arthur - schiwon . de
*
* This library is free software ; you can redistribute it and / or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
* License as published by the Free Software Foundation ; either
* version 3 of the License , or any later version .
*
* This library is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU AFFERO GENERAL PUBLIC LICENSE for more details .
*
* You should have received a copy of the GNU Affero General Public
* License along with this library . If not , see < http :// www . gnu . org / licenses />.
*
*/
/**
* This class manages bookmarks
*/
class OC_Bookmarks_Bookmarks {
2012-06-27 17:37:38 +02:00
/**
* @ brief Find People with whome we shared bookmarks and how much
*/
public static function findSharing ( $offset = 0 , $limit = 10 ){
$query = OCP\DB :: prepare ( 'SELECT \'@public\' as name, count(*) as nbr from *PREFIX*bookmarks where public=1 group by public LIMIT ' . $offset . ', ' . $limit );
$tags = $query -> execute () -> fetchAll ();
return $tags ;
}
2012-06-26 17:43:03 +02:00
/**
* @ brief Finds all tags for bookmarks
*/
public static function findTags ( $offset = 0 , $limit = 10 ){
2012-06-27 16:32:04 +02:00
$query = OCP\DB :: prepare ( 'SELECT tag, count(*) as nbr from *PREFIX*bookmarks_tags group by tag LIMIT ' . $offset . ', ' . $limit );
2012-06-26 17:43:03 +02:00
$tags = $query -> execute () -> fetchAll ();
return $tags ;
}
2012-01-29 19:32:33 +01:00
/**
* @ brief Finds all bookmarks , matching the filter
* @ param offset result offset
* @ param sqlSortColumn sort result with this column
* @ param filter can be : empty -> no filter , a string -> filter this , a string array -> filter for all strings
2012-06-27 14:14:45 +02:00
* @ param filterTagOnly if true , filter affects only tags , else filter affects url , title and tags
2012-01-29 19:32:33 +01:00
* @ return void
*/
public static function findBookmarks ( $offset , $sqlSortColumn , $filter , $filterTagOnly ){
2012-05-02 13:28:56 +02:00
$CONFIG_DBTYPE = OCP\Config :: getSystemValue ( 'dbtype' , 'sqlite' );
2012-06-27 14:14:45 +02:00
$limit = 10 ;
2012-05-01 18:50:31 +02:00
$params = array ( OCP\USER :: getUser ());
2012-06-27 14:14:45 +02:00
$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
LIMIT $limit
OFFSET $offset " ;
$query = OCP\DB :: prepare ( $sql );
/*
2012-01-29 19:32:33 +01:00
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' ){
2012-05-03 13:06:08 +02:00
$query = OCP\DB :: prepare ( '
2012-07-30 20:46:14 +02:00
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`
2012-01-29 19:32:33 +01:00
WHERE
2012-07-30 20:46:14 +02:00
`*PREFIX*bookmarks` . `user_id` = ?
GROUP BY `id` , `url` , `title`
2012-01-29 19:32:33 +01:00
'.$sqlFilterTag.'
2012-07-30 22:42:43 +02:00
ORDER BY `*PREFIX*bookmarks` . `'.$sqlSortColumn.'` DESC ' ,
10 , $offset );
2012-01-29 19:32:33 +01:00
} else {
if ( $CONFIG_DBTYPE == 'sqlite' or $CONFIG_DBTYPE == 'sqlite3' )
$concatFunction = '(url || title || ' ;
else
$concatFunction = 'Concat(Concat( url, title), ' ;
2012-05-03 13:06:08 +02:00
$query = OCP\DB :: prepare ( '
2012-07-30 20:46:14 +02:00
SELECT `id` , `url` , `title` , '
2012-01-29 19:32:33 +01:00
. ( $filterTagOnly ? '' : $concatFunction ) .
2012-07-30 20:46:14 +02:00
' CASE WHEN `*PREFIX*bookmarks` . `id` = `*PREFIX*bookmarks_tags` . `bookmark_id`
THEN GROUP_CONCAT ( `tag` ' .$_gc_separator. ' )
2012-01-29 19:32:33 +01:00
ELSE \ ' \ '
END '
. ( $filterTagOnly ? '' : ')' ) . '
2012-07-30 20:46:14 +02:00
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`
2012-01-29 19:32:33 +01:00
)
)
2012-07-30 20:46:14 +02:00
AND `*PREFIX*bookmarks` . `user_id` = ?
GROUP BY `url`
2012-01-29 19:32:33 +01:00
'.$sqlFilterTag.'
2012-07-30 22:42:43 +02:00
ORDER BY `*PREFIX*bookmarks` . `'.$sqlSortColumn.'` DESC ' ,
10 , $offset );
2012-01-29 19:32:33 +01:00
}
2012-06-27 14:14:45 +02:00
+*/
$results = $query -> execute ( $params ) -> fetchAll ();
$bookmarks = array ();
foreach ( $results as $result ){
$result [ 'tags' ] = explode ( ',' , $result [ 'tags' ]);
$bookmarks [] = $result ;
}
2012-01-29 19:32:33 +01:00
return $bookmarks ;
}
2012-05-03 17:29:08 +02:00
public static function deleteUrl ( $id )
{
$user = OCP\USER :: getUser ();
$query = OCP\DB :: prepare ( "
2012-07-30 20:46:14 +02:00
SELECT `id` FROM `*PREFIX*bookmarks`
WHERE `id` = ?
AND `user_id` = ?
2012-05-03 17:29:08 +02:00
" );
$result = $query -> execute ( array ( $id , $user ));
$id = $result -> fetchOne ();
if ( $id === false ) {
return false ;
}
$query = OCP\DB :: prepare ( "
2012-07-30 20:46:14 +02:00
DELETE FROM `*PREFIX*bookmarks`
WHERE `id` = $id
2012-05-03 17:29:08 +02:00
" );
$result = $query -> execute ();
$query = OCP\DB :: prepare ( "
2012-07-30 20:46:14 +02:00
DELETE FROM `*PREFIX*bookmarks_tags`
WHERE `bookmark_id` = $id
2012-05-03 17:29:08 +02:00
" );
$result = $query -> execute ();
return true ;
}
2012-01-29 19:32:33 +01:00
}