cleanup and new features
[photo-tags.git] / getjson.php
index d9b0891cdf7dab420fbee2abecf1429b512169ba..83360e6118387d957fdf4a6b139e5c079ce20ab8 100644 (file)
@@ -22,9 +22,14 @@ if (isset($_REQUEST["S"]))
     $tag = sqlite_escape_string($_REQUEST["S"]);
 
     $result = $DB->query("SELECT name FROM tags");
-    $count = $DB->query("SELECT 1");
   }
-else
+ else if (isset($_REQUEST["ID"]))
+  {
+    $id  = intval($_REQUEST["ID"]);
+    $result = $DB->query("SELECT base_uri, filename, id FROM photos".
+                        " WHERE id=$id");
+  }
+ else
   {
     if (isset($_REQUEST["P"]))
       $OFFSET = "".(intval($_REQUEST["P"])*$N-$N);
@@ -37,6 +42,7 @@ else
        $tags = $_REQUEST["T"];
        $tags = explode(",",$tags);
        $nrtags = count($tags);
+
        foreach ($tags as $key => $value)
          $tags[$key]=sqlite_escape_string(trim($value));
        $tags = "'".implode("','",$tags)."'";
@@ -47,24 +53,32 @@ else
         a good explanation on different ways of doing this can be found at:
         http://www.pui.ch/phred/archives/2005/04/tags-database-schemas.html
        */
-       $result = $DB->query("SELECT base_uri, filename  FROM photo_tags pt, photos p, tags t".
-                            " WHERE pt.tag_id = t.id".
-                            " AND (t.name COLLATE NOCASE IN ($tags))".
-                            " AND p.id = pt.photo_id ".
-                            " GROUP BY p.id HAVING COUNT( p.id )=$nrtags".
-                            "    LIMIT $OFFSET, $N");
-
-       $count = $DB->query("SELECT count(*) as total  FROM photo_tags pt, photos p, tags t".
-                            " WHERE pt.tag_id = t.id".
-                            " AND (t.name COLLATE NOCASE IN ($tags))".
-                            " AND p.id = pt.photo_id ".
-                            " GROUP BY p.id HAVING COUNT( p.id )=$nrtags".
-                            "    LIMIT $OFFSET, $N");
+
+       if (isset($_REQUEST["C"]))
+         {
+           $result = $DB->query("SELECT count(*) as total from (SELECT p.id FROM photo_tags pt, photos p, tags t".
+                               " WHERE pt.tag_id = t.id".
+                               " AND (t.name COLLATE NOCASE IN ($tags))".
+                               " AND p.id = pt.photo_id ".
+                               " GROUP BY p.id HAVING COUNT( p.id )=$nrtags)");
+         }
+       else
+         {
+           $result = $DB->query("SELECT base_uri, filename, p.id as id  FROM photo_tags pt, photos p, tags t".
+                                " WHERE pt.tag_id = t.id".
+                                " AND (t.name COLLATE NOCASE IN ($tags))".
+                                " AND p.id = pt.photo_id ".
+                                " GROUP BY p.id HAVING COUNT( p.id )=$nrtags".
+                                "    LIMIT $OFFSET, $N");
+
+         }
       }
     else
       {
-       $result = $DB->query("SELECT * FROM photos LIMIT $OFFSET, $N");
-       $count = $DB->query("SELECT count(*) as total FROM photos");
+       if (isset($_REQUEST["C"]))
+         $result = $DB->query("SELECT count(*) as total FROM photos");
+       else
+         $result = $DB->query("SELECT * FROM photos LIMIT $OFFSET, $N");
       }
   }
 
@@ -83,24 +97,7 @@ else
   }
 $result=$tmp;
 
-/* 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);
+echo json_encode($result);
 
 /* close the database */
 if($usePDO)