X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FRepository%2FNotify.php;h=b72ccecf0a3f973605d5ce196d45187c65bdff35;hb=06a18abf5a746232c99b5271d907687b30e72651;hp=2ac14858f58adb16f0edf0dac47accb5307740f1;hpb=c42dd168c49fade5eb8e8b996865586ed07d5a9d;p=friendica.git diff --git a/src/Repository/Notify.php b/src/Repository/Notify.php index 2ac14858f5..b72ccecf0a 100644 --- a/src/Repository/Notify.php +++ b/src/Repository/Notify.php @@ -1,12 +1,32 @@ . + * + */ namespace Friendica\Repository; use Exception; use Friendica\BaseRepository; +use Friendica\Collection; use Friendica\Core\Hook; use Friendica\Model; -use Friendica\Collection; +use Friendica\Network\HTTPException\InternalServerErrorException; use Friendica\Network\HTTPException\NotFoundException; use Friendica\Util\DateTimeFormat; @@ -37,51 +57,65 @@ class Notify extends BaseRepository { $params['order'] = $params['order'] ?? ['date' => 'DESC']; - $condition = array_merge($condition, ['uid' => local_user()]); - return parent::select($condition, $params); } /** - * {@inheritDoc} + * Return one notify instance based on ID / UID + * + * @param int $id The ID of the notify instance + * @param int $uid The user ID, bound to this notify instance (= security check) * * @return Model\Notify * @throws NotFoundException */ - public function getByID(int $id) + public function getByID(int $id, int $uid) { - return $this->selectFirst(['id' => $id, 'uid' => local_user()]); + return $this->selectFirst(['id' => $id, 'uid' => $uid]); } /** - * {@inheritDoc} + * Set seen state of notifications of the local_user() + * + * @param bool $seen optional true or false. default true + * @param Model\Notify $notify optional a notify, which should be set seen (including his parents) * * @return bool true on success, false on error + * * @throws Exception */ - public function setAllSeen(bool $seen = true) + public function setSeen(bool $seen = true, Model\Notify $notify = null) { - return $this->dba->update('notify', ['seen' => $seen], ['uid' => local_user()]); + if (empty($notify)) { + $conditions = ['uid' => local_user()]; + } else { + $conditions = ['(`link` = ? OR (`parent` != 0 AND `parent` = ? AND `otype` = ?)) AND `uid` = ?', + $notify->link, + $notify->parent, + $notify->otype, + local_user()]; + } + + return $this->dba->update('notify', ['seen' => $seen], $conditions); } /** * @param array $fields * - * @return Model\Notify + * @return Model\Notify|false * - * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws InternalServerErrorException * @throws Exception */ public function insert(array $fields) { - $fields['date'] = DateTimeFormat::utcNow(); - $fields['abort'] = false; + $fields['date'] = DateTimeFormat::utcNow(); Hook::callAll('enotify_store', $fields); - if ($fields['abort']) { - $this->logger->debug('Abort adding notification entry', ['fields' => $fields]); - return null; + if (empty($fields)) { + $this->logger->debug('Abort adding notification entry'); + return false; } $this->logger->debug('adding notification entry', ['fields' => $fields]);