add support to query multiple tags, use "," as a separation character
[photo-tags.git] / getjson.php
1 <?php
2
3 $N=30;
4
5 /* parse ini -file */
6 $iniarray=parse_ini_file("config.ini");
7 $DBFILE=$iniarray["fspotdb"];
8 $usePDO=$iniarray["usePDO"];
9 $N=$iniarray["pics_per_page"];
10 /* end parse ini-file */
11
12 if($usePDO)
13   $DB = new PDO("sqlite:$DBFILE");
14 else
15   $DB = new SQlite3($DBFILE);
16
17
18 /* do database query */
19 if (isset($_REQUEST["S"]))
20   {
21     /* single tag or part of tag */
22     $tag = sqlite_escape_string($_REQUEST["S"]);
23
24     $result = $DB->query("SELECT name FROM tags");
25     $count = $DB->query("SELECT 1");
26   }
27 else
28   {
29     if (isset($_REQUEST["P"]))
30       $OFFSET = "".(intval($_REQUEST["P"])*$N-$N);
31     else
32       $OFFSET = "0";
33
34     if (isset($_REQUEST["T"]))
35       {
36         /* single tag or part of tag */
37         $tags = $_REQUEST["T"];
38         $tags = explode(",",$tags);
39         foreach ($tags as $key => $value)
40           $tags[$key]=sqlite_escape_string(trim($value));
41         $tags = "'".implode("','",$tags)."'";
42
43         /* individual tags are seperated by ',' */
44         $result = $DB->query("SELECT base_uri, filename FROM photos ".
45                              "    left join photo_tags on photos.id=photo_tags.photo_id ".
46                              "    left join tags on tags.id=photo_tags.tag_id ".
47                              "    where tags.name COLLATE NOCASE in ($tags) LIMIT $OFFSET, $N");
48
49         $count = $DB->query("SELECT count(*) as total FROM photos ".
50                             "    left join photo_tags on photos.id=photo_tags.photo_id ".
51                             "    left join tags on tags.id=photo_tags.tag_id ".
52                             "    where tags.name COLLATE NOCASE in ($tags)");
53
54       }
55     else
56       {
57         $result = $DB->query("SELECT * FROM photos LIMIT $OFFSET, $N");
58         $count = $DB->query("SELECT count(*) as total FROM photos");
59       }
60   }
61
62 /* encode result as an array */
63 $tmp=array();
64 if(!$usePDO)
65   {
66     /* convert results into array */
67     while($res = $result->fetchArray(SQLITE3_ASSOC))
68       $tmp[]=$res;
69   }
70 else
71   {
72     foreach($result as $res)
73       $tmp[]=$res;
74   }
75 $result=$tmp;
76
77 /* encode count as an array */
78 $tmp=array();
79 if(!$usePDO)
80   {
81     /* convert results into array */
82     while($res = $count->fetchArray(SQLITE3_ASSOC))
83       $tmp[]=$res;
84   }
85 else
86   {
87     foreach($count as $res)
88       $tmp[]=$res;
89   }
90 $count=$tmp;
91
92 $return=array($count,$result);
93
94 echo json_encode($return);
95
96 /* close the database */
97 if($usePDO)
98   $DB=null;
99 else
100   $DB->close();
101
102
103 ?>
104