X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModel%2FItem.php;h=b460d5f79fdf886364acfe50a0c7ddf99a4580e6;hb=fc0acd7b1f4723b9e45badcaae53e466e1a29b85;hp=870c9b1256c16d5cd3ab51c4a3c5334d192ec85b;hpb=85eb6affdfda6701589b49b3bd05d22247f597ce;p=friendica.git diff --git a/src/Model/Item.php b/src/Model/Item.php index 870c9b1256..b460d5f79f 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -9,8 +9,8 @@ namespace Friendica\Model; use Friendica\BaseObject; use Friendica\Content\Text\BBCode; use Friendica\Content\Text\HTML; -use Friendica\Core\Addon; use Friendica\Core\Config; +use Friendica\Core\Hook; use Friendica\Core\Lock; use Friendica\Core\Logger; use Friendica\Core\L10n; @@ -20,13 +20,6 @@ use Friendica\Core\Renderer; use Friendica\Core\System; use Friendica\Core\Worker; use Friendica\Database\DBA; -use Friendica\Model\Contact; -use Friendica\Model\Event; -use Friendica\Model\FileTag; -use Friendica\Model\PermissionSet; -use Friendica\Model\Term; -use Friendica\Model\ItemURI; -use Friendica\Object\Image; use Friendica\Protocol\Diaspora; use Friendica\Protocol\OStatus; use Friendica\Util\DateTimeFormat; @@ -190,7 +183,7 @@ class Item extends BaseObject // Fetch data from the item-content table whenever there is content there if (self::isLegacyMode()) { - $legacy_fields = array_merge(ItemDeliveryData::FIELD_LIST, self::MIXED_CONTENT_FIELDLIST); + $legacy_fields = array_merge(ItemDeliveryData::LEGACY_FIELD_LIST, self::MIXED_CONTENT_FIELDLIST); foreach ($legacy_fields as $field) { if (empty($row[$field]) && !empty($row['internal-item-' . $field])) { $row[$field] = $row['internal-item-' . $field]; @@ -261,6 +254,7 @@ class Item extends BaseObject * @brief Fills an array with data from an item query * * @param object $stmt statement object + * @param bool $do_close * @return array Data array */ public static function inArray($stmt, $do_close = true) { @@ -284,6 +278,7 @@ class Item extends BaseObject * @param array $condition array of fields for condition * * @return boolean Are there rows for that condition? + * @throws \Exception */ public static function exists($condition) { $stmt = self::select(['id'], $condition, ['limit' => 1]); @@ -304,11 +299,12 @@ class Item extends BaseObject * * @brief Retrieve a single record from a table * @param integer $uid User ID - * @param array $fields - * @param array $condition - * @param array $params + * @param array $selected + * @param array $condition + * @param array $params * @return bool|array - * @see DBA::select + * @throws \Exception + * @see DBA::select */ public static function selectFirstForUser($uid, array $selected = [], array $condition = [], $params = []) { @@ -324,12 +320,13 @@ class Item extends BaseObject /** * @brief Select rows from the item table for a given user * - * @param integer $uid User ID - * @param array $selected Array of selected fields, empty for all - * @param array $condition Array of fields for condition - * @param array $params Array of several parameters + * @param integer $uid User ID + * @param array $selected Array of selected fields, empty for all + * @param array $condition Array of fields for condition + * @param array $params Array of several parameters * * @return boolean|object + * @throws \Exception */ public static function selectForUser($uid, array $selected = [], array $condition = [], $params = []) { @@ -346,11 +343,12 @@ class Item extends BaseObject * Retrieve a single record from the item table and returns it in an associative array * * @brief Retrieve a single record from a table - * @param array $fields - * @param array $condition - * @param array $params + * @param array $fields + * @param array $condition + * @param array $params * @return bool|array - * @see DBA::select + * @throws \Exception + * @see DBA::select */ public static function selectFirst(array $fields = [], array $condition = [], $params = []) { @@ -370,11 +368,12 @@ class Item extends BaseObject /** * @brief Select rows from the item table * - * @param array $selected Array of selected fields, empty for all - * @param array $condition Array of fields for condition - * @param array $params Array of several parameters + * @param array $selected Array of selected fields, empty for all + * @param array $condition Array of fields for condition + * @param array $params Array of several parameters * * @return boolean|object + * @throws \Exception */ public static function select(array $selected = [], array $condition = [], $params = []) { @@ -410,12 +409,13 @@ class Item extends BaseObject /** * @brief Select rows from the starting post in the item table * - * @param integer $uid User ID - * @param array $fields Array of selected fields, empty for all - * @param array $condition Array of fields for condition - * @param array $params Array of several parameters + * @param integer $uid User ID + * @param array $selected + * @param array $condition Array of fields for condition + * @param array $params Array of several parameters * * @return boolean|object + * @throws \Exception */ public static function selectThreadForUser($uid, array $selected = [], array $condition = [], $params = []) { @@ -433,11 +433,12 @@ class Item extends BaseObject * * @brief Retrieve a single record from a table * @param integer $uid User ID - * @param array $selected - * @param array $condition - * @param array $params + * @param array $selected + * @param array $condition + * @param array $params * @return bool|array - * @see DBA::select + * @throws \Exception + * @see DBA::select */ public static function selectFirstThreadForUser($uid, array $selected = [], array $condition = [], $params = []) { @@ -454,11 +455,12 @@ class Item extends BaseObject * Retrieve a single record from the starting post in the item table and returns it in an associative array * * @brief Retrieve a single record from a table - * @param array $fields - * @param array $condition - * @param array $params + * @param array $fields + * @param array $condition + * @param array $params * @return bool|array - * @see DBA::select + * @throws \Exception + * @see DBA::select */ public static function selectFirstThread(array $fields = [], array $condition = [], $params = []) { @@ -477,11 +479,12 @@ class Item extends BaseObject /** * @brief Select rows from the starting post in the item table * - * @param array $selected Array of selected fields, empty for all - * @param array $condition Array of fields for condition - * @param array $params Array of several parameters + * @param array $selected Array of selected fields, empty for all + * @param array $condition Array of fields for condition + * @param array $params Array of several parameters * * @return boolean|object + * @throws \Exception */ public static function selectThread(array $selected = [], array $condition = [], $params = []) { @@ -527,6 +530,7 @@ class Item extends BaseObject /** * @brief Returns a list of fields that are associated with the item table * + * @param $usermode * @return array field list */ private static function fieldlist($usermode) @@ -551,14 +555,14 @@ class Item extends BaseObject $fields['item-content'] = array_merge(self::CONTENT_FIELDLIST, self::MIXED_CONTENT_FIELDLIST); - $fields['item-delivery-data'] = ItemDeliveryData::FIELD_LIST; + $fields['item-delivery-data'] = array_merge(ItemDeliveryData::LEGACY_FIELD_LIST, ItemDeliveryData::FIELD_LIST); $fields['permissionset'] = ['allow_cid', 'allow_gid', 'deny_cid', 'deny_gid']; - $fields['author'] = ['url' => 'author-link', 'name' => 'author-name', + $fields['author'] = ['url' => 'author-link', 'name' => 'author-name', 'addr' => 'author-addr', 'thumb' => 'author-avatar', 'nick' => 'author-nick', 'network' => 'author-network']; - $fields['owner'] = ['url' => 'owner-link', 'name' => 'owner-name', + $fields['owner'] = ['url' => 'owner-link', 'name' => 'owner-name', 'addr' => 'owner-addr', 'thumb' => 'owner-avatar', 'nick' => 'owner-nick', 'network' => 'owner-network']; $fields['contact'] = ['url' => 'contact-link', 'name' => 'contact-name', 'thumb' => 'contact-avatar', @@ -609,10 +613,11 @@ class Item extends BaseObject /** * @brief Returns all needed "JOIN" commands for the "select" functions * - * @param integer $uid User ID - * @param string $sql_commands The parts of the built SQL commands in the "select" functions - * @param boolean $thread_mode Called for the items (false) or for the threads (true) + * @param integer $uid User ID + * @param string $sql_commands The parts of the built SQL commands in the "select" functions + * @param boolean $thread_mode Called for the items (false) or for the threads (true) * + * @param $user_mode * @return string The SQL joins for the "select" functions */ private static function constructJoins($uid, $sql_commands, $thread_mode, $user_mode) @@ -726,11 +731,12 @@ class Item extends BaseObject $selected[] = 'interaction'; } + $legacy_fields = array_merge(ItemDeliveryData::LEGACY_FIELD_LIST, self::MIXED_CONTENT_FIELDLIST); + $selection = []; foreach ($fields as $table => $table_fields) { foreach ($table_fields as $field => $select) { if (empty($selected) || in_array($select, $selected)) { - $legacy_fields = array_merge(ItemDeliveryData::FIELD_LIST, self::MIXED_CONTENT_FIELDLIST); if (self::isLegacyMode() && in_array($select, $legacy_fields)) { $selection[] = "`item`.`".$select."` AS `internal-item-" . $select . "`"; } @@ -774,7 +780,7 @@ class Item extends BaseObject /** * @brief Update existing item entries * - * @param array $fields The fields that are to be changed + * @param array $fields The fields that are to be changed * @param array $condition The condition for finding the item entries * * In the future we may have to change permissions as well. @@ -783,6 +789,7 @@ class Item extends BaseObject * A return value of "0" doesn't mean an error - but that 0 rows had been changed. * * @return integer|boolean number of affected rows - or "false" if there was an error + * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ public static function update(array $fields, array $condition) { @@ -929,8 +936,9 @@ class Item extends BaseObject /** * @brief Delete an item and notify others about it - if it was ours * - * @param array $condition The condition for finding the item entries - * @param integer $priority Priority for the notification + * @param array $condition The condition for finding the item entries + * @param integer $priority Priority for the notification + * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ public static function delete($condition, $priority = PRIORITY_HIGH) { @@ -944,8 +952,9 @@ class Item extends BaseObject /** * @brief Delete an item for an user and notify others about it - if it was ours * - * @param array $condition The condition for finding the item entries - * @param integer $uid User who wants to delete this item + * @param array $condition The condition for finding the item entries + * @param integer $uid User who wants to delete this item + * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ public static function deleteForUser($condition, $uid) { @@ -970,10 +979,11 @@ class Item extends BaseObject /** * @brief Delete an item and notify others about it - if it was ours * - * @param integer $item_id Item ID that should be delete + * @param integer $item_id Item ID that should be delete * @param integer $priority Priority for the notification * * @return boolean success + * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ public static function deleteById($item_id, $priority = PRIORITY_HIGH) { @@ -1025,6 +1035,7 @@ class Item extends BaseObject * This only applies to photos uploaded from the photos page. Photos inserted into a post do not * generate a resource-id and therefore aren't intimately linked to the item. */ + /// @TODO: this should first check if photo is used elsewhere if (strlen($item['resource-id'])) { Photo::delete(['resource-id' => $item['resource-id'], 'uid' => $item['uid']]); } @@ -1035,10 +1046,11 @@ class Item extends BaseObject } // If item has attachments, drop them - foreach (explode(", ", $item['attach']) as $attach) { + /// @TODO: this should first check if attachment is used elsewhere + foreach (explode(",", $item['attach']) as $attach) { preg_match("|attach/(\d+)|", $attach, $matches); if (is_array($matches) && count($matches) > 1) { - DBA::delete('attach', ['id' => $matches[1], 'uid' => $item['uid']]); + Attach::delete(['id' => $matches[1], 'uid' => $item['uid']]); } } @@ -1224,18 +1236,24 @@ class Item extends BaseObject // This function will finally cover most of the preparation functionality in mod/item.php public static function prepare(&$item) { + /* + * @TODO: Unused code triggering inspection errors + * $data = BBCode::getAttachmentData($item['body']); if ((preg_match_all("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism", $item['body'], $match, PREG_SET_ORDER) || isset($data["type"])) && ($posttype != Item::PT_PERSONAL_NOTE)) { $posttype = Item::PT_PAGE; $objecttype = ACTIVITY_OBJ_BOOKMARK; } + */ } public static function insert($item, $force_parent = false, $notify = false, $dontcache = false) { $orig_item = $item; + $priority = PRIORITY_HIGH; + // If it is a posting where users should get notifications, then define it as wall posting if ($notify) { $item['wall'] = 1; @@ -1245,8 +1263,6 @@ class Item extends BaseObject if (is_int($notify)) { $priority = $notify; - } else { - $priority = PRIORITY_HIGH; } } else { $item['network'] = trim(defaults($item, 'network', Protocol::PHANTOM)); @@ -1607,11 +1623,11 @@ class Item extends BaseObject if ($notify) { $item['edit'] = false; $item['parent'] = $parent_id; - Addon::callHooks('post_local', $item); + Hook::callAll('post_local', $item); unset($item['edit']); unset($item['parent']); } else { - Addon::callHooks('post_remote', $item); + Hook::callAll('post_remote', $item); } // This array field is used to trigger some automatic reactions @@ -1774,19 +1790,19 @@ class Item extends BaseObject DBA::insert('diaspora-interaction', ['uri-id' => $item['uri-id'], 'interaction' => $diaspora_signed_text], true); } - $deleted = self::tagDeliver($item['uid'], $current_post); + self::tagDeliver($item['uid'], $current_post); /* * current post can be deleted if is for a community page and no mention are * in it. */ - if (!$deleted && !$dontcache) { + if (!$dontcache) { $posted_item = self::selectFirst(self::ITEM_FIELDLIST, ['id' => $current_post]); if (DBA::isResult($posted_item)) { if ($notify) { - Addon::callHooks('post_local_end', $posted_item); + Hook::callAll('post_local_end', $posted_item); } else { - Addon::callHooks('post_remote_end', $posted_item); + Hook::callAll('post_remote_end', $posted_item); } } else { Logger::log('new item not found in DB, id ' . $current_post); @@ -1834,7 +1850,7 @@ class Item extends BaseObject $cmd = 'wall-new'; } - Worker::add(['priority' => PRIORITY_HIGH, 'dont_fork' => true], 'Notifier', $cmd, $current_post); + Worker::add(['priority' => $priority, 'dont_fork' => true], 'Notifier', $cmd, $current_post); } return $current_post; @@ -1845,6 +1861,7 @@ class Item extends BaseObject * * @param array $item The item fields that are to be inserted * @return bool + * @throws \Exception */ private static function insertActivity(&$item) { @@ -1891,6 +1908,7 @@ class Item extends BaseObject * @brief Insert a new item content entry * * @param array $item The item fields that are to be inserted + * @throws \Exception */ private static function insertContent(&$item) { @@ -1929,8 +1947,10 @@ class Item extends BaseObject /** * @brief Update existing item content entries * - * @param array $item The item fields that are to be changed + * @param array $item The item fields that are to be changed * @param array $condition The condition for finding the item content entries + * @return bool + * @throws \Exception */ private static function updateActivity($item, $condition) { @@ -1955,8 +1975,9 @@ class Item extends BaseObject /** * @brief Update existing item content entries * - * @param array $item The item fields that are to be changed + * @param array $item The item fields that are to be changed * @param array $condition The condition for finding the item content entries + * @throws \Exception */ private static function updateContent($item, $condition) { @@ -1984,6 +2005,7 @@ class Item extends BaseObject * * @param integer $itemid Item ID that should be added * @param string $signed_text Original text (for Diaspora signatures), JSON encoded. + * @throws \Exception */ public static function distribute($itemid, $signed_text = '') { @@ -1997,7 +2019,7 @@ class Item extends BaseObject $condition = ['id' => $itemid, 'uid' => 0, 'network' => [Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS, ""], 'visible' => true, 'deleted' => false, 'moderated' => false, 'private' => false]; - $item = self::selectFirst(self::ITEM_FIELDLIST, ['id' => $itemid]); + $item = self::selectFirst(self::ITEM_FIELDLIST, $condition); if (!DBA::isResult($item)) { return; } @@ -2080,6 +2102,7 @@ class Item extends BaseObject * @param integer $itemid Item ID that should be added * @param array $item The item entry that will be stored * @param integer $uid The user that will receive the item entry + * @throws \Exception */ private static function storeForUser($itemid, $item, $uid) { @@ -2127,6 +2150,7 @@ class Item extends BaseObject * It is planned that in the future we will store public item entries only once. * * @param integer $itemid Item ID that should be added + * @throws \Exception */ public static function addShadow($itemid) { @@ -2188,6 +2212,7 @@ class Item extends BaseObject * This function does the same like the function above - but for comments * * @param integer $itemid Item ID that should be added + * @throws \Exception */ public static function addShadowPost($itemid) { @@ -2244,9 +2269,12 @@ class Item extends BaseObject } } - /** + /** * Adds a language specification in a "language" element of given $arr. * Expects "body" element to exist in $arr. + * + * @param $item + * @throws \Text_LanguageDetect_Exception */ private static function addLanguageToItemArray(&$item) { @@ -2292,10 +2320,11 @@ class Item extends BaseObject /** * generate an unique URI * - * @param integer $uid User id - * @param string $guid An existing GUID (Otherwise it will be generated) + * @param integer $uid User id + * @param string $guid An existing GUID (Otherwise it will be generated) * * @return string + * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ public static function newURI($uid, $guid = "") { @@ -2314,6 +2343,7 @@ class Item extends BaseObject * Don't set this value if it isn't from the owner (could be an author that we don't know) * * @param array $arr Contains the just posted item record + * @throws \Exception */ private static function updateContact($arr) { @@ -2356,7 +2386,6 @@ class Item extends BaseObject public static function setHashtags(&$item) { - $tags = BBCode::getTags($item["body"]); // No hashtags? @@ -2364,6 +2393,17 @@ class Item extends BaseObject return false; } + // What happens in [code], stays in [code]! + // escape the # and the [ + // hint: we will also get in trouble with #tags, when we want markdown in posts -> ### Headline 3 + $item["body"] = preg_replace_callback("/\[code(.*?)\](.*?)\[\/code\]/ism", + function ($match) { + // we truly ESCape all # and [ to prevent gettin weird tags in [code] blocks + $find = ['#', '[']; + $replace = [chr(27).'sharp', chr(27).'leftsquarebracket']; + return ("[code" . $match[1] . "]" . str_replace($find, $replace, $match[2]) . "[/code]"); + }, $item["body"]); + // This sorting is important when there are hashtags that are part of other hashtags // Otherwise there could be problems with hashtags like #test and #test2 rsort($tags); @@ -2400,12 +2440,11 @@ class Item extends BaseObject "#$2", $item["body"]); foreach ($tags as $tag) { - if ((strpos($tag, '#') !== 0) || strpos($tag, '[url=')) { + if ((strpos($tag, '#') !== 0) || strpos($tag, '[url=') || $tag[1] == '#') { continue; } $basetag = str_replace('_',' ',substr($tag,1)); - $newtag = '#[url=' . System::baseUrl() . '/search?tag=' . $basetag . ']' . $basetag . '[/url]'; $item["body"] = str_replace($tag, $newtag, $item["body"]); @@ -2420,6 +2459,16 @@ class Item extends BaseObject // Convert back the masked hashtags $item["body"] = str_replace("#", "#", $item["body"]); + + // Remember! What happens in [code], stays in [code] + // roleback the # and [ + $item["body"] = preg_replace_callback("/\[code(.*?)\](.*?)\[\/code\]/ism", + function ($match) { + // we truly unESCape all sharp and leftsquarebracket + $find = [chr(27).'sharp', chr(27).'leftsquarebracket']; + $replace = ['#', '[']; + return ("[code" . $match[1] . "]" . str_replace($find, $replace, $match[2]) . "[/code]"); + }, $item["body"]); } public static function getGuidById($id) @@ -2434,9 +2483,11 @@ class Item extends BaseObject /** * This function is only used for the old Friendica app on Android that doesn't like paths with guid + * * @param string $guid item guid * @param int $uid user id * @return array with id and nick of the item with the given guid + * @throws \Exception */ public static function getIdAndNickByGuid($guid, $uid = 0) { @@ -2444,7 +2495,7 @@ class Item extends BaseObject $id = 0; if ($uid == 0) { - $uid == local_user(); + $uid = local_user(); } // Does the given user have this item? @@ -2478,9 +2529,12 @@ class Item extends BaseObject /** * look for mention tags and setup a second delivery chain for forum/community posts if appropriate + * * @param int $uid * @param int $item_id - * @return bool true if item was deleted, else false + * @return void true if item was deleted, else false + * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws \ImagickException */ private static function tagDeliver($uid, $item_id) { @@ -2491,8 +2545,8 @@ class Item extends BaseObject return; } - $community_page = (($user['page-flags'] == Contact::PAGE_COMMUNITY) ? true : false); - $prvgroup = (($user['page-flags'] == Contact::PAGE_PRVGROUP) ? true : false); + $community_page = (($user['page-flags'] == User::PAGE_FLAGS_COMMUNITY) ? true : false); + $prvgroup = (($user['page-flags'] == User::PAGE_FLAGS_PRVGROUP) ? true : false); $item = self::selectFirst(self::ITEM_FIELDLIST, ['id' => $item_id]); if (!DBA::isResult($item)) { @@ -2531,7 +2585,7 @@ class Item extends BaseObject $arr = ['item' => $item, 'user' => $user]; - Addon::callHooks('tagged', $arr); + Hook::callAll('tagged', $arr); if (!$community_page && !$prvgroup) { return; @@ -2666,6 +2720,8 @@ class Item extends BaseObject * @param array $item * @param int $cid * @return string + * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws \ImagickException */ public static function fixPrivatePhotos($s, $uid, $item = null, $cid = 0) { @@ -2923,12 +2979,15 @@ class Item extends BaseObject * * @param string $item_id * @param string $verb - * Activity verb. One of - * like, unlike, dislike, undislike, attendyes, unattendyes, - * attendno, unattendno, attendmaybe, unattendmaybe - * @hook 'post_local_end' - * array $arr - * 'post_id' => ID of posted item + * Activity verb. One of + * like, unlike, dislike, undislike, attendyes, unattendyes, + * attendno, unattendno, attendmaybe, unattendmaybe + * @return bool + * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws \ImagickException + * @hook 'post_local_end' + * array $arr + * 'post_id' => ID of posted item */ public static function performLike($item_id, $verb) { @@ -3004,7 +3063,6 @@ class Item extends BaseObject // Contact-id is the uid-dependant author contact if (local_user() == $uid) { $item_contact_id = $owner_self_contact['id']; - $item_contact = $owner_self_contact; } else { $item_contact_id = Contact::getIdForURL($author_contact['url'], $uid, true); $item_contact = DBA::selectFirst('contact', [], ['id' => $item_contact_id]); @@ -3089,7 +3147,7 @@ class Item extends BaseObject $new_item['id'] = $new_item_id; - Addon::callHooks('post_local_end', $new_item); + Hook::callAll('post_local_end', $new_item); return true; } @@ -3131,8 +3189,6 @@ class Item extends BaseObject $item["mention"] = 1; } - $sql = ""; - $fields = []; foreach ($item as $field => $data) { @@ -3207,7 +3263,7 @@ class Item extends BaseObject /** * get translated item type * - * @param array $itme + * @param $item * @return string */ public static function postType($item) @@ -3233,6 +3289,7 @@ class Item extends BaseObject * @param array $item * @param bool $update * + * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @todo Remove reference, simply return "rendered-html" and "rendered-hash" */ public static function putInCache(&$item, $update = false) @@ -3254,7 +3311,7 @@ class Item extends BaseObject $item["rendered-hash"] = hash("md5", $item["body"]); $hook_data = ['item' => $item, 'rendered-html' => $item['rendered-html'], 'rendered-hash' => $item['rendered-hash']]; - Addon::callHooks('put_item_in_cache', $hook_data); + Hook::callAll('put_item_in_cache', $hook_data); $item['rendered-html'] = $hook_data['rendered-html']; $item['rendered-hash'] = $hook_data['rendered-hash']; unset($hook_data); @@ -3291,15 +3348,17 @@ class Item extends BaseObject * @param boolean $attach * @param boolean $is_preview * @return string item body html - * @hook prepare_body_init item array before any work - * @hook prepare_body_content_filter ('item'=>item array, 'filter_reasons'=>string array) before first bbcode to html - * @hook prepare_body ('item'=>item array, 'html'=>body string, 'is_preview'=>boolean, 'filter_reasons'=>string array) after first bbcode to html - * @hook prepare_body_final ('item'=>item array, 'html'=>body string) after attach icons and blockquote special case handling (spoiler, author) + * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws \ImagickException + * @hook prepare_body_init item array before any work + * @hook prepare_body_content_filter ('item'=>item array, 'filter_reasons'=>string array) before first bbcode to html + * @hook prepare_body ('item'=>item array, 'html'=>body string, 'is_preview'=>boolean, 'filter_reasons'=>string array) after first bbcode to html + * @hook prepare_body_final ('item'=>item array, 'html'=>body string) after attach icons and blockquote special case handling (spoiler, author) */ public static function prepareBody(array &$item, $attach = false, $is_preview = false) { $a = self::getApp(); - Addon::callHooks('prepare_body_init', $item); + Hook::callAll('prepare_body_init', $item); // In order to provide theme developers more possibilities, event items // are treated differently. @@ -3325,7 +3384,7 @@ class Item extends BaseObject 'item' => $item, 'filter_reasons' => $filter_reasons ]; - Addon::callHooks('prepare_body_content_filter', $hook_data); + Hook::callAll('prepare_body_content_filter', $hook_data); $filter_reasons = $hook_data['filter_reasons']; unset($hook_data); } @@ -3347,7 +3406,7 @@ class Item extends BaseObject 'preview' => $is_preview, 'filter_reasons' => $filter_reasons ]; - Addon::callHooks('prepare_body', $hook_data); + Hook::callAll('prepare_body', $hook_data); $s = $hook_data['html']; unset($hook_data); @@ -3455,15 +3514,17 @@ class Item extends BaseObject $s = HTML::applyContentFilter($s, $filter_reasons); $hook_data = ['item' => $item, 'html' => $s]; - Addon::callHooks('prepare_body_final', $hook_data); + Hook::callAll('prepare_body_final', $hook_data); return $hook_data['html']; } /** * get private link for item + * * @param array $item * @return boolean|array False if item has not plink, otherwise array('href'=>plink url, 'title'=>translated title) + * @throws \Exception */ public static function getPlink($item) {