comparison 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
comparison
equal deleted inserted replaced
289:13cff35dfbec 290:19fbf800b1f7
503 { 503 {
504 require($filename); 504 require($filename);
505 flock($fp, LOCK_UN); 505 flock($fp, LOCK_UN);
506 } 506 }
507 fclose($fp); 507 fclose($fp);
508 }
509
510 // Check for chosen backend mode
511 if (($galBackend = mgGetSetting("backend")) === null)
512 die("MGallery backend mode not set.\n");
513
514 switch ($galBackend = strtolower($galBackend))
515 {
516 case "sql":
517 // If SQL backend, and gallery is virtual, attempt a select
518 if (isset($galData["virtual"]))
519 {
520 // Connect to database
521 if (mgConnectSQLDB() === FALSE)
522 die("Could not open database connection.\n");
523
524 $asql = ["SELECT * FROM images ".
525 "LEFT JOIN paths ON images.path_id=paths.id ".
526 "WHERE"];
527
528 $ccmds = preg_split("/\s*([,|])\s*/",
529 strtolower($galData["virtual"]), -1,
530 PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
531
532 foreach ($ccmds as $ccmd)
533 switch ($ccmd)
534 {
535 case "keyword":
536 if (!isset($galData["v_keyword"]))
537 die("Invalid definition.\n");
538
539 $asql[] = mgPrepareSQL(
540 "images.id IN (SELECT image_id FROM images_meta ".
541 "LEFT JOIN metadata ON images_meta.meta_id=metadata.id ".
542 "WHERE metadata.field='keywords' AND data=%s)",
543 $galData["v_keyword"]);
544 break;
545
546 case "month_range":
547 if (!isset($galData["v_month_begin"]) ||
548 !isset($galData["v_month_end"]))
549 die("Invalid definition.\n");
550
551 $asql[] = mgPrepareSQL(
552 "date_part('month', datetime) BETWEEN %d AND %d",
553 $galData["v_month_begin"],
554 $galData["v_month_end"]);
555 break;
556
557 case "date_range":
558 if (!isset($galData["v_date_begin"]) ||
559 !isset($galData["v_date_end"]))
560 die("Invalid definition.\n");
561
562 $asql[] = mgPrepareSQL(
563 "datetime BETWEEN %s AND %s",
564 $galData["v_date_begin"],
565 $galData["v_date_end"]);
566 break;
567
568 case "year":
569 if (!isset($galData["v_year"]))
570 die("Invalid definition.\n");
571
572 // Laatuklunssi
573 $v_year = strtolower($galData["v_year"]);
574 if (substr($v_year, 0, 7) == "parent:")
575 {
576 if (isset($galData["parent"]))
577 {
578 $v_field = substr($v_year, 7);
579 if (isset($galData["parent"]["caption"]))
580 $galData["v_year"] = $galData["parent"][$v_field];
581 else
582 die("Foobar\n");
583 }
584 else
585 die("Fazboo\n");
586 }
587
588 $asql[] = mgPrepareSQL(
589 "date_part('year', datetime)=%d",
590 $galData["v_year"]);
591 break;
592
593 case "|":
594 $asql[] = "OR";
595 break;
596
597 case ",":
598 $asql[] = "AND";
599 break;
600
601 default:
602 die("Invalid virtual gallery definition.\n");
603 }
604
605 $asql[] = "ORDER BY datetime DESC";
606 $sql = implode(" ", $asql);
607
608 // Query images for this gallery
609 $galData["header"] .= "<p>".$sql."</p>";
610
611 if (($res = mgExecSQL($sql)) === FALSE)
612 die("Could not execute virtual gallery.\n");
613
614 // Push the entries into our data structures
615 foreach ($res as $entry)
616 if (!in_array($entry["filename"], $galImagesIndex))
617 {
618 $entry["datetime"] = mgSQLToDateTime($db, $entry["datetime"]);
619 $entry["type"] = 0;
620
621 $galEntries[$entry["filename"]] = $entry;
622 $galImagesIndex[] = $entry["filename"];
623 }
624 }
625 //print_r($galEntries);
626 break;
627
628 case "php":
629 break;
630
631 default:
632 die("Invalid MGallery backend mode '".$galBackend."'.\n");
508 } 633 }
509 634
510 635
511 // If no data available, show an error page 636 // If no data available, show an error page
512 if (!isset($galData) || !isset($galEntries) || 637 if (!isset($galData) || !isset($galEntries) ||