129 lines
3.4 KiB
PHP
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'),
|
|
);
|
|
}
|
|
}
|
|
?>
|