use Friendica\App;
use Friendica\Content\OEmbed;
+use Friendica\Content\Text\BBCode;
use Friendica\Core\Addon;
use Friendica\Core\Config;
use Friendica\Core\L10n;
use Friendica\Object\Image;
use Friendica\Protocol\OStatus;
use Friendica\Util\Crypto;
+use Friendica\Util\DateTimeFormat;
use Friendica\Util\Network;
-use Friendica\Util\Temporal;
use Friendica\Util\XML;
-use Friendica\Content\Text\BBCode;
-
use dba;
use DOMDocument;
use DOMXPath;
require_once 'boot.php';
require_once 'include/dba.php';
require_once "include/enotify.php";
-require_once "include/threads.php";
require_once "include/items.php";
-require_once "include/tags.php";
require_once "include/event.php";
require_once "include/text.php";
require_once "include/html2bbcode.php";
}
}
- $check_date = Temporal::convert($last_update);
+ $check_date = DateTimeFormat::utc($last_update);
$r = q(
"SELECT `item`.*, `item`.`id` AS `item_id`,
XML::addElement($doc, $mail, "dfrn:id", $item['uri']);
XML::addElement($doc, $mail, "dfrn:in-reply-to", $item['parent-uri']);
- XML::addElement($doc, $mail, "dfrn:sentdate", Temporal::convert($item['created'] . '+00:00', 'UTC', 'UTC', Temporal::ATOM));
+ XML::addElement($doc, $mail, "dfrn:sentdate", DateTimeFormat::utc($item['created'] . '+00:00', DateTimeFormat::ATOM));
XML::addElement($doc, $mail, "dfrn:subject", $item['title']);
XML::addElement($doc, $mail, "dfrn:content", $item['body']);
/// @todo We need a way to transmit the different page flags like "PAGE_PRVGROUP"
- XML::addElement($doc, $root, "updated", Temporal::convert("now", "UTC", "UTC", Temporal::ATOM));
+ XML::addElement($doc, $root, "updated", DateTimeFormat::utcNow(DateTimeFormat::ATOM));
$author = self::addAuthor($doc, $owner, $authorelement, $public);
$root->appendChild($author);
$author = $doc->createElement($authorelement);
- $namdate = Temporal::convert($owner['name-date'].'+00:00', 'UTC', 'UTC', Temporal::ATOM);
- $uridate = Temporal::convert($owner['uri-date'].'+00:00', 'UTC', 'UTC', Temporal::ATOM);
- $picdate = Temporal::convert($owner['avatar-date'].'+00:00', 'UTC', 'UTC', Temporal::ATOM);
+ $namdate = DateTimeFormat::utc($owner['name-date'].'+00:00', DateTimeFormat::ATOM);
+ $uridate = DateTimeFormat::utc($owner['uri-date'].'+00:00', DateTimeFormat::ATOM);
+ $picdate = DateTimeFormat::utc($owner['avatar-date'].'+00:00', DateTimeFormat::ATOM);
$attributes = [];
}
if ($item['deleted']) {
- $attributes = ["ref" => $item['uri'], "when" => Temporal::convert($item['edited'] . '+00:00', 'UTC', 'UTC', Temporal::ATOM)];
+ $attributes = ["ref" => $item['uri'], "when" => DateTimeFormat::utc($item['edited'] . '+00:00', DateTimeFormat::ATOM)];
return XML::createElement($doc, "at:deleted-entry", "", $attributes);
}
}
// Remove the abstract element. It is only locally important.
- $body = remove_abstract($body);
+ $body = BBCode::stripAbstract($body);
if ($type == 'html') {
$htmlbody = $body;
XML::addElement($doc, $entry, "id", $item["uri"]);
XML::addElement($doc, $entry, "title", $item["title"]);
- XML::addElement($doc, $entry, "published", Temporal::convert($item["created"] . "+00:00", "UTC", "UTC", Temporal::ATOM));
- XML::addElement($doc, $entry, "updated", Temporal::convert($item["edited"] . "+00:00", "UTC", "UTC", Temporal::ATOM));
+ XML::addElement($doc, $entry, "published", DateTimeFormat::utc($item["created"] . "+00:00", DateTimeFormat::ATOM));
+ XML::addElement($doc, $entry, "updated", DateTimeFormat::utc($item["edited"] . "+00:00", DateTimeFormat::ATOM));
// "dfrn:env" is used to read the content
XML::addElement($doc, $entry, "dfrn:env", base64url_encode($body, true));
"SELECT `id` FROM `event` WHERE `uid` = %d AND `cid` = %d AND `start` = '%s' AND `type` = '%s' LIMIT 1",
intval($contact["uid"]),
intval($contact["id"]),
- dbesc(Temporal::convert($birthday)),
+ dbesc(DateTimeFormat::utc($birthday)),
dbesc("birthday")
);
VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s') ",
intval($contact["uid"]),
intval($contact["id"]),
- dbesc(Temporal::convert()),
- dbesc(Temporal::convert()),
- dbesc(Temporal::convert($birthday)),
- dbesc(Temporal::convert($birthday . " + 1 day ")),
+ dbesc(DateTimeFormat::utcNow()),
+ dbesc(DateTimeFormat::utcNow()),
+ dbesc(DateTimeFormat::utc($birthday)),
+ dbesc(DateTimeFormat::utc($birthday . " + 1 day ")),
dbesc($bdtext),
dbesc($bdtext2),
dbesc("birthday")
intval($suggest["cid"]),
dbesc($suggest["body"]),
dbesc($hash),
- dbesc(Temporal::convert()),
+ dbesc(DateTimeFormat::utcNow()),
intval(0)
);
if (self::isEditedTimestampNewer($current, $item)) {
// do not accept (ignore) an earlier edit than one we currently have.
- if (Temporal::convert($item["edited"]) < $current["edited"]) {
+ if (DateTimeFormat::utc($item["edited"]) < $current["edited"]) {
return false;
}
$fields = ['title' => $item["title"], 'body' => $item["body"],
- 'tag' => $item["tag"], 'changed' => Temporal::convert(),
- 'edited' => Temporal::convert($item["edited"])];
+ 'tag' => $item["tag"], 'changed' => DateTimeFormat::utcNow(),
+ 'edited' => DateTimeFormat::utc($item["edited"])];
$condition = ["`uri` = ? AND `uid` IN (0, ?)", $item["uri"], $importer["importer_uid"]];
- dba::update('item', $fields, $condition);
-
- create_tags_from_itemuri($item["uri"], $importer["importer_uid"]);
- update_thread_uri($item["uri"], $importer["importer_uid"]);
+ Item::update($fields, $condition);
$changed = true;
// extract tag, if not duplicate, add to parent item
if ($xo->content) {
- if (!(stristr($r[0]["tag"], trim($xo->content)))) {
- q(
- "UPDATE `item` SET `tag` = '%s' WHERE `id` = %d",
- dbesc($r[0]["tag"] . (strlen($r[0]["tag"]) ? ',' : '') . '#[url=' . $xo->id . ']'. $xo->content . '[/url]'),
- intval($r[0]["id"])
- );
- create_tags_from_item($r[0]["id"]);
+ if (!stristr($r[0]["tag"], trim($xo->content))) {
+ $tag = $r[0]["tag"] . (strlen($r[0]["tag"]) ? ',' : '') . '#[url=' . $xo->id . ']'. $xo->content . '[/url]';
+ Item::update(['tag' => $tag], ['id' => $r[0]["id"]]);
}
}
}
// Is there an existing item?
if (DBM::is_result($current) && self::isEditedTimestampNewer($current[0], $item)
- && (Temporal::convert($item["edited"]) < $current[0]["edited"])
+ && (DateTimeFormat::utc($item["edited"]) < $current[0]["edited"])
) {
logger("Item ".$item["uri"]." already existed.", LOGGER_DEBUG);
return;
if ($attributes->name == "ref") {
$uri = $attributes->textContent;
}
- if ($attributes->name == "when") {
- $when = $attributes->textContent;
- }
- }
- if ($when) {
- $when = Temporal::convert($when);
- } else {
- $when = Temporal::convert("now");
}
if (!$uri || !$importer["id"]) {
return false;
}
- /// @todo Only select the used fields
- $r = q(
- "SELECT `item`.*, `contact`.`self` FROM `item` INNER JOIN `contact` on `item`.`contact-id` = `contact`.`id`
- WHERE `uri` = '%s' AND `item`.`uid` = %d AND `contact-id` = %d AND NOT `item`.`file` LIKE '%%[%%' LIMIT 1",
- dbesc($uri),
- intval($importer["uid"]),
- intval($importer["id"])
- );
- if (!DBM::is_result($r)) {
+ $condition = ["`uri` = ? AND `uid` = ? AND `contact-id` = ? AND NOT `file` LIKE '%[%'",
+ $uri, $importer["uid"], $importer["id"]];
+ $item = dba::selectFirst('item', ['id'], $condition);
+ if (!DBM::is_result($item)) {
logger("Item with uri " . $uri . " from contact " . $importer["id"] . " for user " . $importer["uid"] . " wasn't found.", LOGGER_DEBUG);
return;
- } else {
- $item = $r[0];
-
- $entrytype = self::getEntryType($importer, $item);
-
- if (!$item["deleted"]) {
- logger('deleting item '.$item["id"].' uri='.$uri, LOGGER_DEBUG);
- } else {
- return;
- }
-
- if ($item["object-type"] == ACTIVITY_OBJ_EVENT) {
- logger("Deleting event ".$item["event-id"], LOGGER_DEBUG);
- event_delete($item["event-id"]);
- }
-
- if (($item["verb"] == ACTIVITY_TAG) && ($item["object-type"] == ACTIVITY_OBJ_TAGTERM)) {
- $xo = XML::parseString($item["object"], false);
- $xt = XML::parseString($item["target"], false);
-
- if ($xt->type == ACTIVITY_OBJ_NOTE) {
- $i = q(
- "SELECT `id`, `contact-id`, `tag` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
- dbesc($xt->id),
- intval($importer["importer_uid"])
- );
- if (DBM::is_result($i)) {
- // For tags, the owner cannot remove the tag on the author's copy of the post.
-
- $owner_remove = (($item["contact-id"] == $i[0]["contact-id"]) ? true: false);
- $author_remove = (($item["origin"] && $item["self"]) ? true : false);
- $author_copy = (($item["origin"]) ? true : false);
+ }
- if ($owner_remove && $author_copy) {
- return;
- }
- if ($author_remove || $owner_remove) {
- $tags = explode(',', $i[0]["tag"]);
- $newtags = [];
- if (count($tags)) {
- foreach ($tags as $tag) {
- if (trim($tag) !== trim($xo->body)) {
- $newtags[] = trim($tag);
- }
- }
- }
- q(
- "UPDATE `item` SET `tag` = '%s' WHERE `id` = %d",
- dbesc(implode(',', $newtags)),
- intval($i[0]["id"])
- );
- create_tags_from_item($i[0]["id"]);
- }
- }
- }
- }
+ $entrytype = self::getEntryType($importer, $item);
- if ($entrytype == DFRN_TOP_LEVEL) {
- $r = q(
- "UPDATE `item` SET `deleted` = 1, `edited` = '%s', `changed` = '%s',
- `body` = '', `title` = ''
- WHERE `parent-uri` = '%s' AND `uid` IN (0, %d)",
- dbesc($when),
- dbesc(Temporal::convert()),
- dbesc($uri),
- intval($importer["uid"])
- );
- create_tags_from_itemuri($uri, $importer["uid"]);
- Term::createFromItemURI($uri, $importer["uid"]);
- update_thread_uri($uri, $importer["uid"]);
- } else {
- $r = q(
- "UPDATE `item` SET `deleted` = 1, `edited` = '%s', `changed` = '%s',
- `body` = '', `title` = ''
- WHERE `uri` = '%s' AND `uid` IN (0, %d)",
- dbesc($when),
- dbesc(Temporal::convert()),
- dbesc($uri),
- intval($importer["uid"])
- );
- create_tags_from_itemuri($uri, $importer["uid"]);
- Term::createFromItemURI($uri, $importer["uid"]);
- update_thread_uri($uri, $importer["importer_uid"]);
+ if (!$item["deleted"]) {
+ logger('deleting item '.$item["id"].' uri='.$uri, LOGGER_DEBUG);
+ } else {
+ return;
+ }
- // if this is a relayed delete, propagate it to other recipients
+ Item::deleteById($item["id"]);
- if ($entrytype == DFRN_REPLY_RC) {
- logger("Notifying followers about deletion of post " . $item["id"], LOGGER_DEBUG);
- Worker::add(PRIORITY_HIGH, "Notifier", "drop", $item["id"]);
- }
+ if ($entrytype != DFRN_TOP_LEVEL) {
+ // if this is a relayed delete, propagate it to other recipients
+ if ($entrytype == DFRN_REPLY_RC) {
+ logger("Notifying followers about deletion of post " . $item["id"], LOGGER_DEBUG);
+ Worker::add(PRIORITY_HIGH, "Notifier", "drop", $item["id"]);
}
}
}
return false;
}
- $existing_edited = Temporal::convert($existing['edited']);
- $update_edited = Temporal::convert($update['edited']);
+ $existing_edited = DateTimeFormat::utc($existing['edited']);
+ $update_edited = DateTimeFormat::utc($update['edited']);
return (strcmp($existing_edited, $update_edited) < 0);
}