]> git.mxchange.org Git - friendica.git/blobdiff - src/Protocol/DFRN.php
Merge pull request #4700 from tobiasd/20180328-translationdocs
[friendica.git] / src / Protocol / DFRN.php
index 5fe47ac5fdf2ef61563b6e6b5bead486b4ee6336..429c5051ffb4a9006e52d86f3f3b04785817a04f 100644 (file)
@@ -11,6 +11,7 @@ namespace Friendica\Protocol;
 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;
@@ -18,11 +19,11 @@ use Friendica\Core\System;
 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;
@@ -40,10 +41,7 @@ require_once 'boot.php';
 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";
-require_once "include/bbcode.php";
 
 /**
  * @brief This class contain functions to create and send DFRN XML files
@@ -832,7 +830,7 @@ class DFRN
                                }
                        }
                        if ($r->content) {
-                               XML::addElement($doc, $entry, "content", bbcode($r->content), ["type" => "html"]);
+                               XML::addElement($doc, $entry, "content", BBCode::convert($r->content), ["type" => "html"]);
                        }
 
                        return $entry;
@@ -938,7 +936,7 @@ class DFRN
                                $htmlbody = "[b]".$item['title']."[/b]\n\n".$htmlbody;
                        }
 
-                       $htmlbody = bbcode($htmlbody, false, false, 7);
+                       $htmlbody = BBCode::convert($htmlbody, false, 7);
                }
 
                $author = self::addEntryAuthor($doc, "author", $item["author-link"], $item);
@@ -1432,7 +1430,7 @@ class DFRN
                $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"],
@@ -1469,7 +1467,7 @@ class DFRN
                                        $width = $attributes->textContent;
                                }
                                if ($attributes->name == "updated") {
-                                       $contact_old["avatar-date"] = $attributes->textContent;
+                                       $author["avatar-date"] = $attributes->textContent;
                                }
                        }
                        if (($width > 0) && ($href != "")) {
@@ -1602,6 +1600,7 @@ class DFRN
                        unset($fields["uid"]);
                        unset($fields["url"]);
                        unset($fields["avatar-date"]);
+                       unset($fields["avatar"]);
                        unset($fields["name-date"]);
                        unset($fields["uri-date"]);
 
@@ -1639,10 +1638,10 @@ class DFRN
                        }
 
                        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']))
                        );
 
                        /*
@@ -1661,7 +1660,7 @@ class DFRN
                        GContact::link($gcid, $importer["uid"], $contact["id"]);
                }
 
-               return($author);
+               return $author;
        }
 
        /**
@@ -2079,8 +2078,8 @@ class DFRN
                                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"]];
@@ -2454,7 +2453,7 @@ class DFRN
                        $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.
@@ -2614,7 +2613,7 @@ class DFRN
                        // 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"];
@@ -2633,7 +2632,7 @@ class DFRN
                                                $ev["id"] = $r[0]["id"];
                                        }
 
-                                       $event_id = event_store($ev);
+                                       $event_id = Event::store($ev);
                                        logger("Event ".$event_id." was stored", LOGGER_DEBUG);
                                        return;
                                }
@@ -2737,14 +2736,28 @@ class DFRN
                        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"]) {