supernova-ws /
SuperNova
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
| 1 | <?php |
||
| 2 | |||
| 3 | /** |
||
| 4 | * messages.php |
||
| 5 | * Handles internal message system |
||
| 6 | * |
||
| 7 | * @package messages |
||
| 8 | * @version 3.0 |
||
| 9 | * |
||
| 10 | * Revision History |
||
| 11 | * ================ |
||
| 12 | * |
||
| 13 | * 3.0 - copyright (c) 2010-2011 by Gorlum for http://supernova.ws |
||
| 14 | * [!] Full rewrite |
||
| 15 | * |
||
| 16 | * 2.0 - copyright (c) 2010 by Gorlum for http://supernova.ws |
||
| 17 | * [!] Fully rewrote MessPageMode = 'show' part |
||
| 18 | * [~] All HTML code from 'show' part moved to messages.tpl |
||
| 19 | * [~] Tweaks and optimizations |
||
| 20 | * |
||
| 21 | * 1.5 - copyright (c) 2010 by Gorlum for http://supernova.ws |
||
| 22 | * [~] Replaced table 'galaxy' with table 'planets' |
||
| 23 | * |
||
| 24 | * 1.4 - copyright (c) 2010 by Gorlum for http://supernova.ws |
||
| 25 | * [~] Security checked & verified for SQL-injection by Gorlum for http://supernova.ws |
||
| 26 | * |
||
| 27 | * 1.3 - copyright (c) 2010 by Gorlum for http://supernova.ws |
||
| 28 | * [+] "Outbox" added |
||
| 29 | * |
||
| 30 | * 1.2 - copyright 2008 by Chlorel for XNova |
||
| 31 | * [+] Regroupage des 2 fichiers vers 1 seul plus simple a mettre en oeuvre et a gerer ! |
||
| 32 | * |
||
| 33 | * 1.1 - Mise a plat, linearisation, suppression des doublons / triplons / 'n'gnions dans le code (Chlorel) |
||
| 34 | * |
||
| 35 | * 1.0 - Version originelle (Tom1991) |
||
| 36 | * |
||
| 37 | */ |
||
| 38 | |||
| 39 | include('common.' . substr(strrchr(__FILE__, '.'), 1)); |
||
| 40 | |||
| 41 | lng_include('messages'); |
||
| 42 | |||
| 43 | $mode = sys_get_param_str('msg_delete') ? 'delete' : sys_get_param_str('mode'); |
||
| 44 | $current_class = sys_get_param_int('message_class'); |
||
| 45 | if(!isset($sn_message_class_list[$current_class])) { |
||
| 46 | $current_class = 0; |
||
| 47 | $mode = ''; |
||
| 48 | } |
||
| 49 | |||
| 50 | switch($mode) { |
||
| 51 | case 'write': |
||
| 52 | $error_list = array(); |
||
| 53 | $template = gettemplate('msg_message_compose', true); |
||
| 54 | |||
| 55 | $recipient_name = sys_get_param_str_unsafe('recipient_name'); |
||
| 56 | if($recipient_name) { |
||
| 57 | $recipient_row = db_user_by_username($recipient_name); |
||
| 58 | } |
||
| 59 | |||
| 60 | if(!$recipient_row) { |
||
| 61 | $recipient_id = sys_get_param_id('id'); |
||
| 62 | $recipient_row = db_user_by_id($recipient_id); |
||
| 63 | if(!$recipient_row) { |
||
| 64 | $recipient_id = 0; |
||
| 65 | } |
||
| 66 | } |
||
| 67 | |||
| 68 | if($recipient_row) { |
||
| 69 | $recipient_id = $recipient_row['id']; |
||
| 70 | $recipient_name = $recipient_row['username']; |
||
| 71 | } |
||
| 72 | |||
| 73 | View Code Duplication | if($recipient_id == $user['id']) { |
|
| 74 | $error_list[] = array('MESSAGE' => classLocale::$lang['msg_err_self_send'], 'STATUS' => ERR_ERROR); |
||
| 75 | } |
||
| 76 | |||
| 77 | $re = 0; |
||
| 78 | $subject = sys_get_param_str('subject'); |
||
| 79 | while(strpos($subject, classLocale::$lang['msg_answer_prefix']) !== false) { |
||
| 80 | $subject = substr($subject, strlen(classLocale::$lang['msg_answer_prefix'])); |
||
| 81 | $re++; |
||
| 82 | } |
||
| 83 | $re ? $subject = classLocale::$lang['msg_answer_prefix'] . $subject : false; |
||
| 84 | |||
| 85 | if(sys_get_param_str('msg_send')) { |
||
| 86 | $subject = $subject ? $subject : classLocale::$lang['msg_subject_default']; |
||
| 87 | |||
| 88 | View Code Duplication | if(!$recipient_id) { |
|
| 89 | $error_list[] = array('MESSAGE' => classLocale::$lang['msg_err_player_not_found'], 'STATUS' => ERR_ERROR); |
||
| 90 | } |
||
| 91 | |||
| 92 | $text = sys_get_param_str('text'); |
||
| 93 | View Code Duplication | if(!$text) { |
|
|
0 ignored issues
–
show
|
|||
| 94 | $error_list[] = array('MESSAGE' => classLocale::$lang['msg_err_no_text'], 'STATUS' => ERR_ERROR); |
||
| 95 | } |
||
| 96 | |||
| 97 | if(empty($error_list)) { |
||
| 98 | $error_list[] = array('MESSAGE' => classLocale::$lang['msg_not_message_sent'], 'STATUS' => ERR_NONE); |
||
| 99 | |||
| 100 | $user_safe_name = db_escape($user['username']); |
||
| 101 | $recipient_name = db_escape($recipient_name); |
||
| 102 | msg_send_simple_message($recipient_id, $user['id'], SN_TIME_NOW, MSG_TYPE_PLAYER, "{$user_safe_name} [{$user['galaxy']}:{$user['system']}:{$user['planet']}]", $subject, $text, true); |
||
| 103 | |||
| 104 | //$recipient_id = 0; |
||
| 105 | //$recipient_name = ''; |
||
| 106 | //$subject = ''; |
||
| 107 | $text = ''; |
||
| 108 | |||
| 109 | $msg_sent = true; |
||
| 110 | } else { |
||
| 111 | $subject = sys_get_param_str_unsafe('subject'); |
||
| 112 | $text = sys_get_param_str_unsafe('text'); |
||
| 113 | } |
||
| 114 | $recipient_name = sys_get_param_str_unsafe('recipient_name'); |
||
| 115 | } |
||
| 116 | |||
| 117 | $subject = $subject ? $subject : classLocale::$lang['msg_subject_default']; |
||
| 118 | |||
| 119 | $template->assign_vars(array( |
||
| 120 | 'RECIPIENT_ID' => $recipient_id, |
||
| 121 | 'RECIPIENT_NAME' => htmlspecialchars($recipient_name), |
||
| 122 | 'SUBJECT' => htmlspecialchars($subject), |
||
| 123 | 'TEXT' => htmlspecialchars($text), |
||
| 124 | )); |
||
| 125 | |||
| 126 | foreach($error_list as $error_message) { |
||
| 127 | $template->assign_block_vars('result', $error_message); |
||
| 128 | } |
||
| 129 | |||
| 130 | $message_query = db_message_list_get_last_20($user, $recipient_id); |
||
| 131 | while($message_row = db_fetch($message_query)) { |
||
| 132 | $template->assign_block_vars('messages', array( |
||
| 133 | 'ID' => $message_row['message_id'], |
||
| 134 | 'DATE' => date(FMT_DATE_TIME, $message_row['message_time'] + SN_CLIENT_TIME_DIFF), |
||
| 135 | 'FROM' => htmlspecialchars($message_row['message_from']), |
||
| 136 | 'SUBJ' => htmlspecialchars($message_row['message_subject']), |
||
| 137 | 'TEXT' => in_array($message_row['message_type'], array(MSG_TYPE_PLAYER, MSG_TYPE_ALLIANCE)) && $message_row['message_sender'] ? nl2br(htmlspecialchars($message_row['message_text'])) : nl2br($message_row['message_text']), |
||
| 138 | |||
| 139 | 'FROM_ID' => $message_row['message_sender'], |
||
| 140 | )); |
||
| 141 | } |
||
| 142 | |||
| 143 | break; |
||
| 144 | |||
| 145 | case 'delete': |
||
| 146 | $query_add = ''; |
||
| 147 | |||
| 148 | $message_range = sys_get_param_str('message_range'); |
||
| 149 | |||
| 150 | switch($message_range) { |
||
| 151 | case 'unchecked': |
||
| 152 | case 'checked': |
||
| 153 | $marked_message_list = sys_get_param('mark', array()); |
||
| 154 | if($message_range == 'checked' && empty($marked_message_list)) { |
||
| 155 | break; |
||
| 156 | } |
||
| 157 | |||
| 158 | $query_add = implode(',', $marked_message_list); |
||
| 159 | if($query_add) { |
||
| 160 | $query_add = "IN ({$query_add})"; |
||
| 161 | if($message_range == 'unchecked') { |
||
| 162 | $query_add = "NOT {$query_add}"; |
||
| 163 | } |
||
| 164 | $query_add = " AND `message_id` {$query_add}"; |
||
| 165 | } |
||
| 166 | |||
| 167 | case 'class': |
||
| 168 | if($current_class != MSG_TYPE_OUTBOX && $current_class != MSG_TYPE_NEW) { |
||
| 169 | $query_add .= " AND `message_type` = {$current_class}"; |
||
| 170 | } |
||
| 171 | case 'all': |
||
| 172 | $query_add = $query_add ? $query_add : true; |
||
| 173 | break; |
||
| 174 | } |
||
| 175 | |||
| 176 | if($query_add) { |
||
| 177 | $query_add = $query_add === true ? '' : $query_add; |
||
| 178 | db_message_list_delete($user, $query_add); |
||
| 179 | } |
||
| 180 | |||
| 181 | case 'show': |
||
| 182 | if($current_class == MSG_TYPE_OUTBOX) { |
||
| 183 | $message_query = db_message_list_outbox_by_user_id($user['id']); |
||
| 184 | } else { |
||
| 185 | if($current_class == MSG_TYPE_NEW) { |
||
| 186 | $SubUpdateQry = array(); |
||
| 187 | foreach($sn_message_class_list as $message_class_id => $message_class) { |
||
| 188 | if($message_class_id != MSG_TYPE_OUTBOX) { |
||
| 189 | $SubUpdateQry[] = "`{$message_class['name']}` = '0'"; |
||
| 190 | $user[$message_class['name']] = 0; |
||
| 191 | } |
||
| 192 | } |
||
| 193 | $SubUpdateQry = implode(',', $SubUpdateQry); |
||
| 194 | } else { |
||
| 195 | $SubUpdateQry = "`{$sn_message_class_list[$current_class]['name']}` = '0', `{$sn_message_class_list[MSG_TYPE_NEW]['name']}` = `{$sn_message_class_list[MSG_TYPE_NEW]['name']}` - '{$user[$sn_message_class_list[$current_class]['name']]}'"; |
||
| 196 | $SubSelectQry = "AND `message_type` = '{$current_class}'"; |
||
| 197 | |||
| 198 | $user[$sn_message_class_list[MSG_TYPE_NEW]['name']] -= $user[$sn_message_class_list[$current_class]['name']]; |
||
| 199 | $user[$sn_message_class_list[$current_class]['name']] = 0; |
||
| 200 | } |
||
| 201 | |||
| 202 | db_user_set_by_id($user['id'], $SubUpdateQry); |
||
| 203 | $message_query = db_message_list_by_owner_and_string($user, $SubSelectQry); |
||
| 204 | } |
||
| 205 | |||
| 206 | if(sys_get_param_int('return')) { |
||
| 207 | header('Location: messages.php'); |
||
| 208 | die(); |
||
| 209 | } |
||
| 210 | |||
| 211 | $template = gettemplate('msg_message_list', true); |
||
| 212 | while($message_row = db_fetch($message_query)) { |
||
| 213 | $template->assign_block_vars('messages', array( |
||
| 214 | 'ID' => $message_row['message_id'], |
||
| 215 | 'DATE' => date(FMT_DATE_TIME, $message_row['message_time'] + SN_CLIENT_TIME_DIFF), |
||
| 216 | 'FROM' => htmlspecialchars($message_row['message_from']), |
||
| 217 | 'SUBJ' => htmlspecialchars($message_row['message_subject']), |
||
| 218 | 'TEXT' => in_array($message_row['message_type'], array(MSG_TYPE_PLAYER, MSG_TYPE_ALLIANCE)) && $message_row['message_sender'] ? nl2br(htmlspecialchars($message_row['message_text'])) : nl2br($message_row['message_text']), |
||
| 219 | |||
| 220 | 'FROM_ID' => $message_row['message_sender'], |
||
| 221 | 'SUBJ_SANITIZED' => htmlspecialchars($message_row['message_subject']), |
||
| 222 | 'STYLE' => $current_class == MSG_TYPE_OUTBOX ? $sn_message_class_list[MSG_TYPE_OUTBOX]['name'] : $sn_message_class_list[$message_row['message_type']]['name'], |
||
| 223 | )); |
||
| 224 | } |
||
| 225 | |||
| 226 | $current_class_text = classLocale::$lang['msg_class'][$current_class]; |
||
| 227 | |||
| 228 | $template->assign_vars(array( |
||
| 229 | "MESSAGE_CLASS" => $current_class, |
||
| 230 | "MESSAGE_CLASS_TEXT" => $current_class_text, |
||
| 231 | )); |
||
| 232 | break; |
||
| 233 | } |
||
| 234 | |||
| 235 | if(!$template) { |
||
| 236 | $template = gettemplate('msg_message_class', true); |
||
| 237 | |||
| 238 | $query = db_message_count_by_owner_and_type($user); |
||
| 239 | while($message_row = db_fetch($query)) { |
||
| 240 | $messages_total[$message_row['message_type']] = $message_row['message_count']; |
||
| 241 | $messages_total[MSG_TYPE_NEW] += $message_row['message_count']; |
||
| 242 | } |
||
| 243 | |||
| 244 | $messages_total[MSG_TYPE_OUTBOX] = db_message_count_outbox($user); |
||
| 245 | |||
| 246 | foreach($sn_message_class_list as $message_class_id => $message_class) { |
||
| 247 | $template->assign_block_vars('message_class', array( |
||
| 248 | 'ID' => $message_class_id, |
||
| 249 | 'STYLE' => $message_class['name'], |
||
| 250 | 'TEXT' => classLocale::$lang['msg_class'][$message_class_id], |
||
| 251 | 'UNREAD' => $user[$message_class['name']], |
||
| 252 | 'TOTAL' => intval($messages_total[$message_class_id]), |
||
| 253 | )); |
||
| 254 | } |
||
| 255 | |||
| 256 | $template->assign_vars(array( |
||
| 257 | 'PAGE_HINT' => classLocale::$lang['msg_page_hint_class'], |
||
| 258 | )); |
||
| 259 | } |
||
| 260 | |||
| 261 | display($template, classLocale::$lang['msg_page_header']); |
||
| 262 |
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.