1
+ − 1
<?php
166
+ − 2
1
+ − 3
/*
+ − 4
* Enano - an open-source CMS capable of wiki functions, Drupal-like sidebar blocks, and everything in between
166
+ − 5
* Version 1.1.1
1
+ − 6
* Copyright (C) 2006-2007 Dan Fuhry
+ − 7
* pageutils.php - a class that handles raw page manipulations, used mostly by AJAX requests or their old-fashioned form-based counterparts
+ − 8
*
+ − 9
* This program is Free Software; you can redistribute and/or modify it under the terms of the GNU General Public License
+ − 10
* as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
+ − 11
*
+ − 12
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ − 13
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for details.
+ − 14
*/
+ − 15
+ − 16
class PageUtils {
+ − 17
+ − 18
/**
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 19
* Tell if a username is used or not.
1
+ − 20
* @param $name the name to check for
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 21
* @return string
1
+ − 22
*/
+ − 23
+ − 24
function checkusername($name)
+ − 25
{
+ − 26
global $db, $session, $paths, $template, $plugins; // Common objects
270
5bcdee999015
Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
diff
changeset
+ − 27
$name = str_replace('_', ' ', $name);
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 28
$q = $db->sql_query('SELECT username FROM ' . table_prefix.'users WHERE username=\'' . $db->escape(rawurldecode($name)) . '\'');
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 29
if ( !$q )
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 30
{
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 31
die($db->get_error());
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 32
}
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 33
if ( $db->numrows() < 1)
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 34
{
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 35
$db->free_result(); return('good');
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 36
}
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 37
else
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 38
{
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 39
$db->free_result(); return('bad');
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 40
}
1
+ − 41
}
+ − 42
+ − 43
/**
+ − 44
* Get the wiki formatting source for a page
+ − 45
* @param $page the full page id (Namespace:Pagename)
+ − 46
* @return string
+ − 47
* @todo (DONE) Make it require a password (just for security purposes)
+ − 48
*/
+ − 49
+ − 50
function getsource($page, $password = false)
+ − 51
{
+ − 52
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 53
if(!isset($paths->pages[$page]))
+ − 54
{
+ − 55
return '';
+ − 56
}
+ − 57
+ − 58
if(strlen($paths->pages[$page]['password']) == 40)
+ − 59
{
+ − 60
if(!$password || ( $password != $paths->pages[$page]['password']))
+ − 61
{
+ − 62
return 'invalid_password';
+ − 63
}
+ − 64
}
+ − 65
+ − 66
if(!$session->get_permissions('view_source')) // Dependencies handle this for us - this also checks for read privileges
+ − 67
return 'access_denied';
+ − 68
$pid = RenderMan::strToPageID($page);
+ − 69
if($pid[1] == 'Special' || $pid[1] == 'Admin')
+ − 70
{
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 71
die('This type of page (' . $paths->nslist[$pid[1]] . ') cannot be edited because the page source code is not stored in the database.');
1
+ − 72
}
+ − 73
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 74
$e = $db->sql_query('SELECT page_text,char_tag FROM ' . table_prefix.'page_text WHERE page_id=\'' . $pid[0] . '\' AND namespace=\'' . $pid[1] . '\'');
1
+ − 75
if ( !$e )
+ − 76
{
+ − 77
$db->_die('The page text could not be selected.');
+ − 78
}
+ − 79
if( $db->numrows() < 1 )
+ − 80
{
+ − 81
return ''; //$db->_die('There were no rows in the text table that matched the page text query.');
+ − 82
}
+ − 83
+ − 84
$r = $db->fetchrow();
+ − 85
$db->free_result();
+ − 86
$message = $r['page_text'];
+ − 87
+ − 88
return htmlspecialchars($message);
+ − 89
}
+ − 90
+ − 91
/**
+ − 92
* Basically a frontend to RenderMan::getPage(), with the ability to send valid data for nonexistent pages
+ − 93
* @param $page the full page id (Namespace:Pagename)
+ − 94
* @param $send_headers true if the theme headers should be sent (still dependent on current page settings), false otherwise
+ − 95
* @return string
+ − 96
*/
+ − 97
+ − 98
function getpage($page, $send_headers = false, $hist_id = false)
+ − 99
{
+ − 100
die('PageUtils->getpage is deprecated.');
+ − 101
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 102
ob_start();
+ − 103
$pid = RenderMan::strToPageID($page);
+ − 104
//die('<pre>'.print_r($pid, true).'</pre>');
+ − 105
if(isset($paths->pages[$page]['password']) && strlen($paths->pages[$page]['password']) == 40)
+ − 106
{
+ − 107
password_prompt($page);
+ − 108
}
+ − 109
if(isset($paths->pages[$page]))
+ − 110
{
+ − 111
doStats($pid[0], $pid[1]);
+ − 112
}
+ − 113
if($paths->custom_page || $pid[1] == 'Special')
+ − 114
{
+ − 115
// If we don't have access to the page, get out and quick!
+ − 116
if(!$session->get_permissions('read') && $pid[0] != 'Login' && $pid[0] != 'Register')
+ − 117
{
+ − 118
$template->tpl_strings['PAGE_NAME'] = 'Access denied';
+ − 119
+ − 120
if ( $send_headers )
+ − 121
{
+ − 122
$template->header();
+ − 123
}
+ − 124
+ − 125
echo '<div class="error-box"><b>Access to this page is denied.</b><br />This may be because you are not logged in or you have not met certain criteria for viewing this page.</div>';
+ − 126
+ − 127
if ( $send_headers )
+ − 128
{
+ − 129
$template->footer();
+ − 130
}
+ − 131
+ − 132
$r = ob_get_contents();
+ − 133
ob_end_clean();
+ − 134
return $r;
+ − 135
}
+ − 136
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 137
$fname = 'page_' . $pid[1] . '_' . $paths->pages[$page]['urlname_nons'];
1
+ − 138
@call_user_func($fname);
+ − 139
+ − 140
}
+ − 141
else if ( $pid[1] == 'Admin' )
+ − 142
{
+ − 143
// If we don't have access to the page, get out and quick!
+ − 144
if(!$session->get_permissions('read'))
+ − 145
{
+ − 146
$template->tpl_strings['PAGE_NAME'] = 'Access denied';
+ − 147
if ( $send_headers )
+ − 148
{
+ − 149
$template->header();
+ − 150
}
+ − 151
echo '<div class="error-box"><b>Access to this page is denied.</b><br />This may be because you are not logged in or you have not met certain criteria for viewing this page.</div>';
+ − 152
if ( $send_headers )
+ − 153
{
+ − 154
$template->footer();
+ − 155
}
+ − 156
$r = ob_get_contents();
+ − 157
ob_end_clean();
+ − 158
return $r;
+ − 159
}
+ − 160
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 161
$fname = 'page_' . $pid[1] . '_' . $pid[0];
1
+ − 162
if ( !function_exists($fname) )
+ − 163
{
+ − 164
$title = 'Page backend not found';
+ − 165
$message = "The administration page you are looking for was properly registered using the page API, but the backend function
+ − 166
(<tt>$fname</tt>) was not found. If this is a plugin page, then this is almost certainly a bug with the plugin.";
+ − 167
if ( $send_headers )
+ − 168
{
+ − 169
die_friendly($title, "<p>$message</p>");
+ − 170
}
+ − 171
else
+ − 172
{
+ − 173
echo "<h2>$title</h2>\n<p>$message</p>";
+ − 174
}
+ − 175
}
+ − 176
@call_user_func($fname);
+ − 177
}
+ − 178
else if ( !isset( $paths->pages[$page] ) )
+ − 179
{
+ − 180
ob_start();
+ − 181
$code = $plugins->setHook('page_not_found');
+ − 182
foreach ( $code as $cmd )
+ − 183
{
+ − 184
eval($cmd);
+ − 185
}
+ − 186
$text = ob_get_contents();
+ − 187
if ( $text != '' )
+ − 188
{
+ − 189
ob_end_clean();
+ − 190
return $text;
+ − 191
}
+ − 192
$template->header();
+ − 193
if($m = $paths->sysmsg('Page_not_found'))
+ − 194
{
+ − 195
eval('?>'.RenderMan::render($m));
+ − 196
}
+ − 197
else
+ − 198
{
+ − 199
header('HTTP/1.1 404 Not Found');
+ − 200
echo '<h3>There is no page with this title yet.</h3>
+ − 201
<p>You have requested a page that doesn\'t exist yet.';
+ − 202
if($session->get_permissions('create_page')) echo ' You can <a href="'.makeUrl($paths->page, 'do=edit', true).'" onclick="ajaxEditor(); return false;">create this page</a>, or return to the <a href="'.makeUrl(getConfig('main_page')).'">homepage</a>.';
+ − 203
else echo ' Return to the <a href="'.makeUrl(getConfig('main_page')).'">homepage</a>.</p>';
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 204
if ( $session->get_permissions('history_rollback') )
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 205
{
322
+ − 206
$e = $db->sql_query('SELECT * FROM ' . table_prefix.'logs WHERE action=\'delete\' AND page_id=\'' . $paths->page_id . '\' AND namespace=\'' . $pid[1] . '\' ORDER BY time_id DESC;');
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 207
if ( !$e )
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 208
{
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 209
$db->_die('The deletion log could not be selected.');
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 210
}
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 211
if ($db->numrows() > 0 )
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 212
{
1
+ − 213
$r = $db->fetchrow();
351
+ − 214
echo '<p>This page also appears to have some log entries in the database - it seems that it was deleted on ' . enano_date('d M Y h:i a', intval($r['time_id'])) . '. You can probably <a href="'.makeUrl($paths->page, 'do=rollback&id=' . $r['time_id']) . '" onclick="ajaxRollback(\'' . $r['time_id'] . '\'); return false;">roll back</a> the deletion.</p>';
1
+ − 215
}
+ − 216
$db->free_result();
+ − 217
}
+ − 218
echo '<p>
+ − 219
HTTP Error: 404 Not Found
+ − 220
</p>';
+ − 221
}
+ − 222
$template->footer();
+ − 223
}
+ − 224
else
+ − 225
{
+ − 226
+ − 227
// If we don't have access to the page, get out and quick!
+ − 228
if(!$session->get_permissions('read'))
+ − 229
{
+ − 230
$template->tpl_strings['PAGE_NAME'] = 'Access denied';
+ − 231
if($send_headers) $template->header();
+ − 232
echo '<div class="error-box"><b>Access to this page is denied.</b><br />This may be because you are not logged in or you have not met certain criteria for viewing this page.</div>';
+ − 233
if($send_headers) $template->footer();
+ − 234
$r = ob_get_contents();
+ − 235
ob_end_clean();
+ − 236
return $r;
+ − 237
}
+ − 238
+ − 239
ob_start();
+ − 240
$code = $plugins->setHook('page_custom_handler');
+ − 241
foreach ( $code as $cmd )
+ − 242
{
+ − 243
eval($cmd);
+ − 244
}
+ − 245
$text = ob_get_contents();
+ − 246
if ( $text != '' )
+ − 247
{
+ − 248
ob_end_clean();
+ − 249
return $text;
+ − 250
}
+ − 251
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 252
if ( $hist_id )
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 253
{
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 254
$e = $db->sql_query('SELECT page_text,date_string,char_tag FROM ' . table_prefix.'logs WHERE page_id=\'' . $paths->pages[$page]['urlname_nons'] . '\' AND namespace=\'' . $pid[1] . '\' AND log_type=\'page\' AND action=\'edit\' AND time_id=' . $db->escape($hist_id) . '');
1
+ − 255
if($db->numrows() < 1)
+ − 256
{
+ − 257
$db->_die('There were no rows in the text table that matched the page text query.');
+ − 258
}
+ − 259
$r = $db->fetchrow();
+ − 260
$db->free_result();
351
+ − 261
$message = '<div class="info-box" style="margin-left: 0; margin-top: 5px;"><b>Notice:</b><br />The page you are viewing was archived on ' . enano_date('d M Y h:i a', intval($r['time_id'])) . '.<br /><a href="'.makeUrl($page).'" onclick="ajaxReset(); return false;">View current version</a> | <a href="'.makeUrl($page, 'do=rollback&id=' . $hist_id) . '" onclick="ajaxRollback(\'' . $hist_id . '\')">Restore this version</a></div><br />'.RenderMan::render($r['page_text']);
1
+ − 262
+ − 263
if( !$paths->pages[$page]['special'] )
+ − 264
{
+ − 265
if($send_headers)
+ − 266
{
+ − 267
$template->header();
+ − 268
}
+ − 269
display_page_headers();
+ − 270
}
+ − 271
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 272
eval('?>' . $message);
1
+ − 273
+ − 274
if( !$paths->pages[$page]['special'] )
+ − 275
{
+ − 276
display_page_footers();
+ − 277
if($send_headers)
+ − 278
{
+ − 279
$template->footer();
+ − 280
}
+ − 281
}
+ − 282
+ − 283
} else {
+ − 284
if(!$paths->pages[$page]['special'])
+ − 285
{
+ − 286
$message = RenderMan::getPage($paths->pages[$page]['urlname_nons'], $pid[1]);
+ − 287
}
+ − 288
else
+ − 289
{
+ − 290
$message = RenderMan::getPage($paths->pages[$page]['urlname_nons'], $pid[1], 0, false, false, false, false);
+ − 291
}
+ − 292
// This line is used to debug wikiformatted code
+ − 293
// die('<pre>'.htmlspecialchars($message).'</pre>');
+ − 294
+ − 295
if( !$paths->pages[$page]['special'] )
+ − 296
{
+ − 297
if($send_headers)
+ − 298
{
+ − 299
$template->header();
+ − 300
}
+ − 301
display_page_headers();
+ − 302
}
+ − 303
+ − 304
// This is it, this is what all of Enano has been working up to...
+ − 305
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 306
eval('?>' . $message);
1
+ − 307
+ − 308
if( !$paths->pages[$page]['special'] )
+ − 309
{
+ − 310
display_page_footers();
+ − 311
if($send_headers)
+ − 312
{
+ − 313
$template->footer();
+ − 314
}
+ − 315
}
+ − 316
}
+ − 317
}
+ − 318
$ret = ob_get_contents();
+ − 319
ob_end_clean();
+ − 320
return $ret;
+ − 321
}
+ − 322
+ − 323
/**
+ − 324
* Writes page data to the database, after verifying permissions and running the XSS filter
+ − 325
* @param $page_id the page ID
+ − 326
* @param $namespace the namespace
+ − 327
* @param $message the text to save
+ − 328
* @return string
+ − 329
*/
+ − 330
+ − 331
function savepage($page_id, $namespace, $message, $summary = 'No edit summary given', $minor = false)
+ − 332
{
+ − 333
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 334
$uid = sha1(microtime());
+ − 335
$pname = $paths->nslist[$namespace] . $page_id;
+ − 336
+ − 337
if(!$session->get_permissions('edit_page'))
+ − 338
return 'Access to edit pages is denied.';
+ − 339
+ − 340
if(!isset($paths->pages[$pname]))
+ − 341
{
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 342
$create = PageUtils::createPage($page_id, $namespace);
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 343
if ( $create != 'good' )
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 344
return 'The page did not exist, and I was not able to create it. The reported error was: ' . $create;
21
663fcf528726
Updated all version numbers back to Banshee; a few preliminary steps towards full UTF-8 support in page URLs
Dan
diff
changeset
+ − 345
$paths->page_exists = true;
1
+ − 346
}
+ − 347
260
661beb9b0fa3
Rewrote some security code in PageUtils::savepage to accommodate the ACL system better; there was an issue with non-admin users saving pages on which they have edit rights but wiki mode is turned off
Dan
diff
changeset
+ − 348
// Check page protection
661beb9b0fa3
Rewrote some security code in PageUtils::savepage to accommodate the ACL system better; there was an issue with non-admin users saving pages on which they have edit rights but wiki mode is turned off
Dan
diff
changeset
+ − 349
661beb9b0fa3
Rewrote some security code in PageUtils::savepage to accommodate the ACL system better; there was an issue with non-admin users saving pages on which they have edit rights but wiki mode is turned off
Dan
diff
changeset
+ − 350
$is_protected = false;
661beb9b0fa3
Rewrote some security code in PageUtils::savepage to accommodate the ACL system better; there was an issue with non-admin users saving pages on which they have edit rights but wiki mode is turned off
Dan
diff
changeset
+ − 351
$page_data =& $paths->pages[$pname];
661beb9b0fa3
Rewrote some security code in PageUtils::savepage to accommodate the ACL system better; there was an issue with non-admin users saving pages on which they have edit rights but wiki mode is turned off
Dan
diff
changeset
+ − 352
// Is the protection semi?
661beb9b0fa3
Rewrote some security code in PageUtils::savepage to accommodate the ACL system better; there was an issue with non-admin users saving pages on which they have edit rights but wiki mode is turned off
Dan
diff
changeset
+ − 353
if ( $page_data['protected'] == 2 )
661beb9b0fa3
Rewrote some security code in PageUtils::savepage to accommodate the ACL system better; there was an issue with non-admin users saving pages on which they have edit rights but wiki mode is turned off
Dan
diff
changeset
+ − 354
{
661beb9b0fa3
Rewrote some security code in PageUtils::savepage to accommodate the ACL system better; there was an issue with non-admin users saving pages on which they have edit rights but wiki mode is turned off
Dan
diff
changeset
+ − 355
$is_protected = true;
661beb9b0fa3
Rewrote some security code in PageUtils::savepage to accommodate the ACL system better; there was an issue with non-admin users saving pages on which they have edit rights but wiki mode is turned off
Dan
diff
changeset
+ − 356
// Page is semi-protected. Has the user been here for at least 4 days?
661beb9b0fa3
Rewrote some security code in PageUtils::savepage to accommodate the ACL system better; there was an issue with non-admin users saving pages on which they have edit rights but wiki mode is turned off
Dan
diff
changeset
+ − 357
// 345600 seconds = 4 days
661beb9b0fa3
Rewrote some security code in PageUtils::savepage to accommodate the ACL system better; there was an issue with non-admin users saving pages on which they have edit rights but wiki mode is turned off
Dan
diff
changeset
+ − 358
if ( $session->user_logged_in && ( $session->reg_time + 345600 ) <= time() )
661beb9b0fa3
Rewrote some security code in PageUtils::savepage to accommodate the ACL system better; there was an issue with non-admin users saving pages on which they have edit rights but wiki mode is turned off
Dan
diff
changeset
+ − 359
$is_protected = false;
661beb9b0fa3
Rewrote some security code in PageUtils::savepage to accommodate the ACL system better; there was an issue with non-admin users saving pages on which they have edit rights but wiki mode is turned off
Dan
diff
changeset
+ − 360
}
661beb9b0fa3
Rewrote some security code in PageUtils::savepage to accommodate the ACL system better; there was an issue with non-admin users saving pages on which they have edit rights but wiki mode is turned off
Dan
diff
changeset
+ − 361
// Is the protection full?
661beb9b0fa3
Rewrote some security code in PageUtils::savepage to accommodate the ACL system better; there was an issue with non-admin users saving pages on which they have edit rights but wiki mode is turned off
Dan
diff
changeset
+ − 362
else if ( $page_data['protected'] == 1 )
661beb9b0fa3
Rewrote some security code in PageUtils::savepage to accommodate the ACL system better; there was an issue with non-admin users saving pages on which they have edit rights but wiki mode is turned off
Dan
diff
changeset
+ − 363
{
661beb9b0fa3
Rewrote some security code in PageUtils::savepage to accommodate the ACL system better; there was an issue with non-admin users saving pages on which they have edit rights but wiki mode is turned off
Dan
diff
changeset
+ − 364
$is_protected = true;
661beb9b0fa3
Rewrote some security code in PageUtils::savepage to accommodate the ACL system better; there was an issue with non-admin users saving pages on which they have edit rights but wiki mode is turned off
Dan
diff
changeset
+ − 365
}
661beb9b0fa3
Rewrote some security code in PageUtils::savepage to accommodate the ACL system better; there was an issue with non-admin users saving pages on which they have edit rights but wiki mode is turned off
Dan
diff
changeset
+ − 366
661beb9b0fa3
Rewrote some security code in PageUtils::savepage to accommodate the ACL system better; there was an issue with non-admin users saving pages on which they have edit rights but wiki mode is turned off
Dan
diff
changeset
+ − 367
// If it's protected and we DON'T have even_when_protected rights, bail out
661beb9b0fa3
Rewrote some security code in PageUtils::savepage to accommodate the ACL system better; there was an issue with non-admin users saving pages on which they have edit rights but wiki mode is turned off
Dan
diff
changeset
+ − 368
if ( $is_protected && !$session->get_permissions('even_when_protected') )
661beb9b0fa3
Rewrote some security code in PageUtils::savepage to accommodate the ACL system better; there was an issue with non-admin users saving pages on which they have edit rights but wiki mode is turned off
Dan
diff
changeset
+ − 369
{
661beb9b0fa3
Rewrote some security code in PageUtils::savepage to accommodate the ACL system better; there was an issue with non-admin users saving pages on which they have edit rights but wiki mode is turned off
Dan
diff
changeset
+ − 370
return 'You don\'t have the necessary permissions to edit this page.';
661beb9b0fa3
Rewrote some security code in PageUtils::savepage to accommodate the ACL system better; there was an issue with non-admin users saving pages on which they have edit rights but wiki mode is turned off
Dan
diff
changeset
+ − 371
}
661beb9b0fa3
Rewrote some security code in PageUtils::savepage to accommodate the ACL system better; there was an issue with non-admin users saving pages on which they have edit rights but wiki mode is turned off
Dan
diff
changeset
+ − 372
661beb9b0fa3
Rewrote some security code in PageUtils::savepage to accommodate the ACL system better; there was an issue with non-admin users saving pages on which they have edit rights but wiki mode is turned off
Dan
diff
changeset
+ − 373
// We're skipping the wiki mode check here because by default edit_page pemissions are AUTH_WIKIMODE.
661beb9b0fa3
Rewrote some security code in PageUtils::savepage to accommodate the ACL system better; there was an issue with non-admin users saving pages on which they have edit rights but wiki mode is turned off
Dan
diff
changeset
+ − 374
// The exception here is the user's own userpage, which is overridden at the time of account creation.
661beb9b0fa3
Rewrote some security code in PageUtils::savepage to accommodate the ACL system better; there was an issue with non-admin users saving pages on which they have edit rights but wiki mode is turned off
Dan
diff
changeset
+ − 375
// At that point it's set to AUTH_ALLOW, but obviously only for the user's own userpage.
1
+ − 376
21
663fcf528726
Updated all version numbers back to Banshee; a few preliminary steps towards full UTF-8 support in page URLs
Dan
diff
changeset
+ − 377
// Strip potentially harmful tags and PHP from the message, dependent upon permissions settings
1
+ − 378
$message = RenderMan::preprocess_text($message, false, false);
+ − 379
21
663fcf528726
Updated all version numbers back to Banshee; a few preliminary steps towards full UTF-8 support in page URLs
Dan
diff
changeset
+ − 380
$msg = $db->escape($message);
1
+ − 381
320
112debff64bd
SURPRISE! Preliminary PostgreSQL support added. The required schema file is not present in this commit and will be included at a later date. No installer support is implemented. Also in this commit: several fixes including <!-- SYSMSG ... --> was broken in template compiler; set fixed width on included images to prevent the thumbnail box from getting huge; added a much more friendly interface to AJAX responses that are invalid JSON
Dan
diff
changeset
+ − 382
$minor = $minor ? ENANO_SQL_BOOLEAN_TRUE : ENANO_SQL_BOOLEAN_FALSE;
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 383
$q='INSERT INTO ' . table_prefix.'logs(log_type,action,time_id,date_string,page_id,namespace,page_text,char_tag,author,edit_summary,minor_edit) VALUES(\'page\', \'edit\', '.time().', \''.enano_date('d M Y h:i a').'\', \'' . $paths->page_id . '\', \'' . $paths->namespace . '\', ' . ENANO_SQL_MULTISTRING_PRFIX . '\'' . $msg . '\', \'' . $uid . '\', \'' . $session->username . '\', \'' . $db->escape(htmlspecialchars($summary)) . '\', ' . $minor . ');';
1
+ − 384
if(!$db->sql_query($q)) $db->_die('The history (log) entry could not be inserted into the logs table.');
+ − 385
320
112debff64bd
SURPRISE! Preliminary PostgreSQL support added. The required schema file is not present in this commit and will be included at a later date. No installer support is implemented. Also in this commit: several fixes including <!-- SYSMSG ... --> was broken in template compiler; set fixed width on included images to prevent the thumbnail box from getting huge; added a much more friendly interface to AJAX responses that are invalid JSON
Dan
diff
changeset
+ − 386
$q = 'UPDATE ' . table_prefix.'page_text SET page_text=' . ENANO_SQL_MULTISTRING_PRFIX . '\'' . $msg . '\',char_tag=\'' . $uid . '\' WHERE page_id=\'' . $page_id . '\' AND namespace=\'' . $namespace . '\';';
1
+ − 387
$e = $db->sql_query($q);
+ − 388
if(!$e) $db->_die('Enano was unable to save the page contents. Your changes have been lost <tt>:\'(</tt>.');
+ − 389
+ − 390
$paths->rebuild_page_index($page_id, $namespace);
+ − 391
+ − 392
return 'good';
+ − 393
}
+ − 394
+ − 395
/**
+ − 396
* Creates a page, both in memory and in the database.
+ − 397
* @param string $page_id
+ − 398
* @param string $namespace
+ − 399
* @return bool true on success, false on failure
+ − 400
*/
+ − 401
+ − 402
function createPage($page_id, $namespace, $name = false, $visible = 1)
+ − 403
{
+ − 404
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 405
if(in_array($namespace, Array('Special', 'Admin')))
+ − 406
{
+ − 407
// echo '<b>Notice:</b> PageUtils::createPage: You can\'t create a special page in the database<br />';
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 408
return 'You can\'t create a special page in the database';
1
+ − 409
}
+ − 410
+ − 411
if(!isset($paths->nslist[$namespace]))
+ − 412
{
+ − 413
// echo '<b>Notice:</b> PageUtils::createPage: Couldn\'t look up the namespace<br />';
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 414
return 'Couldn\'t look up the namespace';
1
+ − 415
}
+ − 416
+ − 417
$pname = $paths->nslist[$namespace] . $page_id;
+ − 418
if(isset($paths->pages[$pname]))
+ − 419
{
+ − 420
// echo '<b>Notice:</b> PageUtils::createPage: Page already exists<br />';
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 421
return 'Page already exists';
1
+ − 422
}
+ − 423
+ − 424
if(!$session->get_permissions('create_page'))
+ − 425
{
+ − 426
// echo '<b>Notice:</b> PageUtils::createPage: Not authorized to create pages<br />';
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 427
return 'Not authorized to create pages';
1
+ − 428
}
+ − 429
+ − 430
if($session->user_level < USER_LEVEL_ADMIN && $namespace == 'System')
+ − 431
{
+ − 432
// echo '<b>Notice:</b> PageUtils::createPage: Not authorized to create system messages<br />';
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 433
return 'Not authorized to create system messages';
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 434
}
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 435
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 436
if ( substr($page_id, 0, 8) == 'Project:' )
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 437
{
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 438
// echo '<b>Notice:</b> PageUtils::createPage: Prefix "Project:" is reserved<br />';
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 439
return 'The prefix "Project:" is reserved for a parser shortcut; if a page was created using this prefix, it would not be possible to link to it.';
1
+ − 440
}
+ − 441
361
+ − 442
/*
+ − 443
// Dunno why this was here. Enano can handle more flexible names than this...
1
+ − 444
$regex = '#^([A-z0-9 _\-\.\/\!\@\(\)]*)$#is';
320
112debff64bd
SURPRISE! Preliminary PostgreSQL support added. The required schema file is not present in this commit and will be included at a later date. No installer support is implemented. Also in this commit: several fixes including <!-- SYSMSG ... --> was broken in template compiler; set fixed width on included images to prevent the thumbnail box from getting huge; added a much more friendly interface to AJAX responses that are invalid JSON
Dan
diff
changeset
+ − 445
if(!preg_match($regex, $name))
1
+ − 446
{
+ − 447
//echo '<b>Notice:</b> PageUtils::createPage: Name contains invalid characters<br />';
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 448
return 'Name contains invalid characters';
1
+ − 449
}
361
+ − 450
*/
+ − 451
+ − 452
$page_id = dirtify_page_id($page_id);
+ − 453
+ − 454
if ( !$name )
+ − 455
$name = str_replace('_', ' ', $page_id);
1
+ − 456
21
663fcf528726
Updated all version numbers back to Banshee; a few preliminary steps towards full UTF-8 support in page URLs
Dan
diff
changeset
+ − 457
$page_id = sanitize_page_id( $page_id );
663fcf528726
Updated all version numbers back to Banshee; a few preliminary steps towards full UTF-8 support in page URLs
Dan
diff
changeset
+ − 458
1
+ − 459
$prot = ( $namespace == 'System' ) ? 1 : 0;
+ − 460
112
+ − 461
$ips = array(
+ − 462
'ip' => array(),
+ − 463
'u' => array()
+ − 464
);
+ − 465
21
663fcf528726
Updated all version numbers back to Banshee; a few preliminary steps towards full UTF-8 support in page URLs
Dan
diff
changeset
+ − 466
$page_data = Array(
1
+ − 467
'name'=>$name,
21
663fcf528726
Updated all version numbers back to Banshee; a few preliminary steps towards full UTF-8 support in page URLs
Dan
diff
changeset
+ − 468
'urlname'=>$page_id,
1
+ − 469
'namespace'=>$namespace,
112
+ − 470
'special'=>0,'visible'=>1,'comments_on'=>0,'protected'=>$prot,'delvotes'=>0,'delvote_ips'=>serialize($ips),'wiki_mode'=>2,
21
663fcf528726
Updated all version numbers back to Banshee; a few preliminary steps towards full UTF-8 support in page URLs
Dan
diff
changeset
+ − 471
);
663fcf528726
Updated all version numbers back to Banshee; a few preliminary steps towards full UTF-8 support in page URLs
Dan
diff
changeset
+ − 472
663fcf528726
Updated all version numbers back to Banshee; a few preliminary steps towards full UTF-8 support in page URLs
Dan
diff
changeset
+ − 473
// die('PageUtils::createpage: Creating page with this data:<pre>' . print_r($page_data, true) . '</pre>');
1
+ − 474
21
663fcf528726
Updated all version numbers back to Banshee; a few preliminary steps towards full UTF-8 support in page URLs
Dan
diff
changeset
+ − 475
$paths->add_page($page_data);
663fcf528726
Updated all version numbers back to Banshee; a few preliminary steps towards full UTF-8 support in page URLs
Dan
diff
changeset
+ − 476
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 477
$qa = $db->sql_query('INSERT INTO ' . table_prefix.'pages(name,urlname,namespace,visible,protected,delvote_ips) VALUES(\'' . $db->escape($name) . '\', \'' . $db->escape($page_id) . '\', \'' . $namespace . '\', '. ( $visible ? '1' : '0' ) .', ' . $prot . ', \'' . $db->escape(serialize($ips)) . '\');');
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 478
$qb = $db->sql_query('INSERT INTO ' . table_prefix.'page_text(page_id,namespace) VALUES(\'' . $db->escape($page_id) . '\', \'' . $namespace . '\');');
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 479
$qc = $db->sql_query('INSERT INTO ' . table_prefix.'logs(time_id,date_string,log_type,action,author,page_id,namespace) VALUES('.time().', \''.enano_date('d M Y h:i a').'\', \'page\', \'create\', \'' . $session->username . '\', \'' . $db->escape($page_id) . '\', \'' . $namespace . '\');');
1
+ − 480
+ − 481
if($qa && $qb && $qc)
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 482
return 'good';
1
+ − 483
else
+ − 484
{
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 485
return $db->get_error();
1
+ − 486
}
+ − 487
}
+ − 488
+ − 489
/**
+ − 490
* Sets the protection level on a page.
+ − 491
* @param $page_id string the page ID
+ − 492
* @param $namespace string the namespace
+ − 493
* @param $level int level of protection - 0 is off, 1 is full, 2 is semi
+ − 494
* @param $reason string why the page is being (un)protected
+ − 495
* @return string - "good" on success, in all other cases, an error string (on query failure, calls $db->_die() )
+ − 496
*/
+ − 497
function protect($page_id, $namespace, $level, $reason)
+ − 498
{
+ − 499
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 500
+ − 501
$pname = $paths->nslist[$namespace] . $page_id;
+ − 502
$wiki = ( ( $paths->pages[$pname]['wiki_mode'] == 2 && getConfig('wiki_mode') == '1') || $paths->pages[$pname]['wiki_mode'] == 1) ? true : false;
+ − 503
$prot = ( ( $paths->pages[$pname]['protected'] == 2 && $session->user_logged_in && $session->reg_time + 60*60*24*4 < time() ) || $paths->pages[$pname]['protected'] == 1) ? true : false;
+ − 504
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 505
if ( !$session->get_permissions('protect') )
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 506
{
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 507
return('Insufficient access rights');
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 508
}
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 509
if ( !$wiki )
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 510
{
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 511
return('Page protection only has an effect when Wiki Mode is enabled.');
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 512
}
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 513
if ( !preg_match('#^([0-9]+){1}$#', (string)$level) )
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 514
{
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 515
return('Invalid $level parameter.');
1
+ − 516
}
+ − 517
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 518
switch($level)
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 519
{
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 520
case 0:
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 521
$q = 'INSERT INTO ' . table_prefix.'logs(time_id,date_string,log_type,action,author,page_id,namespace,edit_summary) VALUES('.time().', \''.enano_date('d M Y h:i a').'\', \'page\', \'unprot\', \'' . $session->username . '\', \'' . $page_id . '\', \'' . $namespace . '\', \'' . $db->escape(htmlspecialchars($reason)) . '\');';
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 522
break;
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 523
case 1:
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 524
$q = 'INSERT INTO ' . table_prefix.'logs(time_id,date_string,log_type,action,author,page_id,namespace,edit_summary) VALUES('.time().', \''.enano_date('d M Y h:i a').'\', \'page\', \'prot\', \'' . $session->username . '\', \'' . $page_id . '\', \'' . $namespace . '\', \'' . $db->escape(htmlspecialchars($reason)) . '\');';
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 525
break;
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 526
case 2:
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 527
$q = 'INSERT INTO ' . table_prefix.'logs(time_id,date_string,log_type,action,author,page_id,namespace,edit_summary) VALUES('.time().', \''.enano_date('d M Y h:i a').'\', \'page\', \'semiprot\', \'' . $session->username . '\', \'' . $page_id . '\', \'' . $namespace . '\', \'' . $db->escape(htmlspecialchars($reason)) . '\');';
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 528
break;
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 529
default:
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 530
return 'PageUtils::protect(): Invalid value for $level';
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 531
break;
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 532
}
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 533
if(!$db->sql_query($q)) $db->_die('The log entry for the page protection could not be inserted.');
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 534
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 535
$q = $db->sql_query('UPDATE ' . table_prefix.'pages SET protected=' . $level . ' WHERE urlname=\'' . $page_id . '\' AND namespace=\'' . $namespace . '\';');
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 536
if ( !$q )
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 537
{
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 538
$db->_die('The pages table was not updated.');
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 539
}
1
+ − 540
+ − 541
return('good');
+ − 542
}
+ − 543
+ − 544
/**
+ − 545
* Generates an HTML table with history information in it.
+ − 546
* @param $page_id the page ID
+ − 547
* @param $namespace the namespace
+ − 548
* @return string
+ − 549
*/
+ − 550
+ − 551
function histlist($page_id, $namespace)
+ − 552
{
+ − 553
global $db, $session, $paths, $template, $plugins; // Common objects
213
+ − 554
global $lang;
1
+ − 555
+ − 556
if(!$session->get_permissions('history_view'))
+ − 557
return 'Access denied';
+ − 558
+ − 559
ob_start();
+ − 560
+ − 561
$pname = $paths->nslist[$namespace] . $page_id;
+ − 562
$wiki = ( ( $paths->pages[$pname]['wiki_mode'] == 2 && getConfig('wiki_mode') == '1') || $paths->pages[$pname]['wiki_mode'] == 1) ? true : false;
+ − 563
$prot = ( ( $paths->pages[$pname]['protected'] == 2 && $session->user_logged_in && $session->reg_time + 60*60*24*4 < time() ) || $paths->pages[$pname]['protected'] == 1) ? true : false;
+ − 564
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 565
$q = 'SELECT time_id,date_string,page_id,namespace,author,edit_summary,minor_edit FROM ' . table_prefix.'logs WHERE log_type=\'page\' AND action=\'edit\' AND page_id=\'' . $page_id . '\' AND namespace=\'' . $namespace . '\' ORDER BY time_id DESC;';
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 566
if(!$db->sql_query($q)) $db->_die('The history data for the page "' . $paths->cpage['name'] . '" could not be selected.');
213
+ − 567
echo $lang->get('history_page_subtitle') . '
+ − 568
<h3>' . $lang->get('history_heading_edits') . '</h3>';
1
+ − 569
$numrows = $db->numrows();
213
+ − 570
if ( $numrows < 1 )
+ − 571
{
+ − 572
echo $lang->get('history_no_entries');
+ − 573
}
1
+ − 574
else
+ − 575
{
+ − 576
echo '<form action="'.makeUrlNS($namespace, $page_id, 'do=diff').'" onsubmit="ajaxHistDiff(); return false;" method="get">
213
+ − 577
<input type="submit" value="' . $lang->get('history_btn_compare') . '" />
115
261f367623af
Fixed the obnoxious issue with forms using GET and index.php?title=Foo URL scheme (this works a whole lot better than MediaWiki now
Dan
diff
changeset
+ − 578
' . ( urlSeparator == '&' ? '<input type="hidden" name="title" value="' . htmlspecialchars($paths->nslist[$namespace] . $page_id) . '" />' : '' ) . '
261f367623af
Fixed the obnoxious issue with forms using GET and index.php?title=Foo URL scheme (this works a whole lot better than MediaWiki now
Dan
diff
changeset
+ − 579
' . ( $session->sid_super ? '<input type="hidden" name="auth" value="' . $session->sid_super . '" />' : '') . '
261f367623af
Fixed the obnoxious issue with forms using GET and index.php?title=Foo URL scheme (this works a whole lot better than MediaWiki now
Dan
diff
changeset
+ − 580
<input type="hidden" name="do" value="diff" />
1
+ − 581
<br /><span> </span>
+ − 582
<div class="tblholder">
+ − 583
<table border="0" width="100%" cellspacing="1" cellpadding="4">
+ − 584
<tr>
213
+ − 585
<th colspan="2">' . $lang->get('history_col_diff') . '</th>
+ − 586
<th>' . $lang->get('history_col_datetime') . '</th>
+ − 587
<th>' . $lang->get('history_col_user') . '</th>
+ − 588
<th>' . $lang->get('history_col_summary') . '</th>
+ − 589
<th>' . $lang->get('history_col_minor') . '</th>
+ − 590
<th colspan="3">' . $lang->get('history_col_actions') . '</th>
1
+ − 591
</tr>'."\n"."\n";
+ − 592
$cls = 'row2';
+ − 593
$ticker = 0;
+ − 594
213
+ − 595
while ( $r = $db->fetchrow() )
+ − 596
{
1
+ − 597
+ − 598
$ticker++;
+ − 599
+ − 600
if($cls == 'row2') $cls = 'row1';
+ − 601
else $cls = 'row2';
+ − 602
+ − 603
echo '<tr>'."\n";
+ − 604
+ − 605
// Diff selection
+ − 606
if($ticker == 1)
+ − 607
{
+ − 608
$s1 = '';
+ − 609
$s2 = 'checked="checked" ';
+ − 610
}
+ − 611
elseif($ticker == 2)
+ − 612
{
+ − 613
$s1 = 'checked="checked" ';
+ − 614
$s2 = '';
+ − 615
}
+ − 616
else
+ − 617
{
+ − 618
$s1 = '';
+ − 619
$s2 = '';
+ − 620
}
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 621
if($ticker > 1) echo '<td class="' . $cls . '" style="padding: 0;"><input ' . $s1 . 'name="diff1" type="radio" value="' . $r['time_id'] . '" id="diff1_' . $r['time_id'] . '" class="clsDiff1Radio" onclick="selectDiff1Button(this);" /></td>'."\n"; else echo '<td class="' . $cls . '"></td>';
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 622
if($ticker < $numrows) echo '<td class="' . $cls . '" style="padding: 0;"><input ' . $s2 . 'name="diff2" type="radio" value="' . $r['time_id'] . '" id="diff2_' . $r['time_id'] . '" class="clsDiff2Radio" onclick="selectDiff2Button(this);" /></td>'."\n"; else echo '<td class="' . $cls . '"></td>';
1
+ − 623
+ − 624
// Date and time
351
+ − 625
echo '<td class="' . $cls . '">' . enano_date('d M Y h:i a', intval($r['time_id'])) . '</td class="' . $cls . '">'."\n";
1
+ − 626
+ − 627
// User
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 628
if ( $session->get_permissions('mod_misc') && is_valid_ip($r['author']) )
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 629
{
213
+ − 630
$rc = ' style="cursor: pointer;" title="' . $lang->get('history_tip_rdns') . '" onclick="ajaxReverseDNS(this, \'' . $r['author'] . '\');"';
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 631
}
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 632
else
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 633
{
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 634
$rc = '';
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 635
}
285
7846d45bd250
Changed all urlname/page_id columns to varchar(255) because 63 characters just isn't long enough
Dan
diff
changeset
+ − 636
echo '<td class="' . $cls . '"' . $rc . '><a href="'.makeUrlNS('User', sanitize_page_id($r['author'])).'" ';
7846d45bd250
Changed all urlname/page_id columns to varchar(255) because 63 characters just isn't long enough
Dan
diff
changeset
+ − 637
if ( !isPage($paths->nslist['User'] . sanitize_page_id($r['author'])) )
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 638
{
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 639
echo 'class="wikilink-nonexistent"';
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 640
}
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 641
echo '>' . $r['author'] . '</a></td class="' . $cls . '">'."\n";
1
+ − 642
+ − 643
// Edit summary
213
+ − 644
if ( $r['edit_summary'] == 'Automatic backup created when logs were purged' )
+ − 645
{
+ − 646
$r['edit_summary'] = $lang->get('history_summary_clearlogs');
+ − 647
}
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 648
echo '<td class="' . $cls . '">' . $r['edit_summary'] . '</td>'."\n";
1
+ − 649
+ − 650
// Minor edit
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 651
echo '<td class="' . $cls . '" style="text-align: center;">'. (( $r['minor_edit'] ) ? 'M' : '' ) .'</td>'."\n";
1
+ − 652
+ − 653
// Actions!
213
+ − 654
echo '<td class="' . $cls . '" style="text-align: center;"><a href="'.makeUrlNS($namespace, $page_id, 'oldid=' . $r['time_id']) . '" onclick="ajaxHistView(\'' . $r['time_id'] . '\'); return false;">' . $lang->get('history_action_view') . '</a></td>'."\n";
+ − 655
echo '<td class="' . $cls . '" style="text-align: center;"><a href="'.makeUrl($paths->nslist['Special'].'Contributions/' . $r['author']) . '">' . $lang->get('history_action_contrib') . '</a></td>'."\n";
+ − 656
echo '<td class="' . $cls . '" style="text-align: center;"><a href="'.makeUrlNS($namespace, $page_id, 'do=rollback&id=' . $r['time_id']) . '" onclick="ajaxRollback(\'' . $r['time_id'] . '\'); return false;">' . $lang->get('history_action_restore') . '</a></td>'."\n";
1
+ − 657
+ − 658
echo '</tr>'."\n"."\n";
+ − 659
+ − 660
}
+ − 661
echo '</table>
+ − 662
</div>
+ − 663
<br />
+ − 664
<input type="hidden" name="do" value="diff" />
213
+ − 665
<input type="submit" value="' . $lang->get('history_btn_compare') . '" />
1
+ − 666
</form>
57
b354deeaa4c4
Vastly improved compatibility with older versions of IE, particularly 5.0, through the use of a kill switch that turns off all AJAX functions
Dan
diff
changeset
+ − 667
<script type="text/javascript">if ( !KILL_SWITCH ) { buildDiffList(); }</script>';
1
+ − 668
}
+ − 669
$db->free_result();
213
+ − 670
echo '<h3>' . $lang->get('history_heading_other') . '</h3>';
322
+ − 671
$q = 'SELECT time_id,action,date_string,page_id,namespace,author,edit_summary,minor_edit FROM ' . table_prefix.'logs WHERE log_type=\'page\' AND action!=\'edit\' AND page_id=\'' . $paths->page_id . '\' AND namespace=\'' . $paths->namespace . '\' ORDER BY time_id DESC;';
213
+ − 672
if ( !$db->sql_query($q) )
+ − 673
{
+ − 674
$db->_die('The history data for the page "' . htmlspecialchars($paths->cpage['name']) . '" could not be selected.');
+ − 675
}
+ − 676
if ( $db->numrows() < 1 )
+ − 677
{
+ − 678
echo $lang->get('history_no_entries');
+ − 679
}
+ − 680
else
+ − 681
{
1
+ − 682
213
+ − 683
echo '<div class="tblholder">
+ − 684
<table border="0" width="100%" cellspacing="1" cellpadding="4"><tr>
+ − 685
<th>' . $lang->get('history_col_datetime') . '</th>
+ − 686
<th>' . $lang->get('history_col_user') . '</th>
+ − 687
<th>' . $lang->get('history_col_minor') . '</th>
+ − 688
<th>' . $lang->get('history_col_action_taken') . '</th>
+ − 689
<th>' . $lang->get('history_col_extra') . '</th>
+ − 690
<th colspan="2"></th>
+ − 691
</tr>';
1
+ − 692
$cls = 'row2';
+ − 693
while($r = $db->fetchrow()) {
+ − 694
+ − 695
if($cls == 'row2') $cls = 'row1';
+ − 696
else $cls = 'row2';
+ − 697
+ − 698
echo '<tr>';
+ − 699
+ − 700
// Date and time
351
+ − 701
echo '<td class="' . $cls . '">' . enano_date('d M Y h:i a', intval($r['time_id'])) . '</td class="' . $cls . '">';
1
+ − 702
+ − 703
// User
285
7846d45bd250
Changed all urlname/page_id columns to varchar(255) because 63 characters just isn't long enough
Dan
diff
changeset
+ − 704
echo '<td class="' . $cls . '"><a href="'.makeUrlNS('User', sanitize_page_id($r['author'])).'" ';
7846d45bd250
Changed all urlname/page_id columns to varchar(255) because 63 characters just isn't long enough
Dan
diff
changeset
+ − 705
if(!isPage($paths->nslist['User'] . sanitize_page_id($r['author']))) echo 'class="wikilink-nonexistent"';
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 706
echo '>' . $r['author'] . '</a></td class="' . $cls . '">';
1
+ − 707
+ − 708
+ − 709
// Minor edit
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 710
echo '<td class="' . $cls . '" style="text-align: center;">'. (( $r['minor_edit'] ) ? 'M' : '' ) .'</td>';
1
+ − 711
+ − 712
// Action taken
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 713
echo '<td class="' . $cls . '">';
81
d7fc25acd3f3
Replaced the menu in the admin theme with something much more visually pleasureable; minor fix in Special:UploadFile; finished patching a couple of XSS problems from Banshee; finished Admin:PageGroups; removed unneeded code in flyin.js; finished tag system (except tag cloud); 1.0.1 release candidate
Dan
diff
changeset
+ − 714
// Some of these are sanitized at insert-time. Others follow the newer Enano policy of stripping HTML at runtime.
213
+ − 715
if ($r['action']=='prot') echo $lang->get('history_log_protect') . '</td><td class="' . $cls . '">' . $lang->get('history_extra_reason') . ' ' . $r['edit_summary'];
+ − 716
elseif($r['action']=='unprot') echo $lang->get('history_log_unprotect') . '</td><td class="' . $cls . '">' . $lang->get('history_extra_reason') . ' ' . $r['edit_summary'];
+ − 717
elseif($r['action']=='semiprot') echo $lang->get('history_log_semiprotect') . '</td><td class="' . $cls . '">' . $lang->get('history_extra_reason') . ' ' . $r['edit_summary'];
+ − 718
elseif($r['action']=='rename') echo $lang->get('history_log_rename') . '</td><td class="' . $cls . '">' . $lang->get('history_extra_oldtitle') . ' '.htmlspecialchars($r['edit_summary']);
+ − 719
elseif($r['action']=='create') echo $lang->get('history_log_create') . '</td><td class="' . $cls . '">';
+ − 720
elseif($r['action']=='delete') echo $lang->get('history_log_delete') . '</td><td class="' . $cls . '">' . $lang->get('history_extra_reason') . ' ' . $r['edit_summary'];
+ − 721
elseif($r['action']=='reupload') echo $lang->get('history_log_uploadnew') . '</td><td class="' . $cls . '">' . $lang->get('history_extra_reason') . ' '.htmlspecialchars($r['edit_summary']);
1
+ − 722
echo '</td>';
+ − 723
+ − 724
// Actions!
213
+ − 725
echo '<td class="' . $cls . '" style="text-align: center;"><a href="'.makeUrl($paths->nslist['Special'].'Contributions/' . $r['author']) . '">' . $lang->get('history_action_contrib') . '</a></td>';
+ − 726
echo '<td class="' . $cls . '" style="text-align: center;"><a href="'.makeUrlNS($namespace, $page_id, 'do=rollback&id=' . $r['time_id']) . '" onclick="ajaxRollback(\'' . $r['time_id'] . '\'); return false;">' . $lang->get('history_action_revert') . '</a></td>';
1
+ − 727
+ − 728
echo '</tr>';
+ − 729
}
+ − 730
echo '</table></div>';
+ − 731
}
+ − 732
$db->free_result();
+ − 733
$ret = ob_get_contents();
+ − 734
ob_end_clean();
+ − 735
return $ret;
+ − 736
}
+ − 737
+ − 738
/**
+ − 739
* Rolls back a logged action
+ − 740
* @param $id the time ID, a.k.a. the primary key in the logs table
+ − 741
* @return string
+ − 742
*/
+ − 743
+ − 744
function rollback($id)
+ − 745
{
+ − 746
global $db, $session, $paths, $template, $plugins; // Common objects
158
+ − 747
if ( !$session->get_permissions('history_rollback') )
+ − 748
{
+ − 749
return('You are not authorized to perform rollbacks.');
+ − 750
}
+ − 751
if ( !preg_match('#^([0-9]+)$#', (string)$id) )
+ − 752
{
+ − 753
return('The value "id" on the query string must be an integer.');
+ − 754
}
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 755
$e = $db->sql_query('SELECT log_type,action,date_string,page_id,namespace,page_text,char_tag,author,edit_summary FROM ' . table_prefix.'logs WHERE time_id=' . $id . ';');
158
+ − 756
if ( !$e )
+ − 757
{
+ − 758
$db->_die('The rollback data could not be selected.');
+ − 759
}
1
+ − 760
$rb = $db->fetchrow();
+ − 761
$db->free_result();
158
+ − 762
+ − 763
if ( $rb['log_type'] == 'page' && $rb['action'] != 'delete' )
+ − 764
{
+ − 765
$pagekey = $paths->nslist[$rb['namespace']] . $rb['page_id'];
+ − 766
if ( !isset($paths->pages[$pagekey]) )
+ − 767
{
+ − 768
return "Page doesn't exist";
+ − 769
}
+ − 770
$pagedata =& $paths->pages[$pagekey];
+ − 771
$protected = false;
+ − 772
// Special case: is the page protected? if so, check for even_when_protected permissions
+ − 773
if($pagedata['protected'] == 2)
+ − 774
{
+ − 775
// The page is semi-protected, determine permissions
+ − 776
if($session->user_logged_in && $session->reg_time + 60*60*24*4 < time())
+ − 777
{
+ − 778
$protected = false;
+ − 779
}
+ − 780
else
+ − 781
{
+ − 782
$protected = true;
+ − 783
}
+ − 784
}
+ − 785
else
+ − 786
{
+ − 787
$protected = ( $pagedata['protected'] == 1 );
+ − 788
}
+ − 789
+ − 790
$perms = $session->fetch_page_acl($rb['page_id'], $rb['namespace']);
+ − 791
+ − 792
if ( $protected && !$perms->get_permissions('even_when_protected') )
+ − 793
{
+ − 794
return "Because this page is protected, you need moderator rights to roll back changes.";
+ − 795
}
+ − 796
}
+ − 797
else
+ − 798
{
+ − 799
$perms =& $session;
+ − 800
}
+ − 801
+ − 802
switch($rb['log_type'])
+ − 803
{
1
+ − 804
case "page":
158
+ − 805
switch($rb['action'])
+ − 806
{
1
+ − 807
case "edit":
158
+ − 808
if ( !$perms->get_permissions('edit_page') )
+ − 809
return "You don't have permission to edit pages, so rolling back edits can't be allowed either.";
1
+ − 810
$t = $db->escape($rb['page_text']);
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 811
$e = $db->sql_query('UPDATE ' . table_prefix.'page_text SET page_text=\'' . $t . '\',char_tag=\'' . $rb['char_tag'] . '\' WHERE page_id=\'' . $rb['page_id'] . '\' AND namespace=\'' . $rb['namespace'] . '\'');
158
+ − 812
if ( !$e )
+ − 813
{
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 814
return("An error occurred during the rollback operation.\nMySQL said: ".$db->get_error()."\n\nSQL backtrace:\n".$db->sql_backtrace());
158
+ − 815
}
+ − 816
else
+ − 817
{
351
+ − 818
return 'The page "' . $paths->pages[$paths->nslist[$rb['namespace']].$rb['page_id']]['name'].'" has been rolled back to the state it was in on ' . enano_date('d M Y h:i a', intval($rb['time_id'])) . '.';
158
+ − 819
}
1
+ − 820
break;
+ − 821
case "rename":
158
+ − 822
if ( !$perms->get_permissions('rename') )
+ − 823
return "You don't have permission to rename pages, so rolling back renames can't be allowed either.";
1
+ − 824
$t = $db->escape($rb['edit_summary']);
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 825
$e = $db->sql_query('UPDATE ' . table_prefix.'pages SET name=\'' . $t . '\' WHERE urlname=\'' . $rb['page_id'] . '\' AND namespace=\'' . $rb['namespace'] . '\'');
158
+ − 826
if ( !$e )
+ − 827
{
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 828
return "An error occurred during the rollback operation.\nMySQL said: ".$db->get_error()."\n\nSQL backtrace:\n".$db->sql_backtrace();
158
+ − 829
}
+ − 830
else
+ − 831
{
351
+ − 832
return 'The page "' . $paths->pages[$paths->nslist[$rb['namespace']].$rb['page_id']]['name'].'" has been rolled back to the name it had ("' . $rb['edit_summary'] . '") before ' . enano_date('d M Y h:i a', intval($rb['time_id'])) . '.';
158
+ − 833
}
1
+ − 834
break;
+ − 835
case "prot":
158
+ − 836
if ( !$perms->get_permissions('protect') )
+ − 837
return "You don't have permission to protect pages, so rolling back protection can't be allowed either.";
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 838
$e = $db->sql_query('UPDATE ' . table_prefix.'pages SET protected=0 WHERE urlname=\'' . $rb['page_id'] . '\' AND namespace=\'' . $rb['namespace'] . '\'');
158
+ − 839
if ( !$e )
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 840
return "An error occurred during the rollback operation.\nMySQL said: ".$db->get_error()."\n\nSQL backtrace:\n".$db->sql_backtrace();
158
+ − 841
else
351
+ − 842
return 'The page "' . $paths->pages[$paths->nslist[$rb['namespace']].$rb['page_id']]['name'].'" has been unprotected according to the log created at ' . enano_date('d M Y h:i a', intval($rb['time_id'])) . '.';
1
+ − 843
break;
+ − 844
case "semiprot":
158
+ − 845
if ( !$perms->get_permissions('protect') )
+ − 846
return "You don't have permission to protect pages, so rolling back protection can't be allowed either.";
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 847
$e = $db->sql_query('UPDATE ' . table_prefix.'pages SET protected=0 WHERE urlname=\'' . $rb['page_id'] . '\' AND namespace=\'' . $rb['namespace'] . '\'');
158
+ − 848
if ( !$e )
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 849
return "An error occurred during the rollback operation.\nMySQL said: ".$db->get_error()."\n\nSQL backtrace:\n".$db->sql_backtrace();
158
+ − 850
else
351
+ − 851
return 'The page "' . $paths->pages[$paths->nslist[$rb['namespace']].$rb['page_id']]['name'].'" has been unprotected according to the log created at ' . enano_date('d M Y h:i a', intval($rb['time_id'])) . '.';
1
+ − 852
break;
+ − 853
case "unprot":
158
+ − 854
if ( !$perms->get_permissions('protect') )
+ − 855
return "You don't have permission to protect pages, so rolling back protection can't be allowed either.";
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 856
$e = $db->sql_query('UPDATE ' . table_prefix.'pages SET protected=1 WHERE urlname=\'' . $rb['page_id'] . '\' AND namespace=\'' . $rb['namespace'] . '\'');
158
+ − 857
if ( !$e )
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 858
return "An error occurred during the rollback operation.\nMySQL said: ".$db->get_error()."\n\nSQL backtrace:\n".$db->sql_backtrace();
158
+ − 859
else
351
+ − 860
return 'The page "' . $paths->pages[$paths->nslist[$rb['namespace']].$rb['page_id']]['name'].'" has been protected according to the log created at ' . enano_date('d M Y h:i a', intval($rb['time_id'])) . '.';
1
+ − 861
break;
+ − 862
case "delete":
158
+ − 863
if ( !$perms->get_permissions('history_rollback_extra') )
+ − 864
return 'Administrative privileges are required for page undeletion.';
+ − 865
if ( isset($paths->pages[$paths->cpage['urlname']]) )
+ − 866
return 'You cannot raise a dead page that is alive.';
1
+ − 867
$name = str_replace('_', ' ', $rb['page_id']);
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 868
$e = $db->sql_query('INSERT INTO ' . table_prefix.'pages(name,urlname,namespace) VALUES( \'' . $name . '\', \'' . $rb['page_id'] . '\',\'' . $rb['namespace'] . '\' )');if(!$e) return("An error occurred during the rollback operation.\nMySQL said: ".$db->get_error()."\n\nSQL backtrace:\n".$db->sql_backtrace());
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 869
$e = $db->sql_query('SELECT page_text,char_tag FROM ' . table_prefix.'logs WHERE page_id=\'' . $rb['page_id'] . '\' AND namespace=\'' . $rb['namespace'] . '\' AND log_type=\'page\' AND action=\'edit\' ORDER BY time_id DESC;'); if(!$e) return("An error occurred during the rollback operation.\nMySQL said: ".$db->get_error()."\n\nSQL backtrace:\n".$db->sql_backtrace());
1
+ − 870
$r = $db->fetchrow();
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 871
$e = $db->sql_query('INSERT INTO ' . table_prefix.'page_text(page_id,namespace,page_text,char_tag) VALUES(\'' . $rb['page_id'] . '\',\'' . $rb['namespace'] . '\',\'' . $db->escape($r['page_text']) . '\',\'' . $r['char_tag'] . '\')'); if(!$e) return("An error occurred during the rollback operation.\nMySQL said: ".$db->get_error()."\n\nSQL backtrace:\n".$db->sql_backtrace());
351
+ − 872
return 'The page "' . $name . '" has been undeleted according to the log created at ' . enano_date('d M Y h:i a', intval($rb['time_id'])) . '.';
1
+ − 873
break;
+ − 874
case "reupload":
234
d5dff8148dfe
Renaming config.php and .htaccess to *.new to allow tarbombing an Enano installation with no adverse effects; first attempt, may not work right.
Dan
diff
changeset
+ − 875
if ( !$session->get_permissions('history_rollback_extra') )
158
+ − 876
{
+ − 877
return 'Administrative privileges are required for file rollbacks.';
+ − 878
}
1
+ − 879
$newtime = time();
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 880
$newdate = enano_date('d M Y h:i a');
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 881
if(!$db->sql_query('UPDATE ' . table_prefix.'logs SET time_id=' . $newtime . ',date_string=\'' . $newdate . '\' WHERE time_id=' . $id))
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 882
return 'Error during query: '.$db->get_error();
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 883
if(!$db->sql_query('UPDATE ' . table_prefix.'files SET time_id=' . $newtime . ' WHERE time_id=' . $id))
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 884
return 'Error during query: '.$db->get_error();
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 885
return 'The file has been rolled back to the version uploaded on '.enano_date('d M Y h:i a', (int)$id).'.';
1
+ − 886
break;
+ − 887
default:
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 888
return('Rollback of the action "' . $rb['action'] . '" is not yet supported.');
1
+ − 889
break;
+ − 890
}
+ − 891
break;
+ − 892
case "security":
+ − 893
case "login":
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 894
return('A ' . $rb['log_type'] . '-related log entry cannot be rolled back.');
1
+ − 895
break;
+ − 896
default:
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 897
return('Unknown log entry type: "' . $rb['log_type'] . '"');
1
+ − 898
}
+ − 899
}
+ − 900
+ − 901
/**
+ − 902
* Posts a comment.
+ − 903
* @param $page_id the page ID
+ − 904
* @param $namespace the namespace
+ − 905
* @param $name the name of the person posting, defaults to current username/IP
+ − 906
* @param $subject the subject line of the comment
+ − 907
* @param $text the comment text
+ − 908
* @return string javascript code
+ − 909
*/
+ − 910
+ − 911
function addcomment($page_id, $namespace, $name, $subject, $text, $captcha_code = false, $captcha_id = false)
+ − 912
{
+ − 913
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 914
$_ob = '';
+ − 915
if(!$session->get_permissions('post_comments'))
+ − 916
return 'Access denied';
+ − 917
if(getConfig('comments_need_login') == '2' && !$session->user_logged_in) _die('Access denied to post comments: you need to be logged in first.');
+ − 918
if(getConfig('comments_need_login') == '1' && !$session->user_logged_in)
+ − 919
{
+ − 920
if(!$captcha_code || !$captcha_id) _die('BUG: PageUtils::addcomment: no CAPTCHA data passed to method');
+ − 921
$result = $session->get_captcha($captcha_id);
+ − 922
if($captcha_code != $result) _die('The confirmation code you entered was incorrect.');
+ − 923
}
+ − 924
$text = RenderMan::preprocess_text($text);
+ − 925
$name = $session->user_logged_in ? RenderMan::preprocess_text($session->username) : RenderMan::preprocess_text($name);
+ − 926
$subj = RenderMan::preprocess_text($subject);
+ − 927
if(getConfig('approve_comments')=='1') $appr = '0'; else $appr = '1';
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 928
$q = 'INSERT INTO ' . table_prefix.'comments(page_id,namespace,subject,comment_data,name,user_id,approved,time) VALUES(\'' . $page_id . '\',\'' . $namespace . '\',\'' . $subj . '\',\'' . $text . '\',\'' . $name . '\',' . $session->user_id . ',' . $appr . ','.time().')';
1
+ − 929
$e = $db->sql_query($q);
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 930
if(!$e) die('alert(unescape(\''.rawurlencode('Error inserting comment data: '.$db->get_error().'\n\nQuery:\n' . $q) . '\'))');
1
+ − 931
else $_ob .= '<div class="info-box">Your comment has been posted.</div>';
+ − 932
return PageUtils::comments($page_id, $namespace, false, Array(), $_ob);
+ − 933
}
+ − 934
+ − 935
/**
+ − 936
* Generates partly-compiled HTML/Javascript code to be eval'ed by the user's browser to display comments
+ − 937
* @param $page_id the page ID
+ − 938
* @param $namespace the namespace
+ − 939
* @param $action administrative action to perform, default is false
+ − 940
* @param $flags additional info for $action, shouldn't be used except when deleting/approving comments, etc.
+ − 941
* @param $_ob text to prepend to output, used by PageUtils::addcomment
+ − 942
* @return array
+ − 943
* @access private
+ − 944
*/
+ − 945
+ − 946
function comments_raw($page_id, $namespace, $action = false, $flags = Array(), $_ob = '')
+ − 947
{
+ − 948
global $db, $session, $paths, $template, $plugins; // Common objects
213
+ − 949
global $lang;
1
+ − 950
+ − 951
$pname = $paths->nslist[$namespace] . $page_id;
+ − 952
+ − 953
ob_start();
+ − 954
+ − 955
if($action && $session->get_permissions('mod_comments')) // Nip hacking attempts in the bud
+ − 956
{
+ − 957
switch($action) {
+ − 958
case "delete":
+ − 959
if(isset($flags['id']))
+ − 960
{
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 961
$q = 'DELETE FROM ' . table_prefix.'comments WHERE page_id=\'' . $page_id . '\' AND namespace=\'' . $namespace . '\' AND comment_id='.intval($flags['id']).' LIMIT 1;';
1
+ − 962
} else {
+ − 963
$n = $db->escape($flags['name']);
+ − 964
$s = $db->escape($flags['subj']);
+ − 965
$t = $db->escape($flags['text']);
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 966
$q = 'DELETE FROM ' . table_prefix.'comments WHERE page_id=\'' . $page_id . '\' AND namespace=\'' . $namespace . '\' AND name=\'' . $n . '\' AND subject=\'' . $s . '\' AND comment_data=\'' . $t . '\' LIMIT 1;';
1
+ − 967
}
+ − 968
$e=$db->sql_query($q);
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 969
if(!$e) die('alert(unesape(\''.rawurlencode('Error during query: '.$db->get_error().'\n\nQuery:\n' . $q) . '\'));');
1
+ − 970
break;
+ − 971
case "approve":
+ − 972
if(isset($flags['id']))
+ − 973
{
+ − 974
$where = 'comment_id='.intval($flags['id']);
+ − 975
} else {
+ − 976
$n = $db->escape($flags['name']);
+ − 977
$s = $db->escape($flags['subj']);
+ − 978
$t = $db->escape($flags['text']);
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 979
$where = 'name=\'' . $n . '\' AND subject=\'' . $s . '\' AND comment_data=\'' . $t . '\'';
1
+ − 980
}
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 981
$q = 'SELECT approved FROM ' . table_prefix.'comments WHERE page_id=\'' . $page_id . '\' AND namespace=\'' . $namespace . '\' AND ' . $where . ' LIMIT 1;';
1
+ − 982
$e = $db->sql_query($q);
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 983
if(!$e) die('alert(unesape(\''.rawurlencode('Error selecting approval status: '.$db->get_error().'\n\nQuery:\n' . $q) . '\'));');
1
+ − 984
$r = $db->fetchrow();
+ − 985
$db->free_result();
+ − 986
$a = ( $r['approved'] ) ? '0' : '1';
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 987
$q = 'UPDATE ' . table_prefix.'comments SET approved=' . $a . ' WHERE page_id=\'' . $page_id . '\' AND namespace=\'' . $namespace . '\' AND ' . $where . ';';
1
+ − 988
$e=$db->sql_query($q);
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 989
if(!$e) die('alert(unesape(\''.rawurlencode('Error during query: '.$db->get_error().'\n\nQuery:\n' . $q) . '\'));');
213
+ − 990
if($a=='1') $v = $lang->get('comment_btn_mod_unapprove');
+ − 991
else $v = $lang->get('comment_btn_mod_approve');
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 992
echo 'document.getElementById("mdgApproveLink'.intval($_GET['id']).'").innerHTML="' . $v . '";';
1
+ − 993
break;
+ − 994
}
+ − 995
}
+ − 996
+ − 997
if(!defined('ENANO_TEMPLATE_LOADED'))
+ − 998
{
+ − 999
$template->load_theme($session->theme, $session->style);
+ − 1000
}
+ − 1001
+ − 1002
$tpl = $template->makeParser('comment.tpl');
+ − 1003
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1004
$e = $db->sql_query('SELECT * FROM ' . table_prefix.'comments WHERE page_id=\'' . $page_id . '\' AND namespace=\'' . $namespace . '\' AND approved=0;');
1
+ − 1005
if(!$e) $db->_die('The comment text data could not be selected.');
+ − 1006
$num_unapp = $db->numrows();
+ − 1007
$db->free_result();
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1008
$e = $db->sql_query('SELECT * FROM ' . table_prefix.'comments WHERE page_id=\'' . $page_id . '\' AND namespace=\'' . $namespace . '\' AND approved=1;');
1
+ − 1009
if(!$e) $db->_die('The comment text data could not be selected.');
+ − 1010
$num_app = $db->numrows();
+ − 1011
$db->free_result();
360
+ − 1012
$lq = $db->sql_query('SELECT c.comment_id,c.subject,c.name,c.comment_data,c.approved,c.time,c.user_id,c.ip_address,u.user_level,u.signature,u.user_has_avatar,u.avatar_type
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1013
FROM ' . table_prefix.'comments AS c
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1014
LEFT JOIN ' . table_prefix.'users AS u
1
+ − 1015
ON c.user_id=u.user_id
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1016
WHERE page_id=\'' . $page_id . '\'
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1017
AND namespace=\'' . $namespace . '\' ORDER BY c.time ASC;');
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 1018
if(!$lq) _die('The comment text data could not be selected. '.$db->get_error());
213
+ − 1019
$_ob .= '<h3>' . $lang->get('comment_heading') . '</h3>';
+ − 1020
1
+ − 1021
$n = ( $session->get_permissions('mod_comments')) ? $db->numrows() : $num_app;
213
+ − 1022
+ − 1023
$subst = array(
+ − 1024
'num_comments' => $n,
226
0e6478521004
Fixed the one FIXME in PageUtils regarding static HTML comment system's greeting line; fixed parsing of external links in template->tplWikiFormat
Dan
diff
changeset
+ − 1025
'page_type' => $template->namespace_string
213
+ − 1026
);
+ − 1027
+ − 1028
$_ob .= '<p>';
+ − 1029
$_ob .= ( $n == 0 ) ? $lang->get('comment_msg_count_zero', $subst) : ( $n == 1 ? $lang->get('comment_msg_count_one', $subst) : $lang->get('comment_msg_count_plural', $subst) );
+ − 1030
+ − 1031
if ( $session->get_permissions('mod_comments') && $num_unapp > 0 )
1
+ − 1032
{
213
+ − 1033
$_ob .= ' <span style="color: #D84308">' . $lang->get('comment_msg_count_unapp_mod', array( 'num_unapp' => $num_unapp )) . '</span>';
+ − 1034
}
+ − 1035
else if ( !$session->get_permissions('mod_comments') && $num_unapp > 0 )
+ − 1036
{
+ − 1037
$ls = ( $num_unapp == 1 ) ? 'comment_msg_count_unapp_one' : 'comment_msg_count_unapp_plural';
+ − 1038
$_ob .= ' <span>' . $lang->get($ls, array( 'num_unapp' => $num_unapp )) . '</span>';
+ − 1039
}
78
4df25dfdde63
Modified Text_Wiki parser to fully support UTF-8 strings; several other UTF-8 fixes, international characters seem to work reasonably well now
Dan
diff
changeset
+ − 1040
$_ob .= '</p>';
1
+ − 1041
$list = 'list = { ';
+ − 1042
// _die(htmlspecialchars($ttext));
+ − 1043
$i = -1;
213
+ − 1044
while ( $row = $db->fetchrow($lq) )
1
+ − 1045
{
+ − 1046
$i++;
+ − 1047
$strings = Array();
+ − 1048
$bool = Array();
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1049
if ( $session->get_permissions('mod_comments') || $row['approved'] )
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1050
{
1
+ − 1051
$list .= $i . ' : { \'comment\' : unescape(\''.rawurlencode($row['comment_data']).'\'), \'name\' : unescape(\''.rawurlencode($row['name']).'\'), \'subject\' : unescape(\''.rawurlencode($row['subject']).'\'), }, ';
+ − 1052
+ − 1053
// Comment ID (used in the Javascript apps)
+ − 1054
$strings['ID'] = (string)$i;
+ − 1055
+ − 1056
// Determine the name, and whether to link to the user page or not
+ − 1057
$name = '';
304
+ − 1058
if($row['user_id'] > 1) $name .= '<a href="'.makeUrlNS('User', sanitize_page_id(' ', '_', $row['name'])).'">';
1
+ − 1059
$name .= $row['name'];
213
+ − 1060
if($row['user_id'] > 1) $name .= '</a>';
1
+ − 1061
$strings['NAME'] = $name; unset($name);
+ − 1062
+ − 1063
// Subject
+ − 1064
$s = $row['subject'];
213
+ − 1065
if(!$row['approved']) $s .= ' <span style="color: #D84308">' . $lang->get('comment_msg_note_unapp') . '</span>';
1
+ − 1066
$strings['SUBJECT'] = $s;
+ − 1067
+ − 1068
// Date and time
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 1069
$strings['DATETIME'] = enano_date('F d, Y h:i a', $row['time']);
1
+ − 1070
+ − 1071
// User level
+ − 1072
switch($row['user_level'])
+ − 1073
{
+ − 1074
default:
+ − 1075
case USER_LEVEL_GUEST:
213
+ − 1076
$l = $lang->get('user_type_guest');
1
+ − 1077
break;
+ − 1078
case USER_LEVEL_MEMBER:
213
+ − 1079
case USER_LEVEL_CHPREF:
+ − 1080
$l = $lang->get('user_type_member');
1
+ − 1081
break;
+ − 1082
case USER_LEVEL_MOD:
213
+ − 1083
$l = $lang->get('user_type_mod');
1
+ − 1084
break;
+ − 1085
case USER_LEVEL_ADMIN:
213
+ − 1086
$l = $lang->get('user_type_admin');
1
+ − 1087
break;
+ − 1088
}
+ − 1089
$strings['USER_LEVEL'] = $l; unset($l);
+ − 1090
+ − 1091
// The actual comment data
+ − 1092
$strings['DATA'] = RenderMan::render($row['comment_data']);
+ − 1093
+ − 1094
if($session->get_permissions('edit_comments'))
+ − 1095
{
+ − 1096
// Edit link
213
+ − 1097
$strings['EDIT_LINK'] = '<a href="'.makeUrlNS($namespace, $page_id, 'do=comments&sub=editcomment&id=' . $row['comment_id']) . '" id="editbtn_' . $i . '">' . $lang->get('comment_btn_edit') . '</a>';
1
+ − 1098
+ − 1099
// Delete link
213
+ − 1100
$strings['DELETE_LINK'] = '<a href="'.makeUrlNS($namespace, $page_id, 'do=comments&sub=deletecomment&id=' . $row['comment_id']) . '">' . $lang->get('comment_btn_delete') . '</a>';
1
+ − 1101
}
+ − 1102
else
+ − 1103
{
+ − 1104
// Edit link
+ − 1105
$strings['EDIT_LINK'] = '';
+ − 1106
+ − 1107
// Delete link
+ − 1108
$strings['DELETE_LINK'] = '';
+ − 1109
}
+ − 1110
+ − 1111
// Send PM link
213
+ − 1112
$strings['SEND_PM_LINK'] = ( $session->user_logged_in && $row['user_id'] > 1 ) ? '<a href="'.makeUrlNS('Special', 'PrivateMessages/Compose/To/' . $row['name']) . '">' . $lang->get('comment_btn_send_privmsg') . '</a><br />' : '';
1
+ − 1113
+ − 1114
// Add Buddy link
213
+ − 1115
$strings['ADD_BUDDY_LINK'] = ( $session->user_logged_in && $row['user_id'] > 1 ) ? '<a href="'.makeUrlNS('Special', 'PrivateMessages/FriendList/Add/' . $row['name']) . '">' . $lang->get('comment_btn_add_buddy') . '</a>' : '';
1
+ − 1116
+ − 1117
// Mod links
+ − 1118
$applink = '';
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1119
$applink .= '<a href="'.makeUrlNS($namespace, $page_id, 'do=comments&sub=admin&action=approve&id=' . $row['comment_id']) . '" id="mdgApproveLink' . $i . '">';
213
+ − 1120
if($row['approved']) $applink .= $lang->get('comment_btn_mod_unapprove');
+ − 1121
else $applink .= $lang->get('comment_btn_mod_approve');
1
+ − 1122
$applink .= '</a>';
+ − 1123
$strings['MOD_APPROVE_LINK'] = $applink; unset($applink);
213
+ − 1124
$strings['MOD_DELETE_LINK'] = '<a href="'.makeUrlNS($namespace, $page_id, 'do=comments&sub=admin&action=delete&id=' . $row['comment_id']) . '">' . $lang->get('comment_btn_mod_delete') . '</a>';
360
+ − 1125
$strings['MOD_IP_LINK'] = '<span style="opacity: 0.5; filter: alpha(opacity=50);">' . ( ( empty($row['ip_address']) ) ? $lang->get('comment_btn_mod_ip_missing') : $lang->get('comment_btn_mod_ip_notimplemented') ) . '</span>';
1
+ − 1126
+ − 1127
// Signature
+ − 1128
$strings['SIGNATURE'] = '';
+ − 1129
if($row['signature'] != '') $strings['SIGNATURE'] = RenderMan::render($row['signature']);
+ − 1130
328
dc838fd61a06
Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
diff
changeset
+ − 1131
// Avatar
dc838fd61a06
Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
diff
changeset
+ − 1132
if ( $row['user_has_avatar'] == 1 )
dc838fd61a06
Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
diff
changeset
+ − 1133
{
dc838fd61a06
Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
diff
changeset
+ − 1134
$bool['user_has_avatar'] = true;
dc838fd61a06
Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
diff
changeset
+ − 1135
$strings['AVATAR_ALT'] = $lang->get('usercp_avatar_image_alt', array('username' => $row['name']));
dc838fd61a06
Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
diff
changeset
+ − 1136
$strings['AVATAR_URL'] = make_avatar_url(intval($row['user_id']), $row['avatar_type']);
dc838fd61a06
Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
diff
changeset
+ − 1137
$strings['USERPAGE_LINK'] = makeUrlNS('User', $row['name']);
dc838fd61a06
Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
diff
changeset
+ − 1138
}
dc838fd61a06
Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
diff
changeset
+ − 1139
1
+ − 1140
$bool['auth_mod'] = ($session->get_permissions('mod_comments')) ? true : false;
+ − 1141
$bool['can_edit'] = ( ( $session->user_logged_in && $row['name'] == $session->username && $session->get_permissions('edit_comments') ) || $session->get_permissions('mod_comments') ) ? true : false;
+ − 1142
$bool['signature'] = ( $strings['SIGNATURE'] == '' ) ? false : true;
+ − 1143
+ − 1144
// Done processing and compiling, now let's cook it into HTML
+ − 1145
$tpl->assign_vars($strings);
+ − 1146
$tpl->assign_bool($bool);
+ − 1147
$_ob .= $tpl->run();
+ − 1148
}
+ − 1149
}
+ − 1150
if(getConfig('comments_need_login') != '2' || $session->user_logged_in)
+ − 1151
{
213
+ − 1152
if($session->get_permissions('post_comments'))
1
+ − 1153
{
213
+ − 1154
$_ob .= '<h3>' . $lang->get('comment_postform_title') . '</h3>';
+ − 1155
$_ob .= $lang->get('comment_postform_blurb');
+ − 1156
if(getConfig('approve_comments')=='1') $_ob .= ' ' . $lang->get('comment_postform_blurb_unapp');
+ − 1157
if(getConfig('comments_need_login') == '1' && !$session->user_logged_in)
+ − 1158
{
+ − 1159
$_ob .= ' ' . $lang->get('comment_postform_blurb_captcha');
+ − 1160
}
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1161
$sn = $session->user_logged_in ? $session->username . '<input name="name" id="mdgScreenName" type="hidden" value="' . $session->username . '" />' : '<input name="name" id="mdgScreenName" type="text" size="35" />';
213
+ − 1162
$_ob .= ' <a href="#" id="mdgCommentFormLink" style="display: none;" onclick="document.getElementById(\'mdgCommentForm\').style.display=\'block\';this.style.display=\'none\';return false;">' . $lang->get('comment_postform_blurb_link') . '</a>
1
+ − 1163
<div id="mdgCommentForm">
+ − 1164
<form action="'.makeUrlNS($namespace, $page_id, 'do=comments&sub=postcomment').'" method="post" style="margin-left: 1em">
+ − 1165
<table border="0">
213
+ − 1166
<tr><td>' . $lang->get('comment_postform_field_name') . '</td><td>' . $sn . '</td></tr>
+ − 1167
<tr><td>' . $lang->get('comment_postform_field_subject') . '</td><td><input name="subj" id="mdgSubject" type="text" size="35" /></td></tr>';
1
+ − 1168
if(getConfig('comments_need_login') == '1' && !$session->user_logged_in)
+ − 1169
{
+ − 1170
$session->kill_captcha();
+ − 1171
$captcha = $session->make_captcha();
213
+ − 1172
$_ob .= '<tr><td>' . $lang->get('comment_postform_field_captcha_title') . '<br /><small>' . $lang->get('comment_postform_field_captcha_blurb') . '</small></td><td><img src="'.makeUrlNS('Special', 'Captcha/' . $captcha) . '" alt="Visual confirmation" style="cursor: pointer;" onclick="this.src = \''.makeUrlNS("Special", "Captcha/".$captcha).'/\'+Math.floor(Math.random() * 100000);" /><input name="captcha_id" id="mdgCaptchaID" type="hidden" value="' . $captcha . '" /><br />' . $lang->get('comment_postform_field_captcha_label') . ' <input name="captcha_input" id="mdgCaptchaInput" type="text" size="10" /><br /><small><script type="text/javascript">document.write("' . $lang->get('comment_postform_field_captcha_cantread_js') . '");</script><noscript>' . $lang->get('comment_postform_field_captcha_cantread_nojs') . '</noscript></small></td></tr>';
1
+ − 1173
}
+ − 1174
$_ob .= '
213
+ − 1175
<tr><td valign="top">' . $lang->get('comment_postform_field_comment') . '</td><td><textarea name="text" id="mdgCommentArea" rows="10" cols="40"></textarea></td></tr>
+ − 1176
<tr><td colspan="2" style="text-align: center;"><input type="submit" value="' . $lang->get('comment_postform_btn_submit') . '" /></td></tr>
1
+ − 1177
</table>
+ − 1178
</form>
+ − 1179
</div>';
+ − 1180
}
+ − 1181
} else {
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1182
$_ob .= '<h3>Got something to say?</h3><p>You need to be logged in to post comments. <a href="'.makeUrlNS('Special', 'Login/' . $pname . '%2523comments').'">Log in</a></p>';
1
+ − 1183
}
+ − 1184
$list .= '};';
+ − 1185
echo 'document.getElementById(\'ajaxEditContainer\').innerHTML = unescape(\''. rawurlencode($_ob) .'\');
+ − 1186
' . $list;
+ − 1187
echo 'Fat.fade_all(); document.getElementById(\'mdgCommentForm\').style.display = \'none\'; document.getElementById(\'mdgCommentFormLink\').style.display="inline";';
+ − 1188
+ − 1189
$ret = ob_get_contents();
+ − 1190
ob_end_clean();
+ − 1191
return Array($ret, $_ob);
+ − 1192
+ − 1193
}
+ − 1194
+ − 1195
/**
+ − 1196
* Generates ready-to-execute Javascript code to be eval'ed by the user's browser to display comments
+ − 1197
* @param $page_id the page ID
+ − 1198
* @param $namespace the namespace
+ − 1199
* @param $action administrative action to perform, default is false
+ − 1200
* @param $flags additional info for $action, shouldn't be used except when deleting/approving comments, etc.
+ − 1201
* @param $_ob text to prepend to output, used by PageUtils::addcomment
+ − 1202
* @return string
+ − 1203
*/
+ − 1204
+ − 1205
function comments($page_id, $namespace, $action = false, $id = -1, $_ob = '')
+ − 1206
{
+ − 1207
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 1208
$r = PageUtils::comments_raw($page_id, $namespace, $action, $id, $_ob);
+ − 1209
return $r[0];
+ − 1210
}
+ − 1211
+ − 1212
/**
+ − 1213
* Generates HTML code for comments - used in browser compatibility mode
+ − 1214
* @param $page_id the page ID
+ − 1215
* @param $namespace the namespace
+ − 1216
* @param $action administrative action to perform, default is false
+ − 1217
* @param $flags additional info for $action, shouldn't be used except when deleting/approving comments, etc.
+ − 1218
* @param $_ob text to prepend to output, used by PageUtils::addcomment
+ − 1219
* @return string
+ − 1220
*/
+ − 1221
+ − 1222
function comments_html($page_id, $namespace, $action = false, $id = -1, $_ob = '')
+ − 1223
{
+ − 1224
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 1225
$r = PageUtils::comments_raw($page_id, $namespace, $action, $id, $_ob);
+ − 1226
return $r[1];
+ − 1227
}
+ − 1228
+ − 1229
/**
+ − 1230
* Updates comment data.
+ − 1231
* @param $page_id the page ID
+ − 1232
* @param $namespace the namespace
+ − 1233
* @param $subject new subject
+ − 1234
* @param $text new text
+ − 1235
* @param $old_subject the old subject, unprocessed and identical to the value in the DB
+ − 1236
* @param $old_text the old text, unprocessed and identical to the value in the DB
+ − 1237
* @param $id the javascript list ID, used internally by the client-side app
+ − 1238
* @return string
+ − 1239
*/
+ − 1240
+ − 1241
function savecomment($page_id, $namespace, $subject, $text, $old_subject, $old_text, $id = -1)
+ − 1242
{
+ − 1243
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 1244
if(!$session->get_permissions('edit_comments'))
+ − 1245
return 'result="BAD";error="Access denied"';
+ − 1246
// Avoid SQL injection
+ − 1247
$old_text = $db->escape($old_text);
+ − 1248
$old_subject = $db->escape($old_subject);
+ − 1249
// Safety check - username/login
+ − 1250
if(!$session->get_permissions('mod_comments')) // allow mods to edit comments
+ − 1251
{
+ − 1252
if(!$session->user_logged_in) _die('AJAX comment save safety check failed because you are not logged in. Sometimes this can happen because you are using a browser that does not send cookies as part of AJAX requests.<br /><br />Please log in and try again.');
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1253
$q = 'SELECT c.name FROM ' . table_prefix.'comments c, ' . table_prefix.'users u WHERE comment_data=\'' . $old_text . '\' AND subject=\'' . $old_subject . '\' AND page_id=\'' . $page_id . '\' AND namespace=\'' . $namespace . '\' AND u.user_id=c.user_id;';
1
+ − 1254
$s = $db->sql_query($q);
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 1255
if(!$s) _die('SQL error during safety check: '.$db->get_error().'<br /><br />Attempted SQL:<br /><pre>'.htmlspecialchars($q).'</pre>');
1
+ − 1256
$r = $db->fetchrow($s);
+ − 1257
$db->free_result();
+ − 1258
if($db->numrows() < 1 || $r['name'] != $session->username) _die('Safety check failed, probably due to a hacking attempt.');
+ − 1259
}
+ − 1260
$s = RenderMan::preprocess_text($subject);
+ − 1261
$t = RenderMan::preprocess_text($text);
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1262
$sql = 'UPDATE ' . table_prefix.'comments SET subject=\'' . $s . '\',comment_data=\'' . $t . '\' WHERE comment_data=\'' . $old_text . '\' AND subject=\'' . $old_subject . '\' AND page_id=\'' . $page_id . '\' AND namespace=\'' . $namespace . '\'';
1
+ − 1263
$result = $db->sql_query($sql);
+ − 1264
if($result)
+ − 1265
{
+ − 1266
return 'result="GOOD";
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1267
list[' . $id . '][\'subject\'] = unescape(\''.str_replace('%5Cn', '%0A', rawurlencode(str_replace('{{EnAnO:Newline}}', '\\n', stripslashes(str_replace('\\n', '{{EnAnO:Newline}}', $s))))).'\');
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1268
list[' . $id . '][\'comment\'] = unescape(\''.str_replace('%5Cn', '%0A', rawurlencode(str_replace('{{EnAnO:Newline}}', '\\n', stripslashes(str_replace('\\n', '{{EnAnO:Newline}}', $t))))).'\'); id = ' . $id . ';
1
+ − 1269
s = unescape(\''.rawurlencode($s).'\');
+ − 1270
t = unescape(\''.str_replace('%5Cn', '<br \\/>', rawurlencode(RenderMan::render(str_replace('{{EnAnO:Newline}}', "\n", stripslashes(str_replace('\\n', '{{EnAnO:Newline}}', $t)))))).'\');';
+ − 1271
}
+ − 1272
else
+ − 1273
{
+ − 1274
return 'result="BAD"; error=unescape("'.rawurlencode('Enano encountered a problem whilst saving the comment.
+ − 1275
Performed SQL:
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1276
' . $sql . '
1
+ − 1277
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 1278
Error returned by MySQL: '.$db->get_error()).'");';
1
+ − 1279
}
+ − 1280
}
+ − 1281
+ − 1282
/**
+ − 1283
* Updates comment data using the comment_id column instead of the old, messy way
+ − 1284
* @param $page_id the page ID
+ − 1285
* @param $namespace the namespace
+ − 1286
* @param $subject new subject
+ − 1287
* @param $text new text
+ − 1288
* @param $id the comment ID (primary key in enano_comments table)
+ − 1289
* @return string
+ − 1290
*/
+ − 1291
+ − 1292
function savecomment_neater($page_id, $namespace, $subject, $text, $id)
+ − 1293
{
+ − 1294
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 1295
if(!is_int($id)) die('PageUtils::savecomment: $id is not an integer, aborting for safety');
+ − 1296
if(!$session->get_permissions('edit_comments'))
+ − 1297
return 'Access denied';
+ − 1298
// Safety check - username/login
+ − 1299
if(!$session->get_permissions('mod_comments')) // allow mods to edit comments
+ − 1300
{
+ − 1301
if(!$session->user_logged_in) _die('AJAX comment save safety check failed because you are not logged in. Sometimes this can happen because you are using a browser that does not send cookies as part of AJAX requests.<br /><br />Please log in and try again.');
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1302
$q = 'SELECT c.name FROM ' . table_prefix.'comments c, ' . table_prefix.'users u WHERE comment_id=' . $id . ' AND page_id=\'' . $page_id . '\' AND namespace=\'' . $namespace . '\' AND u.user_id=c.user_id;';
1
+ − 1303
$s = $db->sql_query($q);
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 1304
if(!$s) _die('SQL error during safety check: '.$db->get_error().'<br /><br />Attempted SQL:<br /><pre>'.htmlspecialchars($q).'</pre>');
1
+ − 1305
$r = $db->fetchrow($s);
+ − 1306
if($db->numrows() < 1 || $r['name'] != $session->username) _die('Safety check failed, probably due to a hacking attempt.');
+ − 1307
$db->free_result();
+ − 1308
}
+ − 1309
$s = RenderMan::preprocess_text($subject);
+ − 1310
$t = RenderMan::preprocess_text($text);
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1311
$sql = 'UPDATE ' . table_prefix.'comments SET subject=\'' . $s . '\',comment_data=\'' . $t . '\' WHERE comment_id=' . $id . ' AND page_id=\'' . $page_id . '\' AND namespace=\'' . $namespace . '\'';
1
+ − 1312
$result = $db->sql_query($sql);
+ − 1313
if($result)
+ − 1314
return 'good';
+ − 1315
else return 'Enano encountered a problem whilst saving the comment.
+ − 1316
Performed SQL:
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1317
' . $sql . '
1
+ − 1318
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 1319
Error returned by MySQL: '.$db->get_error();
1
+ − 1320
}
+ − 1321
+ − 1322
/**
+ − 1323
* Deletes a comment.
+ − 1324
* @param $page_id the page ID
+ − 1325
* @param $namespace the namespace
+ − 1326
* @param $name the name the user posted under
+ − 1327
* @param $subj the subject of the comment to be deleted
+ − 1328
* @param $text the text of the comment to be deleted
+ − 1329
* @param $id the javascript list ID, used internally by the client-side app
+ − 1330
* @return string
+ − 1331
*/
+ − 1332
+ − 1333
function deletecomment($page_id, $namespace, $name, $subj, $text, $id)
+ − 1334
{
+ − 1335
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 1336
+ − 1337
if(!$session->get_permissions('edit_comments'))
+ − 1338
return 'alert("Access to delete/edit comments is denied");';
+ − 1339
+ − 1340
if(!preg_match('#^([0-9]+)$#', (string)$id)) die('$_GET[id] is improperly formed.');
+ − 1341
$n = $db->escape($name);
+ − 1342
$s = $db->escape($subj);
+ − 1343
$t = $db->escape($text);
+ − 1344
+ − 1345
// Safety check - username/login
+ − 1346
if(!$session->get_permissions('mod_comments')) // allows mods to delete comments
+ − 1347
{
+ − 1348
if(!$session->user_logged_in) _die('AJAX comment save safety check failed because you are not logged in. Sometimes this can happen because you are using a browser that does not send cookies as part of AJAX requests.<br /><br />Please log in and try again.');
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1349
$q = 'SELECT c.name FROM ' . table_prefix.'comments c, ' . table_prefix.'users u WHERE comment_data=\'' . $t . '\' AND subject=\'' . $s . '\' AND page_id=\'' . $page_id . '\' AND namespace=\'' . $namespace . '\' AND u.user_id=c.user_id;';
1
+ − 1350
$s = $db->sql_query($q);
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 1351
if(!$s) _die('SQL error during safety check: '.$db->get_error().'<br /><br />Attempted SQL:<br /><pre>'.htmlspecialchars($q).'</pre>');
1
+ − 1352
$r = $db->fetchrow($s);
+ − 1353
if($db->numrows() < 1 || $r['name'] != $session->username) _die('Safety check failed, probably due to a hacking attempt.');
+ − 1354
$db->free_result();
+ − 1355
}
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1356
$q = 'DELETE FROM ' . table_prefix.'comments WHERE page_id=\'' . $page_id . '\' AND namespace=\'' . $namespace . '\' AND name=\'' . $n . '\' AND subject=\'' . $s . '\' AND comment_data=\'' . $t . '\' LIMIT 1;';
1
+ − 1357
$e=$db->sql_query($q);
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 1358
if(!$e) return('alert(unesape(\''.rawurlencode('Error during query: '.$db->get_error().'\n\nQuery:\n' . $q) . '\'));');
1
+ − 1359
return('good');
+ − 1360
}
+ − 1361
+ − 1362
/**
+ − 1363
* Deletes a comment in a cleaner fashion.
+ − 1364
* @param $page_id the page ID
+ − 1365
* @param $namespace the namespace
+ − 1366
* @param $id the comment ID (primary key)
+ − 1367
* @return string
+ − 1368
*/
+ − 1369
+ − 1370
function deletecomment_neater($page_id, $namespace, $id)
+ − 1371
{
+ − 1372
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 1373
+ − 1374
if(!preg_match('#^([0-9]+)$#', (string)$id)) die('$_GET[id] is improperly formed.');
+ − 1375
+ − 1376
if(!$session->get_permissions('edit_comments'))
+ − 1377
return 'alert("Access to delete/edit comments is denied");';
+ − 1378
+ − 1379
// Safety check - username/login
+ − 1380
if(!$session->get_permissions('mod_comments')) // allows mods to delete comments
+ − 1381
{
+ − 1382
if(!$session->user_logged_in) _die('AJAX comment save safety check failed because you are not logged in. Sometimes this can happen because you are using a browser that does not send cookies as part of AJAX requests.<br /><br />Please log in and try again.');
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1383
$q = 'SELECT c.name FROM ' . table_prefix.'comments c, ' . table_prefix.'users u WHERE comment_id=' . $id . ' AND page_id=\'' . $page_id . '\' AND namespace=\'' . $namespace . '\' AND u.user_id=c.user_id;';
1
+ − 1384
$s = $db->sql_query($q);
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 1385
if(!$s) _die('SQL error during safety check: '.$db->get_error().'<br /><br />Attempted SQL:<br /><pre>'.htmlspecialchars($q).'</pre>');
1
+ − 1386
$r = $db->fetchrow($s);
+ − 1387
if($db->numrows() < 1 || $r['name'] != $session->username) _die('Safety check failed, probably due to a hacking attempt.');
+ − 1388
$db->free_result();
+ − 1389
}
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1390
$q = 'DELETE FROM ' . table_prefix.'comments WHERE page_id=\'' . $page_id . '\' AND namespace=\'' . $namespace . '\' AND comment_id=' . $id . ' LIMIT 1;';
1
+ − 1391
$e=$db->sql_query($q);
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 1392
if(!$e) return('alert(unesape(\''.rawurlencode('Error during query: '.$db->get_error().'\n\nQuery:\n' . $q) . '\'));');
1
+ − 1393
return('good');
+ − 1394
}
+ − 1395
+ − 1396
/**
+ − 1397
* Renames a page.
+ − 1398
* @param $page_id the page ID
+ − 1399
* @param $namespace the namespace
+ − 1400
* @param $name the new name for the page
+ − 1401
* @return string error string or success message
+ − 1402
*/
+ − 1403
+ − 1404
function rename($page_id, $namespace, $name)
+ − 1405
{
+ − 1406
global $db, $session, $paths, $template, $plugins; // Common objects
214
+ − 1407
global $lang;
1
+ − 1408
+ − 1409
$pname = $paths->nslist[$namespace] . $page_id;
+ − 1410
+ − 1411
$prot = ( ( $paths->pages[$pname]['protected'] == 2 && $session->user_logged_in && $session->reg_time + 60*60*24*4 < time() ) || $paths->pages[$pname]['protected'] == 1) ? true : false;
+ − 1412
$wiki = ( ( $paths->pages[$pname]['wiki_mode'] == 2 && getConfig('wiki_mode') == '1') || $paths->pages[$pname]['wiki_mode'] == 1) ? true : false;
+ − 1413
15
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 1414
if( empty($name))
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 1415
{
214
+ − 1416
return($lang->get('ajax_rename_too_short'));
15
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 1417
}
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 1418
if( ( $session->get_permissions('rename') && ( ( $prot && $session->get_permissions('even_when_protected') ) || !$prot ) ) && ( $paths->namespace != 'Special' && $paths->namespace != 'Admin' ))
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 1419
{
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 1420
$e = $db->sql_query('INSERT INTO ' . table_prefix.'logs(time_id,date_string,log_type,action,page_id,namespace,author,edit_summary) VALUES('.time().', \''.enano_date('d M Y h:i a').'\', \'page\', \'rename\', \'' . $db->escape($paths->page_id) . '\', \'' . $paths->namespace . '\', \'' . $db->escape($session->username) . '\', \'' . $db->escape($paths->cpage['name']) . '\')');
15
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 1421
if ( !$e )
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 1422
{
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 1423
$db->_die('The page title could not be updated.');
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 1424
}
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1425
$e = $db->sql_query('UPDATE ' . table_prefix.'pages SET name=\'' . $db->escape($name) . '\' WHERE urlname=\'' . $db->escape($page_id) . '\' AND namespace=\'' . $db->escape($namespace) . '\';');
15
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 1426
if ( !$e )
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 1427
{
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 1428
$db->_die('The page title could not be updated.');
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 1429
}
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 1430
else
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 1431
{
214
+ − 1432
$subst = array(
+ − 1433
'page_name_old' => $paths->pages[$pname]['name'],
+ − 1434
'page_name_new' => $name
+ − 1435
);
+ − 1436
return $lang->get('ajax_rename_success', $subst);
15
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 1437
}
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 1438
}
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 1439
else
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 1440
{
214
+ − 1441
return($lang->get('etc_access_denied'));
1
+ − 1442
}
+ − 1443
}
+ − 1444
+ − 1445
/**
+ − 1446
* Flushes (clears) the action logs for a given page
+ − 1447
* @param $page_id the page ID
+ − 1448
* @param $namespace the namespace
+ − 1449
* @return string error/success string
+ − 1450
*/
+ − 1451
+ − 1452
function flushlogs($page_id, $namespace)
+ − 1453
{
+ − 1454
global $db, $session, $paths, $template, $plugins; // Common objects
214
+ − 1455
global $lang;
240
f0149a27df5f
Localized default sidebar; installer should work now including the lang import; l10n in installer to follow
Dan
diff
changeset
+ − 1456
if ( !is_object($lang) && defined('IN_ENANO_INSTALL') )
f0149a27df5f
Localized default sidebar; installer should work now including the lang import; l10n in installer to follow
Dan
diff
changeset
+ − 1457
{
f0149a27df5f
Localized default sidebar; installer should work now including the lang import; l10n in installer to follow
Dan
diff
changeset
+ − 1458
// This is a special exception for the Enano installer, which doesn't init languages yet.
f0149a27df5f
Localized default sidebar; installer should work now including the lang import; l10n in installer to follow
Dan
diff
changeset
+ − 1459
$lang = new Language('eng');
f0149a27df5f
Localized default sidebar; installer should work now including the lang import; l10n in installer to follow
Dan
diff
changeset
+ − 1460
}
351
+ − 1461
if(!$session->get_permissions('clear_logs') && !defined('IN_ENANO_INSTALL'))
214
+ − 1462
{
+ − 1463
return $lang->get('etc_access_denied');
+ − 1464
}
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1465
$e = $db->sql_query('DELETE FROM ' . table_prefix.'logs WHERE page_id=\'' . $db->escape($page_id) . '\' AND namespace=\'' . $db->escape($namespace) . '\';');
1
+ − 1466
if(!$e) $db->_die('The log entries could not be deleted.');
32
4d87aad3c4c0
Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
diff
changeset
+ − 1467
4d87aad3c4c0
Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
diff
changeset
+ − 1468
// If the page exists, make a backup of it in case it gets spammed/vandalized
4d87aad3c4c0
Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
diff
changeset
+ − 1469
// If not, the admin's probably deleting a trash page
4d87aad3c4c0
Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
diff
changeset
+ − 1470
if ( isset($paths->pages[ $paths->nslist[$namespace] . $page_id ]) )
4d87aad3c4c0
Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
diff
changeset
+ − 1471
{
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1472
$e = $db->sql_query('SELECT page_text,char_tag FROM ' . table_prefix.'page_text WHERE page_id=\'' . $page_id . '\' AND namespace=\'' . $namespace . '\';');
32
4d87aad3c4c0
Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
diff
changeset
+ − 1473
if(!$e) $db->_die('The current page text could not be selected; as a result, creating the backup of the page failed. Please make a backup copy of the page by clicking Edit this page and then clicking Save Changes.');
4d87aad3c4c0
Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
diff
changeset
+ − 1474
$row = $db->fetchrow();
4d87aad3c4c0
Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
diff
changeset
+ − 1475
$db->free_result();
320
112debff64bd
SURPRISE! Preliminary PostgreSQL support added. The required schema file is not present in this commit and will be included at a later date. No installer support is implemented. Also in this commit: several fixes including <!-- SYSMSG ... --> was broken in template compiler; set fixed width on included images to prevent the thumbnail box from getting huge; added a much more friendly interface to AJAX responses that are invalid JSON
Dan
diff
changeset
+ − 1476
$minor_edit = ( ENANO_DBLAYER == 'MYSQL' ) ? 'false' : '0';
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 1477
$q='INSERT INTO ' . table_prefix.'logs(log_type,action,time_id,date_string,page_id,namespace,page_text,char_tag,author,edit_summary,minor_edit) VALUES(\'page\', \'edit\', '.time().', \''.enano_date('d M Y h:i a').'\', \'' . $page_id . '\', \'' . $namespace . '\', \'' . $db->escape($row['page_text']) . '\', \'' . $row['char_tag'] . '\', \'' . $session->username . '\', \''."Automatic backup created when logs were purged".'\', '.$minor_edit.');';
32
4d87aad3c4c0
Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
diff
changeset
+ − 1478
if(!$db->sql_query($q)) $db->_die('The history (log) entry could not be inserted into the logs table.');
4d87aad3c4c0
Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
diff
changeset
+ − 1479
}
214
+ − 1480
return $lang->get('ajax_clearlogs_success');
1
+ − 1481
}
+ − 1482
+ − 1483
/**
+ − 1484
* Deletes a page.
28
+ − 1485
* @param string $page_id the condemned page ID
+ − 1486
* @param string $namespace the condemned namespace
+ − 1487
* @param string The reason for deleting the page in question
1
+ − 1488
* @return string
+ − 1489
*/
+ − 1490
28
+ − 1491
function deletepage($page_id, $namespace, $reason)
1
+ − 1492
{
+ − 1493
global $db, $session, $paths, $template, $plugins; // Common objects
214
+ − 1494
global $lang;
1
+ − 1495
$perms = $session->fetch_page_acl($page_id, $namespace);
28
+ − 1496
$x = trim($reason);
+ − 1497
if ( empty($x) )
+ − 1498
{
214
+ − 1499
return $lang->get('ajax_delete_need_reason');
28
+ − 1500
}
+ − 1501
if(!$perms->get_permissions('delete_page')) return('Administrative privileges are required to delete pages, you loser.');
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 1502
$e = $db->sql_query('INSERT INTO ' . table_prefix.'logs(time_id,date_string,log_type,action,page_id,namespace,author,edit_summary) VALUES('.time().', \''.enano_date('d M Y h:i a').'\', \'page\', \'delete\', \'' . $page_id . '\', \'' . $namespace . '\', \'' . $session->username . '\', \'' . $db->escape(htmlspecialchars($reason)) . '\')');
1
+ − 1503
if(!$e) $db->_die('The page log entry could not be inserted.');
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1504
$e = $db->sql_query('DELETE FROM ' . table_prefix.'categories WHERE page_id=\'' . $page_id . '\' AND namespace=\'' . $namespace . '\'');
1
+ − 1505
if(!$e) $db->_die('The page categorization entries could not be deleted.');
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1506
$e = $db->sql_query('DELETE FROM ' . table_prefix.'comments WHERE page_id=\'' . $page_id . '\' AND namespace=\'' . $namespace . '\'');
1
+ − 1507
if(!$e) $db->_die('The page comments could not be deleted.');
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1508
$e = $db->sql_query('DELETE FROM ' . table_prefix.'page_text WHERE page_id=\'' . $page_id . '\' AND namespace=\'' . $namespace . '\'');
1
+ − 1509
if(!$e) $db->_die('The page text entry could not be deleted.');
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1510
$e = $db->sql_query('DELETE FROM ' . table_prefix.'pages WHERE urlname=\'' . $page_id . '\' AND namespace=\'' . $namespace . '\'');
1
+ − 1511
if(!$e) $db->_die('The page entry could not be deleted.');
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1512
$e = $db->sql_query('DELETE FROM ' . table_prefix.'files WHERE page_id=\'' . $page_id . '\'');
1
+ − 1513
if(!$e) $db->_die('The file entry could not be deleted.');
214
+ − 1514
return $lang->get('ajax_delete_success');
1
+ − 1515
}
+ − 1516
+ − 1517
/**
+ − 1518
* Increments the deletion votes for a page by 1, and adds the current username/IP to the list of users that have voted for the page to prevent dual-voting
+ − 1519
* @param $page_id the page ID
+ − 1520
* @param $namespace the namespace
+ − 1521
* @return string
+ − 1522
*/
+ − 1523
+ − 1524
function delvote($page_id, $namespace)
+ − 1525
{
+ − 1526
global $db, $session, $paths, $template, $plugins; // Common objects
214
+ − 1527
global $lang;
112
+ − 1528
if ( !$session->get_permissions('vote_delete') )
+ − 1529
{
214
+ − 1530
return $lang->get('etc_access_denied');
112
+ − 1531
}
+ − 1532
+ − 1533
if ( $namespace == 'Admin' || $namespace == 'Special' || $namespace == 'System' )
+ − 1534
{
+ − 1535
return 'Special pages and system messages can\'t be voted for deletion.';
+ − 1536
}
+ − 1537
+ − 1538
$pname = $paths->nslist[$namespace] . sanitize_page_id($page_id);
+ − 1539
+ − 1540
if ( !isset($paths->pages[$pname]) )
+ − 1541
{
+ − 1542
return 'The page does not exist.';
+ − 1543
}
+ − 1544
+ − 1545
$cv =& $paths->pages[$pname]['delvotes'];
+ − 1546
$ips = $paths->pages[$pname]['delvote_ips'];
+ − 1547
+ − 1548
if ( empty($ips) )
+ − 1549
{
+ − 1550
$ips = array(
+ − 1551
'ip' => array(),
+ − 1552
'u' => array()
+ − 1553
);
+ − 1554
}
+ − 1555
else
+ − 1556
{
+ − 1557
$ips = @unserialize($ips);
+ − 1558
if ( !$ips )
+ − 1559
{
+ − 1560
$ips = array(
+ − 1561
'ip' => array(),
+ − 1562
'u' => array()
+ − 1563
);
+ − 1564
}
+ − 1565
}
+ − 1566
+ − 1567
if ( in_array($session->username, $ips['u']) || in_array($_SERVER['REMOTE_ADDR'], $ips['ip']) )
+ − 1568
{
214
+ − 1569
return $lang->get('ajax_delvote_already_voted');
112
+ − 1570
}
+ − 1571
+ − 1572
$ips['u'][] = $session->username;
+ − 1573
$ips['ip'][] = $_SERVER['REMOTE_ADDR'];
+ − 1574
$ips = $db->escape( serialize($ips) );
+ − 1575
1
+ − 1576
$cv++;
112
+ − 1577
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1578
$q = 'UPDATE ' . table_prefix.'pages SET delvotes=' . $cv . ',delvote_ips=\'' . $ips . '\' WHERE urlname=\'' . $page_id . '\' AND namespace=\'' . $namespace . '\'';
1
+ − 1579
$w = $db->sql_query($q);
112
+ − 1580
214
+ − 1581
return $lang->get('ajax_delvote_success');
1
+ − 1582
}
+ − 1583
+ − 1584
/**
+ − 1585
* Resets the number of votes against a page to 0.
+ − 1586
* @param $page_id the page ID
+ − 1587
* @param $namespace the namespace
+ − 1588
* @return string
+ − 1589
*/
+ − 1590
+ − 1591
function resetdelvotes($page_id, $namespace)
+ − 1592
{
+ − 1593
global $db, $session, $paths, $template, $plugins; // Common objects
214
+ − 1594
global $lang;
+ − 1595
if(!$session->get_permissions('vote_reset'))
+ − 1596
{
+ − 1597
return $lang->get('etc_access_denied');
+ − 1598
}
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1599
$q = 'UPDATE ' . table_prefix.'pages SET delvotes=0,delvote_ips=\'' . $db->escape(serialize(array('ip'=>array(),'u'=>array()))) . '\' WHERE urlname=\'' . $page_id . '\' AND namespace=\'' . $namespace . '\'';
1
+ − 1600
$e = $db->sql_query($q);
+ − 1601
if(!$e) $db->_die('The number of delete votes was not reset.');
214
+ − 1602
else
+ − 1603
{
+ − 1604
return $lang->get('ajax_delvote_reset_success');
+ − 1605
}
1
+ − 1606
}
+ − 1607
+ − 1608
/**
29
e5484a9e0818
Rewrote change theme dialog; a few minor stability fixes here and there; fixed IE + St Patty background image
Dan
diff
changeset
+ − 1609
* Gets a list of styles for a given theme name. As of Banshee, this returns JSON.
1
+ − 1610
* @param $id the name of the directory for the theme
29
e5484a9e0818
Rewrote change theme dialog; a few minor stability fixes here and there; fixed IE + St Patty background image
Dan
diff
changeset
+ − 1611
* @return string JSON string with an array containing a list of themes
1
+ − 1612
*/
+ − 1613
+ − 1614
function getstyles()
+ − 1615
{
29
e5484a9e0818
Rewrote change theme dialog; a few minor stability fixes here and there; fixed IE + St Patty background image
Dan
diff
changeset
+ − 1616
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1617
if ( !preg_match('/^([a-z0-9_-]+)$/', $_GET['id']) )
334
c72b545f1304
More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
diff
changeset
+ − 1618
return enano_json_encode(false);
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1619
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1620
$dir = './themes/' . $_GET['id'] . '/css/';
1
+ − 1621
$list = Array();
+ − 1622
// Open a known directory, and proceed to read its contents
+ − 1623
if (is_dir($dir)) {
+ − 1624
if ($dh = opendir($dir)) {
+ − 1625
while (($file = readdir($dh)) !== false) {
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1626
if ( preg_match('#^(.*?)\.css$#is', $file) && $file != '_printable.css' ) // _printable.css should be included with every theme
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1627
{ // it should be a copy of the original style, but
1
+ − 1628
// mostly black and white
+ − 1629
// Note to self: document this
+ − 1630
$list[] = substr($file, 0, strlen($file)-4);
+ − 1631
}
+ − 1632
}
+ − 1633
closedir($dh);
+ − 1634
}
+ − 1635
}
29
e5484a9e0818
Rewrote change theme dialog; a few minor stability fixes here and there; fixed IE + St Patty background image
Dan
diff
changeset
+ − 1636
else
e5484a9e0818
Rewrote change theme dialog; a few minor stability fixes here and there; fixed IE + St Patty background image
Dan
diff
changeset
+ − 1637
{
334
c72b545f1304
More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
diff
changeset
+ − 1638
return(enano_json_encode(Array('mode' => 'error', 'error' => $dir.' is not a dir')));
29
e5484a9e0818
Rewrote change theme dialog; a few minor stability fixes here and there; fixed IE + St Patty background image
Dan
diff
changeset
+ − 1639
}
e5484a9e0818
Rewrote change theme dialog; a few minor stability fixes here and there; fixed IE + St Patty background image
Dan
diff
changeset
+ − 1640
334
c72b545f1304
More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
diff
changeset
+ − 1641
return enano_json_encode($list);
1
+ − 1642
}
+ − 1643
+ − 1644
/**
+ − 1645
* Assembles a Javascript app with category information
+ − 1646
* @param $page_id the page ID
+ − 1647
* @param $namespace the namespace
+ − 1648
* @return string Javascript code
+ − 1649
*/
+ − 1650
+ − 1651
function catedit($page_id, $namespace)
+ − 1652
{
+ − 1653
$d = PageUtils::catedit_raw($page_id, $namespace);
+ − 1654
return $d[0] . ' /* BEGIN CONTENT */ document.getElementById("ajaxEditContainer").innerHTML = unescape(\''.rawurlencode($d[1]).'\');';
+ − 1655
}
+ − 1656
+ − 1657
/**
+ − 1658
* Does the actual HTML/javascript generation for cat editing, but returns an array
+ − 1659
* @access private
+ − 1660
*/
+ − 1661
+ − 1662
function catedit_raw($page_id, $namespace)
+ − 1663
{
+ − 1664
global $db, $session, $paths, $template, $plugins; // Common objects
214
+ − 1665
global $lang;
+ − 1666
1
+ − 1667
ob_start();
+ − 1668
$_ob = '';
322
+ − 1669
$e = $db->sql_query('SELECT category_id FROM ' . table_prefix.'categories WHERE page_id=\'' . $paths->page_id . '\' AND namespace=\'' . $paths->namespace . '\'');
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 1670
if(!$e) jsdie('Error selecting category information for current page: '.$db->get_error());
1
+ − 1671
$cat_current = Array();
+ − 1672
while($r = $db->fetchrow())
+ − 1673
{
+ − 1674
$cat_current[] = $r;
+ − 1675
}
+ − 1676
$db->free_result();
+ − 1677
$cat_all = Array();
+ − 1678
for($i=0;$i<sizeof($paths->pages)/2;$i++)
+ − 1679
{
+ − 1680
if($paths->pages[$i]['namespace']=='Category') $cat_all[] = $paths->pages[$i];
+ − 1681
}
+ − 1682
+ − 1683
// Make $cat_all an associative array, like $paths->pages
+ − 1684
$sz = sizeof($cat_all);
+ − 1685
for($i=0;$i<$sz;$i++)
+ − 1686
{
+ − 1687
$cat_all[$cat_all[$i]['urlname_nons']] = $cat_all[$i];
+ − 1688
}
+ − 1689
// Now, the "zipper" function - join the list of categories with the list of cats that this page is a part of
+ − 1690
$cat_info = $cat_all;
+ − 1691
for($i=0;$i<sizeof($cat_current);$i++)
+ − 1692
{
+ − 1693
$un = $cat_current[$i]['category_id'];
+ − 1694
$cat_info[$un]['member'] = true;
+ − 1695
}
+ − 1696
// Now copy the information we just set into the numerically named keys
+ − 1697
for($i=0;$i<sizeof($cat_info)/2;$i++)
+ − 1698
{
+ − 1699
$un = $cat_info[$i]['urlname_nons'];
+ − 1700
$cat_info[$i] = $cat_info[$un];
+ − 1701
}
+ − 1702
+ − 1703
echo 'catlist = new Array();'; // Initialize the client-side category list
214
+ − 1704
$_ob .= '<h3>' . $lang->get('catedit_title') . '</h3>
1
+ − 1705
<form name="mdgCatForm" action="'.makeUrlNS($namespace, $page_id, 'do=catedit').'" method="post">';
+ − 1706
if ( sizeof($cat_info) < 1 )
+ − 1707
{
214
+ − 1708
$_ob .= '<p>' . $lang->get('catedit_no_categories') . '</p>';
1
+ − 1709
}
+ − 1710
for ( $i = 0; $i < sizeof($cat_info) / 2; $i++ )
+ − 1711
{
+ − 1712
// Protection code added 1/3/07
+ − 1713
// Updated 3/4/07
+ − 1714
$is_prot = false;
+ − 1715
$perms = $session->fetch_page_acl($cat_info[$i]['urlname_nons'], 'Category');
+ − 1716
if ( !$session->get_permissions('edit_cat') || !$perms->get_permissions('edit_cat') ||
+ − 1717
( $cat_info[$i]['really_protected'] && !$perms->get_permissions('even_when_protected') ) )
+ − 1718
$is_prot = true;
+ − 1719
$prot = ( $is_prot ) ? ' disabled="disabled" ' : '';
+ − 1720
$prottext = ( $is_prot ) ? ' <img alt="(protected)" width="16" height="16" src="'.scriptPath.'/images/lock16.png" />' : '';
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1721
echo 'catlist[' . $i . '] = \'' . $cat_info[$i]['urlname_nons'] . '\';';
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1722
$_ob .= '<span class="catCheck"><input ' . $prot . ' name="' . $cat_info[$i]['urlname_nons'] . '" id="mdgCat_' . $cat_info[$i]['urlname_nons'] . '" type="checkbox"';
1
+ − 1723
if(isset($cat_info[$i]['member'])) $_ob .= ' checked="checked"';
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1724
$_ob .= '/> <label for="mdgCat_' . $cat_info[$i]['urlname_nons'] . '">' . $cat_info[$i]['name'].$prottext.'</label></span><br />';
1
+ − 1725
}
+ − 1726
+ − 1727
$disabled = ( sizeof($cat_info) < 1 ) ? 'disabled="disabled"' : '';
+ − 1728
214
+ − 1729
$_ob .= '<div style="border-top: 1px solid #CCC; padding-top: 5px; margin-top: 10px;"><input name="__enanoSaveButton" ' . $disabled . ' style="font-weight: bold;" type="submit" onclick="ajaxCatSave(); return false;" value="' . $lang->get('etc_save_changes') . '" /> <input name="__enanoCatCancel" type="submit" onclick="ajaxReset(); return false;" value="' . $lang->get('etc_cancel') . '" /></div></form>';
1
+ − 1730
+ − 1731
$cont = ob_get_contents();
+ − 1732
ob_end_clean();
+ − 1733
return Array($cont, $_ob);
+ − 1734
}
+ − 1735
+ − 1736
/**
+ − 1737
* Saves category information
+ − 1738
* WARNING: If $which_cats is empty, all the category information for the selected page will be nuked!
+ − 1739
* @param $page_id string the page ID
+ − 1740
* @param $namespace string the namespace
+ − 1741
* @param $which_cats array associative array of categories to put the page in
+ − 1742
* @return string "GOOD" on success, error string on failure
+ − 1743
*/
+ − 1744
+ − 1745
function catsave($page_id, $namespace, $which_cats)
+ − 1746
{
+ − 1747
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 1748
if(!$session->get_permissions('edit_cat')) return('Insufficient privileges to change category information');
+ − 1749
+ − 1750
$page_perms = $session->fetch_page_acl($page_id, $namespace);
+ − 1751
$page_data =& $paths->pages[$paths->nslist[$namespace].$page_id];
+ − 1752
+ − 1753
$cat_all = Array();
+ − 1754
for($i=0;$i<sizeof($paths->pages)/2;$i++)
+ − 1755
{
+ − 1756
if($paths->pages[$i]['namespace']=='Category') $cat_all[] = $paths->pages[$i];
+ − 1757
}
+ − 1758
+ − 1759
// Make $cat_all an associative array, like $paths->pages
+ − 1760
$sz = sizeof($cat_all);
+ − 1761
for($i=0;$i<$sz;$i++)
+ − 1762
{
+ − 1763
$cat_all[$cat_all[$i]['urlname_nons']] = $cat_all[$i];
+ − 1764
}
+ − 1765
+ − 1766
$rowlist = Array();
+ − 1767
+ − 1768
for($i=0;$i<sizeof($cat_all)/2;$i++)
+ − 1769
{
+ − 1770
$auth = true;
+ − 1771
$perms = $session->fetch_page_acl($cat_all[$i]['urlname_nons'], 'Category');
+ − 1772
if ( !$session->get_permissions('edit_cat') || !$perms->get_permissions('edit_cat') ||
+ − 1773
( $cat_all[$i]['really_protected'] && !$perms->get_permissions('even_when_protected') ) ||
+ − 1774
( !$page_perms->get_permissions('even_when_protected') && $page_data['protected'] == '1' ) )
+ − 1775
$auth = false;
+ − 1776
if(!$auth)
+ − 1777
{
+ − 1778
// Find out if the page is currently in the category
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1779
$q = $db->sql_query('SELECT * FROM ' . table_prefix.'categories WHERE page_id=\'' . $page_id . '\' AND namespace=\'' . $namespace . '\';');
1
+ − 1780
if(!$q)
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1781
return 'MySQL error: ' . $db->get_error();
1
+ − 1782
if($db->numrows() > 0)
+ − 1783
{
+ − 1784
$auth = true;
+ − 1785
$which_cats[$cat_all[$i]['urlname_nons']] = true; // Force the category to stay in its current state
+ − 1786
}
+ − 1787
$db->free_result();
+ − 1788
}
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1789
if(isset($which_cats[$cat_all[$i]['urlname_nons']]) && $which_cats[$cat_all[$i]['urlname_nons']] == true /* for clarity ;-) */ && $auth ) $rowlist[] = '(\'' . $page_id . '\', \'' . $namespace . '\', \'' . $cat_all[$i]['urlname_nons'] . '\')';
1
+ − 1790
}
+ − 1791
if(sizeof($rowlist) > 0)
+ − 1792
{
+ − 1793
$val = implode(',', $rowlist);
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1794
$q = 'INSERT INTO ' . table_prefix.'categories(page_id,namespace,category_id) VALUES' . $val . ';';
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1795
$e = $db->sql_query('DELETE FROM ' . table_prefix.'categories WHERE page_id=\'' . $page_id . '\' AND namespace=\'' . $namespace . '\';');
1
+ − 1796
if(!$e) $db->_die('The old category data could not be deleted.');
+ − 1797
$e = $db->sql_query($q);
+ − 1798
if(!$e) $db->_die('The new category data could not be inserted.');
+ − 1799
return('GOOD');
+ − 1800
}
+ − 1801
else
+ − 1802
{
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1803
$e = $db->sql_query('DELETE FROM ' . table_prefix.'categories WHERE page_id=\'' . $page_id . '\' AND namespace=\'' . $namespace . '\';');
1
+ − 1804
if(!$e) $db->_die('The old category data could not be deleted.');
+ − 1805
return('GOOD');
+ − 1806
}
+ − 1807
}
+ − 1808
+ − 1809
/**
+ − 1810
* Sets the wiki mode level for a page.
+ − 1811
* @param $page_id string the page ID
+ − 1812
* @param $namespace string the namespace
+ − 1813
* @param $level int 0 for off, 1 for on, 2 for use global setting
+ − 1814
* @return string "GOOD" on success, error string on failure
+ − 1815
*/
+ − 1816
+ − 1817
function setwikimode($page_id, $namespace, $level)
+ − 1818
{
+ − 1819
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 1820
if(!$session->get_permissions('set_wiki_mode')) return('Insufficient access rights');
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1821
if ( !isset($level) || ( isset($level) && !preg_match('#^([0-2]){1}$#', (string)$level) ) )
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1822
{
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1823
return('Invalid mode string');
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1824
}
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1825
$q = $db->sql_query('UPDATE ' . table_prefix.'pages SET wiki_mode=' . $level . ' WHERE urlname=\'' . $page_id . '\' AND namespace=\'' . $namespace . '\';');
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1826
if ( !$q )
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1827
{
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 1828
return('Error during update query: '.$db->get_error()."\n\nSQL Backtrace:\n".$db->sql_backtrace());
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1829
}
1
+ − 1830
return('GOOD');
+ − 1831
}
+ − 1832
+ − 1833
/**
+ − 1834
* Sets the access password for a page.
+ − 1835
* @param $page_id string the page ID
+ − 1836
* @param $namespace string the namespace
+ − 1837
* @param $pass string the SHA1 hash of the password - if the password doesn't match the regex ^([0-9a-f]*){40,40}$ it will be sha1'ed
+ − 1838
* @return string
+ − 1839
*/
+ − 1840
+ − 1841
function setpass($page_id, $namespace, $pass)
+ − 1842
{
+ − 1843
global $db, $session, $paths, $template, $plugins; // Common objects
214
+ − 1844
global $lang;
1
+ − 1845
// Determine permissions
+ − 1846
if($paths->pages[$paths->nslist[$namespace].$page_id]['password'] != '')
+ − 1847
$a = $session->get_permissions('password_reset');
+ − 1848
else
+ − 1849
$a = $session->get_permissions('password_set');
+ − 1850
if(!$a)
214
+ − 1851
return $lang->get('etc_access_denied');
1
+ − 1852
if(!isset($pass)) return('Password was not set on URL');
+ − 1853
$p = $pass;
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1854
if ( !preg_match('#([0-9a-f]){40,40}#', $p) )
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1855
{
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1856
$p = sha1($p);
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1857
}
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1858
if ( $p == 'da39a3ee5e6b4b0d3255bfef95601890afd80709' )
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1859
// sha1('') = da39a3ee5e6b4b0d3255bfef95601890afd80709
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1860
$p = '';
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1861
$e = $db->sql_query('UPDATE ' . table_prefix.'pages SET password=\'' . $p . '\' WHERE urlname=\'' . $page_id . '\' AND namespace=\'' . $namespace . '\';');
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1862
if ( !$e )
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1863
{
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 1864
die('PageUtils::setpass(): Error during update query: '.$db->get_error()."\n\nSQL Backtrace:\n".$db->sql_backtrace());
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1865
}
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1866
// Is the new password blank?
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1867
if ( $p == '' )
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1868
{
214
+ − 1869
return $lang->get('ajax_password_disable_success');
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1870
}
214
+ − 1871
else
+ − 1872
{
+ − 1873
return $lang->get('ajax_password_success');
+ − 1874
}
1
+ − 1875
}
+ − 1876
+ − 1877
/**
+ − 1878
* Generates some preview HTML
+ − 1879
* @param $text string the wikitext to use
+ − 1880
* @return string
+ − 1881
*/
+ − 1882
+ − 1883
function genPreview($text)
+ − 1884
{
214
+ − 1885
global $lang;
335
67bd3121a12e
Replaced TinyMCE 2.x with 3.0 beta 3. Supports everything but IE. Also rewrote the editor interface completely from the ground up.
Dan
diff
changeset
+ − 1886
$ret = '<div class="info-box">' . $lang->get('editor_preview_blurb') . '</div><div style="background-color: #F8F8F8; padding: 10px; border: 1px dashed #406080; max-height: 250px; overflow: auto; margin: 10px 0;">';
102
+ − 1887
$text = RenderMan::render(RenderMan::preprocess_text($text, false, false));
+ − 1888
ob_start();
+ − 1889
eval('?>' . $text);
+ − 1890
$text = ob_get_contents();
+ − 1891
ob_end_clean();
+ − 1892
$ret .= $text;
+ − 1893
$ret .= '</div>';
+ − 1894
return $ret;
1
+ − 1895
}
+ − 1896
+ − 1897
/**
+ − 1898
* Makes a scrollable box
+ − 1899
* @param string $text the inner HTML
+ − 1900
* @param int $height Optional - the maximum height. Defaults to 250.
+ − 1901
* @return string
+ − 1902
*/
+ − 1903
+ − 1904
function scrollBox($text, $height = 250)
+ − 1905
{
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1906
return '<div style="background-color: #F8F8F8; padding: 10px; border: 1px dashed #406080; max-height: '.(string)intval($height).'px; overflow: auto; margin: 1em 0 1em 1em;">' . $text . '</div>';
1
+ − 1907
}
+ − 1908
+ − 1909
/**
+ − 1910
* Generates a diff summary between two page revisions.
+ − 1911
* @param $page_id the page ID
+ − 1912
* @param $namespace the namespace
+ − 1913
* @param $id1 the time ID of the first revision
+ − 1914
* @param $id2 the time ID of the second revision
+ − 1915
* @return string XHTML-formatted diff
+ − 1916
*/
+ − 1917
+ − 1918
function pagediff($page_id, $namespace, $id1, $id2)
+ − 1919
{
+ − 1920
global $db, $session, $paths, $template, $plugins; // Common objects
213
+ − 1921
global $lang;
1
+ − 1922
if(!$session->get_permissions('history_view'))
214
+ − 1923
return $lang->get('etc_access_denied');
1
+ − 1924
if(!preg_match('#^([0-9]+)$#', (string)$id1) ||
+ − 1925
!preg_match('#^([0-9]+)$#', (string)$id2 )) return 'SQL injection attempt';
+ − 1926
// OK we made it through security
+ − 1927
// Safest way to make sure we don't end up with the revisions in wrong columns is to make 2 queries
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 1928
if(!$q1 = $db->sql_query('SELECT page_text,char_tag,author,edit_summary FROM ' . table_prefix.'logs WHERE time_id=' . $id1 . ' AND log_type=\'page\' AND action=\'edit\' AND page_id=\'' . $page_id . '\' AND namespace=\'' . $namespace . '\';')) return 'MySQL error: '.$db->get_error();
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 1929
if(!$q2 = $db->sql_query('SELECT page_text,char_tag,author,edit_summary FROM ' . table_prefix.'logs WHERE time_id=' . $id2 . ' AND log_type=\'page\' AND action=\'edit\' AND page_id=\'' . $page_id . '\' AND namespace=\'' . $namespace . '\';')) return 'MySQL error: '.$db->get_error();
1
+ − 1930
$row1 = $db->fetchrow($q1);
+ − 1931
$db->free_result($q1);
+ − 1932
$row2 = $db->fetchrow($q2);
+ − 1933
$db->free_result($q2);
+ − 1934
if(sizeof($row1) < 1 || sizeof($row2) < 2) return 'Couldn\'t find any rows that matched the query. The time ID probably doesn\'t exist in the logs table.';
+ − 1935
$text1 = $row1['page_text'];
+ − 1936
$text2 = $row2['page_text'];
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 1937
$time1 = enano_date('F d, Y h:i a', $id1);
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 1938
$time2 = enano_date('F d, Y h:i a', $id2);
1
+ − 1939
$_ob = "
213
+ − 1940
<p>" . $lang->get('history_lbl_comparingrevisions') . " {$time1} → {$time2}</p>
1
+ − 1941
";
+ − 1942
// Free some memory
+ − 1943
unset($row1, $row2, $q1, $q2);
+ − 1944
+ − 1945
$_ob .= RenderMan::diff($text1, $text2);
+ − 1946
return $_ob;
+ − 1947
}
+ − 1948
+ − 1949
/**
+ − 1950
* Gets ACL information about the selected page for target type X and target ID Y.
+ − 1951
* @param array $parms What to select. This is an array purely for JSON compatibility. It should be an associative array with keys target_type and target_id.
+ − 1952
* @return array
+ − 1953
*/
+ − 1954
+ − 1955
function acl_editor($parms = Array())
+ − 1956
{
+ − 1957
global $db, $session, $paths, $template, $plugins; // Common objects
218
+ − 1958
global $lang;
+ − 1959
1
+ − 1960
if(!$session->get_permissions('edit_acl') && $session->user_level < USER_LEVEL_ADMIN)
40
+ − 1961
{
+ − 1962
return Array(
+ − 1963
'mode' => 'error',
218
+ − 1964
'error' => $lang->get('acl_err_access_denied')
40
+ − 1965
);
+ − 1966
}
1
+ − 1967
$parms['page_id'] = ( isset($parms['page_id']) ) ? $parms['page_id'] : false;
+ − 1968
$parms['namespace'] = ( isset($parms['namespace']) ) ? $parms['namespace'] : false;
+ − 1969
$page_id =& $parms['page_id'];
+ − 1970
$namespace =& $parms['namespace'];
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1971
$page_where_clause = ( empty($page_id) || empty($namespace) ) ? 'AND a.page_id IS NULL AND a.namespace IS NULL' : 'AND a.page_id=\'' . $db->escape($page_id) . '\' AND a.namespace=\'' . $db->escape($namespace) . '\'';
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1972
$page_where_clause_lite = ( empty($page_id) || empty($namespace) ) ? 'AND page_id IS NULL AND namespace IS NULL' : 'AND page_id=\'' . $db->escape($page_id) . '\' AND namespace=\'' . $db->escape($namespace) . '\'';
1
+ − 1973
//die(print_r($page_id,true));
+ − 1974
$template->load_theme();
+ − 1975
// $perms_obj = $session->fetch_page_acl($page_id, $namespace);
+ − 1976
$perms_obj =& $session;
+ − 1977
$return = Array();
+ − 1978
if ( !file_exists(ENANO_ROOT . '/themes/' . $session->theme . '/acledit.tpl') )
+ − 1979
{
+ − 1980
return Array(
+ − 1981
'mode' => 'error',
218
+ − 1982
'error' => $lang->get('acl_err_missing_template'),
1
+ − 1983
);
+ − 1984
}
+ − 1985
$return['template'] = $template->extract_vars('acledit.tpl');
+ − 1986
$return['page_id'] = $page_id;
+ − 1987
$return['namespace'] = $namespace;
+ − 1988
if(isset($parms['mode']))
+ − 1989
{
+ − 1990
switch($parms['mode'])
+ − 1991
{
+ − 1992
case 'listgroups':
+ − 1993
$return['groups'] = Array();
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 1994
$q = $db->sql_query('SELECT group_id,group_name FROM ' . table_prefix.'groups ORDER BY group_name ASC;');
1
+ − 1995
while($row = $db->fetchrow())
+ − 1996
{
+ − 1997
$return['groups'][] = Array(
+ − 1998
'id' => $row['group_id'],
+ − 1999
'name' => $row['group_name'],
+ − 2000
);
+ − 2001
}
+ − 2002
$db->free_result();
73
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
diff
changeset
+ − 2003
$return['page_groups'] = Array();
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 2004
$q = $db->sql_query('SELECT pg_id,pg_name FROM ' . table_prefix.'page_groups ORDER BY pg_name ASC;');
73
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
diff
changeset
+ − 2005
if ( !$q )
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
diff
changeset
+ − 2006
return Array(
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
diff
changeset
+ − 2007
'mode' => 'error',
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
diff
changeset
+ − 2008
'error' => $db->get_error()
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
diff
changeset
+ − 2009
);
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
diff
changeset
+ − 2010
while ( $row = $db->fetchrow() )
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
diff
changeset
+ − 2011
{
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
diff
changeset
+ − 2012
$return['page_groups'][] = Array(
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
diff
changeset
+ − 2013
'id' => $row['pg_id'],
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
diff
changeset
+ − 2014
'name' => $row['pg_name']
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
diff
changeset
+ − 2015
);
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
diff
changeset
+ − 2016
}
1
+ − 2017
break;
+ − 2018
case 'seltarget':
+ − 2019
$return['mode'] = 'seltarget';
+ − 2020
$return['acl_types'] = $perms_obj->acl_types;
+ − 2021
$return['acl_deps'] = $perms_obj->acl_deps;
+ − 2022
$return['acl_descs'] = $perms_obj->acl_descs;
+ − 2023
$return['target_type'] = $parms['target_type'];
+ − 2024
$return['target_id'] = $parms['target_id'];
+ − 2025
switch($parms['target_type'])
+ − 2026
{
+ − 2027
case ACL_TYPE_USER:
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 2028
$q = $db->sql_query('SELECT a.rules,u.user_id FROM ' . table_prefix.'users AS u
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 2029
LEFT JOIN ' . table_prefix.'acl AS a
1
+ − 2030
ON a.target_id=u.user_id
+ − 2031
WHERE a.target_type='.ACL_TYPE_USER.'
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 2032
AND u.username=\'' . $db->escape($parms['target_id']) . '\'
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 2033
' . $page_where_clause . ';');
1
+ − 2034
if(!$q)
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 2035
return(Array('mode'=>'error','error'=>$db->get_error()));
1
+ − 2036
if($db->numrows() < 1)
+ − 2037
{
+ − 2038
$return['type'] = 'new';
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 2039
$q = $db->sql_query('SELECT user_id FROM ' . table_prefix.'users WHERE username=\'' . $db->escape($parms['target_id']) . '\';');
1
+ − 2040
if(!$q)
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 2041
return(Array('mode'=>'error','error'=>$db->get_error()));
1
+ − 2042
if($db->numrows() < 1)
218
+ − 2043
return Array('mode'=>'error','error'=>$lang->get('acl_err_user_not_found'));
1
+ − 2044
$row = $db->fetchrow();
+ − 2045
$return['target_name'] = $return['target_id'];
+ − 2046
$return['target_id'] = intval($row['user_id']);
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 2047
$return['current_perms'] = array();
1
+ − 2048
}
+ − 2049
else
+ − 2050
{
+ − 2051
$return['type'] = 'edit';
+ − 2052
$row = $db->fetchrow();
+ − 2053
$return['target_name'] = $return['target_id'];
+ − 2054
$return['target_id'] = intval($row['user_id']);
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 2055
$return['current_perms'] = $session->string_to_perm($row['rules']);
1
+ − 2056
}
+ − 2057
$db->free_result();
+ − 2058
// Eliminate types that don't apply to this namespace
73
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
diff
changeset
+ − 2059
if ( $namespace && $namespace != '__PageGroup' )
1
+ − 2060
{
+ − 2061
foreach ( $return['current_perms'] AS $i => $perm )
+ − 2062
{
+ − 2063
if ( ( $page_id != null && $namespace != null ) && ( !in_array ( $namespace, $session->acl_scope[$i] ) && !in_array('All', $session->acl_scope[$i]) ) )
+ − 2064
{
+ − 2065
// echo "// SCOPE CONTROL: eliminating: $i\n";
+ − 2066
unset($return['current_perms'][$i]);
+ − 2067
unset($return['acl_types'][$i]);
+ − 2068
unset($return['acl_descs'][$i]);
+ − 2069
unset($return['acl_deps'][$i]);
+ − 2070
}
+ − 2071
}
+ − 2072
}
+ − 2073
break;
+ − 2074
case ACL_TYPE_GROUP:
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 2075
$q = $db->sql_query('SELECT a.rules,g.group_name,g.group_id FROM ' . table_prefix.'groups AS g
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 2076
LEFT JOIN ' . table_prefix.'acl AS a
1
+ − 2077
ON a.target_id=g.group_id
+ − 2078
WHERE a.target_type='.ACL_TYPE_GROUP.'
+ − 2079
AND g.group_id=\''.intval($parms['target_id']).'\'
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 2080
' . $page_where_clause . ';');
1
+ − 2081
if(!$q)
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 2082
return(Array('mode'=>'error','error'=>$db->get_error()));
1
+ − 2083
if($db->numrows() < 1)
+ − 2084
{
+ − 2085
$return['type'] = 'new';
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 2086
$q = $db->sql_query('SELECT group_id,group_name FROM ' . table_prefix.'groups WHERE group_id=\''.intval($parms['target_id']).'\';');
1
+ − 2087
if(!$q)
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 2088
return(Array('mode'=>'error','error'=>$db->get_error()));
1
+ − 2089
if($db->numrows() < 1)
218
+ − 2090
return Array('mode'=>'error','error'=>$lang->get('acl_err_bad_group_id'));
1
+ − 2091
$row = $db->fetchrow();
+ − 2092
$return['target_name'] = $row['group_name'];
+ − 2093
$return['target_id'] = intval($row['group_id']);
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 2094
$return['current_perms'] = array();
1
+ − 2095
}
+ − 2096
else
+ − 2097
{
+ − 2098
$return['type'] = 'edit';
+ − 2099
$row = $db->fetchrow();
+ − 2100
$return['target_name'] = $row['group_name'];
+ − 2101
$return['target_id'] = intval($row['group_id']);
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 2102
$return['current_perms'] = $session->string_to_perm($row['rules']);
1
+ − 2103
}
+ − 2104
$db->free_result();
+ − 2105
// Eliminate types that don't apply to this namespace
73
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
diff
changeset
+ − 2106
if ( $namespace && $namespace != '__PageGroup' )
1
+ − 2107
{
+ − 2108
foreach ( $return['current_perms'] AS $i => $perm )
+ − 2109
{
+ − 2110
if ( ( $page_id != false && $namespace != false ) && ( !in_array ( $namespace, $session->acl_scope[$i] ) && !in_array('All', $session->acl_scope[$i]) ) )
+ − 2111
{
+ − 2112
// echo "// SCOPE CONTROL: eliminating: $i\n"; //; ".print_r($namespace,true).":".print_r($page_id,true)."\n";
+ − 2113
unset($return['current_perms'][$i]);
+ − 2114
unset($return['acl_types'][$i]);
+ − 2115
unset($return['acl_descs'][$i]);
+ − 2116
unset($return['acl_deps'][$i]);
+ − 2117
}
+ − 2118
}
+ − 2119
}
+ − 2120
//return Array('mode'=>'debug','text'=>print_r($return, true));
+ − 2121
break;
+ − 2122
default:
+ − 2123
return Array('mode'=>'error','error','Invalid ACL type ID');
+ − 2124
break;
+ − 2125
}
+ − 2126
return $return;
+ − 2127
break;
+ − 2128
case 'save_new':
+ − 2129
case 'save_edit':
19
5d003b6c9e89
Added demo mode functionality to various parts of Enano (unlocked only with a plugin) and fixed groups table
Dan
diff
changeset
+ − 2130
if ( defined('ENANO_DEMO_MODE') )
5d003b6c9e89
Added demo mode functionality to various parts of Enano (unlocked only with a plugin) and fixed groups table
Dan
diff
changeset
+ − 2131
{
218
+ − 2132
return Array('mode'=>'error','error'=>$lang->get('acl_err_demo'));
19
5d003b6c9e89
Added demo mode functionality to various parts of Enano (unlocked only with a plugin) and fixed groups table
Dan
diff
changeset
+ − 2133
}
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 2134
$q = $db->sql_query('DELETE FROM ' . table_prefix.'acl WHERE target_type='.intval($parms['target_type']).' AND target_id='.intval($parms['target_id']).'
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 2135
' . $page_where_clause_lite . ';');
1
+ − 2136
if(!$q)
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 2137
return Array('mode'=>'error','error'=>$db->get_error());
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 2138
if ( sizeof ( $parms['perms'] ) < 1 )
1
+ − 2139
{
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 2140
// As of 1.1.x, this returns success because the rule length is zero if the user selected "inherit" in all columns
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 2141
return Array(
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 2142
'mode' => 'success',
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 2143
'target_type' => $parms['target_type'],
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 2144
'target_id' => $parms['target_id'],
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 2145
'target_name' => $parms['target_name'],
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 2146
'page_id' => $page_id,
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 2147
'namespace' => $namespace,
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 2148
);
1
+ − 2149
}
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 2150
$rules = $session->perm_to_string($parms['perms']);
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 2151
$q = ($page_id && $namespace) ? 'INSERT INTO ' . table_prefix.'acl ( target_type, target_id, page_id, namespace, rules )
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 2152
VALUES( '.intval($parms['target_type']).', '.intval($parms['target_id']).', \'' . $db->escape($page_id) . '\', \'' . $db->escape($namespace) . '\', \'' . $db->escape($rules) . '\' )' :
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 2153
'INSERT INTO ' . table_prefix.'acl ( target_type, target_id, rules )
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 2154
VALUES( '.intval($parms['target_type']).', '.intval($parms['target_id']).', \'' . $db->escape($rules) . '\' )';
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 2155
if(!$db->sql_query($q)) return Array('mode'=>'error','error'=>$db->get_error());
1
+ − 2156
return Array(
+ − 2157
'mode' => 'success',
+ − 2158
'target_type' => $parms['target_type'],
+ − 2159
'target_id' => $parms['target_id'],
+ − 2160
'target_name' => $parms['target_name'],
+ − 2161
'page_id' => $page_id,
+ − 2162
'namespace' => $namespace,
+ − 2163
);
+ − 2164
break;
+ − 2165
case 'delete':
19
5d003b6c9e89
Added demo mode functionality to various parts of Enano (unlocked only with a plugin) and fixed groups table
Dan
diff
changeset
+ − 2166
if ( defined('ENANO_DEMO_MODE') )
5d003b6c9e89
Added demo mode functionality to various parts of Enano (unlocked only with a plugin) and fixed groups table
Dan
diff
changeset
+ − 2167
{
218
+ − 2168
return Array('mode'=>'error','error'=>$lang->get('acl_err_demo'));
19
5d003b6c9e89
Added demo mode functionality to various parts of Enano (unlocked only with a plugin) and fixed groups table
Dan
diff
changeset
+ − 2169
}
194
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 2170
$q = $db->sql_query('DELETE FROM ' . table_prefix.'acl WHERE target_type='.intval($parms['target_type']).' AND target_id='.intval($parms['target_id']).'
bf0fdec102e9
SECURITY: Fixed possible SQL injection in PageUtils page protection; general cleanup of PageUtils; blocked using Project: prefix for page URL strings
Dan
diff
changeset
+ − 2171
' . $page_where_clause_lite . ';');
1
+ − 2172
if(!$q)
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 2173
return Array('mode'=>'error','error'=>$db->get_error());
1
+ − 2174
return Array(
+ − 2175
'mode' => 'delete',
+ − 2176
'target_type' => $parms['target_type'],
+ − 2177
'target_id' => $parms['target_id'],
+ − 2178
'target_name' => $parms['target_name'],
+ − 2179
'page_id' => $page_id,
+ − 2180
'namespace' => $namespace,
+ − 2181
);
+ − 2182
break;
+ − 2183
default:
+ − 2184
return Array('mode'=>'error','error'=>'Hacking attempt');
+ − 2185
break;
+ − 2186
}
+ − 2187
}
+ − 2188
return $return;
+ − 2189
}
+ − 2190
+ − 2191
/**
+ − 2192
* Same as PageUtils::acl_editor(), but the parms are a JSON string instead of an array. This also returns a JSON string.
+ − 2193
* @param string $parms Same as PageUtils::acl_editor/$parms, but should be a valid JSON string.
+ − 2194
* @return string
+ − 2195
*/
+ − 2196
+ − 2197
function acl_json($parms = '{ }')
+ − 2198
{
+ − 2199
global $db, $session, $paths, $template, $plugins; // Common objects
334
c72b545f1304
More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
diff
changeset
+ − 2200
$parms = enano_json_decode($parms);
1
+ − 2201
$ret = PageUtils::acl_editor($parms);
334
c72b545f1304
More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
diff
changeset
+ − 2202
$ret = enano_json_encode($ret);
1
+ − 2203
return $ret;
+ − 2204
}
+ − 2205
+ − 2206
/**
+ − 2207
* A non-Javascript frontend for the ACL API.
+ − 2208
* @param array The request data, if any, this should be in the format required by PageUtils::acl_editor()
+ − 2209
*/
+ − 2210
+ − 2211
function aclmanager($parms)
+ − 2212
{
+ − 2213
global $db, $session, $paths, $template, $plugins; // Common objects
219
+ − 2214
global $lang;
1
+ − 2215
ob_start();
+ − 2216
// Convenience
+ − 2217
$formstart = '<form
+ − 2218
action="' . makeUrl($paths->page, 'do=aclmanager', true) . '"
+ − 2219
method="post" enctype="multipart/form-data"
+ − 2220
onsubmit="if(!submitAuthorized) return false;"
+ − 2221
>';
+ − 2222
$formend = '</form>';
+ − 2223
$parms = PageUtils::acl_preprocess($parms);
+ − 2224
$response = PageUtils::acl_editor($parms);
+ − 2225
$response = PageUtils::acl_postprocess($response);
+ − 2226
+ − 2227
//die('<pre>' . htmlspecialchars(print_r($response, true)) . '</pre>');
+ − 2228
+ − 2229
switch($response['mode'])
+ − 2230
{
+ − 2231
case 'debug':
+ − 2232
echo '<pre>' . htmlspecialchars($response['text']) . '</pre>';
+ − 2233
break;
+ − 2234
case 'stage1':
219
+ − 2235
echo '<h3>' . $lang->get('acl_lbl_welcome_title') . '</h3>
+ − 2236
<p>' . $lang->get('acl_lbl_welcome_body') . '</p>';
1
+ − 2237
echo $formstart;
219
+ − 2238
echo '<p><label><input type="radio" name="data[target_type]" value="' . ACL_TYPE_GROUP . '" checked="checked" /> ' . $lang->get('acl_radio_usergroup') . '</label></p>
1
+ − 2239
<p><select name="data[target_id_grp]">';
+ − 2240
foreach ( $response['groups'] as $group )
+ − 2241
{
+ − 2242
echo '<option value="' . $group['id'] . '">' . $group['name'] . '</option>';
+ − 2243
}
219
+ − 2244
103
a8891e108c95
Several major improvements: Memberlist page added (planned since about beta 2), page group support added for non-JS ACL editor (oops!), and attempting to view a page for which you lack read permissions will get you logged.
Dan
diff
changeset
+ − 2245
// page group selector
a8891e108c95
Several major improvements: Memberlist page added (planned since about beta 2), page group support added for non-JS ACL editor (oops!), and attempting to view a page for which you lack read permissions will get you logged.
Dan
diff
changeset
+ − 2246
$groupsel = '';
a8891e108c95
Several major improvements: Memberlist page added (planned since about beta 2), page group support added for non-JS ACL editor (oops!), and attempting to view a page for which you lack read permissions will get you logged.
Dan
diff
changeset
+ − 2247
if ( count($response['page_groups']) > 0 )
a8891e108c95
Several major improvements: Memberlist page added (planned since about beta 2), page group support added for non-JS ACL editor (oops!), and attempting to view a page for which you lack read permissions will get you logged.
Dan
diff
changeset
+ − 2248
{
219
+ − 2249
$groupsel = '<p><label><input type="radio" name="data[scope]" value="page_group" /> ' . $lang->get('acl_radio_scope_pagegroup') . '</label></p>
103
a8891e108c95
Several major improvements: Memberlist page added (planned since about beta 2), page group support added for non-JS ACL editor (oops!), and attempting to view a page for which you lack read permissions will get you logged.
Dan
diff
changeset
+ − 2250
<p><select name="data[pg_id]">';
a8891e108c95
Several major improvements: Memberlist page added (planned since about beta 2), page group support added for non-JS ACL editor (oops!), and attempting to view a page for which you lack read permissions will get you logged.
Dan
diff
changeset
+ − 2251
foreach ( $response['page_groups'] as $grp )
a8891e108c95
Several major improvements: Memberlist page added (planned since about beta 2), page group support added for non-JS ACL editor (oops!), and attempting to view a page for which you lack read permissions will get you logged.
Dan
diff
changeset
+ − 2252
{
a8891e108c95
Several major improvements: Memberlist page added (planned since about beta 2), page group support added for non-JS ACL editor (oops!), and attempting to view a page for which you lack read permissions will get you logged.
Dan
diff
changeset
+ − 2253
$groupsel .= '<option value="' . $grp['id'] . '">' . htmlspecialchars($grp['name']) . '</option>';
a8891e108c95
Several major improvements: Memberlist page added (planned since about beta 2), page group support added for non-JS ACL editor (oops!), and attempting to view a page for which you lack read permissions will get you logged.
Dan
diff
changeset
+ − 2254
}
a8891e108c95
Several major improvements: Memberlist page added (planned since about beta 2), page group support added for non-JS ACL editor (oops!), and attempting to view a page for which you lack read permissions will get you logged.
Dan
diff
changeset
+ − 2255
$groupsel .= '</select></p>';
a8891e108c95
Several major improvements: Memberlist page added (planned since about beta 2), page group support added for non-JS ACL editor (oops!), and attempting to view a page for which you lack read permissions will get you logged.
Dan
diff
changeset
+ − 2256
}
a8891e108c95
Several major improvements: Memberlist page added (planned since about beta 2), page group support added for non-JS ACL editor (oops!), and attempting to view a page for which you lack read permissions will get you logged.
Dan
diff
changeset
+ − 2257
1
+ − 2258
echo '</select></p>
219
+ − 2259
<p><label><input type="radio" name="data[target_type]" value="' . ACL_TYPE_USER . '" /> ' . $lang->get('acl_radio_user') . '</label></p>
1
+ − 2260
<p>' . $template->username_field('data[target_id_user]') . '</p>
219
+ − 2261
<p>' . $lang->get('acl_lbl_scope') . '</p>
+ − 2262
<p><label><input name="data[scope]" value="only_this" type="radio" checked="checked" /> ' . $lang->get('acl_radio_scope_thispage') . '</p>
103
a8891e108c95
Several major improvements: Memberlist page added (planned since about beta 2), page group support added for non-JS ACL editor (oops!), and attempting to view a page for which you lack read permissions will get you logged.
Dan
diff
changeset
+ − 2263
' . $groupsel . '
219
+ − 2264
<p><label><input name="data[scope]" value="entire_site" type="radio" /> ' . $lang->get('acl_radio_scope_wholesite') . '</p>
1
+ − 2265
<div style="margin: 0 auto 0 0; text-align: right;">
+ − 2266
<input name="data[mode]" value="seltarget" type="hidden" />
322
+ − 2267
<input type="hidden" name="data[page_id]" value="' . $paths->page_id . '" />
1
+ − 2268
<input type="hidden" name="data[namespace]" value="' . $paths->namespace . '" />
219
+ − 2269
<input type="submit" value="' . htmlspecialchars($lang->get('etc_wizard_next')) . '" />
1
+ − 2270
</div>';
+ − 2271
echo $formend;
+ − 2272
break;
+ − 2273
case 'success':
+ − 2274
echo '<div class="info-box">
219
+ − 2275
<b>' . $lang->get('acl_lbl_save_success_title') . '</b><br />
+ − 2276
' . $lang->get('acl_lbl_save_success_body', array( 'target_name' => $response['target_name'] )) . '<br />
1
+ − 2277
' . $formstart . '
+ − 2278
<input type="hidden" name="data[mode]" value="seltarget" />
+ − 2279
<input type="hidden" name="data[target_type]" value="' . $response['target_type'] . '" />
+ − 2280
<input type="hidden" name="data[target_id_user]" value="' . ( ( intval($response['target_type']) == ACL_TYPE_USER ) ? $response['target_name'] : $response['target_id'] ) .'" />
+ − 2281
<input type="hidden" name="data[target_id_grp]" value="' . ( ( intval($response['target_type']) == ACL_TYPE_USER ) ? $response['target_name'] : $response['target_id'] ) .'" />
+ − 2282
<input type="hidden" name="data[scope]" value="' . ( ( $response['page_id'] ) ? 'only_this' : 'entire_site' ) . '" />
+ − 2283
<input type="hidden" name="data[page_id]" value="' . ( ( $response['page_id'] ) ? $response['page_id'] : 'false' ) . '" />
+ − 2284
<input type="hidden" name="data[namespace]" value="' . ( ( $response['namespace'] ) ? $response['namespace'] : 'false' ) . '" />
219
+ − 2285
<input type="submit" value="' . $lang->get('acl_btn_returnto_editor') . '" /> <input type="submit" name="data[act_go_stage1]" value="' . $lang->get('acl_btn_returnto_userscope') . '" />
1
+ − 2286
' . $formend . '
+ − 2287
</div>';
+ − 2288
break;
+ − 2289
case 'delete':
+ − 2290
echo '<div class="info-box">
219
+ − 2291
<b>' . $lang->get('acl_lbl_delete_success_title') . '</b><br />
+ − 2292
' . $lang->get('acl_lbl_delete_success_body', array('target_name' => $response['target_name'])) . '<br />
1
+ − 2293
' . $formstart . '
+ − 2294
<input type="hidden" name="data[mode]" value="seltarget" />
+ − 2295
<input type="hidden" name="data[target_type]" value="' . $response['target_type'] . '" />
+ − 2296
<input type="hidden" name="data[target_id_user]" value="' . ( ( intval($response['target_type']) == ACL_TYPE_USER ) ? $response['target_name'] : $response['target_id'] ) .'" />
+ − 2297
<input type="hidden" name="data[target_id_grp]" value="' . ( ( intval($response['target_type']) == ACL_TYPE_USER ) ? $response['target_name'] : $response['target_id'] ) .'" />
+ − 2298
<input type="hidden" name="data[scope]" value="' . ( ( $response['page_id'] ) ? 'only_this' : 'entire_site' ) . '" />
+ − 2299
<input type="hidden" name="data[page_id]" value="' . ( ( $response['page_id'] ) ? $response['page_id'] : 'false' ) . '" />
+ − 2300
<input type="hidden" name="data[namespace]" value="' . ( ( $response['namespace'] ) ? $response['namespace'] : 'false' ) . '" />
219
+ − 2301
<input type="submit" value="' . $lang->get('acl_btn_returnto_editor') . '" /> <input type="submit" name="data[act_go_stage1]" value="' . $lang->get('acl_btn_returnto_userscope') . '" />
1
+ − 2302
' . $formend . '
+ − 2303
</div>';
+ − 2304
break;
+ − 2305
case 'seltarget':
+ − 2306
if ( $response['type'] == 'edit' )
+ − 2307
{
219
+ − 2308
echo '<h3>' . $lang->get('acl_lbl_editwin_title_edit') . '</h3>';
1
+ − 2309
}
+ − 2310
else
+ − 2311
{
219
+ − 2312
echo '<h3>' . $lang->get('acl_lbl_editwin_title_create') . '</h3>';
1
+ − 2313
}
219
+ − 2314
$type = ( $response['target_type'] == ACL_TYPE_GROUP ) ? $lang->get('acl_target_type_group') : $lang->get('acl_target_type_user');
+ − 2315
$scope = ( $response['page_id'] ) ? ( $response['namespace'] == '__PageGroup' ? $lang->get('acl_scope_type_pagegroup') : $lang->get('acl_scope_type_thispage') ) : $lang->get('acl_scope_type_wholesite');
+ − 2316
$subs = array(
+ − 2317
'target_type' => $type,
+ − 2318
'target' => $response['target_name'],
+ − 2319
'scope_type' => $scope
+ − 2320
);
+ − 2321
echo $lang->get('acl_lbl_editwin_body', $subs);
1
+ − 2322
echo $formstart;
+ − 2323
$parser = $template->makeParserText( $response['template']['acl_field_begin'] );
+ − 2324
echo $parser->run();
+ − 2325
$parser = $template->makeParserText( $response['template']['acl_field_item'] );
+ − 2326
$cls = 'row2';
+ − 2327
foreach ( $response['acl_types'] as $acl_type => $value )
+ − 2328
{
+ − 2329
$vars = Array(
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 2330
'FIELD_INHERIT_CHECKED' => '',
1
+ − 2331
'FIELD_DENY_CHECKED' => '',
+ − 2332
'FIELD_DISALLOW_CHECKED' => '',
+ − 2333
'FIELD_WIKIMODE_CHECKED' => '',
+ − 2334
'FIELD_ALLOW_CHECKED' => '',
+ − 2335
);
+ − 2336
$cls = ( $cls == 'row1' ) ? 'row2' : 'row1';
+ − 2337
$vars['ROW_CLASS'] = $cls;
+ − 2338
+ − 2339
switch ( $response['current_perms'][$acl_type] )
+ − 2340
{
345
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 2341
case 'i':
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 2342
default:
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 2343
$vars['FIELD_INHERIT_CHECKED'] = 'checked="checked"';
4ccdfeee9a11
WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
diff
changeset
+ − 2344
break;
1
+ − 2345
case AUTH_ALLOW:
+ − 2346
$vars['FIELD_ALLOW_CHECKED'] = 'checked="checked"';
+ − 2347
break;
+ − 2348
case AUTH_WIKIMODE:
+ − 2349
$vars['FIELD_WIKIMODE_CHECKED'] = 'checked="checked"';
+ − 2350
break;
+ − 2351
case AUTH_DISALLOW:
+ − 2352
$vars['FIELD_DISALLOW_CHECKED'] = 'checked="checked"';
+ − 2353
break;
+ − 2354
case AUTH_DENY:
+ − 2355
$vars['FIELD_DENY_CHECKED'] = 'checked="checked"';
+ − 2356
break;
+ − 2357
}
+ − 2358
$vars['FIELD_NAME'] = 'data[perms][' . $acl_type . ']';
219
+ − 2359
if ( preg_match('/^([a-z0-9_]+)$/', $response['acl_descs'][$acl_type]) )
+ − 2360
{
+ − 2361
$vars['FIELD_DESC'] = $lang->get($response['acl_descs'][$acl_type]);
+ − 2362
}
+ − 2363
else
+ − 2364
{
+ − 2365
$vars['FIELD_DESC'] = $response['acl_descs'][$acl_type];
+ − 2366
}
1
+ − 2367
$parser->assign_vars($vars);
+ − 2368
echo $parser->run();
+ − 2369
}
+ − 2370
$parser = $template->makeParserText( $response['template']['acl_field_end'] );
+ − 2371
echo $parser->run();
+ − 2372
echo '<div style="margin: 10px auto 0 0; text-align: right;">
+ − 2373
<input name="data[mode]" value="save_' . $response['type'] . '" type="hidden" />
+ − 2374
<input type="hidden" name="data[page_id]" value="' . (( $response['page_id'] ) ? $response['page_id'] : 'false') . '" />
+ − 2375
<input type="hidden" name="data[namespace]" value="' . (( $response['namespace'] ) ? $response['namespace'] : 'false') . '" />
+ − 2376
<input type="hidden" name="data[target_type]" value="' . $response['target_type'] . '" />
+ − 2377
<input type="hidden" name="data[target_id]" value="' . $response['target_id'] . '" />
+ − 2378
<input type="hidden" name="data[target_name]" value="' . $response['target_name'] . '" />
219
+ − 2379
' . ( ( $response['type'] == 'edit' ) ? '<input type="submit" value="' . $lang->get('etc_save_changes') . '" /> <input type="submit" name="data[act_delete_rule]" value="' . $lang->get('acl_btn_deleterule') . '" style="color: #AA0000;" onclick="return confirm(\'' . addslashes($lang->get('acl_msg_deleterule_confirm')) . '\');" />' : '<input type="submit" value="' . $lang->get('acl_btn_createrule') . '" />' ) . '
1
+ − 2380
</div>';
+ − 2381
echo $formend;
+ − 2382
break;
+ − 2383
case 'error':
+ − 2384
ob_end_clean();
+ − 2385
die_friendly('Error occurred', '<p>Error returned by permissions API:</p><pre>' . htmlspecialchars($response['error']) . '</pre>');
+ − 2386
break;
+ − 2387
}
+ − 2388
$ret = ob_get_contents();
+ − 2389
ob_end_clean();
+ − 2390
echo
+ − 2391
$template->getHeader() .
+ − 2392
$ret .
+ − 2393
$template->getFooter();
+ − 2394
}
+ − 2395
+ − 2396
/**
+ − 2397
* Preprocessor to turn the form-submitted data from the ACL editor into something the backend can handle
+ − 2398
* @param array The posted data
+ − 2399
* @return array
+ − 2400
* @access private
+ − 2401
*/
+ − 2402
+ − 2403
function acl_preprocess($parms)
+ − 2404
{
+ − 2405
if ( !isset($parms['mode']) )
+ − 2406
// Nothing to do
+ − 2407
return $parms;
+ − 2408
switch ( $parms['mode'] )
+ − 2409
{
+ − 2410
case 'seltarget':
+ − 2411
+ − 2412
// Who's affected?
+ − 2413
$parms['target_type'] = intval( $parms['target_type'] );
+ − 2414
$parms['target_id'] = ( $parms['target_type'] == ACL_TYPE_GROUP ) ? $parms['target_id_grp'] : $parms['target_id_user'];
+ − 2415
+ − 2416
case 'save_edit':
+ − 2417
case 'save_new':
+ − 2418
if ( isset($parms['act_delete_rule']) )
+ − 2419
{
+ − 2420
$parms['mode'] = 'delete';
+ − 2421
}
+ − 2422
+ − 2423
// Scope (just this page or entire site?)
+ − 2424
if ( $parms['scope'] == 'entire_site' || ( $parms['page_id'] == 'false' && $parms['namespace'] == 'false' ) )
+ − 2425
{
+ − 2426
$parms['page_id'] = false;
+ − 2427
$parms['namespace'] = false;
+ − 2428
}
103
a8891e108c95
Several major improvements: Memberlist page added (planned since about beta 2), page group support added for non-JS ACL editor (oops!), and attempting to view a page for which you lack read permissions will get you logged.
Dan
diff
changeset
+ − 2429
else if ( $parms['scope'] == 'page_group' )
a8891e108c95
Several major improvements: Memberlist page added (planned since about beta 2), page group support added for non-JS ACL editor (oops!), and attempting to view a page for which you lack read permissions will get you logged.
Dan
diff
changeset
+ − 2430
{
a8891e108c95
Several major improvements: Memberlist page added (planned since about beta 2), page group support added for non-JS ACL editor (oops!), and attempting to view a page for which you lack read permissions will get you logged.
Dan
diff
changeset
+ − 2431
$parms['page_id'] = $parms['pg_id'];
a8891e108c95
Several major improvements: Memberlist page added (planned since about beta 2), page group support added for non-JS ACL editor (oops!), and attempting to view a page for which you lack read permissions will get you logged.
Dan
diff
changeset
+ − 2432
$parms['namespace'] = '__PageGroup';
a8891e108c95
Several major improvements: Memberlist page added (planned since about beta 2), page group support added for non-JS ACL editor (oops!), and attempting to view a page for which you lack read permissions will get you logged.
Dan
diff
changeset
+ − 2433
}
1
+ − 2434
+ − 2435
break;
+ − 2436
}
+ − 2437
+ − 2438
if ( isset($parms['act_go_stage1']) )
+ − 2439
{
+ − 2440
$parms = array(
+ − 2441
'mode' => 'listgroups'
+ − 2442
);
+ − 2443
}
+ − 2444
+ − 2445
return $parms;
+ − 2446
}
+ − 2447
+ − 2448
function acl_postprocess($response)
+ − 2449
{
+ − 2450
if(!isset($response['mode']))
+ − 2451
{
+ − 2452
if ( isset($response['groups']) )
+ − 2453
$response['mode'] = 'stage1';
+ − 2454
else
+ − 2455
$response = Array(
+ − 2456
'mode' => 'error',
+ − 2457
'error' => 'Invalid action passed by API backend.',
+ − 2458
);
+ − 2459
}
+ − 2460
return $response;
+ − 2461
}
+ − 2462
+ − 2463
}
+ − 2464
+ − 2465
?>