Mercurial > hg > mgallery
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) ||