]> git.mxchange.org Git - friendica.git/commitdiff
Forum posts with "!" are now created directly as forum post
authorMichael <heluecht@pirati.ca>
Thu, 2 Nov 2017 20:15:14 +0000 (20:15 +0000)
committerMichael <heluecht@pirati.ca>
Thu, 2 Nov 2017 20:15:14 +0000 (20:15 +0000)
include/dfrn.php
include/notifier.php
mod/item.php

index 40149eec2b7dc78bb27896a223bfe456ba37de41..728a043ccd40e2279451cda17ff714c6561afe80 100644 (file)
@@ -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"]);
index 17eb578d18a0b80d485a2e36ea506cf0987f1215..e66fa9b0b0b2cf337b1b8e94bdb2de9028868c41 100644 (file)
@@ -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;
index 77f927223b084d444942f4580d07cbd8b0afe16e..883e0290dba12e63fd1d1862caf0774a430942b6 100644 (file)
@@ -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'],