diff --git a/mod/item.php b/mod/item.php index 1053919b7..868ed54ad 100644 --- a/mod/item.php +++ b/mod/item.php @@ -13,9 +13,6 @@ * * All of these become an "item" which is our basic unit of * information. - * - * Posts that originate externally or do not fall into the above - * posting categories go through item_store() instead of this function. */ use Friendica\App; use Friendica\Core\Config; @@ -24,6 +21,7 @@ use Friendica\Core\Worker; use Friendica\Database\DBM; use Friendica\Model\Contact; use Friendica\Model\GContact; +use Friendica\Model\Item; use Friendica\Network\Probe; use Friendica\Protocol\Diaspora; use Friendica\Protocol\Email; @@ -37,7 +35,6 @@ require_once 'include/text.php'; require_once 'include/items.php'; function item_post(App $a) { - if (!local_user() && !remote_user() && !x($_REQUEST, 'commenter')) { return; } @@ -58,12 +55,12 @@ function item_post(App $a) { // logger('postinput ' . file_get_contents('php://input')); logger('postvars ' . print_r($_REQUEST,true), LOGGER_DATA); - $api_source = ((x($_REQUEST, 'api_source') && $_REQUEST['api_source']) ? true : false); + $api_source = x($_REQUEST, 'api_source') && $_REQUEST['api_source']; $message_id = ((x($_REQUEST, 'message_id') && $api_source) ? strip_tags($_REQUEST['message_id']) : ''); - $return_path = ((x($_REQUEST, 'return')) ? $_REQUEST['return'] : ''); - $preview = ((x($_REQUEST, 'preview')) ? intval($_REQUEST['preview']) : 0); + $return_path = (x($_REQUEST, 'return') ? $_REQUEST['return'] : ''); + $preview = (x($_REQUEST, 'preview') ? intval($_REQUEST['preview']) : 0); /* * Check for doubly-submitted posts, and reject duplicates @@ -94,7 +91,7 @@ function item_post(App $a) { $objecttype = ACTIVITY_OBJ_COMMENT; - if (! x($_REQUEST, 'type')) { + if (!x($_REQUEST, 'type')) { $_REQUEST['type'] = 'net-comment'; } @@ -122,7 +119,7 @@ function item_post(App $a) { } if (!DBM::is_result($r)) { - notice( t('Unable to locate original post.') . EOL); + notice(t('Unable to locate original post.') . EOL); if (x($_REQUEST, 'return')) { goaway($return_path); } @@ -132,7 +129,6 @@ function item_post(App $a) { $parent = $r[0]['id']; // multi-level threading - preserve the info but re-parent to our single level threading - //if(($parid) && ($parid != $parent)) $thr_parent = $parent_uri; if ($parent_item['contact-id'] && $uid) { @@ -175,11 +171,11 @@ function item_post(App $a) { logger('mod_item: item_post parent=' . $parent); } - $profile_uid = ((x($_REQUEST, 'profile_uid')) ? intval($_REQUEST['profile_uid']) : 0); - $post_id = ((x($_REQUEST, 'post_id')) ? intval($_REQUEST['post_id']) : 0); - $app = ((x($_REQUEST, 'source')) ? strip_tags($_REQUEST['source']) : ''); - $extid = ((x($_REQUEST, 'extid')) ? strip_tags($_REQUEST['extid']) : ''); - $object = ((x($_REQUEST, 'object')) ? $_REQUEST['object'] : ''); + $profile_uid = (x($_REQUEST, 'profile_uid') ? intval($_REQUEST['profile_uid']) : 0); + $post_id = (x($_REQUEST, 'post_id') ? intval($_REQUEST['post_id']) : 0); + $app = (x($_REQUEST, 'source') ? strip_tags($_REQUEST['source']) : ''); + $extid = (x($_REQUEST, 'extid') ? strip_tags($_REQUEST['extid']) : ''); + $object = (x($_REQUEST, 'object') ? $_REQUEST['object'] : ''); // Check for multiple posts with the same message id (when the post was created via API) if (($message_id != '') && ($profile_uid != 0)) { @@ -233,7 +229,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]; @@ -276,11 +272,11 @@ function item_post(App $a) { * been supplied via a form. */ /// @TODO use x($_REQUEST, 'foo') here - if (($api_source) - && (! array_key_exists('contact_allow', $_REQUEST)) - && (! array_key_exists('group_allow', $_REQUEST)) - && (! array_key_exists('contact_deny', $_REQUEST)) - && (! array_key_exists('group_deny', $_REQUEST))) { + if ($api_source + && !array_key_exists('contact_allow', $_REQUEST) + && !array_key_exists('group_allow', $_REQUEST) + && !array_key_exists('contact_deny', $_REQUEST) + && !array_key_exists('group_deny', $_REQUEST)) { $str_group_allow = $user['allow_gid']; $str_contact_allow = $user['allow_cid']; $str_group_deny = $user['deny_gid']; @@ -331,13 +327,13 @@ function item_post(App $a) { $private = $parent_item['private']; } - $pubmail_enable = ((x($_REQUEST, 'pubmail_enable') && intval($_REQUEST['pubmail_enable']) && (! $private)) ? 1 : 0); + $pubmail_enable = ((x($_REQUEST, 'pubmail_enable') && intval($_REQUEST['pubmail_enable']) && !$private) ? 1 : 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') && (! Config::get('system', 'imap_disabled'))) ? 0 : 1); - if (! $mail_disabled) { + if ($api_source && $profile_uid && $profile_uid == local_user() && !$private) { + $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()) @@ -348,11 +344,11 @@ function item_post(App $a) { } } - if (! strlen($body)) { + if (!strlen($body)) { if ($preview) { killme(); } - info(t('Empty post discarded.') . EOL ); + info(t('Empty post discarded.') . EOL); if (x($_REQUEST, 'return')) { goaway($return_path); } @@ -485,7 +481,7 @@ function item_post(App $a) { * Robert Johnson should be first in the $tags array */ $fullnametagged = false; - /// @TODO $tagged is initialized above if() block and is not filled, maybe old-lost code? + /// @TODO $tagged is initialized above if () block and is not filled, maybe old-lost code? foreach ($tagged as $nextTag) { if (stristr($nextTag, $tag . ' ')) { $fullnametagged = true; @@ -496,7 +492,7 @@ function item_post(App $a) { continue; } - $success = handle_tag($a, $body, $inform, $str_tags, (local_user()) ? local_user() : $profile_uid , $tag, $network); + $success = handle_tag($a, $body, $inform, $str_tags, local_user() ? local_user() : $profile_uid, $tag, $network); if ($success['replaced']) { $tagged[] = $tag; } @@ -571,7 +567,7 @@ function item_post(App $a) { intval($profile_uid) ); - if (! DBM::is_result($r)) { + if (!DBM::is_result($r)) { continue; } @@ -595,7 +591,7 @@ function item_post(App $a) { */ $match = false; - if ((! $preview) && preg_match_all("/\[attachment\](.*?)\[\/attachment\]/", $body, $match)) { + if (!$preview && preg_match_all("/\[attachment\](.*?)\[\/attachment\]/", $body, $match)) { $attaches = $match[1]; if (count($attaches)) { foreach ($attaches as $attach) { @@ -676,24 +672,24 @@ function item_post(App $a) { $wall = 1; } - if (! strlen($verb)) { - $verb = ACTIVITY_POST ; + if (!strlen($verb)) { + $verb = ACTIVITY_POST; } if ($network == "") { $network = NETWORK_DFRN; } - $gravity = (($parent) ? 6 : 0 ); + $gravity = ($parent ? 6 : 0); // even if the post arrived via API we are considering that it // originated on this site by default for determining relayability. - $origin = ((x($_REQUEST, 'origin')) ? intval($_REQUEST['origin']) : 1); + $origin = (x($_REQUEST, 'origin') ? intval($_REQUEST['origin']) : 1); - $notify_type = (($parent) ? 'comment-new' : 'wall-new' ); + $notify_type = ($parent ? 'comment-new' : 'wall-new'); - $uri = (($message_id) ? $message_id : item_new_uri($a->get_hostname(),$profile_uid, $guid)); + $uri = ($message_id ? $message_id : item_new_uri($a->get_hostname(),$profile_uid, $guid)); // Fallback so that we alway have a thr-parent if (!$thr_parent) { @@ -756,7 +752,6 @@ function item_post(App $a) { */ $datarray['parent'] = $parent; $datarray['self'] = $self; -// $datarray['prvnets'] = $user['prvnets']; // This triggers posts via API and the mirror functions $datarray['api_source'] = $api_source; @@ -814,35 +809,29 @@ function item_post(App $a) { killme(); } - // Fill the cache field - put_item_in_cache($datarray); - - $datarray = store_conversation($datarray); - if ($orig_post) { - $r = q("UPDATE `item` SET `title` = '%s', `body` = '%s', `tag` = '%s', `attach` = '%s', `file` = '%s', `rendered-html` = '%s', `rendered-hash` = '%s', `edited` = '%s', `changed` = '%s' WHERE `id` = %d AND `uid` = %d", - dbesc($datarray['title']), - dbesc($datarray['body']), - dbesc($datarray['tag']), - dbesc($datarray['attach']), - dbesc($datarray['file']), - dbesc($datarray['rendered-html']), - dbesc($datarray['rendered-hash']), - dbesc(datetime_convert()), - dbesc(datetime_convert()), - intval($post_id), - intval($profile_uid) - ); - create_tags_from_item($post_id); - create_files_from_item($post_id); - update_thread($post_id); + // Fill the cache field + // This could be done in Item::update as well - but we have to check for the existance of some fields. + put_item_in_cache($datarray); + + $fields = array( + 'title' => $datarray['title'], + 'body' => $datarray['body'], + 'tag' => $datarray['tag'], + 'attach' => $datarray['attach'], + 'file' => $datarray['file'], + 'rendered-html' => $datarray['rendered-html'], + 'rendered-hash' => $datarray['rendered-hash'], + 'edited' => datetime_convert(), + 'changed' => datetime_convert()); + + Item::update($fields, ['id' => $post_id]); // update filetags in pconfig file_tag_update_pconfig($uid,$categories_old,$categories_new,'category'); - Worker::add(PRIORITY_HIGH, "Notifier", 'edit_post', $post_id); - if ((x($_REQUEST, 'return')) && strlen($return_path)) { + if (x($_REQUEST, 'return') && strlen($return_path)) { logger('return: ' . $return_path); goaway($return_path); } @@ -851,123 +840,19 @@ function item_post(App $a) { $post_id = 0; } - dba::transaction(); + unset($datarray['edit']); + unset($datarray['self']); + unset($datarray['api_source']); - $r = q("INSERT INTO `item` (`guid`, `extid`, `uid`,`type`,`wall`,`gravity`, `network`, `contact-id`, - `owner-name`,`owner-link`,`owner-avatar`, `owner-id`, - `author-name`, `author-link`, `author-avatar`, `author-id`, - `created`, `edited`, `commented`, `received`, `changed`, - `uri`, `thr-parent`, `title`, `body`, `app`, `location`, `coord`, - `tag`, `inform`, `verb`, `object-type`, `postopts`, - `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid`, `private`, - `pubmail`, `attach`, `bookmark`,`origin`, `moderated`, `file`, - `rendered-html`, `rendered-hash`, `gcontact-id`, `object`, - `parent`, `parent-uri`, `plink`, `last-child`, `visible`) - VALUES('%s', '%s', %d, '%s', %d, %d, '%s', %d, - '%s', '%s', '%s', %d, - '%s', '%s', '%s', %d, - '%s', '%s', '%s', '%s', '%s', - '%s', '%s', '%s', '%s', '%s', '%s', '%s', - '%s', '%s', '%s', '%s', '%s', - '%s', '%s', '%s', '%s', %d, - %d, '%s', %d, %d, %d, '%s', - '%s', '%s', %d, '%s', - %d, '%s', '%s', %d, %d)", - dbesc($datarray['guid']), - dbesc($datarray['extid']), - intval($datarray['uid']), - dbesc($datarray['type']), - intval($datarray['wall']), - intval($datarray['gravity']), - dbesc($datarray['network']), - intval($datarray['contact-id']), - dbesc($datarray['owner-name']), - dbesc($datarray['owner-link']), - dbesc($datarray['owner-avatar']), - intval($datarray['owner-id']), - dbesc($datarray['author-name']), - dbesc($datarray['author-link']), - dbesc($datarray['author-avatar']), - intval($datarray['author-id']), - dbesc($datarray['created']), - dbesc($datarray['edited']), - dbesc($datarray['commented']), - dbesc($datarray['received']), - dbesc($datarray['changed']), - dbesc($datarray['uri']), - dbesc($datarray['thr-parent']), - dbesc($datarray['title']), - dbesc($datarray['body']), - dbesc($datarray['app']), - dbesc($datarray['location']), - dbesc($datarray['coord']), - dbesc($datarray['tag']), - dbesc($datarray['inform']), - dbesc($datarray['verb']), - dbesc($datarray['object-type']), - dbesc($datarray['postopts']), - dbesc($datarray['allow_cid']), - dbesc($datarray['allow_gid']), - dbesc($datarray['deny_cid']), - dbesc($datarray['deny_gid']), - intval($datarray['private']), - intval($datarray['pubmail']), - dbesc($datarray['attach']), - intval($datarray['bookmark']), - intval($datarray['origin']), - intval($datarray['moderated']), - dbesc($datarray['file']), - dbesc($datarray['rendered-html']), - dbesc($datarray['rendered-hash']), - intval($datarray['gcontact-id']), - dbesc($datarray['object']), - intval($datarray['parent']), - dbesc($datarray['parent-uri']), - dbesc($datarray['plink']), - intval($datarray['last-child']), - intval($datarray['visible']) - ); - - if (DBM::is_result($r)) { - $post_id = dba::lastInsertId(); - } else { - logger('mod_item: unable to create post.'); - $post_id = 0; - } - - if ($post_id == 0) { - dba::commit(); - logger('mod_item: unable to retrieve post that was just stored.'); - notice(t('System error. Post not saved.') . EOL); - goaway($return_path); - // NOTREACHED - } - - logger('mod_item: saved item ' . $post_id); + $post_id = item_store($datarray); $datarray["id"] = $post_id; - item_set_last_item($datarray); - // update filetags in pconfig - file_tag_update_pconfig($uid,$categories_old,$categories_new,'category'); + file_tag_update_pconfig($uid, $categories_old, $categories_new, 'category'); + // These notifications are sent if someone else is commenting other your wall if ($parent) { - - // This item is the last leaf and gets the comment box, clear any ancestors - $r = q("UPDATE `item` SET `last-child` = 0, `changed` = '%s' WHERE `parent` = %d AND `last-child` AND `id` != %d", - dbesc(datetime_convert()), - intval($parent), - intval($post_id) - ); - - // update the commented timestamp on the parent - q("UPDATE `item` SET `visible` = 1, `commented` = '%s', `changed` = '%s' WHERE `id` = %d", - dbesc(datetime_convert()), - dbesc(datetime_convert()), - intval($parent) - ); - if ($contact_record != $author) { notification(array( 'type' => NOTIFY_COMMENT, @@ -986,20 +871,11 @@ function item_post(App $a) { 'parent' => $parent, 'parent_uri' => $parent_item['uri'] )); - } - // Store the comment signature information in case we need to relay to Diaspora Diaspora::storeCommentSignature($datarray, $author, ($self ? $user['prvkey'] : false), $post_id); - } else { - $parent = $post_id; - - $r = q("UPDATE `item` SET `parent` = %d WHERE `id` = %d", - intval($parent), - intval($post_id)); - if (($contact_record != $author) && !count($forum_contact)) { notification(array( 'type' => NOTIFY_WALL, @@ -1026,17 +902,17 @@ function item_post(App $a) { if (count($erecips)) { foreach ($erecips as $recip) { $addr = trim($recip); - if (! strlen($addr)) { + if (!strlen($addr)) { continue; } - $disclaimer = '