Completed
Push — work-fleets ( 069d1a...74a0d7 )
by SuperNova.WS
04:58
created

messages.php (1 issue)

Upgrade to new PHP Analysis Engine

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
This code seems to be duplicated across 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...
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