]> git.mxchange.org Git - friendica.git/blobdiff - src/Object/Post.php
Redirect to previous page after NON-AJAX Post delete via second parameter in /item...
[friendica.git] / src / Object / Post.php
index 4c2783874c78d0c9047b568b6078fb31415e5025..e2c1ea03c3f7186af863d9dd7efe10c9ed471c3f 100644 (file)
@@ -10,12 +10,17 @@ use Friendica\Content\Feature;
 use Friendica\Core\Addon;
 use Friendica\Core\Config;
 use Friendica\Core\L10n;
+use Friendica\Core\Logger;
 use Friendica\Core\PConfig;
-use Friendica\Database\DBM;
+use Friendica\Core\Protocol;
+use Friendica\Core\Renderer;
+use Friendica\Database\DBA;
 use Friendica\Model\Contact;
+use Friendica\Model\Item;
+use Friendica\Model\Term;
 use Friendica\Util\DateTimeFormat;
+use Friendica\Util\Proxy as ProxyUtils;
 use Friendica\Util\Temporal;
-use dba;
 
 require_once 'include/dba.php';
 require_once 'include/text.php';
@@ -70,8 +75,10 @@ class Post extends BaseObject
                }
 
                $this->writable = $this->getDataValue('writable') || $this->getDataValue('self');
-               $this->redirect_url = Contact::magicLinkById($this->getDataValue('cid'));
-
+               $author = ['uid' => 0, 'id' => $this->getDataValue('author-id'),
+                       'network' => $this->getDataValue('author-network'),
+                       'url' => $this->getDataValue('author-link')];
+               $this->redirect_url = Contact::magicLinkbyContact($author);
                if (!$this->isToplevel()) {
                        $this->threaded = true;
                }
@@ -80,14 +87,14 @@ class Post extends BaseObject
                if (!empty($data['children'])) {
                        foreach ($data['children'] as $item) {
                                // Only add will be displayed
-                               if ($item['network'] === NETWORK_MAIL && local_user() != $item['uid']) {
+                               if ($item['network'] === Protocol::MAIL && local_user() != $item['uid']) {
                                        continue;
                                } elseif (!visible_activity($item)) {
                                        continue;
                                }
 
                                // You can always comment on Diaspora and OStatus items
-                               if (in_array($item['network'], [NETWORK_OSTATUS, NETWORK_DIASPORA]) && (local_user() == $item['uid'])) {
+                               if (in_array($item['network'], [Protocol::OSTATUS, Protocol::DIASPORA]) && (local_user() == $item['uid'])) {
                                        $item['writable'] = true;
                                }
 
@@ -109,8 +116,6 @@ class Post extends BaseObject
         */
        public function getTemplateData($conv_responses, $thread_level = 1)
        {
-               require_once "mod/proxy.php";
-
                $result = [];
 
                $a = self::getApp();
@@ -147,6 +152,7 @@ class Post extends BaseObject
                        || strlen($item['deny_cid']) || strlen($item['deny_gid']))))
                        ? L10n::t('Private Message')
                        : false);
+
                $shareable = in_array($conv->getProfileOwner(), [0, local_user()]) && $item['private'] != 1;
 
                if (local_user() && link_compare($a->contact['url'], $item['author-link'])) {
@@ -176,8 +182,8 @@ class Post extends BaseObject
                if (!$origin) {
                        /// @todo This shouldn't be done as query here, but better during the data creation.
                        // it is now done here, since during the RC phase we shouldn't make to intense changes.
-                       $parent = dba::selectFirst('item', ['origin'], ['id' => $item['parent']]);
-                       if (DBM::is_result($parent)) {
+                       $parent = Item::selectFirst(['origin'], ['id' => $item['parent']]);
+                       if (DBA::isResult($parent)) {
                                $origin = $parent['origin'];
                        }
                }
@@ -192,26 +198,26 @@ class Post extends BaseObject
                        'delete'   => $delete,
                ];
 
-               if (!local_user()) {
+               if (!local_user() || ($item['uid'] == 0)) {
                        $drop = false;
                }
 
                $filer = (($conv->getProfileOwner() == local_user() && ($item['uid'] != 0)) ? L10n::t("save to folder") : false);
 
-               if ($item['network'] == NETWORK_FEED) {
-                       $item['author-avatar'] = $item['contact-avatar'];
-                       $item['author-name'] = $item['contact-name'];
-                       $item['owner-avatar'] = $item['contact-avatar'];
-                       $item['owner-name'] = $item['contact-name'];
+               $profile_name = htmlentities($item['author-name']);
+               if (!empty($item['author-link']) && empty($item['author-name'])) {
+                       $profile_name = $item['author-link'];
                }
 
-               $diff_author = !link_compare($item['url'], $item['author-link']);
-               $profile_name = htmlentities(((strlen($item['author-name'])) && $diff_author) ? $item['author-name'] : $item['name']);
-               if ($item['author-link'] && (!$item['author-name'])) {
-                       $profile_name = $item['author-link'];
+               $author = ['uid' => 0, 'id' => $item['author-id'],
+                       'network' => $item['author-network'], 'url' => $item['author-link']];
+
+               if (local_user() || remote_user()) {
+                       $profile_link = Contact::magicLinkbyContact($author);
+               } else {
+                       $profile_link = $item['author-link'];
                }
 
-               $profile_link = Contact::magicLinkById($item['author-id']);
                if (strpos($profile_link, 'redir/') === 0) {
                        $sparkle = ' sparkle';
                }
@@ -255,6 +261,18 @@ class Post extends BaseObject
                $tagger = '';
 
                if ($this->isToplevel()) {
+                       $thread = Item::selectFirstThreadForUser(local_user(), ['ignored'], ['iid' => $item['id']]);
+                       if (DBA::isResult($thread)) {
+                               $ignore = [
+                                       'do'        => L10n::t("ignore thread"),
+                                       'undo'      => L10n::t("unignore thread"),
+                                       'toggle'    => L10n::t("toggle ignore status"),
+                                       'classdo'   => $thread['ignored'] ? "hidden" : "",
+                                       'classundo' => $thread['ignored'] ? "" : "hidden",
+                                       'ignored'   => L10n::t('ignored'),
+                               ];
+                       }
+
                        if ($conv->getProfileOwner() == local_user() && ($item['uid'] != 0)) {
                                $isstarred = (($item['starred']) ? "starred" : "unstarred");
 
@@ -267,18 +285,6 @@ class Post extends BaseObject
                                        'starred'   => L10n::t('starred'),
                                ];
 
-                               $thread = dba::selectFirst('thread', ['ignored'], ['uid' => $item['uid'], 'iid' => $item['id']]);
-                               if (DBM::is_result($thread)) {
-                                       $ignore = [
-                                               'do'        => L10n::t("ignore thread"),
-                                               'undo'      => L10n::t("unignore thread"),
-                                               'toggle'    => L10n::t("toggle ignore status"),
-                                               'classdo'   => $thread['ignored'] ? "hidden" : "",
-                                               'classundo' => $thread['ignored'] ? "" : "hidden",
-                                               'ignored'   => L10n::t('ignored'),
-                                       ];
-                               }
-
                                if (Feature::isEnabled($conv->getProfileOwner(), 'commtag')) {
                                        $tagger = [
                                                'add'   => L10n::t("add tag"),
@@ -326,27 +332,29 @@ class Post extends BaseObject
                $owner_name_e = $this->getOwnerName();
 
                // Disable features that aren't available in several networks
-               if (!in_array($item["item_network"], [NETWORK_DFRN, NETWORK_DIASPORA]) && isset($buttons["dislike"])) {
+               if (!in_array($item["network"], [Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA]) && isset($buttons["dislike"])) {
                        unset($buttons["dislike"]);
                        $isevent = false;
                        $tagger = '';
                }
 
-               if (($item["item_network"] == NETWORK_FEED) && isset($buttons["like"])) {
+               if (($item["network"] == Protocol::FEED) && isset($buttons["like"])) {
                        unset($buttons["like"]);
                }
 
-               if (($item["item_network"] == NETWORK_MAIL) && isset($buttons["like"])) {
+               if (($item["network"] == Protocol::MAIL) && isset($buttons["like"])) {
                        unset($buttons["like"]);
                }
 
+               $tags = Term::populateTagsFromItem($item);
+
                $tmp_item = [
                        'template'        => $this->getTemplate(),
                        'type'            => implode("", array_slice(explode("/", $item['verb']), -1)),
                        'suppress_tags'   => Config::get('system', 'suppress_tags'),
-                       'tags'            => $item['tags'],
-                       'hashtags'        => $item['hashtags'],
-                       'mentions'        => $item['mentions'],
+                       'tags'            => $tags['tags'],
+                       'hashtags'        => $tags['hashtags'],
+                       'mentions'        => $tags['mentions'],
                        'txt_cats'        => L10n::t('Categories:'),
                        'txt_folders'     => L10n::t('Filed under:'),
                        'has_cats'        => ((count($categories)) ? 'true' : ''),
@@ -359,8 +367,8 @@ class Post extends BaseObject
                        'guid'            => urlencode($item['guid']),
                        'isevent'         => $isevent,
                        'attend'          => $attend,
-                       'linktitle'       => L10n::t('View %s\'s profile @ %s', $profile_name, defaults($item, 'author-link', $item['url'])),
-                       'olinktitle'      => L10n::t('View %s\'s profile @ %s', htmlentities($this->getOwnerName()), defaults($item, 'owner-link', $item['url'])),
+                       'linktitle'       => L10n::t('View %s\'s profile @ %s', $profile_name, $item['author-link']),
+                       'olinktitle'      => L10n::t('View %s\'s profile @ %s', htmlentities($this->getOwnerName()), $item['owner-link']),
                        'to'              => L10n::t('to'),
                        'via'             => L10n::t('via'),
                        'wall'            => L10n::t('Wall-to-Wall'),
@@ -368,7 +376,7 @@ class Post extends BaseObject
                        'profile_url'     => $profile_link,
                        'item_photo_menu' => item_photo_menu($item),
                        'name'            => $name_e,
-                       'thumb'           => $a->remove_baseurl(proxy_url($item['author-avatar'], false, PROXY_SIZE_THUMB)),
+                       'thumb'           => $a->removeBaseURL(ProxyUtils::proxifyUrl($item['author-avatar'], false, ProxyUtils::SIZE_THUMB)),
                        'osparkle'        => $osparkle,
                        'sparkle'         => $sparkle,
                        'title'           => $title_e,
@@ -381,7 +389,7 @@ class Post extends BaseObject
                        'indent'          => $indent,
                        'shiny'           => $shiny,
                        'owner_url'       => $this->getOwnerUrl(),
-                       'owner_photo'     => $a->remove_baseurl(proxy_url($item['owner-avatar'], false, PROXY_SIZE_THUMB)),
+                       'owner_photo'     => $a->removeBaseURL(ProxyUtils::proxifyUrl($item['owner-avatar'], false, ProxyUtils::SIZE_THUMB)),
                        'owner_name'      => htmlentities($owner_name_e),
                        'plink'           => get_plink($item),
                        'edpost'          => Feature::isEnabled($conv->getProfileOwner(), 'edit_posts') ? $edpost : '',
@@ -401,11 +409,12 @@ class Post extends BaseObject
                        'wait'            => L10n::t('Please wait'),
                        'thread_level'    => $thread_level,
                        'edited'          => $edited,
-                       'network'         => $item["item_network"],
-                       'network_name'    => ContactSelector::networkToName($item['item_network'], $profile_link),
+                       'network'         => $item["network"],
+                       'network_name'    => ContactSelector::networkToName($item['network'], $item['author-link']),
                        'received'        => $item['received'],
                        'commented'       => $item['commented'],
                        'created_date'    => $item['created'],
+                       'return'          => ($a->cmd) ? bin2hex($a->cmd) : '',
                ];
 
                $arr = ['item' => $item, 'output' => $tmp_item];
@@ -481,16 +490,16 @@ class Post extends BaseObject
        {
                $item_id = $item->getId();
                if (!$item_id) {
-                       logger('[ERROR] Post::addChild : Item has no ID!!', LOGGER_DEBUG);
+                       Logger::log('[ERROR] Post::addChild : Item has no ID!!', Logger::DEBUG);
                        return false;
                } elseif ($this->getChild($item->getId())) {
-                       logger('[WARN] Post::addChild : Item already exists (' . $item->getId() . ').', LOGGER_DEBUG);
+                       Logger::log('[WARN] Post::addChild : Item already exists (' . $item->getId() . ').', Logger::DEBUG);
                        return false;
                }
                /*
                 * Only add what will be displayed
                 */
-               if ($item->getDataValue('network') === NETWORK_MAIL && local_user() != $item->getDataValue('uid')) {
+               if ($item->getDataValue('network') === Protocol::MAIL && local_user() != $item->getDataValue('uid')) {
                        return false;
                } elseif (activity_match($item->getDataValue('verb'), ACTIVITY_LIKE) || activity_match($item->getDataValue('verb'), ACTIVITY_DISLIKE)) {
                        return false;
@@ -578,7 +587,7 @@ class Post extends BaseObject
                                return true;
                        }
                }
-               logger('[WARN] Item::removeChild : Item is not a child (' . $id . ').', LOGGER_DEBUG);
+               Logger::log('[WARN] Item::removeChild : Item is not a child (' . $id . ').', Logger::DEBUG);
                return false;
        }
 
@@ -644,7 +653,7 @@ class Post extends BaseObject
        public function getDataValue($name)
        {
                if (!isset($this->data[$name])) {
-                       // logger('[ERROR] Item::getDataValue : Item has no value name "'. $name .'".', LOGGER_DEBUG);
+                       // Logger::log('[ERROR] Item::getDataValue : Item has no value name "'. $name .'".', Logger::DEBUG);
                        return false;
                }
 
@@ -661,7 +670,7 @@ class Post extends BaseObject
        private function setTemplate($name)
        {
                if (!x($this->available_templates, $name)) {
-                       logger('[ERROR] Item::setTemplate : Template not available ("' . $name . '").', LOGGER_DEBUG);
+                       Logger::log('[ERROR] Item::setTemplate : Template not available ("' . $name . '").', Logger::DEBUG);
                        return false;
                }
 
@@ -765,7 +774,7 @@ class Post extends BaseObject
                         * Hmmm, code depending on the presence of a particular addon?
                         * This should be better if done by a hook
                         */
-                       if (in_array('qcomment', $a->addons)) {
+                       if (Addon::isEnabled('qcomment')) {
                                $qc = ((local_user()) ? PConfig::get(local_user(), 'qcomment', 'words') : null);
                                $qcomment = (($qc) ? explode("\n", $qc) : null);
                        }
@@ -778,19 +787,19 @@ class Post extends BaseObject
                                $uid = $parent_uid;
                        }
 
-                       $template = get_markup_template($this->getCommentBoxTemplate());
-                       $comment_box = replace_macros($template, [
+                       $template = Renderer::getMarkupTemplate($this->getCommentBoxTemplate());
+                       $comment_box = Renderer::replaceMacros($template, [
                                '$return_path' => $a->query_string,
                                '$threaded'    => $this->isThreaded(),
                                '$jsreload'    => '',
-                               '$type'        => $conv->getMode() === 'profile' ? 'wall-comment' : 'net-comment',
+                               '$wall'        => ($conv->getMode() === 'profile'),
                                '$id'          => $this->getId(),
                                '$parent'      => $this->getId(),
                                '$qcomment'    => $qcomment,
                                '$profile_uid' => $uid,
-                               '$mylink'      => $a->remove_baseurl($a->contact['url']),
+                               '$mylink'      => $a->removeBaseURL($a->contact['url']),
                                '$mytitle'     => L10n::t('This is you'),
-                               '$myphoto'     => $a->remove_baseurl($a->contact['thumb']),
+                               '$myphoto'     => $a->removeBaseURL($a->contact['thumb']),
                                '$comment'     => L10n::t('Comment'),
                                '$submit'      => L10n::t('Submit'),
                                '$edbold'      => L10n::t('Bold'),
@@ -800,7 +809,8 @@ class Post extends BaseObject
                                '$edcode'      => L10n::t('Code'),
                                '$edimg'       => L10n::t('Image'),
                                '$edurl'       => L10n::t('Link'),
-                               '$edvideo'     => L10n::t('Video'),
+                               '$edattach'    => L10n::t('Link or Media'),
+                               '$prompttext'  => L10n::t('Please enter a image/video/audio/webpage URL:'),
                                '$preview'     => ((Feature::isEnabled($conv->getProfileOwner(), 'preview')) ? L10n::t('Preview') : ''),
                                '$indent'      => $indent,
                                '$sourceapp'   => L10n::t($a->sourcename),
@@ -847,7 +857,7 @@ class Post extends BaseObject
                                        $alias_linkmatch = (($this->getDataValue('alias')) && link_compare($this->getDataValue('alias'), $this->getDataValue('author-link')));
                                        $owner_namematch = (($this->getDataValue('owner-name')) && $this->getDataValue('owner-name') == $this->getDataValue('author-name'));
 
-                                       if ((!$owner_linkmatch) && (!$alias_linkmatch) && (!$owner_namematch)) {
+                                       if (!$owner_linkmatch && !$alias_linkmatch && !$owner_namematch) {
                                                // The author url doesn't match the owner (typically the contact)
                                                // and also doesn't match the contact alias.
                                                // The name match is a hack to catch several weird cases where URLs are
@@ -860,7 +870,11 @@ class Post extends BaseObject
                                                $this->owner_photo = $this->getDataValue('owner-avatar');
                                                $this->owner_name = $this->getDataValue('owner-name');
                                                $this->wall_to_wall = true;
-                                               $this->owner_url = Contact::magicLinkById($this->getDataValue('owner-id'));
+
+                                               $owner = ['uid' => 0, 'id' => $this->getDataValue('owner-id'),
+                                                       'network' => $this->getDataValue('owner-network'),
+                                                       'url' => $this->getDataValue('owner-link')];
+                                               $this->owner_url = Contact::magicLinkbyContact($owner);
                                        }
                                }
                        }