ActivityNotifications.php in Open Social 8.6
Same filename and directory in other branches
- 8.9 modules/custom/activity_creator/src/ActivityNotifications.php
- 8 modules/custom/activity_creator/src/ActivityNotifications.php
- 8.2 modules/custom/activity_creator/src/ActivityNotifications.php
- 8.3 modules/custom/activity_creator/src/ActivityNotifications.php
- 8.4 modules/custom/activity_creator/src/ActivityNotifications.php
- 8.5 modules/custom/activity_creator/src/ActivityNotifications.php
- 8.7 modules/custom/activity_creator/src/ActivityNotifications.php
- 8.8 modules/custom/activity_creator/src/ActivityNotifications.php
- 10.3.x modules/custom/activity_creator/src/ActivityNotifications.php
- 10.0.x modules/custom/activity_creator/src/ActivityNotifications.php
- 10.1.x modules/custom/activity_creator/src/ActivityNotifications.php
- 10.2.x modules/custom/activity_creator/src/ActivityNotifications.php
Namespace
Drupal\activity_creatorFile
modules/custom/activity_creator/src/ActivityNotifications.phpView source
<?php
namespace Drupal\activity_creator;
use Drupal\activity_creator\Entity\Activity;
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Entity\EntityBase;
use Drupal\Core\Session\AccountInterface;
/**
* Class ActivityNotifications to get Personalised activity items for account.
*
* @package Drupal\activity_creator
*/
class ActivityNotifications extends ControllerBase {
/**
* Returns the Notifications for a given account.
*
* @param \Drupal\Core\Session\AccountInterface $account
* Account object to get notifications for.
* @param array $status
* Filter by status.
*
* @return array
* Return array of notification ids.
*/
public function getNotifications(AccountInterface $account, array $status = [
ACTIVITY_STATUS_RECEIVED,
]) {
$ids = $this
->getNotificationIds($account, $status);
return $ids;
}
/**
* Returns the Activity objects with destination 'notification' for account.
*
* @param \Drupal\Core\Session\AccountInterface $account
* Account object.
* @param array $status
* Status string: activity_creator_field_activity_status_allowed_values().
*
* @return array
* Return array of notifications as activity objects.
*/
public function getNotificationsActivities(AccountInterface $account, array $status = [
ACTIVITY_STATUS_RECEIVED,
]) {
$ids = $this
->getNotificationIds($account, $status);
return entity_load_multiple('activity', $ids);
}
/**
* Mark all notifications as Seen for account.
*
* @param \Drupal\Core\Session\AccountInterface $account
* Account object.
*
* @return int
* Number of remaining notifications.
*/
public function markAllNotificationsAsSeen(AccountInterface $account) {
// Retrieve all the activities referring this entity for this account.
$ids = $this
->getNotificationIds($account, [
ACTIVITY_STATUS_RECEIVED,
]);
$activities = Activity::loadMultiple($ids);
foreach ($activities as $activity) {
$this
->changeStatusOfActivity($activity, ACTIVITY_STATUS_SEEN);
}
return 0;
}
/**
* Mark Notifications as Read for given account and entity..
*
* @param \Drupal\Core\Session\AccountInterface $account
* Account object.
* @param \Drupal\Core\Entity\EntityBase $entity
* Entity object.
*/
public function markEntityNotificationsAsRead(AccountInterface $account, EntityBase $entity) {
// Retrieve all the activities referring this entity for this account.
$ids = $this
->getNotificationIds($account, [
ACTIVITY_STATUS_RECEIVED,
ACTIVITY_STATUS_SEEN,
], $entity);
$activities = Activity::loadMultiple($ids);
foreach ($activities as $activity) {
$this
->changeStatusOfActivity($activity, ACTIVITY_STATUS_READ);
}
}
/**
* Mark an entity as read for a given account.
*
* @param \Drupal\Core\Session\AccountInterface $account
* Account object.
* @param \Drupal\Core\Entity\EntityBase $entity
* Entity object.
*/
public function markEntityAsRead(AccountInterface $account, EntityBase $entity) {
// Retrieve all the activities referring this entity for this account.
$ids = $this
->getNotificationIds($account, [
ACTIVITY_STATUS_RECEIVED,
ACTIVITY_STATUS_SEEN,
], $entity);
$activities = Activity::loadMultiple($ids);
foreach ($activities as $activity) {
$this
->changeStatusOfActivity($activity, ACTIVITY_STATUS_READ);
}
}
/**
* Change the status of an activity.
*
* @param \Drupal\activity_creator\Entity\Activity $activity
* Activity object.
* @param int $status
* See: activity_creator_field_activity_status_allowed_values().
*
* @return \Drupal\activity_creator\Entity\Activity
* Returns activity object.
*/
public function changeStatusOfActivity(Activity $activity, $status = ACTIVITY_STATUS_RECEIVED) {
$activity
->set('field_activity_status', $status);
return $activity
->save();
}
/**
* Returns the Activity ids for an account with destination 'notification'.
*
* @param \Drupal\Core\Session\AccountInterface $account
* Account object.
* @param array $status
* Array of statuses.
* @param \Drupal\Core\Entity\EntityBase $entity
* Optionally provide a related entity to get the activities for.
*
* @return array
* Returns an array of notification ids.
*/
private function getNotificationIds(AccountInterface $account, array $status = [], EntityBase $entity = NULL) {
$destinations = [
'notifications',
];
$uid = $account
->id();
$entity_query = \Drupal::entityQuery('activity');
$entity_query
->condition('field_activity_recipient_user', $uid, '=');
$entity_query
->condition('field_activity_destinations', $destinations, 'IN');
if ($entity !== NULL) {
$entity_type = $entity
->getEntityTypeId();
$entity_id = $entity
->id();
$entity_query
->condition('field_activity_entity.target_id', $entity_id, '=');
$entity_query
->condition('field_activity_entity.target_type', $entity_type, '=');
}
if (!empty($status)) {
$entity_query
->condition('field_activity_status', $status, 'IN');
}
$ids = $entity_query
->execute();
return $ids;
}
}
Classes
Name | Description |
---|---|
ActivityNotifications | Class ActivityNotifications to get Personalised activity items for account. |