X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=mod%2Fitem.php;h=587bd90cedfab81203ed028c5880d490dc53c635;hb=9e99066fd70a9dd9a291a523afba1a390f0e3a0b;hp=77f927223b084d444942f4580d07cbd8b0afe16e;hpb=82321114abb1339837d05ce119be45bef3c06595;p=friendica.git diff --git a/mod/item.php b/mod/item.php index 77f927223b..587bd90ced 100644 --- a/mod/item.php +++ b/mod/item.php @@ -16,7 +16,12 @@ */ use Friendica\App; +use Friendica\Core\Config; use Friendica\Core\System; +use Friendica\Core\Worker; +use Friendica\Database\DBM; +use Friendica\Network\Probe; +use Friendica\Protocol\Diaspora; require_once 'include/crypto.php'; require_once 'include/enotify.php'; @@ -26,8 +31,6 @@ require_once 'include/files.php'; require_once 'include/threads.php'; require_once 'include/text.php'; require_once 'include/items.php'; -require_once 'include/probe.php'; -require_once 'include/diaspora.php'; require_once 'include/Contact.php'; function item_post(App $a) { @@ -105,7 +108,7 @@ function item_post(App $a) { } // if this isn't the real parent of the conversation, find it - if (dbm::is_result($r)) { + if (DBM::is_result($r)) { $parid = $r[0]['parent']; $parent_uri = $r[0]['uri']; if ($r[0]['id'] != $r[0]['parent']) { @@ -115,7 +118,7 @@ function item_post(App $a) { } } - if (! dbm::is_result($r)) { + if (! DBM::is_result($r)) { notice( t('Unable to locate original post.') . EOL); if (x($_REQUEST, 'return')) { goaway($return_path); @@ -134,18 +137,18 @@ function item_post(App $a) { intval($parent_item['contact-id']), intval($uid) ); - if (dbm::is_result($r)) { + if (DBM::is_result($r)) { $parent_contact = $r[0]; } // If the contact id doesn't fit with the contact, then set the contact to null $thrparent = q("SELECT `author-link`, `network` FROM `item` WHERE `uri` = '%s' LIMIT 1", dbesc($thr_parent)); - if (dbm::is_result($thrparent) && ($thrparent[0]["network"] === NETWORK_OSTATUS) + if (DBM::is_result($thrparent) && ($thrparent[0]["network"] === NETWORK_OSTATUS) && (normalise_link($parent_contact["url"]) != normalise_link($thrparent[0]["author-link"]))) { $parent_contact = get_contact_details_by_url($thrparent[0]["author-link"]); if (!isset($parent_contact["nick"])) { - $probed_contact = probe_url($thrparent[0]["author-link"]); + $probed_contact = Probe::uri($thrparent[0]["author-link"]); if ($probed_contact["network"] != NETWORK_FEED) { $parent_contact = $probed_contact; $parent_contact["nurl"] = normalise_link($probed_contact["url"]); @@ -182,7 +185,7 @@ function item_post(App $a) { intval($profile_uid) ); - if (dbm::is_result($r)) { + if (DBM::is_result($r)) { logger("Message with URI ".$message_id." already exists for user ".$profile_uid, LOGGER_DEBUG); return; } @@ -224,7 +227,7 @@ function item_post(App $a) { intval($profile_uid), intval($post_id) ); - if (! dbm::is_result($i)) { + if (! DBM::is_result($i)) { killme(); } $orig_post = $i[0]; @@ -235,7 +238,7 @@ function item_post(App $a) { $r = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1", intval($profile_uid) ); - if (dbm::is_result($r)) { + if (DBM::is_result($r)) { $user = $r[0]; } @@ -327,13 +330,13 @@ function item_post(App $a) { // if using the API, we won't see pubmail_enable - figure out if it should be set if ($api_source && $profile_uid && $profile_uid == local_user() && (! $private)) { - $mail_disabled = ((function_exists('imap_open') && (! get_config('system', 'imap_disabled'))) ? 0 : 1); + $mail_disabled = ((function_exists('imap_open') && (! Config::get('system', 'imap_disabled'))) ? 0 : 1); if (! $mail_disabled) { /// @TODO Check if only pubmail is loaded, * loads all columns $r = q("SELECT * FROM `mailacct` WHERE `uid` = %d AND `server` != '' LIMIT 1", intval(local_user()) ); - if (dbm::is_result($r) && intval($r[0]['pubmail'])) { + if (DBM::is_result($r) && intval($r[0]['pubmail'])) { $pubmail_enabled = true; } } @@ -390,7 +393,7 @@ function item_post(App $a) { } } - if (dbm::is_result($r)) { + if (DBM::is_result($r)) { $author = $r[0]; $contact_id = $author['id']; } @@ -403,7 +406,7 @@ function item_post(App $a) { $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 1 LIMIT 1", intval($profile_uid) ); - if (dbm::is_result($r)) { + if (DBM::is_result($r)) { $contact_record = $r[0]; } } @@ -454,7 +457,7 @@ function item_post(App $a) { intval($profile_uid) ); - if (! dbm::is_result($r)) { + if (! DBM::is_result($r)) { continue; } @@ -486,7 +489,7 @@ function item_post(App $a) { intval($profile_uid), intval($attach) ); - if (dbm::is_result($r)) { + if (DBM::is_result($r)) { $r = q("UPDATE `attach` SET `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s' WHERE `uid` = %d AND `id` = %d", dbesc($str_contact_allow), @@ -556,7 +559,7 @@ function item_post(App $a) { $toplevel_parent = q("SELECT `contact`.* FROM `contact` INNER JOIN `item` ON `item`.`contact-id` = `contact`.`id` AND `contact`.`url` = `item`.`author-link` WHERE `item`.`id` = `item`.`parent` AND `item`.`parent` = %d", intval($parent)); - if (dbm::is_result($toplevel_parent)) { + if (DBM::is_result($toplevel_parent)) { if (!empty($toplevel_parent[0]['addr'])) { $toplevel_contact = '@' . $toplevel_parent[0]['addr']; } else { @@ -576,6 +579,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 +612,35 @@ 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']; + } elseif (is_array($success['contact']) && $success['contact']['forum'] && + ($str_contact_allow == '<' . $success['contact']['id'] . '>')) { + $private_forum = false; + $only_to_forum = true; + $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 = ''; @@ -631,7 +652,7 @@ function item_post(App $a) { intval($profile_uid), intval($mtch) ); - if (dbm::is_result($r)) { + if (DBM::is_result($r)) { if (strlen($attachments)) { $attachments .= ','; } @@ -643,7 +664,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; } @@ -740,7 +761,7 @@ function item_post(App $a) { $datarray['protocol'] = PROTOCOL_DFRN; $r = dba::fetch_first("SELECT `conversation-uri`, `conversation-href` FROM `conversation` WHERE `item-uri` = ?", $datarray['parent-uri']); - if (dbm::is_result($r)) { + if (DBM::is_result($r)) { if ($r['conversation-uri'] != '') { $datarray['conversation-uri'] = $r['conversation-uri']; } @@ -812,7 +833,7 @@ function item_post(App $a) { // update filetags in pconfig file_tag_update_pconfig($uid,$categories_old,$categories_new,'category'); - proc_run(PRIORITY_HIGH, "include/notifier.php", 'edit_post', $post_id); + Worker::add(PRIORITY_HIGH, "notifier", 'edit_post', $post_id); if ((x($_REQUEST, 'return')) && strlen($return_path)) { logger('return: ' . $return_path); goaway($return_path); @@ -899,7 +920,7 @@ function item_post(App $a) { intval($datarray['visible']) ); - if (dbm::is_result($r)) { + if (DBM::is_result($r)) { $post_id = dba::lastInsertId(); } else { logger('mod_item: unable to create post.'); @@ -971,7 +992,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'], @@ -1042,10 +1063,10 @@ function item_post(App $a) { // We now do it in the background to save some time. // This is important in interactive environments like the frontend or the API. // We don't fork a new process since this is done anyway with the following command - proc_run(array('priority' => PRIORITY_HIGH, 'dont_fork' => true), "include/create_shadowentry.php", $post_id); + Worker::add(array('priority' => PRIORITY_HIGH, 'dont_fork' => true), "create_shadowentry", $post_id); // Call the background process that is delivering the item to the receivers - proc_run(PRIORITY_HIGH, "include/notifier.php", $notify_type, $post_id); + Worker::add(PRIORITY_HIGH, "notifier", $notify_type, $post_id); logger('post_complete'); @@ -1137,14 +1158,14 @@ function handle_tag(App $a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $n $r = q("SELECT `alias`, `name` FROM `contact` WHERE `nurl` = '%s' AND `alias` != '' AND `uid` = 0", normalise_link($matches[1])); - if (!dbm::is_result($r)) { + if (!DBM::is_result($r)) { $r = q("SELECT `alias`, `name` FROM `gcontact` WHERE `nurl` = '%s' AND `alias` != ''", normalise_link($matches[1])); } - if (dbm::is_result($r)) { + if (DBM::is_result($r)) { $data = $r[0]; } else { - $data = probe_url($matches[1]); + $data = Probe::uri($matches[1]); } if ($data["alias"] != "") { @@ -1174,7 +1195,7 @@ function handle_tag(App $a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $n // Is it in format @user@domain.tld or @http://domain.tld/...? // First check the contact table for the address - $r = q("SELECT `id`, `url`, `nick`, `name`, `alias`, `network`, `notify` FROM `contact` + $r = q("SELECT `id`, `url`, `nick`, `name`, `alias`, `network`, `notify`, `forum`, `prv` FROM `contact` WHERE `addr` = '%s' AND `uid` = %d AND (`network` != '%s' OR (`notify` != '' AND `alias` != '')) LIMIT 1", @@ -1184,8 +1205,8 @@ function handle_tag(App $a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $n ); // Then check in the contact table for the url - if (!dbm::is_result($r)) { - $r = q("SELECT `id`, `url`, `nick`, `name`, `alias`, `network`, `notify` FROM `contact` + if (!DBM::is_result($r)) { + $r = q("SELECT `id`, `url`, `nick`, `name`, `alias`, `network`, `notify`, `forum`, `prv` FROM `contact` WHERE `nurl` = '%s' AND `uid` = %d AND (`network` != '%s' OR (`notify` != '' AND `alias` != '')) LIMIT 1", @@ -1196,7 +1217,7 @@ function handle_tag(App $a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $n } // Then check in the global contacts for the address - if (!dbm::is_result($r)) { + if (!DBM::is_result($r)) { $r = q("SELECT `url`, `nick`, `name`, `alias`, `network`, `notify` FROM `gcontact` WHERE `addr` = '%s' AND (`network` != '%s' OR (`notify` != '' AND `alias` != '')) LIMIT 1", @@ -1206,7 +1227,7 @@ function handle_tag(App $a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $n } // Then check in the global contacts for the url - if (!dbm::is_result($r)) { + if (!DBM::is_result($r)) { $r = q("SELECT `url`, `nick`, `name`, `alias`, `network`, `notify` FROM `gcontact` WHERE `nurl` = '%s' AND (`network` != '%s' OR (`notify` != '' AND `alias` != '')) LIMIT 1", @@ -1215,8 +1236,8 @@ function handle_tag(App $a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $n ); } - if (!dbm::is_result($r)) { - $probed = probe_url($name); + if (!DBM::is_result($r)) { + $probed = Probe::uri($name); if ($result['network'] != NETWORK_PHANTOM) { update_gcontact($probed); $r = q("SELECT `url`, `name`, `nick`, `network`, `alias`, `notify` FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1", @@ -1236,7 +1257,7 @@ function handle_tag(App $a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $n } // select someone by attag or nick and the name passed in the current network - if(!dbm::is_result($r) && ($network != "")) + if(!DBM::is_result($r) && ($network != "")) $r = q("SELECT `id`, `url`, `nick`, `name`, `alias`, `network` FROM `contact` WHERE `attag` = '%s' OR `nick` = '%s' AND `network` = '%s' AND `uid` = %d ORDER BY `attag` DESC LIMIT 1", dbesc($name), dbesc($name), @@ -1245,7 +1266,7 @@ function handle_tag(App $a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $n ); //select someone from this user's contacts by name in the current network - if (!dbm::is_result($r) && ($network != "")) { + if (!DBM::is_result($r) && ($network != "")) { $r = q("SELECT `id`, `url`, `nick`, `name`, `alias`, `network` FROM `contact` WHERE `name` = '%s' AND `network` = '%s' AND `uid` = %d LIMIT 1", dbesc($name), dbesc($network), @@ -1254,7 +1275,7 @@ function handle_tag(App $a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $n } // select someone by attag or nick and the name passed in - if(!dbm::is_result($r)) { + if(!DBM::is_result($r)) { $r = q("SELECT `id`, `url`, `nick`, `name`, `alias`, `network` FROM `contact` WHERE `attag` = '%s' OR `nick` = '%s' AND `uid` = %d ORDER BY `attag` DESC LIMIT 1", dbesc($name), dbesc($name), @@ -1263,7 +1284,7 @@ function handle_tag(App $a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $n } // select someone from this user's contacts by name - if(!dbm::is_result($r)) { + if(!DBM::is_result($r)) { $r = q("SELECT `id`, `url`, `nick`, `name`, `alias`, `network` FROM `contact` WHERE `name` = '%s' AND `uid` = %d LIMIT 1", dbesc($name), intval($profile_uid) @@ -1271,7 +1292,7 @@ function handle_tag(App $a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $n } } - if (dbm::is_result($r)) { + if (DBM::is_result($r)) { if (strlen($inform) && (isset($r[0]["notify"]) || isset($r[0]["id"]))) { $inform .= ','; }