add user pref on table filters and cols, fix js

This commit is contained in:
Jean-Christian Denis 2021-09-29 00:56:31 +02:00
parent a6fdf10759
commit 98c61a0c6e
Signed by: JcDenis
GPG key ID: 1B5B8C5B90B6C951
6 changed files with 168 additions and 89 deletions

View file

@ -2,6 +2,10 @@ xxx.xx.xx
- Never fix breaking comments or complexe public url
- [ ] Add public page of the list of know urls and in/visible status
- [ ] Add passworded links
- fix permissions
- fix js load
- add user pref on table cols
- add user pref on filters (dc 2.20)
2021.09.16
- remove deprecated external service

View file

@ -25,11 +25,14 @@ $_menu['Plugins']->addItem(
$core->adminurl->get('admin.plugin.kUtRL'),
dcPage::getPF('kUtRL/icon.png'),
preg_match('/' . preg_quote($core->adminurl->get('admin.plugin.kUtRL')) . '(&.*)?$/', $_SERVER['REQUEST_URI']),
$core->auth->check('admin', $core->blog->id));
$core->auth->check('admin', $core->blog->id)
);
# Admin behaviors
if ($core->blog->settings->kUtRL->kutrl_active) {
$core->addBehavior('adminDashboardFavorites', ['adminKutrl', 'antispamDashboardFavorites']);
$core->addBehavior('adminColumnsLists', ['adminKutrl', 'adminColumnsLists']);
$core->addBehavior('adminSortsLists', ['adminKutrl', 'adminSortsLists']);
$core->addBehavior('adminPostHeaders', ['adminKutrl', 'adminPostHeaders']);
$core->addBehavior('adminPostFormItems', ['adminKutrl', 'adminPostFormItems']);
$core->addBehavior('adminAfterPostUpdate', ['adminKutrl', 'adminAfterPostUpdate']); // update existing short url
@ -49,23 +52,56 @@ $core->addBehavior('importFull', ['backupKutrl', 'importFull']);
# Admin behaviors class
class adminKutrl
{
public static function sortbyCombo()
{
return [
__('Date') => 'kut_dt',
__('Short URL') => 'kut_hash',
__('Long URL') => 'kut_url',
__('Service') => 'kut_service'
];
}
public static function antispamDashboardFavorites(dcCore $core, $favs)
{
$favs->register(
'kUtRL',
[
'title' => __('Links shortener'),
'url' => $core->adminurl->get('admin.plugin.kUtRL'),
'small-icon' => dcPage::getPF('kUtRL/icon.png'),
'large-icon' => dcPage::getPF('kUtRL/icon-b.png'),
'title' => __('Links shortener'),
'url' => $core->adminurl->get('admin.plugin.kUtRL'),
'small-icon' => dcPage::getPF('kUtRL/icon.png'),
'large-icon' => dcPage::getPF('kUtRL/icon-b.png'),
'permissions' => 'admin'
]
);
}
public static function adminColumnsLists(dcCore $core, $cols)
{
$cols['kUtRL'] = [
__('URL shortener'),
[
'kut_hash' => [true, __('Hash')],
'kut_dt' => [true, __('Date')],
'kut_service' => [true, __('Service')]
]
];
}
public static function adminSortsLists(dcCore $core, $sorts)
{
$sorts['kUtRL'] = [
__('URL shortener'),
self::sortbyCombo(),
'kut_dt',
'desc',
[__('Links per page'), 30]
];
}
public static function adminPostHeaders()
{
return dcPage::jsLoad('index.php?pf=kUtRL/js/admin.js');
return dcPage::jsLoad(dcPage::getPF('kUtRL/js/posts.js'));
}
public static function adminPostFormItems($main_items, $sidebar_items, $post)

View file

@ -28,6 +28,20 @@ class kutrlLinkslist
$this->html_next = __('next »');
}
public function userColumns($type, $cols)
{
$cols_user = @$this->core->auth->user_prefs->interface->cols;
if (is_array($cols_user) || $cols_user instanceof ArrayObject) {
if (isset($cols_user[$type])) {
foreach ($cols_user[$type] as $cn => $cd) {
if (!$cd && isset($cols[$cn])) {
unset($cols[$cn]);
}
}
}
}
}
public function display($page, $nb_per_page, $enclose_block, $filter = false)
{
if ($this->rs->isEmpty()) {
@ -38,59 +52,82 @@ class kutrlLinkslist
}
} else {
$pager = new dcPager($page, $this->rs_count, $nb_per_page, 10);
$entries = [];
$links = [];
if (isset($_REQUEST['entries'])) {
foreach ($_REQUEST['entries'] as $v) {
$entries[(integer) $v] = true;
$links[(integer) $v] = true;
}
}
$blocks = explode('%s', sprintf($enclose_block,
'<div class="table-outer"><table>' .
($filter ?
'<caption>' . sprintf(__('List of %s links matching the filter.'), $this->rs_count) . '</caption>' :
'<caption>' . sprintf(__('List of links (%s)'), $this->rs_count) . '</caption>'
) .
'<tr>' .
'<th colspan="2" class="first">' . __('Hash') . '</th>' .
'<th scope="col">' . __('Link') . '</th>' .
'<th scope="col">' . __('Date') . '</th>' .
'<th scope="col">' . __('Service') . '</th>' .
'</tr>%s</table>%s</div>'
));
$cols = [
'kut_url' => '<th colspan="2" class="first">' . __('Link') . '</th>',
'kut_hash' => '<th scope="col">' . __('Hash') . '</th>',
'kut_dt' => '<th scope="col">' . __('Date') . '</th>',
'kut_service' => '<th scope="col">' . __('Service') . '</th>'
];
$cols = new ArrayObject($cols);
$this->userColumns('kUtRL', $cols);
echo $pager->getLinks().$blocks[0];
$html_block =
'<div class="table-outer">' .
'<table>' .
'<caption>' . ($filter ?
sprintf(__('List of %s links matching the filter.'), $this->rs_count) :
sprintf(__('List of links (%s)'), $this->rs_count)
). '</caption>' .
'<thead>' .
'<tr>' . implode(iterator_to_array($cols)) . '</tr>' .
'</thead>' .
'<tbody>%s</tbody>' .
'</table>' .
'%s</div>';
if ($enclose_block) {
$html_block = sprintf($enclose_block, $html_block);
}
$blocks = explode('%s', $html_block);
echo $pager->getLinks() . $blocks[0];
while ($this->rs->fetch()) {
$type = $this->rs->kut_type;
$hash = $this->rs->kut_hash;
if (null !== ($o = kutrl::quickService($type))) {
$type = '<a href="' . $o->home . '" title="' . $o->name . '">' . $o->name . '</a>';
$hash = '<a href="' . $o->url_base . $hash . '" title="' . $o->url_base . $hash . '">' . $hash . '</a>';
}
echo
'<tr class="line">' .
'<td class="nowrap">' .
form::checkbox(['entries[]'], $this->rs->kut_id, ['checked' => isset($entries[$this->rs->kut_id])]) .
'</td>' .
'<td class="nowrap">' .
$hash .
'</td>' .
'<td class="maximal" scope="row">' .
'<a href="' . $this->rs->kut_url . '">' . $this->rs->kut_url . '</a>' .
'</td>' .
'<td class="nowrap count">' .
dt::dt2str(__('%Y-%m-%d %H:%M'), $this->rs->kut_dt, $this->core->auth->getInfo('user_tz')) .
'</td>' .
'<td class="nowrap">' .
$type .
'</td>' .
'</tr>';
echo $this->linkLine(isset($links[$this->rs->kut_id]));
}
echo $blocks[1].$blocks[2].$pager->getLinks();
echo $blocks[1] . $blocks[2] . $pager->getLinks();
}
}
private function linkLine($checked)
{
$type = $this->rs->kut_type;
$hash = $this->rs->kut_hash;
if (null !== ($o = kutrl::quickService($type))) {
$type = '<a href="' . $o->home . '" title="' . $o->name . '">' . $o->name . '</a>';
$hash = '<a href="' . $o->url_base . $hash . '" title="' . $o->url_base . $hash . '">' . $hash . '</a>';
}
$cols = [
'check' => '<td class="nowrap">' .
form::checkbox(['entries[]'], $this->rs->kut_id, ['checked' => isset($entries[$this->rs->kut_id])]) .
'</td>',
'kut_url' => '<td class="maximal" scope="row">' .
'<a href="' . $this->rs->kut_url . '">' . $this->rs->kut_url . '</a>' .
'</td>',
'kut_hash' => '<td class="nowrap">' .
$hash .
'</td>',
'kut_dt' => '<td class="nowrap count">' .
dt::dt2str(__('%Y-%m-%d %H:%M'), $this->rs->kut_dt, $this->core->auth->getInfo('user_tz')) .
'</td>',
'kut_service' => '<td class="nowrap">' .
$type .
'</td>'
];
$cols = new ArrayObject($cols);
$this->userColumns('kUtRL', $cols);
return '<tr class="line">' . implode(iterator_to_array($cols)) . '</tr>' . "\n";
}
}

View file

@ -190,20 +190,15 @@ if ($part == 'link') {
if ($part == 'links') {
$log = new kutrlLog($core);
$sortby_combo = [
__('Date') => 'kut_dt',
__('Long link') => 'kut_url',
__('Short link') => 'kut_hash'
];
$order_combo = [
__('Descending') => 'desc',
__('Ascending') => 'asc'
];
$sortby_combo = adminKutrl::sortbyCombo();
$order_combo = [__('Descending') => 'desc', __('Ascending') => 'asc'];
$core->auth->user_prefs->addWorkspace('interface');
$default_sortby = 'kut_dt';
$default_order = $core->auth->user_prefs->interface->posts_order ?: 'desc';
$nb_per_page = $core->auth->user_prefs->interface->nb_posts_per_page ?: 30;
$sorts_user = @$core->auth->user_prefs->interface->sorts;
$default_sortby = $sorts_user['kUtRL'][0] ?? 'kut_dt';
$default_order = $sorts_user['kUtRL'][1] ?? 'desc';
$nb_per_page = !empty($sorts_user['kUtRL'][2]) ? $sorts_user['kUtRL'][2] : 30;
$sortby = !empty($_GET['sortby']) ? $_GET['sortby'] : $default_sortby;
$order = !empty($_GET['order']) ? $_GET['order'] : $default_order;
$urlsrv = !empty($_GET['urlsrv']) ? $_GET['urlsrv'] : '';
@ -277,16 +272,9 @@ echo
if ($part == 'links') {
echo
'<script type="text/javascript">' . "\n" .
"//<![CDATA[\n" .
dcPage::jsVar(
'dotclear.filter_reset_url',
html::escapeJS($p_url . '&part=links')
) . "\n" .
"\$(function(){\$('.checkboxes-helpers').each(function(){dotclear.checkboxesHelpers(this);});});\n" .
"//]]>\n" .
"</script>\n" .
dcPage::jsFilterControl($show_filters);
dcPage::jsVars(['dotclear.filter_reset_url' => $core->adminurl->get('admin.plugin.kUtRL', ['part' => 'links'])]) .
dcPage::jsFilterControl($show_filters) .
dcPage::jsLoad(dcPage::getPF('kUtRL/js/admin.js'));
}
echo
@ -498,7 +486,7 @@ if ($part == 'links') {
dcPage::notices();
echo '
<form action="' . $p_url . '&amp;part=links" method="get" id="filters-form">
<form action="' . $p_url . '" method="get" id="filters-form">
<h3 class="out-of-screen-if-js">' . __('Show filters and display options') . '</h3>
<div class="table">
<div class="cell">
@ -518,8 +506,9 @@ if ($part == 'links') {
__('entries per page') . '</label></p>' .
form::hidden('part', 'links') .
form::hidden('p', 'kUtRL') . '
form::hidden('p', 'kUtRL') .
form::hidden('filters-options-id', 'kUtRL') .
'<p class="hidden-if-no-js"><a href="#" id="filter-options-save">' . __('Save current options') . '</a></p>
</div>
</div>
@ -530,21 +519,27 @@ if ($part == 'links') {
$list_current->display(
$page,
$nb_per_page,
'<form action="' . $p_url . '&amp;part=links" method="post" id="form-actions">
'<form action="' . $p_url . '&amp;part=links" method="post" id="form-entries">
%s
<div class="two-cols">
<p class="col checkboxes-helpers"></p>
<div class="col left">
<p class="checkboxes-helpers"></p>
</div>
<p class="col right">
<input type="submit" value="' . __('Delete selected short links') . '" />' .
form::hidden(['deletelinks'], 1) .
form::hidden(['urlsrv'], $urlsrv) .
form::hidden(['sortby'], $sortby) .
form::hidden(['order'], $order) .
form::hidden(['page'], $page) .
form::hidden(['nb'], $nb_per_page) .
form::hidden(['part'], 'links') .
<input id="do-action" type="submit" value="' . __('Delete selected short links') . '" /></p>' .
$core->adminurl->getHiddenFormFields(
'admin.plugin.kUtRL',[
'deletelinks' => 1,
'urlsrv' => $urlsrv,
'sortby' => $sortby,
'order' => $order,
'page' => $page,
'nb' => $nb_per_page,
'part' => 'links'
]
) .
$core->formNonce() . '
</p>
</div>

View file

@ -1,7 +1,7 @@
$(function(){
/* toogle admin form sidebar */
$('#kUtRL h5').toggleWithLegend(
$('#kUtRL').children().not('h5'),
{cookie:'dcx_kUtRL_admin_form_sidebar',legend_click:true}
);
$('#form-entries .checkboxes-helpers').each(function () {
dotclear.checkboxesHelpers(this, undefined, '#form-entries td input[type=checkbox]', '#form-entries #do-action');
});
$('#form-entries td input[type=checkbox]').enableShiftClick();
dotclear.condSubmit('#form-entries td input[type=checkbox]', '#form-entries #do-action');
});

7
js/posts.js Normal file
View file

@ -0,0 +1,7 @@
$(function(){
/* toogle admin form sidebar */
$('#kUtRL h5').toggleWithLegend(
$('#kUtRL').children().not('h5'),
{cookie:'dcx_kUtRL_admin_form_sidebar',legend_click:true}
);
});