use Friendica\App;
use Friendica\Content\OEmbed;
use Friendica\Content\Text\BBCode;
+use Friendica\Content\Text\HTML;
use Friendica\Core\Addon;
use Friendica\Core\Config;
use Friendica\Core\L10n;
use Friendica\Core\Worker;
use Friendica\Database\DBM;
use Friendica\Model\Contact;
+use Friendica\Model\Event;
use Friendica\Model\GContact;
use Friendica\Model\Group;
use Friendica\Model\Item;
use Friendica\Model\Profile;
-use Friendica\Model\Term;
use Friendica\Model\User;
use Friendica\Object\Image;
use Friendica\Protocol\OStatus;
require_once 'include/dba.php';
require_once "include/enotify.php";
require_once "include/items.php";
-require_once "include/event.php";
require_once "include/text.php";
-require_once "include/html2bbcode.php";
/**
* @brief This class contain functions to create and send DFRN XML files
$author["name"] = $xpath->evaluate($element."/atom:name/text()", $context)->item(0)->nodeValue;
$author["link"] = $xpath->evaluate($element."/atom:uri/text()", $context)->item(0)->nodeValue;
- $contact_old = dba::fetch_first("SELECT `id`, `uid`, `url`, `network`, `avatar-date`, `name-date`, `uri-date`, `addr`,
+ $contact_old = dba::fetch_first("SELECT `id`, `uid`, `url`, `network`, `avatar-date`, `avatar`, `name-date`, `uri-date`, `addr`,
`name`, `nick`, `about`, `location`, `keywords`, `xmpp`, `bdyear`, `bd`, `hidden`, `contact-type`
FROM `contact` WHERE `uid` = ? AND `nurl` = ? AND `network` != ?",
$importer["uid"],
$width = $attributes->textContent;
}
if ($attributes->name == "updated") {
- $contact_old["avatar-date"] = $attributes->textContent;
+ $author["avatar-date"] = $attributes->textContent;
}
}
if (($width > 0) && ($href != "")) {
unset($fields["uid"]);
unset($fields["url"]);
unset($fields["avatar-date"]);
+ unset($fields["avatar"]);
unset($fields["name-date"]);
unset($fields["uri-date"]);
}
Contact::updateAvatar(
- $author["avatar"],
- $importer["uid"],
- $contact["id"],
- (strtotime($contact["avatar-date"]) > strtotime($contact_old["avatar-date"]))
+ $author['avatar'],
+ $importer['uid'],
+ $contact['id'],
+ (strtotime($contact['avatar-date']) > strtotime($contact_old['avatar-date']) || ($author['avatar'] != $contact_old['avatar']))
);
/*
GContact::link($gcid, $importer["uid"], $contact["id"]);
}
- return($author);
+ return $author;
}
/**
return false;
}
- $fields = ['title' => $item["title"], 'body' => $item["body"],
- 'tag' => $item["tag"], 'changed' => DateTimeFormat::utcNow(),
+ $fields = ['title' => defaults($item, 'title', ''), 'body' => defaults($item, 'body', ''),
+ 'tag' => defaults($item, 'tag', ''), 'changed' => DateTimeFormat::utcNow(),
'edited' => DateTimeFormat::utc($item["edited"])];
$condition = ["`uri` = ? AND `uid` IN (0, ?)", $item["uri"], $importer["importer_uid"]];
$purifier = new HTMLPurifier($config);
$item['body'] = $purifier->purify($item['body']);
- $item['body'] = @html2bbcode($item['body']);
+ $item['body'] = @HTML::toBBCode($item['body']);
}
/// @todo We should check for a repeated post and if we know the repeated author.
// Is it an event?
if ($item["object-type"] == ACTIVITY_OBJ_EVENT) {
logger("Item ".$item["uri"]." seems to contain an event.", LOGGER_DEBUG);
- $ev = bbtoevent($item["body"]);
+ $ev = Event::fromBBCode($item["body"]);
if ((x($ev, "desc") || x($ev, "summary")) && x($ev, "start")) {
logger("Event in item ".$item["uri"]." was found.", LOGGER_DEBUG);
$ev["cid"] = $importer["id"];
$ev["id"] = $r[0]["id"];
}
- $event_id = event_store($ev);
+ $event_id = Event::store($ev);
logger("Event ".$event_id." was stored", LOGGER_DEBUG);
return;
}
return false;
}
- $condition = ["`uri` = ? AND `uid` = ? AND `contact-id` = ? AND NOT `file` LIKE '%[%'",
- $uri, $importer["uid"], $importer["id"]];
- $item = dba::selectFirst('item', ['id'], $condition);
+ $condition = ["`uri` = ? AND `uid` = ? AND NOT `file` LIKE '%[%'", $uri, $importer["uid"]];
+ $item = dba::selectFirst('item', ['id', 'parent', 'contact-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);
+ logger("Item with uri " . $uri . " for user " . $importer["uid"] . " wasn't found.", LOGGER_DEBUG);
+ return;
+ }
+
+ // When it is a starting post it has to belong to the person that wants to delete it
+ if (($item['id'] == $item['parent']) && ($item['contact-id'] != $importer["id"])) {
+ logger("Item with uri " . $uri . " don't belong to contact " . $importer["id"] . " - ignoring deletion.", LOGGER_DEBUG);
return;
}
+ // Comments can be deleted by the thread owner or comment owner
+ if (($item['id'] != $item['parent']) && ($item['contact-id'] != $importer["id"])) {
+ $condition = ['id' => $item['parent'], 'contact-id' => $importer["id"]];
+ if (!dba::exists('item', $condition)) {
+ logger("Item with uri " . $uri . " wasn't found or mustn't be deleted by contact " . $importer["id"] . " - ignoring deletion.", LOGGER_DEBUG);
+ return;
+ }
+ }
+
$entrytype = self::getEntryType($importer, $item);
if (!$item["deleted"]) {