*/
use Friendica\App;
+use Friendica\Core\Config;
use Friendica\Core\System;
+use Friendica\Core\Worker;
+use Friendica\Database\DBM;
+use Friendica\Model\GlobalContact;
+use Friendica\Network\Probe;
+use Friendica\Protocol\Diaspora;
require_once 'include/crypto.php';
require_once 'include/enotify.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) {
}
// 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']) {
}
}
- 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);
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"]);
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;
}
intval($profile_uid),
intval($post_id)
);
- if (! dbm::is_result($i)) {
+ if (! DBM::is_result($i)) {
killme();
}
$orig_post = $i[0];
$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];
}
// 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;
}
}
}
}
- if (dbm::is_result($r)) {
+ if (DBM::is_result($r)) {
$author = $r[0];
$contact_id = $author['id'];
}
$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];
}
}
intval($profile_uid)
);
- if (! dbm::is_result($r)) {
+ if (! DBM::is_result($r)) {
continue;
}
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),
$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)) {
- $toplevel_contact = '@' . $toplevel_parent[0]['nick'] . '+' . $toplevel_parent[0]['id'];
+ if (DBM::is_result($toplevel_parent)) {
+ if (!empty($toplevel_parent[0]['addr'])) {
+ $toplevel_contact = '@' . $toplevel_parent[0]['addr'];
+ } else {
+ $toplevel_contact = '@' . $toplevel_parent[0]['nick'] . '+' . $toplevel_parent[0]['id'];
+ }
} else {
$toplevel_parent = q("SELECT `author-link`, `author-name` FROM `item` WHERE `id` = `parent` AND `parent` = %d", intval($parent));
$toplevel_contact = '@[url=' . $toplevel_parent[0]['author-link'] . ']' . $toplevel_parent[0]['author-name'] . '[/url]';
$tagged = array();
$private_forum = false;
+ $only_to_forum = false;
+ $forum_contact = array();
if (count($tags)) {
foreach ($tags as $tag) {
- if (strpos($tag, '#') === 0) {
+ $tag_type = substr($tag, 0, 1);
+
+ if ($tag_type == '#') {
continue;
}
if ($success['replaced']) {
$tagged[] = $tag;
}
- if (is_array($success['contact']) && intval($success['contact']['prv'])) {
- $private_forum = true;
+ // 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 = $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)) {
- // 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 = '';
intval($profile_uid),
intval($mtch)
);
- if (dbm::is_result($r)) {
+ if (DBM::is_result($r)) {
if (strlen($attachments)) {
$attachments .= ',';
}
$wall = 0;
- if ($post_type === 'wall' || $post_type === 'wall-comment') {
+ if (($post_type === 'wall' || $post_type === 'wall-comment') && !count($forum_contact)) {
$wall = 1;
}
$datarray['postopts'] = $postopts;
$datarray['origin'] = $origin;
$datarray['moderated'] = $allow_moderated;
- $datarray['gcontact-id'] = get_gcontact_id(array("url" => $datarray['author-link'], "network" => $datarray['network'],
+ $datarray['gcontact-id'] = GlobalContact::getId(array("url" => $datarray['author-link'], "network" => $datarray['network'],
"photo" => $datarray['author-avatar'], "name" => $datarray['author-name']));
$datarray['object'] = $object;
$datarray['self'] = $self;
// $datarray['prvnets'] = $user['prvnets'];
+ // This triggers posts via API and the mirror functions
+ $datarray['api_source'] = $api_source;
+
$datarray['parent-uri'] = ($parent == 0) ? $uri : $parent_item['uri'];
$datarray['plink'] = System::baseUrl() . '/display/' . urlencode($datarray['guid']);
$datarray['last-child'] = 1;
$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'];
}
// 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);
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.');
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'],
// 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');
*
* @return boolean true if replaced, false if not replaced
*/
-function handle_tag(App $a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $network = "") {
- require_once 'include/socgraph.php';
-
+function handle_tag(App $a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $network = "")
+{
$replaced = false;
$r = null;
+ $tag_type = '@';
//is it a person tag?
- if (strpos($tag, '@') === 0) {
+ if ((strpos($tag, '@') === 0) || (strpos($tag, '!') === 0)) {
+ $tag_type = substr($tag, 0, 1);
//is it already replaced?
if (strpos($tag, '[url=')) {
//append tag to str_tags
}
// Checking for the alias that is used for OStatus
- $pattern = "/@\[url\=(.*?)\](.*?)\[\/url\]/ism";
+ $pattern = "/[@!]\[url\=(.*?)\](.*?)\[\/url\]/ism";
if (preg_match($pattern, $tag, $matches)) {
$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"] != "") {
// 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",
);
// 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",
}
// 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",
}
// 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",
);
}
- 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);
+ GlobalContact::update($probed);
$r = q("SELECT `url`, `name`, `nick`, `network`, `alias`, `notify` FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1",
dbesc(normalise_link($probed["url"])));
}
}
// 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),
);
//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),
}
// 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),
}
// 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)
}
}
- if (dbm::is_result($r)) {
+ if (DBM::is_result($r)) {
if (strlen($inform) && (isset($r[0]["notify"]) || isset($r[0]["id"]))) {
$inform .= ',';
}
//if there is an url for this persons profile
if (isset($profile) && ($newname != "")) {
-
$replaced = true;
// create profile link
$profile = str_replace(',', '%2c', $profile);
- $newtag = '@[url=' . $profile . ']' . $newname . '[/url]';
- $body = str_replace('@' . $name, $newtag, $body);
+ $newtag = $tag_type.'[url=' . $profile . ']' . $newname . '[/url]';
+ $body = str_replace($tag_type . $name, $newtag, $body);
// append tag to str_tags
if (! stristr($str_tags, $newtag)) {
if (strlen($str_tags)) {