1
+ − 1
<?php
+ − 2
+ − 3
/*
+ − 4
* Enano - an open-source CMS capable of wiki functions, Drupal-like sidebar blocks, and everything in between
142
ca9118d9c0f2
Rebrand as 1.0.2 (Coblynau); internal links are now parsed by RenderMan::parse_internal_links()
Dan
diff
changeset
+ − 5
* Version 1.0.2 (Coblynau)
1
+ − 6
* Copyright (C) 2006-2007 Dan Fuhry
+ − 7
*
+ − 8
* This program is Free Software; you can redistribute and/or modify it under the terms of the GNU General Public License
+ − 9
* as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
+ − 10
*
+ − 11
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ − 12
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for details.
+ − 13
*/
22
+ − 14
+ − 15
/**
+ − 16
* Fetch a value from the site configuration.
+ − 17
* @param string The identifier of the value ("site_name" etc.)
+ − 18
* @return string Configuration value, or bool(false) if the value is not set
+ − 19
*/
+ − 20
+ − 21
function getConfig($n)
+ − 22
{
1
+ − 23
global $enano_config;
22
+ − 24
if ( isset( $enano_config[ $n ] ) )
+ − 25
{
+ − 26
return $enano_config[$n];
+ − 27
}
+ − 28
else
+ − 29
{
+ − 30
return false;
+ − 31
}
1
+ − 32
}
+ − 33
22
+ − 34
/**
+ − 35
* Update or change a configuration value.
+ − 36
* @param string The identifier of the value ("site_name" etc.)
+ − 37
* @param string The new value
+ − 38
* @return null
+ − 39
*/
+ − 40
+ − 41
function setConfig($n, $v)
+ − 42
{
76
+ − 43
1
+ − 44
global $enano_config, $db;
+ − 45
$enano_config[$n] = $v;
+ − 46
$v = $db->escape($v);
76
+ − 47
22
+ − 48
$e = $db->sql_query('DELETE FROM '.table_prefix.'config WHERE config_name=\''.$n.'\';');
+ − 49
if ( !$e )
+ − 50
{
+ − 51
$db->_die('Error during generic setConfig() call row deletion.');
+ − 52
}
76
+ − 53
22
+ − 54
$e = $db->sql_query('INSERT INTO '.table_prefix.'config(config_name, config_value) VALUES(\''.$n.'\', \''.$v.'\')');
+ − 55
if ( !$e )
+ − 56
{
+ − 57
$db->_die('Error during generic setConfig() call row insertion.');
+ − 58
}
1
+ − 59
}
+ − 60
22
+ − 61
/**
+ − 62
* Create a URI for an internal link.
+ − 63
* @param string The full identifier of the page to link to (Special:Administration)
+ − 64
* @param string The GET query string to append
+ − 65
* @param bool If true, perform htmlspecialchars() on the return value to make it HTML-safe
+ − 66
* @return string
+ − 67
*/
+ − 68
1
+ − 69
function makeUrl($t, $query = false, $escape = false)
+ − 70
{
+ − 71
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 72
$flags = '';
+ − 73
$sep = urlSeparator;
91
+ − 74
$t = sanitize_page_id($t);
22
+ − 75
if ( isset($_GET['printable'] ) )
+ − 76
{
+ − 77
$flags .= $sep . 'printable=yes';
+ − 78
$sep = '&';
+ − 79
}
+ − 80
if ( isset($_GET['theme'] ) )
+ − 81
{
+ − 82
$flags .= $sep . 'theme='.$session->theme;
+ − 83
$sep = '&';
+ − 84
}
+ − 85
if ( isset($_GET['style'] ) ) {
76
+ − 86
$flags .= $sep . 'style='.$session->style;
22
+ − 87
$sep = '&';
+ − 88
}
76
+ − 89
1
+ − 90
$url = $session->append_sid(contentPath.$t.$flags);
+ − 91
if($query)
+ − 92
{
+ − 93
$sep = strstr($url, '?') ? '&' : '?';
+ − 94
$url = $url . $sep . $query;
+ − 95
}
76
+ − 96
1
+ − 97
return ($escape) ? htmlspecialchars($url) : $url;
+ − 98
}
+ − 99
22
+ − 100
/**
+ − 101
* Create a URI for an internal link, and be namespace-friendly. Watch out for this one because it's different from most other Enano functions, in that the namespace is the first parameter.
+ − 102
* @param string The namespace ID
+ − 103
* @param string The page ID
+ − 104
* @param string The GET query string to append
+ − 105
* @param bool If true, perform htmlspecialchars() on the return value to make it HTML-safe
+ − 106
* @return string
+ − 107
*/
+ − 108
1
+ − 109
function makeUrlNS($n, $t, $query = false, $escape = false)
+ − 110
{
+ − 111
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 112
$flags = '';
76
+ − 113
1
+ − 114
if(defined('ENANO_BASE_CLASSES_INITIALIZED'))
+ − 115
{
22
+ − 116
$sep = urlSeparator;
1
+ − 117
}
+ − 118
else
+ − 119
{
22
+ − 120
$sep = (strstr($_SERVER['REQUEST_URI'], '?')) ? '&' : '?';
+ − 121
}
+ − 122
if ( isset( $_GET['printable'] ) ) {
+ − 123
$flags .= $sep . 'printable';
+ − 124
$sep = '&';
+ − 125
}
76
+ − 126
if ( isset( $_GET['theme'] ) )
22
+ − 127
{
+ − 128
$flags .= $sep . 'theme='.$session->theme;
+ − 129
$sep = '&';
+ − 130
}
+ − 131
if ( isset( $_GET['style'] ) )
+ − 132
{
+ − 133
$flags .= $sep . 'style='.$session->style;
+ − 134
$sep = '&';
+ − 135
}
76
+ − 136
22
+ − 137
if(defined('ENANO_BASE_CLASSES_INITIALIZED'))
+ − 138
{
+ − 139
$url = contentPath . $paths->nslist[$n] . $t . $flags;
+ − 140
}
+ − 141
else
+ − 142
{
+ − 143
// If the path manager hasn't been initted yet, take an educated guess at what the URI should be
+ − 144
$url = contentPath . $n . ':' . $t . $flags;
1
+ − 145
}
76
+ − 146
1
+ − 147
if($query)
+ − 148
{
76
+ − 149
if(strstr($url, '?'))
22
+ − 150
{
+ − 151
$sep = '&';
+ − 152
}
+ − 153
else
+ − 154
{
+ − 155
$sep = '?';
+ − 156
}
1
+ − 157
$url = $url . $sep . $query . $flags;
+ − 158
}
76
+ − 159
1
+ − 160
if(defined('ENANO_BASE_CLASSES_INITIALIZED'))
+ − 161
{
+ − 162
$url = $session->append_sid($url);
+ − 163
}
76
+ − 164
1
+ − 165
return ($escape) ? htmlspecialchars($url) : $url;
+ − 166
}
+ − 167
22
+ − 168
/**
+ − 169
* Create a URI for an internal link, be namespace-friendly, and add http://hostname/scriptpath to the beginning if possible. Watch out for this one because it's different from most other Enano functions, in that the namespace is the first parameter.
+ − 170
* @param string The namespace ID
+ − 171
* @param string The page ID
+ − 172
* @param string The GET query string to append
+ − 173
* @param bool If true, perform htmlspecialchars() on the return value to make it HTML-safe
+ − 174
* @return string
+ − 175
*/
+ − 176
1
+ − 177
function makeUrlComplete($n, $t, $query = false, $escape = false)
+ − 178
{
+ − 179
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 180
$flags = '';
76
+ − 181
22
+ − 182
if(defined('ENANO_BASE_CLASSES_INITIALIZED'))
+ − 183
{
+ − 184
$sep = urlSeparator;
+ − 185
}
+ − 186
else
+ − 187
{
+ − 188
$sep = (strstr($_SERVER['REQUEST_URI'], '?')) ? '&' : '?';
+ − 189
}
+ − 190
if ( isset( $_GET['printable'] ) ) {
+ − 191
$flags .= $sep . 'printable';
+ − 192
$sep = '&';
+ − 193
}
76
+ − 194
if ( isset( $_GET['theme'] ) )
22
+ − 195
{
+ − 196
$flags .= $sep . 'theme='.$session->theme;
+ − 197
$sep = '&';
+ − 198
}
+ − 199
if ( isset( $_GET['style'] ) )
+ − 200
{
+ − 201
$flags .= $sep . 'style='.$session->style;
+ − 202
$sep = '&';
+ − 203
}
76
+ − 204
22
+ − 205
if(defined('ENANO_BASE_CLASSES_INITIALIZED'))
+ − 206
{
+ − 207
$url = $session->append_sid(contentPath . $paths->nslist[$n] . $t . $flags);
+ − 208
}
+ − 209
else
+ − 210
{
+ − 211
// If the path manager hasn't been initted yet, take an educated guess at what the URI should be
+ − 212
$url = contentPath . $n . ':' . $t . $flags;
+ − 213
}
1
+ − 214
if($query)
+ − 215
{
+ − 216
if(strstr($url, '?')) $sep = '&';
+ − 217
else $sep = '?';
+ − 218
$url = $url . $sep . $query . $flags;
+ − 219
}
76
+ − 220
1
+ − 221
$baseprot = 'http' . ( isset($_SERVER['HTTPS']) ? 's' : '' ) . '://' . $_SERVER['HTTP_HOST'];
+ − 222
$url = $baseprot . $url;
76
+ − 223
1
+ − 224
return ($escape) ? htmlspecialchars($url) : $url;
+ − 225
}
+ − 226
+ − 227
/**
62
9dc4fded30e6
Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
diff
changeset
+ − 228
* Tells you the title for the given page ID string
9dc4fded30e6
Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
diff
changeset
+ − 229
* @param string Page ID string (ex: Special:Administration)
91
+ − 230
* @param bool Optional. If true, and if the namespace turns out to be something other than Article, the namespace prefix will be prepended to the return value.
62
9dc4fded30e6
Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
diff
changeset
+ − 231
* @return string
9dc4fded30e6
Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
diff
changeset
+ − 232
*/
9dc4fded30e6
Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
diff
changeset
+ − 233
91
+ − 234
function get_page_title($page_id, $show_ns = true)
62
9dc4fded30e6
Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
diff
changeset
+ − 235
{
9dc4fded30e6
Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
diff
changeset
+ − 236
global $db, $session, $paths, $template, $plugins; // Common objects
76
+ − 237
62
9dc4fded30e6
Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
diff
changeset
+ − 238
$idata = RenderMan::strToPageID($page_id);
9dc4fded30e6
Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
diff
changeset
+ − 239
$page_id_key = $paths->nslist[ $idata[1] ] . $idata[0];
91
+ − 240
$page_id_key = sanitize_page_id($page_id_key);
62
9dc4fded30e6
Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
diff
changeset
+ − 241
$page_data = $paths->pages[$page_id_key];
91
+ − 242
$title = ( isset($page_data['name']) ) ?
+ − 243
( ( $page_data['namespace'] == 'Article' || !$show_ns ) ?
+ − 244
'' :
+ − 245
$paths->nslist[ $idata[1] ] )
+ − 246
. $page_data['name'] :
+ − 247
( $show_ns ? $paths->nslist[$idata[1]] : '' ) . str_replace('_', ' ', dirtify_page_id( $idata[0] ) );
62
9dc4fded30e6
Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
diff
changeset
+ − 248
return $title;
9dc4fded30e6
Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
diff
changeset
+ − 249
}
9dc4fded30e6
Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
diff
changeset
+ − 250
9dc4fded30e6
Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
diff
changeset
+ − 251
/**
9dc4fded30e6
Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
diff
changeset
+ − 252
* Tells you the title for the given page ID and namespace
9dc4fded30e6
Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
diff
changeset
+ − 253
* @param string Page ID
9dc4fded30e6
Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
diff
changeset
+ − 254
* @param string Namespace
9dc4fded30e6
Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
diff
changeset
+ − 255
* @return string
9dc4fded30e6
Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
diff
changeset
+ − 256
*/
9dc4fded30e6
Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
diff
changeset
+ − 257
9dc4fded30e6
Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
diff
changeset
+ − 258
function get_page_title_ns($page_id, $namespace)
9dc4fded30e6
Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
diff
changeset
+ − 259
{
9dc4fded30e6
Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
diff
changeset
+ − 260
global $db, $session, $paths, $template, $plugins; // Common objects
76
+ − 261
62
9dc4fded30e6
Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
diff
changeset
+ − 262
$page_id_key = $paths->nslist[ $namespace ] . $page_id;
9dc4fded30e6
Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
diff
changeset
+ − 263
$page_data = $paths->pages[$page_id_key];
9dc4fded30e6
Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
diff
changeset
+ − 264
$title = ( isset($page_data['name']) ) ? $page_data['name'] : $paths->nslist[$namespace] . str_replace('_', ' ', dirtify_page_id( $page_id ) );
9dc4fded30e6
Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
diff
changeset
+ − 265
return $title;
9dc4fded30e6
Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
diff
changeset
+ − 266
}
9dc4fded30e6
Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
diff
changeset
+ − 267
9dc4fded30e6
Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
diff
changeset
+ − 268
/**
1
+ − 269
* Redirect the user to the specified URL.
+ − 270
* @param string $url The URL, either relative or absolute.
+ − 271
* @param string $title The title of the message
+ − 272
* @param string $message A short message to show to the user
+ − 273
* @param string $timeout Timeout, in seconds, to delay the redirect. Defaults to 3.
+ − 274
*/
76
+ − 275
1
+ − 276
function redirect($url, $title = 'Redirecting...', $message = 'Please wait while you are redirected.', $timeout = 3)
+ − 277
{
+ − 278
global $db, $session, $paths, $template, $plugins; // Common objects
76
+ − 279
1
+ − 280
if ( $timeout == 0 )
+ − 281
{
+ − 282
header('Location: ' . $url);
+ − 283
header('HTTP/1.1 307 Temporary Redirect');
+ − 284
}
76
+ − 285
1
+ − 286
$template->add_header('<meta http-equiv="refresh" content="' . $timeout . '; url=' . str_replace('"', '\\"', $url) . '" />');
+ − 287
$template->add_header('<script type="text/javascript">
+ − 288
function __r() {
+ − 289
// FUNCTION AUTOMATICALLY GENERATED
+ − 290
window.location="' . str_replace('"', '\\"', $url) . '";
+ − 291
}
+ − 292
setTimeout(\'__r();\', ' . $timeout . '000);
+ − 293
</script>
+ − 294
');
76
+ − 295
1
+ − 296
$template->tpl_strings['PAGE_NAME'] = $title;
+ − 297
$template->header(true);
+ − 298
echo '<p>' . $message . '</p><p>If you are not redirected within ' . ( $timeout + 1 ) . ' seconds, <a href="' . str_replace('"', '\\"', $url) . '">please click here</a>.</p>';
+ − 299
$template->footer(true);
76
+ − 300
1
+ − 301
$db->close();
+ − 302
exit(0);
76
+ − 303
1
+ − 304
}
+ − 305
+ − 306
// Removed wikiFormat() from here, replaced with RenderMan::render
+ − 307
22
+ − 308
/**
+ − 309
* Tell me if the page exists or not.
+ − 310
* @param string the full page ID (Special:Administration) of the page to check for
+ − 311
* @return bool True if the page exists, false otherwise
+ − 312
*/
+ − 313
1
+ − 314
function isPage($p) {
+ − 315
global $db, $session, $paths, $template, $plugins; // Common objects
76
+ − 316
22
+ − 317
// Try the easy way first ;-)
+ − 318
if ( isset( $paths->pages[ $p ] ) )
+ − 319
{
+ − 320
return true;
+ − 321
}
76
+ − 322
22
+ − 323
// Special case for Special, Template, and Admin pages that can't have slashes in their URIs
+ − 324
$ns_test = RenderMan::strToPageID( $p );
76
+ − 325
22
+ − 326
if($ns_test[1] != 'Special' && $ns_test[1] != 'Template' && $ns_test[1] != 'Admin')
+ − 327
{
+ − 328
return false;
+ − 329
}
76
+ − 330
22
+ − 331
$particles = explode('/', $p);
+ − 332
if ( isset ( $paths->pages[ $particles[ 0 ] ] ) )
+ − 333
{
+ − 334
return true;
+ − 335
}
+ − 336
else
+ − 337
{
+ − 338
return false;
+ − 339
}
1
+ − 340
}
+ − 341
76
+ − 342
/**
+ − 343
* These are some old functions that were used with the Midget codebase. They are deprecated and should not be used any more.
+ − 344
*/
+ − 345
1
+ − 346
function arrayItemUp($arr, $keyname) {
+ − 347
$keylist = array_keys($arr);
+ − 348
$keyflop = array_flip($keylist);
+ − 349
$idx = $keyflop[$keyname];
+ − 350
$idxm = $idx - 1;
+ − 351
$temp = $arr[$keylist[$idxm]];
+ − 352
if($arr[$keylist[0]] == $arr[$keyname]) return $arr;
+ − 353
$arr[$keylist[$idxm]] = $arr[$keylist[$idx]];
+ − 354
$arr[$keylist[$idx]] = $temp;
+ − 355
return $arr;
+ − 356
}
+ − 357
+ − 358
function arrayItemDown($arr, $keyname) {
+ − 359
$keylist = array_keys($arr);
+ − 360
$keyflop = array_flip($keylist);
+ − 361
$idx = $keyflop[$keyname];
+ − 362
$idxm = $idx + 1;
+ − 363
$temp = $arr[$keylist[$idxm]];
+ − 364
$sz = sizeof($arr); $sz--;
+ − 365
if($arr[$keylist[$sz]] == $arr[$keyname]) return $arr;
+ − 366
$arr[$keylist[$idxm]] = $arr[$keylist[$idx]];
+ − 367
$arr[$keylist[$idx]] = $temp;
+ − 368
return $arr;
+ − 369
}
+ − 370
+ − 371
function arrayItemTop($arr, $keyname) {
+ − 372
$keylist = array_keys($arr);
+ − 373
$keyflop = array_flip($keylist);
+ − 374
$idx = $keyflop[$keyname];
+ − 375
while( $orig != $arr[$keylist[0]] ) {
+ − 376
// echo 'Keyname: '.$keylist[$idx] . '<br />'; flush(); ob_flush(); // Debugger
+ − 377
if($idx < 0) return $arr;
+ − 378
if($keylist[$idx] == '' || $keylist[$idx] < 0 || !$keylist[$idx]) {
+ − 379
/* echo 'Infinite loop caught in arrayItemTop(<br /><pre>';
+ − 380
print_r($arr);
+ − 381
echo '</pre><br />, '.$keyname.');<br /><br />EnanoCMS: Critical error during function call, exiting to prevent excessive server load.';
+ − 382
exit; */
+ − 383
return $arr;
+ − 384
}
+ − 385
$arr = arrayItemUp($arr, $keylist[$idx]);
+ − 386
$idx--;
+ − 387
}
+ − 388
return $arr;
+ − 389
}
+ − 390
+ − 391
function arrayItemBottom($arr, $keyname) {
+ − 392
$keylist = array_keys($arr);
+ − 393
$keyflop = array_flip($keylist);
+ − 394
$idx = $keyflop[$keyname];
+ − 395
$sz = sizeof($arr); $sz--;
+ − 396
while( $orig != $arr[$keylist[$sz]] ) {
+ − 397
// echo 'Keyname: '.$keylist[$idx] . '<br />'; flush(); ob_flush(); // Debugger
+ − 398
if($idx > $sz) return $arr;
+ − 399
if($keylist[$idx] == '' || $keylist[$idx] < 0 || !$keylist[$idx]) {
+ − 400
echo 'Infinite loop caught in arrayItemBottom(<br /><pre>';
+ − 401
print_r($arr);
+ − 402
echo '</pre><br />, '.$keyname.');<br /><br />EnanoCMS: Critical error during function call, exiting to prevent excessive server load.';
+ − 403
exit;
+ − 404
}
+ − 405
$arr = arrayItemDown($arr, $keylist[$idx]);
+ − 406
$idx++;
+ − 407
}
+ − 408
return $arr;
+ − 409
}
+ − 410
+ − 411
// Convert IP address to hex string
+ − 412
// Input: 127.0.0.1 (string)
+ − 413
// Output: 0x7f000001 (string)
+ − 414
// Updated 12/8/06 to work with PHP4 and not use eval() (blech)
+ − 415
function ip2hex($ip) {
+ − 416
if ( preg_match('/^([0-9a-f:]+)$/', $ip) )
+ − 417
{
+ − 418
// this is an ipv6 address
+ − 419
return str_replace(':', '', $ip);
+ − 420
}
+ − 421
$nums = explode('.', $ip);
+ − 422
if(sizeof($nums) != 4) return false;
+ − 423
$str = '0x';
+ − 424
foreach($nums as $n)
+ − 425
{
+ − 426
$str .= (string)dechex($n);
+ − 427
}
+ − 428
return $str;
+ − 429
}
+ − 430
+ − 431
// Convert DWord to IP address
+ − 432
// Input: 0x7f000001
+ − 433
// Output: 127.0.0.1
+ − 434
// Updated 12/8/06 to work with PHP4 and not use eval() (blech)
+ − 435
function hex2ip($in) {
+ − 436
if(substr($in, 0, 2) == '0x') $ip = substr($in, 2, 8);
+ − 437
else $ip = substr($in, 0, 8);
+ − 438
$octets = enano_str_split($ip, 2);
+ − 439
$str = '';
+ − 440
$newoct = Array();
+ − 441
foreach($octets as $o)
+ − 442
{
+ − 443
$o = (int)hexdec($o);
+ − 444
$newoct[] = $o;
+ − 445
}
+ − 446
return implode('.', $newoct);
+ − 447
}
+ − 448
+ − 449
// Function strip_php moved to RenderMan class
+ − 450
76
+ − 451
/**
+ − 452
* Immediately brings the site to a halt with an error message. Unlike grinding_halt() this can only be called after the config has been
+ − 453
* fetched (plugin developers don't even need to worry since plugins are always loaded after the config) and shows the site name and
+ − 454
* description.
+ − 455
* @param string The title of the error message
+ − 456
* @param string The body of the message, this can be HTML, and should be separated into paragraphs using the <p> tag
+ − 457
*/
+ − 458
1
+ − 459
function die_semicritical($t, $p)
+ − 460
{
+ − 461
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 462
$db->close();
76
+ − 463
1
+ − 464
if ( ob_get_status() )
+ − 465
ob_end_clean();
76
+ − 466
1
+ − 467
dc_here('functions: <span style="color: red">calling die_semicritical</span>');
76
+ − 468
1
+ − 469
$tpl = new template_nodb();
+ − 470
$tpl->load_theme('oxygen', 'bleu');
+ − 471
$tpl->tpl_strings['SITE_NAME'] = getConfig('site_name');
+ − 472
$tpl->tpl_strings['SITE_DESC'] = getConfig('site_desc');
+ − 473
$tpl->tpl_strings['COPYRIGHT'] = getConfig('copyright_notice');
+ − 474
$tpl->tpl_strings['PAGE_NAME'] = $t;
+ − 475
$tpl->header();
+ − 476
echo $p;
+ − 477
$tpl->footer();
76
+ − 478
1
+ − 479
exit;
+ − 480
}
+ − 481
76
+ − 482
/**
+ − 483
* Halts Enano execution with a message. This doesn't have to be an error message, it's sometimes used to indicate success at an operation.
+ − 484
* @param string The title of the message
+ − 485
* @param string The body of the message, this can be HTML, and should be separated into paragraphs using the <p> tag
+ − 486
*/
+ − 487
1
+ − 488
function die_friendly($t, $p)
+ − 489
{
+ − 490
global $db, $session, $paths, $template, $plugins; // Common objects
76
+ − 491
1
+ − 492
if ( ob_get_status() )
+ − 493
ob_end_clean();
76
+ − 494
1
+ − 495
dc_here('functions: <span style="color: red">calling die_friendly</span>');
+ − 496
$paths->cpage['name'] = $t;
+ − 497
$template->tpl_strings['PAGE_NAME'] = $t;
+ − 498
$template->header();
+ − 499
echo $p;
+ − 500
$template->footer();
+ − 501
$db->close();
76
+ − 502
1
+ − 503
exit;
+ − 504
}
+ − 505
76
+ − 506
/**
+ − 507
* Immediately brings the site to a halt with an error message, and focuses on immediately closing the database connection and shutting down Enano in the event that an attack may happen. This should only be used very early on to indicate very severe errors, or if the site may be under attack (like if the DBAL detects a malicious query). In the vast majority of cases, die_semicritical() is more appropriate.
+ − 508
* @param string The title of the error message
+ − 509
* @param string The body of the message, this can be HTML, and should be separated into paragraphs using the <p> tag
+ − 510
*/
+ − 511
1
+ − 512
function grinding_halt($t, $p)
+ − 513
{
+ − 514
global $db, $session, $paths, $template, $plugins; // Common objects
125
+ − 515
+ − 516
if ( !defined('scriptPath') )
+ − 517
require( ENANO_ROOT . '/config.php' );
76
+ − 518
125
+ − 519
if ( is_object($db) )
+ − 520
$db->close();
76
+ − 521
1
+ − 522
if ( ob_get_status() )
+ − 523
ob_end_clean();
76
+ − 524
1
+ − 525
dc_here('functions: <span style="color: red">calling grinding_halt</span>');
+ − 526
$tpl = new template_nodb();
+ − 527
$tpl->load_theme('oxygen', 'bleu');
+ − 528
$tpl->tpl_strings['SITE_NAME'] = 'Critical error';
+ − 529
$tpl->tpl_strings['SITE_DESC'] = 'This website is experiencing a serious error and cannot load.';
+ − 530
$tpl->tpl_strings['COPYRIGHT'] = 'Unable to retrieve copyright information';
+ − 531
$tpl->tpl_strings['PAGE_NAME'] = $t;
+ − 532
$tpl->header();
+ − 533
echo $p;
+ − 534
$tpl->footer();
+ − 535
exit;
+ − 536
}
+ − 537
76
+ − 538
/**
+ − 539
* Prints out the categorization box found on most regular pages. Doesn't take or return anything, but assumes that the page information is already set in $paths.
+ − 540
*/
+ − 541
+ − 542
/*
+ − 543
function show_category_info()
+ − 544
{
1
+ − 545
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 546
dc_here('functions: showing category info');
76
+ − 547
// if($template->no_headers && !strpos($_SERVER['REQUEST_URI'], 'ajax.php')) return '';
+ − 548
if ( $paths->namespace == 'Category' )
1
+ − 549
{
+ − 550
$q = $db->sql_query('SELECT page_id,namespace FROM '.table_prefix.'categories WHERE category_id=\''.$paths->cpage['urlname_nons'].'\' AND namespace=\'Category\' ORDER BY page_id;');
+ − 551
if(!$q) $db->_die('The category information could not be selected.');
+ − 552
$ticker = -1;
+ − 553
echo '<h3>Subcategories</h3>';
+ − 554
if($db->numrows() < 1) echo '<p>There are no subcategories in this category.</p>';
+ − 555
echo '<table border="0" cellspacing="1" cellpadding="4">';
+ − 556
while($row = $db->fetchrow())
+ − 557
{
76
+ − 558
$ticker++;
+ − 559
if ( $ticker == 3 )
+ − 560
{
+ − 561
$ticker = 0;
+ − 562
}
+ − 563
if ( $ticker == 0 )
+ − 564
{
+ − 565
echo '<tr>';
+ − 566
}
+ − 567
echo '<td style="width: 200px;"><a href="' . makeUrlNS($row['namespace'], $row['page_id']) . '">' . htmlspecialchars($paths->pages[$paths->nslist[$row['namespace']].$row['page_id']]['name']) . '</a></td>';
+ − 568
if ( $ticker == 2 )
+ − 569
{
+ − 570
echo '</tr>';
+ − 571
}
1
+ − 572
}
+ − 573
$db->free_result();
+ − 574
if($ticker) echo '</tr>';
+ − 575
echo '</table>';
76
+ − 576
1
+ − 577
$q = $db->sql_query('SELECT page_id,namespace FROM '.table_prefix.'categories WHERE category_id=\''.$paths->cpage['urlname_nons'].'\' AND namespace!=\'Category\' ORDER BY page_id;');
76
+ − 578
if ( !$q )
+ − 579
{
+ − 580
$db->_die('The category information could not be selected.');
+ − 581
}
1
+ − 582
$ticker = -1;
+ − 583
echo '<h3>Pages</h3>';
76
+ − 584
if ( $db->numrows() < 1 )
+ − 585
{
+ − 586
echo '<p>There are no pages in this category.</p>';
+ − 587
}
1
+ − 588
echo '<table border="0" cellspacing="1" cellpadding="4">';
+ − 589
while($row = $db->fetchrow())
+ − 590
{
76
+ − 591
$ticker += ( $ticker == 3 ) ? -3 : 1;
+ − 592
if ( $ticker == 0 )
+ − 593
{
+ − 594
echo '<tr>';
+ − 595
}
+ − 596
echo '<td style="width: 200px;"><a href="'.makeUrlNS($row['namespace'], $row['page_id']).'">'.htmlspecialchars($paths->pages[$paths->nslist[$row['namespace']].$row['page_id']]['name']).'</a></td>';
+ − 597
if ( $ticker == 2 )
+ − 598
{
+ − 599
echo '</tr>';
+ − 600
}
1
+ − 601
}
+ − 602
$db->free_result();
+ − 603
if($ticker) echo '</tr>';
+ − 604
echo '</table><br /><br />';
+ − 605
}
+ − 606
$q = $db->sql_query('SELECT category_id FROM '.table_prefix.'categories WHERE page_id=\''.$paths->cpage['urlname_nons'].'\' AND namespace=\''.$paths->namespace.'\'');
+ − 607
if(!$q) $db->_die('The error seems to have occurred during selection of category data.');
+ − 608
if($db->numrows() > 0) {
+ − 609
echo '<div class="mdg-comment" style="margin-left: 0;">Categories: ';
+ − 610
$i=0;
+ − 611
while($r = $db->fetchrow())
+ − 612
{
+ − 613
if($i>0) echo ', ';
+ − 614
$i++;
+ − 615
echo '<a href="'.makeUrlNS('Category', $r['category_id']).'">'.$paths->pages[$paths->nslist['Category'].$r['category_id']]['name'].'</a>';
+ − 616
}
+ − 617
if( ( $paths->wiki_mode && !$paths->page_protected ) || ( $session->get_permissions('edit_cat') && $session->get_permissions('even_when_protected') ) ) echo ' [ <a href="'.makeUrl($paths->page, 'do=catedit', true).'" onclick="ajaxCatEdit(); return false;">edit categorization</a> ]</div>';
76
+ − 618
}
+ − 619
else
+ − 620
{
1
+ − 621
echo '<div class="mdg-comment" style="margin-left: 0;">Categories: ';
+ − 622
echo '(Uncategorized)';
+ − 623
if( ( $paths->wiki_mode && !$paths->page_protected ) || ( $session->get_permissions('edit_cat') && $session->get_permissions('even_when_protected') ) ) echo ' [ <a href="'.makeUrl($paths->page, 'do=catedit', true).'" onclick="ajaxCatEdit(); return false;">edit categorization</a> ]</div>';
+ − 624
else echo '</div>';
+ − 625
}
+ − 626
$db->free_result();
+ − 627
}
76
+ − 628
*/
+ − 629
+ − 630
function show_category_info()
+ − 631
{
+ − 632
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 633
+ − 634
if ( $paths->namespace == 'Category' )
+ − 635
{
+ − 636
// Show member pages and subcategories
+ − 637
$q = $db->sql_query('SELECT p.urlname, p.namespace, p.name, p.namespace=\'Category\' AS is_category FROM '.table_prefix.'categories AS c
+ − 638
LEFT JOIN '.table_prefix.'pages AS p
+ − 639
ON ( p.urlname = c.page_id AND p.namespace = c.namespace )
+ − 640
WHERE c.category_id=\'' . $db->escape($paths->cpage['urlname_nons']) . '\'
+ − 641
ORDER BY is_category DESC, p.name ASC;');
+ − 642
if ( !$q )
+ − 643
{
+ − 644
$db->_die();
+ − 645
}
+ − 646
echo '<h3>Subcategories</h3>';
+ − 647
echo '<div class="tblholder">';
+ − 648
echo '<table border="0" cellspacing="1" cellpadding="4">';
+ − 649
echo '<tr>';
+ − 650
$ticker = 0;
+ − 651
$counter = 0;
+ − 652
$switched = false;
+ − 653
$class = 'row1';
+ − 654
while ( $row = $db->fetchrow() )
+ − 655
{
+ − 656
if ( $row['is_category'] == 0 && !$switched )
+ − 657
{
+ − 658
if ( $counter > 0 )
+ − 659
{
+ − 660
// Fill-in
+ − 661
while ( $ticker < 3 )
+ − 662
{
+ − 663
$ticker++;
+ − 664
echo '<td class="' . $class . '" style="width: 33.3%;"></td>';
+ − 665
}
+ − 666
}
+ − 667
else
+ − 668
{
+ − 669
echo '<td class="' . $class . '">No subcategories.</td>';
+ − 670
}
+ − 671
echo '</tr></table></div>' . "\n\n";
+ − 672
echo '<h3>Pages</h3>';
+ − 673
echo '<div class="tblholder">';
+ − 674
echo '<table border="0" cellspacing="1" cellpadding="4">';
+ − 675
echo '<tr>';
+ − 676
$counter = 0;
129
0b5244001799
Rebranded as 1.0.1.1; fixed category page drawing bug; updated link to GPL in the about page to the GPLv2
Dan
diff
changeset
+ − 677
$ticker = -1;
76
+ − 678
$switched = true;
+ − 679
}
+ − 680
$counter++;
+ − 681
$ticker++;
+ − 682
if ( $ticker == 3 )
+ − 683
{
+ − 684
echo '</tr><tr>';
+ − 685
$ticker = 0;
+ − 686
$class = ( $class == 'row3' ) ? 'row1' : 'row3';
+ − 687
}
+ − 688
echo "<td class=\"{$class}\" style=\"width: 33.3%;\">"; // " to workaround stupid jEdit bug
+ − 689
+ − 690
$link = makeUrlNS($row['namespace'], sanitize_page_id($row['urlname']));
+ − 691
echo '<a href="' . $link . '"';
+ − 692
$key = $paths->nslist[$row['namespace']] . sanitize_page_id($row['urlname']);
+ − 693
if ( !isPage( $key ) )
+ − 694
{
+ − 695
echo ' class="wikilink-nonexistent"';
+ − 696
}
+ − 697
echo '>';
+ − 698
$title = get_page_title_ns($row['urlname'], $row['namespace']);
+ − 699
echo htmlspecialchars($title);
+ − 700
echo '</a>';
+ − 701
+ − 702
echo "</td>";
+ − 703
}
+ − 704
if ( !$switched )
+ − 705
{
+ − 706
if ( $counter > 0 )
+ − 707
{
+ − 708
// Fill-in
129
0b5244001799
Rebranded as 1.0.1.1; fixed category page drawing bug; updated link to GPL in the about page to the GPLv2
Dan
diff
changeset
+ − 709
while ( $ticker < 2 )
76
+ − 710
{
+ − 711
$ticker++;
+ − 712
echo '<td class="' . $class . '" style="width: 33.3%;"></td>';
+ − 713
}
+ − 714
}
+ − 715
else
+ − 716
{
+ − 717
echo '<td class="' . $class . '">No subcategories.</td>';
+ − 718
}
+ − 719
echo '</tr></table></div>' . "\n\n";
+ − 720
echo '<h3>Pages</h3>';
+ − 721
echo '<div class="tblholder">';
+ − 722
echo '<table border="0" cellspacing="1" cellpadding="4">';
+ − 723
echo '<tr>';
+ − 724
$counter = 0;
+ − 725
$ticker = 0;
+ − 726
$switched = true;
+ − 727
}
+ − 728
if ( $counter > 0 )
+ − 729
{
+ − 730
// Fill-in
129
0b5244001799
Rebranded as 1.0.1.1; fixed category page drawing bug; updated link to GPL in the about page to the GPLv2
Dan
diff
changeset
+ − 731
while ( $ticker < 2 )
76
+ − 732
{
+ − 733
$ticker++;
+ − 734
echo '<td class="' . $class . '" style="width: 33.3%;"></td>';
+ − 735
}
+ − 736
}
+ − 737
else
+ − 738
{
+ − 739
echo '<td class="' . $class . '">No pages in this category.</td>';
+ − 740
}
+ − 741
echo '</tr></table></div>' . "\n\n";
+ − 742
}
+ − 743
+ − 744
if ( $paths->namespace != 'Special' && $paths->namespace != 'Admin' )
+ − 745
{
86
c162ca39db8f
Finished pagination code (was incomplete in previous revision) and added a few hacks for an upcoming theme
Dan
diff
changeset
+ − 746
echo '<div class="mdg-comment" style="margin: 10px 0 0 0;" id="category_box_wrapper">';
80
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 747
echo '<div style="float: right;">';
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 748
echo '(<a href="#" onclick="ajaxCatToTag(); return false;">show page tags</a>)';
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 749
echo '</div>';
76
+ − 750
echo '<div id="mdgCatBox">Categories: ';
+ − 751
+ − 752
$where = '( c.page_id=\'' . $db->escape($paths->cpage['urlname_nons']) . '\' AND c.namespace=\'' . $db->escape($paths->namespace) . '\' )';
+ − 753
$prefix = table_prefix;
+ − 754
$sql = <<<EOF
+ − 755
SELECT c.category_id FROM {$prefix}categories AS c
+ − 756
LEFT JOIN {$prefix}pages AS p
+ − 757
ON ( ( p.urlname = c.page_id AND p.namespace = c.namespace ) OR ( p.urlname IS NULL AND p.namespace IS NULL ) )
+ − 758
WHERE $where
+ − 759
ORDER BY p.name ASC, c.page_id ASC;
+ − 760
EOF;
+ − 761
$q = $db->sql_query($sql);
+ − 762
if ( !$q )
+ − 763
$db->_die();
+ − 764
+ − 765
if ( $row = $db->fetchrow() )
+ − 766
{
+ − 767
$list = array();
+ − 768
do
+ − 769
{
+ − 770
$cid = sanitize_page_id($row['category_id']);
+ − 771
$title = get_page_title_ns($cid, 'Category');
+ − 772
$link = makeUrlNS('Category', $cid);
+ − 773
$list[] = '<a href="' . $link . '">' . htmlspecialchars($title) . '</a>';
+ − 774
}
+ − 775
while ( $row = $db->fetchrow() );
+ − 776
echo implode(', ', $list);
+ − 777
}
+ − 778
else
+ − 779
{
+ − 780
echo '(Uncategorized)';
+ − 781
}
+ − 782
+ − 783
$can_edit = ( $session->get_permissions('edit_cat') && ( !$paths->page_protected || $session->get_permissions('even_when_protected') ) );
+ − 784
if ( $can_edit )
+ − 785
{
+ − 786
$edit_link = '<a href="' . makeUrl($paths->page, 'do=catedit', true) . '" onclick="ajaxCatEdit(); return false;">edit categorization</a>';
+ − 787
echo ' [ ' . $edit_link . ' ]';
+ − 788
}
+ − 789
+ − 790
echo '</div></div>';
+ − 791
+ − 792
}
+ − 793
+ − 794
}
+ − 795
+ − 796
/**
+ − 797
* Prints out the file information box seen on File: pages. Doesn't take or return anything, but assumes that the page information is already set in $paths, and expects $paths->namespace to be File.
+ − 798
*/
1
+ − 799
+ − 800
function show_file_info()
+ − 801
{
+ − 802
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 803
if($paths->namespace != 'File') return null; // Prevent unnecessary work
+ − 804
$selfn = $paths->cpage['urlname_nons']; // substr($paths->page, strlen($paths->nslist['File']), strlen($paths->cpage));
+ − 805
if(substr($paths->cpage['name'], 0, strlen($paths->nslist['File']))==$paths->nslist['File']) $selfn = substr($paths->cpage['urlname_nons'], strlen($paths->nslist['File']), strlen($paths->cpage['urlname_nons']));
+ − 806
$q = $db->sql_query('SELECT mimetype,time_id,size FROM '.table_prefix.'files WHERE page_id=\''.$selfn.'\' ORDER BY time_id DESC;');
+ − 807
if(!$q) $db->_die('The file type could not be fetched.');
+ − 808
if($db->numrows() < 1) { echo '<div class="mdg-comment" style="margin-left: 0;"><h3>Uploaded file</h3><p>There are no files uploaded with this name yet. <a href="'.makeUrlNS('Special', 'UploadFile/'.$paths->cpage['urlname_nons']).'">Upload a file...</a></p></div><br />'; return; }
+ − 809
$r = $db->fetchrow();
+ − 810
$mimetype = $r['mimetype'];
+ − 811
$datestring = date('F d, Y h:i a', (int)$r['time_id']);
+ − 812
echo '<div class="mdg-comment" style="margin-left: 0;"><p><h3>Uploaded file</h3></p><p>Type: '.$r['mimetype'].'<br />Size: ';
+ − 813
$fs = $r['size'];
+ − 814
echo $fs.' bytes';
+ − 815
$fs = (int)$fs;
+ − 816
if($fs >= 1048576)
+ − 817
{
+ − 818
$fs = round($fs / 1048576, 1);
+ − 819
echo ' ('.$fs.' MB)';
+ − 820
} elseif($fs >= 1024) {
+ − 821
$fs = round($fs / 1024, 1);
+ − 822
echo ' ('.$fs.' KB)';
+ − 823
}
+ − 824
echo '<br />Uploaded: '.$datestring.'</p>';
+ − 825
if(substr($mimetype, 0, 6)!='image/' && ( substr($mimetype, 0, 5) != 'text/' || $mimetype == 'text/html' || $mimetype == 'text/javascript' ))
+ − 826
{
+ − 827
echo '<div class="warning-box">This file type may contain viruses or other code that could harm your computer. You should exercise caution if you download it.</div>';
+ − 828
}
+ − 829
if(substr($mimetype, 0, 6)=='image/')
+ − 830
{
+ − 831
echo '<p><a href="'.makeUrlNS('Special', 'DownloadFile'.'/'.$selfn).'"><img style="border: 0;" alt="'.$paths->page.'" src="'.makeUrlNS('Special', 'DownloadFile'.'/'.$selfn.htmlspecialchars(urlSeparator).'preview').'" /></a></p>';
+ − 832
}
+ − 833
echo '<p><a href="'.makeUrlNS('Special', 'DownloadFile'.'/'.$selfn.'/'.$r['time_id'].htmlspecialchars(urlSeparator).'download').'">Download this file</a>';
+ − 834
if(!$paths->page_protected && ( $paths->wiki_mode || $session->get_permissions('upload_new_version') ))
+ − 835
{
+ − 836
echo ' | <a href="'.makeUrlNS('Special', 'UploadFile'.'/'.$selfn).'">Upload new version</a>';
+ − 837
}
+ − 838
echo '</p>';
+ − 839
if($db->numrows() > 1)
+ − 840
{
+ − 841
echo '<h3>File history</h3><p>';
+ − 842
while($r = $db->fetchrow())
+ − 843
{
+ − 844
echo '(<a href="'.makeUrlNS('Special', 'DownloadFile'.'/'.$selfn.'/'.$r['time_id'].htmlspecialchars(urlSeparator).'download').'">this ver</a>) ';
+ − 845
if($session->get_permissions('history_rollback'))
+ − 846
echo ' (<a href="#" onclick="ajaxRollback(\''.$r['time_id'].'\'); return false;">revert</a>) ';
+ − 847
$mimetype = $r['mimetype'];
+ − 848
$datestring = date('F d, Y h:i a', (int)$r['time_id']);
+ − 849
echo $datestring.': '.$r['mimetype'].', ';
+ − 850
$fs = $r['size'];
+ − 851
$fs = (int)$fs;
+ − 852
if($fs >= 1048576)
+ − 853
{
+ − 854
$fs = round($fs / 1048576, 1);
+ − 855
echo ' '.$fs.' MB';
+ − 856
} elseif($fs >= 1024) {
+ − 857
$fs = round($fs / 1024, 1);
+ − 858
echo ' '.$fs.' KB';
+ − 859
} else {
+ − 860
echo ' '.$fs.' bytes';
+ − 861
}
+ − 862
echo '<br />';
+ − 863
}
+ − 864
echo '</p>';
+ − 865
}
+ − 866
$db->free_result();
+ − 867
echo '</div><br />';
+ − 868
}
+ − 869
76
+ − 870
/**
+ − 871
* Shows header information on the current page. Currently this is only the delete-vote feature. Doesn't take or return anything, but assumes that the page information is already set in $paths.
+ − 872
*/
+ − 873
1
+ − 874
function display_page_headers()
+ − 875
{
+ − 876
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 877
if($session->get_permissions('vote_reset') && $paths->cpage['delvotes'] > 0)
+ − 878
{
112
+ − 879
$delvote_ips = unserialize($paths->cpage['delvote_ips']);
+ − 880
$hr = htmlspecialchars(implode(', ', $delvote_ips['u']));
1
+ − 881
$is = 'is';
+ − 882
$s = '';
+ − 883
$s2 = 's';
+ − 884
if ( $paths->cpage['delvotes'] > 1)
+ − 885
{
+ − 886
$is = 'are';
+ − 887
$s = 's';
+ − 888
$s2 = '';
+ − 889
}
+ − 890
echo '<div class="info-box" style="margin-left: 0; margin-top: 5px;" id="mdgDeleteVoteNoticeBox">
+ − 891
<b>Notice:</b> There '.$is.' '.$paths->cpage['delvotes'].' user'.$s.' that think'.$s2.' this page should be deleted.<br />
+ − 892
<b>Users that voted:</b> ' . $hr . '<br />
+ − 893
<a href="'.makeUrl($paths->page, 'do=deletepage').'" onclick="ajaxDeletePage(); return false;">Delete page</a> | <a href="'.makeUrl($paths->page, 'do=resetvotes').'" onclick="ajaxResetDelVotes(); return false;">Reset votes</a>
+ − 894
</div>';
+ − 895
}
+ − 896
}
+ − 897
76
+ − 898
/**
+ − 899
* Displays page footer information including file and category info. This also has the send_page_footers hook. Doesn't take or return anything, but assumes that the page information is already set in $paths.
+ − 900
*/
+ − 901
1
+ − 902
function display_page_footers()
+ − 903
{
+ − 904
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 905
if(isset($_GET['nofooters'])) return;
+ − 906
$code = $plugins->setHook('send_page_footers');
+ − 907
foreach ( $code as $cmd )
+ − 908
{
+ − 909
eval($cmd);
+ − 910
}
+ − 911
show_file_info();
+ − 912
show_category_info();
+ − 913
}
+ − 914
76
+ − 915
/**
+ − 916
* Deprecated, do not use.
+ − 917
*/
+ − 918
1
+ − 919
function password_prompt($id = false)
+ − 920
{
+ − 921
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 922
if(!$id) $id = $paths->page;
+ − 923
if(isset($paths->pages[$id]['password']) && strlen($paths->pages[$id]['password']) == 40 && !isset($_REQUEST['pagepass']))
+ − 924
{
+ − 925
die_friendly('Password required', '<p>You must supply a password to access this page.</p><form action="'.makeUrl($paths->pages[$id]['urlname']).'" method="post"><p>Password: <input name="pagepass" type="password" /></p><p><input type="submit" value="Submit" /></p>');
+ − 926
} elseif(isset($_REQUEST['pagepass'])) {
+ − 927
$p = (preg_match('#^([a-f0-9]*){40}$#', $_REQUEST['pagepass'])) ? $_REQUEST['pagepass'] : sha1($_REQUEST['pagepass']);
+ − 928
if($p != $paths->pages[$id]['password']) die_friendly('Password required', '<p style="color: red;">The password you entered is incorrect.</p><form action="'.makeUrl($paths->page).'" method="post"><p>Password: <input name="pagepass" type="password" /></p><p><input type="submit" value="Submit" /></p>');
+ − 929
}
+ − 930
}
+ − 931
76
+ − 932
/**
+ − 933
* Some sort of primitive hex converter from back in the day. Deprecated, do not use.
+ − 934
* @param string Text to encode
+ − 935
* @return string
+ − 936
*/
+ − 937
1
+ − 938
function str_hex($string){
+ − 939
$hex='';
+ − 940
for ($i=0; $i < strlen($string); $i++){
+ − 941
$hex .= ' '.dechex(ord($string[$i]));
+ − 942
}
+ − 943
return substr($hex, 1, strlen($hex));
+ − 944
}
+ − 945
76
+ − 946
/**
+ − 947
* Essentially an return code reader for a socket. Don't use this unless you're writing mail code and smtp_send_email doesn't cut it. Ported from phpBB's smtp.php.
+ − 948
* @param socket A socket resource
+ − 949
* @param string The expected response from the server, this needs to be exactly three characters.
+ − 950
*/
+ − 951
+ − 952
function smtp_get_response($socket, $response, $line = __LINE__)
1
+ − 953
{
76
+ − 954
$server_response = '';
+ − 955
while (substr($server_response, 3, 1) != ' ')
+ − 956
{
+ − 957
if (!($server_response = fgets($socket, 256)))
+ − 958
{
1
+ − 959
die_friendly('SMTP Error', "<p>Couldn't get mail server response codes</p>");
76
+ − 960
}
+ − 961
}
1
+ − 962
76
+ − 963
if (!(substr($server_response, 0, 3) == $response))
+ − 964
{
1
+ − 965
die_friendly('SMTP Error', "<p>Ran into problems sending mail. Response: $server_response</p>");
76
+ − 966
}
1
+ − 967
}
+ − 968
76
+ − 969
/**
+ − 970
* Wrapper for smtp_send_email_core that takes the sender as the fourth parameter instead of additional headers.
+ − 971
* @param string E-mail address to send to
+ − 972
* @param string Subject line
+ − 973
* @param string The body of the message
+ − 974
* @param string Address of the sender
+ − 975
*/
+ − 976
1
+ − 977
function smtp_send_email($to, $subject, $message, $from)
+ − 978
{
+ − 979
return smtp_send_email_core($to, $subject, $message, "From: <$from>\n");
+ − 980
}
+ − 981
76
+ − 982
/**
+ − 983
* Replacement or substitute for PHP's mail() builtin function.
+ − 984
* @param string E-mail address to send to
+ − 985
* @param string Subject line
+ − 986
* @param string The body of the message
+ − 987
* @param string Message headers, separated by a single newline ("\n")
+ − 988
* @copyright (C) phpBB Group
+ − 989
* @license GPL
+ − 990
*/
+ − 991
1
+ − 992
function smtp_send_email_core($mail_to, $subject, $message, $headers = '')
+ − 993
{
76
+ − 994
// Fix any bare linefeeds in the message to make it RFC821 Compliant.
+ − 995
$message = preg_replace("#(?<!\r)\n#si", "\r\n", $message);
1
+ − 996
76
+ − 997
if ($headers != '')
+ − 998
{
+ − 999
if (is_array($headers))
+ − 1000
{
+ − 1001
if (sizeof($headers) > 1)
+ − 1002
{
+ − 1003
$headers = join("\n", $headers);
+ − 1004
}
+ − 1005
else
+ − 1006
{
+ − 1007
$headers = $headers[0];
+ − 1008
}
+ − 1009
}
+ − 1010
$headers = chop($headers);
1
+ − 1011
76
+ − 1012
// Make sure there are no bare linefeeds in the headers
+ − 1013
$headers = preg_replace('#(?<!\r)\n#si', "\r\n", $headers);
1
+ − 1014
76
+ − 1015
// Ok this is rather confusing all things considered,
+ − 1016
// but we have to grab bcc and cc headers and treat them differently
+ − 1017
// Something we really didn't take into consideration originally
+ − 1018
$header_array = explode("\r\n", $headers);
+ − 1019
@reset($header_array);
1
+ − 1020
76
+ − 1021
$headers = '';
+ − 1022
while(list(, $header) = each($header_array))
+ − 1023
{
+ − 1024
if (preg_match('#^cc:#si', $header))
+ − 1025
{
+ − 1026
$cc = preg_replace('#^cc:(.*)#si', '\1', $header);
+ − 1027
}
+ − 1028
else if (preg_match('#^bcc:#si', $header))
+ − 1029
{
+ − 1030
$bcc = preg_replace('#^bcc:(.*)#si', '\1', $header);
+ − 1031
$header = '';
+ − 1032
}
+ − 1033
$headers .= ($header != '') ? $header . "\r\n" : '';
+ − 1034
}
1
+ − 1035
76
+ − 1036
$headers = chop($headers);
+ − 1037
$cc = explode(', ', $cc);
+ − 1038
$bcc = explode(', ', $bcc);
+ − 1039
}
1
+ − 1040
76
+ − 1041
if (trim($subject) == '')
+ − 1042
{
+ − 1043
die_friendly(GENERAL_ERROR, "No email Subject specified");
+ − 1044
}
1
+ − 1045
76
+ − 1046
if (trim($message) == '')
+ − 1047
{
+ − 1048
die_friendly(GENERAL_ERROR, "Email message was blank");
+ − 1049
}
+ − 1050
1
+ − 1051
// setup SMTP
+ − 1052
$host = getConfig('smtp_server');
+ − 1053
if ( empty($host) )
+ − 1054
return 'No smtp_host in config';
+ − 1055
if ( strstr($host, ':' ) )
+ − 1056
{
+ − 1057
$n = explode(':', $host);
+ − 1058
$smtp_host = $n[0];
+ − 1059
$port = intval($n[1]);
+ − 1060
}
+ − 1061
else
+ − 1062
{
+ − 1063
$smtp_host = $host;
+ − 1064
$port = 25;
+ − 1065
}
76
+ − 1066
1
+ − 1067
$smtp_user = getConfig('smtp_user');
+ − 1068
$smtp_pass = getConfig('smtp_password');
+ − 1069
76
+ − 1070
// Ok we have error checked as much as we can to this point let's get on
+ − 1071
// it already.
+ − 1072
if( !$socket = @fsockopen($smtp_host, $port, $errno, $errstr, 20) )
+ − 1073
{
+ − 1074
die_friendly(GENERAL_ERROR, "Could not connect to smtp host : $errno : $errstr");
+ − 1075
}
+ − 1076
+ − 1077
// Wait for reply
+ − 1078
smtp_get_response($socket, "220", __LINE__);
1
+ − 1079
76
+ − 1080
// Do we want to use AUTH?, send RFC2554 EHLO, else send RFC821 HELO
+ − 1081
// This improved as provided by SirSir to accomodate
+ − 1082
if( !empty($smtp_user) && !empty($smtp_pass) )
+ − 1083
{
+ − 1084
enano_fputs($socket, "EHLO " . $smtp_host . "\r\n");
+ − 1085
smtp_get_response($socket, "250", __LINE__);
1
+ − 1086
76
+ − 1087
enano_fputs($socket, "AUTH LOGIN\r\n");
+ − 1088
smtp_get_response($socket, "334", __LINE__);
1
+ − 1089
76
+ − 1090
enano_fputs($socket, base64_encode($smtp_user) . "\r\n");
+ − 1091
smtp_get_response($socket, "334", __LINE__);
1
+ − 1092
76
+ − 1093
enano_fputs($socket, base64_encode($smtp_pass) . "\r\n");
+ − 1094
smtp_get_response($socket, "235", __LINE__);
+ − 1095
}
+ − 1096
else
+ − 1097
{
+ − 1098
enano_fputs($socket, "HELO " . $smtp_host . "\r\n");
+ − 1099
smtp_get_response($socket, "250", __LINE__);
+ − 1100
}
1
+ − 1101
76
+ − 1102
// From this point onward most server response codes should be 250
+ − 1103
// Specify who the mail is from....
+ − 1104
enano_fputs($socket, "MAIL FROM: <" . getConfig('contact_email') . ">\r\n");
+ − 1105
smtp_get_response($socket, "250", __LINE__);
1
+ − 1106
76
+ − 1107
// Specify each user to send to and build to header.
+ − 1108
$to_header = '';
1
+ − 1109
76
+ − 1110
// Add an additional bit of error checking to the To field.
+ − 1111
$mail_to = (trim($mail_to) == '') ? 'Undisclosed-recipients:;' : trim($mail_to);
+ − 1112
if (preg_match('#[^ ]+\@[^ ]+#', $mail_to))
+ − 1113
{
+ − 1114
enano_fputs($socket, "RCPT TO: <$mail_to>\r\n");
+ − 1115
smtp_get_response($socket, "250", __LINE__);
+ − 1116
}
1
+ − 1117
76
+ − 1118
// Ok now do the CC and BCC fields...
+ − 1119
@reset($bcc);
+ − 1120
while(list(, $bcc_address) = each($bcc))
+ − 1121
{
+ − 1122
// Add an additional bit of error checking to bcc header...
+ − 1123
$bcc_address = trim($bcc_address);
+ − 1124
if (preg_match('#[^ ]+\@[^ ]+#', $bcc_address))
+ − 1125
{
+ − 1126
enano_fputs($socket, "RCPT TO: <$bcc_address>\r\n");
+ − 1127
smtp_get_response($socket, "250", __LINE__);
+ − 1128
}
+ − 1129
}
1
+ − 1130
76
+ − 1131
@reset($cc);
+ − 1132
while(list(, $cc_address) = each($cc))
+ − 1133
{
+ − 1134
// Add an additional bit of error checking to cc header
+ − 1135
$cc_address = trim($cc_address);
+ − 1136
if (preg_match('#[^ ]+\@[^ ]+#', $cc_address))
+ − 1137
{
+ − 1138
enano_fputs($socket, "RCPT TO: <$cc_address>\r\n");
+ − 1139
smtp_get_response($socket, "250", __LINE__);
+ − 1140
}
+ − 1141
}
1
+ − 1142
76
+ − 1143
// Ok now we tell the server we are ready to start sending data
+ − 1144
enano_fputs($socket, "DATA\r\n");
1
+ − 1145
76
+ − 1146
// This is the last response code we look for until the end of the message.
+ − 1147
smtp_get_response($socket, "354", __LINE__);
1
+ − 1148
76
+ − 1149
// Send the Subject Line...
+ − 1150
enano_fputs($socket, "Subject: $subject\r\n");
1
+ − 1151
76
+ − 1152
// Now the To Header.
+ − 1153
enano_fputs($socket, "To: $mail_to\r\n");
1
+ − 1154
76
+ − 1155
// Now any custom headers....
+ − 1156
enano_fputs($socket, "$headers\r\n\r\n");
1
+ − 1157
76
+ − 1158
// Ok now we are ready for the message...
+ − 1159
enano_fputs($socket, "$message\r\n");
1
+ − 1160
76
+ − 1161
// Ok the all the ingredients are mixed in let's cook this puppy...
+ − 1162
enano_fputs($socket, ".\r\n");
+ − 1163
smtp_get_response($socket, "250", __LINE__);
1
+ − 1164
76
+ − 1165
// Now tell the server we are done and close the socket...
+ − 1166
enano_fputs($socket, "QUIT\r\n");
+ − 1167
fclose($socket);
1
+ − 1168
76
+ − 1169
return TRUE;
1
+ − 1170
}
+ − 1171
+ − 1172
/**
+ − 1173
* Tell which version of Enano we're running.
+ − 1174
* @param bool $long if true, uses English version names (e.g. alpha, beta, release candidate). If false (default) uses abbreviations (1.0a1, 1.0b3, 1.0RC2, etc.)
+ − 1175
* @return string
+ − 1176
*/
+ − 1177
+ − 1178
function enano_version($long = false, $no_nightly = false)
+ − 1179
{
+ − 1180
$r = getConfig('enano_version');
+ − 1181
$rc = ( $long ) ? ' release candidate ' : 'RC';
+ − 1182
$b = ( $long ) ? ' beta ' : 'b';
+ − 1183
$a = ( $long ) ? ' alpha ' : 'a';
+ − 1184
if($v = getConfig('enano_rc_version')) $r .= $rc.$v;
+ − 1185
if($v = getConfig('enano_beta_version')) $r .= $b.$v;
+ − 1186
if($v = getConfig('enano_alpha_version')) $r .= $a.$v;
+ − 1187
if ( defined('ENANO_NIGHTLY') && !$no_nightly )
+ − 1188
{
+ − 1189
$nightlytag = ENANO_NIGHTLY_MONTH . '-' . ENANO_NIGHTLY_DAY . '-' . ENANO_NIGHTLY_YEAR;
+ − 1190
$nightlylong = ' nightly; build date: ' . ENANO_NIGHTLY_MONTH . '-' . ENANO_NIGHTLY_DAY . '-' . ENANO_NIGHTLY_YEAR;
+ − 1191
$r = ( $long ) ? $r . $nightlylong : $r . '-nightly-' . $nightlytag;
+ − 1192
}
+ − 1193
return $r;
+ − 1194
}
+ − 1195
76
+ − 1196
/**
132
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 1197
* Give the codename of the release of Enano being run.
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 1198
* @return string
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 1199
*/
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 1200
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 1201
function enano_codename()
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 1202
{
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 1203
$names = array(
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 1204
'1.0RC1' => 'Leprechaun',
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 1205
'1.0RC2' => 'Clurichaun',
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 1206
'1.0RC3' => 'Druid',
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 1207
'1.0' => 'Banshee',
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 1208
'1.0.1' => 'Loch Ness',
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 1209
'1.0.1.1'=> 'Loch Ness internal bugfix build',
145
+ − 1210
'1.0.2b1'=> 'Coblynau unstable',
132
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 1211
'1.0.2' => 'Coblynau'
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 1212
);
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 1213
$version = enano_version();
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 1214
if ( isset($names[$version]) )
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 1215
{
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 1216
return $names[$version];
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 1217
}
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 1218
return 'Anonymous build';
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 1219
}
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 1220
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 1221
/**
76
+ − 1222
* What kinda sh** was I thinking when I wrote this. Deprecated.
+ − 1223
*/
+ − 1224
1
+ − 1225
function _dualurlenc($t) {
+ − 1226
return rawurlencode(rawurlencode($t));
+ − 1227
}
76
+ − 1228
+ − 1229
/**
+ − 1230
* Badly named function to send back eval'able Javascript code with an error message. Deprecated, use JSON instead.
+ − 1231
* @param string Message to send
+ − 1232
*/
+ − 1233
1
+ − 1234
function _die($t) {
+ − 1235
$_ob = 'document.getElementById("ajaxEditContainer").innerHTML = unescape(\'' . rawurlencode('' . $t . '') . '\')';
+ − 1236
die($_ob);
+ − 1237
}
+ − 1238
76
+ − 1239
/**
+ − 1240
* Same as _die(), but sends an SQL backtrace with the error message, and doesn't halt execution.
+ − 1241
* @param string Message to send
+ − 1242
*/
+ − 1243
1
+ − 1244
function jsdie($text) {
+ − 1245
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 1246
$text = rawurlencode($text . "\n\nSQL Backtrace:\n" . $db->sql_backtrace());
+ − 1247
echo 'document.getElementById("ajaxEditContainer").innerHTML = unescape(\''.$text.'\');';
+ − 1248
}
+ − 1249
+ − 1250
/**
+ − 1251
* Capitalizes the first letter of a string
+ − 1252
* @param $text string the text to be transformed
+ − 1253
* @return string
+ − 1254
*/
76
+ − 1255
1
+ − 1256
function capitalize_first_letter($text)
+ − 1257
{
+ − 1258
return strtoupper(substr($text, 0, 1)) . substr($text, 1);
+ − 1259
}
+ − 1260
+ − 1261
/**
+ − 1262
* Checks if a value in a bitfield is on or off
+ − 1263
* @param $bitfield int the bit-field value
+ − 1264
* @param $value int the value to switch off
+ − 1265
* @return bool
+ − 1266
*/
76
+ − 1267
1
+ − 1268
function is_bit($bitfield, $value)
+ − 1269
{
+ − 1270
return ( $bitfield & $value ) ? true : false;
+ − 1271
}
+ − 1272
+ − 1273
/**
+ − 1274
* Trims spaces/newlines from the beginning and end of a string
+ − 1275
* @param $text the text to process
+ − 1276
* @return string
+ − 1277
*/
76
+ − 1278
1
+ − 1279
function trim_spaces($text)
+ − 1280
{
+ − 1281
$d = true;
+ − 1282
while($d)
+ − 1283
{
+ − 1284
$c = substr($text, 0, 1);
+ − 1285
$a = substr($text, strlen($text)-1, strlen($text));
+ − 1286
if($c == "\n" || $c == "\r" || $c == "\t" || $c == ' ') $text = substr($text, 1, strlen($text));
+ − 1287
elseif($a == "\n" || $a == "\r" || $a == "\t" || $a == ' ') $text = substr($text, 0, strlen($text)-1);
+ − 1288
else $d = false;
+ − 1289
}
+ − 1290
return $text;
+ − 1291
}
+ − 1292
+ − 1293
/**
+ − 1294
* Enano-ese equivalent of str_split() which is only found in PHP5
+ − 1295
* @param $text string the text to split
+ − 1296
* @param $inc int size of each block
+ − 1297
* @return array
+ − 1298
*/
76
+ − 1299
1
+ − 1300
function enano_str_split($text, $inc = 1)
+ − 1301
{
76
+ − 1302
if($inc < 1)
14
ce6053bb48d8
Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
diff
changeset
+ − 1303
{
ce6053bb48d8
Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
diff
changeset
+ − 1304
return false;
ce6053bb48d8
Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
diff
changeset
+ − 1305
}
ce6053bb48d8
Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
diff
changeset
+ − 1306
if($inc >= strlen($text))
ce6053bb48d8
Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
diff
changeset
+ − 1307
{
ce6053bb48d8
Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
diff
changeset
+ − 1308
return Array($text);
ce6053bb48d8
Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
diff
changeset
+ − 1309
}
1
+ − 1310
$len = ceil(strlen($text) / $inc);
+ − 1311
$ret = Array();
14
ce6053bb48d8
Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
diff
changeset
+ − 1312
for ( $i = 0; $i < strlen($text); $i = $i + $inc )
1
+ − 1313
{
+ − 1314
$ret[] = substr($text, $i, $inc);
+ − 1315
}
+ − 1316
return $ret;
+ − 1317
}
+ − 1318
+ − 1319
/**
+ − 1320
* Converts a hexadecimal number to a binary string.
+ − 1321
* @param text string hexadecimal number
+ − 1322
* @return string
+ − 1323
*/
+ − 1324
function hex2bin($text)
+ − 1325
{
+ − 1326
$arr = enano_str_split($text, 2);
+ − 1327
$ret = '';
+ − 1328
for ($i=0; $i<sizeof($arr); $i++)
+ − 1329
{
+ − 1330
$ret .= chr(hexdec($arr[$i]));
+ − 1331
}
+ − 1332
return $ret;
+ − 1333
}
+ − 1334
+ − 1335
/**
+ − 1336
* Generates and/or prints a human-readable backtrace
76
+ − 1337
* @param bool $return - if true, this function returns a string, otherwise returns null and prints the backtrace
1
+ − 1338
* @return mixed
+ − 1339
*/
76
+ − 1340
1
+ − 1341
function enano_debug_print_backtrace($return = false)
+ − 1342
{
+ − 1343
ob_start();
+ − 1344
echo '<pre>';
19
5d003b6c9e89
Added demo mode functionality to various parts of Enano (unlocked only with a plugin) and fixed groups table
Dan
diff
changeset
+ − 1345
if ( function_exists('debug_print_backtrace') )
5d003b6c9e89
Added demo mode functionality to various parts of Enano (unlocked only with a plugin) and fixed groups table
Dan
diff
changeset
+ − 1346
{
5d003b6c9e89
Added demo mode functionality to various parts of Enano (unlocked only with a plugin) and fixed groups table
Dan
diff
changeset
+ − 1347
debug_print_backtrace();
5d003b6c9e89
Added demo mode functionality to various parts of Enano (unlocked only with a plugin) and fixed groups table
Dan
diff
changeset
+ − 1348
}
5d003b6c9e89
Added demo mode functionality to various parts of Enano (unlocked only with a plugin) and fixed groups table
Dan
diff
changeset
+ − 1349
else
5d003b6c9e89
Added demo mode functionality to various parts of Enano (unlocked only with a plugin) and fixed groups table
Dan
diff
changeset
+ − 1350
{
5d003b6c9e89
Added demo mode functionality to various parts of Enano (unlocked only with a plugin) and fixed groups table
Dan
diff
changeset
+ − 1351
echo '<b>Warning:</b> No debug_print_backtrace() support!';
5d003b6c9e89
Added demo mode functionality to various parts of Enano (unlocked only with a plugin) and fixed groups table
Dan
diff
changeset
+ − 1352
}
1
+ − 1353
echo '</pre>';
+ − 1354
$c = ob_get_contents();
+ − 1355
ob_end_clean();
+ − 1356
if($return) return $c;
+ − 1357
else echo $c;
+ − 1358
return null;
+ − 1359
}
+ − 1360
+ − 1361
/**
+ − 1362
* Like rawurlencode(), but encodes all characters
+ − 1363
* @param string $text the text to encode
+ − 1364
* @param optional string $prefix text before each hex character
+ − 1365
* @param optional string $suffix text after each hex character
+ − 1366
* @return string
+ − 1367
*/
76
+ − 1368
1
+ − 1369
function hexencode($text, $prefix = '%', $suffix = '')
+ − 1370
{
+ − 1371
$arr = enano_str_split($text);
+ − 1372
$r = '';
+ − 1373
foreach($arr as $a)
+ − 1374
{
+ − 1375
$nibble = (string)dechex(ord($a));
+ − 1376
if(strlen($nibble) == 1) $nibble = '0' . $nibble;
+ − 1377
$r .= $prefix . $nibble . $suffix;
+ − 1378
}
+ − 1379
return $r;
+ − 1380
}
+ − 1381
+ − 1382
/**
+ − 1383
* Enano-ese equivalent of get_magic_quotes_gpc()
+ − 1384
* @return bool
+ − 1385
*/
76
+ − 1386
1
+ − 1387
function enano_get_magic_quotes_gpc()
+ − 1388
{
+ − 1389
if(function_exists('get_magic_quotes_gpc'))
+ − 1390
{
+ − 1391
return ( get_magic_quotes_gpc() == 1 );
+ − 1392
}
+ − 1393
else
+ − 1394
{
+ − 1395
return ( strtolower(@ini_get('magic_quotes_gpc')) == '1' );
+ − 1396
}
+ − 1397
}
+ − 1398
+ − 1399
/**
+ − 1400
* Recursive stripslashes()
+ − 1401
* @param array
+ − 1402
* @return array
+ − 1403
*/
76
+ − 1404
1
+ − 1405
function stripslashes_recurse($arr)
+ − 1406
{
+ − 1407
foreach($arr as $k => $xxxx)
+ − 1408
{
+ − 1409
$val =& $arr[$k];
+ − 1410
if(is_string($val))
+ − 1411
$val = stripslashes($val);
+ − 1412
elseif(is_array($val))
+ − 1413
$val = stripslashes_recurse($val);
+ − 1414
}
+ − 1415
return $arr;
+ − 1416
}
+ − 1417
+ − 1418
/**
14
ce6053bb48d8
Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
diff
changeset
+ − 1419
* Recursive function to remove all NUL bytes from a string
ce6053bb48d8
Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
diff
changeset
+ − 1420
* @param array
ce6053bb48d8
Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
diff
changeset
+ − 1421
* @return array
ce6053bb48d8
Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
diff
changeset
+ − 1422
*/
76
+ − 1423
14
ce6053bb48d8
Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
diff
changeset
+ − 1424
function strip_nul_chars($arr)
ce6053bb48d8
Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
diff
changeset
+ − 1425
{
ce6053bb48d8
Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
diff
changeset
+ − 1426
foreach($arr as $k => $xxxx_unused)
ce6053bb48d8
Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
diff
changeset
+ − 1427
{
ce6053bb48d8
Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
diff
changeset
+ − 1428
$val =& $arr[$k];
ce6053bb48d8
Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
diff
changeset
+ − 1429
if(is_string($val))
ce6053bb48d8
Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
diff
changeset
+ − 1430
$val = str_replace("\000", '', $val);
ce6053bb48d8
Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
diff
changeset
+ − 1431
elseif(is_array($val))
ce6053bb48d8
Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
diff
changeset
+ − 1432
$val = strip_nul_chars($val);
ce6053bb48d8
Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
diff
changeset
+ − 1433
}
ce6053bb48d8
Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
diff
changeset
+ − 1434
return $arr;
ce6053bb48d8
Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
diff
changeset
+ − 1435
}
ce6053bb48d8
Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
diff
changeset
+ − 1436
ce6053bb48d8
Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
diff
changeset
+ − 1437
/**
76
+ − 1438
* If magic_quotes_gpc is on, calls stripslashes() on everything in $_GET/$_POST/$_COOKIE. Also strips any NUL characters from incoming requests, as these are typically malicious.
14
ce6053bb48d8
Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
diff
changeset
+ − 1439
* @ignore - this doesn't work too well in my tests
1
+ − 1440
* @todo port version from the PHP manual
+ − 1441
* @return void
+ − 1442
*/
+ − 1443
function strip_magic_quotes_gpc()
+ − 1444
{
+ − 1445
if(enano_get_magic_quotes_gpc())
+ − 1446
{
40
+ − 1447
$_POST = stripslashes_recurse($_POST);
+ − 1448
$_GET = stripslashes_recurse($_GET);
+ − 1449
$_COOKIE = stripslashes_recurse($_COOKIE);
+ − 1450
$_REQUEST = stripslashes_recurse($_REQUEST);
1
+ − 1451
}
40
+ − 1452
$_POST = strip_nul_chars($_POST);
+ − 1453
$_GET = strip_nul_chars($_GET);
+ − 1454
$_COOKIE = strip_nul_chars($_COOKIE);
+ − 1455
$_REQUEST = strip_nul_chars($_REQUEST);
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
+ − 1456
$_POST = decode_unicode_array($_POST);
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
+ − 1457
$_GET = decode_unicode_array($_GET);
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
+ − 1458
$_COOKIE = decode_unicode_array($_COOKIE);
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
+ − 1459
$_REQUEST = decode_unicode_array($_REQUEST);
1
+ − 1460
}
+ − 1461
+ − 1462
/**
+ − 1463
* A very basic single-character compression algorithm for binary strings/bitfields
76
+ − 1464
* @param string $bits the text to compress, should be only 1s and 0s
1
+ − 1465
* @return string
+ − 1466
*/
76
+ − 1467
1
+ − 1468
function compress_bitfield($bits)
+ − 1469
{
+ − 1470
$crc32 = crc32($bits);
+ − 1471
$bits .= '0';
+ − 1472
$start_pos = 0;
+ − 1473
$current = substr($bits, 1, 1);
+ − 1474
$last = substr($bits, 0, 1);
+ − 1475
$chunk_size = 1;
+ − 1476
$len = strlen($bits);
+ − 1477
$crc = $len;
+ − 1478
$crcval = 0;
+ − 1479
for ( $i = 1; $i < $len; $i++ )
+ − 1480
{
+ − 1481
$current = substr($bits, $i, 1);
+ − 1482
$last = substr($bits, $i - 1, 1);
+ − 1483
$next = substr($bits, $i + 1, 1);
+ − 1484
// Are we on the last character?
+ − 1485
if($current == $last && $i+1 < $len)
+ − 1486
$chunk_size++;
+ − 1487
else
+ − 1488
{
+ − 1489
if($i+1 == $len && $current == $next)
+ − 1490
{
+ − 1491
// This character completes a chunk
+ − 1492
$chunk_size++;
+ − 1493
$i++;
+ − 1494
$chunk = substr($bits, $start_pos, $chunk_size);
+ − 1495
$chunklen = strlen($chunk);
+ − 1496
$newchunk = $last . '[' . $chunklen . ']';
+ − 1497
$newlen = strlen($newchunk);
+ − 1498
$bits = substr($bits, 0, $start_pos) . $newchunk . substr($bits, $i, $len);
+ − 1499
$chunk_size = 1;
+ − 1500
$i = $start_pos + $newlen;
+ − 1501
$start_pos = $i;
+ − 1502
$len = strlen($bits);
+ − 1503
$crcval = $crcval + $chunklen;
+ − 1504
}
+ − 1505
else
+ − 1506
{
+ − 1507
// Last character completed a chunk
+ − 1508
$chunk = substr($bits, $start_pos, $chunk_size);
+ − 1509
$chunklen = strlen($chunk);
+ − 1510
$newchunk = $last . '[' . $chunklen . '],';
+ − 1511
$newlen = strlen($newchunk);
+ − 1512
$bits = substr($bits, 0, $start_pos) . $newchunk . substr($bits, $i, $len);
+ − 1513
$chunk_size = 1;
+ − 1514
$i = $start_pos + $newlen;
+ − 1515
$start_pos = $i;
+ − 1516
$len = strlen($bits);
+ − 1517
$crcval = $crcval + $chunklen;
+ − 1518
}
+ − 1519
}
+ − 1520
}
+ − 1521
if($crc != $crcval)
+ − 1522
{
+ − 1523
echo __FUNCTION__.'(): ERROR: length check failed, this is a bug in the algorithm<br />Debug info: aiming for a CRC val of '.$crc.', got '.$crcval;
+ − 1524
return false;
+ − 1525
}
+ − 1526
$compressed = 'cbf:len='.$crc.';crc='.dechex($crc32).';data='.$bits.'|end';
+ − 1527
return $compressed;
+ − 1528
}
+ − 1529
+ − 1530
/**
+ − 1531
* Uncompresses a bitfield compressed with compress_bitfield()
+ − 1532
* @param string $bits the compressed bitfield
+ − 1533
* @return string the uncompressed, original (we hope) bitfield OR bool false on error
+ − 1534
*/
76
+ − 1535
1
+ − 1536
function uncompress_bitfield($bits)
+ − 1537
{
+ − 1538
if(substr($bits, 0, 4) != 'cbf:')
+ − 1539
{
+ − 1540
echo __FUNCTION__.'(): ERROR: Invalid stream';
+ − 1541
return false;
+ − 1542
}
+ − 1543
$len = intval(substr($bits, strpos($bits, 'len=')+4, strpos($bits, ';')-strpos($bits, 'len=')-4));
+ − 1544
$crc = substr($bits, strpos($bits, 'crc=')+4, 8);
+ − 1545
$data = substr($bits, strpos($bits, 'data=')+5, strpos($bits, '|end')-strpos($bits, 'data=')-5);
+ − 1546
$data = explode(',', $data);
+ − 1547
foreach($data as $a => $b)
+ − 1548
{
+ − 1549
$d =& $data[$a];
+ − 1550
$char = substr($d, 0, 1);
+ − 1551
$dlen = intval(substr($d, 2, strlen($d)-1));
+ − 1552
$s = '';
+ − 1553
for($i=0;$i<$dlen;$i++,$s.=$char);
+ − 1554
$d = $s;
+ − 1555
unset($s, $dlen, $char);
+ − 1556
}
+ − 1557
$decompressed = implode('', $data);
+ − 1558
$decompressed = substr($decompressed, 0, -1);
+ − 1559
$dcrc = (string)dechex(crc32($decompressed));
+ − 1560
if($dcrc != $crc)
+ − 1561
{
+ − 1562
echo __FUNCTION__.'(): ERROR: CRC check failed<br />debug info:<br />original crc: '.$crc.'<br />decomp\'ed crc: '.$dcrc.'<br />';
+ − 1563
return false;
+ − 1564
}
+ − 1565
return $decompressed;
+ − 1566
}
+ − 1567
+ − 1568
/**
+ − 1569
* Exports a MySQL table into a SQL string.
+ − 1570
* @param string $table The name of the table to export
+ − 1571
* @param bool $structure If true, include a CREATE TABLE command
+ − 1572
* @param bool $data If true, include the contents of the table
+ − 1573
* @param bool $compact If true, omits newlines between parts of SQL statements, use in Enano database exporter
+ − 1574
* @return string
+ − 1575
*/
+ − 1576
+ − 1577
function export_table($table, $structure = true, $data = true, $compact = false)
+ − 1578
{
+ − 1579
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 1580
$struct_keys = '';
+ − 1581
$divider = (!$compact) ? "\n" : "\n";
+ − 1582
$spacer1 = (!$compact) ? "\n" : " ";
+ − 1583
$spacer2 = (!$compact) ? " " : " ";
+ − 1584
$rowspacer = (!$compact) ? "\n " : " ";
+ − 1585
$index_list = Array();
+ − 1586
$cols = $db->sql_query('SHOW COLUMNS IN '.$table.';');
+ − 1587
if(!$cols)
+ − 1588
{
+ − 1589
echo 'export_table(): Error getting column list: '.$db->get_error_text().'<br />';
+ − 1590
return false;
+ − 1591
}
+ − 1592
$col = Array();
+ − 1593
$sqlcol = Array();
+ − 1594
$collist = Array();
+ − 1595
$pri_keys = Array();
+ − 1596
// Using fetchrow_num() here to compensate for MySQL l10n
+ − 1597
while( $row = $db->fetchrow_num() )
+ − 1598
{
+ − 1599
$field =& $row[0];
+ − 1600
$type =& $row[1];
+ − 1601
$null =& $row[2];
+ − 1602
$key =& $row[3];
+ − 1603
$def =& $row[4];
+ − 1604
$extra =& $row[5];
+ − 1605
$col[] = Array(
+ − 1606
'name'=>$field,
+ − 1607
'type'=>$type,
+ − 1608
'null'=>$null,
+ − 1609
'key'=>$key,
+ − 1610
'default'=>$def,
+ − 1611
'extra'=>$extra,
+ − 1612
);
+ − 1613
$collist[] = $field;
+ − 1614
}
76
+ − 1615
1
+ − 1616
if ( $structure )
+ − 1617
{
+ − 1618
$db->sql_query('SET SQL_QUOTE_SHOW_CREATE = 0;');
+ − 1619
$struct = $db->sql_query('SHOW CREATE TABLE '.$table.';');
+ − 1620
if ( !$struct )
+ − 1621
$db->_die();
+ − 1622
$row = $db->fetchrow_num();
+ − 1623
$db->free_result();
+ − 1624
$struct = $row[1];
+ − 1625
$struct = preg_replace("/\n\) ENGINE=(.+)$/", "\n);", $struct);
+ − 1626
unset($row);
+ − 1627
if ( $compact )
+ − 1628
{
+ − 1629
$struct_arr = explode("\n", $struct);
+ − 1630
foreach ( $struct_arr as $i => $leg )
+ − 1631
{
+ − 1632
if ( $i == 0 )
+ − 1633
continue;
+ − 1634
$test = trim($leg);
+ − 1635
if ( empty($test) )
+ − 1636
{
+ − 1637
unset($struct_arr[$i]);
+ − 1638
continue;
+ − 1639
}
+ − 1640
$struct_arr[$i] = preg_replace('/^([\s]*)/', ' ', $leg);
+ − 1641
}
+ − 1642
$struct = implode("", $struct_arr);
+ − 1643
}
+ − 1644
}
76
+ − 1645
1
+ − 1646
// Structuring complete
+ − 1647
if($data)
+ − 1648
{
+ − 1649
$datq = $db->sql_query('SELECT * FROM '.$table.';');
+ − 1650
if(!$datq)
+ − 1651
{
+ − 1652
echo 'export_table(): Error getting column list: '.$db->get_error_text().'<br />';
+ − 1653
return false;
+ − 1654
}
+ − 1655
if($db->numrows() < 1)
+ − 1656
{
+ − 1657
if($structure) return $struct;
+ − 1658
else return '';
+ − 1659
}
+ − 1660
$rowdata = Array();
+ − 1661
$dataqs = Array();
+ − 1662
$insert_strings = Array();
+ − 1663
$z = false;
+ − 1664
while($row = $db->fetchrow_num())
+ − 1665
{
+ − 1666
$z = false;
+ − 1667
foreach($row as $i => $cell)
+ − 1668
{
+ − 1669
$str = mysql_encode_column($cell, $col[$i]['type']);
+ − 1670
$rowdata[] = $str;
+ − 1671
}
+ − 1672
$dataqs2 = implode(",$rowspacer", $dataqs) . ",$rowspacer" . '( ' . implode(', ', $rowdata) . ' )';
+ − 1673
$ins = 'INSERT INTO '.$table.'( '.implode(',', $collist).' ) VALUES' . $dataqs2 . ";";
+ − 1674
if ( strlen( $ins ) > MYSQL_MAX_PACKET_SIZE )
+ − 1675
{
+ − 1676
// We've exceeded the maximum allowed packet size for MySQL - separate this into a different query
+ − 1677
$insert_strings[] = 'INSERT INTO '.$table.'( '.implode(',', $collist).' ) VALUES' . implode(",$rowspacer", $dataqs) . ";";;
+ − 1678
$dataqs = Array('( ' . implode(', ', $rowdata) . ' )');
+ − 1679
$z = true;
+ − 1680
}
+ − 1681
else
+ − 1682
{
+ − 1683
$dataqs[] = '( ' . implode(', ', $rowdata) . ' )';
+ − 1684
}
+ − 1685
$rowdata = Array();
+ − 1686
}
+ − 1687
if ( !$z )
+ − 1688
{
+ − 1689
$insert_strings[] = 'INSERT INTO '.$table.'( '.implode(',', $collist).' ) VALUES' . implode(",$rowspacer", $dataqs) . ";";;
+ − 1690
$dataqs = Array();
+ − 1691
}
+ − 1692
$datstring = implode($divider, $insert_strings);
+ − 1693
}
+ − 1694
if($structure && !$data) return $struct;
+ − 1695
elseif(!$structure && $data) return $datstring;
+ − 1696
elseif($structure && $data) return $struct . $divider . $datstring;
+ − 1697
elseif(!$structure && !$data) return '';
+ − 1698
}
+ − 1699
+ − 1700
/**
+ − 1701
* Encodes a string value for use in an INSERT statement for given column type $type.
+ − 1702
* @access private
+ − 1703
*/
76
+ − 1704
1
+ − 1705
function mysql_encode_column($input, $type)
+ − 1706
{
+ − 1707
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 1708
// Decide whether to quote the string or not
+ − 1709
if(substr($type, 0, 7) == 'varchar' || $type == 'datetime' || $type == 'text' || $type == 'tinytext' || $type == 'smalltext' || $type == 'longtext' || substr($type, 0, 4) == 'char')
+ − 1710
{
+ − 1711
$str = "'" . $db->escape($input) . "'";
+ − 1712
}
+ − 1713
elseif(in_array($type, Array('blob', 'longblob', 'mediumblob', 'smallblob')) || substr($type, 0, 6) == 'binary' || substr($type, 0, 9) == 'varbinary')
+ − 1714
{
+ − 1715
$str = '0x' . hexencode($input, '', '');
+ − 1716
}
+ − 1717
elseif(is_null($input))
+ − 1718
{
+ − 1719
$str = 'NULL';
+ − 1720
}
+ − 1721
else
+ − 1722
{
+ − 1723
$str = (string)$input;
+ − 1724
}
+ − 1725
return $str;
+ − 1726
}
+ − 1727
+ − 1728
/**
+ − 1729
* Creates an associative array defining which file extensions are allowed and which ones aren't
+ − 1730
* @return array keyname will be a file extension, value will be true or false
+ − 1731
*/
+ − 1732
+ − 1733
function fetch_allowed_extensions()
+ − 1734
{
+ − 1735
global $mime_types;
+ − 1736
$bits = getConfig('allowed_mime_types');
+ − 1737
if(!$bits) return Array(false);
+ − 1738
$bits = uncompress_bitfield($bits);
+ − 1739
if(!$bits) return Array(false);
+ − 1740
$bits = enano_str_split($bits, 1);
+ − 1741
$ret = Array();
+ − 1742
$mt = array_keys($mime_types);
+ − 1743
foreach($bits as $i => $b)
+ − 1744
{
+ − 1745
$ret[$mt[$i]] = ( $b == '1' ) ? true : false;
+ − 1746
}
+ − 1747
return $ret;
+ − 1748
}
+ − 1749
+ − 1750
/**
+ − 1751
* Generates a random key suitable for encryption
+ − 1752
* @param int $len the length of the key
+ − 1753
* @return string a BINARY key
+ − 1754
*/
+ − 1755
+ − 1756
function randkey($len = 32)
+ − 1757
{
+ − 1758
$key = '';
+ − 1759
for($i=0;$i<$len;$i++)
+ − 1760
{
+ − 1761
$key .= chr(mt_rand(0, 255));
+ − 1762
}
+ − 1763
return $key;
+ − 1764
}
+ − 1765
+ − 1766
/**
+ − 1767
* Decodes a hex string.
+ − 1768
* @param string $hex The hex code to decode
+ − 1769
* @return string
+ − 1770
*/
+ − 1771
+ − 1772
function hexdecode($hex)
+ − 1773
{
+ − 1774
$hex = enano_str_split($hex, 2);
+ − 1775
$bin_key = '';
+ − 1776
foreach($hex as $nibble)
+ − 1777
{
+ − 1778
$byte = chr(hexdec($nibble));
+ − 1779
$bin_key .= $byte;
+ − 1780
}
+ − 1781
return $bin_key;
+ − 1782
}
+ − 1783
+ − 1784
/**
+ − 1785
* Enano's own (almost) bulletproof HTML sanitizer.
+ − 1786
* @param string $html The input HTML
+ − 1787
* @return string cleaned HTML
+ − 1788
*/
+ − 1789
+ − 1790
function sanitize_html($html, $filter_php = true)
+ − 1791
{
162
+ − 1792
// Random seed for substitution
+ − 1793
$rand_seed = md5( sha1(microtime()) . mt_rand() );
+ − 1794
+ − 1795
// Strip out comments that are already escaped
+ − 1796
preg_match_all('/<!--(.*?)-->/', $html, $comment_match);
+ − 1797
$i = 0;
+ − 1798
foreach ( $comment_match[0] as $comment )
+ − 1799
{
+ − 1800
$html = str_replace_once($comment, "{HTMLCOMMENT:$i:$rand_seed}", $html);
+ − 1801
$i++;
+ − 1802
}
+ − 1803
+ − 1804
// Strip out code sections that will be postprocessed by Text_Wiki
+ − 1805
preg_match_all(';^<code(\s[^>]*)?>((?:(?R)|.)*?)\n</code>(\s|$);msi', $html, $code_match);
+ − 1806
$i = 0;
+ − 1807
foreach ( $code_match[0] as $code )
+ − 1808
{
+ − 1809
$html = str_replace_once($code, "{TW_CODE:$i:$rand_seed}", $html);
+ − 1810
$i++;
+ − 1811
}
76
+ − 1812
1
+ − 1813
$html = preg_replace('#<([a-z]+)([\s]+)([^>]+?)'.htmlalternatives('javascript:').'(.+?)>(.*?)</\\1>#is', '<\\1\\2\\3javascript:\\59>\\60</\\1>', $html);
+ − 1814
$html = preg_replace('#<([a-z]+)([\s]+)([^>]+?)'.htmlalternatives('javascript:').'(.+?)>#is', '<\\1\\2\\3javascript:\\59>', $html);
76
+ − 1815
1
+ − 1816
if($filter_php)
+ − 1817
$html = str_replace(
+ − 1818
Array('<?php', '<?', '<%', '?>', '%>'),
+ − 1819
Array('<?php', '<?', '<%', '?>', '%>'),
+ − 1820
$html);
76
+ − 1821
1
+ − 1822
$tag_whitelist = array_keys ( setupAttributeWhitelist() );
+ − 1823
if ( !$filter_php )
+ − 1824
$tag_whitelist[] = '?php';
163
+ − 1825
// allow HTML comments
+ − 1826
$tag_whitelist[] = '!--';
1
+ − 1827
$len = strlen($html);
+ − 1828
$in_quote = false;
+ − 1829
$quote_char = '';
+ − 1830
$tag_start = 0;
+ − 1831
$tag_name = '';
+ − 1832
$in_tag = false;
+ − 1833
$trk_name = false;
+ − 1834
for ( $i = 0; $i < $len; $i++ )
+ − 1835
{
+ − 1836
$chr = $html{$i};
+ − 1837
$prev = ( $i == 0 ) ? '' : $html{ $i - 1 };
+ − 1838
$next = ( ( $i + 1 ) == $len ) ? '' : $html { $i + 1 };
+ − 1839
if ( $in_quote && $in_tag )
+ − 1840
{
+ − 1841
if ( $quote_char == $chr && $prev != '\\' )
+ − 1842
$in_quote = false;
+ − 1843
}
+ − 1844
elseif ( ( $chr == '"' || $chr == "'" ) && $prev != '\\' && $in_tag )
+ − 1845
{
+ − 1846
$in_quote = true;
+ − 1847
$quote_char = $chr;
+ − 1848
}
+ − 1849
if ( $chr == '<' && !$in_tag && $next != '/' )
76
+ − 1850
{
1
+ − 1851
// start of a tag
+ − 1852
$tag_start = $i;
+ − 1853
$in_tag = true;
+ − 1854
$trk_name = true;
+ − 1855
}
+ − 1856
elseif ( !$in_quote && $in_tag && $chr == '>' )
+ − 1857
{
+ − 1858
$full_tag = substr($html, $tag_start, ( $i - $tag_start ) + 1 );
+ − 1859
$l = strlen($tag_name) + 2;
+ − 1860
$attribs_only = trim( substr($full_tag, $l, ( strlen($full_tag) - $l - 1 ) ) );
76
+ − 1861
1
+ − 1862
// Debugging message
+ − 1863
// echo htmlspecialchars($full_tag) . '<br />';
76
+ − 1864
1
+ − 1865
if ( !in_array($tag_name, $tag_whitelist) )
+ − 1866
{
+ − 1867
// Illegal tag
+ − 1868
//echo $tag_name . ' ';
76
+ − 1869
1
+ − 1870
$s = ( empty($attribs_only) ) ? '' : ' ';
76
+ − 1871
1
+ − 1872
$sanitized = '<' . $tag_name . $s . $attribs_only . '>';
76
+ − 1873
1
+ − 1874
$html = substr($html, 0, $tag_start) . $sanitized . substr($html, $i + 1);
+ − 1875
$html = str_replace('</' . $tag_name . '>', '</' . $tag_name . '>', $html);
+ − 1876
$new_i = $tag_start + strlen($sanitized);
76
+ − 1877
1
+ − 1878
$len = strlen($html);
+ − 1879
$i = $new_i;
76
+ − 1880
1
+ − 1881
$in_tag = false;
+ − 1882
$tag_name = '';
+ − 1883
continue;
+ − 1884
}
+ − 1885
else
+ − 1886
{
163
+ − 1887
// If not filtering PHP, don't bother to strip
1
+ − 1888
if ( $tag_name == '?php' && !$filter_php )
+ − 1889
continue;
163
+ − 1890
// If this is a comment, likewise skip this "tag"
+ − 1891
if ( $tag_name == '!--' )
+ − 1892
continue;
1
+ − 1893
$f = fixTagAttributes( $attribs_only, $tag_name );
+ − 1894
$s = ( empty($f) ) ? '' : ' ';
76
+ − 1895
1
+ − 1896
$sanitized = '<' . $tag_name . $f . '>';
+ − 1897
$new_i = $tag_start + strlen($sanitized);
76
+ − 1898
1
+ − 1899
$html = substr($html, 0, $tag_start) . $sanitized . substr($html, $i + 1);
+ − 1900
$len = strlen($html);
+ − 1901
$i = $new_i;
76
+ − 1902
1
+ − 1903
$in_tag = false;
+ − 1904
$tag_name = '';
+ − 1905
continue;
+ − 1906
}
+ − 1907
}
+ − 1908
elseif ( $in_tag && $trk_name )
+ − 1909
{
21
663fcf528726
Updated all version numbers back to Banshee; a few preliminary steps towards full UTF-8 support in page URLs
Dan
diff
changeset
+ − 1910
$is_alphabetical = ( strtolower($chr) != strtoupper($chr) || in_array($chr, array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')) || $chr == '?' || $chr == '!' || $chr == '-' );
1
+ − 1911
if ( $is_alphabetical )
+ − 1912
$tag_name .= $chr;
+ − 1913
else
+ − 1914
{
+ − 1915
$trk_name = false;
+ − 1916
}
+ − 1917
}
76
+ − 1918
1
+ − 1919
}
163
+ − 1920
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
+ − 1921
// Vulnerability from ha.ckers.org/xss.html:
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 1922
// <script src="http://foo.com/xss.js"
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 1923
// <
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 1924
// The rule is so specific because everything else will have been filtered by now
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 1925
$html = preg_replace('/<(script|iframe)(.+?)src=([^>]*)</i', '<\\1\\2src=\\3<', $html);
76
+ − 1926
162
+ − 1927
// Restore stripped comments
+ − 1928
$i = 0;
+ − 1929
foreach ( $comment_match[0] as $comment )
+ − 1930
{
+ − 1931
$html = str_replace_once("{HTMLCOMMENT:$i:$rand_seed}", $comment, $html);
+ − 1932
$i++;
+ − 1933
}
+ − 1934
+ − 1935
// Restore stripped code
+ − 1936
$i = 0;
+ − 1937
foreach ( $code_match[0] as $code )
+ − 1938
{
+ − 1939
$html = str_replace_once("{TW_CODE:$i:$rand_seed}", $code, $html);
+ − 1940
$i++;
+ − 1941
}
76
+ − 1942
1
+ − 1943
return $html;
76
+ − 1944
1
+ − 1945
}
+ − 1946
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
+ − 1947
/**
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
+ − 1948
* Using the same parsing code as sanitize_html(), this function adds <litewiki> tags around certain block-level elements
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
+ − 1949
* @param string $html The input HTML
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
+ − 1950
* @return string formatted HTML
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
+ − 1951
*/
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
+ − 1952
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
+ − 1953
function wikiformat_process_block($html)
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
+ − 1954
{
76
+ − 1955
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
+ − 1956
$tok1 = "<litewiki>";
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
+ − 1957
$tok2 = "</litewiki>";
76
+ − 1958
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
+ − 1959
$block_tags = array('div', 'p', 'table', 'blockquote', 'pre');
76
+ − 1960
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
+ − 1961
$len = strlen($html);
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
+ − 1962
$in_quote = false;
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
+ − 1963
$quote_char = '';
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
+ − 1964
$tag_start = 0;
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
+ − 1965
$tag_name = '';
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
+ − 1966
$in_tag = false;
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
+ − 1967
$trk_name = false;
76
+ − 1968
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
+ − 1969
$diag = 0;
76
+ − 1970
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
+ − 1971
$block_tagname = '';
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
+ − 1972
$in_blocksec = 0;
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
+ − 1973
$block_start = 0;
76
+ − 1974
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
+ − 1975
for ( $i = 0; $i < $len; $i++ )
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
+ − 1976
{
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
+ − 1977
$chr = $html{$i};
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
+ − 1978
$prev = ( $i == 0 ) ? '' : $html{ $i - 1 };
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
+ − 1979
$next = ( ( $i + 1 ) == $len ) ? '' : $html { $i + 1 };
76
+ − 1980
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
+ − 1981
// Are we inside of a quoted section?
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
+ − 1982
if ( $in_quote && $in_tag )
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
+ − 1983
{
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
+ − 1984
if ( $quote_char == $chr && $prev != '\\' )
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
+ − 1985
$in_quote = false;
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
+ − 1986
}
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
+ − 1987
elseif ( ( $chr == '"' || $chr == "'" ) && $prev != '\\' && $in_tag )
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
+ − 1988
{
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
+ − 1989
$in_quote = true;
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
+ − 1990
$quote_char = $chr;
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
+ − 1991
}
76
+ − 1992
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
+ − 1993
if ( $chr == '<' && !$in_tag && $next == '/' )
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
+ − 1994
{
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
+ − 1995
// Iterate through until we've got a tag name
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
+ − 1996
$tag_name = '';
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
+ − 1997
$i++;
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
+ − 1998
while(true)
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
+ − 1999
{
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
+ − 2000
$i++;
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
+ − 2001
// echo $i . ' ';
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
+ − 2002
$chr = $html{$i};
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
+ − 2003
$prev = ( $i == 0 ) ? '' : $html{ $i - 1 };
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
+ − 2004
$next = ( ( $i + 1 ) == $len ) ? '' : $html { $i + 1 };
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
+ − 2005
$tag_name .= $chr;
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
+ − 2006
if ( $next == '>' )
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
+ − 2007
break;
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
+ − 2008
}
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
+ − 2009
// echo '<br />';
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
+ − 2010
if ( in_array($tag_name, $block_tags) )
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
+ − 2011
{
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
+ − 2012
if ( $block_tagname == $tag_name )
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
+ − 2013
{
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
+ − 2014
$in_blocksec -= 1;
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
+ − 2015
if ( $in_blocksec == 0 )
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
+ − 2016
{
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
+ − 2017
$block_tagname = '';
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
+ − 2018
$i += 2;
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
+ − 2019
// echo 'Finished wiki litewiki wraparound calc at pos: ' . $i;
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
+ − 2020
$full_litewiki = substr($html, $block_start, ( $i - $block_start ));
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
+ − 2021
$new_text = "{$tok1}{$full_litewiki}{$tok2}";
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
+ − 2022
$html = substr($html, 0, $block_start) . $new_text . substr($html, $i);
76
+ − 2023
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
+ − 2024
$i += ( strlen($tok1) + strlen($tok2) ) - 1;
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
+ − 2025
$len = strlen($html);
76
+ − 2026
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
+ − 2027
//die('<pre>' . htmlspecialchars($html) . '</pre>');
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
+ − 2028
}
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
+ − 2029
}
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
+ − 2030
}
76
+ − 2031
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
+ − 2032
$in_tag = false;
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
+ − 2033
$in_quote = false;
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
+ − 2034
$tag_name = '';
76
+ − 2035
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
+ − 2036
continue;
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
+ − 2037
}
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
+ − 2038
else if ( $chr == '<' && !$in_tag && $next != '/' )
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
+ − 2039
{
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
+ − 2040
// start of a tag
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
+ − 2041
$tag_start = $i;
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
+ − 2042
$in_tag = true;
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
+ − 2043
$trk_name = true;
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
+ − 2044
}
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
+ − 2045
else if ( !$in_quote && $in_tag && $chr == '>' )
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
+ − 2046
{
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
+ − 2047
if ( !in_array($tag_name, $block_tags) )
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
+ − 2048
{
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
+ − 2049
// Inline tag - reset and go to the next one
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
+ − 2050
// echo '<inline ' . $tag_name . '> ';
76
+ − 2051
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
+ − 2052
$in_tag = false;
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
+ − 2053
$tag_name = '';
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
+ − 2054
continue;
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
+ − 2055
}
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
+ − 2056
else
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
+ − 2057
{
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
+ − 2058
// echo '<block: ' . $tag_name . ' @ ' . $i . '><br/>';
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
+ − 2059
if ( $in_blocksec == 0 )
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
+ − 2060
{
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
+ − 2061
//die('Found a starting tag for a block element: ' . $tag_name . ' at pos ' . $tag_start);
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
+ − 2062
$block_tagname = $tag_name;
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
+ − 2063
$block_start = $tag_start;
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
+ − 2064
$in_blocksec++;
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
+ − 2065
}
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
+ − 2066
else if ( $block_tagname == $tag_name )
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
+ − 2067
{
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
+ − 2068
$in_blocksec++;
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
+ − 2069
}
76
+ − 2070
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
+ − 2071
$in_tag = false;
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
+ − 2072
$tag_name = '';
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
+ − 2073
continue;
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
+ − 2074
}
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
+ − 2075
}
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
+ − 2076
elseif ( $in_tag && $trk_name )
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
+ − 2077
{
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
+ − 2078
$is_alphabetical = ( strtolower($chr) != strtoupper($chr) || in_array($chr, array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')) || $chr == '?' || $chr == '!' || $chr == '-' );
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
+ − 2079
if ( $is_alphabetical )
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
+ − 2080
$tag_name .= $chr;
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
+ − 2081
else
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
+ − 2082
{
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
+ − 2083
$trk_name = false;
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
+ − 2084
}
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
+ − 2085
}
76
+ − 2086
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
+ − 2087
// Tokenization complete
76
+ − 2088
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
+ − 2089
}
76
+ − 2090
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
+ − 2091
$regex = '/' . str_replace('/', '\\/', preg_quote($tok2)) . '([\s]*)' . preg_quote($tok1) . '/is';
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
+ − 2092
// die(htmlspecialchars($regex));
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
+ − 2093
$html = preg_replace($regex, '\\1', $html);
76
+ − 2094
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
+ − 2095
return $html;
76
+ − 2096
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
+ − 2097
}
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
+ − 2098
1
+ − 2099
function htmlalternatives($string)
+ − 2100
{
+ − 2101
$ret = '';
+ − 2102
for ( $i = 0; $i < strlen($string); $i++ )
+ − 2103
{
+ − 2104
$chr = $string{$i};
+ − 2105
$ch1 = ord($chr);
+ − 2106
$ch2 = dechex($ch1);
+ − 2107
$byte = '(&\\#([0]*){0,7}' . $ch1 . ';|\\\\([0]*){0,7}' . $ch1 . ';|\\\\([0]*){0,7}' . $ch2 . ';|&\\#x([0]*){0,7}' . $ch2 . ';|%([0]*){0,7}' . $ch2 . '|' . preg_quote($chr) . ')';
+ − 2108
$ret .= $byte;
+ − 2109
$ret .= '([\s]){0,2}';
+ − 2110
}
+ − 2111
return $ret;
+ − 2112
}
+ − 2113
+ − 2114
/**
+ − 2115
* Paginates (breaks into multiple pages) a MySQL result resource, which is treated as unbuffered.
+ − 2116
* @param resource The MySQL result resource. This should preferably be an unbuffered query.
+ − 2117
* @param string A template, with variables being named after the column name
+ − 2118
* @param int The number of total results. This should be determined by a second query.
+ − 2119
* @param string sprintf-style formatting string for URLs for result pages. First parameter will be start offset.
+ − 2120
* @param int Optional. Start offset in individual results. Defaults to 0.
+ − 2121
* @param int Optional. The number of results per page. Defualts to 10.
+ − 2122
* @param int Optional. An associative array of functions to call, with key names being column names, and values being function names. Values can also be an array with key 0 being either an object or a string(class name) and key 1 being a [static] method.
+ − 2123
* @param string Optional. The text to be sent before the result list, only if there are any results. Possibly the start of a table.
+ − 2124
* @param string Optional. The text to be sent after the result list, only if there are any results. Possibly the end of a table.
+ − 2125
* @return string
+ − 2126
*/
+ − 2127
+ − 2128
function paginate($q, $tpl_text, $num_results, $result_url, $start = 0, $perpage = 10, $callers = Array(), $header = '', $footer = '')
+ − 2129
{
+ − 2130
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 2131
$parser = $template->makeParserText($tpl_text);
+ − 2132
$num_pages = ceil ( $num_results / $perpage );
+ − 2133
$out = '';
+ − 2134
$i = 0;
+ − 2135
$this_page = ceil ( $start / $perpage );
76
+ − 2136
1
+ − 2137
// Build paginator
82
+ − 2138
$pg_css = ( strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') ) ?
+ − 2139
// IE-specific hack
+ − 2140
'display: block; width: 1px;':
+ − 2141
// Other browsers
+ − 2142
'display: table; margin: 10px 0 0 auto;';
+ − 2143
$begin = '<div class="tblholder" style="'. $pg_css . '">
1
+ − 2144
<table border="0" cellspacing="1" cellpadding="4">
+ − 2145
<tr><th>Page:</th>';
+ − 2146
$block = '<td class="row1" style="text-align: center;">{LINK}</td>';
+ − 2147
$end = '</tr></table></div>';
+ − 2148
$blk = $template->makeParserText($block);
+ − 2149
$inner = '';
+ − 2150
$cls = 'row2';
+ − 2151
if ( $num_pages < 5 )
+ − 2152
{
+ − 2153
for ( $i = 0; $i < $num_pages; $i++ )
+ − 2154
{
+ − 2155
$cls = ( $cls == 'row1' ) ? 'row2' : 'row1';
+ − 2156
$offset = strval($i * $perpage);
76
+ − 2157
$url = htmlspecialchars(sprintf($result_url, $offset));
1
+ − 2158
$j = $i + 1;
+ − 2159
$link = ( $offset == strval($start) ) ? "<b>$j</b>" : "<a href=".'"'."$url".'"'." style='text-decoration: none;'>$j</a>";
+ − 2160
$blk->assign_vars(array(
+ − 2161
'CLASS'=>$cls,
+ − 2162
'LINK'=>$link
+ − 2163
));
+ − 2164
$inner .= $blk->run();
+ − 2165
}
+ − 2166
}
+ − 2167
else
+ − 2168
{
+ − 2169
if ( $this_page + 5 > $num_pages )
+ − 2170
{
+ − 2171
$list = Array();
+ − 2172
$tp = $this_page;
+ − 2173
if ( $this_page + 0 == $num_pages ) $tp = $tp - 3;
+ − 2174
if ( $this_page + 1 == $num_pages ) $tp = $tp - 2;
+ − 2175
if ( $this_page + 2 == $num_pages ) $tp = $tp - 1;
+ − 2176
for ( $i = $tp - 1; $i <= $tp + 1; $i++ )
+ − 2177
{
+ − 2178
$list[] = $i;
+ − 2179
}
+ − 2180
}
+ − 2181
else
+ − 2182
{
+ − 2183
$list = Array();
+ − 2184
$current = $this_page;
+ − 2185
$lower = ( $current < 3 ) ? 1 : $current - 1;
+ − 2186
for ( $i = 0; $i < 3; $i++ )
+ − 2187
{
+ − 2188
$list[] = $lower + $i;
+ − 2189
}
+ − 2190
}
+ − 2191
$url = sprintf($result_url, '0');
+ − 2192
$link = ( 0 == $start ) ? "<b>First</b>" : "<a href=".'"'."$url".'"'." style='text-decoration: none;'>« First</a>";
+ − 2193
$blk->assign_vars(array(
+ − 2194
'CLASS'=>$cls,
+ − 2195
'LINK'=>$link
+ − 2196
));
+ − 2197
$inner .= $blk->run();
76
+ − 2198
1
+ − 2199
// if ( !in_array(1, $list) )
+ − 2200
// {
+ − 2201
// $cls = ( $cls == 'row1' ) ? 'row2' : 'row1';
+ − 2202
// $blk->assign_vars(array('CLASS'=>$cls,'LINK'=>'...'));
+ − 2203
// $inner .= $blk->run();
+ − 2204
// }
76
+ − 2205
1
+ − 2206
foreach ( $list as $i )
+ − 2207
{
+ − 2208
if ( $i == $num_pages )
+ − 2209
break;
+ − 2210
$cls = ( $cls == 'row1' ) ? 'row2' : 'row1';
+ − 2211
$offset = strval($i * $perpage);
+ − 2212
$url = sprintf($result_url, $offset);
+ − 2213
$j = $i + 1;
+ − 2214
$link = ( $offset == strval($start) ) ? "<b>$j</b>" : "<a href=".'"'."$url".'"'." style='text-decoration: none;'>$j</a>";
+ − 2215
$blk->assign_vars(array(
+ − 2216
'CLASS'=>$cls,
+ − 2217
'LINK'=>$link
+ − 2218
));
+ − 2219
$inner .= $blk->run();
+ − 2220
}
76
+ − 2221
1
+ − 2222
$total = $num_pages * $perpage - $perpage;
76
+ − 2223
1
+ − 2224
if ( $this_page < $num_pages )
+ − 2225
{
+ − 2226
// $cls = ( $cls == 'row1' ) ? 'row2' : 'row1';
+ − 2227
// $blk->assign_vars(array('CLASS'=>$cls,'LINK'=>'...'));
+ − 2228
// $inner .= $blk->run();
76
+ − 2229
1
+ − 2230
$cls = ( $cls == 'row1' ) ? 'row2' : 'row1';
+ − 2231
$offset = strval($total);
+ − 2232
$url = sprintf($result_url, $offset);
+ − 2233
$j = $i + 1;
+ − 2234
$link = ( $offset == strval($start) ) ? "<b>Last</b>" : "<a href=".'"'."$url".'"'." style='text-decoration: none;'>Last »</a>";
+ − 2235
$blk->assign_vars(array(
+ − 2236
'CLASS'=>$cls,
+ − 2237
'LINK'=>$link
+ − 2238
));
+ − 2239
$inner .= $blk->run();
+ − 2240
}
76
+ − 2241
1
+ − 2242
}
76
+ − 2243
1
+ − 2244
$inner .= '<td class="row2" style="cursor: pointer;" onclick="paginator_goto(this, '.$this_page.', '.$num_pages.', '.$perpage.', unescape(\'' . rawurlencode($result_url) . '\'));">↓</td>';
76
+ − 2245
1
+ − 2246
$paginator = "\n$begin$inner$end\n";
+ − 2247
$out .= $paginator;
76
+ − 2248
1
+ − 2249
$cls = 'row2';
76
+ − 2250
1
+ − 2251
if ( $row = $db->fetchrow($q) )
+ − 2252
{
+ − 2253
$i = 0;
+ − 2254
$out .= $header;
+ − 2255
do {
+ − 2256
$i++;
+ − 2257
if ( $i <= $start )
+ − 2258
{
+ − 2259
continue;
+ − 2260
}
+ − 2261
if ( ( $i - $start ) > $perpage )
+ − 2262
{
+ − 2263
break;
+ − 2264
}
+ − 2265
$cls = ( $cls == 'row1' ) ? 'row2' : 'row1';
+ − 2266
foreach ( $row as $j => $val )
+ − 2267
{
+ − 2268
if ( isset($callers[$j]) )
+ − 2269
{
74
68469a95658d
Various bugfixes and cleanups, too much to remember... see the diffs for what got changed :-)
Dan
diff
changeset
+ − 2270
$tmp = ( is_callable($callers[$j]) ) ? @call_user_func($callers[$j], $val, $row) : $val;
76
+ − 2271
1
+ − 2272
if ( $tmp )
+ − 2273
{
+ − 2274
$row[$j] = $tmp;
+ − 2275
}
+ − 2276
}
+ − 2277
}
+ − 2278
$parser->assign_vars($row);
+ − 2279
$parser->assign_vars(array('_css_class' => $cls));
+ − 2280
$out .= $parser->run();
+ − 2281
} while ( $row = $db->fetchrow($q) );
+ − 2282
$out .= $footer;
+ − 2283
}
76
+ − 2284
1
+ − 2285
$out .= $paginator;
76
+ − 2286
1
+ − 2287
return $out;
+ − 2288
}
+ − 2289
+ − 2290
/**
+ − 2291
* This is the same as paginate(), but it processes an array instead of a MySQL result resource.
+ − 2292
* @param array The results. Each value is simply echoed.
+ − 2293
* @param int The number of total results. This should be determined by a second query.
+ − 2294
* @param string sprintf-style formatting string for URLs for result pages. First parameter will be start offset.
+ − 2295
* @param int Optional. Start offset in individual results. Defaults to 0.
+ − 2296
* @param int Optional. The number of results per page. Defualts to 10.
+ − 2297
* @param string Optional. The text to be sent before the result list, only if there are any results. Possibly the start of a table.
+ − 2298
* @param string Optional. The text to be sent after the result list, only if there are any results. Possibly the end of a table.
+ − 2299
* @return string
+ − 2300
*/
+ − 2301
+ − 2302
function paginate_array($q, $num_results, $result_url, $start = 0, $perpage = 10, $header = '', $footer = '')
+ − 2303
{
+ − 2304
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 2305
$parser = $template->makeParserText($tpl_text);
+ − 2306
$num_pages = ceil ( $num_results / $perpage );
+ − 2307
$out = '';
+ − 2308
$i = 0;
+ − 2309
$this_page = ceil ( $start / $perpage );
76
+ − 2310
1
+ − 2311
// Build paginator
+ − 2312
$begin = '<div class="tblholder" style="display: table; margin: 10px 0 0 auto;">
+ − 2313
<table border="0" cellspacing="1" cellpadding="4">
+ − 2314
<tr><th>Page:</th>';
+ − 2315
$block = '<td class="row1" style="text-align: center;">{LINK}</td>';
+ − 2316
$end = '</tr></table></div>';
+ − 2317
$blk = $template->makeParserText($block);
+ − 2318
$inner = '';
+ − 2319
$cls = 'row2';
+ − 2320
if ( $start > 0 )
+ − 2321
{
+ − 2322
$url = sprintf($result_url, abs($start - $perpage));
+ − 2323
$link = "<a href=".'"'."$url".'"'." style='text-decoration: none;'>« Prev</a>";
+ − 2324
$cls = ( $cls == 'row1' ) ? 'row2' : 'row1';
+ − 2325
$blk->assign_vars(array(
+ − 2326
'CLASS'=>$cls,
+ − 2327
'LINK'=>$link
+ − 2328
));
+ − 2329
$inner .= $blk->run();
+ − 2330
}
+ − 2331
if ( $num_pages < 5 )
+ − 2332
{
+ − 2333
for ( $i = 0; $i < $num_pages; $i++ )
+ − 2334
{
+ − 2335
$cls = ( $cls == 'row1' ) ? 'row2' : 'row1';
+ − 2336
$offset = strval($i * $perpage);
76
+ − 2337
$url = htmlspecialchars(sprintf($result_url, $offset));
1
+ − 2338
$j = $i + 1;
+ − 2339
$link = ( $offset == strval($start) ) ? "<b>$j</b>" : "<a href=".'"'."$url".'"'." style='text-decoration: none;'>$j</a>";
+ − 2340
$blk->assign_vars(array(
+ − 2341
'CLASS'=>$cls,
+ − 2342
'LINK'=>$link
+ − 2343
));
+ − 2344
$inner .= $blk->run();
+ − 2345
}
+ − 2346
}
+ − 2347
else
+ − 2348
{
+ − 2349
if ( $this_page + 5 > $num_pages )
+ − 2350
{
+ − 2351
$list = Array();
+ − 2352
$tp = $this_page;
+ − 2353
if ( $this_page + 0 == $num_pages ) $tp = $tp - 3;
+ − 2354
if ( $this_page + 1 == $num_pages ) $tp = $tp - 2;
+ − 2355
if ( $this_page + 2 == $num_pages ) $tp = $tp - 1;
+ − 2356
for ( $i = $tp - 1; $i <= $tp + 1; $i++ )
+ − 2357
{
+ − 2358
$list[] = $i;
+ − 2359
}
+ − 2360
}
+ − 2361
else
+ − 2362
{
+ − 2363
$list = Array();
+ − 2364
$current = $this_page;
+ − 2365
$lower = ( $current < 3 ) ? 1 : $current - 1;
+ − 2366
for ( $i = 0; $i < 3; $i++ )
+ − 2367
{
+ − 2368
$list[] = $lower + $i;
+ − 2369
}
+ − 2370
}
+ − 2371
$url = sprintf($result_url, '0');
+ − 2372
$link = ( 0 == $start ) ? "<b>First</b>" : "<a href=".'"'."$url".'"'." style='text-decoration: none;'>« First</a>";
+ − 2373
$blk->assign_vars(array(
+ − 2374
'CLASS'=>$cls,
+ − 2375
'LINK'=>$link
+ − 2376
));
+ − 2377
$inner .= $blk->run();
76
+ − 2378
1
+ − 2379
// if ( !in_array(1, $list) )
+ − 2380
// {
+ − 2381
// $cls = ( $cls == 'row1' ) ? 'row2' : 'row1';
+ − 2382
// $blk->assign_vars(array('CLASS'=>$cls,'LINK'=>'...'));
+ − 2383
// $inner .= $blk->run();
+ − 2384
// }
76
+ − 2385
1
+ − 2386
foreach ( $list as $i )
+ − 2387
{
+ − 2388
if ( $i == $num_pages )
+ − 2389
break;
+ − 2390
$cls = ( $cls == 'row1' ) ? 'row2' : 'row1';
+ − 2391
$offset = strval($i * $perpage);
+ − 2392
$url = sprintf($result_url, $offset);
+ − 2393
$j = $i + 1;
+ − 2394
$link = ( $offset == strval($start) ) ? "<b>$j</b>" : "<a href=".'"'."$url".'"'." style='text-decoration: none;'>$j</a>";
+ − 2395
$blk->assign_vars(array(
+ − 2396
'CLASS'=>$cls,
+ − 2397
'LINK'=>$link
+ − 2398
));
+ − 2399
$inner .= $blk->run();
+ − 2400
}
76
+ − 2401
1
+ − 2402
$total = $num_pages * $perpage - $perpage;
76
+ − 2403
1
+ − 2404
if ( $this_page < $num_pages )
+ − 2405
{
+ − 2406
// $cls = ( $cls == 'row1' ) ? 'row2' : 'row1';
+ − 2407
// $blk->assign_vars(array('CLASS'=>$cls,'LINK'=>'...'));
+ − 2408
// $inner .= $blk->run();
76
+ − 2409
1
+ − 2410
$cls = ( $cls == 'row1' ) ? 'row2' : 'row1';
+ − 2411
$offset = strval($total);
+ − 2412
$url = sprintf($result_url, $offset);
+ − 2413
$j = $i + 1;
+ − 2414
$link = ( $offset == strval($start) ) ? "<b>Last</b>" : "<a href=".'"'."$url".'"'." style='text-decoration: none;'>Last »</a>";
+ − 2415
$blk->assign_vars(array(
+ − 2416
'CLASS'=>$cls,
+ − 2417
'LINK'=>$link
+ − 2418
));
+ − 2419
$inner .= $blk->run();
+ − 2420
}
76
+ − 2421
1
+ − 2422
}
76
+ − 2423
1
+ − 2424
if ( $start < $total )
+ − 2425
{
+ − 2426
$url = sprintf($result_url, abs($start + $perpage));
+ − 2427
$link = "<a href=".'"'."$url".'"'." style='text-decoration: none;'>Next »</a>";
+ − 2428
$cls = ( $cls == 'row1' ) ? 'row2' : 'row1';
+ − 2429
$blk->assign_vars(array(
+ − 2430
'CLASS'=>$cls,
+ − 2431
'LINK'=>$link
+ − 2432
));
+ − 2433
$inner .= $blk->run();
+ − 2434
}
76
+ − 2435
1
+ − 2436
$inner .= '<td class="row2" style="cursor: pointer;" onclick="paginator_goto(this, '.$this_page.', '.$num_pages.', '.$perpage.', unescape(\'' . rawurlencode($result_url) . '\'));">↓</td>';
76
+ − 2437
1
+ − 2438
$paginator = "\n$begin$inner$end\n";
+ − 2439
if ( $total > 1 )
+ − 2440
$out .= $paginator;
76
+ − 2441
1
+ − 2442
$cls = 'row2';
76
+ − 2443
1
+ − 2444
if ( sizeof($q) > 0 )
+ − 2445
{
+ − 2446
$i = 0;
+ − 2447
$out .= $header;
+ − 2448
foreach ( $q as $val ) {
+ − 2449
$i++;
+ − 2450
if ( $i <= $start )
+ − 2451
{
+ − 2452
continue;
+ − 2453
}
+ − 2454
if ( ( $i - $start ) > $perpage )
+ − 2455
{
+ − 2456
break;
+ − 2457
}
+ − 2458
$out .= $val;
+ − 2459
}
+ − 2460
$out .= $footer;
+ − 2461
}
76
+ − 2462
1
+ − 2463
if ( $total > 1 )
+ − 2464
$out .= $paginator;
76
+ − 2465
1
+ − 2466
return $out;
+ − 2467
}
+ − 2468
76
+ − 2469
/**
1
+ − 2470
* Enano version of fputs for debugging
+ − 2471
*/
+ − 2472
+ − 2473
function enano_fputs($socket, $data)
+ − 2474
{
+ − 2475
// echo '<pre>' . htmlspecialchars($data) . '</pre>';
+ − 2476
// flush();
+ − 2477
// ob_flush();
+ − 2478
// ob_end_flush();
+ − 2479
return fputs($socket, $data);
+ − 2480
}
+ − 2481
+ − 2482
/**
+ − 2483
* Sanitizes a page URL string so that it can safely be stored in the database.
+ − 2484
* @param string Page ID to sanitize
+ − 2485
* @return string Cleaned text
+ − 2486
*/
+ − 2487
+ − 2488
function sanitize_page_id($page_id)
+ − 2489
{
76
+ − 2490
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
+ − 2491
// Remove character escapes
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 2492
$page_id = dirtify_page_id($page_id);
76
+ − 2493
21
663fcf528726
Updated all version numbers back to Banshee; a few preliminary steps towards full UTF-8 support in page URLs
Dan
diff
changeset
+ − 2494
$pid_clean = preg_replace('/[\w\.\/:;\(\)@\[\]_-]/', 'X', $page_id);
1
+ − 2495
$pid_dirty = enano_str_split($pid_clean, 1);
76
+ − 2496
1
+ − 2497
foreach ( $pid_dirty as $id => $char )
+ − 2498
{
+ − 2499
if ( $char == 'X' )
+ − 2500
continue;
+ − 2501
$cid = ord($char);
+ − 2502
$cid = dechex($cid);
+ − 2503
$cid = strval($cid);
+ − 2504
if ( strlen($cid) < 2 )
+ − 2505
{
+ − 2506
$cid = strtoupper("0$cid");
+ − 2507
}
+ − 2508
$pid_dirty[$id] = ".$cid";
+ − 2509
}
76
+ − 2510
1
+ − 2511
$pid_chars = enano_str_split($page_id, 1);
+ − 2512
$page_id_cleaned = '';
76
+ − 2513
1
+ − 2514
foreach ( $pid_chars as $id => $char )
+ − 2515
{
+ − 2516
if ( $pid_dirty[$id] == 'X' )
+ − 2517
$page_id_cleaned .= $char;
+ − 2518
else
+ − 2519
$page_id_cleaned .= $pid_dirty[$id];
+ − 2520
}
76
+ − 2521
21
663fcf528726
Updated all version numbers back to Banshee; a few preliminary steps towards full UTF-8 support in page URLs
Dan
diff
changeset
+ − 2522
// global $mime_types;
76
+ − 2523
21
663fcf528726
Updated all version numbers back to Banshee; a few preliminary steps towards full UTF-8 support in page URLs
Dan
diff
changeset
+ − 2524
// $exts = array_keys($mime_types);
663fcf528726
Updated all version numbers back to Banshee; a few preliminary steps towards full UTF-8 support in page URLs
Dan
diff
changeset
+ − 2525
// $exts = '(' . implode('|', $exts) . ')';
76
+ − 2526
21
663fcf528726
Updated all version numbers back to Banshee; a few preliminary steps towards full UTF-8 support in page URLs
Dan
diff
changeset
+ − 2527
// $page_id_cleaned = preg_replace('/\.2e' . $exts . '$/', '.\\1', $page_id_cleaned);
76
+ − 2528
1
+ − 2529
return $page_id_cleaned;
+ − 2530
}
+ − 2531
+ − 2532
/**
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
+ − 2533
* Removes character escapes in a page ID string
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 2534
* @param string Page ID string to dirty up
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 2535
* @return string
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 2536
*/
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 2537
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 2538
function dirtify_page_id($page_id)
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 2539
{
38
+ − 2540
global $db, $session, $paths, $template, $plugins; // Common objects
76
+ − 2541
// First, replace spaces with underscores
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
+ − 2542
$page_id = str_replace(' ', '_', $page_id);
76
+ − 2543
38
+ − 2544
// Exception for userpages for IP addresses
+ − 2545
if ( preg_match('/^' . preg_quote($paths->nslist['User']) . '/', $page_id) )
+ − 2546
{
+ − 2547
$ip = preg_replace('/^' . preg_quote($paths->nslist['User']) . '/', '', $page_id);
+ − 2548
if ( is_valid_ip($ip) )
+ − 2549
return $page_id;
+ − 2550
}
76
+ − 2551
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
+ − 2552
preg_match_all('/\.[A-Fa-f0-9][A-Fa-f0-9]/', $page_id, $matches);
76
+ − 2553
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
+ − 2554
foreach ( $matches[0] as $id => $char )
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 2555
{
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 2556
$char = substr($char, 1);
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 2557
$char = strtolower($char);
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 2558
$char = intval(hexdec($char));
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 2559
$char = chr($char);
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 2560
$page_id = str_replace($matches[0][$id], $char, $page_id);
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 2561
}
76
+ − 2562
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
+ − 2563
return $page_id;
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 2564
}
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 2565
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
diff
changeset
+ − 2566
/**
76
+ − 2567
* Inserts commas into a number to make it more human-readable. Floating point-safe and doesn't flirt with the number like number_format() does.
1
+ − 2568
* @param int The number to process
+ − 2569
* @return string Input number with commas added
+ − 2570
*/
+ − 2571
+ − 2572
function commatize($num)
+ − 2573
{
+ − 2574
$num = (string)$num;
+ − 2575
if ( strpos($num, '.') )
+ − 2576
{
+ − 2577
$whole = explode('.', $num);
+ − 2578
$num = $whole[0];
+ − 2579
$dec = $whole[1];
+ − 2580
}
+ − 2581
else
+ − 2582
{
+ − 2583
$whole = $num;
+ − 2584
}
+ − 2585
$offset = ( strlen($num) ) % 3;
+ − 2586
$len = strlen($num);
+ − 2587
$offset = ( $offset == 0 )
+ − 2588
? 3
+ − 2589
: $offset;
+ − 2590
for ( $i = $offset; $i < $len; $i=$i+3 )
+ − 2591
{
+ − 2592
$num = substr($num, 0, $i) . ',' . substr($num, $i, $len);
+ − 2593
$len = strlen($num);
+ − 2594
$i++;
+ − 2595
}
+ − 2596
if ( isset($dec) )
+ − 2597
{
+ − 2598
return $num . '.' . $dec;
+ − 2599
}
+ − 2600
else
+ − 2601
{
+ − 2602
return $num;
+ − 2603
}
+ − 2604
}
+ − 2605
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
+ − 2606
/**
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
+ − 2607
* Injects a string into another string at the specified position.
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
+ − 2608
* @param string The haystack
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
+ − 2609
* @param string The needle
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
+ − 2610
* @param int Position at which to insert the needle
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
+ − 2611
*/
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
+ − 2612
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
+ − 2613
function inject_substr($haystack, $needle, $pos)
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
+ − 2614
{
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
+ − 2615
$str1 = substr($haystack, 0, $pos);
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
+ − 2616
$pos++;
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
+ − 2617
$str2 = substr($haystack, $pos);
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
+ − 2618
return "{$str1}{$needle}{$str2}";
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
+ − 2619
}
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
+ − 2620
38
+ − 2621
/**
+ − 2622
* Tells if a given IP address is valid.
+ − 2623
* @param string suspected IP address
+ − 2624
* @return bool true if valid, false otherwise
+ − 2625
*/
76
+ − 2626
38
+ − 2627
function is_valid_ip($ip)
+ − 2628
{
+ − 2629
// These came from phpBB3.
+ − 2630
$ipv4 = '(?:(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.){3}(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])';
+ − 2631
$ipv6 = '(?:(?:(?:[\dA-F]{1,4}:){6}(?:[\dA-F]{1,4}:[\dA-F]{1,4}|(?:(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.){3}(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])))|(?:::(?:[\dA-F]{1,4}:){5}(?:[\dA-F]{1,4}:[\dA-F]{1,4}|(?:(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.){3}(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])))|(?:(?:[\dA-F]{1,4}:):(?:[\dA-F]{1,4}:){4}(?:[\dA-F]{1,4}:[\dA-F]{1,4}|(?:(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.){3}(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])))|(?:(?:[\dA-F]{1,4}:){1,2}:(?:[\dA-F]{1,4}:){3}(?:[\dA-F]{1,4}:[\dA-F]{1,4}|(?:(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.){3}(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])))|(?:(?:[\dA-F]{1,4}:){1,3}:(?:[\dA-F]{1,4}:){2}(?:[\dA-F]{1,4}:[\dA-F]{1,4}|(?:(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.){3}(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])))|(?:(?:[\dA-F]{1,4}:){1,4}:(?:[\dA-F]{1,4}:)(?:[\dA-F]{1,4}:[\dA-F]{1,4}|(?:(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.){3}(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])))|(?:(?:[\dA-F]{1,4}:){1,5}:(?:[\dA-F]{1,4}:[\dA-F]{1,4}|(?:(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.){3}(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])))|(?:(?:[\dA-F]{1,4}:){1,6}:[\dA-F]{1,4})|(?:(?:[\dA-F]{1,4}:){1,7}:))';
76
+ − 2632
38
+ − 2633
if ( preg_match("/^{$ipv4}$/", $ip) || preg_match("/^{$ipv6}$/", $ip) )
+ − 2634
return true;
+ − 2635
else
+ − 2636
return false;
+ − 2637
}
+ − 2638
48
fc9762553a3c
E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
diff
changeset
+ − 2639
/**
fc9762553a3c
E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
diff
changeset
+ − 2640
* Replaces the FIRST given occurrence of needle within haystack with thread
fc9762553a3c
E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
diff
changeset
+ − 2641
* @param string Needle
fc9762553a3c
E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
diff
changeset
+ − 2642
* @param string Thread
fc9762553a3c
E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
diff
changeset
+ − 2643
* @param string Haystack
fc9762553a3c
E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
diff
changeset
+ − 2644
*/
fc9762553a3c
E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
diff
changeset
+ − 2645
fc9762553a3c
E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
diff
changeset
+ − 2646
function str_replace_once($needle, $thread, $haystack)
fc9762553a3c
E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
diff
changeset
+ − 2647
{
fc9762553a3c
E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
diff
changeset
+ − 2648
$needle_len = strlen($needle);
fc9762553a3c
E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
diff
changeset
+ − 2649
for ( $i = 0; $i < strlen($haystack); $i++ )
fc9762553a3c
E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
diff
changeset
+ − 2650
{
fc9762553a3c
E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
diff
changeset
+ − 2651
$test = substr($haystack, $i, $needle_len);
fc9762553a3c
E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
diff
changeset
+ − 2652
if ( $test == $needle )
fc9762553a3c
E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
diff
changeset
+ − 2653
{
fc9762553a3c
E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
diff
changeset
+ − 2654
// Got it!
fc9762553a3c
E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
diff
changeset
+ − 2655
$upto = substr($haystack, 0, $i);
fc9762553a3c
E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
diff
changeset
+ − 2656
$from = substr($haystack, ( $i + $needle_len ));
fc9762553a3c
E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
diff
changeset
+ − 2657
$new_haystack = "{$upto}{$thread}{$from}";
fc9762553a3c
E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
diff
changeset
+ − 2658
return $new_haystack;
fc9762553a3c
E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
diff
changeset
+ − 2659
}
fc9762553a3c
E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
diff
changeset
+ − 2660
}
fc9762553a3c
E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
diff
changeset
+ − 2661
return $haystack;
fc9762553a3c
E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
diff
changeset
+ − 2662
}
fc9762553a3c
E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
diff
changeset
+ − 2663
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
+ − 2664
/**
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
+ − 2665
* From http://us2.php.net/urldecode - decode %uXXXX
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
+ − 2666
* @param string The urlencoded string
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
+ − 2667
* @return string
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
+ − 2668
*/
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
+ − 2669
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
+ − 2670
function decode_unicode_url($str)
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
+ − 2671
{
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
+ − 2672
$res = '';
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
+ − 2673
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
+ − 2674
$i = 0;
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
+ − 2675
$max = strlen($str) - 6;
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
+ − 2676
while ($i <= $max)
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
+ − 2677
{
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
+ − 2678
$character = $str[$i];
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
+ − 2679
if ($character == '%' && $str[$i + 1] == 'u')
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
+ − 2680
{
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
+ − 2681
$value = hexdec(substr($str, $i + 2, 4));
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
+ − 2682
$i += 6;
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
+ − 2683
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
+ − 2684
if ($value < 0x0080)
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
+ − 2685
{
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
+ − 2686
// 1 byte: 0xxxxxxx
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
+ − 2687
$character = chr($value);
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
+ − 2688
}
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
+ − 2689
else if ($value < 0x0800)
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
+ − 2690
{
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
+ − 2691
// 2 bytes: 110xxxxx 10xxxxxx
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
+ − 2692
$character =
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
+ − 2693
chr((($value & 0x07c0) >> 6) | 0xc0)
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
+ − 2694
. chr(($value & 0x3f) | 0x80);
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
+ − 2695
}
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
+ − 2696
else
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
+ − 2697
{
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
+ − 2698
// 3 bytes: 1110xxxx 10xxxxxx 10xxxxxx
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
+ − 2699
$character =
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
+ − 2700
chr((($value & 0xf000) >> 12) | 0xe0)
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
+ − 2701
. chr((($value & 0x0fc0) >> 6) | 0x80)
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
+ − 2702
. chr(($value & 0x3f) | 0x80);
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
+ − 2703
}
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
+ − 2704
}
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
+ − 2705
else
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
+ − 2706
{
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
+ − 2707
$i++;
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
+ − 2708
}
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
+ − 2709
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
+ − 2710
$res .= $character;
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
+ − 2711
}
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
+ − 2712
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
+ − 2713
return $res . substr($str, $i);
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
+ − 2714
}
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
+ − 2715
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
+ − 2716
/**
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
+ − 2717
* Recursively decodes an array with UTF-8 characters in its strings
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
+ − 2718
* @param array Can be multi-depth
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
+ − 2719
* @return array
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
+ − 2720
*/
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
+ − 2721
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
+ − 2722
function decode_unicode_array($array)
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
+ − 2723
{
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
+ − 2724
foreach ( $array as $i => $val )
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
+ − 2725
{
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
+ − 2726
if ( is_string($val) )
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
+ − 2727
{
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
+ − 2728
$array[$i] = decode_unicode_url($val);
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
+ − 2729
}
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
+ − 2730
else
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
+ − 2731
{
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
+ − 2732
$array[$i] = decode_unicode_array($val);
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
+ − 2733
}
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
+ − 2734
}
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
+ − 2735
return $array;
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
+ − 2736
}
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
+ − 2737
80
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2738
/**
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2739
* Sanitizes a page tag.
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2740
* @param string
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2741
* @return string
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2742
*/
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2743
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2744
function sanitize_tag($tag)
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2745
{
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2746
$tag = strtolower($tag);
170
4c5c2b66a34d
SECURITY: remove debug message in session manager; implemented alternate MediaWiki syntax for template embedding; added Adobe Spry for "shake" effect on unsuccessful login
Dan
diff
changeset
+ − 2747
$tag = preg_replace('/[^\w _@\$%\^&-]+/', '', $tag);
80
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2748
$tag = trim($tag);
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2749
return $tag;
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2750
}
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2751
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2752
/**
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2753
* Gzips the output buffer.
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2754
*/
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2755
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2756
function gzip_output()
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2757
{
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2758
global $do_gzip;
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2759
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2760
//
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2761
// Compress buffered output if required and send to browser
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2762
//
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2763
if ( $do_gzip && function_exists('ob_gzhandler') )
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2764
{
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2765
$gzip_contents = ob_get_contents();
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2766
ob_end_clean();
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2767
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
+ − 2768
$return = ob_gzhandler($gzip_contents);
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
+ − 2769
if ( $return )
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
+ − 2770
{
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
+ − 2771
header('Content-encoding: gzip');
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
+ − 2772
echo $gzip_contents;
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
+ − 2773
}
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
+ − 2774
else
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
+ − 2775
{
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
+ − 2776
echo $gzip_contents;
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
+ − 2777
}
80
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2778
}
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2779
}
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2780
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2781
/**
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2782
* Aggressively and hopefully non-destructively optimizes a blob of HTML.
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2783
* @param string HTML to process
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2784
* @return string much snaller HTML
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2785
*/
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2786
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2787
function aggressive_optimize_html($html)
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2788
{
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2789
$size_before = strlen($html);
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2790
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2791
// kill carriage returns
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2792
$html = str_replace("\r", "", $html);
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2793
125
+ − 2794
// Which tags to strip for JAVASCRIPT PROCESSING ONLY - you can change this if needed
+ − 2795
$strip_tags = Array('enano:no-opt');
+ − 2796
$strip_tags = implode('|', $strip_tags);
+ − 2797
+ − 2798
// Strip out the tags and replace with placeholders
173
91127e62f38f
Fixed some regular expressions in HTML optimization algorithm; regex page groups can be edited now (oops)
Dan
diff
changeset
+ − 2799
preg_match_all("#<($strip_tags)([ ]+.*?)?>(.*?)</($strip_tags)>#is", $html, $matches);
125
+ − 2800
$seed = md5(microtime() . mt_rand()); // Random value used for placeholders
+ − 2801
for ($i = 0;$i < sizeof($matches[1]); $i++)
+ − 2802
{
+ − 2803
$html = str_replace($matches[0][$i], "{DONT_STRIP_ME_NAKED:$seed:$i}", $html);
+ − 2804
}
+ − 2805
80
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2806
// Optimize (but don't obfuscate) Javascript
174
+ − 2807
preg_match_all('/<script([ ]+.*?)?>(.*?)(\]\]>)?<\/script>/is', $html, $jscript);
80
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2808
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2809
// list of Javascript reserved words - from about.com
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2810
$reserved_words = array('abstract', 'as', 'boolean', 'break', 'byte', 'case', 'catch', 'char', 'class', 'continue', 'const', 'debugger', 'default', 'delete', 'do',
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2811
'double', 'else', 'enum', 'export', 'extends', 'false', 'final', 'finally', 'float', 'for', 'function', 'goto', 'if', 'implements', 'import',
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2812
'in', 'instanceof', 'int', 'interface', 'is', 'long', 'namespace', 'native', 'new', 'null', 'package', 'private', 'protected', 'public',
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2813
'return', 'short', 'static', 'super', 'switch', 'synchronized', 'this', 'throw', 'throws', 'transient', 'true', 'try', 'typeof', 'use', 'var',
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2814
'void', 'volatile', 'while', 'with');
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2815
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2816
$reserved_words = '(' . implode('|', $reserved_words) . ')';
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2817
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2818
for ( $i = 0; $i < count($jscript[0]); $i++ )
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2819
{
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2820
$js =& $jscript[2][$i];
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2821
173
91127e62f38f
Fixed some regular expressions in HTML optimization algorithm; regex page groups can be edited now (oops)
Dan
diff
changeset
+ − 2822
// echo('<pre>' . "-----------------------------------------------------------------------------\n" . htmlspecialchars($js) . '</pre>');
91127e62f38f
Fixed some regular expressions in HTML optimization algorithm; regex page groups can be edited now (oops)
Dan
diff
changeset
+ − 2823
80
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2824
// for line optimization, explode it
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2825
$particles = explode("\n", $js);
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2826
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2827
foreach ( $particles as $j => $atom )
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2828
{
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2829
// Remove comments
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2830
$atom = preg_replace('#\/\/(.+)#i', '', $atom);
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2831
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2832
$atom = trim($atom);
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2833
if ( empty($atom) )
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2834
unset($particles[$j]);
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2835
else
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2836
$particles[$j] = $atom;
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2837
}
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2838
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2839
$js = implode("\n", $particles);
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2840
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2841
$js = preg_replace('#/\*(.*?)\*/#s', '', $js);
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2842
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2843
// find all semicolons and then linebreaks, and replace with a single semicolon
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2844
$js = str_replace(";\n", ';', $js);
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2845
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2846
// starting braces
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2847
$js = preg_replace('/\{([\s]+)/m', '{', $js);
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2848
$js = str_replace(")\n{", '){', $js);
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2849
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2850
// ending braces (tricky)
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2851
$js = preg_replace('/\}([^;])/m', '};\\1', $js);
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2852
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2853
// other rules
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2854
$js = str_replace("};\n", "};", $js);
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2855
$js = str_replace(",\n", ',', $js);
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2856
$js = str_replace("[\n", '[', $js);
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2857
$js = str_replace("]\n", ']', $js);
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2858
$js = str_replace("\n}", '}', $js);
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2859
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2860
// newlines immediately before reserved words
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2861
$js = preg_replace("/(\)|;)\n$reserved_words/is", '\\1\\2', $js);
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2862
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2863
// fix for firefox issue
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2864
$js = preg_replace('/\};([\s]*)(else|\))/i', '}\\2', $js);
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2865
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
+ − 2866
$replacement = "<script{$jscript[1][$i]}>/* <![CDATA[ */ $js /* ]]> */</script>";
80
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2867
// apply changes
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
+ − 2868
$html = str_replace($jscript[0][$i], $replacement, $html);
80
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2869
}
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2870
125
+ − 2871
// Re-insert untouchable tags
+ − 2872
for ($i = 0;$i < sizeof($matches[1]); $i++)
+ − 2873
{
+ − 2874
$html = str_replace("{DONT_STRIP_ME_NAKED:$seed:$i}", "<{$matches[1][$i]}{$matches[2][$i]}>{$matches[3][$i]}</{$matches[4][$i]}>", $html);
+ − 2875
}
+ − 2876
80
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2877
// Which tags to strip - you can change this if needed
137
+ − 2878
$strip_tags = Array('pre', 'script', 'style', 'enano:no-opt', 'textarea');
80
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2879
$strip_tags = implode('|', $strip_tags);
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2880
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2881
// Strip out the tags and replace with placeholders
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2882
preg_match_all("#<($strip_tags)(.*?)>(.*?)</($strip_tags)>#is", $html, $matches);
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2883
$seed = md5(microtime() . mt_rand()); // Random value used for placeholders
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2884
for ($i = 0;$i < sizeof($matches[1]); $i++)
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2885
{
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2886
$html = str_replace($matches[0][$i], "{DONT_STRIP_ME_NAKED:$seed:$i}", $html);
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2887
}
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2888
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2889
// Finally, process the HTML
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2890
$html = preg_replace("#\n([ ]*)#", " ", $html);
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2891
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2892
// Remove annoying spaces between tags
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2893
$html = preg_replace("#>([ ][ ]+)<#", "> <", $html);
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2894
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2895
// Re-insert untouchable tags
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2896
for ($i = 0;$i < sizeof($matches[1]); $i++)
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2897
{
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2898
$html = str_replace("{DONT_STRIP_ME_NAKED:$seed:$i}", "<{$matches[1][$i]}{$matches[2][$i]}>{$matches[3][$i]}</{$matches[4][$i]}>", $html);
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2899
}
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2900
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2901
// Remove <enano:no-opt> blocks (can be used by themes that don't want their HTML optimized)
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2902
$html = preg_replace('#<(\/|)enano:no-opt(.*?)>#', '', $html);
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2903
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2904
$size_after = strlen($html);
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2905
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2906
// Tell snoopish users what's going on
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
+ − 2907
$html = str_replace('<html', "\n".'<!-- NOTE: Enano has performed an HTML optimization routine on the HTML you see here. This is to enhance page loading speeds.
80
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2908
To view the uncompressed source of this page, add the "nocompress" parameter to the URI of this page: index.php?title=Main_Page&nocompress or Main_Page?nocompress'."
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2909
Size before compression: $size_before bytes
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2910
Size after compression: $size_after bytes
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
+ − 2911
-->\n<html", $html);
80
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2912
return $html;
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2913
}
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at all the tag cloud class in includes/tagcloud.php, this is still very preliminary and not ready for any type of production use
Dan
diff
changeset
+ − 2914
128
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2915
/**
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2916
* For an input range of numbers (like 25-256) returns an array filled with all numbers in the range, inclusive.
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2917
* @param string
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2918
* @return array
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2919
*/
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2920
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2921
function int_range($range)
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2922
{
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2923
if ( strval(intval($range)) == $range )
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2924
return $range;
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2925
if ( !preg_match('/^[0-9]+(-[0-9]+)?$/', $range) )
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2926
return false;
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2927
$ends = explode('-', $range);
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2928
if ( count($ends) != 2 )
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2929
return $range;
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2930
$ret = array();
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2931
if ( $ends[1] < $ends[0] )
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2932
$ends = array($ends[1], $ends[0]);
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2933
else if ( $ends[0] == $ends[1] )
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2934
return array($ends[0]);
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2935
for ( $i = $ends[0]; $i <= $ends[1]; $i++ )
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2936
{
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2937
$ret[] = $i;
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2938
}
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2939
return $ret;
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2940
}
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2941
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2942
/**
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2943
* Parses a range or series of IP addresses, and returns the raw addresses. Only parses ranges in the last two octets to prevent DOSing.
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2944
* Syntax for ranges: x.x.x.x; x|y.x.x.x; x.x.x-z.x; x.x.x-z|p.q|y
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2945
* @param string IP address range string
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2946
* @return array
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2947
*/
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2948
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2949
function parse_ip_range($range)
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2950
{
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2951
$octets = explode('.', $range);
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2952
if ( count($octets) != 4 )
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2953
// invalid range
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2954
return $range;
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2955
$i = 0;
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2956
$possibilities = array( 0 => array(), 1 => array(), 2 => array(), 3 => array() );
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2957
foreach ( $octets as $octet )
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2958
{
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2959
$existing =& $possibilities[$i];
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2960
$inner = explode('|', $octet);
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2961
foreach ( $inner as $bit )
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2962
{
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2963
if ( $i >= 2 )
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2964
{
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2965
$bits = int_range($bit);
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2966
if ( $bits === false )
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2967
return false;
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2968
else if ( !is_array($bits) )
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2969
$existing[] = intval($bits);
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2970
else
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2971
$existing = array_merge($existing, $bits);
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2972
}
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2973
else
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2974
{
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2975
$bit = intval($bit);
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2976
$existing[] = $bit;
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2977
}
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2978
}
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2979
$existing = array_unique($existing);
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2980
$i++;
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2981
}
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2982
$ips = array();
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2983
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2984
// The only way to combine all those possibilities. ;-)
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2985
foreach ( $possibilities[0] as $oc1 )
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2986
foreach ( $possibilities[1] as $oc2 )
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2987
foreach ( $possibilities[2] as $oc3 )
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2988
foreach ( $possibilities[3] as $oc4 )
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2989
$ips[] = "$oc1.$oc2.$oc3.$oc4";
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2990
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2991
return $ips;
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2992
}
01955bf53f96
Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
diff
changeset
+ − 2993
132
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 2994
function password_score_len($password)
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 2995
{
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 2996
if ( !is_string($password) )
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 2997
{
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 2998
return -10;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 2999
}
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3000
$len = strlen($password);
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3001
$score = $len - 7;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3002
return $score;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3003
}
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3004
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3005
/**
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3006
* Give a numerical score for how strong a password is. This is an open-ended scale based on a score added to or subtracted
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3007
* from based on certain complexity rules. Anything less than about 1 or 0 is weak, 3-4 is strong, and 10 is not to be easily cracked.
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3008
* Based on the Javascript function of the same name.
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3009
* @param string Password to test
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3010
* @param null Will be filled with an array of debugging info
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3011
* @return int
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3012
*/
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3013
196
+ − 3014
function password_score($password, &$debug)
132
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3015
{
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3016
if ( !is_string($password) )
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3017
{
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3018
return -10;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3019
}
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3020
$score = 0;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3021
$debug = array();
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3022
// length check
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3023
$lenscore = password_score_len($password);
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3024
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3025
$debug[] = "<b>How this score was calculated</b>\nYour score was tallied up based on an extensive algorithm which outputted\nthe following scores based on traits of your password. Above you can see the\ncomposite score; your individual scores based on certain tests are below.\n\nThe scale is open-ended, with a minimum score of -10. 10 is very strong, 4\nis strong, 1 is good and -3 is fair. Below -3 scores \"Weak.\"\n";
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3026
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3027
$debug[] = 'Adding '.$lenscore.' points for length';
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3028
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3029
$score += $lenscore;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3030
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3031
$has_upper_lower = false;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3032
$has_symbols = false;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3033
$has_numbers = false;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3034
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3035
// contains uppercase and lowercase
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3036
if ( preg_match('/[A-z]+/', $password) && strtolower($password) != $password )
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3037
{
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3038
$score += 1;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3039
$has_upper_lower = true;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3040
$debug[] = 'Adding 1 point for having uppercase and lowercase';
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3041
}
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3042
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3043
// contains symbols
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3044
if ( preg_match('/[^A-z0-9]+/', $password) )
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3045
{
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3046
$score += 1;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3047
$has_symbols = true;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3048
$debug[] = 'Adding 1 point for having nonalphanumeric characters (matching /[^A-z0-9]+/)';
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3049
}
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3050
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3051
// contains numbers
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3052
if ( preg_match('/[0-9]+/', $password) )
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3053
{
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3054
$score += 1;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3055
$has_numbers = true;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3056
$debug[] = 'Adding 1 point for having numbers';
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3057
}
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3058
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3059
if ( $has_upper_lower && $has_symbols && $has_numbers && strlen($password) >= 9 )
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3060
{
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3061
// if it has uppercase and lowercase letters, symbols, and numbers, and is of considerable length, add some serious points
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3062
$score += 4;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3063
$debug[] = 'Adding 4 points for having uppercase and lowercase, numbers, and nonalphanumeric and being more than 8 characters';
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3064
}
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3065
else if ( $has_upper_lower && $has_symbols && $has_numbers )
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3066
{
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3067
// still give some points for passing complexity check
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3068
$score += 2;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3069
$debug[] = 'Adding 2 points for having uppercase and lowercase, numbers, and nonalphanumeric';
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3070
}
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3071
else if ( ( $has_upper_lower && $has_symbols ) ||
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3072
( $has_upper_lower && $has_numbers ) ||
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3073
( $has_symbols && $has_numbers ) )
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3074
{
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3075
// if 2 of the three main complexity checks passed, add a point
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3076
$score += 1;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3077
$debug[] = 'Adding 1 point for having 2 of 3 complexity checks';
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3078
}
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3079
else if ( preg_match('/^[0-9]*?([a-z]+)[0-9]?$/', $password) )
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3080
{
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3081
// password is something like magnum1 which will be cracked in seconds
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3082
$score += -4;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3083
$debug[] = 'Adding -4 points for being of the form [number][word][number]';
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3084
}
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3085
else if ( ( !$has_upper_lower && !$has_numbers && $has_symbols ) ||
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3086
( !$has_upper_lower && !$has_symbols && $has_numbers ) ||
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3087
( !$has_numbers && !$has_symbols && $has_upper_lower ) )
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3088
{
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3089
$score += -2;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3090
$debug[] = 'Adding -2 points for only meeting 1 complexity check';
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3091
}
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3092
else if ( !$has_upper_lower && !$has_numbers && !$has_symbols )
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3093
{
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3094
$debug[] = 'Adding -3 points for not meeting any complexity checks';
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3095
$score += -3;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3096
}
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3097
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3098
//
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3099
// Repetition
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3100
// Example: foobar12345 should be deducted points, where f1o2o3b4a5r should be given points
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3101
//
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3102
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3103
if ( preg_match('/([A-Z][A-Z][A-Z][A-Z]|[a-z][a-z][a-z][a-z])/', $password) )
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3104
{
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3105
$debug[] = 'Adding -2 points for having more than 4 letters of the same case in a row';
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3106
$score += -2;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3107
}
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3108
else if ( preg_match('/([A-Z][A-Z][A-Z]|[a-z][a-z][a-z])/', $password) )
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3109
{
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3110
$debug[] = 'Adding -1 points for having more than 3 letters of the same case in a row';
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3111
$score += -1;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3112
}
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3113
else if ( preg_match('/[A-z]/', $password) && !preg_match('/([A-Z][A-Z][A-Z]|[a-z][a-z][a-z])/', $password) )
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3114
{
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3115
$debug[] = 'Adding 1 point for never having more than 2 letters of the same case in a row';
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3116
$score += 1;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3117
}
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3118
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3119
if ( preg_match('/[0-9][0-9][0-9][0-9]/', $password) )
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3120
{
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3121
$debug[] = 'Adding -2 points for having 4 or more numbers in a row';
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3122
$score += -2;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3123
}
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3124
else if ( preg_match('/[0-9][0-9][0-9]/', $password) )
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3125
{
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3126
$debug[] = 'Adding -1 points for having 3 or more numbers in a row';
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3127
$score += -1;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3128
}
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3129
else if ( $has_numbers && !preg_match('/[0-9][0-9][0-9]/', $password) )
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3130
{
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3131
$debug[] = 'Adding 1 point for never more than 2 numbers in a row';
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3132
$score += -1;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3133
}
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3134
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3135
// make passwords like fooooooooooooooooooooooooooooooooooooo totally die by subtracting a point for each character repeated at least 3 times in a row
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3136
$prev_char = '';
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3137
$warn = false;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3138
$loss = 0;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3139
for ( $i = 0; $i < strlen($password); $i++ )
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3140
{
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3141
$chr = $password{$i};
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3142
if ( $chr == $prev_char && $warn )
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3143
{
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3144
$loss += -1;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3145
}
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3146
else if ( $chr == $prev_char && !$warn )
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3147
{
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3148
$warn = true;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3149
}
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3150
else if ( $chr != $prev_char && $warn )
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3151
{
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3152
$warn = false;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3153
}
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3154
$prev_char = $chr;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3155
}
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3156
if ( $loss < 0 )
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3157
{
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3158
$debug[] = 'Adding '.$loss.' points for immediate character repetition';
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3159
$score += $loss;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3160
// this can bring the score below -10 sometimes
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3161
if ( $score < -10 )
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3162
{
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3163
$debug[] = 'Setting score to -10 because it went below ('.$score.')';
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3164
$score = -10;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3165
}
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3166
}
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3167
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3168
return $score;
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3169
}
0ae1b281a884
[sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
diff
changeset
+ − 3170
180
3dbe848431b0
Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
diff
changeset
+ − 3171
/**
3dbe848431b0
Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
diff
changeset
+ − 3172
* Registers a task that will be run every X hours. Scheduled tasks should always be scheduled at runtime - they are not stored in the DB.
3dbe848431b0
Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
diff
changeset
+ − 3173
* @param string Function name to call, or array(object, string method)
3dbe848431b0
Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
diff
changeset
+ − 3174
* @param int Interval between runs, in hours. Defaults to 24.
3dbe848431b0
Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
diff
changeset
+ − 3175
*/
3dbe848431b0
Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
diff
changeset
+ − 3176
3dbe848431b0
Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
diff
changeset
+ − 3177
function register_cron_task($func, $hour_interval = 24)
3dbe848431b0
Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
diff
changeset
+ − 3178
{
3dbe848431b0
Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
diff
changeset
+ − 3179
global $cron_tasks;
3dbe848431b0
Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
diff
changeset
+ − 3180
if ( !isset($cron_tasks[$hour_interval]) )
3dbe848431b0
Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
diff
changeset
+ − 3181
$cron_tasks[$hour_interval] = array();
3dbe848431b0
Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
diff
changeset
+ − 3182
$cron_tasks[$hour_interval][] = $func;
3dbe848431b0
Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
diff
changeset
+ − 3183
}
3dbe848431b0
Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
diff
changeset
+ − 3184
195
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3185
/**
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3186
* Scales an image to the specified width and height, and writes the output to the specified
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3187
* file. Will use ImageMagick if present, but if not will attempt to scale with GD. This will
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3188
* always scale images proportionally.
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3189
* @param string Path to image file
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3190
* @param string Path to output file
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3191
* @param int Image width, in pixels
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3192
* @param int Image height, in pixels
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3193
* @param bool If true, the output file will be deleted if it exists before it is written
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3194
* @return bool True on success, false on failure
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3195
*/
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3196
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3197
function scale_image($in_file, $out_file, $width = 225, $height = 225, $unlink = false)
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3198
{
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3199
global $db, $session, $paths, $template, $plugins; // Common objects
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3200
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3201
if ( !is_int($width) || !is_int($height) )
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3202
return false;
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3203
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3204
if ( !file_exists($in_file) )
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3205
return false;
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3206
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3207
if ( preg_match('/["\'\/\\]/', $in_file) || preg_match('/["\'\/\\]/', $out_file) )
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3208
die('SECURITY: scale_image(): infile or outfile path is screwy');
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3209
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3210
if ( file_exists($out_file) && !$unlink )
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3211
return false;
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3212
else if ( file_exists($out_file) && $unlink )
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3213
@unlink($out_file);
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3214
if ( file_exists($out_file) )
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3215
// couldn't unlink (delete) the output file
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3216
return false;
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3217
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3218
$file_ext = substr($in_file, ( strrpos($in_file, '.') + 1));
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3219
switch($file_ext)
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3220
{
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3221
case 'png':
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3222
$func = 'imagecreatefrompng';
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3223
break;
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3224
case 'jpg':
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3225
case 'jpeg':
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3226
$func = 'imagecreatefromjpeg';
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3227
break;
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3228
case 'gif':
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3229
$func = 'imagecreatefromgif';
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3230
break;
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3231
case 'xpm':
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3232
$func = 'imagecreatefromxpm';
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3233
break;
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3234
default:
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3235
return false;
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3236
}
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3237
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3238
$magick_path = getConfig('imagemagick_path');
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3239
$can_use_magick = (
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3240
getConfig('enable_imagemagick') == '1' &&
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3241
file_exists($magick_path) &&
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3242
is_executable($magick_path)
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3243
);
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3244
$can_use_gd = (
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3245
function_exists('getimagesize') &&
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3246
function_exists('imagecreatetruecolor') &&
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3247
function_exists('imagecopyresampled') &&
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3248
function_exists($func)
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3249
);
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3250
if ( $can_use_magick )
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3251
{
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3252
if ( !preg_match('/^([\/A-z0-9_-]+)$/', $magick_path) )
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3253
{
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3254
die('SECURITY: ImageMagick path is screwy');
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3255
}
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3256
$cmdline = "$magick_path \"$in_file\" -resize \"{$width}x{$height}>\" \"$out_file\"";
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3257
system($cmdline, $return);
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3258
if ( !file_exists($out_file) )
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3259
return false;
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3260
return true;
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3261
}
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3262
else if ( $can_use_gd )
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3263
{
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3264
@list($width_orig, $height_orig) = @getimagesize($in_file);
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3265
if ( !$width_orig || !$height_orig )
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3266
return false;
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3267
// calculate new width and height
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3268
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3269
$ratio = $width_orig / $height_orig;
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3270
if ( $ratio > 1 )
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3271
{
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3272
// orig. width is greater that height
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3273
$new_width = $width;
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3274
$new_height = round( $width / $ratio );
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3275
}
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3276
else if ( $ratio < 1 )
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3277
{
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3278
// orig. height is greater than width
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3279
$new_width = round( $height / $ratio );
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3280
$new_height = $height;
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3281
}
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3282
else if ( $ratio == 1 )
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3283
{
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3284
$new_width = $width;
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3285
$new_height = $width;
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3286
}
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3287
if ( $new_width > $width_orig || $new_height > $height_orig )
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3288
{
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3289
// Too big for our britches here; set it to only convert the file
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3290
$new_width = $width_orig;
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3291
$new_height = $height_orig;
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3292
}
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3293
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3294
$newimage = @imagecreatetruecolor($new_width, $new_height);
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3295
if ( !$newimage )
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3296
return false;
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3297
$oldimage = @$func($in_file);
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3298
if ( !$oldimage )
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3299
return false;
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3300
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3301
// Perform scaling
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3302
imagecopyresampled($newimage, $oldimage, 0, 0, 0, 0, $new_width, $new_height, $width_orig, $height_orig);
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3303
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3304
// Get output format
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3305
$out_ext = substr($out_file, ( strrpos($out_file, '.') + 1));
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3306
switch($out_ext)
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3307
{
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3308
case 'png':
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3309
$outfunc = 'imagepng';
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3310
break;
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3311
case 'jpg':
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3312
case 'jpeg':
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3313
$outfunc = 'imagejpeg';
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3314
break;
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3315
case 'gif':
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3316
$outfunc = 'imagegif';
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3317
break;
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3318
case 'xpm':
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3319
$outfunc = 'imagexpm';
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3320
break;
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3321
default:
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3322
imagedestroy($newimage);
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3323
imagedestroy($oldimage);
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3324
return false;
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3325
}
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3326
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3327
// Write output
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3328
$outfunc($newimage, $out_file);
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3329
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3330
// clean up
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3331
imagedestroy($newimage);
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3332
imagedestroy($oldimage);
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3333
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3334
// done!
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3335
return true;
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3336
}
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3337
// Neither scaling method worked; we'll let plugins try to scale it, and then if the file still doesn't exist, die
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3338
$code = $plugins->setHook('scale_image_failure');
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3339
foreach ( $code as $cmd )
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3340
{
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3341
eval($cmd);
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3342
}
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3343
if ( file_exists($out_file) )
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3344
return true;
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3345
return false;
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3346
}
3daa715e0f69
Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, GD will be used. No UI changes to speak of, but a check in the installer will be added in a later commit
Dan
diff
changeset
+ − 3347
1
+ − 3348
//die('<pre>Original: 01010101010100101010100101010101011010'."\nProcessed: ".uncompress_bitfield(compress_bitfield('01010101010100101010100101010101011010')).'</pre>');
+ − 3349
+ − 3350
?>