Mercurial > hg > mgallery
comparison mgtool.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 | 878d2a772fd6 |
children | 13a23b120e72 |
comparison
equal
deleted
inserted
replaced
289:13cff35dfbec | 290:19fbf800b1f7 |
---|---|
53 [ MG_INT, "filesize" , "FileSize" , TRUE ], | 53 [ MG_INT, "filesize" , "FileSize" , TRUE ], |
54 [ MG_STR, "keywords" , "keywords" , FALSE ], | 54 [ MG_STR, "keywords" , "keywords" , FALSE ], |
55 ]; | 55 ]; |
56 | 56 |
57 | 57 |
58 // | |
59 // SQL table schemas | |
60 // | |
61 $galSQLTables = | |
62 [ | |
63 "images" => [ | |
64 ["id" , "INTEGER", "PRIMARY KEY", "AUTOINCREMENT"], | |
65 ["path_id" , "INTEGER"], | |
66 ["filename" , "VARCHAR(64)"], | |
67 ], | |
68 | |
69 "paths" => [ | |
70 ["id" , "INTEGER", "PRIMARY KEY", "AUTOINCREMENT"], | |
71 ["path" , "VARCHAR(128)"], | |
72 ], | |
73 | |
74 "metadata" => [ | |
75 ["id" , "INTEGER", "PRIMARY KEY", "AUTOINCREMENT"], | |
76 ["field" , "VARCHAR(64)"], | |
77 ["data" , "VARCHAR(64)", "UNIQUE"], | |
78 ["status" , "INTEGER"], | |
79 ], | |
80 | |
81 "images_meta" => [ | |
82 ["image_id" , "INTEGER"], | |
83 ["meta_id" , "INTEGER"], | |
84 ], | |
85 ]; | |
58 | 86 |
59 | 87 |
60 // | 88 // |
61 // Convert and scale image file function, for generating | 89 // Convert and scale image file function, for generating |
62 // the intermediate size images and thumbnails. Uses the | 90 // the intermediate size images and thumbnails. Uses the |
645 } | 673 } |
646 | 674 |
647 | 675 |
648 function mgWriteGalleryCache($cacheFilename, &$gallery, &$entries, &$parentEntry) | 676 function mgWriteGalleryCache($cacheFilename, &$gallery, &$entries, &$parentEntry) |
649 { | 677 { |
678 global $galBackend, $db, $galExifConversions, $flagSQL; | |
679 | |
650 // Store gallery cache for this directory | 680 // Store gallery cache for this directory |
651 $images = []; | 681 $images = []; |
652 $albums = []; | 682 $albums = []; |
653 $output = []; | 683 $output = []; |
654 | 684 |
693 { | 723 { |
694 $parentEntry["image"] = &$adata; | 724 $parentEntry["image"] = &$adata; |
695 break; | 725 break; |
696 } | 726 } |
697 } | 727 } |
728 } | |
729 | |
730 switch ($galBackend) | |
731 { | |
732 case "sql": | |
733 if (!$flagSQL) | |
734 break; | |
735 | |
736 mgDBBeginTransaction(); | |
737 | |
738 if (($path_id = mgFetchSQLColumn(mgPrepareSQL("SELECT id FROM paths WHERE path=%s", $gallery["path"]))) === FALSE && | |
739 ($path_id = mgExecSQLInsert(mgPrepareSQL("INSERT INTO paths (path) VALUES (%s)", $gallery["path"]))) === FALSE) | |
740 mgFatal("Failed.\n"); | |
741 | |
742 | |
743 | |
744 foreach ($output as $entry => &$edata) | |
745 if ($edata["type"] == 0) | |
746 { | |
747 $ekeys = ["path_id", "filename"]; | |
748 $evals = [$path_id, mgDBGetSQLParam($db, "s", $entry)]; | |
749 $esets = []; | |
750 | |
751 foreach ($galExifConversions as $econv) | |
752 if ($econv[GEC_IS_UNIQUE]) | |
753 { | |
754 $ekey = $econv[GEC_NAME]; | |
755 | |
756 // Skip unset and special case(s) | |
757 if (!isset($esets[$ekey]) && isset($edata[$ekey])) | |
758 { | |
759 $esets[$ekey] = TRUE; | |
760 | |
761 switch ($econv[GEC_TYPE]) | |
762 { | |
763 case MG_DATE: $etype = "D"; break; | |
764 case MG_INT: $etype = "d"; break; | |
765 default: $etype = "s"; break; | |
766 } | |
767 | |
768 $ekeys[] = $ekey; | |
769 $evals[] = mgDBGetSQLParam($db, $etype, $edata[$ekey]); | |
770 } | |
771 } | |
772 | |
773 $sql = "INSERT INTO images (".implode(",", $ekeys).") VALUES (".implode(",", $evals).")"; | |
774 if (($image_id = mgExecSQLInsert($sql)) === FALSE) | |
775 mgFatal("Failed.\n"); | |
776 | |
777 // Special handling for non-unique fields | |
778 foreach ($galExifConversions as $econv) | |
779 { | |
780 $ekey = $econv[GEC_NAME]; | |
781 if (!$econv[GEC_IS_UNIQUE] && | |
782 array_key_exists($econv[GEC_NAME], $edata)) | |
783 { | |
784 if (is_array($edata[$ekey])) | |
785 { | |
786 foreach ($edata[$ekey] as $kw) | |
787 { | |
788 $sql = mgPrepareSQL("INSERT INTO metadata (field,data,status) VALUES (%s,%s,0) ON CONFLICT(data) DO UPDATE SET status=1", $ekey, $kw); | |
789 if (($id = mgExecSQLInsert($sql)) === FALSE) | |
790 mgFatal("Failure!\n"); | |
791 | |
792 $sql = mgPrepareSQL("INSERT INTO images_meta (image_id,meta_id) VALUES (%d,%d)", $image_id, $id); | |
793 if (($id = mgExecSQL($sql)) === FALSE) | |
794 mgFatal("Failure!\n"); | |
795 } | |
796 } | |
797 else | |
798 { | |
799 $sql = mgPrepareSQL("INSERT INTO metadata (field,data,status) VALUES (%s,%s,0) ON CONFLICT(data) DO UPDATE SET status=1", $ekey, $edata[$ekey]); | |
800 if (($id = mgExecSQLInsert($sql)) === FALSE) | |
801 mgFatal("Failure!\n"); | |
802 | |
803 $sql = mgPrepareSQL("INSERT INTO images_meta (image_id,meta_id) VALUES (%d,%d)", $image_id, $id); | |
804 if (($id = mgExecSQL($sql)) === FALSE) | |
805 mgFatal("Failure!\n"); | |
806 } | |
807 | |
808 } | |
809 } | |
810 } | |
811 | |
812 mgDBCommitTransaction(); | |
813 break; | |
814 | |
698 } | 815 } |
699 | 816 |
700 $str = | 817 $str = |
701 "<?php\n". | 818 "<?php\n". |
702 "\$galData = ".var_export($gallery, TRUE).";\n". | 819 "\$galData = ".var_export($gallery, TRUE).";\n". |
985 } | 1102 } |
986 | 1103 |
987 | 1104 |
988 function mgProcessGalleries($cmd, $path) | 1105 function mgProcessGalleries($cmd, $path) |
989 { | 1106 { |
990 global $galTNPath, $galMedPath; | 1107 global $galTNPath, $galMedPath, $galSQLTables, $flagSQL; |
991 | 1108 |
992 // Check validity of some settings | 1109 // Check validity of some settings |
993 $galPath = mgGetSetting("base_path"); | 1110 $galPath = mgGetSetting("base_path"); |
994 $galTNPath = mgCleanPath(TRUE, mgGetSetting("tn_path")); | 1111 $galTNPath = mgCleanPath(TRUE, mgGetSetting("tn_path")); |
995 $galMedPath = mgCleanPath(TRUE, mgGetSetting("med_path")); | 1112 $galMedPath = mgCleanPath(TRUE, mgGetSetting("med_path")); |
1038 else | 1155 else |
1039 $path = $galPath; | 1156 $path = $galPath; |
1040 | 1157 |
1041 // Start working | 1158 // Start working |
1042 echo "Gallery path: '".$galPath."', starting at '".$path."' ...\n"; | 1159 echo "Gallery path: '".$galPath."', starting at '".$path."' ...\n"; |
1160 | |
1161 if (($cmd == GCMD_CLEAN || $cmd == GCMD_RESCAN) && $flagSQL) | |
1162 { | |
1163 foreach ($galSQLTables as $tname => $tdata) | |
1164 { | |
1165 if (mgExecSQL("DELETE FROM ".$tname) === FALSE) | |
1166 mgFatal("Failed to purge table '".$tname."'.\n"); | |
1167 } | |
1168 } | |
1169 | |
1043 mgHandleDirectory($cmd, $galPath, $path, $parentData, $parentEntry, $writeMode, $startAt); | 1170 mgHandleDirectory($cmd, $galPath, $path, $parentData, $parentEntry, $writeMode, $startAt); |
1044 } | 1171 } |
1045 | 1172 |
1046 | 1173 |
1047 function mgShowCopyright() | 1174 function mgShowCopyright() |
1124 | 1251 |
1125 // Configure the timezone | 1252 // Configure the timezone |
1126 if (($pageTimeZone = mgGetSetting("timezone")) !== NULL) | 1253 if (($pageTimeZone = mgGetSetting("timezone")) !== NULL) |
1127 date_default_timezone_set($pageTimeZone); | 1254 date_default_timezone_set($pageTimeZone); |
1128 | 1255 |
1256 // Check backend | |
1257 if (($galBackend = mgGetSetting("backend")) === null) | |
1258 die("MGallery backend mode not set.\n"); | |
1259 | |
1260 switch ($galBackend = strtolower($galBackend)) | |
1261 { | |
1262 case "sql": | |
1263 // Connect to database | |
1264 if (mgConnectSQLDB() === FALSE) | |
1265 die("Could not open database connection.\n"); | |
1266 | |
1267 // Create SQL schema elements for metadata fields | |
1268 $tmpSQL = []; | |
1269 foreach ($galExifConversions as $econv) | |
1270 if ($econv[GEC_IS_UNIQUE]) | |
1271 { | |
1272 switch ($econv[GEC_TYPE]) | |
1273 { | |
1274 case MG_STR: $etype = "VARCHAR(256)"; break; | |
1275 case MG_INT: $etype = "INTEGER"; break; | |
1276 case MG_DVA: $etype = "VARCHAR(32)"; break; | |
1277 case MG_DATE: $etype = "DATETIME"; break; | |
1278 } | |
1279 | |
1280 $tmpSQL[$econv[GEC_NAME]] = $etype; | |
1281 } | |
1282 | |
1283 // Merge to base "images" table schema | |
1284 foreach ($tmpSQL as $ekey => $etype) | |
1285 $galSQLTables["images"][] = [$ekey, $etype]; | |
1286 | |
1287 // Check tables | |
1288 foreach ($galSQLTables as $name => $schemaData) | |
1289 { | |
1290 $schema = mgDBGetTableSchema($db, $schemaData); | |
1291 if (!mgDBCreateOneTable($db, $name, $schema)) | |
1292 die("Failed to create SQL table '".$name."'.\n"); | |
1293 } | |
1294 break; | |
1295 | |
1296 case "php": | |
1297 break; | |
1298 | |
1299 default: | |
1300 die("Invalid MGallery backend mode '".$galBackend."'.\n"); | |
1301 } | |
1302 | |
1129 | 1303 |
1130 // Check for commandline arguments | 1304 // Check for commandline arguments |
1131 $cmd = mgCArgLC(1); | 1305 $cmd = mgCArgLC(1); |
1132 switch ($cmd) | 1306 switch ($cmd) |
1133 { | 1307 { |
1147 mgShowCopyright(); | 1321 mgShowCopyright(); |
1148 mgShowHelp(); | 1322 mgShowHelp(); |
1149 break; | 1323 break; |
1150 | 1324 |
1151 case "update": case "up": case "upd": case "upda": | 1325 case "update": case "up": case "upd": case "upda": |
1152 mgProcessGalleries(GCMD_UPDATE, mgCArg(2)); | 1326 $farg = mgCArg(2); |
1327 if ($farg == "--sql") | |
1328 { | |
1329 $farg = FALSE; | |
1330 $flagSQL = TRUE; | |
1331 } | |
1332 else | |
1333 $flagSQL = mgCArg(3) == "--sql"; | |
1334 | |
1335 mgProcessGalleries(GCMD_UPDATE, $farg); | |
1153 break; | 1336 break; |
1154 | 1337 |
1155 case "rescan": case "re": case "res": | 1338 case "rescan": case "re": case "res": |
1156 mgProcessGalleries(GCMD_RESCAN, mgCArg(2)); | 1339 mgProcessGalleries(GCMD_RESCAN, mgCArg(2)); |
1157 break; | 1340 break; |