use Friendica\Navigation\Notifications\Repository;
use Friendica\Navigation\Notifications\ValueObject;
use Friendica\Navigation\SystemMessages;
+use Friendica\Network\HTTPException;
use Friendica\Protocol\Activity;
use Friendica\Util\DateTimeFormat;
use Friendica\Util\Profiler;
// merge all notification types in one array
foreach ($intros as $intro) {
- $navNotifications[] = $this->formattedNavNotification->createFromIntro($intro);
+ try {
+ $navNotifications[] = $this->formattedNavNotification->createFromIntro($intro);
+ } catch (HTTPException\NotFoundException $e) {
+ $this->introductionRepo->delete($intro);
+ }
}
if (count($registrations) <= 1 || $this->pconfig->get($this->session->getLocalUserId(), 'system', 'detailed_notif')) {
new Uri($this->baseUrl->get(true) . '/moderation/users/pending')
);
}
- } elseif (count($registrations) > 1) {
+ } else {
$navNotifications[] = $this->formattedNavNotification->createFromParams(
$registrations[0]['name'],
$registrations[0]['url'],
use Friendica\Navigation\Notifications\Entity;
use Friendica\Navigation\Notifications\Exception\NoMessageException;
use Friendica\Navigation\Notifications\ValueObject;
-use Friendica\Network\HTTPException\ServiceUnavailableException;
+use Friendica\Network\HTTPException;
use Friendica\Util\DateTimeFormat;
use Friendica\Util\Proxy;
use Friendica\Util\Temporal;
* @param Uri $href
* @param bool $seen
* @return ValueObject\FormattedNavNotification
- * @throws ServiceUnavailableException
+ * @throws HTTPException\ServiceUnavailableException
*/
public function createFromParams(string $contact_name, string $contact_url, string $message, \DateTime $date, Uri $href, bool $seen = false): ValueObject\FormattedNavNotification
{
* @param Entity\Notification $notification
* @return ValueObject\FormattedNavNotification
* @throws NoMessageException
- * @throws \Friendica\Network\HTTPException\InternalServerErrorException
- * @throws \Friendica\Network\HTTPException\NotFoundException
- * @throws \Friendica\Network\HTTPException\ServiceUnavailableException
+ * @throws HTTPException\InternalServerErrorException
+ * @throws HTTPException\NotFoundException
+ * @throws HTTPException\ServiceUnavailableException
*/
public function createFromNotification(Entity\Notification $notification): ValueObject\FormattedNavNotification
{
);
}
+ /**
+ * @param \Friendica\Contact\Introduction\Entity\Introduction $intro
+ * @return ValueObject\FormattedNavNotification
+ * @throws HTTPException\NotFoundException when the contact record couldn't be located
+ * @throws HTTPException\ServiceUnavailableException
+ */
public function createFromIntro(\Friendica\Contact\Introduction\Entity\Introduction $intro): ValueObject\FormattedNavNotification
{
- if (!isset(self::$contacts[$intro->cid])) {
- self::$contacts[$intro->cid] = Contact::getById($intro->cid, ['name', 'url', 'pending']);
+ if (empty(self::$contacts[$intro->cid])) {
+ if ($contact = Contact::getById($intro->cid, ['name', 'url', 'pending'])) {
+ self::$contacts[$intro->cid] = $contact;
+ } else {
+ throw new HTTPException\NotFoundException('Contact not found with id' . $intro->cid);
+ }
}
if (self::$contacts[$intro->cid]['pending']) {