Files
OpenWeddingApp/services/www/api/objects/gallery_item.php
2026-01-31 18:06:18 +01:00

129 lines
3.4 KiB
PHP

<?php
class GalleryItem {
private const table_name = "gallery";
private const select = "
SELECT
g.*,
(select count(id) from gallery_like where gallery_id = g.id) as likes,
lu.id as lu_id,
lu.name as lu_name,
lu.surname as lu_surname,
lu.code as lu_code,
lu.picture as lu_picture,
lu.admin as lu_admin,
lu.table as lu_table,
lu.witness as lu_witness,
lu.invited_by as lu_invited_by,
au.id as au_id,
au.name as au_name,
au.surname as au_surname,
au.code as au_code,
au.picture as au_picture,
au.admin as au_admin,
au.table as au_table,
au.witness as au_witness,
au.invited_by as au_invited_by,
glcu.id as glcu_id,
glcu.gallery_id as glcu_gallery_id,
glcu.user_id as glcu_user_id,
glcu.created as glcu_created
FROM " . self::table_name . " g
-- Author
LEFT JOIN `user` au
ON au.id = g.author
-- First liked user
LEFT JOIN gallery_like gl
ON gl.gallery_id = g.id
LEFT JOIN `user` lu
ON lu.id = gl.user_id
-- Like from current user
LEFT JOIN gallery_like glcu
ON glcu.gallery_id = g.id
AND glcu.user_id = :uid
";
static function read($db, $uid, $page, $elemPerPage){
$start = $page * $elemPerPage;
$limit = $elemPerPage + 1; // Retrieve one more item to know if there are elements and compute "more" value
$query = self::select . "
GROUP BY g.id
ORDER BY created DESC
LIMIT :start,:limit";
// prepare query statement
$stmt = $db->prepare($query);
$stmt->bindParam(":uid", $uid);
$stmt->bindParam(":start", $start, PDO::PARAM_INT);
$stmt->bindParam(":limit", $limit, PDO::PARAM_INT);
// execute query
$stmt->execute();
return $stmt;
}
static function readById($db, $uid, $id){
$query = self::select . "
WHERE g.id = :id
GROUP BY g.id
ORDER BY created DESC
";
// prepare query statement
$stmt = $db->prepare($query);
$stmt->bindParam(":id", $id);
$stmt->bindParam(":uid", $uid);
// execute query
$stmt->execute();
return $stmt;
}
static function create($db, $item){
$query = "INSERT INTO " . self::table_name . "
SET image_url=:imageUrl, image_thumb_url=:imageThumbUrl, description=:description, author=:author";
// prepare query
$stmt = $db->prepare($query);
// sanitize
$imageUrl=htmlspecialchars(strip_tags($item['imageUrl']));
$imageThumbUrl=htmlspecialchars(strip_tags($item['imageThumbUrl']));
$description=htmlspecialchars(strip_tags($item['description']));
$author=htmlspecialchars(strip_tags($item['author']));
// bind values
$stmt->bindParam(":imageUrl", $imageUrl);
$stmt->bindParam(":imageThumbUrl", $imageThumbUrl);
$stmt->bindParam(":description", $description);
$stmt->bindParam(":author", $author);
// execute query
if($stmt->execute()){
return true;
}
return false;
}
static function fromRow($row) {
return array(
"id" => $row['id'],
"imageUrl" => $row['image_url'],
"imageThumbUrl" => $row['image_thumb_url'],
"likes" => $row['likes'],
"firstUserLiked" => User::createFromRow($row, 'lu'),
"description" => $row['description'],
"author" => User::createFromRow($row, 'au'),
"created" => $row['created'],
"currentUserLike" => Like::createFromRow($row, 'glcu'),
);
}
}
?>