]> git.bts.cx Git - cx.git/blob - cx/lib/images.php
Don't break when there's no hero image
[cx.git] / cx / lib / images.php
1 <?php
2
3 cx_require('lib', 'db.php');
4 cx_require('lib', 'setup.php');
5 cx_require('lib', 'user_data.php');
6
7
8 class Image {
9 public $id;
10 public $uid;
11 public $alt_text;
12 public $url;
13
14 public function __construct($dict) {
15 $this->id = $dict['image_id']; // FIXME, hide when not used?
16 $this->uid = $dict['image_uid'];
17 $this->alt_text = $dict['image_alt_text'];
18 $this->url = $this->uid . '.' . $dict['image_type'];
19 }
20 }
21
22 function cx_images_add_image($site_id, $alt_text, $image_path, $image_original_filename) {
23 $path_parts = pathinfo($image_original_filename);
24
25 $uid = hash_file("sha256", $image_path);
26
27 $target_name = $uid . "." . $path_parts['extension'];
28 $path = cx_user_data_path('images', $target_name);
29
30 move_uploaded_file($image_path, $path);
31
32 $creation_time = $update_time = time();
33
34 $sql = 'INSERT INTO images (
35 image_site_id,
36 image_creation_time,
37 image_update_time,
38 image_uid,
39 image_type,
40 image_alt_text)
41 VALUES (?, ?, ?, ?, ?, ?);';
42 cx_db_exec($sql, $site_id, $creation_time, $update_time, $uid, $path_parts['extension'], $alt_text);
43 }
44
45 function cx_images_get(int $limit = 0) {
46 $sql = 'SELECT
47 image_id,
48 image_uid,
49 image_type,
50 image_alt_text
51 FROM images
52 ORDER BY image_creation_time DESC';
53
54 if ($limit > 0) {
55 $sql .= ' LIMIT ' . $limit;
56 }
57
58 $sql .= ';';
59
60 foreach (cx_db_query($sql) as $image) {
61 $p = new Image($image);
62 yield $p;
63 }
64 }
65
66 cx_setup_register(1, function() {
67 cx_db_exec('CREATE TABLE images (
68 image_id INTEGER PRIMARY KEY,
69 image_site_id INTEGER,
70 image_creation_time INTEGER,
71 image_update_time INTEGER,
72 image_uid STRING,
73 image_type STRING,
74 image_alt_text STRING,
75
76 FOREIGN KEY(image_site_id) REFERENCES sites(site_id)
77 );');
78
79 mkdir(cx_user_data_path('images'), recursive: true);
80 });