]> git.mxchange.org Git - friendica.git/commitdiff
Move handle_tag() to Content\Item::replaceTag
authorHypolite Petovan <hypolite@mrpetovan.com>
Wed, 10 Jun 2020 14:13:32 +0000 (10:13 -0400)
committerHypolite Petovan <hypolite@mrpetovan.com>
Wed, 10 Jun 2020 14:13:32 +0000 (10:13 -0400)
mod/item.php
src/Content/Item.php

index 31336c4348ae41ae6188acb650c59abb89813d05..18efd67babf74c51fc830bb846e91b68ec053c5d 100644 (file)
@@ -29,6 +29,7 @@
  */
 
 use Friendica\App;
+use Friendica\Content\Item as ItemHelper;
 use Friendica\Content\Text\BBCode;
 use Friendica\Core\Hook;
 use Friendica\Core\Logger;
@@ -395,7 +396,7 @@ function item_post(App $a) {
                                }
                        }
 
-                       $success = handle_tag($body, $inform, local_user() ? local_user() : $profile_uid, $tag, $network);
+                       $success = ItemHelper::replaceTag($body, $inform, local_user() ? local_user() : $profile_uid, $tag, $network);
                        if ($success['replaced']) {
                                $tagged[] = $tag;
                        }
@@ -868,123 +869,3 @@ function item_content(App $a)
 
        return $o;
 }
-
-/**
- * This function removes the tag $tag from the text $body and replaces it with
- * the appropriate link.
- *
- * @param App     $a
- * @param string  $body     the text to replace the tag in
- * @param string  $inform   a comma-seperated string containing everybody to inform
- * @param integer $profile_uid
- * @param string  $tag      the tag to replace
- * @param string  $network  The network of the post
- *
- * @return array|bool ['replaced' => $replaced, 'contact' => $contact];
- * @throws ImagickException
- * @throws HTTPException\InternalServerErrorException
- */
-function handle_tag(&$body, &$inform, $profile_uid, $tag, $network = "")
-{
-       $replaced = false;
-
-       //is it a person tag?
-       if (Tag::isType($tag, Tag::MENTION, Tag::IMPLICIT_MENTION, Tag::EXCLUSIVE_MENTION)) {
-               $tag_type = substr($tag, 0, 1);
-               //is it already replaced?
-               if (strpos($tag, '[url=')) {
-                       // Checking for the alias that is used for OStatus
-                       $pattern = "/[@!]\[url\=(.*?)\](.*?)\[\/url\]/ism";
-                       if (preg_match($pattern, $tag, $matches)) {
-                               $data = Contact::getDetailsByURL($matches[1]);
-
-                               if ($data["alias"] != "") {
-                                       $newtag = '@[url=' . $data["alias"] . ']' . $data["nick"] . '[/url]';
-                               }
-                       }
-
-                       return $replaced;
-               }
-
-               //get the person's name
-               $name = substr($tag, 1);
-
-               // Sometimes the tag detection doesn't seem to work right
-               // This is some workaround
-               $nameparts = explode(" ", $name);
-               $name = $nameparts[0];
-
-               // Try to detect the contact in various ways
-               if (strpos($name, 'http://')) {
-                       // At first we have to ensure that the contact exists
-                       Contact::getIdForURL($name);
-
-                       // Now we should have something
-                       $contact = Contact::getDetailsByURL($name);
-               } elseif (strpos($name, '@')) {
-                       // This function automatically probes when no entry was found
-                       $contact = Contact::getDetailsByAddr($name);
-               } else {
-                       $contact = false;
-                       $fields = ['id', 'url', 'nick', 'name', 'alias', 'network', 'forum', 'prv'];
-
-                       if (strrpos($name, '+')) {
-                               // Is it in format @nick+number?
-                               $tagcid = intval(substr($name, strrpos($name, '+') + 1));
-                               $contact = DBA::selectFirst('contact', $fields, ['id' => $tagcid, 'uid' => $profile_uid]);
-                       }
-
-                       // select someone by nick or attag in the current network
-                       if (!DBA::isResult($contact) && ($network != "")) {
-                               $condition = ["(`nick` = ? OR `attag` = ?) AND `network` = ? AND `uid` = ?",
-                                               $name, $name, $network, $profile_uid];
-                               $contact = DBA::selectFirst('contact', $fields, $condition);
-                       }
-
-                       //select someone by name in the current network
-                       if (!DBA::isResult($contact) && ($network != "")) {
-                               $condition = ['name' => $name, 'network' => $network, 'uid' => $profile_uid];
-                               $contact = DBA::selectFirst('contact', $fields, $condition);
-                       }
-
-                       // select someone by nick or attag in any network
-                       if (!DBA::isResult($contact)) {
-                               $condition = ["(`nick` = ? OR `attag` = ?) AND `uid` = ?", $name, $name, $profile_uid];
-                               $contact = DBA::selectFirst('contact', $fields, $condition);
-                       }
-
-                       // select someone by name in any network
-                       if (!DBA::isResult($contact)) {
-                               $condition = ['name' => $name, 'uid' => $profile_uid];
-                               $contact = DBA::selectFirst('contact', $fields, $condition);
-                       }
-               }
-
-               // Check if $contact has been successfully loaded
-               if (DBA::isResult($contact)) {
-                       if (strlen($inform) && (isset($contact["notify"]) || isset($contact["id"]))) {
-                               $inform .= ',';
-                       }
-
-                       if (isset($contact["id"])) {
-                               $inform .= 'cid:' . $contact["id"];
-                       } elseif (isset($contact["notify"])) {
-                               $inform  .= $contact["notify"];
-                       }
-
-                       $profile = $contact["url"];
-                       $newname = ($contact["name"] ?? '') ?: $contact["nick"];
-               }
-
-               //if there is an url for this persons profile
-               if (isset($profile) && ($newname != "")) {
-                       $replaced = true;
-                       // create profile link
-                       $profile = str_replace(',', '%2c', $profile);
-                       $newtag = $tag_type.'[url=' . $profile . ']' . $newname . '[/url]';
-                       $body = str_replace($tag_type . $name, $newtag, $body);
-               }
-       }
-
-       return ['replaced' => $replaced, 'contact' => $contact];
-}
index 51a14435ef16e736750a383a108a128c388ef587..40deb976c778386df3ba3793cb5386b0983b6e00 100644 (file)
 
 namespace Friendica\Content;
 
+use Friendica\Database\DBA;
+use Friendica\Model\Contact;
 use Friendica\Model\FileTag;
+use Friendica\Model\Tag;
 
 /**
  * A content helper class for displaying items
@@ -100,4 +103,123 @@ class Item
 
                return [$categories, $folders];
        }
+
+       /**
+        * This function removes the tag $tag from the text $body and replaces it with
+        * the appropriate link.
+        *
+        * @param string  $body        the text to replace the tag in
+        * @param string  $inform      a comma-seperated string containing everybody to inform
+        * @param integer $profile_uid the user id to replace the tag for (0 = anyone)
+        * @param string  $tag         the tag to replace
+        * @param string  $network     The network of the post
+        *
+        * @return array|bool ['replaced' => $replaced, 'contact' => $contact];
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
+        * @throws \ImagickException
+        */
+       public static function replaceTag(&$body, &$inform, $profile_uid, $tag, $network = '')
+       {
+               $replaced = false;
+
+               //is it a person tag?
+               if (Tag::isType($tag, Tag::MENTION, Tag::IMPLICIT_MENTION, Tag::EXCLUSIVE_MENTION)) {
+                       $tag_type = substr($tag, 0, 1);
+                       //is it already replaced?
+                       if (strpos($tag, '[url=')) {
+                               // Checking for the alias that is used for OStatus
+                               $pattern = '/[@!]\[url\=(.*?)\](.*?)\[\/url\]/ism';
+                               if (preg_match($pattern, $tag, $matches)) {
+                                       $data = Contact::getDetailsByURL($matches[1]);
+
+                                       if ($data['alias'] != '') {
+                                               $newtag = '@[url=' . $data['alias'] . ']' . $data['nick'] . '[/url]';
+                                       }
+                               }
+
+                               return $replaced;
+                       }
+
+                       //get the person's name
+                       $name = substr($tag, 1);
+
+                       // Sometimes the tag detection doesn't seem to work right
+                       // This is some workaround
+                       $nameparts = explode(' ', $name);
+                       $name = $nameparts[0];
+
+                       // Try to detect the contact in various ways
+                       if (strpos($name, 'http://')) {
+                               // At first we have to ensure that the contact exists
+                               Contact::getIdForURL($name);
+
+                               // Now we should have something
+                               $contact = Contact::getDetailsByURL($name, $profile_uid);
+                       } elseif (strpos($name, '@')) {
+                               // This function automatically probes when no entry was found
+                               $contact = Contact::getDetailsByAddr($name, $profile_uid);
+                       } else {
+                               $contact = false;
+                               $fields = ['id', 'url', 'nick', 'name', 'alias', 'network', 'forum', 'prv'];
+
+                               if (strrpos($name, '+')) {
+                                       // Is it in format @nick+number?
+                                       $tagcid = intval(substr($name, strrpos($name, '+') + 1));
+                                       $contact = DBA::selectFirst('contact', $fields, ['id' => $tagcid, 'uid' => $profile_uid]);
+                               }
+
+                               // select someone by nick or attag in the current network
+                               if (!DBA::isResult($contact) && ($network != '')) {
+                                       $condition = ["(`nick` = ? OR `attag` = ?) AND `network` = ? AND `uid` = ?",
+                                               $name, $name, $network, $profile_uid];
+                                       $contact = DBA::selectFirst('contact', $fields, $condition);
+                               }
+
+                               //select someone by name in the current network
+                               if (!DBA::isResult($contact) && ($network != '')) {
+                                       $condition = ['name' => $name, 'network' => $network, 'uid' => $profile_uid];
+                                       $contact = DBA::selectFirst('contact', $fields, $condition);
+                               }
+
+                               // select someone by nick or attag in any network
+                               if (!DBA::isResult($contact)) {
+                                       $condition = ["(`nick` = ? OR `attag` = ?) AND `uid` = ?", $name, $name, $profile_uid];
+                                       $contact = DBA::selectFirst('contact', $fields, $condition);
+                               }
+
+                               // select someone by name in any network
+                               if (!DBA::isResult($contact)) {
+                                       $condition = ['name' => $name, 'uid' => $profile_uid];
+                                       $contact = DBA::selectFirst('contact', $fields, $condition);
+                               }
+                       }
+
+                       // Check if $contact has been successfully loaded
+                       if (DBA::isResult($contact)) {
+                               if (strlen($inform) && (isset($contact['notify']) || isset($contact['id']))) {
+                                       $inform .= ',';
+                               }
+
+                               if (isset($contact['id'])) {
+                                       $inform .= 'cid:' . $contact['id'];
+                               } elseif (isset($contact['notify'])) {
+                                       $inform  .= $contact['notify'];
+                               }
+
+                               $profile = $contact['url'];
+                               $newname = ($contact['name'] ?? '') ?: $contact['nick'];
+                       }
+
+                       //if there is an url for this persons profile
+                       if (isset($profile) && ($newname != '')) {
+                               $replaced = true;
+                               // create profile link
+                               $profile = str_replace(',', '%2c', $profile);
+                               $newtag = $tag_type.'[url=' . $profile . ']' . $newname . '[/url]';
+                               $body = str_replace($tag_type . $name, $newtag, $body);
+                       }
+               }
+
+               return ['replaced' => $replaced, 'contact' => $contact];
+       }
 }