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
*
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"]);
$private_forum = false;
$only_to_forum = false;
+ $forum_contact = array();
if (count($tags)) {
foreach ($tags as $tag) {
}
// 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 = '';
$wall = 0;
- if ($post_type === 'wall' || $post_type === 'wall-comment') {
+ if (($post_type === 'wall' || $post_type === 'wall-comment') && !count($forum_contact)) {
$wall = 1;
}
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'],