summaryrefslogtreecommitdiffstats
path: root/apps/bookmarks/ajax/updateList.php
blob: e9051a8dbfa32ffd5ee5dac725afdb47954207b5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<?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 Lesser General Public 
* License along with this library.  If not, see <http://www.gnu.org/licenses/>.
* 
*/

//no apps or filesystem
$RUNTIME_NOSETUPFS=true;

require_once('../../../lib/base.php');

// We send json data
header( 'Content-Type: application/jsonrequest' );

// Check if we are a user
if( !OC_User::isLoggedIn()){
	echo json_encode( array( 'status' => 'error', 'data' => array( 'message' => 'Authentication error' )));
	exit();
}

$params=array(OC_User::getUser());
$CONFIG_DBTYPE = OC_Config::getValue( 'dbtype', 'sqlite' );

//Filter for tag?
$filterTag = isset($_GET['tag']) ? '%' . htmlspecialchars_decode($_GET['tag']) . '%' : false;
if($filterTag){
	$sqlFilterTag = 'HAVING tags LIKE ?';
	$params[] = $filterTag;
} else {
	$sqlFilterTag = '';
}

$offset = isset($_GET['page']) ? intval($_GET['page']) * 10 : 0;
$params[] = $offset;

$sort = isset($_GET['sort']) ? ($_GET['sort']) : 'bookmarks_sorting_recent';
if($sort == 'bookmarks_sorting_clicks') {
	$sqlSort = 'clickcount DESC';
} else {
	$sqlSort = 'id DESC';
}

if( $CONFIG_DBTYPE == 'sqlite' or $CONFIG_DBTYPE == 'sqlite3' ){
	$_gc_separator = ', \' \'';
} else {
	$_gc_separator = 'SEPARATOR \' \'';
}

$query = OC_DB::prepare('
	SELECT id, url, title, description, 
	CASE WHEN *PREFIX*bookmarks.id = *PREFIX*bookmarks_tags.bookmark_id
			THEN GROUP_CONCAT( tag ' .$_gc_separator. ' )
			ELSE \' \'
		END
		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.'.$sqlSort.' 
	LIMIT ?,  10');
	
$bookmarks = $query->execute($params)->fetchAll();

echo json_encode( array( 'status' => 'success', 'data' => $bookmarks));