Completed
Pull Request — master (#86)
by Matt
34:33
created

admin_helper   A

Complexity

Total Complexity 18

Size/Duplication

Total Lines 163
Duplicated Lines 11.66 %

Coupling/Cohesion

Components 3
Dependencies 1

Test Coverage

Coverage 98.39%

Importance

Changes 0
Metric Value
wmc 18
lcom 3
cbo 1
dl 19
loc 163
ccs 61
cts 62
cp 0.9839
rs 10
c 0
b 0
f 0

7 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 10 10 1
A assign_data() 0 20 2
A assign_locations() 9 12 3
A log() 0 4 1
A get_find_username_link() 0 4 1
B is_expired() 0 19 7
A prepare_ad_owner() 0 16 3

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
<?php
2
/**
3
 *
4
 * Advertisement management. An extension for the phpBB Forum Software package.
5
 *
6
 * @copyright (c) 2017 phpBB Limited <https://www.phpbb.com>
7
 * @license GNU General Public License, version 2 (GPL-2.0)
8
 *
9
 */
10
11
namespace phpbb\ads\controller;
12
13
use phpbb\ads\controller\admin_input as input;
14
15
/**
16
 * Admin helper
17
 */
18
class admin_helper
19
{
20
	/** @var \phpbb\user */
21
	protected $user;
22
23
	/** @var \phpbb\language\language */
24
	protected $language;
25
26
	/** @var \phpbb\template\template */
27
	protected $template;
28
29
	/** @var \phpbb\log\log */
30
	protected $log;
31
32
	/** @var \phpbb\ads\location\manager */
33
	protected $location_manager;
34
35
	/** @var string root_path */
36
	protected $root_path;
37
38
	/** @var string php_ext */
39
	protected $php_ext;
40
41
	/**
42
	 * Constructor
43
	 *
44
	 * @param \phpbb\user						$user				User object
45
	 * @param \phpbb\language\language          $language           Language object
46
	 * @param \phpbb\template\template			$template			Template object
47
	 * @param \phpbb\log\log					$log				The phpBB log system
48
	 * @param \phpbb\ads\location\manager		$location_manager	Template location manager object
49
	 * @param string							$root_path			phpBB root path
50
	 * @param string							$php_ext			PHP extension
51
	 */
52 12 View Code Duplication
	public function __construct(\phpbb\user $user, \phpbb\language\language $language, \phpbb\template\template $template, \phpbb\log\log $log, \phpbb\ads\location\manager $location_manager, $root_path, $php_ext)
53
	{
54 12
		$this->user = $user;
55 12
		$this->language = $language;
56 12
		$this->template = $template;
57 12
		$this->log = $log;
58 12
		$this->location_manager = $location_manager;
59 12
		$this->root_path = $root_path;
60 12
		$this->php_ext = $php_ext;
61 12
	}
62
63
	/**
64
	 * Assign ad data for ACP form template.
65
	 *
66
	 * @param	array	$data	Ad data
67
	 * @param	array	$errors	Validation errors
68
	 */
69 2
	public function assign_data($data, $errors)
70
	{
71 2
		$this->assign_locations($data['ad_locations']);
72
73 2
		$errors = array_map(array($this->language, 'lang'), $errors);
74 2
		$this->template->assign_vars(array(
75 2
			'S_ERROR'   => (bool) count($errors),
76 2
			'ERROR_MSG' => count($errors) ? implode('<br />', $errors) : '',
77 2
78 2
			'AD_NAME'         => $data['ad_name'],
79 2
			'AD_NOTE'         => $data['ad_note'],
80 2
			'AD_CODE'         => $data['ad_code'],
81
			'AD_ENABLED'      => $data['ad_enabled'],
82
			'AD_END_DATE'     => $data['ad_end_date'],
83
			'AD_PRIORITY'     => $data['ad_priority'],
84
			'AD_VIEWS_LIMIT'  => $data['ad_views_limit'],
85
			'AD_CLICKS_LIMIT' => $data['ad_clicks_limit'],
86
			'AD_OWNER'        => $this->prepare_ad_owner($data['ad_owner']),
87
		));
88 5
	}
89
90 5
	/**
91 5
	 * Assign template locations data to the template.
92 5
	 *
93 5
	 * @param	mixed	$ad_locations	The form data or nothing.
94 5
	 * @return	void
95 5
	 */
96 5
	public function assign_locations($ad_locations = false)
97 5
	{
98 5 View Code Duplication
		foreach ($this->location_manager->get_all_locations() as $location_id => $location_data)
99 5
		{
100 5
			$this->template->assign_block_vars('ad_locations', array(
101 5
				'LOCATION_ID'   => $location_id,
102
				'LOCATION_DESC' => $location_data['desc'],
103 3
				'LOCATION_NAME' => $location_data['name'],
104
				'S_SELECTED'    => $ad_locations ? in_array($location_id, $ad_locations) : false,
105 3
			));
106
		}
107 3
	}
108 3
109 3
	/**
110 3
	 * Log action
111 3
	 *
112
	 * @param	string	$action		Performed action in uppercase
113
	 * @param	string	$ad_name	Advertisement name
114
	 * @return	void
115
	 */
116
	public function log($action, $ad_name)
117
	{
118
		$this->log->add('admin', $this->user->data['user_id'], $this->user->ip, 'ACP_PHPBB_ADS_' . $action . '_LOG', time(), array($ad_name));
119
	}
120 1
121
	/**
122 1
	 * Get "Find username" URL to easily look for ad owner.
123 1
	 *
124
	 * @return	string	Find username URL
125 1
	 */
126
	public function get_find_username_link()
127 1
	{
128
		return append_sid("{$this->root_path}memberlist.{$this->php_ext}", 'mode=searchuser&amp;form=acp_admanagement_add&amp;field=ad_owner&amp;select_single=true');
129
	}
130
131
	/**
132
	 * Is an ad expired?
133
	 *
134
	 * @param	array	$row	Advertisement data
135
	 * @return	bool	True if expired, false otherwise
136
	 */
137 5
	public function is_expired($row)
138
	{
139 5
		if ((int) $row['ad_end_date'] > 0 && (int) $row['ad_end_date'] < time())
140 5
		{
141 2
			return true;
142
		}
143
144 3
		if ($row['ad_views_limit'] && $row['ad_views'] >= $row['ad_views_limit'])
145 3
		{
146 2
			return true;
147
		}
148
149 1
		if ($row['ad_clicks_limit'] && $row['ad_clicks'] >= $row['ad_clicks_limit'])
150
		{
151
			return true;
152
		}
153
154
		return false;
155
	}
156
157
	/**
158
	 * Prepare ad owner for display. Method takes user_id
159 5
	 * of the ad owner and returns his/her username.
160
	 *
161 5
	 * @param	int		$ad_owner	User ID
162 5
	 * @return	string	Username belonging to $ad_owner.
163
	 */
164
	protected function prepare_ad_owner($ad_owner)
165 5
	{
166 5
		$user_id = array($ad_owner);
167 1
		$user_name = array();
168 1
169
		// Returns false when no errors occur trying to find the user
170
		if (false === user_get_id_name($user_id, $user_name))
171 1
		{
172
			if (empty($user_name))
173 4
			{
174
				return $user_id[0];
175
			}
176
			return $user_name[(int) $user_id[0]];
177
		}
178
		return '';
179
	}
180
}
181