diff --git a/src/Object/Post.php b/src/Object/Post.php index 4c5aa8a21..63ac91904 100644 --- a/src/Object/Post.php +++ b/src/Object/Post.php @@ -42,6 +42,7 @@ use Friendica\Util\DateTimeFormat; use Friendica\Util\Proxy; use Friendica\Util\Strings; use Friendica\Util\Temporal; +use InvalidArgumentException; /** * An item @@ -133,9 +134,11 @@ class Post case Item::PRIVATE: $output = DI::l10n()->t('Private Message'); break; + case Item::PUBLIC: $output = DI::l10n()->t('Public Message'); break; + case Item::UNLISTED: $output = DI::l10n()->t('Unlisted Message'); break; @@ -151,25 +154,27 @@ class Post * @param string $formSecurityToken A security Token to avoid CSF attacks * @param integer $thread_level default = 1 * - * @return mixed The data requested on success - * false on failure + * @return mixed The data requested on success, false on failure * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - public function getTemplateData(array $conv_responses, string $formSecurityToken, $thread_level = 1) + public function getTemplateData(array $conv_responses, string $formSecurityToken, int $thread_level = 1) { $item = $this->getData(); $edited = false; - // If the time between "created" and "edited" differs we add - // a notice that the post was edited. - // Note: In some networks reshared items seem to have (sometimes) a difference - // between creation time and edit time of a second. Thats why we add the notice - // only if the difference is more than 1 second. + + /* + * If the time between "created" and "edited" differs we add + * a notice that the post was edited. + * Note: In some networks reshared items seem to have (sometimes) a difference + * between creation time and edit time of a second. Thats why we add the notice + * only if the difference is more than 1 second. + */ if (strtotime($item['edited']) - strtotime($item['created']) > 1) { $edited = [ 'label' => DI::l10n()->t('This entry was edited'), 'date' => DateTimeFormat::local($item['edited'], 'r'), - 'relative' => Temporal::getRelativeDate($item['edited']) + 'relative' => Temporal::getRelativeDate($item['edited']), ]; } $sparkle = ''; @@ -184,8 +189,8 @@ class Post $pin = false; $star = false; $ignore = false; - $ispinned = "unpinned"; - $isstarred = "unstarred"; + $ispinned = 'unpinned'; + $isstarred = 'unstarred'; $indent = ''; $shiny = ''; $osparkle = ''; @@ -209,10 +214,10 @@ class Post if (local_user()) { if (Strings::compareLink(Session::get('my_url'), $item['author-link'])) { - if ($item["event-id"] != 0) { - $edpost = ["events/event/" . $item['event-id'], DI::l10n()->t("Edit")]; + if ($item['event-id'] != 0) { + $edpost = ['events/event/' . $item['event-id'], DI::l10n()->t('Edit')]; } else { - $edpost = ["editpost/" . $item['id'], DI::l10n()->t("Edit")]; + $edpost = ['editpost/' . $item['id'], DI::l10n()->t('Edit')]; } } $dropping = in_array($item['uid'], [0, local_user()]); @@ -289,6 +294,7 @@ class Post $response_verbs[] = 'attendyes'; $response_verbs[] = 'attendno'; $response_verbs[] = 'attendmaybe'; + if ($conv->isWritable()) { $isevent = true; $attend = [DI::l10n()->t('I will attend'), DI::l10n()->t('I will not attend'), DI::l10n()->t('I might attend')]; @@ -324,20 +330,20 @@ class Post 'do' => DI::l10n()->t('Ignore thread'), 'undo' => DI::l10n()->t('Unignore thread'), 'toggle' => DI::l10n()->t('Toggle ignore status'), - 'classdo' => $ignored ? "hidden" : "", - 'classundo' => $ignored ? "" : "hidden", + 'classdo' => $ignored ? 'hidden' : '', + 'classundo' => $ignored ? '' : 'hidden', 'ignored' => DI::l10n()->t('Ignored'), ]; } - $isstarred = (($item['starred']) ? "starred" : "unstarred"); + $isstarred = (($item['starred']) ? 'starred' : 'unstarred'); $star = [ 'do' => DI::l10n()->t('Add star'), 'undo' => DI::l10n()->t('Remove star'), 'toggle' => DI::l10n()->t('Toggle star status'), - 'classdo' => $item['starred'] ? "hidden" : "", - 'classundo' => $item['starred'] ? "" : "hidden", + 'classdo' => $item['starred'] ? 'hidden' : '', + 'classundo' => $item['starred'] ? '' : 'hidden', 'starred' => DI::l10n()->t('Starred'), ]; @@ -357,7 +363,7 @@ class Post $tagger = [ 'add' => DI::l10n()->t('Add tag'), - 'class' => "", + 'class' => '', ]; } } @@ -402,17 +408,17 @@ class Post } // Disable features that aren't available in several networks - if (!in_array($item["network"], [Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA])) { - if ($buttons["dislike"]) { - $buttons["dislike"] = false; + if (!in_array($item['network'], [Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA])) { + if ($buttons['dislike']) { + $buttons['dislike'] = false; } $isevent = false; $tagger = ''; } - if ($buttons["like"] && in_array($item["network"], [Protocol::FEED, Protocol::MAIL])) { - $buttons["like"] = false; + if ($buttons['like'] && in_array($item['network'], [Protocol::FEED, Protocol::MAIL])) { + $buttons['like'] = false; } $tags = Tag::populateFromItem($item); @@ -453,7 +459,7 @@ class Post $tmp_item = [ 'template' => $this->getTemplate(), - 'type' => implode("", array_slice(explode("/", $item['verb']), -1)), + 'type' => implode('', array_slice(explode('/', $item['verb']), -1)), 'comment_firstcollapsed' => false, 'comment_lastcollapsed' => false, 'suppress_tags' => DI::config()->get('system', 'suppress_tags'), @@ -528,7 +534,7 @@ class Post 'wait' => DI::l10n()->t('Please wait'), 'thread_level' => $thread_level, 'edited' => $edited, - 'network' => $item["network"], + 'network' => $item['network'], 'network_name' => ContactSelector::networkToName($item['author-network'], $item['author-link'], $item['network'], $item['author-gsid']), 'network_icon' => ContactSelector::networkToIcon($item['network'], $item['author-link'], $item['author-gsid']), 'received' => $item['received'], @@ -595,7 +601,7 @@ class Post /** * @return integer */ - public function getId() + public function getId(): int { return $this->getDataValue('id'); } @@ -603,7 +609,7 @@ class Post /** * @return boolean */ - public function isThreaded() + public function isThreaded(): bool { return $this->threaded; } @@ -649,10 +655,9 @@ class Post * Get a child by its ID * * @param integer $id The child id - * * @return mixed */ - public function getChild($id) + public function getChild(int $id) { foreach ($this->getChildren() as $child) { if ($child->getId() == $id) { @@ -668,7 +673,7 @@ class Post * * @return Post[] */ - public function getChildren() + public function getChildren(): array { return $this->children; } @@ -677,7 +682,6 @@ class Post * Set our parent * * @param Post $item The item to set as parent - * * @return void */ protected function setParent(Post $item) @@ -706,11 +710,10 @@ class Post * Remove a child * * @param Post $item The child to be removed - * * @return boolean Success or failure * @throws \Exception */ - public function removeChild(Post $item) + public function removeChild(Post $item): bool { $id = $item->getId(); foreach ($this->getChildren() as $key => $child) { @@ -722,6 +725,7 @@ class Post return true; } } + Logger::info('[WARN] Item::removeChild : Item is not a child (' . $id . ').'); return false; } @@ -740,7 +744,6 @@ class Post * Set conversation thread * * @param Thread $thread - * * @return void */ public function setThread(Thread $thread = null) @@ -758,7 +761,7 @@ class Post * * @return Thread */ - public function getThread() + public function getThread(): Thread { return $this->thread; } @@ -770,7 +773,7 @@ class Post * * @return array */ - public function getData() + public function getData(): array { return $this->data; } @@ -779,11 +782,9 @@ class Post * Get a data value * * @param string $name key - * - * @return mixed value on success - * false on failure + * @return mixed value on success, false on failure */ - public function getDataValue($name) + public function getDataValue(string $name) { if (!isset($this->data[$name])) { // Logger::info('[ERROR] Item::getDataValue : Item has no value name "'. $name .'".'); @@ -796,15 +797,15 @@ class Post /** * Set template * - * @param string $name template name - * @return bool - * @throws \Exception + * @param string $name Template name + * @return bool If template was set + * @throws InvalidArgumentException */ - private function setTemplate($name) + private function setTemplate(string $name): bool { if (empty($this->available_templates[$name])) { - Logger::info('[ERROR] Item::setTemplate : Template not available ("' . $name . '").'); - return false; + // Throw exception + throw new InvalidArgumentException('[ERROR] Item::setTemplate : Template not available ("' . $name . '").'); } $this->template = $this->available_templates[$name]; @@ -827,7 +828,7 @@ class Post * * @return boolean */ - private function isToplevel() + private function isToplevel(): bool { return $this->toplevel; } @@ -837,7 +838,7 @@ class Post * * @return boolean */ - private function isWritable() + private function isWritable(): bool { $conv = $this->getThread(); @@ -860,7 +861,7 @@ class Post * * @return integer */ - private function countDescendants() + private function countDescendants(): int { $children = $this->getChildren(); $total = count($children); @@ -878,7 +879,7 @@ class Post * * @return string */ - private function getCommentBoxTemplate() + private function getCommentBoxTemplate(): string { return $this->comment_box_template; } @@ -889,7 +890,7 @@ class Post * @return string * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - private function getDefaultText() + private function getDefaultText(): string { $a = DI::app(); @@ -935,12 +936,11 @@ class Post * Get the comment box * * @param string $indent Indent value - * - * @return mixed The comment box string (empty if no comment box) - * false on failure + * @return mixed The comment box string (empty if no comment box), false on failure * @throws \Exception + * @todo return false is nowhere in this method? */ - private function getCommentBox($indent) + private function getCommentBox(string $indent) { $a = DI::app(); @@ -1033,21 +1033,24 @@ class Post $owner_namematch = (($this->getDataValue('owner-name')) && $this->getDataValue('owner-name') == $this->getDataValue('author-name')); 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 - // all over the park. It can be tricked, but this prevents you from - // seeing "Bob Smith to Bob Smith via Wall-to-wall" and you know darn - // well that it's the same Bob Smith. - // But it could be somebody else with the same name. It just isn't highly likely. - - + /* + * 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 + * all over the park. It can be tricked, but this prevents you from + * seeing "Bob Smith to Bob Smith via Wall-to-wall" and you know darn + * well that it's the same Bob Smith. + * But it could be somebody else with the same name. It just isn't highly likely. + */ $this->owner_name = $this->getDataValue('owner-name'); $this->wall_to_wall = true; - $owner = ['uid' => 0, 'id' => $this->getDataValue('owner-id'), + $owner = [ + 'uid' => 0, + 'id' => $this->getDataValue('owner-id'), 'network' => $this->getDataValue('owner-network'), - 'url' => $this->getDataValue('owner-link')]; + 'url' => $this->getDataValue('owner-link'), + ]; $this->owner_url = Contact::magicLinkByContact($owner); } } @@ -1064,7 +1067,7 @@ class Post /** * @return boolean */ - private function isWallToWall() + private function isWallToWall(): bool { return $this->wall_to_wall; } @@ -1072,7 +1075,7 @@ class Post /** * @return string */ - private function getOwnerUrl() + private function getOwnerUrl(): string { return $this->owner_url; } @@ -1080,7 +1083,7 @@ class Post /** * @return string */ - private function getOwnerName() + private function getOwnerName(): string { return $this->owner_name; } @@ -1088,7 +1091,7 @@ class Post /** * @return boolean */ - private function isVisiting() + private function isVisiting(): bool { return $this->visiting; }