comparison mgallery.inc.php @ 343:d6422e856ecd

Remove the backend/SQL stuff for now.
author Matti Hamalainen <ccr@tnsp.org>
date Sun, 27 Aug 2023 04:16:05 +0300
parents 14d3741061f5
children 0f14a20f48ca
comparison
equal deleted inserted replaced
342:4dd202fffdf7 343:d6422e856ecd
99 99
100 "med_format" => [MG_STR_LC, "jpeg"], 100 "med_format" => [MG_STR_LC, "jpeg"],
101 "med_width" => [MG_INT, 1200], 101 "med_width" => [MG_INT, 1200],
102 "med_height" => [MG_INT, 900], 102 "med_height" => [MG_INT, 900],
103 "med_quality" => [MG_INT, 90], 103 "med_quality" => [MG_INT, 90],
104
105 "backend" => [MG_STR_LC, "php"],
106 "sql_db" => [MG_STR, FALSE],
107 "sql_username" => [MG_STR, ""],
108 "sql_password" => [MG_STR, ""],
109 "sql_options" => [MG_STR_ARRAY, []],
110 ]; 104 ];
111 105
112 106
113 function mgDebug($msg) 107 function mgDebug($msg)
114 { 108 {
378 372
379 return $str; 373 return $str;
380 } 374 }
381 375
382 376
383 function mgLogSQLError($dbh, $sql)
384 {
385 return mgError("SQL error '".implode("; ", $dbh->errorInfo())."' in statement: \"".$sql."\"");
386 }
387
388
389 function mgDBGetSQLParam($dbh, $type, $value)
390 {
391 switch ($type)
392 {
393 case "d": return intval($value);
394 case "s": return $dbh->quote($value);
395 case "b": return intval($value) ? 1 : 0;
396 case "D":
397 if ($value instanceOf DateTime)
398 {
399 switch ($dbh->getAttribute(PDO::ATTR_DRIVER_NAME))
400 {
401 case "pgsql" : $fmt = "Y-m-d H:i:sP"; break;
402 case "sqlite" : $fmt = DATE_RFC3339; break;
403 case "mysql" : $fmt = "Y-m-d H:i:s"; break;
404 default : $fmt = DATE_RFC3339;
405 }
406 return $dbh->quote($value->format($fmt));
407 }
408 else
409 return intval($value);
410 }
411 }
412
413
414 function mgSQLToDateTime($dbh, $stamp)
415 {
416 switch ($dbh->getAttribute(PDO::ATTR_DRIVER_NAME))
417 {
418 case "pgsql":
419 // PostgreSQL 'timestamptz' format
420 $tmp = DateTime::createFromFormat("Y-m-d H:i:sP", $stamp);
421 break;
422
423 case "sqlite":
424 // SQLite can use RFC3339 format
425 $tmp = DateTime::createFromFormat(DATE_RFC3339, $stamp);
426 break;
427
428 case "mysql":
429 // MySQL uses UTC internally, no way to specify TZ
430 $tmp = DateTime::createFromFormat("Y-m-d H:i:s", $stamp);
431 break;
432
433 default:
434 $tmp = NULL;
435 }
436
437 // echo "<p>".$stamp." :: ".var_export(($tmp instanceOf DateTime) ? $tmp : NULL, TRUE)."</p>";
438 return ($tmp instanceOf DateTime) ? $tmp : NULL;
439 }
440
441
442 function mgConnectSQLDB()
443 {
444 global $db;
445 try {
446 $db = new PDO(mgGetSetting("sql_db"),
447 mgGetSetting("sql_username", NULL),
448 mgGetSetting("sql_password", NULL),
449 mgGetSetting("sql_options", array()));
450 }
451 catch (PDOException $e) {
452 mgError("Could not connect to SQL database: ".$e->getMessage().".");
453 return FALSE;
454 }
455 return ($db !== false);
456 }
457
458
459 function mgDBPrepareSQLUpdate($dbh, $table, $cond, $pairs, $values = NULL)
460 {
461 $sql = [];
462 foreach ($pairs as $name => $attr)
463 {
464 $sql[] = $name."=".mgDBGetSQLParam($dbh,
465 $attr, $values !== NULL ? $values[$name] : $name);
466 }
467 return
468 "UPDATE ".$table." SET ".implode(",", $sql).
469 ($cond != "" ? " ".$cond : "");
470 }
471
472
473 function mgDBPrepareSQL_V($dbh, $fmt, $argv)
474 {
475 $len = strlen($fmt);
476 $sql = "";
477 $argn = 0;
478 $argc = count($argv);
479
480 for ($pos = 0; $pos < $len; $pos++)
481 {
482 if ($fmt[$pos] == "%")
483 {
484 if ($argn < $argc)
485 $sql .= mgDBGetSQLParam($dbh, $fmt[++$pos], $argv[$argn++]);
486 else
487 {
488 mgError("Invalid SQL statement format string '".$fmt.
489 "', not enough parameters specified (".$argn." of ".$argc.")");
490 return FALSE;
491 }
492 }
493 else
494 $sql .= $fmt[$pos];
495 }
496
497 return $sql;
498 }
499
500
501 function mgDBPrepareSQL($dbh)
502 {
503 $argv = func_get_args();
504 return mgDBPrepareSQL_V($dbh, $argv[1], array_splice($argv, 2));
505 }
506
507
508 function mgPrepareSQL()
509 {
510 global $db;
511 $argv = func_get_args();
512 return mgDBPrepareSQL_V($db, $argv[0], array_splice($argv, 1));
513 }
514
515
516 function mgDBExecSQLInsert($dbh, $sql)
517 {
518 switch ($dbh->getAttribute(PDO::ATTR_DRIVER_NAME))
519 {
520 case "pgsql":
521 if (($res = mgDBFetchSQLColumn($dbh, $sql." RETURNING id")) !== false)
522 return $res;
523 else
524 return FALSE;
525
526 default:
527 if (mgDBExecSQL($dbh, $sql) !== false)
528 return $dbh->lastInsertId();
529 else
530 return FALSE;
531 }
532 }
533
534
535 function mgDBExecSQL($dbh, $sql)
536 {
537 if (($res = $dbh->query($sql)) !== FALSE)
538 return $res;
539 else
540 {
541 mgLogSQLError($dbh, $sql);
542 return FALSE;
543 }
544 }
545
546
547 function mgDBFetchSQL($dbh, $sql)
548 {
549 if (($res = $dbh->query($sql)) !== FALSE)
550 return $res->fetch();
551 else
552 {
553 mgLogSQLError($dbh, $sql);
554 return FALSE;
555 }
556 }
557
558
559 function mgDBFetchSQLColumn($dbh, $sql, $column = 0)
560 {
561 if (($res = $dbh->query($sql)) !== FALSE)
562 return $res->fetchColumn($column);
563 else
564 {
565 mgLogSQLError($dbh, $sql);
566 return FALSE;
567 }
568 }
569
570
571 function mgPrepareSQLUpdate($table, $cond, $pairs)
572 {
573 global $db;
574 return mgDBPrepareSQLUpdate($db, $table, $cond, $pairs);
575 }
576
577
578 function mgExecSQLInsert($sql)
579 {
580 global $db;
581 return mgDBExecSQLInsert($db, $sql);
582 }
583
584
585 function mgExecSQL($sql)
586 {
587 global $db;
588 return mgDBExecSQL($db, $sql);
589 }
590
591
592 function mgFetchSQL($sql)
593 {
594 global $db;
595 return mgDBFetchSQL($db, $sql);
596 }
597
598
599 function mgFetchSQLColumn($sql, $column = 0)
600 {
601 global $db;
602 return mgDBFetchSQLColumn($db, $sql, $column);
603 }
604
605
606 function mgDBBeginTransaction($dbh = FALSE)
607 {
608 global $db;
609 return mgDBExecSQL(($dbh !== FALSE) ? $dbh : $db, "BEGIN TRANSACTION");
610 }
611
612
613 function mgDBCommitTransaction($dbh = FALSE)
614 {
615 global $db;
616 return mgDBExecSQL(($dbh !== FALSE) ? $dbh : $db, "COMMIT");
617 }
618
619
620 function mgDBGetTableSchema($dbh, $schema)
621 {
622 $res = [];
623 $driver = $dbh->getAttribute(PDO::ATTR_DRIVER_NAME);
624
625 // Go through the table schema, definition by definition
626 foreach ($schema as $scol)
627 {
628 $tmp = [];
629
630 // And each element of the one definition
631 // (like 'foo INTEGER AUTOINCREMENT')
632 foreach ($scol as $elem)
633 switch ($driver)
634 {
635 case "pgsql":
636 switch ($elem)
637 {
638 case "AUTOINCREMENT":
639 // For Postgres, use SERIAL for autoincrement and
640 // "cleverly" replace the 2nd element with SERIAL
641 // assuming that it is INTEGER or such.
642 $tmp[1] = "SERIAL";
643 break;
644
645 case "DATETIME":
646 $tmp[] = "TIMESTAMPTZ";
647 break;
648
649 default:
650 $tmp[] = $elem;
651 break;
652 }
653 break;
654
655 case "mysql":
656 switch ($elem)
657 {
658 case "AUTOINCREMENT":
659 $tmp[] = "AUTO_INCREMENT";
660 break;
661
662 case "DATETIME":
663 $tmp[] = "TIMESTAMP";
664 break;
665
666 default:
667 $tmp[] = $elem;
668 break;
669 }
670 break;
671
672 case "sqlite":
673 $tmp[] = $elem;
674 break;
675
676 default:
677 die("Don't know how to handle PDO driver '".$driver."' yet.\n");
678 }
679
680 $res[] = implode(" ", $tmp);
681 }
682
683 return implode(", ", $res);
684 }
685
686
687 function mgDBCreateOneTable($dbh, $name, $schema)
688 {
689 return (mgDBExecSQL($dbh, "CREATE TABLE IF NOT EXISTS ".$name." (".$schema.")") !== FALSE) ? TRUE : FALSE;
690 }
691
692 ?> 377 ?>