aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzotlabs <mike@macgirvin.com>2020-01-31 12:51:23 -0800
committerzotlabs <mike@macgirvin.com>2020-01-31 12:51:23 -0800
commitfc9e6d289acf30f89da0051a90cbf16f0bc006fb (patch)
treee84505932caf4a91c31dee826b63d8df2bcae25b
parent6838342d625236a05695d73efd99f1afdab67d96 (diff)
downloadvolse-hubzilla-fc9e6d289acf30f89da0051a90cbf16f0bc006fb.tar.gz
volse-hubzilla-fc9e6d289acf30f89da0051a90cbf16f0bc006fb.tar.bz2
volse-hubzilla-fc9e6d289acf30f89da0051a90cbf16f0bc006fb.zip
missing piece of poll code
-rw-r--r--Zotlabs/Lib/Activity.php67
-rwxr-xr-xinclude/items.php6
2 files changed, 73 insertions, 0 deletions
diff --git a/Zotlabs/Lib/Activity.php b/Zotlabs/Lib/Activity.php
index 66b1ee4b8..edc65d8e9 100644
--- a/Zotlabs/Lib/Activity.php
+++ b/Zotlabs/Lib/Activity.php
@@ -1615,6 +1615,73 @@ class Activity {
}
+
+ static function update_poll($item,$mid,$content) {
+ $multi = false;
+ if (! $item) {
+ return false;
+ }
+
+ $o = json_decode($item['obj'],true);
+ if ($o && array_key_exists('anyOf',$o)) {
+ $multi = true;
+ }
+ $answer_found = false;
+ $found = false;
+ if ($multi) {
+ for ($c = 0; $c < count($o['anyOf']); $c ++) {
+ if ($o['anyOf'][$c]['name'] === $content) {
+ $answer_found = true;
+ if (is_array($o['anyOf'][$c]['replies'])) {
+ foreach($o['anyOf'][$c]['replies'] as $reply) {
+ if(array_key_exists('id',$reply) && $reply['id'] === $mid) {
+ $found = true;
+ }
+ }
+ }
+
+ if (! $found) {
+ $o['anyOf'][$c]['replies']['totalItems'] ++;
+ $o['anyOf'][$c]['replies']['items'][] = [ 'id' => $mid, 'type' => 'Note' ];
+ }
+ }
+ }
+ }
+ else {
+ for ($c = 0; $c < count($o['oneOf']); $c ++) {
+ if ($o['oneOf'][$c]['name'] === $content) {
+ $answer_found = true;
+ if (is_array($o['oneOf'][$c]['replies'])) {
+ foreach($o['oneOf'][$c]['replies'] as $reply) {
+ if(array_key_exists('id',$reply) && $reply['id'] === $mid) {
+ $found = true;
+ }
+ }
+ }
+
+ if (! $found) {
+ $o['oneOf'][$c]['replies']['totalItems'] ++;
+ $o['oneOf'][$c]['replies']['items'][] = [ 'id' => $mid, 'type' => 'Note' ];
+ }
+ }
+ }
+ }
+ logger('updated_poll: ' . print_r($o,true),LOGGER_DATA);
+ if ($answer_found && ! $found) {
+ $x = q("update item set obj = '%s', edited = '%s' where id = %d",
+ dbesc(json_encode($o)),
+ dbesc(datetime_convert()),
+ intval($item['id'])
+ );
+ Master::Summon( [ 'Notifier', 'wall-new', $item['id'] ] );
+ return true;
+ }
+
+ return false;
+ }
+
+
+
static function decode_note($act) {
$response_activity = false;
diff --git a/include/items.php b/include/items.php
index 9f90b2f3b..c5743e91c 100755
--- a/include/items.php
+++ b/include/items.php
@@ -9,6 +9,7 @@ use Zotlabs\Lib\MarkdownSoap;
use Zotlabs\Lib\MessageFilter;
use Zotlabs\Lib\ThreadListener;
use Zotlabs\Lib\IConfig;
+use Zotlabs\Lib\Activity;
use Zotlabs\Access\PermissionLimits;
use Zotlabs\Access\AccessList;
use Zotlabs\Daemon\Master;
@@ -1947,6 +1948,11 @@ function item_store($arr, $allow_exec = false, $deliver = true) {
if(intval($r[0]['item_uplink']) && (! $r[0]['item_private']))
$arr['item_private'] = 0;
+
+ if(in_array($arr['verb'], ['Note','Answer']) && $arr['obj_type'] === 'Question' && intval($r[0]['item_wall'])) {
+ Activity::update_poll($r[0],$arr['mid'],$arr['title']);
+ }
+
}
else {
logger('item_store: item parent was not found - ignoring item');