diff options
| author | Andreas Fischer <bantu@phpbb.com> | 2014-06-14 00:16:52 +0200 | 
|---|---|---|
| committer | Andreas Fischer <bantu@phpbb.com> | 2014-06-14 00:16:52 +0200 | 
| commit | 7642fbbd63e70c55a033503a428a6b206a29efdf (patch) | |
| tree | 711598c2a8a8d1b0d6b86cc1768be030bd941d3c /phpBB/phpbb | |
| parent | 99c3ca18be101ee414125335dee34dbf952fd05d (diff) | |
| parent | f5415619ebc49e370a4ec06cd6b664fb2456ccfe (diff) | |
| download | forums-7642fbbd63e70c55a033503a428a6b206a29efdf.tar forums-7642fbbd63e70c55a033503a428a6b206a29efdf.tar.gz forums-7642fbbd63e70c55a033503a428a6b206a29efdf.tar.bz2 forums-7642fbbd63e70c55a033503a428a6b206a29efdf.tar.xz forums-7642fbbd63e70c55a033503a428a6b206a29efdf.zip  | |
Merge pull request #2527 from dhruvgoel92/ticket/11445
[ticket/11445] optimize no of queries in get_global_subscriptions( )
* dhruvgoel92/ticket/11445:
  [ticket/11445] Move get user's notification code into its own method
  [ticket/11445] Remove unused foreach key $group_name
  [ticket/11445] Improve unit tests for get_global_subscriptions
  [ticket/11445] Optimize no of queries in get_global_subscriptions
Diffstat (limited to 'phpBB/phpbb')
| -rw-r--r-- | phpBB/phpbb/notification/manager.php | 52 | 
1 files changed, 36 insertions, 16 deletions
diff --git a/phpBB/phpbb/notification/manager.php b/phpBB/phpbb/notification/manager.php index c3539e76df..b787b624f6 100644 --- a/phpBB/phpbb/notification/manager.php +++ b/phpBB/phpbb/notification/manager.php @@ -574,6 +574,34 @@ class manager  		return $subscription_methods;  	} + +	/** +	* Get user's notification data +	* +	* @param int $user_id The user_id of the user to get the notifications for +	* +	* @return array User's notification +	*/ +	protected function get_user_notifications($user_id) +	{ +		$sql = 'SELECT method, notify, item_type +				FROM ' . $this->user_notifications_table . ' +				WHERE user_id = ' . (int) $user_id . ' +					AND item_id = 0'; + +		$result = $this->db->sql_query($sql); +		$user_notifications = array(); + +		while ($row = $this->db->sql_fetchrow($result)) +		{ +			$user_notifications[$row['item_type']][] = $row; +		} + +		$this->db->sql_freeresult($result); + +		return $user_notifications; +	} +  	/**  	* Get global subscriptions (item_id = 0)  	* @@ -587,28 +615,23 @@ class manager  		$subscriptions = array(); -		foreach ($this->get_subscription_types() as $group_name => $types) +		$user_notifications = $this->get_user_notifications($user_id); + +		foreach ($this->get_subscription_types() as $types)  		{  			foreach ($types as $id => $type)  			{ -				$sql = 'SELECT method, notify -					FROM ' . $this->user_notifications_table . ' -					WHERE user_id = ' . (int) $user_id . " -						AND item_type = '" . $this->db->sql_escape($id) . "' -						AND item_id = 0"; -				$result = $this->db->sql_query($sql); - -				$row = $this->db->sql_fetchrow($result); -				if (!$row) + +				if (empty($user_notifications[$id]))  				{  					// No rows at all, default to ''  					$subscriptions[$id] = array('');  				}  				else  				{ -					do +					foreach ($user_notifications[$id] as $user_notification)  					{ -						if (!$row['notify']) +						if (!$user_notification['notify'])  						{  							continue;  						} @@ -618,12 +641,9 @@ class manager  							$subscriptions[$id] = array();  						} -						$subscriptions[$id][] = $row['method']; +						$subscriptions[$id][] = $user_notification['method'];  					} -					while ($row = $this->db->sql_fetchrow($result));  				} - -				$this->db->sql_freeresult($result);  			}  		}  | 
