diff --git a/include/dfrn.php b/include/dfrn.php index 40149eec2b..728a043ccd 100644 --- a/include/dfrn.php +++ b/include/dfrn.php @@ -1987,81 +1987,6 @@ class dfrn { return true; } - /** - * @brief Check and possibly rewrite a post if it was a dedicated forum post - * - * @param array $item the new item record - * - * @return boolean Was the post be rewritten? - */ - private static function rewriteDedicatedForumPost($item) { - $fields = array('author-link', 'allow_cid', 'contact-id', 'private', 'wall', 'id', 'parent'); - $condition = array('uri' => $item['uri'], 'uid' => $item['uid']); - $existing = dba::select('item', $fields, $condition, array('limit' => 1)); - if (!dbm::is_result($existing)) { - return false; - } - - // Only rewrite if the former post was a private starting post - if (!$existing['wall'] || !$existing['private'] || ($existing['id'] != $existing['parent'])) { - return false; - } - - // Is the post only directed to a single forum? - if ($existing['allow_cid'] != '<'.$item['contact-id'].'>') { - return false; - } - - $fields = array('id'); - $condition = array('uid' => $item['uid'], 'self' => true); - $self = dba::select('contact', $fields, $condition, array('limit' => 1)); - if (!dbm::is_result($self)) { - return false; - } - - // is the original item created by the "self" user. - if ($self['id'] != $existing['contact-id']) { - return false; - } - - $fields = array('forum', 'prv'); - $condition = array('id' => $item['contact-id']); - $contact = dba::select('contact', $fields, $condition, array('limit' => 1)); - if (!dbm::is_result($contact)) { - return false; - } - - // Is the post from a forum? - if (!$contact['forum'] && !$contact['prv']) { - return false; - } - - /// @todo There is an ugly downside of this whole rewrite process: These items loose the ability to be edited by the user. - logger('Item '.$item['uri'].' will be rewritten.', LOGGER_DEBUG); - - $item = store_conversation($item); - unset($fields['dsprsig']); - - // Rewrite to a public post if it comes from a public forum - if ($contact['forum']) { - $item['allow_cid'] = ''; - $item['allow_gid'] = ''; - $item['deny_cid'] = ''; - $item['deny_gid'] = ''; - $item['private'] = false; - } - - $item['wall'] = false; - - $item["owner-id"] = get_contact($item["owner-link"], 0); - - $condition = array('uri' => $item["uri"], 'uid' => $item["uid"]); - dba::update('item', $item, $condition); - - add_shadow_thread($existing['id']); - return true; - } - /** * @brief Updates an item * @@ -2081,14 +2006,12 @@ class dfrn { return false; } - if (!self::rewriteDedicatedForumPost($item)) { - $fields = array('title' => $item["title"], 'body' => $item["body"], - 'tag' => $item["tag"], 'changed' => datetime_convert(), - 'edited' => datetime_convert("UTC", "UTC", $item["edited"])); + $fields = array('title' => $item["title"], 'body' => $item["body"], + 'tag' => $item["tag"], 'changed' => datetime_convert(), + 'edited' => datetime_convert("UTC", "UTC", $item["edited"])); - $condition = array("`uri` = ? AND `uid` IN (0, ?)", $item["uri"], $importer["importer_uid"]); - dba::update('item', $fields, $condition); - } + $condition = array("`uri` = ? AND `uid` IN (0, ?)", $item["uri"], $importer["importer_uid"]); + dba::update('item', $fields, $condition); create_tags_from_itemuri($item["uri"], $importer["importer_uid"]); update_thread_uri($item["uri"], $importer["importer_uid"]); diff --git a/include/notifier.php b/include/notifier.php index 17eb578d18..e66fa9b0b0 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -215,6 +215,9 @@ function notifier_run(&$argv, &$argc){ // Do a PuSH $push_notify = false; + // Deliver directly to a forum, don't PuSH + $direct_forum_delivery = false; + // fill this in with a single salmon slap if applicable $slap = ''; @@ -302,6 +305,7 @@ function notifier_run(&$argv, &$argc){ // Is the post from a forum? if ($contact['forum'] || $contact['prv']) { $relay_to_owner = true; + $direct_forum_delivery = true; } } if ($relay_to_owner) { @@ -337,6 +341,11 @@ function notifier_run(&$argv, &$argc){ } } } + + if ($direct_forum_delivery) { + $push_notify = false; + } + logger("Notify ".$target_item["guid"]." via PuSH: ".($push_notify?"Yes":"No"), LOGGER_DEBUG); } else { $followup = false; diff --git a/mod/item.php b/mod/item.php index 77f927223b..883e0290db 100644 --- a/mod/item.php +++ b/mod/item.php @@ -576,6 +576,7 @@ function item_post(App $a) { $private_forum = false; $only_to_forum = false; + $forum_contact = array(); if (count($tags)) { foreach ($tags as $tag) { @@ -608,18 +609,29 @@ function item_post(App $a) { } // When the forum is private or the forum is addressed with a "!" make the post private if (is_array($success['contact']) && ($success['contact']['prv'] || ($tag_type == '!'))) { - $private_forum = true; + $private_forum = $success['contact']['prv']; $only_to_forum = ($tag_type == '!'); $private_id = $success['contact']['id']; + $forum_contact = $success['contact']; } } } - if ($private_forum && !$parent && (!$private || $only_to_forum)) { - // we tagged a private forum in a top level post and the message was public. - // Restrict it. - $private = 1; - $str_contact_allow = '<' . $private_id . '>'; + if (!$parent && count($forum_contact) && ($private_forum || $only_to_forum)) { + // we tagged a forum in a top level post. Now we change the post + $private = $private_forum; + + $str_group_allow = ''; + $str_contact_deny = ''; + $str_group_deny = ''; + if ($private_forum) { + $str_contact_allow = '<' . $private_id . '>'; + } else { + $str_contact_allow = ''; + } + $contact_id = $private_id; + $contact_record = $forum_contact; + $_REQUEST['origin'] = false; } $attachments = ''; @@ -643,7 +655,7 @@ function item_post(App $a) { $wall = 0; - if ($post_type === 'wall' || $post_type === 'wall-comment') { + if (($post_type === 'wall' || $post_type === 'wall-comment') && !count($forum_contact)) { $wall = 1; } @@ -971,7 +983,7 @@ function item_post(App $a) { intval($parent), intval($post_id)); - if ($contact_record != $author) { + if (($contact_record != $author) && !count($forum_contact)) { notification(array( 'type' => NOTIFY_WALL, 'notify_flags' => $user['notify-flags'],