mirror of
https://github.com/Terranom674/Piwigo_Bratonien_Tools.git
synced 2026-09-20 18:03:16 +00:00
Add QR upload administration and deletion
This commit is contained in:
@@ -54,8 +54,8 @@ function bratonien_tools_customer_qr_save_settings()
|
|||||||
|
|
||||||
return array(
|
return array(
|
||||||
'message' => $settings['enabled']
|
'message' => $settings['enabled']
|
||||||
? 'Kunden-QR-Upload aktiviert.'
|
? 'QR-Upload aktiviert.'
|
||||||
: 'Kunden-QR-Upload deaktiviert.',
|
: 'QR-Upload deaktiviert.',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -352,6 +352,83 @@ function bratonien_tools_customer_qr_process_uploads($year, array $files, array
|
|||||||
return $results;
|
return $results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function bratonien_tools_customer_qr_delete_upload()
|
||||||
|
{
|
||||||
|
$id = isset($_POST['customer_qr_id']) ? (int)$_POST['customer_qr_id'] : 0;
|
||||||
|
if ($id < 1)
|
||||||
|
{
|
||||||
|
throw new InvalidArgumentException('Ungültiger QR-Upload.');
|
||||||
|
}
|
||||||
|
|
||||||
|
$root = bratonien_tools_customer_qr_ensure_storage();
|
||||||
|
$table = bratonien_tools_customer_qr_table();
|
||||||
|
$result = pwg_query('SELECT id, upload_year, code_number, stored_name FROM `'.$table.'` WHERE id='.$id.' LIMIT 1');
|
||||||
|
$row = pwg_db_fetch_assoc($result);
|
||||||
|
if (!$row)
|
||||||
|
{
|
||||||
|
throw new RuntimeException('Der QR-Upload wurde nicht gefunden.');
|
||||||
|
}
|
||||||
|
|
||||||
|
$year = bratonien_tools_customer_qr_year($row['upload_year']);
|
||||||
|
$number = bratonien_tools_customer_qr_number_for_year($year, $row['code_number']);
|
||||||
|
$stored_name = (string)$row['stored_name'];
|
||||||
|
if ($stored_name === '' || basename($stored_name) !== $stored_name)
|
||||||
|
{
|
||||||
|
throw new RuntimeException('Der gespeicherte Dateiname ist ungültig.');
|
||||||
|
}
|
||||||
|
|
||||||
|
$lock_dir = $root.DIRECTORY_SEPARATOR.'.locks';
|
||||||
|
if (!is_dir($lock_dir) && !@mkdir($lock_dir, 0770, true) && !is_dir($lock_dir))
|
||||||
|
{
|
||||||
|
throw new RuntimeException('QR-Lockverzeichnis konnte nicht angelegt werden.');
|
||||||
|
}
|
||||||
|
|
||||||
|
$lock_path = $lock_dir.DIRECTORY_SEPARATOR.$year.'-'.$number.'.lock';
|
||||||
|
$lock = @fopen($lock_path, 'c+');
|
||||||
|
if ($lock === false || !@flock($lock, LOCK_EX))
|
||||||
|
{
|
||||||
|
if (is_resource($lock)) fclose($lock);
|
||||||
|
throw new RuntimeException('Der QR-Upload konnte nicht sicher gesperrt werden.');
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$file = $root.DIRECTORY_SEPARATOR.$year.DIRECTORY_SEPARATOR.$stored_name;
|
||||||
|
if (is_file($file) && !@unlink($file))
|
||||||
|
{
|
||||||
|
throw new RuntimeException('Die QR-Datei konnte nicht gelöscht werden. Der Datenbankeintrag bleibt erhalten.');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pwg_query('DELETE FROM `'.$table.'` WHERE id='.$id.' LIMIT 1') === false)
|
||||||
|
{
|
||||||
|
throw new RuntimeException('Der QR-Datenbankeintrag konnte nicht gelöscht werden.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
@flock($lock, LOCK_UN);
|
||||||
|
fclose($lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
return array(
|
||||||
|
'message' => 'QR-Code '.$number.' aus '.$year.' gelöscht. Die Nummer ist wieder frei.',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function bratonien_tools_customer_qr_size_label($bytes)
|
||||||
|
{
|
||||||
|
$bytes = max(0, (int)$bytes);
|
||||||
|
if ($bytes >= 1048576)
|
||||||
|
{
|
||||||
|
return number_format($bytes / 1048576, 1, ',', '.').' MB';
|
||||||
|
}
|
||||||
|
if ($bytes >= 1024)
|
||||||
|
{
|
||||||
|
return number_format($bytes / 1024, 0, ',', '.').' KB';
|
||||||
|
}
|
||||||
|
return $bytes.' B';
|
||||||
|
}
|
||||||
|
|
||||||
function bratonien_tools_customer_qr_admin_data()
|
function bratonien_tools_customer_qr_admin_data()
|
||||||
{
|
{
|
||||||
bratonien_tools_customer_qr_ensure_storage();
|
bratonien_tools_customer_qr_ensure_storage();
|
||||||
@@ -386,6 +463,27 @@ function bratonien_tools_customer_qr_admin_data()
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$uploads = array();
|
||||||
|
$upload_result = pwg_query(
|
||||||
|
'SELECT id, upload_year, code_number, original_name, file_size, created '
|
||||||
|
.'FROM `'.$table.'` '
|
||||||
|
.'ORDER BY upload_year DESC, CAST(code_number AS UNSIGNED) ASC, id ASC'
|
||||||
|
);
|
||||||
|
while ($row = pwg_db_fetch_assoc($upload_result))
|
||||||
|
{
|
||||||
|
$id = (int)$row['id'];
|
||||||
|
$uploads[] = array(
|
||||||
|
'id' => $id,
|
||||||
|
'year' => (int)$row['upload_year'],
|
||||||
|
'number' => (string)$row['code_number'],
|
||||||
|
'original_name' => (string)$row['original_name'],
|
||||||
|
'file_size' => (int)$row['file_size'],
|
||||||
|
'file_size_label' => bratonien_tools_customer_qr_size_label($row['file_size']),
|
||||||
|
'created' => (string)$row['created'],
|
||||||
|
'preview_url' => get_absolute_root_url(true).'plugins/'.BRATONIEN_TOOLS_ID.'/customer-qr-admin-file.php?id='.$id,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
$year_keys = array_keys($limits);
|
$year_keys = array_keys($limits);
|
||||||
sort($year_keys, SORT_NUMERIC);
|
sort($year_keys, SORT_NUMERIC);
|
||||||
|
|
||||||
@@ -396,6 +494,7 @@ function bratonien_tools_customer_qr_admin_data()
|
|||||||
'year_max' => (int)end($year_keys),
|
'year_max' => (int)end($year_keys),
|
||||||
'default_year' => $current_year,
|
'default_year' => $current_year,
|
||||||
'years' => $years,
|
'years' => $years,
|
||||||
|
'uploads' => $uploads,
|
||||||
'total' => $total,
|
'total' => $total,
|
||||||
'current_year_total' => (int)$counts[$current_year],
|
'current_year_total' => (int)$counts[$current_year],
|
||||||
'current_year_capacity' => (int)$limits[$current_year],
|
'current_year_capacity' => (int)$limits[$current_year],
|
||||||
|
|||||||
Reference in New Issue
Block a user