$id = (!empty($_REQUEST['id']) ? intval($_REQUEST['id']) : 0);
try {
- $notification = DI::notify()->getByID($id);
- $notification->setSeen();
+ $notify = DI::notify()->getByID($id);
+ DI::notify()->setSeen(true, $notify);
- if ($notification->otype === Notify::OTYPE_ITEM) {
- $item = Item::selectFirstForUser(api_user(), [], ['id' => $notification->iid, 'uid' => api_user()]);
+ if ($notify->otype === Notify::OTYPE_ITEM) {
+ $item = Item::selectFirstForUser(api_user(), [], ['id' => $notify->iid, 'uid' => api_user()]);
if (DBA::isResult($item)) {
// we found the item, return it to the user
$ret = api_format_items([$item], $user_info, false, $type);
return api_format_data('result', $type, ['result' => "success"]);
} catch (NotFoundException $e) {
throw new BadRequestException('Invalid argument');
+ } catch (Exception $e) {
+ throw new InternalServerErrorException('Internal Server exception');
}
}
namespace Friendica\Model;
-use Exception;
use Friendica\BaseModel;
use Friendica\Content\Text\BBCode;
use Friendica\Database\Database;
$this->setMsgCache();
}
- /**
- * Set the notification as seen
- *
- * @param bool $seen true, if seen
- *
- * @return bool True, if the seen state could be saved
- */
- public function setSeen(bool $seen = true)
- {
- $this->seen = $seen;
- try {
- return $this->repo->update($this);
- } catch (Exception $e) {
- $this->logger->warning('Update failed.', ['$this' => $this, 'exception' => $e]);
- return false;
- }
- }
-
/**
* Sets the pre-formatted name (caching)
*/
// @TODO: Replace with parameter from router
if (DI::args()->get(1) === 'mark' && DI::args()->get(2) === 'all') {
try {
- $success = DI::notify()->setAllSeen();
- }catch (\Exception $e) {
+ $success = DI::notify()->setSeen();
+ } catch (\Exception $e) {
DI::logger()->warning('set all seen failed.', ['exception' => $e]);
$success = false;
}
if ($request_id) {
try {
- $notification = DI::notify()->getByID($request_id);
- $notification->setSeen();
+ $notify = DI::notify()->getByID($request_id);
+ DI::notify()->setSeen(true, $notify);
- if (!empty($notification->link)) {
- System::externalRedirect($notification->link);
+ if (!empty($notify->link)) {
+ System::externalRedirect($notify->link);
}
} catch (HTTPException\NotFoundException $e) {
DI::baseUrl()->redirect('notifications/system');
}
}
-
use Friendica\Core\Hook;
use Friendica\Model;
use Friendica\Collection;
+use Friendica\Network\HTTPException\InternalServerErrorException;
use Friendica\Network\HTTPException\NotFoundException;
use Friendica\Util\DateTimeFormat;
}
/**
- * {@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);
}
/**
*
* @return Model\Notify|false
*
- * @throws \Friendica\Network\HTTPException\InternalServerErrorException
+ * @throws InternalServerErrorException
* @throws Exception
*/
public function insert(array $fields)
{
- $fields['date'] = DateTimeFormat::utcNow();
+ $fields['date'] = DateTimeFormat::utcNow();
Hook::callAll('enotify_store', $fields);