forked from Public/pics
Database: start reworking the DBA to work with PDO
This commit is contained in:
180
models/Asset.php
180
models/Asset.php
@@ -56,7 +56,7 @@ class Asset
|
||||
$row = Registry::get('db')->queryAssoc('
|
||||
SELECT *
|
||||
FROM assets
|
||||
WHERE id_asset = {int:id_asset}',
|
||||
WHERE id_asset = :id_asset',
|
||||
[
|
||||
'id_asset' => $id_asset,
|
||||
]);
|
||||
@@ -69,7 +69,7 @@ class Asset
|
||||
$row = Registry::get('db')->queryAssoc('
|
||||
SELECT *
|
||||
FROM assets
|
||||
WHERE slug = {string:slug}',
|
||||
WHERE slug = :slug',
|
||||
[
|
||||
'slug' => $slug,
|
||||
]);
|
||||
@@ -85,7 +85,7 @@ class Asset
|
||||
$row['meta'] = $db->queryPair('
|
||||
SELECT variable, value
|
||||
FROM assets_meta
|
||||
WHERE id_asset = {int:id_asset}',
|
||||
WHERE id_asset = :id_asset',
|
||||
[
|
||||
'id_asset' => $row['id_asset'],
|
||||
]);
|
||||
@@ -94,16 +94,15 @@ class Asset
|
||||
$row['thumbnails'] = $db->queryPair('
|
||||
SELECT
|
||||
CONCAT(
|
||||
width,
|
||||
{string:x},
|
||||
height,
|
||||
IF(mode != {string:empty}, CONCAT({string:_}, mode), {string:empty})
|
||||
width, :x, height,
|
||||
IF(mode != :empty1, CONCAT(:_, mode), :empty2)
|
||||
) AS selector, filename
|
||||
FROM assets_thumbs
|
||||
WHERE id_asset = {int:id_asset}',
|
||||
WHERE id_asset = :id_asset',
|
||||
[
|
||||
'id_asset' => $row['id_asset'],
|
||||
'empty' => '',
|
||||
'empty1' => '',
|
||||
'empty2' => '',
|
||||
'x' => 'x',
|
||||
'_' => '_',
|
||||
]);
|
||||
@@ -121,14 +120,14 @@ class Asset
|
||||
$res = $db->query('
|
||||
SELECT *
|
||||
FROM assets
|
||||
WHERE id_asset IN ({array_int:id_assets})
|
||||
WHERE id_asset IN (@id_assets)
|
||||
ORDER BY id_asset',
|
||||
[
|
||||
'id_assets' => $id_assets,
|
||||
]);
|
||||
|
||||
$assets = [];
|
||||
while ($asset = $db->fetch_assoc($res))
|
||||
while ($asset = $db->fetchAssoc($res))
|
||||
{
|
||||
$assets[$asset['id_asset']] = $asset;
|
||||
$assets[$asset['id_asset']]['meta'] = [];
|
||||
@@ -138,7 +137,7 @@ class Asset
|
||||
$metas = $db->queryRows('
|
||||
SELECT id_asset, variable, value
|
||||
FROM assets_meta
|
||||
WHERE id_asset IN ({array_int:id_assets})
|
||||
WHERE id_asset IN (@id_assets)
|
||||
ORDER BY id_asset',
|
||||
[
|
||||
'id_assets' => $id_assets,
|
||||
@@ -150,17 +149,16 @@ class Asset
|
||||
$thumbnails = $db->queryRows('
|
||||
SELECT id_asset,
|
||||
CONCAT(
|
||||
width,
|
||||
{string:x},
|
||||
height,
|
||||
IF(mode != {string:empty}, CONCAT({string:_}, mode), {string:empty})
|
||||
width, :x, height,
|
||||
IF(mode != :empty1, CONCAT(:_, mode), :empty2)
|
||||
) AS selector, filename
|
||||
FROM assets_thumbs
|
||||
WHERE id_asset IN ({array_int:id_assets})
|
||||
WHERE id_asset IN (@id_assets)
|
||||
ORDER BY id_asset',
|
||||
[
|
||||
'id_assets' => $id_assets,
|
||||
'empty' => '',
|
||||
'empty1' => '',
|
||||
'empty2' => '',
|
||||
'x' => 'x',
|
||||
'_' => '_',
|
||||
]);
|
||||
@@ -169,7 +167,9 @@ class Asset
|
||||
$assets[$thumb[0]]['thumbnails'][$thumb[1]] = $thumb[2];
|
||||
|
||||
if ($return_format === 'array')
|
||||
{
|
||||
return $assets;
|
||||
}
|
||||
else
|
||||
{
|
||||
$objects = [];
|
||||
@@ -262,10 +262,10 @@ class Asset
|
||||
INSERT INTO assets
|
||||
(id_user_uploaded, subdir, filename, title, slug, mimetype, image_width, image_height, date_captured, priority)
|
||||
VALUES
|
||||
({int:id_user_uploaded}, {string:subdir}, {string:filename}, {string:title}, {string:slug}, {string:mimetype},
|
||||
{int:image_width}, {int:image_height},
|
||||
IF({int:date_captured} > 0, FROM_UNIXTIME({int:date_captured}), NULL),
|
||||
{int:priority})',
|
||||
(:id_user_uploaded, :subdir, :filename, :title, :slug, :mimetype,
|
||||
:image_width, :image_height,
|
||||
IF(:date_captured > 0, FROM_UNIXTIME(:date_captured), NULL),
|
||||
:priority)',
|
||||
[
|
||||
'id_user_uploaded' => isset($id_user) ? $id_user : Registry::get('user')->getUserId(),
|
||||
'subdir' => $preferred_subdir,
|
||||
@@ -285,7 +285,7 @@ class Asset
|
||||
return false;
|
||||
}
|
||||
|
||||
$data['id_asset'] = $db->insert_id();
|
||||
$data['id_asset'] = $db->insertId();
|
||||
return $return_format === 'object' ? new self($data) : $data;
|
||||
}
|
||||
|
||||
@@ -324,7 +324,7 @@ class Asset
|
||||
$posts = Registry::get('db')->queryValues('
|
||||
SELECT id_post
|
||||
FROM posts_assets
|
||||
WHERE id_asset = {int:id_asset}',
|
||||
WHERE id_asset = :id_asset',
|
||||
['id_asset' => $this->id_asset]);
|
||||
|
||||
// TODO: fix empty post iterator.
|
||||
@@ -495,12 +495,12 @@ class Asset
|
||||
return Registry::get('db')->query('
|
||||
UPDATE assets
|
||||
SET
|
||||
mimetype = {string:mimetype},
|
||||
image_width = {int:image_width},
|
||||
image_height = {int:image_height},
|
||||
date_captured = {datetime:date_captured},
|
||||
priority = {int:priority}
|
||||
WHERE id_asset = {int:id_asset}',
|
||||
mimetype = :mimetype,
|
||||
image_width = :image_width,
|
||||
image_height = :image_height,
|
||||
date_captured = :date_captured,
|
||||
priority = :priority
|
||||
WHERE id_asset = :id_asset',
|
||||
[
|
||||
'id_asset' => $this->id_asset,
|
||||
'mimetype' => $this->mimetype,
|
||||
@@ -527,8 +527,8 @@ class Asset
|
||||
if (!empty($to_remove))
|
||||
$db->query('
|
||||
DELETE FROM assets_meta
|
||||
WHERE id_asset = {int:id_asset} AND
|
||||
variable IN({array_string:variables})',
|
||||
WHERE id_asset = :id_asset AND
|
||||
variable IN(@variables)',
|
||||
[
|
||||
'id_asset' => $this->id_asset,
|
||||
'variables' => array_keys($to_remove),
|
||||
@@ -559,63 +559,40 @@ class Asset
|
||||
{
|
||||
$db = Registry::get('db');
|
||||
|
||||
// First: delete associated metadata
|
||||
// Delete any and all thumbnails, if this is an image.
|
||||
if ($this->isImage())
|
||||
{
|
||||
$image = $this->getImage();
|
||||
$image->removeAllThumbnails();
|
||||
}
|
||||
|
||||
// Delete all meta info for this asset.
|
||||
$db->query('
|
||||
DELETE FROM assets_meta
|
||||
WHERE id_asset = {int:id_asset}',
|
||||
[
|
||||
'id_asset' => $this->id_asset,
|
||||
]);
|
||||
WHERE id_asset = :id_asset',
|
||||
['id_asset' => $this->id_asset]);
|
||||
|
||||
// Second: figure out what tags to recount cardinality for
|
||||
// Figure out what tags to recount cardinality for
|
||||
$recount_tags = $db->queryValues('
|
||||
SELECT id_tag
|
||||
FROM assets_tags
|
||||
WHERE id_asset = {int:id_asset}',
|
||||
[
|
||||
'id_asset' => $this->id_asset,
|
||||
]);
|
||||
WHERE id_asset = :id_asset',
|
||||
['id_asset' => $this->id_asset]);
|
||||
|
||||
// Delete asset association for these tags
|
||||
$db->query('
|
||||
DELETE FROM assets_tags
|
||||
WHERE id_asset = {int:id_asset}',
|
||||
[
|
||||
'id_asset' => $this->id_asset,
|
||||
]);
|
||||
WHERE id_asset = :id_asset',
|
||||
['id_asset' => $this->id_asset]);
|
||||
|
||||
Tag::recount($recount_tags);
|
||||
|
||||
// Third: figure out what associated thumbs to delete
|
||||
$thumbs_to_delete = $db->queryValues('
|
||||
SELECT filename
|
||||
FROM assets_thumbs
|
||||
WHERE id_asset = {int:id_asset}',
|
||||
[
|
||||
'id_asset' => $this->id_asset,
|
||||
]);
|
||||
|
||||
foreach ($thumbs_to_delete as $filename)
|
||||
{
|
||||
$thumb_path = THUMBSDIR . '/' . $this->subdir . '/' . $filename;
|
||||
if (is_file($thumb_path))
|
||||
unlink($thumb_path);
|
||||
}
|
||||
|
||||
$db->query('
|
||||
DELETE FROM assets_thumbs
|
||||
WHERE id_asset = {int:id_asset}',
|
||||
[
|
||||
'id_asset' => $this->id_asset,
|
||||
]);
|
||||
|
||||
// Reset asset ID for tags that use this asset for their thumbnail
|
||||
$rows = $db->query('
|
||||
$rows = $db->queryValues('
|
||||
SELECT id_tag
|
||||
FROM tags
|
||||
WHERE id_asset_thumb = {int:id_asset}',
|
||||
[
|
||||
'id_asset' => $this->id_asset,
|
||||
]);
|
||||
WHERE id_asset_thumb = :id_asset',
|
||||
['id_asset' => $this->id_asset]);
|
||||
|
||||
if (!empty($rows))
|
||||
{
|
||||
@@ -632,10 +609,8 @@ class Asset
|
||||
|
||||
$return = $db->query('
|
||||
DELETE FROM assets
|
||||
WHERE id_asset = {int:id_asset}',
|
||||
[
|
||||
'id_asset' => $this->id_asset,
|
||||
]);
|
||||
WHERE id_asset = :id_asset',
|
||||
['id_asset' => $this->id_asset]);
|
||||
|
||||
return $return;
|
||||
}
|
||||
@@ -664,7 +639,7 @@ class Asset
|
||||
|
||||
Registry::get('db')->query('
|
||||
DELETE FROM assets_tags
|
||||
WHERE id_asset = {int:id_asset} AND id_tag IN ({array_int:id_tags})',
|
||||
WHERE id_asset = :id_asset AND id_tag IN (@id_tags)',
|
||||
[
|
||||
'id_asset' => $this->id_asset,
|
||||
'id_tags' => $id_tags,
|
||||
@@ -682,16 +657,17 @@ class Asset
|
||||
|
||||
public static function getOffset($offset, $limit, $order, $direction)
|
||||
{
|
||||
$order = $order . ($direction == 'up' ? ' ASC' : ' DESC');
|
||||
|
||||
return Registry::get('db')->queryAssocs('
|
||||
SELECT a.id_asset, a.subdir, a.filename,
|
||||
a.image_width, a.image_height, a.mimetype,
|
||||
u.id_user, u.first_name, u.surname
|
||||
FROM assets AS a
|
||||
LEFT JOIN users AS u ON a.id_user_uploaded = u.id_user
|
||||
ORDER BY {raw:order}
|
||||
LIMIT {int:offset}, {int:limit}',
|
||||
ORDER BY ' . $order . '
|
||||
LIMIT :offset, :limit',
|
||||
[
|
||||
'order' => $order . ($direction == 'up' ? ' ASC' : ' DESC'),
|
||||
'offset' => $offset,
|
||||
'limit' => $limit,
|
||||
]);
|
||||
@@ -704,18 +680,16 @@ class Asset
|
||||
|
||||
return Registry::get('db')->query('
|
||||
UPDATE assets
|
||||
SET id_asset = {int:id_asset},
|
||||
id_user_uploaded = {int:id_user_uploaded},
|
||||
subdir = {string:subdir},
|
||||
filename = {string:filename},
|
||||
title = {string:title},
|
||||
slug = {string:slug},
|
||||
mimetype = {string:mimetype},
|
||||
image_width = {int:image_width},
|
||||
image_height = {int:image_height},
|
||||
date_captured = {datetime:date_captured},
|
||||
priority = {int:priority}
|
||||
WHERE id_asset = {int:id_asset}',
|
||||
SET subdir = :subdir,
|
||||
filename = :filename,
|
||||
title = :title,
|
||||
slug = :slug,
|
||||
mimetype = :mimetype,
|
||||
image_width = :image_width,
|
||||
image_height = :image_height,
|
||||
date_captured = :date_captured,
|
||||
priority = :priority
|
||||
WHERE id_asset = :id_asset',
|
||||
get_object_vars($this));
|
||||
}
|
||||
|
||||
@@ -733,27 +707,27 @@ class Asset
|
||||
// Direction depends on whether we're browsing a tag or timeline
|
||||
if (isset($tag))
|
||||
{
|
||||
$where[] = 't.id_tag = {int:id_tag}';
|
||||
$where[] = 't.id_tag = :id_tag';
|
||||
$params['id_tag'] = $tag->id_tag;
|
||||
$params['where_op'] = $previous ? '<' : '>';
|
||||
$params['order_dir'] = $previous ? 'DESC' : 'ASC';
|
||||
$where_op = $previous ? '<' : '>';
|
||||
$order_dir = $previous ? 'DESC' : 'ASC';
|
||||
}
|
||||
else
|
||||
{
|
||||
$params['where_op'] = $previous ? '>' : '<';
|
||||
$params['order_dir'] = $previous ? 'ASC' : 'DESC';
|
||||
$where_op = $previous ? '>' : '<';
|
||||
$order_dir = $previous ? 'ASC' : 'DESC';
|
||||
}
|
||||
|
||||
// Take active filter into account as well
|
||||
if (!empty($activeFilter) && ($user = Member::fromSlug($activeFilter)) !== false)
|
||||
{
|
||||
$where[] = 'id_user_uploaded = {int:id_user_uploaded}';
|
||||
$where[] = 'id_user_uploaded = :id_user_uploaded';
|
||||
$params['id_user_uploaded'] = $user->getUserId();
|
||||
}
|
||||
|
||||
// Use complete ordering when sorting the set
|
||||
$where[] = '(a.date_captured, a.id_asset) {raw:where_op} ' .
|
||||
'({datetime:date_captured}, {int:id_asset})';
|
||||
$where[] = '(a.date_captured, a.id_asset) ' . $where_op .
|
||||
' (:date_captured, :id_asset)';
|
||||
|
||||
// Stringify conditions together
|
||||
$where = '(' . implode(') AND (', $where) . ')';
|
||||
@@ -765,7 +739,7 @@ class Asset
|
||||
' . (isset($tag) ? '
|
||||
INNER JOIN assets_tags AS t ON a.id_asset = t.id_asset' : '') . '
|
||||
WHERE ' . $where . '
|
||||
ORDER BY a.date_captured {raw:order_dir}, a.id_asset {raw:order_dir}
|
||||
ORDER BY a.date_captured ' . $order_dir . ', a.id_asset ' . $order_dir . '
|
||||
LIMIT 1',
|
||||
$params);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user