~azzar1/unity/add-show-desktop-key

443 by dcoles
Added Forum application along with unmodifed version of phpBB3 "Olympus" 3.0.0
1
<?php
2
/**
3
*
4
* @package acp
5
* @version $Id: acp_reasons.php,v 1.24 2007/10/05 14:36:32 acydburn Exp $
6
* @copyright (c) 2005 phpBB Group
7
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
8
*
9
*/
10
11
/**
12
* @ignore
13
*/
14
if (!defined('IN_PHPBB'))
15
{
16
	exit;
17
}
18
19
/**
20
* @package acp
21
*/
22
class acp_reasons
23
{
24
	var $u_action;
25
26
	function main($id, $mode)
27
	{
28
		global $db, $user, $auth, $template, $cache;
29
		global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
30
31
		$user->add_lang(array('mcp', 'acp/posting'));
32
33
		// Set up general vars
34
		$action = request_var('action', '');
35
		$submit = (isset($_POST['submit'])) ? true : false;
36
		$reason_id = request_var('id', 0);
37
38
		$this->tpl_name = 'acp_reasons';
39
		$this->page_title = 'ACP_REASONS';
40
41
		$form_name = 'acp_reason';
42
		add_form_key('acp_reason');
43
44
		$error = array();
45
46
		switch ($action)
47
		{
48
			case 'add':
49
			case 'edit':
50
51
				$reason_row = array(
52
					'reason_title'			=> utf8_normalize_nfc(request_var('reason_title', '', true)),
53
					'reason_description'	=> utf8_normalize_nfc(request_var('reason_description', '', true)),
54
				);
55
56
				if ($submit)
57
				{
58
					if (!check_form_key($form_name))
59
					{
60
						$error[] = $user->lang['FORM_INVALID'];
61
					}
62
					// Reason specified?
63
					if (!$reason_row['reason_title'] || !$reason_row['reason_description'])
64
					{
65
						$error[] = $user->lang['NO_REASON_INFO'];
66
					}
67
68
					$check_double = ($action == 'add') ? true : false;
69
70
					if ($action == 'edit')
71
					{
72
						$sql = 'SELECT reason_title
73
							FROM ' . REPORTS_REASONS_TABLE . "
74
							WHERE reason_id = $reason_id";
75
						$result = $db->sql_query($sql);
76
						$row = $db->sql_fetchrow($result);
77
						$db->sql_freeresult($result);
78
79
						if (strtolower($row['reason_title']) == 'other' || strtolower($reason_row['reason_title']) == 'other')
80
						{
81
							$reason_row['reason_title'] = 'other';
82
						}
83
84
						if ($row['reason_title'] != $reason_row['reason_title'])
85
						{
86
							$check_double = true;
87
						}
88
					}
89
90
					// Check for same reason if adding it...
91
					if ($check_double)
92
					{
93
						$sql = 'SELECT reason_id
94
							FROM ' . REPORTS_REASONS_TABLE . "
95
							WHERE reason_title = '" . $db->sql_escape($reason_row['reason_title']) . "'";
96
						$result = $db->sql_query($sql);
97
						$row = $db->sql_fetchrow($result);
98
						$db->sql_freeresult($result);
99
100
						if ($row || ($action == 'add' && strtolower($reason_row['reason_title']) == 'other'))
101
						{
102
							$error[] = $user->lang['REASON_ALREADY_EXIST'];
103
						}
104
					}
105
106
					if (!sizeof($error))
107
					{
108
						// New reason?
109
						if ($action == 'add')
110
						{
111
							// Get new order...
112
							$sql = 'SELECT MAX(reason_order) as max_reason_order
113
								FROM ' . REPORTS_REASONS_TABLE;
114
							$result = $db->sql_query($sql);
115
							$max_order = (int) $db->sql_fetchfield('max_reason_order');
116
							$db->sql_freeresult($result);
117
							
118
							$sql_ary = array(
119
								'reason_title'			=> (string) $reason_row['reason_title'],
120
								'reason_description'	=> (string) $reason_row['reason_description'],
121
								'reason_order'			=> $max_order + 1
122
							);
123
124
							$db->sql_query('INSERT INTO ' . REPORTS_REASONS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary));
125
126
							$log = 'ADDED';
127
						}
128
						else if ($reason_id)
129
						{
130
							$sql_ary = array(
131
								'reason_title'			=> (string) $reason_row['reason_title'],
132
								'reason_description'	=> (string) $reason_row['reason_description'],
133
							);
134
135
							$db->sql_query('UPDATE ' . REPORTS_REASONS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
136
								WHERE reason_id = ' . $reason_id);
137
138
							$log = 'UPDATED';
139
						}
140
141
						add_log('admin', 'LOG_REASON_' . $log, $reason_row['reason_title']);
142
						trigger_error($user->lang['REASON_' . $log] . adm_back_link($this->u_action));
143
					}
144
				}
145
				else if ($reason_id)
146
				{
147
					$sql = 'SELECT *
148
						FROM ' . REPORTS_REASONS_TABLE . '
149
						WHERE reason_id = ' . $reason_id;
150
					$result = $db->sql_query($sql);
151
					$reason_row = $db->sql_fetchrow($result);
152
					$db->sql_freeresult($result);
153
154
					if (!$reason_row)
155
					{
156
						trigger_error($user->lang['NO_REASON'] . adm_back_link($this->u_action), E_USER_WARNING);
157
					}
158
				}
159
160
				$l_title = ($action == 'edit') ? 'EDIT' : 'ADD';
161
162
				$translated = false;
163
164
				// If the reason is defined within the language file, we will use the localized version, else just use the database entry...
165
				if (isset($user->lang['report_reasons']['TITLE'][strtoupper($reason_row['reason_title'])]) && isset($user->lang['report_reasons']['DESCRIPTION'][strtoupper($reason_row['reason_title'])]))
166
				{
167
					$translated = true;
168
				}
169
170
				$template->assign_vars(array(
171
					'L_TITLE'		=> $user->lang['REASON_' . $l_title],
172
					'U_ACTION'		=> $this->u_action . "&amp;id=$reason_id&amp;action=$action",
173
					'U_BACK'		=> $this->u_action,
174
					'ERROR_MSG'		=> (sizeof($error)) ? implode('<br />', $error) : '',
175
					
176
					'REASON_TITLE'			=> $reason_row['reason_title'],
177
					'REASON_DESCRIPTION'	=> $reason_row['reason_description'],
178
179
					'TRANSLATED_TITLE'		=> ($translated) ? $user->lang['report_reasons']['TITLE'][strtoupper($reason_row['reason_title'])] : '',
180
					'TRANSLATED_DESCRIPTION'=> ($translated) ? $user->lang['report_reasons']['DESCRIPTION'][strtoupper($reason_row['reason_title'])] : '',
181
182
					'S_AVAILABLE_TITLES'	=> implode(', ', array_map('htmlspecialchars', array_keys($user->lang['report_reasons']['TITLE']))),
183
					'S_EDIT_REASON'			=> true,
184
					'S_TRANSLATED'			=> $translated,
185
					'S_ERROR'				=> (sizeof($error)) ? true : false,
186
					)
187
				);
188
189
				return;
190
			break;
191
192
			case 'delete':
193
194
				$sql = 'SELECT *
195
					FROM ' . REPORTS_REASONS_TABLE . '
196
					WHERE reason_id = ' . $reason_id;
197
				$result = $db->sql_query($sql);
198
				$reason_row = $db->sql_fetchrow($result);
199
				$db->sql_freeresult($result);
200
201
				if (!$reason_row)
202
				{
203
					trigger_error($user->lang['NO_REASON'] . adm_back_link($this->u_action), E_USER_WARNING);
204
				}
205
206
				if (strtolower($reason_row['reason_title']) == 'other')
207
				{
208
					trigger_error($user->lang['NO_REMOVE_DEFAULT_REASON'] . adm_back_link($this->u_action), E_USER_WARNING);
209
				}
210
211
				// Let the deletion be confirmed...
212
				if (confirm_box(true))
213
				{
214
					$sql = 'SELECT reason_id
215
						FROM ' . REPORTS_REASONS_TABLE . "
216
						WHERE LOWER(reason_title) = 'other'";
217
					$result = $db->sql_query($sql);
218
					$other_reason_id = (int) $db->sql_fetchfield('reason_id');
219
					$db->sql_freeresult($result);
220
221
					switch ($db->sql_layer)
222
					{
223
						// The ugly one!
224
						case 'mysqli':
225
						case 'mysql4':
226
						case 'mysql':
227
							// Change the reports using this reason to 'other'
228
							$sql = 'UPDATE ' . REPORTS_TABLE . '
229
								SET reason_id = ' . $other_reason_id . ", report_text = CONCAT('" . $db->sql_escape($reason_row['reason_description']) . "\n\n', report_text)
230
								WHERE reason_id = $reason_id";
231
						break;
232
233
						// Standard? What's that?
234
						case 'mssql':
235
						case 'mssql_odbc':
236
							// Change the reports using this reason to 'other'
237
							$sql = "DECLARE @ptrval binary(16)
238
239
									SELECT @ptrval = TEXTPTR(report_text)
240
										FROM " . REPORTS_TABLE . "
241
									WHERE reason_id = " . $reason_id . "
242
243
									UPDATETEXT " . REPORTS_TABLE . ".report_text @ptrval 0 0 '" . $db->sql_escape($reason_row['reason_description']) . "\n\n'
244
245
									UPDATE " . REPORTS_TABLE . '
246
										SET reason_id = ' . $other_reason_id . "
247
									WHERE reason_id = $reason_id";
248
						break;
249
250
						// Teh standard
251
						case 'postgres':
252
						case 'oracle':
253
						case 'firebird':
254
						case 'sqlite':
255
							// Change the reports using this reason to 'other'
256
							$sql = 'UPDATE ' . REPORTS_TABLE . '
257
								SET reason_id = ' . $other_reason_id . ", report_text = '" . $db->sql_escape($reason_row['reason_description']) . "\n\n' || report_text
258
								WHERE reason_id = $reason_id";
259
						break;
260
					}
261
					$db->sql_query($sql);
262
263
					$db->sql_query('DELETE FROM ' . REPORTS_REASONS_TABLE . ' WHERE reason_id = ' . $reason_id);
264
265
					add_log('admin', 'LOG_REASON_REMOVED', $reason_row['reason_title']);
266
					trigger_error($user->lang['REASON_REMOVED'] . adm_back_link($this->u_action));
267
				}
268
				else
269
				{
270
					confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
271
						'i'			=> $id,
272
						'mode'		=> $mode,
273
						'action'	=> $action,
274
						'id'		=> $reason_id))
275
					);
276
				}
277
278
			break;
279
280
			case 'move_up':
281
			case 'move_down':
282
283
				$order = request_var('order', 0);
284
				$order_total = $order * 2 + (($action == 'move_up') ? -1 : 1);
285
286
				$sql = 'UPDATE ' . REPORTS_REASONS_TABLE . '
287
					SET reason_order = ' . $order_total . ' - reason_order
288
					WHERE reason_order IN (' . $order . ', ' . (($action == 'move_up') ? $order - 1 : $order + 1) . ')';
289
				$db->sql_query($sql);
290
291
			break;
292
		}
293
294
		// By default, check that order is valid and fix it if necessary
295
		$sql = 'SELECT reason_id, reason_order
296
			FROM ' . REPORTS_REASONS_TABLE . '
297
			ORDER BY reason_order';
298
		$result = $db->sql_query($sql);
299
300
		if ($row = $db->sql_fetchrow($result))
301
		{
302
			$order = 0;
303
			do
304
			{
305
				++$order;
306
				
307
				if ($row['reason_order'] != $order)
308
				{
309
					$sql = 'UPDATE ' . REPORTS_REASONS_TABLE . "
310
						SET reason_order = $order
311
						WHERE reason_id = {$row['reason_id']}";
312
					$db->sql_query($sql);
313
				}
314
			}
315
			while ($row = $db->sql_fetchrow($result));
316
		}
317
		$db->sql_freeresult($result);
318
319
		$template->assign_vars(array(
320
			'U_ACTION'			=> $this->u_action,
321
			)
322
		);
323
324
		// Reason count
325
		$sql = 'SELECT reason_id, COUNT(reason_id) AS reason_count
326
			FROM ' . REPORTS_TABLE . '
327
			GROUP BY reason_id';
328
		$result = $db->sql_query($sql);
329
330
		$reason_count = array();
331
		while ($row = $db->sql_fetchrow($result))
332
		{
333
			$reason_count[$row['reason_id']] = $row['reason_count'];
334
		}
335
		$db->sql_freeresult($result);
336
337
		$sql = 'SELECT *
338
			FROM ' . REPORTS_REASONS_TABLE . '
339
			ORDER BY reason_order ASC';
340
		$result = $db->sql_query($sql);
341
342
		while ($row = $db->sql_fetchrow($result))
343
		{
344
			$translated = false;
345
			$other_reason = ($row['reason_title'] == 'other') ? true : false;
346
347
			// If the reason is defined within the language file, we will use the localized version, else just use the database entry...
348
			if (isset($user->lang['report_reasons']['TITLE'][strtoupper($row['reason_title'])]) && isset($user->lang['report_reasons']['DESCRIPTION'][strtoupper($row['reason_title'])]))
349
			{
350
				$row['reason_description'] = $user->lang['report_reasons']['DESCRIPTION'][strtoupper($row['reason_title'])];
351
				$row['reason_title'] = $user->lang['report_reasons']['TITLE'][strtoupper($row['reason_title'])];
352
353
				$translated = true;
354
			}
355
356
			$template->assign_block_vars('reasons', array(
357
				'REASON_TITLE'			=> $row['reason_title'],
358
				'REASON_DESCRIPTION'	=> $row['reason_description'],
359
				'REASON_COUNT'			=> (isset($reason_count[$row['reason_id']])) ? $reason_count[$row['reason_id']] : 0,
360
361
				'S_TRANSLATED'		=> $translated,
362
				'S_OTHER_REASON'	=> $other_reason,
363
364
				'U_EDIT'		=> $this->u_action . '&amp;action=edit&amp;id=' . $row['reason_id'],
365
				'U_DELETE'		=> (!$other_reason) ? $this->u_action . '&amp;action=delete&amp;id=' . $row['reason_id'] : '',
366
				'U_MOVE_UP'		=> $this->u_action . '&amp;action=move_up&amp;order=' . $row['reason_order'],
367
				'U_MOVE_DOWN'	=> $this->u_action . '&amp;action=move_down&amp;order=' . $row['reason_order'])
368
			);
369
		}
370
		$db->sql_freeresult($result);
371
	}
372
}
373
374
?>