diff mgallery.php @ 290:19fbf800b1f7

Work on very early form of virtual gallery support.
author Matti Hamalainen <ccr@tnsp.org>
date Sun, 28 Jul 2019 07:53:36 +0300
parents cad9e459e12f
children 486398fb60ea
line wrap: on
line diff
--- a/mgallery.php	Sun Jul 28 07:50:54 2019 +0300
+++ b/mgallery.php	Sun Jul 28 07:53:36 2019 +0300
@@ -507,6 +507,131 @@
   fclose($fp);
 }
 
+// Check for chosen backend mode
+if (($galBackend = mgGetSetting("backend")) === null)
+  die("MGallery backend mode not set.\n");
+
+switch ($galBackend = strtolower($galBackend))
+{
+  case "sql":
+    // If SQL backend, and gallery is virtual, attempt a select
+    if (isset($galData["virtual"]))
+    {
+      // Connect to database
+      if (mgConnectSQLDB() === FALSE)
+        die("Could not open database connection.\n");
+
+      $asql = ["SELECT * FROM images ".
+        "LEFT JOIN paths ON images.path_id=paths.id ".
+        "WHERE"];
+
+      $ccmds = preg_split("/\s*([,|])\s*/",
+        strtolower($galData["virtual"]), -1,
+        PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
+
+      foreach ($ccmds as $ccmd)
+      switch ($ccmd)
+      {
+        case "keyword":
+          if (!isset($galData["v_keyword"]))
+            die("Invalid definition.\n");
+
+          $asql[] = mgPrepareSQL(
+            "images.id IN (SELECT image_id FROM images_meta ".
+            "LEFT JOIN metadata ON images_meta.meta_id=metadata.id ".
+            "WHERE metadata.field='keywords' AND data=%s)",
+            $galData["v_keyword"]);
+          break;
+
+        case "month_range":
+          if (!isset($galData["v_month_begin"]) ||
+              !isset($galData["v_month_end"]))
+            die("Invalid definition.\n");
+
+          $asql[] = mgPrepareSQL(
+            "date_part('month', datetime) BETWEEN %d AND %d",
+            $galData["v_month_begin"],
+            $galData["v_month_end"]);
+          break;
+
+        case "date_range":
+          if (!isset($galData["v_date_begin"]) ||
+              !isset($galData["v_date_end"]))
+            die("Invalid definition.\n");
+
+          $asql[] = mgPrepareSQL(
+            "datetime BETWEEN %s AND %s",
+            $galData["v_date_begin"],
+            $galData["v_date_end"]);
+          break;
+
+        case "year":
+          if (!isset($galData["v_year"]))
+            die("Invalid definition.\n");
+
+          // Laatuklunssi
+          $v_year = strtolower($galData["v_year"]);
+          if (substr($v_year, 0, 7) == "parent:")
+          {
+            if (isset($galData["parent"]))
+            {
+              $v_field = substr($v_year, 7);
+              if (isset($galData["parent"]["caption"]))
+                $galData["v_year"] = $galData["parent"][$v_field];
+              else
+                die("Foobar\n");
+            }
+            else
+              die("Fazboo\n");
+          }
+
+          $asql[] = mgPrepareSQL(
+            "date_part('year', datetime)=%d",
+            $galData["v_year"]);
+          break;
+
+        case "|":
+          $asql[] = "OR";
+          break;
+
+        case ",":
+          $asql[] = "AND";
+          break;
+          
+        default:
+          die("Invalid virtual gallery definition.\n");
+      }
+
+      $asql[] = "ORDER BY datetime DESC";
+      $sql = implode(" ", $asql);
+
+      // Query images for this gallery
+      $galData["header"] .= "<p>".$sql."</p>";
+
+      if (($res = mgExecSQL($sql)) === FALSE)
+        die("Could not execute virtual gallery.\n");
+
+      // Push the entries into our data structures
+      foreach ($res as $entry)
+      if (!in_array($entry["filename"], $galImagesIndex))
+      {
+        $entry["datetime"] = mgSQLToDateTime($db, $entry["datetime"]);
+        $entry["type"] = 0;
+
+        $galEntries[$entry["filename"]] = $entry;
+        $galImagesIndex[] = $entry["filename"];
+      }
+    }
+    //print_r($galEntries);
+    break;
+
+  case "php":
+    break;
+
+  default:
+    die("Invalid MGallery backend mode '".$galBackend."'.\n");
+}
+
 
 // If no data available, show an error page
 if (!isset($galData) || !isset($galEntries) ||