| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 | 
							- <?php
 
- namespace ColdTrick\ContentSubscriptions;
 
- class Subscriptions {
 
- 	
 
- 	/**
 
- 	 * Add a discussion owner to the notified users
 
- 	 *
 
- 	 * @param string $hook         the name of the hook
 
- 	 * @param stirng $type         the type of the hook
 
- 	 * @param array  $return_value the current return value
 
- 	 * @param array  $params       supplied values
 
- 	 *
 
- 	 * @return void|array
 
- 	 */
 
- 	public static function addDiscussionOwner($hook, $type, $return_value, $params) {
 
- 		
 
- 		if (empty($params) || !is_array($params)) {
 
- 			return;
 
- 		}
 
- 		
 
- 		$event = elgg_extract('event', $params);
 
- 		if (!($event instanceof \Elgg\Notifications\Event)) {
 
- 			return;
 
- 		}
 
- 		
 
- 		$discussion_reply = $event->getObject();
 
- 		if (!($discussion_reply instanceof \ElggDiscussionReply)) {
 
- 			return;
 
- 		}
 
- 		
 
- 		$discussion = $discussion_reply->getContainerEntity();
 
- 		if (!elgg_instanceof($discussion, 'object', 'groupforumtopic')) {
 
- 			return;
 
- 		}
 
- 		
 
- 		$owner = $discussion->getOwnerEntity();
 
- 		if (!($owner instanceof \ElggUser)) {
 
- 			return;
 
- 		}
 
- 		
 
- 		$user_notification_settings = get_user_notification_settings($owner->getGUID());
 
- 		if (empty($user_notification_settings)) {
 
- 			// user has no settings, so no notification
 
- 			return;
 
- 		}
 
- 		
 
- 		$temp = [];
 
- 		foreach ($user_notification_settings as $method => $enabled) {
 
- 			if (empty($enabled)) {
 
- 				// notification method not enabled
 
- 				continue;
 
- 			}
 
- 			
 
- 			$temp[] = $method;
 
- 		}
 
- 		
 
- 		if (empty($temp)) {
 
- 			// no enabled notification methods
 
- 			return;
 
- 		}
 
- 		
 
- 		$return_value[$owner->getGUID()] = $temp;
 
- 		
 
- 		return $return_value;
 
- 	}
 
- 	
 
- 	/**
 
- 	 * Make sure unsubscribed users don't get notifications based on their group-subscriptions
 
- 	 *
 
- 	 * @param string $hook         the name of the hook
 
- 	 * @param stirng $type         the type of the hook
 
- 	 * @param array  $return_value the current return value
 
- 	 * @param array  $params       supplied values
 
- 	 *
 
- 	 * @return void|array
 
- 	 */
 
- 	public static function removeUnsubscribedGroupMembers($hook, $type, $return_value, $params) {
 
- 		
 
- 		if (empty($params) || !is_array($params)) {
 
- 			return;
 
- 		}
 
- 		
 
- 		if (empty($return_value)) {
 
- 			// no subscribers to check
 
- 			return;
 
- 		}
 
- 		
 
- 		$event = elgg_extract('event', $params);
 
- 		if (!($event instanceof \Elgg\Notifications\Event)) {
 
- 			return;
 
- 		}
 
- 		
 
- 		$object = $event->getObject();
 
- 		if (!($object instanceof \ElggComment)) {
 
- 			return;
 
- 		}
 
- 		
 
- 		$options = [
 
- 			'type' => 'user',
 
- 			'limit' => false,
 
- 			'relationship' => CONTENT_SUBSCRIPTIONS_BLOCK,
 
- 			'relationship_guid' => $object->getContainerGUID(),
 
- 			'inverse_relationship' => true,
 
- 		];
 
- 		$batch = new \ElggBatch('elgg_get_entities_from_relationship', $options);
 
- 		foreach ($batch as $user) {
 
- 			if (!isset($return_value[$user->getGUID()])) {
 
- 				continue;
 
- 			}
 
- 			
 
- 			unset($return_value[$user->getGUID()]);
 
- 		}
 
- 		
 
- 		return $return_value;
 
- 	}
 
- 	
 
- 	/**
 
- 	 * Verify that the subscribed users still have their preferences
 
- 	 *
 
- 	 * @param string $hook         the name of the hook
 
- 	 * @param stirng $type         the type of the hook
 
- 	 * @param array  $return_value the current return value
 
- 	 * @param array  $params       supplied values
 
- 	 *
 
- 	 * @return void|array
 
- 	 */
 
- 	public static function verifySubscribersSettings($hook, $type, $return_value, $params) {
 
- 		
 
- 		if (empty($params) || !is_array($params)) {
 
- 			return;
 
- 		}
 
- 		
 
- 		if (empty($return_value)) {
 
- 			// no subscribers to check
 
- 			return;
 
- 		}
 
- 		
 
- 		$event = elgg_extract("event", $params);
 
- 		if (!($event instanceof \Elgg\Notifications\Event)) {
 
- 			return;
 
- 		}
 
- 		
 
- 		$object = $event->getObject();
 
- 		if (!($object instanceof \ElggComment)) {
 
- 			return;
 
- 		}
 
- 		
 
- 		foreach ($return_value as $user_guid => $preferences) {
 
- 			$settings = content_subscriptions_get_notification_settings($user_guid);
 
- 			if (!empty($settings)) {
 
- 				$return_value[$user_guid] = $settings;
 
- 			} else {
 
- 				unset($return_value[$user_guid]);
 
- 			}
 
- 		}
 
- 		
 
- 		return $return_value;
 
- 	}
 
- }
 
 
  |