fix automatic tag completion
[photo-tags.git] / getjson.php
index 0b414be61d106e435b24f109de52fcfca2366015..14af09b3003bf7feb5f81a728e52b56f72228d79 100644 (file)
@@ -16,18 +16,46 @@ else
 
 
 /* do database query */
-if (isset($_REQUEST["P"]))
+if (isset($_REQUEST["S"]))
   {
-    $OFFSET = "".($_REQUEST["P"]*$N-$N);
+    /* single tag or part of tag */
+    $tag = sqlite_escape_string($_REQUEST["S"]);
 
-    $result = $DB->query("SELECT * FROM photos LIMIT $OFFSET, $N");
+    $result = $DB->query("SELECT name FROM tags");
+    $count = $DB->query("SELECT 1");
   }
-else if (isset($_REQUEST["T"]))
+else
   {
-    $result = $DB->query("SELECT count(*) as total FROM photos");
+    if (isset($_REQUEST["P"]))
+      $OFFSET = "".(intval($_REQUEST["P"])*$N-$N);
+    else
+      $OFFSET = "0";
+
+    if (isset($_REQUEST["T"]))
+      {
+       /* single tag or part of tag */
+       $tags = sqlite_escape_string($_REQUEST["T"]);
+       $tags = explode("+",$tags);
+       $tags = "'".implode("','",$tags)."'";
+
+       /* individual tags are seperated by '+' */
+       $result = $DB->query("SELECT base_uri, filename FROM photos ".
+                            "    left join photo_tags on photos.id=photo_tags.photo_id ".
+                            "    left join tags on tags.id=photo_tags.tag_id ".
+                            "    where tags.name in ($tags) LIMIT $OFFSET, $N");
+
+       $count = $DB->query("SELECT count(*) as total FROM photos ".
+                           "    left join photo_tags on photos.id=photo_tags.photo_id ".
+                           "    left join tags on tags.id=photo_tags.tag_id ".
+                           "    where tags.name in ($tags)");
+
+      }
+    else
+      {
+       $result = $DB->query("SELECT * FROM photos LIMIT $OFFSET, $N");
+       $count = $DB->query("SELECT count(*) as total FROM photos");
+      }
   }
-else
-  $result=null;
 
 /* encode result as an array */
 $tmp=array();
@@ -35,20 +63,33 @@ if(!$usePDO)
   {
     /* convert results into array */
     while($res = $result->fetchArray(SQLITE3_ASSOC))
-      {
-       $tmp[]=$res;
-      }
+      $tmp[]=$res;
   }
 else
   {
     foreach($result as $res)
-      {
-        $tmp[]=$res;
-      }
+      $tmp[]=$res;
   }
 $result=$tmp;
 
-echo json_encode($result);
+/* encode count as an array */
+$tmp=array();
+if(!$usePDO)
+  {
+    /* convert results into array */
+    while($res = $count->fetchArray(SQLITE3_ASSOC))
+      $tmp[]=$res;
+  }
+else
+  {
+    foreach($count as $res)
+      $tmp[]=$res;
+  }
+$count=$tmp;
+
+$return=array($count,$result);
+
+echo json_encode($return);
 
 /* close the database */
 if($usePDO)