diff options
-rw-r--r-- | Zotlabs/Lib/ThreadStream.php | 4 | ||||
-rw-r--r-- | Zotlabs/Module/Hq.php | 72 | ||||
-rw-r--r-- | Zotlabs/Module/Ping.php | 2 | ||||
-rw-r--r-- | Zotlabs/Module/Update_hq.php | 31 | ||||
-rw-r--r-- | Zotlabs/Widget/Hq_controls.php | 26 | ||||
-rw-r--r-- | include/conversation.php | 6 | ||||
-rw-r--r-- | view/js/main.js | 1 | ||||
-rw-r--r-- | view/js/mod_hq.js | 12 | ||||
-rw-r--r-- | view/pdl/mod_hq.pdl | 3 | ||||
-rwxr-xr-x | view/tpl/hq_controls.tpl | 8 | ||||
-rw-r--r-- | view/tpl/notifications_widget.tpl | 2 |
11 files changed, 138 insertions, 29 deletions
diff --git a/Zotlabs/Lib/ThreadStream.php b/Zotlabs/Lib/ThreadStream.php index 9eebb929c..bdd2e9657 100644 --- a/Zotlabs/Lib/ThreadStream.php +++ b/Zotlabs/Lib/ThreadStream.php @@ -54,6 +54,10 @@ class ThreadStream { $this->profile_owner = local_channel(); $this->writable = true; break; + case 'hq': + $this->profile_owner = local_channel(); + $this->writable = true; + break; case 'channel': $this->profile_owner = \App::$profile['profile_uid']; $this->writable = perm_is_allowed($this->profile_owner,$ob_hash,'post_comments'); diff --git a/Zotlabs/Module/Hq.php b/Zotlabs/Module/Hq.php index 78087c0f9..c5b3ced3e 100644 --- a/Zotlabs/Module/Hq.php +++ b/Zotlabs/Module/Hq.php @@ -43,10 +43,9 @@ class Hq extends \Zotlabs\Web\Controller { $item_normal_update = item_normal_update(); if(! $item_hash) { - $r = q("SELECT mid FROM item WHERE uid = %d - AND item_thread_top = 1 + AND mid = parent_mid ORDER BY created DESC limit 1", intval(local_channel()) @@ -61,15 +60,16 @@ class Hq extends \Zotlabs\Web\Controller { $item_hash = 'b64.' . base64url_encode($r[0]['mid']); } + if(strpos($item_hash,'b64.') === 0) $decoded = @base64url_decode(substr($item_hash,4)); + if($decoded) $item_hash = $decoded; $updateable = false; if(! $update) { - $channel = \App::get_channel(); $channel_acl = [ @@ -91,7 +91,7 @@ class Hq extends \Zotlabs\Web\Controller { 'bang' => '', 'visitor' => true, 'profile_uid' => local_channel(), - 'return_path' => 'channel/' . $channel['channel_address'], + 'return_path' => 'hq', 'expanded' => true, 'editor_autocomplete' => true, 'bbco_autocomplete' => 'bbcode', @@ -125,32 +125,34 @@ class Hq extends \Zotlabs\Web\Controller { if($update && $_SESSION['loadtime']) $simple_update = " AND (( item_unseen = 1 AND item.changed > '" . datetime_convert('UTC','UTC',$_SESSION['loadtime']) . "' ) OR item.changed > '" . datetime_convert('UTC','UTC',$_SESSION['loadtime']) . "' ) "; - if($load) - $simple_update = ''; if($static && $simple_update) $simple_update .= " and item_thread_top = 0 and author_xchan = '" . protect_sprintf(get_observer_hash()) . "' "; + + $sys = get_sys_channel(); + $sql_extra = item_permissions_sql($sys['channel_id']); if(! $update && ! $load) { + nav_set_selected('HQ'); + $static = ((local_channel()) ? channel_manual_conv_update(local_channel()) : 1); // if the target item is not a post (eg a like) we want to address its thread parent - $mid = ((($target_item['verb'] == ACTIVITY_LIKE) || ($target_item['verb'] == ACTIVITY_DISLIKE)) ? $target_item['thr_parent'] : $target_item['mid']); // if we got a decoded hash we must encode it again before handing to javascript if($decoded) $mid = 'b64.' . base64url_encode($mid); - $o .= '<div id="live-display"></div>' . "\r\n"; + $o .= '<div id="live-hq"></div>' . "\r\n"; $o .= "<script> var profile_uid = " . local_channel() . "; var netargs = '?f='; var profile_page = " . \App::$pager['page'] . "; </script>\r\n"; \App::$page['htmlhead'] .= replace_macros(get_markup_template("build_query.tpl"),[ '$baseurl' => z_root(), - '$pgtype' => 'display', - '$uid' => '0', + '$pgtype' => 'hq', + '$uid' => local_channel(), '$gid' => '0', '$cid' => '0', '$cmin' => '0', @@ -177,45 +179,65 @@ class Hq extends \Zotlabs\Web\Controller { '$net' => '', '$mid' => $mid ]); - } if($load) { $r = null; - $r = q("SELECT item.id as item_id from item + $r = q("SELECT item.id AS item_id FROM item WHERE uid = %d - and mid = '%s' + AND mid = '%s' $item_normal - limit 1", + LIMIT 1", intval(local_channel()), dbesc($target_item['parent_mid']) ); + if($r) { $updateable = true; } + if(!$r) { + $r = q("SELECT item.id AS item_id FROM item + LEFT JOIN abook ON item.author_xchan = abook.abook_xchan + WHERE mid = '%s' AND item.uid = %d $item_normal + AND (abook.abook_blocked = 0 or abook.abook_flags is null) + $sql_extra LIMIT 1", + dbesc($target_item['parent_mid']), + intval($sys['channel_id']) + ); + } } - elseif($update) { $r = null; - $r = q("SELECT item.parent AS item_id from item + $r = q("SELECT item.parent AS item_id FROM item WHERE uid = %d - and parent_mid = '%s' + AND parent_mid = '%s' $item_normal_update $simple_update - limit 1", + LIMIT 1", intval(local_channel()), dbesc($target_item['parent_mid']) ); + if($r) { $updateable = true; } + if(!$r) { + $r = q("SELECT item.parent AS item_id FROM item + LEFT JOIN abook ON item.author_xchan = abook.abook_xchan + WHERE mid = '%s' AND item.uid = %d $item_normal_update $simple_update + AND (abook.abook_blocked = 0 or abook.abook_flags is null) + $sql_extra LIMIT 1", + dbesc($target_item['parent_mid']), + intval($sys['channel_id']) + ); + } + $_SESSION['loadtime'] = datetime_convert(); } - else { $r = []; } @@ -225,11 +247,11 @@ class Hq extends \Zotlabs\Web\Controller { if($parents_str) { $items = q("SELECT item.*, item.id AS item_id FROM item - WHERE parent in ( %s ) $item_normal ", + WHERE parent IN ( %s ) $item_normal ", dbesc($parents_str) ); - xchan_query($items); + xchan_query($items,true,local_channel()); $items = fetch_post_tags($items,true); $items = conv_sort($items,'created'); } @@ -238,10 +260,10 @@ class Hq extends \Zotlabs\Web\Controller { $items = []; } - $o .= conversation($items, 'display', $update, 'client'); + $o .= conversation($items, 'hq', $update, 'client'); if($updateable) { - $x = q("UPDATE item SET item_unseen = 0 where item_unseen = 1 AND uid = %d and parent = %d ", + $x = q("UPDATE item SET item_unseen = 0 WHERE item_unseen = 1 AND uid = %d AND parent = %d ", intval(local_channel()), intval($r[0]['item_id']) ); @@ -249,10 +271,6 @@ class Hq extends \Zotlabs\Web\Controller { $o .= '<div id="content-complete"></div>'; - if(($update && $load) && (! $items)) { - notice( t('Something went wrong.') . EOL ); - } - return $o; } diff --git a/Zotlabs/Module/Ping.php b/Zotlabs/Module/Ping.php index 406e554d1..84f9d2a21 100644 --- a/Zotlabs/Module/Ping.php +++ b/Zotlabs/Module/Ping.php @@ -496,7 +496,7 @@ class Ping extends \Zotlabs\Web\Controller { $r = q("SELECT id, item_wall FROM item WHERE item_unseen = 1 and uid = %d $item_normal - AND author_xchan != '%s' $sql_extra ", + AND author_xchan != '%s'", intval(local_channel()), dbesc($ob_hash) ); diff --git a/Zotlabs/Module/Update_hq.php b/Zotlabs/Module/Update_hq.php new file mode 100644 index 000000000..bb1495c64 --- /dev/null +++ b/Zotlabs/Module/Update_hq.php @@ -0,0 +1,31 @@ +<?php +namespace Zotlabs\Module; + +// See update_profile.php for documentation + +require_once('include/group.php'); + + +class Update_hq extends \Zotlabs\Web\Controller { + + function get() { + + $profile_uid = intval($_GET['p']); + + $load = (((argc() > 1) && (argv(1) == 'load')) ? 1 : 0); + header("Content-type: text/html"); + echo "<!DOCTYPE html><html><body>\r\n"; + echo (($_GET['msie'] == 1) ? '<div>' : '<section>'); + + $mod = new Hq(); + $text = $mod->get($profile_uid, $load); + + echo str_replace("\t",' ',$text); + echo (($_GET['msie'] == 1) ? '</div>' : '</section>'); + echo "</body></html>\r\n"; + + killme(); + + } + +} diff --git a/Zotlabs/Widget/Hq_controls.php b/Zotlabs/Widget/Hq_controls.php new file mode 100644 index 000000000..0caa54a1a --- /dev/null +++ b/Zotlabs/Widget/Hq_controls.php @@ -0,0 +1,26 @@ +<?php + +namespace Zotlabs\Widget; + +class Hq_controls { + + function widget($arr) { + + if (! local_channel()) + return; + + return replace_macros(get_markup_template('hq_controls.tpl'), + [ + '$title' => t('HQ Control Panel'), + '$menu' => [ + 'create' => [ + 'label' => t('Create a new post'), + 'id' => 'jot-toggle', + 'href' => '#', + 'class' => '' + ] + ] + ] + ); + } +} diff --git a/include/conversation.php b/include/conversation.php index 63d503177..70a38ee8e 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -513,6 +513,12 @@ function conversation($items, $mode, $update, $page_mode = 'traditional', $prepa } } + elseif ($mode === 'hq') { + $profile_owner = local_channel(); + $page_writeable = true; + $live_update_div = '<div id="live-hq"></div>' . "\r\n"; + } + elseif ($mode === 'channel') { $profile_owner = App::$profile['profile_uid']; $page_writeable = ($profile_owner == local_channel()); diff --git a/view/js/main.js b/view/js/main.js index c39d6c84c..1738ca7e9 100644 --- a/view/js/main.js +++ b/view/js/main.js @@ -437,6 +437,7 @@ function NavUpdate() { if($('#live-channel').length) { src = 'channel'; liveUpdate(); } if($('#live-pubstream').length) { src = 'pubstream'; liveUpdate(); } if($('#live-display').length) { src = 'display'; liveUpdate(); } + if($('#live-hq').length) { src = 'hq'; liveUpdate(); } if($('#live-search').length) { src = 'search'; liveUpdate(); } // if($('#live-cards').length) { src = 'cards'; liveUpdate(); } // if($('#live-articles').length) { src = 'articles'; liveUpdate(); } diff --git a/view/js/mod_hq.js b/view/js/mod_hq.js index 8bbd5e3ad..3ce5f1ca6 100644 --- a/view/js/mod_hq.js +++ b/view/js/mod_hq.js @@ -1,3 +1,15 @@ +$(document).on('click', '#jot-toggle', function(e) { + e.preventDefault(); + e.stopPropagation(); + + $(this).toggleClass('active'); + $(window).scrollTop(0); + $('#jot-popup').toggle(); + $('#profile-jot-text').focus(); + +}); + + function hqLiveUpdate(notify_id) { if(typeof profile_uid === 'undefined') profile_uid = false; /* Should probably be unified with channelId defined in head.tpl */ diff --git a/view/pdl/mod_hq.pdl b/view/pdl/mod_hq.pdl index e657fa88b..450fcb9a7 100644 --- a/view/pdl/mod_hq.pdl +++ b/view/pdl/mod_hq.pdl @@ -1,3 +1,6 @@ +[region=aside] +[widget=hq_controls][/widget] +[/region] [region=right_aside] [widget=notifications][/widget] [/region] diff --git a/view/tpl/hq_controls.tpl b/view/tpl/hq_controls.tpl new file mode 100755 index 000000000..d7f6d436f --- /dev/null +++ b/view/tpl/hq_controls.tpl @@ -0,0 +1,8 @@ +<div class="widget"> + <h3>{{$title}}</h3> + <ul class="nav nav-pills flex-column"> + {{foreach $menu as $m}} + <li class="nav-item"><a href="{{$m.href}}" id="{{$m.id}}" class="nav-link{{if $m.class}} {{$m.class}}{{/if}}">{{$m.label}}</a></li> + {{/foreach}} + </ul> +</div> diff --git a/view/tpl/notifications_widget.tpl b/view/tpl/notifications_widget.tpl index 8ab9a79a0..eeb2011cd 100644 --- a/view/tpl/notifications_widget.tpl +++ b/view/tpl/notifications_widget.tpl @@ -36,7 +36,7 @@ {{/if}} {{if $module == 'hq'}} - if(b64mid !== 'undefined' && path !== 'pubstre') { + if(b64mid !== 'undefined') { {{else}} if(path === 'display' && b64mid) { {{/if}} |