shoutbox_listener::getSubscribedEvents()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 12
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 1 Features 0
Metric Value
c 2
b 1
f 0
dl 0
loc 12
rs 9.4285
cc 1
eloc 9
nc 1
nop 0
1
<?php
2
/**
3
 *
4
 * Ajax Shoutbox extension for the phpBB Forum Software package.
5
 *
6
 * @copyright (c) 2014 Paul Sohier <http://www.ajax-shoutbox.com>
7
 * @license       GNU General Public License, version 2 (GPL-2.0)
8
 *
9
 */
10
namespace paul999\ajaxshoutbox\event;
11
12
class shoutbox_listener implements \Symfony\Component\EventDispatcher\EventSubscriberInterface
13
{
14
	/** @var \phpbb\config\config  */
15
	private $config;
16
17
	/** @var \phpbb\user */
18
	private $user;
19
20
	/** @var \phpbb\template\template */
21
	private $template;
22
23
	/** @var \phpbb\controller\helper */
24
	private $helper;
25
26
	/** @var \phpbb\auth\auth  */
27
	private $auth;
28
29
	/** @var \phpbb\request\request  */
30
	private $request;
31
32
	/**
33
	 * @param \phpbb\config\config     $config
34
	 * @param \phpbb\user              $user
35
	 * @param \phpbb\template\template $template
36
	 * @param \phpbb\controller\helper $helper
37
	 * @param \phpbb\auth\auth         $auth
38
	 * @param \phpbb\request\request   $request
39
	 */
40 View Code Duplication
	public function __construct(\phpbb\config\config $config, \phpbb\user $user, \phpbb\template\template $template,
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
41
								\phpbb\controller\helper $helper, \phpbb\auth\auth $auth, \phpbb\request\request $request)
42
	{
43
		$this->config   = $config;
44
		$this->user     = $user;
45
		$this->template = $template;
46
		$this->helper   = $helper;
47
		$this->auth     = $auth;
48
		$this->request  = $request;
49
	}
50
51
	static public function getSubscribedEvents()
0 ignored issues
show
Coding Style introduced by
As per PSR2, the static declaration should come after the visibility declaration.
Loading history...
52
	{
53
		return array(
54
			'core.index_modify_page_title'          => 'index',
55
			'core.permissions'			        	=> 'add_permission',
56
			'forumhulp.cronstatus.modify_cron_task' => 'modify_cron_date',
57
			'boardtools.cronstatus.modify_cron_task'=> 'modify_cron_date',
58
			'core.ucp_prefs_personal_data'          => 'update_ucp_personal_data',
59
			'core.ucp_prefs_personal_update_data'   => 'ucp_prefs_personal_update_data',
60
			'core.user_add_modify_data'             => 'user_add_modify_data',
61
		);
62
	}
63
64
	public function user_add_modify_data($event)
65
	{
66
		$sql_ary = $event['sql_ary'];
67
		$sql_ary['user_ajaxshoutbox_format'] = $this->config['ajaxshoutbox_date_format'];
68
69
		$event['sql_ary'] = $sql_ary;
70
71
		return $event;
72
	}
73
74
	public function ucp_prefs_personal_update_data($event)
75
	{
76
		$sql_ary = $event['sql_ary'];
77
		$sql_ary['user_ajaxshoutbox_format'] = $event['data']['ajaxshoutbox_format'];
78
79
		$event['sql_ary'] = $sql_ary;
80
81
		return $event;
82
	}
83
84
	public function update_ucp_personal_data($event)
85
	{
86
		$data = $event['data'];
87
		$data['ajaxshoutbox_format'] = $this->request->variable('ajaxshoutbox_format', $this->user->data['user_ajaxshoutbox_format']);
88
		$event['data'] = $data;
89
90
		if ($event['submit'])
91
		{
92
			if (version_compare(PHP_VERSION, '5.5.0') >= 0)
93
			{
94
				$error = validate_data($data, array(
95
					'ajaxshoutbox_format' => array('timezone'),
96
				));
97
98
				if (sizeof($error) > 0)
99
				{
100
					if (isset($event['error']))
101
					{
102
103
						$event['error'] = array_merge($event['error'], $error);
104
					}
105
					else
106
					{
107
						// 3.1.3 and lower don't provide us with $error.
108
						// Set submit to false instead.
109
						$event['submit'] = false;
110
					}
111
				}
112
			}
113
		}
114
115
		$dateformat_options = '';
116
117
		foreach ($this->user->lang['dateformats'] as $format => $null)
118
		{
119
			if (strpos($format, '|') === 0)
120
			{
121
				continue;
122
			}
123
			$dateformat_options .= '<option value="' . $format . '"' . (($format == $data['ajaxshoutbox_format']) ? ' selected="selected"' : '') . '>';
124
			$dateformat_options .= $this->user->format_date(time(), $format, false) . ((strpos($format, '|') !== false) ? $this->user->lang['VARIANT_DATE_SEPARATOR'] . $this->user->format_date(time(), $format, true) : '');
125
			$dateformat_options .= '</option>';
126
		}
127
128
		$dateformat_options .= '<option value="custom"';
129
		if (!isset($this->user->lang['dateformats'][$data['ajaxshoutbox_format']]))
130
		{
131
			$dateformat_options .= ' selected="selected"';
132
		}
133
		$dateformat_options .= '>' . $this->user->lang['CUSTOM_DATEFORMAT'] . '</option>';
134
135
		$this->user->add_lang_ext("paul999/ajaxshoutbox", "ajax_shoutbox");
136
137
		$this->template->assign_vars(array(
138
			'S_SHOUTBOX_DATEFORMAT_OPTIONS' => $dateformat_options,
139
			'AJAXSHOUTBOX_DATE_FORMAT'      => $data['ajaxshoutbox_format'],
140
			'A_AJAXSHOUTBOX_DATE_FORMAT'    => addslashes($data['ajaxshoutbox_format']),
141
		));
142
143
		return $event;
144
	}
145
146
	public function modify_cron_date($event)
147
	{
148
		if ($event['task_name'] == 'cron.task.shoutbox_prune')
149
		{
150
			$event['task_date'] = (int) $this->config['shoutbox_prune_gc'];
151
			if ($event['task_date'] > 0)
152
			{
153
				$new_task = $event['task_date'] + 24 * 3600;
154
				$event['new_task_date'] = $new_task;
155
			}
156
		}
157
		return $event;
158
	}
159
160
	/**
161
	 *
162
	 */
163
	public function index()
164
	{
165
		$this->user->add_lang_ext('paul999/ajaxshoutbox', 'ajax_shoutbox');
166
167
		add_form_key('ajaxshoutbox_posting');
168
169
		$this->template->assign_vars(
170
			array(
171
				'S_AJAX_SHOUTBOX'    => $this->auth->acl_get('u_shoutbox_view'),
172
				'S_CAN_POST_SHOUT'   => $this->auth->acl_get('u_shoutbox_post') && $this->user->data['user_id'] != ANONYMOUS,
173
				'U_SUBMIT_SHOUTBOX'  => $this->helper->route('paul999_ajaxshoutbox_post'),
174
				'U_DELETE_SHOUTBOX'  => $this->helper->route('paul999_ajaxshoutbox_delete'),
175
				'UA_GET_POST_ACTION' => htmlspecialchars($this->helper->route('paul999_ajaxshoutbox_get_all')),
176
				'UA_GET_POST_ACTION_NEW'    => htmlspecialchars($this->helper->route('paul999_ajaxshoutbox_get_after', array('id' => 0))),
177
				'UA_GET_POST_ACTION_OLD'    => htmlspecialchars($this->helper->route('paul999_ajaxshoutbox_get_before', array('id' => 0))),
178
			)
179
		);
180
	}
181
182
183
	/**
184
	 * Add administrative permissions
185
	 *
186
	 * @param object $event The event object
187
	 * @return null
188
	 * @access public
189
	 */
190
	public function add_permission($event)
191
	{
192
		$permissions = $event['permissions'];
193
194
		$permissions['u_shoutbox_view'] = array('lang' => 'ACL_U_SHOUTBOX_VIEW', 'cat' => 'misc');
195
		$permissions['u_shoutbox_post'] = array('lang' => 'ACL_U_SHOUTBOX_POST', 'cat' => 'misc');
196
		$permissions['u_shoutbox_quote'] = array('lang' => 'ACL_U_SHOUTBOX_QUOTE', 'cat' => 'misc');
197
		$permissions['u_shoutbox_bbcode'] = array('lang' => 'ACL_U_SHOUTBOX_BBCODE', 'cat' => 'misc');
198
		$permissions['u_shoutbox_delete'] = array('lang' => 'ACL_U_SHOUTBOX_DELETE', 'cat' => 'misc');
199
		$permissions['m_shoutbox_delete'] = array('lang' => 'ACL_M_SHOUTBOX_DELETE', 'cat' => 'misc');
200
		$permissions['m_shoutbox_edit'] = array('lang' => 'ACL_M_SHOUTBOX_EDIT', 'cat' => 'misc');
201
202
		$event['permissions'] = $permissions;
203
	}
204
}
205