diff options
author | David Iwanowitsch <david+git@unclouded.de> | 2012-01-29 19:32:33 +0100 |
---|---|---|
committer | Robin Appelman <icewind@owncloud.com> | 2012-02-01 15:40:59 +0100 |
commit | e229a6adecde57d919b6b1385729cbf8cd41fe89 (patch) | |
tree | c3d3908d6f3cc144b90bec6e1a58b6b4a32a63ed /apps/bookmarks/lib | |
parent | 4145e3b2651312b5949de3aae4f34c1be5332eb8 (diff) | |
download | nextcloud-server-e229a6adecde57d919b6b1385729cbf8cd41fe89.tar.gz nextcloud-server-e229a6adecde57d919b6b1385729cbf8cd41fe89.zip |
Added searchprovider for bookmarks, initial l10n support for bookmark plugin
moved some code from updateList.php to bookmarks.php, to make it reusable
Diffstat (limited to 'apps/bookmarks/lib')
-rw-r--r-- | apps/bookmarks/lib/bookmarks.php | 117 | ||||
-rw-r--r-- | apps/bookmarks/lib/search.php | 50 |
2 files changed, 167 insertions, 0 deletions
diff --git a/apps/bookmarks/lib/bookmarks.php b/apps/bookmarks/lib/bookmarks.php new file mode 100644 index 00000000000..81c1b03981a --- /dev/null +++ b/apps/bookmarks/lib/bookmarks.php @@ -0,0 +1,117 @@ +<?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{ + + /** + * @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 + * @param filterTagOnly if true, filter affacts only tags, else filter affects url, title and tags + * @return void + */ + public static function findBookmarks($offset, $sqlSortColumn, $filter, $filterTagOnly){ + //OC_Log::write('bookmarks', 'findBookmarks ' .$offset. ' '.$sqlSortColumn.' '. $filter.' '. $filterTagOnly ,OC_Log::DEBUG); + $CONFIG_DBTYPE = OC_Config::getValue( 'dbtype', 'sqlite' ); + + $params=array(OC_User::getUser()); + + 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 = OC_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 + LIMIT 10 + OFFSET '. $offset); + } else { + if( $CONFIG_DBTYPE == 'sqlite' or $CONFIG_DBTYPE == 'sqlite3' ) + $concatFunction = '(url || title || '; + else + $concatFunction = 'Concat(Concat( url, title), '; + + $query = OC_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 + LIMIT '.$offset.', 10'); + } + + $bookmarks = $query->execute($params)->fetchAll(); + return $bookmarks; + } +} +?> diff --git a/apps/bookmarks/lib/search.php b/apps/bookmarks/lib/search.php new file mode 100644 index 00000000000..59495db82ea --- /dev/null +++ b/apps/bookmarks/lib/search.php @@ -0,0 +1,50 @@ +<?php +/** + * ownCloud - bookmarks plugin + * + * @author David Iwanowitsch + * @copyright 2012 David Iwanowitsch <david at unclouded dot 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/>. + * + */ + +class OC_Search_Provider_Bookmarks extends OC_Search_Provider{ + function search($query){ + $results=array(); + + $offset = 0; + $sqlSortColumn = 'id'; + + $searchquery=array(); + if(substr_count($query, ' ') > 0){ + $searchquery = explode(' ', $query); + }else{ + $searchquery = $query; + } + +// OC_Log::write('bookmarks', 'search ' .$query ,OC_Log::DEBUG); + $bookmarks = OC_Bookmarks_Bookmarks::findBookmarks($offset, $sqlSortColumn, $searchquery, false); +// OC_Log::write('bookmarks', 'found ' .count($bookmarks) ,OC_Log::DEBUG); + //$l = new OC_l10n('bookmarks'); //resulttype can't be localized, javascript relies on that type + foreach($bookmarks as $bookmark){ + $results[]=new OC_Search_Result($bookmark['title'],'', $bookmark['url'],'Bookm.'); + } + + return $results; + } +} +new OC_Search_Provider_Bookmarks(); + +?> |