* 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\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';
if ($thr_parent || $thr_parent_uri) {
if ($thr_parent) {
- $parent_item = dba::selectFirst('item', [], ['id' => $thr_parent]);
+ $parent_item = Item::selectFirst([], ['id' => $thr_parent]);
} elseif ($thr_parent_uri) {
- $parent_item = dba::selectFirst('item', [], ['uri' => $thr_parent_uri, 'uid' => $profile_uid]);
+ $parent_item = Item::selectFirst([], ['uri' => $thr_parent_uri, 'uid' => $profile_uid]);
}
// if this isn't the real parent of the conversation, find it
$thr_parent_contact = Contact::getDetailsByURL($parent_item["author-link"]);
if ($parent_item['id'] != $parent_item['parent']) {
- $parent_item = dba::selectFirst('item', [], ['id' => $parent_item['parent']]);
+ $parent_item = Item::selectFirst(Item::ITEM_FIELDLIST, ['id' => $parent_item['parent']]);
}
}
$orig_post = null;
if ($post_id) {
- $orig_post = dba::selectFirst('item', [], ['id' => $post_id]);
+ $orig_post = Item::selectFirst(Item::ITEM_FIELDLIST, ['id' => $post_id]);
}
$user = dba::selectFirst('user', [], ['uid' => $profile_uid]);
return;
}
+ $categories = '';
+
if ($orig_post) {
$str_group_allow = $orig_post['allow_gid'];
$str_contact_allow = $orig_post['allow_cid'];
$str_contact_deny = $user['deny_cid'];
} else {
// use the posted permissions
- $str_group_allow = perms2str($_REQUEST['group_allow']);
- $str_contact_allow = perms2str($_REQUEST['contact_allow']);
- $str_group_deny = perms2str($_REQUEST['group_deny']);
- $str_contact_deny = perms2str($_REQUEST['contact_deny']);
+ $str_group_allow = perms2str(defaults($_REQUEST, 'group_allow', ''));
+ $str_contact_allow = perms2str(defaults($_REQUEST, 'contact_allow', ''));
+ $str_group_deny = perms2str(defaults($_REQUEST, 'group_deny', ''));
+ $str_contact_deny = perms2str(defaults($_REQUEST, 'contact_deny', ''));
}
- $title = notags(trim($_REQUEST['title']));
- $location = notags(trim($_REQUEST['location']));
- $coord = notags(trim($_REQUEST['coord']));
- $verb = notags(trim($_REQUEST['verb']));
- $emailcc = notags(trim($_REQUEST['emailcc']));
- $body = escape_tags(trim($_REQUEST['body']));
- $network = notags(trim($_REQUEST['network']));
- $guid = get_guid(32);
+ $title = notags(trim(defaults($_REQUEST, 'title' , '')));
+ $location = notags(trim(defaults($_REQUEST, 'location', '')));
+ $coord = notags(trim(defaults($_REQUEST, 'coord' , '')));
+ $verb = notags(trim(defaults($_REQUEST, 'verb' , '')));
+ $emailcc = notags(trim(defaults($_REQUEST, 'emailcc' , '')));
+ $body = escape_tags(trim(defaults($_REQUEST, 'body' , '')));
+ $network = notags(trim(defaults($_REQUEST, 'network' , NETWORK_DFRN)));
+ $guid = System::createGUID(32);
$postopts = defaults($_REQUEST, 'postopts', '');
// If this is a comment, set the permissions from the parent.
if ($parent_item) {
-
// for non native networks use the network of the original post as network of the item
if (($parent_item['network'] != NETWORK_DIASPORA)
&& ($parent_item['network'] != NETWORK_OSTATUS)
}
}
- if (strlen($categories)) {
+ if (!empty($categories)) {
// get the "fileas" tags for this post
$filedas = file_tag_file_to_list($categories, 'file');
}
// save old and new categories, so we can determine what needs to be deleted from pconfig
$categories_old = $categories;
- $categories = file_tag_list_to_file(trim($_REQUEST['category']), 'category');
+ $categories = file_tag_list_to_file(trim(defaults($_REQUEST, 'category', '')), 'category');
$categories_new = $categories;
- if (strlen($filedas)) {
+ if (!empty($filedas)) {
// append the fileas stuff to the new categories list
$categories .= file_tag_list_to_file($filedas, 'file');
}
// 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) {
$network = NETWORK_DFRN;
}
- $gravity = ($parent ? 6 : 0);
+ $gravity = ($parent ? GRAVITY_COMMENT : GRAVITY_PARENT);
// even if the post arrived via API we are considering that it
// originated on this site by default for determining relayability.
$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::newURI($api_source ? $profile_uid : $uid, $guid));
// Fallback so that we alway have a parent uri
if (!$thr_parent_uri || !$parent) {
$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['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;
/*
// This field is for storing the raw conversation data
$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 ($r['conversation-uri'] != '') {
- $datarray['conversation-uri'] = $r['conversation-uri'];
+ $conversation = dba::selectFirst('conversation', ['conversation-uri', 'conversation-href'], ['item-uri' => $datarray['parent-uri']]);
+ if (DBM::is_result($conversation)) {
+ if ($conversation['conversation-uri'] != '') {
+ $datarray['conversation-uri'] = $conversation['conversation-uri'];
}
- if ($r['conversation-href'] != '') {
- $datarray['conversation-href'] = $r['conversation-href'];
+ if ($conversation['conversation-href'] != '') {
+ $datarray['conversation-href'] = $conversation['conversation-href'];
}
}
if ($orig_post) {
$datarray['edit'] = true;
+ } else {
+ $datarray['edit'] = false;
+ }
+
+ // Check for hashtags in the body and repair or add hashtag links
+ if ($preview || $orig_post) {
+ Item::setHashtags($datarray);
}
// preview mode - prepare the body for display and send it via json
// We set the datarray ID to -1 because in preview mode the dataray
// doesn't have an ID.
$datarray["id"] = -1;
+ $datarray["item_id"] = -1;
+ $datarray["author-network"] = NETWORK_DFRN;
+
$o = conversation($a,[array_merge($contact_record,$datarray)],'search', false, true);
logger('preview: ' . $o);
echo json_encode(['preview' => $o]);
'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.");
goaway($return_path);
}
- $datarray = dba::selectFirst('item', [], ['id' => $post_id]);
+ $datarray = Item::selectFirst(Item::ITEM_FIELDLIST, ['id' => $post_id]);
if (!DBM::is_result($datarray)) {
logger("Item with id ".$post_id." couldn't be fetched.");
$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);
}
$o = '';
if (($a->argc == 3) && ($a->argv[1] === 'drop') && intval($a->argv[2])) {
if (is_ajax()) {
- $o = Item::delete($a->argv[2]);
+ $o = Item::deleteForUser(['id' => $a->argv[2]], local_user());
} else {
$o = drop_item($a->argv[2]);
}