Management controllers: make format functions first-level

This commit is contained in:
Aaron van Geffen 2025-01-08 18:31:29 +01:00
parent 6ca3ee6d9d
commit 9740416cb2
6 changed files with 70 additions and 111 deletions

View File

@ -35,18 +35,14 @@ class ManageAlbums extends HTMLController
'tag' => [ 'tag' => [
'header' => 'Album', 'header' => 'Album',
'is_sortable' => true, 'is_sortable' => true,
'format' => [ 'link' => BASEURL . '/editalbum/?id={ID_TAG}',
'link' => BASEURL . '/editalbum/?id={ID_TAG}', 'value' => 'tag',
'data' => 'tag',
],
], ],
'slug' => [ 'slug' => [
'header' => 'Slug', 'header' => 'Slug',
'is_sortable' => true, 'is_sortable' => true,
'format' => [ 'link' => BASEURL . '/editalbum/?id={ID_TAG}',
'link' => BASEURL . '/editalbum/?id={ID_TAG}', 'value' => 'slug',
'data' => 'slug',
],
], ],
'count' => [ 'count' => [
'header' => '# Photos', 'header' => '# Photos',

View File

@ -38,40 +38,33 @@ class ManageAssets extends HTMLController
'checkbox' => [ 'checkbox' => [
'header' => '<input type="checkbox" id="selectall">', 'header' => '<input type="checkbox" id="selectall">',
'is_sortable' => false, 'is_sortable' => false,
'format' => [ 'format' => fn($row) =>
'type' => 'function', '<input type="checkbox" class="asset_select" name="delete[]" value="' . $row['id_asset'] . '">',
'data' => function($row) {
return '<input type="checkbox" class="asset_select" name="delete[]" value="' . $row['id_asset'] . '">';
},
],
], ],
'thumbnail' => [ 'thumbnail' => [
'header' => '&nbsp;', 'header' => '&nbsp;',
'is_sortable' => false, 'is_sortable' => false,
'cell_class' => 'text-center', 'cell_class' => 'text-center',
'format' => [ 'format' => function($row) {
'type' => 'function', $asset = Image::byRow($row);
'data' => function($row) { $width = $height = 65;
$asset = Image::byRow($row); if ($asset->isImage())
$width = $height = 65; {
if ($asset->isImage()) if ($asset->isPortrait())
{ $width = null;
if ($asset->isPortrait())
$width = null;
else
$height = null;
$thumb = $asset->getThumbnailUrl($width, $height);
}
else else
$thumb = BASEURL . '/images/nothumb.svg'; $height = null;
$width = isset($width) ? $width . 'px' : 'auto'; $thumb = $asset->getThumbnailUrl($width, $height);
$height = isset($height) ? $height . 'px' : 'auto'; }
else
$thumb = BASEURL . '/images/nothumb.svg';
return sprintf('<img src="%s" style="width: %s; height: %s;">', $thumb, $width, $height); $width = isset($width) ? $width . 'px' : 'auto';
}, $height = isset($height) ? $height . 'px' : 'auto';
],
return sprintf('<img src="%s" style="width: %s; height: %s;">', $thumb, $width, $height);
},
], ],
'id_asset' => [ 'id_asset' => [
'value' => 'id_asset', 'value' => 'id_asset',
@ -87,38 +80,29 @@ class ManageAssets extends HTMLController
'value' => 'filename', 'value' => 'filename',
'header' => 'Filename', 'header' => 'Filename',
'is_sortable' => true, 'is_sortable' => true,
'format' => [ 'link' => BASEURL . '/editasset/?id={ID_ASSET}',
'type' => 'value', 'value' => 'filename',
'link' => BASEURL . '/editasset/?id={ID_ASSET}',
'data' => 'filename',
],
], ],
'id_user_uploaded' => [ 'id_user_uploaded' => [
'header' => 'User uploaded', 'header' => 'User uploaded',
'is_sortable' => true, 'is_sortable' => true,
'format' => [ 'format' => function($row) {
'type' => 'function', if (!empty($row['id_user']))
'data' => function($row) { return sprintf('<a href="%s/edituser/?id=%d">%s</a>', BASEURL, $row['id_user'],
if (!empty($row['id_user'])) $row['first_name'] . ' ' . $row['surname']);
return sprintf('<a href="%s/edituser/?id=%d">%s</a>', BASEURL, $row['id_user'], else
$row['first_name'] . ' ' . $row['surname']); return 'n/a';
else },
return 'n/a';
},
],
], ],
'dimensions' => [ 'dimensions' => [
'header' => 'Dimensions', 'header' => 'Dimensions',
'is_sortable' => false, 'is_sortable' => false,
'format' => [ 'format' => function($row) {
'type' => 'function', if (!empty($row['image_width']))
'data' => function($row) { return $row['image_width'] . ' x ' . $row['image_height'];
if (!empty($row['image_width'])) else
return $row['image_width'] . ' x ' . $row['image_height']; return 'n/a';
else },
return 'n/a';
},
],
], ],
], ],
'default_sort_order' => 'id_asset', 'default_sort_order' => 'id_asset',

View File

@ -45,20 +45,17 @@ class ManageErrors extends HTMLController
'is_sortable' => true, 'is_sortable' => true,
], ],
'message' => [ 'message' => [
'format' => [
'type' => 'function',
'data' => function($row) {
return $row['message'] . '<br>' .
'<div><a onclick="this.parentNode.childNodes[1].style.display=\'block\';this.style.display=\'none\';">Show debug info</a>' .
'<pre style="display: none">' . htmlspecialchars($row['debug_info']) .
'</pre></div>' .
'<small><a href="' . BASEURL .
htmlspecialchars($row['request_uri']) . '">' .
htmlspecialchars($row['request_uri']) . '</a></small>';
}
],
'header' => 'Message / URL', 'header' => 'Message / URL',
'is_sortable' => false, 'is_sortable' => false,
'format' => function($row) {
return $row['message'] . '<br>' .
'<div><a onclick="this.parentNode.childNodes[1].style.display=\'block\';this.style.display=\'none\';">Show debug info</a>' .
'<pre style="display: none">' . htmlspecialchars($row['debug_info']) .
'</pre></div>' .
'<small><a href="' . BASEURL .
htmlspecialchars($row['request_uri']) . '">' .
htmlspecialchars($row['request_uri']) . '</a></small>';
},
], ],
'file' => [ 'file' => [
'value' => 'file', 'value' => 'file',
@ -89,10 +86,8 @@ class ManageErrors extends HTMLController
'uid' => [ 'uid' => [
'header' => 'UID', 'header' => 'UID',
'is_sortable' => true, 'is_sortable' => true,
'format' => [ 'link' => BASEURL . '/edituser/?id={ID_USER}',
'link' => BASEURL . '/edituser/?id={ID_USER}', 'value' => 'id_user',
'data' => 'id_user',
],
], ],
], ],
'default_sort_order' => 'id_entry', 'default_sort_order' => 'id_entry',

View File

@ -37,32 +37,25 @@ class ManageTags extends HTMLController
'tag' => [ 'tag' => [
'header' => 'Tag', 'header' => 'Tag',
'is_sortable' => true, 'is_sortable' => true,
'format' => [ 'link' => BASEURL . '/edittag/?id={ID_TAG}',
'link' => BASEURL . '/edittag/?id={ID_TAG}', 'value' => 'tag',
'data' => 'tag',
],
], ],
'slug' => [ 'slug' => [
'header' => 'Slug', 'header' => 'Slug',
'is_sortable' => true, 'is_sortable' => true,
'format' => [ 'link' => BASEURL . '/edittag/?id={ID_TAG}',
'link' => BASEURL . '/edittag/?id={ID_TAG}', 'value' => 'slug',
'data' => 'slug',
],
], ],
'id_user_owner' => [ 'id_user_owner' => [
'header' => 'Owning user', 'header' => 'Owning user',
'is_sortable' => true, 'is_sortable' => true,
'format' => [ 'format' => function($row) {
'type' => 'function', if (!empty($row['id_user']))
'data' => function($row) { return sprintf('<a href="%s/edituser/?id=%d">%s</a>', BASEURL, $row['id_user'],
if (!empty($row['id_user'])) $row['first_name'] . ' ' . $row['surname']);
return sprintf('<a href="%s/edituser/?id=%d">%s</a>', BASEURL, $row['id_user'], else
$row['first_name'] . ' ' . $row['surname']); return 'n/a';
else },
return 'n/a';
},
],
], ],
'count' => [ 'count' => [
'header' => 'Cardinality', 'header' => 'Cardinality',

View File

@ -37,26 +37,20 @@ class ManageUsers extends HTMLController
'surname' => [ 'surname' => [
'header' => 'Last name', 'header' => 'Last name',
'is_sortable' => true, 'is_sortable' => true,
'format' => [ 'link' => BASEURL . '/edituser/?id={ID_USER}',
'link' => BASEURL . '/edituser/?id={ID_USER}', 'value' => 'surname',
'data' => 'surname',
],
], ],
'first_name' => [ 'first_name' => [
'header' => 'First name', 'header' => 'First name',
'is_sortable' => true, 'is_sortable' => true,
'format' => [ 'link' => BASEURL . '/edituser/?id={ID_USER}',
'link' => BASEURL . '/edituser/?id={ID_USER}', 'value' => 'first_name',
'data' => 'first_name',
],
], ],
'slug' => [ 'slug' => [
'header' => 'Slug', 'header' => 'Slug',
'is_sortable' => true, 'is_sortable' => true,
'format' => [ 'link' => BASEURL . '/edituser/?id={ID_USER}',
'link' => BASEURL . '/edituser/?id={ID_USER}', 'value' => 'slug',
'data' => 'slug',
],
], ],
'emailaddress' => [ 'emailaddress' => [
'value' => 'emailaddress', 'value' => 'emailaddress',
@ -82,12 +76,7 @@ class ManageUsers extends HTMLController
'is_admin' => [ 'is_admin' => [
'is_sortable' => true, 'is_sortable' => true,
'header' => 'Admin?', 'header' => 'Admin?',
'format' => [ 'format' => fn($row) => $row['is_admin'] ? 'yes' : 'no',
'type' => 'function',
'data' => function($row) {
return $row['is_admin'] ? 'yes' : 'no';
}
],
], ],
], ],
'default_sort_order' => 'id_user', 'default_sort_order' => 'id_user',

View File

@ -192,7 +192,9 @@ class GenericTable
foreach ($options['columns'] as $column) foreach ($options['columns'] as $column)
{ {
// Process formatting // Process formatting
if (isset($column['format'])) if (isset($column['format']) && is_callable($column['format']))
$value = $column['format']($row);
elseif (isset($column['format']))
$value = self::processFormatting($column['format'], $row); $value = self::processFormatting($column['format'], $row);
else else
$value = $row[$column['value']]; $value = $row[$column['value']];