diff options
Diffstat (limited to 'phpBB/phpbb/notification/method')
| -rw-r--r-- | phpBB/phpbb/notification/method/base.php | 110 | ||||
| -rw-r--r-- | phpBB/phpbb/notification/method/email.php | 46 | ||||
| -rw-r--r-- | phpBB/phpbb/notification/method/jabber.php | 63 | ||||
| -rw-r--r-- | phpBB/phpbb/notification/method/messenger_base.php | 94 | ||||
| -rw-r--r-- | phpBB/phpbb/notification/method/method_interface.php | 42 | 
5 files changed, 355 insertions, 0 deletions
| diff --git a/phpBB/phpbb/notification/method/base.php b/phpBB/phpbb/notification/method/base.php new file mode 100644 index 0000000000..4ce42de830 --- /dev/null +++ b/phpBB/phpbb/notification/method/base.php @@ -0,0 +1,110 @@ +<?php +/** +* +* @package notifications +* @copyright (c) 2012 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +namespace phpbb\notification\method; + +/** +* Base notifications method class +* @package notifications +*/ +abstract class base implements \phpbb\notification\method\method_interface +{ +	/** @var \phpbb\notification\manager */ +	protected $notification_manager; + +	/** @var \phpbb\user_loader */ +	protected $user_loader; + +	/** @var \phpbb\db\driver\driver */ +	protected $db; + +	/** @var \phpbb\cache\driver\driver_interface */ +	protected $cache; + +	/** @var \phpbb\template\template */ +	protected $template; + +	/** @var \phpbb\extension\manager */ +	protected $extension_manager; + +	/** @var \phpbb\user */ +	protected $user; + +	/** @var \phpbb\auth\auth */ +	protected $auth; + +	/** @var \phpbb\config\config */ +	protected $config; + +	/** @var string */ +	protected $phpbb_root_path; + +	/** @var string */ +	protected $php_ext; + +	/** +	* Queue of messages to be sent +	* +	* @var array +	*/ +	protected $queue = array(); + +	/** +	* Notification Method Base Constructor +	*  +	* @param \phpbb\user_loader $user_loader +	* @param \phpbb\db\driver\driver $db +	* @param \phpbb\cache\driver\driver_interface $cache +	* @param \phpbb\user $user +	* @param \phpbb\auth\auth $auth +	* @param \phpbb\config\config $config +	* @param string $phpbb_root_path +	* @param string $php_ext +	* @return \phpbb\notification\method\base +	*/ +	public function __construct(\phpbb\user_loader $user_loader, \phpbb\db\driver\driver $db, \phpbb\cache\driver\driver_interface $cache, $user, \phpbb\auth\auth $auth, \phpbb\config\config $config, $phpbb_root_path, $php_ext) +	{ +		$this->user_loader = $user_loader; +		$this->db = $db; +		$this->cache = $cache; +		$this->user = $user; +		$this->auth = $auth; +		$this->config = $config; +		$this->phpbb_root_path = $phpbb_root_path; +		$this->php_ext = $php_ext; +	} + +	/** +	* Set notification manager (required) +	*  +	* @param \phpbb\notification\manager $notification_manager +	*/ +	public function set_notification_manager(\phpbb\notification\manager $notification_manager) +	{ +		$this->notification_manager = $notification_manager; +	} + +	/** +	* Add a notification to the queue +	* +	* @param \phpbb\notification\type\type_interface $notification +	*/ +	public function add_to_queue(\phpbb\notification\type\type_interface $notification) +	{ +		$this->queue[] = $notification; +	} + +	/** +	* Empty the queue +	*/ +	protected function empty_queue() +	{ +		$this->queue = array(); +	} +} diff --git a/phpBB/phpbb/notification/method/email.php b/phpBB/phpbb/notification/method/email.php new file mode 100644 index 0000000000..e039fae8de --- /dev/null +++ b/phpBB/phpbb/notification/method/email.php @@ -0,0 +1,46 @@ +<?php +/** +* +* @package notifications +* @copyright (c) 2012 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +namespace phpbb\notification\method; + +/** +* Email notification method class +* This class handles sending emails for notifications +* +* @package notifications +*/ +class email extends \phpbb\notification\method\messenger_base +{ +	/** +	* Get notification method name +	* +	* @return string +	*/ +	public function get_type() +	{ +		return 'email'; +	} + +	/** +	* Is this method available for the user? +	* This is checked on the notifications options +	*/ +	public function is_available() +	{ +		return $this->config['email_enable'] && $this->user->data['user_email']; +	} + +	/** +	* Parse the queue and notify the users +	*/ +	public function notify() +	{ +		return $this->notify_using_messenger(NOTIFY_EMAIL); +	} +} diff --git a/phpBB/phpbb/notification/method/jabber.php b/phpBB/phpbb/notification/method/jabber.php new file mode 100644 index 0000000000..bdfaf5a6fc --- /dev/null +++ b/phpBB/phpbb/notification/method/jabber.php @@ -0,0 +1,63 @@ +<?php +/** +* +* @package notifications +* @copyright (c) 2012 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +namespace phpbb\notification\method; + +/** +* Jabber notification method class +* This class handles sending Jabber messages for notifications +* +* @package notifications +*/ +class jabber extends \phpbb\notification\method\messenger_base +{ +	/** +	* Get notification method name +	* +	* @return string +	*/ +	public function get_type() +	{ +		return 'jabber'; +	} + +	/** +	* Is this method available for the user? +	* This is checked on the notifications options +	*/ +	public function is_available() +	{ +		return ($this->global_available() && $this->user->data['user_jabber']); +	} + +	/** +	* Is this method available at all? +	* This is checked before notifications are sent +	*/ +	public function global_available() +	{ +		return !( +			empty($this->config['jab_enable']) || +			empty($this->config['jab_host']) || +			empty($this->config['jab_username']) || +			empty($this->config['jab_password']) || +			!@extension_loaded('xml') +		); +	} + +	public function notify() +	{ +		if (!$this->global_available()) +		{ +			return; +		} + +		return $this->notify_using_messenger(NOTIFY_IM, 'short/'); +	} +} diff --git a/phpBB/phpbb/notification/method/messenger_base.php b/phpBB/phpbb/notification/method/messenger_base.php new file mode 100644 index 0000000000..7cb38eb59d --- /dev/null +++ b/phpBB/phpbb/notification/method/messenger_base.php @@ -0,0 +1,94 @@ +<?php +/** +* +* @package notifications +* @copyright (c) 2012 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +namespace phpbb\notification\method; + +/** +* Abstract notification method handling email and jabber notifications +* using the phpBB messenger. +* +* @package notifications +*/ +abstract class messenger_base extends \phpbb\notification\method\base +{ +	/** +	* Notify using phpBB messenger +	* +	* @param int $notify_method				Notify method for messenger (e.g. NOTIFY_IM) +	* @param string $template_dir_prefix	Base directory to prepend to the email template name +	* +	* @return null +	*/ +	protected function notify_using_messenger($notify_method, $template_dir_prefix = '') +	{ +		if (empty($this->queue)) +		{ +			return; +		} + +		// Load all users we want to notify (we need their email address) +		$user_ids = $users = array(); +		foreach ($this->queue as $notification) +		{ +			$user_ids[] = $notification->user_id; +		} + +		// We do not send emails to banned users +		if (!function_exists('phpbb_get_banned_user_ids')) +		{ +			include($this->phpbb_root_path . 'includes/functions_user.' . $this->php_ext); +		} +		$banned_users = phpbb_get_banned_user_ids($user_ids); + +		// Load all the users we need +		$this->user_loader->load_users($user_ids); + +		// Load the messenger +		if (!class_exists('messenger')) +		{ +			include($this->phpbb_root_path . 'includes/functions_messenger.' . $this->php_ext); +		} +		$messenger = new \messenger(); +		$board_url = generate_board_url(); + +		// Time to go through the queue and send emails +		foreach ($this->queue as $notification) +		{ +			if ($notification->get_email_template() === false) +			{ +				continue; +			} + +			$user = $this->user_loader->get_user($notification->user_id); + +			if ($user['user_type'] == USER_IGNORE || in_array($notification->user_id, $banned_users)) +			{ +				continue; +			} + +			$messenger->template($template_dir_prefix . $notification->get_email_template(), $user['user_lang']); + +			$messenger->set_addresses($user); + +			$messenger->assign_vars(array_merge(array( +				'USERNAME'						=> $user['username'], + +				'U_NOTIFICATION_SETTINGS'		=> generate_board_url() . '/ucp.' . $this->php_ext . '?i=ucp_notifications', +			), $notification->get_email_template_variables())); + +			$messenger->send($notify_method); +		} + +		// Save the queue in the messenger class (has to be called or these emails could be lost?) +		$messenger->save_queue(); + +		// We're done, empty the queue +		$this->empty_queue(); +	} +} diff --git a/phpBB/phpbb/notification/method/method_interface.php b/phpBB/phpbb/notification/method/method_interface.php new file mode 100644 index 0000000000..4830d06b86 --- /dev/null +++ b/phpBB/phpbb/notification/method/method_interface.php @@ -0,0 +1,42 @@ +<?php +/** +* +* @package notifications +* @copyright (c) 2012 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +namespace phpbb\notification\method; + +/** +* Base notifications method interface +* @package notifications +*/ +interface method_interface +{ +	/** +	* Get notification method name +	* +	* @return string +	*/ +	public function get_type(); + +	/** +	* Is this method available for the user? +	* This is checked on the notifications options +	*/ +	public function is_available(); + +	/** +	* Add a notification to the queue +	* +	* @param \phpbb\notification\type\type_interface $notification +	*/ +	public function add_to_queue(\phpbb\notification\type\type_interface $notification); + +	/** +	* Parse the queue and notify the users +	*/ +	public function notify(); +} | 
