* All of these become an "item" which is our basic unit of
* information.
*/
+
use Friendica\App;
+use Friendica\Content\Text\BBCode;
+use Friendica\Core\Addon;
use Friendica\Core\Config;
+use Friendica\Core\L10n;
use Friendica\Core\System;
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;
+use Friendica\Util\DateTimeFormat;
use Friendica\Util\Emailer;
require_once 'include/enotify.php';
-require_once 'include/tags.php';
-require_once 'include/threads.php';
require_once 'include/text.php';
require_once 'include/items.php';
killme();
}
- call_hooks('post_local_start', $_REQUEST);
+ Addon::callHooks('post_local_start', $_REQUEST);
+
logger('postvars ' . print_r($_REQUEST,true), LOGGER_DATA);
$api_source = defaults($_REQUEST, 'api_source', false);
}
if (!DBM::is_result($parent_item)) {
- notice(t('Unable to locate original post.') . EOL);
+ notice(L10n::t('Unable to locate original post.') . EOL);
if (x($_REQUEST, 'return')) {
goaway($return_path);
}
// Now check that valid personal details have been provided
if (!can_write_wall($profile_uid) && !$allow_comment) {
- notice(t('Permission denied.') . EOL) ;
+ notice(L10n::t('Permission denied.') . EOL) ;
if (x($_REQUEST, 'return')) {
goaway($return_path);
}
}
$user = dba::selectFirst('user', [], ['uid' => $profile_uid]);
- if (!DBM::is_result($user) && !$orig_post) {
+ if (!DBM::is_result($user) && !$parent) {
return;
}
$verb = notags(trim($_REQUEST['verb']));
$emailcc = notags(trim($_REQUEST['emailcc']));
$body = escape_tags(trim($_REQUEST['body']));
- $network = notags(trim($_REQUEST['network']));
+ $network = notags(trim(defaults($_REQUEST, 'network', NETWORK_DFRN)));
$guid = get_guid(32);
- item_add_language_opt($_REQUEST);
- $postopts = $_REQUEST['postopts'] ? $_REQUEST['postopts'] : "";
+ $postopts = defaults($_REQUEST, 'postopts', '');
$private = ((strlen($str_group_allow) || strlen($str_contact_allow) || strlen($str_group_deny) || strlen($str_contact_deny)) ? 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) {
if (function_exists('imap_open') && !Config::get('system', 'imap_disabled')) {
- $pubmail_enabled = dba::exists('mailacct', ["`uid` = ? AND `server` != ?", local_user(), '']);
+ $pubmail_enabled = dba::exists('mailacct', ["`uid` = ? AND `server` != ? AND `pubmail`", local_user(), '']);
}
}
if ($preview) {
killme();
}
- info(t('Empty post discarded.') . EOL);
+ info(L10n::t('Empty post discarded.') . EOL);
if (x($_REQUEST, 'return')) {
goaway($return_path);
}
if ($parent) {
if ($thr_parent_contact['network'] == NETWORK_OSTATUS) {
$contact = '@[url=' . $thr_parent_contact['url'] . ']' . $thr_parent_contact['nick'] . '[/url]';
- if (!in_array($contact, $tags)) {
+ if (!stripos(implode($tags), '[url=' . $thr_parent_contact['url'] . ']')) {
$tags[] = $contact;
}
}
if ($parent_contact['network'] == NETWORK_OSTATUS) {
$contact = '@[url=' . $parent_contact['url'] . ']' . $parent_contact['nick'] . '[/url]';
- if (!in_array($contact, $tags)) {
+ if (!stripos(implode($tags), '[url=' . $parent_contact['url'] . ']')) {
$tags[] = $contact;
}
}
if (count($tags)) {
foreach ($tags as $tag) {
-
$tag_type = substr($tag, 0, 1);
if ($tag_type == '#') {
$match = null;
+ /// @todo these lines should be moved to Model/Photo
if (!$preview && preg_match_all("/\[img([\=0-9x]*?)\](.*?)\[\/img\]/",$body,$match)) {
$images = $match[2];
if (count($images)) {
continue;
}
- /// @todo these lines should be moved to Model/Photo
+ // Ensure to only modify photos that you own
$srch = '<' . intval($original_contact_id) . '>';
$condition = ['allow_cid' => $srch, 'allow_gid' => '', 'deny_cid' => '', 'deny_gid' => '',
$fields = ['allow_cid' => $str_contact_allow, 'allow_gid' => $str_group_allow,
'deny_cid' => $str_contact_deny, 'deny_gid' => $str_group_deny];
- $condition = ['resource-id' => $image_uri, 'uid' => $profile_uid, 'album' => t('Wall Photos')];
+ $condition = ['resource-id' => $image_uri, 'uid' => $profile_uid, 'album' => L10n::t('Wall Photos')];
dba::update('photo', $fields, $condition);
}
}
*/
$match = false;
+ /// @todo these lines should be moved to Model/Attach (Once it exists)
if (!$preview && preg_match_all("/\[attachment\](.*?)\[\/attachment\]/", $body, $match)) {
$attaches = $match[1];
if (count($attaches)) {
foreach ($attaches as $attach) {
+ // Ensure to only modify attachments that you own
+ $srch = '<' . intval($original_contact_id) . '>';
+
+ $condition = ['allow_cid' => $srch, 'allow_gid' => '', 'deny_cid' => '', 'deny_gid' => '',
+ 'id' => $attach];
+ if (!dba::exists('attach', $condition)) {
+ continue;
+ }
+
$fields = ['allow_cid' => $str_contact_allow, 'allow_gid' => $str_group_allow,
'deny_cid' => $str_contact_deny, 'deny_gid' => $str_group_deny];
$condition = ['id' => $attach];
// embedded bookmark or attachment in post? set bookmark flag
$bookmark = 0;
- $data = get_attachment_data($body);
+ $data = BBCode::getAttachmentData($body);
if (preg_match_all("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism", $body, $match, PREG_SET_ORDER) || isset($data["type"])) {
$objecttype = ACTIVITY_OBJ_BOOKMARK;
$bookmark = 1;
// Fold multi-line [code] sequences
$body = preg_replace('/\[\/code\]\s*\[code\]/ism', "\n", $body);
- $body = scale_external_images($body, false);
+ $body = BBCode::scaleExternalImages($body, false);
// Setting the object type if not defined before
if (!$objecttype) {
$objecttype = ACTIVITY_OBJ_NOTE; // Default value
- require_once 'include/plaintext.php';
- $objectdata = get_attached_data($body);
+ $objectdata = BBCode::getAttachedData($body);
if ($objectdata["type"] == "link") {
$objecttype = ACTIVITY_OBJ_BOOKMARK;
$datarray['owner-name'] = $contact_record['name'];
$datarray['owner-link'] = $contact_record['url'];
$datarray['owner-avatar'] = $contact_record['thumb'];
- $datarray['owner-id'] = Contact::getIdForURL($datarray['owner-link'], 0);
+ $datarray['owner-id'] = Contact::getIdForURL($datarray['owner-link']);
$datarray['author-name'] = $author['name'];
$datarray['author-link'] = $author['url'];
$datarray['author-avatar'] = $author['thumb'];
- $datarray['author-id'] = Contact::getIdForURL($datarray['author-link'], 0);
- $datarray['created'] = datetime_convert();
- $datarray['edited'] = datetime_convert();
- $datarray['commented'] = datetime_convert();
- $datarray['received'] = datetime_convert();
- $datarray['changed'] = datetime_convert();
+ $datarray['author-id'] = Contact::getIdForURL($datarray['author-link']);
+ $datarray['created'] = DateTimeFormat::utcNow();
+ $datarray['edited'] = DateTimeFormat::utcNow();
+ $datarray['commented'] = DateTimeFormat::utcNow();
+ $datarray['received'] = DateTimeFormat::utcNow();
+ $datarray['changed'] = DateTimeFormat::utcNow();
$datarray['extid'] = $extid;
$datarray['guid'] = $guid;
$datarray['uri'] = $uri;
$datarray['pubmail'] = $pubmail_enabled;
$datarray['attach'] = $attachments;
$datarray['bookmark'] = intval($bookmark);
+
+ // This is not a bug. The item store function changes 'parent-uri' to 'thr-parent' and fetches 'parent-uri' new. (We should change this)
$datarray['parent-uri'] = $thr_parent_uri;
+
$datarray['postopts'] = $postopts;
$datarray['origin'] = $origin;
$datarray['moderated'] = false;
- $datarray['gcontact-id'] = GContact::getId(["url" => $datarray['author-link'], "network" => $datarray['network'],
- "photo" => $datarray['author-avatar'], "name" => $datarray['author-name']]);
$datarray['object'] = $object;
/*
- * These fields are for the convenience of plugins...
+ * These fields are for the convenience of addons...
* 'self' if true indicates the owner is posting on their own wall
* If parent is 0 it is a top-level post.
*/
$datarray['edit'] = true;
}
- // Search for hashtags
- item_body_set_hashtags($datarray);
-
// preview mode - prepare the body for display and send it via json
if ($preview) {
require_once 'include/conversation.php';
killme();
}
- call_hooks('post_local',$datarray);
+ Addon::callHooks('post_local',$datarray);
if (x($datarray, 'cancel')) {
- logger('mod_item: post cancelled by plugin.');
+ logger('mod_item: post cancelled by addon.');
if ($return_path) {
goaway($return_path);
}
'file' => $datarray['file'],
'rendered-html' => $datarray['rendered-html'],
'rendered-hash' => $datarray['rendered-hash'],
- 'edited' => datetime_convert(),
- 'changed' => datetime_convert()];
+ 'edited' => DateTimeFormat::utcNow(),
+ 'changed' => DateTimeFormat::utcNow()];
Item::update($fields, ['id' => $post_id]);
unset($datarray['self']);
unset($datarray['api_source']);
- $post_id = item_store($datarray);
+ $post_id = Item::insert($datarray);
if (!$post_id) {
logger("Item wasn't stored.");
}
}
- call_hooks('post_local_end', $datarray);
+ Addon::callHooks('post_local_end', $datarray);
if (strlen($emailcc) && $profile_uid == local_user()) {
$erecips = explode(',', $emailcc);
if (!strlen($addr)) {
continue;
}
- $disclaimer = '<hr />' . sprintf(t('This message was sent to you by %s, a member of the Friendica social network.'), $a->user['username'])
+ $disclaimer = '<hr />' . L10n::t('This message was sent to you by %s, a member of the Friendica social network.', $a->user['username'])
. '<br />';
- $disclaimer .= sprintf(t('You may visit them online at %s'), System::baseUrl() . '/profile/' . $a->user['nickname']) . EOL;
- $disclaimer .= t('Please contact the sender by replying to this post if you do not wish to receive these messages.') . EOL;
+ $disclaimer .= L10n::t('You may visit them online at %s', System::baseUrl() . '/profile/' . $a->user['nickname']) . EOL;
+ $disclaimer .= L10n::t('Please contact the sender by replying to this post if you do not wish to receive these messages.') . EOL;
if (!$datarray['title']=='') {
$subject = Email::encodeHeader($datarray['title'], 'UTF-8');
} else {
- $subject = Email::encodeHeader('[Friendica]' . ' ' . sprintf(t('%s posted an update.'), $a->user['username']), 'UTF-8');
+ $subject = Email::encodeHeader('[Friendica]' . ' ' . L10n::t('%s posted an update.', $a->user['username']), 'UTF-8');
}
$link = '<a href="' . System::baseUrl() . '/profile/' . $a->user['nickname'] . '"><img src="' . $author['thumb'] . '" alt="' . $a->user['username'] . '" /></a><br /><br />';
$html = prepare_body($datarray);
$message = '<html><body>' . $link . $html . $disclaimer . '</body></html>';
- include_once 'include/html2plain.php';
$params = [
'fromName' => $a->user['username'],
'fromEmail' => $a->user['email'],
'replyTo' => $a->user['email'],
'messageSubject' => $subject,
'htmlVersion' => $message,
- 'textVersion' => html2plain($html.$disclaimer)
+ 'textVersion' => Friendica\Content\Text\HTML::toPlaintext($html.$disclaimer)
];
Emailer::send($params);
}
item_post_return(System::baseUrl(), $api_source, $return_path);
// NOTREACHED
}
-// q(
+
function item_post_return($baseurl, $api_source, $return_path) {
// figure out how to return, depending on from whence we came
$o = '';
if (($a->argc == 3) && ($a->argv[1] === 'drop') && intval($a->argv[2])) {
if (is_ajax()) {
- $o = Item::delete($a->argv[2]);
+ $o = Item::deleteById($a->argv[2]);
} else {
$o = drop_item($a->argv[2]);
}
// Checking for the alias that is used for OStatus
$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)) {
- $r = q("SELECT `alias`, `name` FROM `gcontact` WHERE `nurl` = '%s' AND `alias` != ''",
- normalise_link($matches[1]));
- }
- if (DBM::is_result($r)) {
- $data = $r[0];
- } else {
- $data = Probe::uri($matches[1]);
- }
-
+ $data = Contact::getDetailsByURL($matches[1]);
if ($data["alias"] != "") {
- $newtag = '@[url=' . $data["alias"] . ']' . $data["name"] . '[/url]';
- if (!stristr($str_tags, $newtag)) {
+ $newtag = '@[url=' . $data["alias"] . ']' . $data["nick"] . '[/url]';
+ if (!stripos($str_tags, '[url=' . $data["alias"] . ']')) {
if (strlen($str_tags)) {
$str_tags .= ',';
}
$name = $nameparts[0];
// Try to detect the contact in various ways
- if ((strpos($name, '@')) || (strpos($name, 'http://'))) {
- // 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`, `forum`, `prv` FROM `contact`
- WHERE `addr` = '%s' AND `uid` = %d AND
- (`network` != '%s' OR (`notify` != '' AND `alias` != ''))
- LIMIT 1",
- dbesc($name),
- intval($profile_uid),
- dbesc(NETWORK_OSTATUS)
- );
-
- // Then check in the contact table for the url
- 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",
- dbesc(normalise_link($name)),
- intval($profile_uid),
- dbesc(NETWORK_OSTATUS)
- );
- }
-
- // Then check in the global contacts for the address
- 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",
- dbesc($name),
- dbesc(NETWORK_OSTATUS)
- );
- }
-
- // Then check in the global contacts for the url
- 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",
- dbesc(normalise_link($name)),
- dbesc(NETWORK_OSTATUS)
- );
- }
-
- if (!DBM::is_result($r)) {
- $probed = Probe::uri($name);
- if ($result['network'] != NETWORK_PHANTOM) {
- GContact::update($probed);
- $r = q("SELECT `url`, `name`, `nick`, `network`, `alias`, `notify` FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1",
- dbesc(normalise_link($probed["url"])));
- }
- }
+ if (strpos($name, 'http://')) {
+ // At first we have to ensure that the contact exists
+ Contact::getIdForURL($name);
+
+ // Now we should have something
+ $contact = Contact::getDetailsByURL($name);
+ } elseif (strpos($name, '@')) {
+ // This function automatically probes when no entry was found
+ $contact = Contact::getDetailsByAddr($name);
} else {
- $r = false;
+ $contact = false;
+ $fields = ['id', 'url', 'nick', 'name', 'alias', 'network'];
+
if (strrpos($name, '+')) {
// Is it in format @nick+number?
$tagcid = intval(substr($name, strrpos($name, '+') + 1));
+ $contact = dba::selectFirst('contact', $fields, ['id' => $tagcid, 'uid' => $profile_uid]);
+ }
- $r = q("SELECT `id`, `url`, `nick`, `name`, `alias`, `network` FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
- intval($tagcid),
- intval($profile_uid)
- );
+ // select someone by nick or attag in the current network
+ if (!DBM::is_result($contact) && ($network != "")) {
+ $condition = ["(`nick` = ? OR `attag` = ?) AND `network` = ? AND `uid` = ?",
+ $name, $name, $network, $profile_uid];
+ $contact = dba::selectFirst('contact', $fields, $condition);
}
- // select someone by attag or nick and the name passed in the current 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),
- dbesc($network),
- intval($profile_uid)
- );
-
- //select someone from this user's contacts by name in the current 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),
- intval($profile_uid)
- );
+ //select someone by name in the current network
+ if (!DBM::is_result($contact) && ($network != "")) {
+ $condition = ['name' => $name, 'network' => $network, 'uid' => $profile_uid];
+ $contact = dba::selectFirst('contact', $fields, $condition);
}
- // select someone by attag or nick and the name passed in
- 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),
- intval($profile_uid)
- );
+ // select someone by nick or attag in any network
+ if (!DBM::is_result($contact)) {
+ $condition = ["(`nick` = ? OR `attag` = ?) AND `uid` = ?", $name, $name, $profile_uid];
+ $contact = dba::selectFirst('contact', $fields, $condition);
}
- // select someone from this user's contacts by name
- 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)
- );
+ // select someone by name in any network
+ if (!DBM::is_result($contact)) {
+ $condition = ['name' => $name, 'uid' => $profile_uid];
+ $contact = dba::selectFirst('contact', $fields, $condition);
}
}
- if (DBM::is_result($r)) {
- if (strlen($inform) && (isset($r[0]["notify"]) || isset($r[0]["id"]))) {
+ if ($contact) {
+ if (strlen($inform) && (isset($contact["notify"]) || isset($contact["id"]))) {
$inform .= ',';
}
- if (isset($r[0]["id"])) {
- $inform .= 'cid:' . $r[0]["id"];
- } elseif (isset($r[0]["notify"])) {
- $inform .= $r[0]["notify"];
+ if (isset($contact["id"])) {
+ $inform .= 'cid:' . $contact["id"];
+ } elseif (isset($contact["notify"])) {
+ $inform .= $contact["notify"];
}
- $profile = $r[0]["url"];
- $alias = $r[0]["alias"];
- $newname = $r[0]["nick"];
- if (($newname == "") || (($r[0]["network"] != NETWORK_OSTATUS) && ($r[0]["network"] != NETWORK_TWITTER)
- && ($r[0]["network"] != NETWORK_STATUSNET) && ($r[0]["network"] != NETWORK_APPNET))) {
- $newname = $r[0]["name"];
+ $profile = $contact["url"];
+ $alias = $contact["alias"];
+ $newname = $contact["nick"];
+ if (($newname == "") || (($contact["network"] != NETWORK_OSTATUS) && ($contact["network"] != NETWORK_TWITTER)
+ && ($contact["network"] != NETWORK_STATUSNET) && ($contact["network"] != NETWORK_APPNET))) {
+ $newname = $contact["name"];
}
}
*/
if (strlen($alias)) {
$newtag = '@[url=' . $alias . ']' . $newname . '[/url]';
- if (!stristr($str_tags, $newtag)) {
+ if (!stripos($str_tags, '[url=' . $alias . ']')) {
if (strlen($str_tags)) {
$str_tags .= ',';
}
}
}
- return ['replaced' => $replaced, 'contact' => $r[0]];
+ return ['replaced' => $replaced, 'contact' => $contact];
}