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 |
||
| 15 | class leaders extends module_base |
||
| 16 | { |
||
| 17 | /** |
||
| 18 | * Allowed columns: Just sum up your options (Exp: left + right = 10) |
||
| 19 | * top 1 |
||
| 20 | * left 2 |
||
| 21 | * center 4 |
||
| 22 | * right 8 |
||
| 23 | * bottom 16 |
||
| 24 | */ |
||
| 25 | public $columns = 10; |
||
| 26 | |||
| 27 | /** |
||
| 28 | * Default modulename |
||
| 29 | */ |
||
| 30 | public $name = 'THE_TEAM'; |
||
| 31 | |||
| 32 | /** |
||
| 33 | * Default module-image: |
||
| 34 | * file must be in "{T_THEME_PATH}/images/portal/" |
||
| 35 | */ |
||
| 36 | public $image_src = 'portal_team.png'; |
||
| 37 | |||
| 38 | /** |
||
| 39 | * module-language file |
||
| 40 | * file must be in "language/{$user->lang}/mods/portal/" |
||
| 41 | */ |
||
| 42 | public $language = 'portal_leaders_module'; |
||
| 43 | |||
| 44 | /** @var \phpbb\auth\auth */ |
||
| 45 | protected $auth; |
||
| 46 | |||
| 47 | /** @var \phpbb\config\config */ |
||
| 48 | protected $config; |
||
| 49 | |||
| 50 | /** @var \phpbb\db\driver\driver_interface */ |
||
| 51 | protected $db; |
||
| 52 | |||
| 53 | /** @var \phpbb\template\template */ |
||
| 54 | protected $template; |
||
| 55 | |||
| 56 | /** @var string PHP file extension */ |
||
| 57 | protected $php_ext; |
||
| 58 | |||
| 59 | /** @var string phpBB root path */ |
||
| 60 | protected $phpbb_root_path; |
||
| 61 | |||
| 62 | /** @var \phpbb\user */ |
||
| 63 | protected $user; |
||
| 64 | |||
| 65 | /** |
||
| 66 | * Construct a leaders object |
||
| 67 | * |
||
| 68 | * @param \phpbb\auth\auth $auth phpBB auth service |
||
| 69 | * @param \phpbb\config\config $config phpBB config |
||
| 70 | * @param \phpbb\db\driver\driver_interface $db phpBB db driver |
||
| 71 | * @param \phpbb\template\template $template phpBB template |
||
| 72 | * @param string $phpEx php file extension |
||
| 73 | * @param string $phpbb_root_path phpBB root path |
||
| 74 | * @param \phpbb\user $user phpBB user object |
||
| 75 | */ |
||
| 76 | View Code Duplication | public function __construct($auth, $config, $db, $template, $phpbb_root_path, $phpEx, $user) |
|
| 86 | |||
| 87 | /** |
||
| 88 | * {@inheritdoc} |
||
| 89 | */ |
||
| 90 | public function get_template_side($module_id) |
||
| 91 | { |
||
| 92 | // Display a listing of board admins, moderators |
||
| 93 | $this->user->add_lang('groups'); |
||
| 94 | $order_legend = ($this->config['legend_sort_groupname']) ? 'group_name' : 'group_legend'; |
||
| 95 | |||
| 96 | if ($this->config['board3_leaders_ext_' . $module_id]) |
||
| 97 | { |
||
| 98 | $legends = array(); |
||
| 99 | $groups = array(); |
||
| 100 | |||
| 101 | View Code Duplication | if ($this->auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel')) |
|
| 102 | { |
||
| 103 | $sql = 'SELECT group_id, group_name, group_colour, group_type, group_legend |
||
| 104 | FROM ' . GROUPS_TABLE . ' |
||
| 105 | WHERE group_legend >= 1 |
||
| 106 | ORDER BY ' . $order_legend . ' ASC'; |
||
| 107 | } |
||
| 108 | else |
||
| 109 | { |
||
| 110 | $sql = 'SELECT g.group_id, g.group_name, g.group_colour, g.group_type, g.group_legend |
||
| 111 | FROM ' . GROUPS_TABLE . ' g |
||
| 112 | LEFT JOIN ' . USER_GROUP_TABLE . ' ug |
||
| 113 | ON ( |
||
| 114 | g.group_id = ug.group_id |
||
| 115 | AND ug.user_id = ' . $this->user->data['user_id'] . ' |
||
| 116 | AND ug.user_pending = 0 |
||
| 117 | ) |
||
| 118 | WHERE g.group_legend >= 1 |
||
| 119 | AND (g.group_type <> ' . GROUP_HIDDEN . ' OR ug.user_id = ' . $this->user->data['user_id'] . ') |
||
| 120 | ORDER BY g.' . $order_legend . ' ASC'; |
||
| 121 | } |
||
| 122 | $result = $this->db->sql_query($sql, 600); |
||
| 123 | |||
| 124 | View Code Duplication | while ($row = $this->db->sql_fetchrow($result)) |
|
| 125 | { |
||
| 126 | $groups[$row['group_id']] = array( |
||
| 127 | 'group_name' => $row['group_name'], |
||
| 128 | 'group_colour' => $row['group_colour'], |
||
| 129 | 'group_type' => $row['group_type'], |
||
| 130 | 'group_users' => array(), |
||
| 131 | ); |
||
| 132 | $legends[] = $row['group_id']; |
||
| 133 | } |
||
| 134 | $this->db->sql_freeresult($result); |
||
| 135 | |||
| 136 | if (sizeof($legends)) |
||
| 137 | { |
||
| 138 | $sql = 'SELECT |
||
| 139 | u.user_id AS user_id, u.username AS username, u.username_clean AS username_clean, |
||
| 140 | u.user_colour AS user_colour, ug.group_id AS group_id |
||
| 141 | FROM |
||
| 142 | ' . USERS_TABLE . ' AS u, |
||
| 143 | ' . USER_GROUP_TABLE . ' AS ug |
||
| 144 | WHERE |
||
| 145 | ug.user_id = u.user_id |
||
| 146 | AND '. $this->db->sql_in_set('ug.group_id', $legends) . ' |
||
| 147 | ORDER BY u.username_clean ASC'; |
||
| 148 | $result = $this->db->sql_query($sql, 600); |
||
| 149 | |||
| 150 | View Code Duplication | while ($row = $this->db->sql_fetchrow($result)) |
|
| 151 | { |
||
| 152 | $groups[$row['group_id']]['group_users'][] = array( |
||
| 153 | 'user_id' => $row['user_id'], |
||
| 154 | 'username' => $row['username'], |
||
| 155 | 'user_colour' => $row['user_colour'], |
||
| 156 | ); |
||
| 157 | } |
||
| 158 | $this->db->sql_freeresult($result); |
||
| 159 | } |
||
| 160 | |||
| 161 | if (sizeof($groups)) |
||
| 162 | { |
||
| 163 | foreach ($groups as $group_id => $group) |
||
| 164 | { |
||
| 165 | if (sizeof($group['group_users'])) |
||
| 166 | { |
||
| 167 | $group_name = ($group['group_type'] == GROUP_SPECIAL) ? $this->user->lang['G_' . $group['group_name']] : $group['group_name']; |
||
| 168 | $u_group = append_sid("{$this->phpbb_root_path}memberlist.{$this->php_ext}", 'mode=group&g=' . $group_id); |
||
| 169 | |||
| 170 | $this->template->assign_block_vars('group', array( |
||
| 171 | 'GROUP_NAME' => $group_name, |
||
| 172 | 'GROUP_COLOUR' => $group['group_colour'], |
||
| 173 | 'U_GROUP' => $u_group, |
||
| 174 | )); |
||
| 175 | |||
| 176 | foreach ($group['group_users'] as $group_user) |
||
| 177 | { |
||
| 178 | $this->template->assign_block_vars('group.member', array( |
||
| 179 | 'USER_ID' => $group_user['user_id'], |
||
| 180 | 'USERNAME_FULL' => get_username_string('full', $group_user['user_id'], $group_user['username'], $group_user['user_colour']), |
||
| 181 | )); |
||
| 182 | } |
||
| 183 | } |
||
| 184 | } |
||
| 185 | } |
||
| 186 | return 'leaders_ext_side.html'; |
||
| 187 | } |
||
| 188 | else |
||
| 189 | { |
||
| 190 | $sql = $this->db->sql_build_query('SELECT', array( |
||
| 191 | 'SELECT' => 'u.user_id, u.group_id as default_group, u.username, u.user_colour, u.user_allow_pm, g.group_id, g.group_name, g.group_colour, g.group_type, g.group_legend, ug.user_id as ug_user_id', |
||
| 192 | 'FROM' => array( |
||
| 193 | USERS_TABLE => 'u', |
||
| 194 | GROUPS_TABLE => 'g' |
||
| 195 | ), |
||
| 196 | 'LEFT_JOIN' => array( |
||
| 197 | array( |
||
| 198 | 'FROM' => array(USER_GROUP_TABLE => 'ug'), |
||
| 199 | 'ON' => 'ug.group_id = g.group_id AND ug.user_pending = 0 AND ug.user_id = ' . $this->user->data['user_id'] |
||
| 200 | )), |
||
| 201 | 'WHERE' => 'u.group_id = g.group_id AND ' . $this->db->sql_in_set('g.group_name', array('ADMINISTRATORS', 'GLOBAL_MODERATORS')), |
||
| 202 | 'ORDER_BY' => 'g.' . $order_legend . ' ASC, u.username_clean ASC' |
||
| 203 | )); |
||
| 204 | |||
| 205 | $result = $this->db->sql_query($sql, 600); |
||
| 206 | |||
| 207 | while ($row = $this->db->sql_fetchrow($result)) |
||
| 208 | { |
||
| 209 | if ($row['group_name'] == 'ADMINISTRATORS') |
||
| 210 | { |
||
| 211 | $which_row = 'b3p_admins'; |
||
| 212 | } |
||
| 213 | else if ($row['group_name'] == 'GLOBAL_MODERATORS') |
||
| 214 | { |
||
| 215 | $which_row = 'b3p_moderators'; |
||
| 216 | } |
||
| 217 | else |
||
| 218 | { |
||
| 219 | continue; |
||
| 220 | } |
||
| 221 | |||
| 222 | if ($row['group_type'] == GROUP_HIDDEN && !$this->auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel') && $row['ug_user_id'] != $this->user->data['user_id']) |
||
| 223 | { |
||
| 224 | $group_name = $this->user->lang['GROUP_UNDISCLOSED']; |
||
| 225 | $u_group = ''; |
||
| 226 | } |
||
| 227 | else |
||
| 228 | { |
||
| 229 | $group_name = ($row['group_type'] == GROUP_SPECIAL) ? $this->user->lang['G_' . $row['group_name']] : $row['group_name']; |
||
| 230 | $u_group = append_sid("{$this->phpbb_root_path}memberlist.{$this->php_ext}", 'mode=group&g=' . $row['group_id']); |
||
| 231 | } |
||
| 232 | |||
| 233 | $this->template->assign_block_vars($which_row, array( |
||
| 234 | 'USER_ID' => $row['user_id'], |
||
| 235 | 'GROUP_NAME' => $group_name, |
||
| 236 | 'GROUP_COLOR' => $row['group_colour'], |
||
| 237 | |||
| 238 | 'U_GROUP' => $u_group, |
||
| 239 | |||
| 240 | 'USERNAME_FULL' => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']), |
||
| 241 | 'USERNAME' => get_username_string('username', $row['user_id'], $row['username'], $row['user_colour']), |
||
| 242 | 'USER_COLOR' => get_username_string('colour', $row['user_id'], $row['username'], $row['user_colour']), |
||
| 243 | 'U_VIEW_PROFILE' => get_username_string('profile', $row['user_id'], $row['username'], $row['user_colour']), |
||
| 244 | )); |
||
| 245 | } |
||
| 246 | $this->db->sql_freeresult($result); |
||
| 247 | return 'leaders_side.html'; |
||
| 248 | } |
||
| 249 | } |
||
| 250 | |||
| 251 | /** |
||
| 252 | * {@inheritdoc} |
||
| 253 | */ |
||
| 254 | public function get_template_acp($module_id) |
||
| 264 | |||
| 265 | /** |
||
| 266 | * {@inheritdoc} |
||
| 267 | */ |
||
| 268 | public function install($module_id) |
||
| 274 | |||
| 275 | /** |
||
| 276 | * {@inheritdoc} |
||
| 277 | */ |
||
| 278 | View Code Duplication | public function uninstall($module_id, $db) |
|
| 287 | } |
||
| 288 |