mirror of
https://framagit.org/hubzilla/core.git
synced 2026-06-21 00:52:33 -04:00
bring filed items to mod hq
This commit is contained in:
@@ -230,6 +230,7 @@ class Hq extends \Zotlabs\Web\Controller {
|
||||
$options['offset'] = $_REQUEST['offset'] ?? 0;
|
||||
$options['type'] = $_REQUEST['type'] ?? '';
|
||||
$options['author'] = ((isset($_REQUEST['author'])) ? urldecode($_REQUEST['author']) : '');
|
||||
$options['file'] = ((isset($_REQUEST['file'])) ? urldecode($_REQUEST['file']) : '');
|
||||
|
||||
$ret = Messages::get_messages_page($options);
|
||||
|
||||
|
||||
@@ -23,20 +23,35 @@ class Messages {
|
||||
|
||||
$_SESSION['messages_loadtime'] = datetime_convert();
|
||||
|
||||
$r = q("SELECT DISTINCT(term) FROM term WHERE uid = %d AND ttype = %d ORDER BY term",
|
||||
intval(local_channel()),
|
||||
intval(TERM_FILE)
|
||||
);
|
||||
|
||||
if ($r) {
|
||||
foreach($r as $rr) {
|
||||
$file_tags[] = $rr['term'];
|
||||
}
|
||||
}
|
||||
|
||||
$tpl = get_markup_template('messages_widget.tpl');
|
||||
$o = replace_macros($tpl, [
|
||||
'$entries' => $page['entries'] ?? [],
|
||||
'$offset' => $page['offset'] ?? 0,
|
||||
'$feature_star' => feature_enabled(local_channel(), 'star_posts'),
|
||||
'$feature_file' => feature_enabled(local_channel(), 'filing'),
|
||||
'$file_tags' => $file_tags,
|
||||
'$strings' => [
|
||||
'messages_title' => t('Public and restricted messages'),
|
||||
'direct_messages_title' => t('Direct messages'),
|
||||
'starred_messages_title' => t('Starred messages'),
|
||||
'filed_messages_title' => t('Filed messages'),
|
||||
'notice_messages_title' => t('Notices'),
|
||||
'loading' => t('Loading'),
|
||||
'empty' => t('No messages'),
|
||||
'unseen_count' => t('Unseen'),
|
||||
'filter' => t('Filter by name or address')
|
||||
'filter' => t('Filter by name or address'),
|
||||
'file_filter' => t('Filter by file name')
|
||||
]
|
||||
]);
|
||||
|
||||
@@ -50,6 +65,7 @@ class Messages {
|
||||
$offset = $options['offset'] ?? 0;
|
||||
$type = $options['type'] ?? '';
|
||||
$author = $options['author'] ?? '';
|
||||
$file = $options['file'] ?? '';
|
||||
|
||||
if ($offset == -1) {
|
||||
return;
|
||||
@@ -67,8 +83,9 @@ class Messages {
|
||||
$item_normal_c = str_replace('item.', 'c.', $item_normal);
|
||||
$entries = [];
|
||||
$limit = 30;
|
||||
$order_sql = 'i.created DESC';
|
||||
$dummy_order_sql = '';
|
||||
$author_sql = '';
|
||||
$filter_sql = '';
|
||||
$loadtime = (($offset) ? $_SESSION['messages_loadtime'] : datetime_convert());
|
||||
$vnotify = get_pconfig(local_channel(), 'system', 'vnotify', -1);
|
||||
|
||||
@@ -84,43 +101,55 @@ class Messages {
|
||||
$vnotify_sql_i = " AND i.verb NOT IN ('Dislike', '" . dbesc(ACTIVITY_DISLIKE) . "') ";
|
||||
}
|
||||
|
||||
if($author) {
|
||||
$author_sql = " AND (i.owner_xchan = '" . protect_sprintf(dbesc($author)) . "') ";
|
||||
if($type !== 'filed' && $author) {
|
||||
$filter_sql = " AND (i.owner_xchan = '" . protect_sprintf(dbesc($author)) . "') ";
|
||||
}
|
||||
|
||||
if($type === 'filed' && $file) {
|
||||
$filed_filter_sql = " AND (term.term = '" . protect_sprintf(dbesc($file)) . "') ";
|
||||
}
|
||||
|
||||
switch($type) {
|
||||
case 'direct':
|
||||
$type_sql = ' AND i.item_private = 2 ';
|
||||
$type_sql = ' AND i.item_private = 2 AND i.item_thread_top = 1 ';
|
||||
// $dummy_order_sql has no other meaning but to trick
|
||||
// some mysql backends into using the right index.
|
||||
$dummy_order_sql = ', i.received DESC ';
|
||||
break;
|
||||
case 'starred':
|
||||
$type_sql = ' AND i.item_starred = 1 ';
|
||||
$type_sql = ' AND i.item_starred = 1 AND i.item_thread_top = 1 ';
|
||||
break;
|
||||
case 'filed':
|
||||
$type_sql = ' AND i.id IN (SELECT term.oid FROM term WHERE term.ttype = ' . TERM_FILE . ' AND term.uid = i.uid ' . $filed_filter_sql . ')';
|
||||
break;
|
||||
default:
|
||||
$type_sql = ' AND i.item_private IN (0, 1) ';
|
||||
$type_sql = ' AND i.item_private IN (0, 1) AND i.item_thread_top = 1 ';
|
||||
}
|
||||
|
||||
$items = q("SELECT *,
|
||||
(SELECT count(*) FROM item c WHERE c.uid = %d AND c.parent = i.parent AND c.item_unseen = 1 AND c.item_thread_top = 0 $item_normal_c $vnotify_sql_c) AS unseen_count
|
||||
FROM item i WHERE i.uid = %d
|
||||
FROM item i
|
||||
WHERE i.uid = %d
|
||||
AND i.created <= '%s'
|
||||
$type_sql
|
||||
AND i.item_thread_top = 1
|
||||
$author_sql
|
||||
$filter_sql
|
||||
$item_normal_i
|
||||
ORDER BY i.created DESC $dummy_order_sql
|
||||
ORDER BY $order_sql $dummy_order_sql
|
||||
LIMIT $limit OFFSET $offset",
|
||||
intval(local_channel()),
|
||||
intval(local_channel()),
|
||||
dbescdate($loadtime)
|
||||
);
|
||||
|
||||
if ($type === 'filed') {
|
||||
$items = fetch_post_tags($items);
|
||||
}
|
||||
|
||||
xchan_query($items, false);
|
||||
|
||||
$i = 0;
|
||||
$entries = [];
|
||||
$ids = [];
|
||||
|
||||
foreach($items as $item) {
|
||||
|
||||
@@ -149,6 +178,16 @@ class Messages {
|
||||
$info .= t('via') . ' ' . $item['source']['xchan_name'];
|
||||
}
|
||||
|
||||
if ($type == 'filed') {
|
||||
$info = '';
|
||||
foreach ($item['term'] as $t) {
|
||||
if ($t['ttype'] !== TERM_FILE) {
|
||||
continue;
|
||||
}
|
||||
$info .= '<span class="badge rounded-pill bg-danger me-1"><i class="bi bi-folder"></i> ' . $t['term'] . '</span>';
|
||||
}
|
||||
}
|
||||
|
||||
$summary = $item['title'];
|
||||
if (!$summary) {
|
||||
$summary = $item['summary'];
|
||||
|
||||
@@ -170,11 +170,19 @@ function get_features($filtered = true, $level = (-1)) {
|
||||
[
|
||||
'star_posts',
|
||||
t('Star Posts'),
|
||||
t('Ability to mark special posts with a star indicator'),
|
||||
t('Ability to mark conversations with a star'),
|
||||
false,
|
||||
Config::Get('feature_lock','star_posts'),
|
||||
],
|
||||
|
||||
[
|
||||
'filing',
|
||||
t('File Posts'),
|
||||
t('Ability to file posts'),
|
||||
false,
|
||||
Config::Get('feature_lock','filing'),
|
||||
],
|
||||
|
||||
[
|
||||
'reply_to',
|
||||
t('Reply on comment'),
|
||||
|
||||
@@ -212,7 +212,7 @@ $(document).ready(function() {
|
||||
prepareLiveUpdate(b64mid, notify_id);
|
||||
$('.message').removeClass('active');
|
||||
$('[data-b64mid="' + b64mid + '"].message').addClass('active');
|
||||
$('[data-b64mid="' + b64mid + '"].message .badge').remove();
|
||||
$('[data-b64mid="' + b64mid + '"].message .unseen_count').remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,13 @@
|
||||
</a>
|
||||
</li>
|
||||
{{/if}}
|
||||
{{if $feature_file}}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link messages-type" href="#" title="{{$strings.filed_messages_title}}" data-messages_type="filed">
|
||||
<i class="bi bi-folder generic-icons"></i>
|
||||
</a>
|
||||
</li>
|
||||
{{/if}}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link messages-type" href="#" title="{{$strings.notice_messages_title}}" data-messages_type="notification">
|
||||
<i class="bi bi-exclamation-circle generic-icons"></i>
|
||||
@@ -53,6 +60,18 @@
|
||||
<input id="messages-author" type="text" class="form-control form-control-sm" placeholder="{{$strings.filter}}">
|
||||
<div id="messages-author-input-clear" class="text-muted notifications-textinput-clear d-none"><i class="bi bi-x-lg"></i></div>
|
||||
</div>
|
||||
{{if $feature_file}}
|
||||
<div id="messages-file-container" class="list-group-item notifications-textinput d-none">
|
||||
<div class="text-muted notifications-textinput-filter"><i class="bi bi-filter"></i></div>
|
||||
<input id="messages-file" type="text" list="data_filetags" class="form-control form-control-sm" placeholder="{{$strings.file_filter}}">
|
||||
<datalist id="data_filetags">
|
||||
{{foreach $file_tags as $opt=>$val}}
|
||||
<option value="{{$val}}">
|
||||
{{/foreach}}
|
||||
</datalist>
|
||||
<div id="messages-file-input-clear" class="text-muted notifications-textinput-clear d-none"><i class="bi bi-x-lg"></i></div>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{foreach $entries as $e}}
|
||||
<a href="{{$e.href}}" class="list-group-item list-group-item-action message" data-b64mid="{{$e.b64mid}}">
|
||||
<div class="mb-2 align-middle">
|
||||
@@ -75,7 +94,7 @@
|
||||
</div>
|
||||
<small class="opacity-75">{{$e.info}}</small>
|
||||
{{if $e.unseen_count}}
|
||||
<span class="badge bg-transparent border border-{{$e.unseen_class}} text-{{$e.unseen_class}} rounded-pill position-absolute bottom-0 end-0 m-2" title="{{$strings.unseen_count}}">{{$e.unseen_count}}</span>
|
||||
<span class="badge bg-transparent border border-{{$e.unseen_class}} text-{{$e.unseen_class}} rounded-pill position-absolute bottom-0 end-0 m-2 unseen_count" title="{{$strings.unseen_count}}">{{$e.unseen_count}}</span>
|
||||
{{/if}}
|
||||
</a>
|
||||
{{/foreach}}
|
||||
@@ -94,6 +113,7 @@
|
||||
let author_hash;
|
||||
let author_url;
|
||||
let author;
|
||||
let file;
|
||||
|
||||
$(document).ready(function () {
|
||||
$('.messages-timeago').timeago();
|
||||
@@ -109,6 +129,7 @@
|
||||
$('#messages-container .message').remove();
|
||||
$('#messages-author-container').addClass('active sticky-top');
|
||||
$('#messages-author-input-clear').removeClass('d-none');
|
||||
|
||||
author_hash = data.xid;
|
||||
author_url = data.url;
|
||||
author = messages_type === 'notification' ? author_url : author_hash;
|
||||
@@ -116,14 +137,27 @@
|
||||
get_messages_page();
|
||||
});
|
||||
|
||||
$(document).on('click', '#messages-author-input-clear', function() {
|
||||
$('#messages-author').val('');
|
||||
$("#messages-file").on('change', function(data) {
|
||||
file = $("#messages-file").val();
|
||||
|
||||
$('#messages-container .message').remove();
|
||||
$('#messages-file-container').addClass('active sticky-top');
|
||||
$('#messages-file-input-clear').removeClass('d-none');
|
||||
|
||||
messages_offset = 0;
|
||||
get_messages_page();
|
||||
});
|
||||
|
||||
$(document).on('click', '#messages-author-input-clear, #messages-file-input-clear', function() {
|
||||
$('#messages-author, #messages-file').val('');
|
||||
$("#messages-author").attr('placeholder', '{{$strings.filter}}');
|
||||
$("#messages-file").attr('placeholder', '{{$strings.file_filter}}');
|
||||
|
||||
$('#messages-author-container').removeClass('active sticky-top');
|
||||
$('#messages-author-input-clear').addClass('d-none');
|
||||
$('#messages-container .message').remove();
|
||||
author = '';
|
||||
file = '';
|
||||
author_hash = '';
|
||||
author_url = '';
|
||||
messages_offset = 0;
|
||||
@@ -145,6 +179,16 @@
|
||||
messages_offset = 0;
|
||||
messages_type = $(this).data('messages_type');
|
||||
author = messages_type === 'notification' ? author_url : author_hash;
|
||||
|
||||
if (messages_type === 'filed') {
|
||||
$('#messages-author-container').addClass('d-none');
|
||||
$('#messages-file-container').removeClass('d-none');
|
||||
}
|
||||
else {
|
||||
$('#messages-author-container').removeClass('d-none');
|
||||
$('#messages-file-container').addClass('d-none');
|
||||
}
|
||||
|
||||
$('#messages-container .message').remove();
|
||||
get_messages_page();
|
||||
});
|
||||
@@ -167,7 +211,8 @@
|
||||
data: {
|
||||
offset: messages_offset,
|
||||
type: messages_type,
|
||||
author: author
|
||||
author: author,
|
||||
file: file
|
||||
}
|
||||
}).done(function(obj) {
|
||||
get_messages_page_active = false;
|
||||
@@ -185,7 +230,7 @@
|
||||
e.author_addr,
|
||||
e.href,
|
||||
e.icon,
|
||||
e.unseen_count ? '<span class="badge bg-transparent border border-' + e.unseen_class + ' text-' + e.unseen_class + ' rounded-pill position-absolute bottom-0 end-0 m-2" title="{{$strings.unseen_count}}">' + e.unseen_count + '</span>' : '',
|
||||
e.unseen_count ? '<span class="badge bg-transparent border border-' + e.unseen_class + ' text-' + e.unseen_class + ' rounded-pill position-absolute bottom-0 end-0 m-2 unseen_count" title="{{$strings.unseen_count}}">' + e.unseen_count + '</span>' : '',
|
||||
e.author_img
|
||||
);
|
||||
$('#messages-loading').before(html);
|
||||
|
||||
Reference in New Issue
Block a user