viewonline_listener::getSubscribedEvents()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 1
eloc 3
nc 1
nop 0
dl 0
loc 5
rs 10
c 2
b 0
f 0
1
<?php
2
/**
3
 *
4
 * Member Avatar & Status [MAS]. An extension for the phpBB Forum Software package.
5
 *
6
 * @copyright (c) 2018-forever, Dark❶ [dark1]
7
 * @license GNU General Public License, version 2 (GPL-2.0-only)
8
 *
9
 */
10
11
namespace dark1\memberavatarstatus\event;
12
13
/**
14
 * @ignore
15
 */
16
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
17
use dark1\memberavatarstatus\core\avatar;
18
use phpbb\auth\auth;
19
use phpbb\user;
20
use phpbb\config\config;
21
use phpbb\language\language;
22
23
/**
24
 * Member Avatar & Status Event listener.
25
 */
26
class viewonline_listener implements EventSubscriberInterface
27
{
28
	/** @var avatar*/
29
	protected $avatar;
30
31
	/** @var auth */
32
	protected $auth;
33
34
	/** @var user */
35
	protected $user;
36
37
	/** @var config */
38
	protected $config;
39
40
	/** @var language */
41
	protected $language;
42
43
	/**
44
	 * Constructor for listener
45
	 *
46
	 * @param avatar		$avatar		dark1 avatar
47
	 * @param auth			$auth		phpBB auth
48
	 * @param user			$user		phpBB user
49
	 * @param config		$config		phpBB config
50
	 * @param language		$language	phpBB language
51
	 * @access public
52
	 */
53
	public function __construct(avatar $avatar, auth $auth, user $user, config $config, language $language)
54
	{
55
		$this->avatar		= $avatar;
56
		$this->auth			= $auth;
57
		$this->user			= $user;
58
		$this->config		= $config;
59
		$this->language		= $language;
60
	}
61
62
	/**
63
	 * Assign functions defined in this class to event listeners in the core
64
	 *
65
	 * @return array
66
	 * @static
67
	 * @access public
68
	 */
69
	static public function getSubscribedEvents()
70
	{
71
		return [
72
			'core.viewonline_modify_user_row'				=> 'mas_viewonline_page_template',
73
			'core.obtain_users_online_string_before_modify'	=> 'mas_viewonline_stat_block_template',
74
		];
75
	}
76
77
78
79
	/**
80
	 * MAS ViewOnline Avatar Template Setup
81
	 *
82
	 * @param object $event The event object
83
	 * @return null
84
	 * @access public
85
	 */
86
	public function mas_viewonline_page_template($event)
87
	{
88
		// Get Event Array `row` & `template_row`
89
		$row = $event['row'];
90
		$template_row = $event['template_row'];
91
92
		// Get Avatar
93
		$avatar = $this->avatar->mas_get_avatar('dark1_mas_vo_pg', $row['user_id']);
94
95
		// Add Avatar to template_row
96
		$template_row = array_merge($template_row, [
97
			'AVATAR_IMG'	=> $avatar,
98
		]);
99
100
		// Assign template_row to event -> template_row
101
		$event['template_row'] = $template_row;
102
	}
103
104
105
106
	/**
107
	 * MAS ViewOnline Stat Block Avatar Template Setup
108
	 *
109
	 * @param object $event The event object
110
	 * @return null
111
	 * @access public
112
	 */
113
	public function mas_viewonline_stat_block_template($event)
114
	{
115
		// Get Event Array `rowset` , `online_users` & `user_online_link`
116
		$rowset = $event['rowset'];
117
		$hidden_users = $event['online_users']['hidden_users'];
118
		$user_online_link = $event['user_online_link'];
119
120
		// Check if enabled for config key
121
		$config_key = 'dark1_mas_vo_sb';
122
		if ($this->avatar->mas_get_config_avatar($config_key . '_av'))
123
		{
124
			// Get Avatar Size & No Avatar Image
125
			$avatar_size = $this->avatar->mas_get_config_avatar_size($config_key . '_av_sz', avatar::AV_DEF_SZ_SML, avatar::AV_MAX_SZ_SML);
126
			$no_avatar_img = $this->avatar->mas_get_no_avatar_img();
127
128
			foreach ($rowset as $row)
129
			{
130
				// Add avatar only for logged in User and not Hidden User
131
				if ($this->mas_viewonline_user_login($row['user_id'], $hidden_users))
132
				{
133
					// Get Avatar
134
					$avatar = $this->avatar->mas_get_avatar($config_key, $row['user_id']);
135
					$user_online_link[$row['user_id']] = $this->mas_viewonline_username_wrap($user_online_link[$row['user_id']], $avatar_size, $no_avatar_img, $avatar);
136
				}
137
			}
138
		}
139
140
		// Assign user_online_link to event -> user_online_link
141
		$event['user_online_link'] = $user_online_link;
142
	}
143
144
145
146
	/** Private Functions **/
147
148
149
150
	/**
151
	 * MAS ViewOnline Check if User Login & not Hidden
152
	 *
153
	 * @param int $user_id takes User ID
154
	 * @param array $hidden_users is Hidden Users
155
	 * @return bool is User Login & not Hidden
156
	 * @access private
157
	 */
158
	private function mas_viewonline_user_login($user_id, $hidden_users)
159
	{
160
		return (bool) ($user_id != ANONYMOUS && (!isset($hidden_users[$user_id]) || $this->auth->acl_get('u_viewonline') || $user_id === $this->user->data['user_id']));
161
	}
162
163
164
165
	/**
166
	 * MAS ViewOnline UserName Wrap
167
	 *
168
	 * @param string $username takes UserName
169
	 * @param int $avatar_size takes Config Avatar Size
170
	 * @param string $no_avatar_img takes No Avatar IMG
171
	 * @param string $avatar takes User Avatar
172
	 * @return string String with Wrapped Main & UserName
173
	 * @access private
174
	 */
175
	private function mas_viewonline_username_wrap($username, $avatar_size, $no_avatar_img, $avatar)
176
	{
177
		$avatar = !empty($avatar) ? $avatar : $no_avatar_img;
178
		$username = (
179
			'<span class="mas-wrap">' .
180
				'<span class="mas-avatar" style="width: ' . $avatar_size . 'px; height: ' . $avatar_size . 'px;">' . $avatar . '</span>' .
181
				'<span class="mas-username">' . $username . '</span>' .
182
			'</span>'
183
		);
184
		return $username;
185
	}
186
187
}
188