includes/functions.php
author Dan
Wed, 06 Jan 2010 02:02:51 -0500
changeset 1206 50f6c144ec68
parent 1203 c6587072e4c4
child 1219 2b13cd6b4f95
permissions -rw-r--r--
Fixed some bugs with account activation, especially if you're a half-logged-in vegetable.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
     1
<?php
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
     2
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
     3
/*
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
     4
 * Enano - an open-source CMS capable of wiki functions, Drupal-like sidebar blocks, and everything in between
1081
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
     5
 * Copyright (C) 2006-2009 Dan Fuhry
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
     6
 *
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
     7
 * This program is Free Software; you can redistribute and/or modify it under the terms of the GNU General Public License
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
     8
 * as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
     9
 *
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    10
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    11
 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for details.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    12
 */
22
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    13
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    14
/**
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    15
 * Fetch a value from the site configuration.
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    16
 * @param string The identifier of the value ("site_name" etc.)
620
58852672ff12 Added "default" option for getConfig() and made setConfig() only set if the new value is different
Dan
parents: 613
diff changeset
    17
 * @param string If specified, this is the "default" value for the configuration entry. Defaults to false.
22
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    18
 * @return string Configuration value, or bool(false) if the value is not set
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    19
 */
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    20
620
58852672ff12 Added "default" option for getConfig() and made setConfig() only set if the new value is different
Dan
parents: 613
diff changeset
    21
function getConfig($n, $default = false)
22
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    22
{
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    23
  global $enano_config;
22
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    24
  if ( isset( $enano_config[ $n ] ) )
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    25
  {
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    26
    return $enano_config[$n];
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    27
  }
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    28
  else
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    29
  {
620
58852672ff12 Added "default" option for getConfig() and made setConfig() only set if the new value is different
Dan
parents: 613
diff changeset
    30
    return $default;
22
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    31
  }
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    32
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    33
22
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    34
/**
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    35
 * Update or change a configuration value.
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    36
 * @param string The identifier of the value ("site_name" etc.)
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    37
 * @param string The new value
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    38
 * @return null
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    39
 */
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    40
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    41
function setConfig($n, $v)
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    42
{
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    43
  global $enano_config, $db;
620
58852672ff12 Added "default" option for getConfig() and made setConfig() only set if the new value is different
Dan
parents: 613
diff changeset
    44
  
58852672ff12 Added "default" option for getConfig() and made setConfig() only set if the new value is different
Dan
parents: 613
diff changeset
    45
  if ( isset($enano_config[$n]) )
58852672ff12 Added "default" option for getConfig() and made setConfig() only set if the new value is different
Dan
parents: 613
diff changeset
    46
  {
58852672ff12 Added "default" option for getConfig() and made setConfig() only set if the new value is different
Dan
parents: 613
diff changeset
    47
    if ( $enano_config[$n] === $v )
58852672ff12 Added "default" option for getConfig() and made setConfig() only set if the new value is different
Dan
parents: 613
diff changeset
    48
    {
58852672ff12 Added "default" option for getConfig() and made setConfig() only set if the new value is different
Dan
parents: 613
diff changeset
    49
      // configuration already matches this value
58852672ff12 Added "default" option for getConfig() and made setConfig() only set if the new value is different
Dan
parents: 613
diff changeset
    50
      return true;
58852672ff12 Added "default" option for getConfig() and made setConfig() only set if the new value is different
Dan
parents: 613
diff changeset
    51
    }
58852672ff12 Added "default" option for getConfig() and made setConfig() only set if the new value is different
Dan
parents: 613
diff changeset
    52
  }
58852672ff12 Added "default" option for getConfig() and made setConfig() only set if the new value is different
Dan
parents: 613
diff changeset
    53
  
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    54
  $enano_config[$n] = $v;
842
f13bb4f21890 setConfig() will now delete config values if the second parameter is explicitly set to false
Dan
parents: 832
diff changeset
    55
  if ( $v === false )
f13bb4f21890 setConfig() will now delete config values if the second parameter is explicitly set to false
Dan
parents: 832
diff changeset
    56
    unset($enano_config[$n]);
f13bb4f21890 setConfig() will now delete config values if the second parameter is explicitly set to false
Dan
parents: 832
diff changeset
    57
  
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    58
  $v = $db->escape($v);
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
    59
22
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    60
  $e = $db->sql_query('DELETE FROM '.table_prefix.'config WHERE config_name=\''.$n.'\';');
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    61
  if ( !$e )
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    62
  {
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    63
    $db->_die('Error during generic setConfig() call row deletion.');
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    64
  }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
    65
842
f13bb4f21890 setConfig() will now delete config values if the second parameter is explicitly set to false
Dan
parents: 832
diff changeset
    66
  if ( $v !== false )
f13bb4f21890 setConfig() will now delete config values if the second parameter is explicitly set to false
Dan
parents: 832
diff changeset
    67
  {
f13bb4f21890 setConfig() will now delete config values if the second parameter is explicitly set to false
Dan
parents: 832
diff changeset
    68
    $e = $db->sql_query('INSERT INTO '.table_prefix.'config(config_name, config_value) VALUES(\''.$n.'\', \''.$v.'\')');
f13bb4f21890 setConfig() will now delete config values if the second parameter is explicitly set to false
Dan
parents: 832
diff changeset
    69
    if ( !$e )
f13bb4f21890 setConfig() will now delete config values if the second parameter is explicitly set to false
Dan
parents: 832
diff changeset
    70
    {
f13bb4f21890 setConfig() will now delete config values if the second parameter is explicitly set to false
Dan
parents: 832
diff changeset
    71
      $db->_die('Error during generic setConfig() call row insertion.');
f13bb4f21890 setConfig() will now delete config values if the second parameter is explicitly set to false
Dan
parents: 832
diff changeset
    72
    }
22
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    73
  }
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    74
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    75
22
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    76
/**
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    77
 * Create a URI for an internal link.
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    78
 * @param string The full identifier of the page to link to (Special:Administration)
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    79
 * @param string The GET query string to append
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    80
 * @param bool   If true, perform htmlspecialchars() on the return value to make it HTML-safe
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    81
 * @return string
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    82
 */
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
    83
667
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
    84
if ( !function_exists('makeUrl') )
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
    85
{
667
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
    86
  function makeUrl($t, $query = false, $escape = false)
377
bb3e6c3bd4f4 Removed stray debugging info from ACL editor success notification; added ability for guests to set language on URI (?lang=eng); added html_in_pages ACL type and separated from php_in_pages so HTML can be embedded but not PHP; rewote portions of the path manager to better abstract URL input; added Zend Framework into list of BSD-licensed libraries; localized some remaining strings; got the migration script working, but just barely; fixed display bug in Special:Contributions; localized Main Page button in admin panel
Dan
parents: 376
diff changeset
    87
  {
667
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
    88
    global $db, $session, $paths, $template, $plugins; // Common objects
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
    89
    $flags = '';
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
    90
    $sep = urlSeparator;
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
    91
    $t = sanitize_page_id($t);
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
    92
    if ( isset($_GET['printable'] ) )
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
    93
    {
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
    94
      $flags .= $sep . 'printable=yes';
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
    95
      $sep = '&';
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
    96
    }
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
    97
    if ( isset($_GET['theme'] ) )
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
    98
    {
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
    99
      $flags .= $sep . 'theme='.$session->theme;
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   100
      $sep = '&';
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   101
    }
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   102
    if ( isset($_GET['style'] ) )
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   103
    {
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   104
      $flags .= $sep . 'style='.$session->style;
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   105
      $sep = '&';
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   106
    }
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   107
    if ( isset($_GET['lang']) && preg_match('/^[a-z0-9_]+$/', @$_GET['lang']) )
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   108
    {
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   109
      $flags .= $sep . 'lang=' . urlencode($_GET['lang']);
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   110
      $sep = '&';
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   111
    }
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   112
  
978
ed84b24b8e07 A few safety changes to tolerate no $session when it's not available
Dan
parents: 963
diff changeset
   113
    $url = is_object($session) ? $session->append_sid(contentPath.$t.$flags) : contentPath . $t . $flags;
667
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   114
    if($query)
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   115
    {
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   116
      $sep = strstr($url, '?') ? '&' : '?';
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   117
      $url = $url . $sep . $query;
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   118
    }
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   119
  
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   120
    return ($escape) ? htmlspecialchars($url) : $url;
377
bb3e6c3bd4f4 Removed stray debugging info from ACL editor success notification; added ability for guests to set language on URI (?lang=eng); added html_in_pages ACL type and separated from php_in_pages so HTML can be embedded but not PHP; rewote portions of the path manager to better abstract URL input; added Zend Framework into list of BSD-licensed libraries; localized some remaining strings; got the migration script working, but just barely; fixed display bug in Special:Contributions; localized Main Page button in admin panel
Dan
parents: 376
diff changeset
   121
  }
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   122
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   123
22
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
   124
/**
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
   125
 * 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.
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
   126
 * @param string The namespace ID
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
   127
 * @param string The page ID
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
   128
 * @param string The GET query string to append
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
   129
 * @param bool   If true, perform htmlspecialchars() on the return value to make it HTML-safe
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
   130
 * @return string
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
   131
 */
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
   132
667
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   133
if ( !function_exists('makeUrlNS') )
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   134
{
667
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   135
  function makeUrlNS($n, $t, $query = false, $escape = false)
22
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
   136
  {
667
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   137
    global $db, $session, $paths, $template, $plugins; // Common objects
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   138
    $flags = '';
468
194a19711346 Fixed the fact that cron just didn't work at all (brain fart that day or something)
Dan
parents: 458
diff changeset
   139
  
667
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   140
    if(defined('ENANO_BASE_CLASSES_INITIALIZED'))
22
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
   141
    {
667
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   142
      $sep = urlSeparator;
22
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
   143
    }
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
   144
    else
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
   145
    {
667
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   146
      $sep = (strstr($_SERVER['REQUEST_URI'], '?')) ? '&' : '?';
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   147
    }
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   148
    if ( isset( $_GET['printable'] ) ) {
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   149
      $flags .= $sep . 'printable';
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   150
      $sep = '&';
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   151
    }
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   152
    if ( isset( $_GET['theme'] ) )
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   153
    {
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   154
      $flags .= $sep . 'theme='.$session->theme;
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   155
      $sep = '&';
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   156
    }
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   157
    if ( isset( $_GET['style'] ) )
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   158
    {
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   159
      $flags .= $sep . 'style='.$session->style;
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   160
      $sep = '&';
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   161
    }
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   162
    if ( isset($_GET['lang']) && preg_match('/^[a-z0-9_]+$/', @$_GET['lang']) )
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   163
    {
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   164
      $flags .= $sep . 'lang=' . urlencode($_GET['lang']);
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   165
      $sep = '&';
22
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
   166
    }
667
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   167
    
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   168
    $ns_prefix = "$n:";
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   169
  
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   170
    if(defined('ENANO_BASE_CLASSES_INITIALIZED'))
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   171
    {
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   172
      $ns_prefix = ( isset($paths->nslist[$n]) ) ? $paths->nslist[$n] : $n . substr($paths->nslist['Special'], -1);
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   173
      $url = contentPath . $ns_prefix . $t . $flags;
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   174
    }
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   175
    else
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   176
    {
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   177
      // If the path manager hasn't been initted yet, take an educated guess at what the URI should be
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   178
      $url = contentPath . $n . ':' . $t . $flags;
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   179
    }
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   180
  
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   181
    if($query)
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   182
    {
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   183
      if(strstr($url, '?'))
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   184
      {
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   185
        $sep =  '&';
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   186
      }
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   187
      else
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   188
      {
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   189
        $sep = '?';
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   190
      }
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   191
      $url = $url . $sep . $query . $flags;
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   192
    }
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   193
  
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   194
    if(defined('ENANO_BASE_CLASSES_INITIALIZED'))
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   195
    {
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   196
      $url = $session->append_sid($url);
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   197
    }
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   198
  
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
   199
    return ($escape) ? htmlspecialchars($url) : $url;
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   200
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   201
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   202
22
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
   203
/**
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
   204
 * 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.
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
   205
 * @param string The namespace ID
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
   206
 * @param string The page ID
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
   207
 * @param string The GET query string to append
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
   208
 * @param bool   If true, perform htmlspecialchars() on the return value to make it HTML-safe
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
   209
 * @return string
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
   210
 */
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
   211
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   212
function makeUrlComplete($n, $t, $query = false, $escape = false)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   213
{
832
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
   214
  return get_server_url() . makeUrlNS($n, $t, $query, $escape);
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
   215
}
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
   216
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
   217
/**
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
   218
 * Returns an http:// URL for this server.
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
   219
 * @return string
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
   220
 */
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
   221
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
   222
function get_server_url()
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
   223
{
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
   224
  return 'http' . ( $GLOBALS['is_https'] ) . '://' . $_SERVER['HTTP_HOST'];
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   225
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   226
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   227
/**
741
a216e412c439 Added ability to have alternate main page for members
Dan
parents: 720
diff changeset
   228
 * Returns the full page ID string of the main page.
a216e412c439 Added ability to have alternate main page for members
Dan
parents: 720
diff changeset
   229
 * @return string
a216e412c439 Added ability to have alternate main page for members
Dan
parents: 720
diff changeset
   230
 */
a216e412c439 Added ability to have alternate main page for members
Dan
parents: 720
diff changeset
   231
a216e412c439 Added ability to have alternate main page for members
Dan
parents: 720
diff changeset
   232
function get_main_page($force_logged_in = false)
a216e412c439 Added ability to have alternate main page for members
Dan
parents: 720
diff changeset
   233
{
a216e412c439 Added ability to have alternate main page for members
Dan
parents: 720
diff changeset
   234
  global $db, $session, $paths, $template, $plugins; // Common objects
a216e412c439 Added ability to have alternate main page for members
Dan
parents: 720
diff changeset
   235
  
a216e412c439 Added ability to have alternate main page for members
Dan
parents: 720
diff changeset
   236
  $logged_in = false;
a216e412c439 Added ability to have alternate main page for members
Dan
parents: 720
diff changeset
   237
  if ( is_object($session) && !$force_logged_in )
a216e412c439 Added ability to have alternate main page for members
Dan
parents: 720
diff changeset
   238
  {
a216e412c439 Added ability to have alternate main page for members
Dan
parents: 720
diff changeset
   239
    $logged_in = $session->user_logged_in;
a216e412c439 Added ability to have alternate main page for members
Dan
parents: 720
diff changeset
   240
  }
a216e412c439 Added ability to have alternate main page for members
Dan
parents: 720
diff changeset
   241
  else if ( $force_logged_in )
a216e412c439 Added ability to have alternate main page for members
Dan
parents: 720
diff changeset
   242
  {
a216e412c439 Added ability to have alternate main page for members
Dan
parents: 720
diff changeset
   243
    $logged_in = true;
a216e412c439 Added ability to have alternate main page for members
Dan
parents: 720
diff changeset
   244
  }
832
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
   245
  return $logged_in && getConfig('main_page_alt_enable', '0') == '1' ? getConfig('main_page_alt', getConfig('main_page', 'Main_Page')) : getConfig('main_page', 'Main_Page');
741
a216e412c439 Added ability to have alternate main page for members
Dan
parents: 720
diff changeset
   246
}
a216e412c439 Added ability to have alternate main page for members
Dan
parents: 720
diff changeset
   247
a216e412c439 Added ability to have alternate main page for members
Dan
parents: 720
diff changeset
   248
/**
1099
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   249
 * Get the requested page title, taking into account all the different possible URL parsing schemes.
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   250
 * @param bool If true (default), runs the result through sanitize_page_id().
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   251
 * @param bool If true (default is false), and the return is a Special or Admin page, trims off anything beyond and including the first slash.
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   252
 * @return string
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   253
 */
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   254
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   255
function get_title($sanitize = true, $chop_special = false)
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   256
{
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   257
  $title = '';
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   258
  if ( isset($_GET['title']) )
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   259
  {
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   260
    $title = $_GET['title'];
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   261
  }
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   262
  else if ( isset($_SERVER['PATH_INFO']) )
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   263
  {
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   264
    // fix for apache + CGI (occurred on a GoDaddy server, thanks mm3)
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   265
    if ( @substr(@$_SERVER['GATEWAY_INTERFACE'], 0, 3) === 'CGI' && $_SERVER['PATH_INFO'] == scriptPath . '/index.php' )
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   266
    {
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   267
      // do nothing; ignore PATH_INFO
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   268
    }
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   269
    else
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   270
    {
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   271
      $title = substr($_SERVER['PATH_INFO'], ( strpos($_SERVER['PATH_INFO'], '/') ) + 1 );
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   272
    }
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   273
  }
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   274
  else
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   275
  {
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   276
    // This method really isn't supported because apache has a habit of passing dots as underscores, thus corrupting the request
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   277
    // If you really want to try it, the URI format is yoursite.com/?/Page_title
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   278
    if ( !empty($_SERVER['QUERY_STRING']) && substr($_SERVER['QUERY_STRING'], 0, 1) == '/' )
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   279
    {
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   280
      $pos = ( ($_ = strpos($_SERVER['QUERY_STRING'], '&')) !== false ) ? $_ - 1: 0x7FFFFFFF;
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   281
      $title = substr($_SERVER['QUERY_STRING'], 1, $pos);
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   282
    }
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   283
  }
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   284
  
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   285
  if ( $chop_special )
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   286
  {
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   287
    list(, $ns) = RenderMan::strToPageID($title);
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   288
    if ( $ns == 'Special' || $ns == 'Admin' )
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   289
    {
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   290
      list($title) = explode('/', $title);
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   291
    }
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   292
  }
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   293
  
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   294
  return ( $sanitize ) ? sanitize_page_id($title) : $title;
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   295
}
1123
777f32ac6b7c More blank-urlname bugfixes, this time involving internal links
Dan
parents: 1115
diff changeset
   296
777f32ac6b7c More blank-urlname bugfixes, this time involving internal links
Dan
parents: 1115
diff changeset
   297
/**
777f32ac6b7c More blank-urlname bugfixes, this time involving internal links
Dan
parents: 1115
diff changeset
   298
 * Returns true if we are allowed to have a page with a fully blank URL string. This page magically exists when you set the main page to blank.
777f32ac6b7c More blank-urlname bugfixes, this time involving internal links
Dan
parents: 1115
diff changeset
   299
 * @return bool
777f32ac6b7c More blank-urlname bugfixes, this time involving internal links
Dan
parents: 1115
diff changeset
   300
 */
777f32ac6b7c More blank-urlname bugfixes, this time involving internal links
Dan
parents: 1115
diff changeset
   301
777f32ac6b7c More blank-urlname bugfixes, this time involving internal links
Dan
parents: 1115
diff changeset
   302
function have_blank_urlname_page()
777f32ac6b7c More blank-urlname bugfixes, this time involving internal links
Dan
parents: 1115
diff changeset
   303
{
777f32ac6b7c More blank-urlname bugfixes, this time involving internal links
Dan
parents: 1115
diff changeset
   304
  return getConfig('main_page', 'Main_Page') == '' || getConfig('main_page', getConfig('main_page', 'Main_Page')) == '';
777f32ac6b7c More blank-urlname bugfixes, this time involving internal links
Dan
parents: 1115
diff changeset
   305
}
1099
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   306
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   307
/**
345
4ccdfeee9a11 WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
parents: 343
diff changeset
   308
 * Enano replacement for date(). Accounts for individual users' timezone preferences.
4ccdfeee9a11 WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
parents: 343
diff changeset
   309
 * @param string Date-formatted string
4ccdfeee9a11 WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
parents: 343
diff changeset
   310
 * @param int Optional - UNIX timestamp value to use. If omitted, the current time is used.
4ccdfeee9a11 WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
parents: 343
diff changeset
   311
 * @return string Formatted string
4ccdfeee9a11 WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
parents: 343
diff changeset
   312
 */
4ccdfeee9a11 WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
parents: 343
diff changeset
   313
4ccdfeee9a11 WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
parents: 343
diff changeset
   314
function enano_date($string, $timestamp = false)
4ccdfeee9a11 WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
parents: 343
diff changeset
   315
{
4ccdfeee9a11 WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
parents: 343
diff changeset
   316
  if ( !is_int($timestamp) && !is_double($timestamp) && strval(intval($timestamp)) !== $timestamp )
4ccdfeee9a11 WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
parents: 343
diff changeset
   317
    $timestamp = time();
406
7468a663315f Added some basic timezone support; DST support is still to come.
Dan
parents: 391
diff changeset
   318
  
1081
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   319
  if ( is_int($string) )
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   320
  {
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   321
    global $session, $lang;
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   322
    $date_fmt = is_object($session) ? $session->date_format : DATE_4;
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   323
    $time_fmt = is_object($session) ? $session->time_format : TIME_24_NS;
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   324
    
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   325
    // within a week? use a relative date
1099
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
   326
    if ( $timestamp + ( 86400 * 7 ) >= time() && $string & ED_DATE && is_object($lang) && is_object($session) && !($string & ED_DATE_FULL) )
1081
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   327
    {
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   328
      $relative_date = get_relative_date($timestamp);
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   329
      if ( $string === ED_DATE )
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   330
        // why do more work if we're done?
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   331
        return $relative_date;
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   332
    }
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   333
    
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   334
    $flags = $string;
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   335
    $string = array();
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   336
    if ( $flags & ED_DATE && !isset($relative_date) )
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   337
      $string[] = $date_fmt;
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   338
    if ( $flags & ED_TIME )
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   339
      $string[] = $time_fmt;
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   340
    
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   341
    $string = implode(' ', $string);
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   342
  }
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   343
  
406
7468a663315f Added some basic timezone support; DST support is still to come.
Dan
parents: 391
diff changeset
   344
  // perform timestamp offset
7468a663315f Added some basic timezone support; DST support is still to come.
Dan
parents: 391
diff changeset
   345
  global $timezone;
7468a663315f Added some basic timezone support; DST support is still to come.
Dan
parents: 391
diff changeset
   346
  // it's gonna be in minutes, so multiply by 60 to offset the unix timestamp
7468a663315f Added some basic timezone support; DST support is still to come.
Dan
parents: 391
diff changeset
   347
  $timestamp = $timestamp + ( $timezone * 60 );
7468a663315f Added some basic timezone support; DST support is still to come.
Dan
parents: 391
diff changeset
   348
  
711
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   349
  // are we in DST?
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   350
  global $dst_params;
1159
a1cca4472a58 Set up more sensible defaults (UTC, DST off) for timezone preferences. Also modified enano_date() to properly include GMT offsets when timezone characters are used. Fixes issue 4.
Dan
parents: 1133
diff changeset
   351
  $dst_offset = 0;
711
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   352
  if ( check_timestamp_dst($timestamp, $dst_params[0], $dst_params[1], $dst_params[2], $dst_params[3]) )
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   353
  {
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   354
    // offset for DST
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   355
    $timestamp += ( $dst_params[4] * 60 );
1159
a1cca4472a58 Set up more sensible defaults (UTC, DST off) for timezone preferences. Also modified enano_date() to properly include GMT offsets when timezone characters are used. Fixes issue 4.
Dan
parents: 1133
diff changeset
   356
    $dst_offset = $dst_params[4];
a1cca4472a58 Set up more sensible defaults (UTC, DST off) for timezone preferences. Also modified enano_date() to properly include GMT offsets when timezone characters are used. Fixes issue 4.
Dan
parents: 1133
diff changeset
   357
  }
a1cca4472a58 Set up more sensible defaults (UTC, DST off) for timezone preferences. Also modified enano_date() to properly include GMT offsets when timezone characters are used. Fixes issue 4.
Dan
parents: 1133
diff changeset
   358
  
a1cca4472a58 Set up more sensible defaults (UTC, DST off) for timezone preferences. Also modified enano_date() to properly include GMT offsets when timezone characters are used. Fixes issue 4.
Dan
parents: 1133
diff changeset
   359
  // Does this date string include a timezone? If so, gmdate() will report UTC, which is wrong
a1cca4472a58 Set up more sensible defaults (UTC, DST off) for timezone preferences. Also modified enano_date() to properly include GMT offsets when timezone characters are used. Fixes issue 4.
Dan
parents: 1133
diff changeset
   360
  // FIXME This is kind of a halfass replacement...
a1cca4472a58 Set up more sensible defaults (UTC, DST off) for timezone preferences. Also modified enano_date() to properly include GMT offsets when timezone characters are used. Fixes issue 4.
Dan
parents: 1133
diff changeset
   361
  foreach ( array('e', 'T', 'O', 'P') as $char )
a1cca4472a58 Set up more sensible defaults (UTC, DST off) for timezone preferences. Also modified enano_date() to properly include GMT offsets when timezone characters are used. Fixes issue 4.
Dan
parents: 1133
diff changeset
   362
  {
a1cca4472a58 Set up more sensible defaults (UTC, DST off) for timezone preferences. Also modified enano_date() to properly include GMT offsets when timezone characters are used. Fixes issue 4.
Dan
parents: 1133
diff changeset
   363
    if ( ($pos = strpos($string, $char)) !== false )
a1cca4472a58 Set up more sensible defaults (UTC, DST off) for timezone preferences. Also modified enano_date() to properly include GMT offsets when timezone characters are used. Fixes issue 4.
Dan
parents: 1133
diff changeset
   364
    {
a1cca4472a58 Set up more sensible defaults (UTC, DST off) for timezone preferences. Also modified enano_date() to properly include GMT offsets when timezone characters are used. Fixes issue 4.
Dan
parents: 1133
diff changeset
   365
      if ( $string{ $pos - 1 } != '\\' )
a1cca4472a58 Set up more sensible defaults (UTC, DST off) for timezone preferences. Also modified enano_date() to properly include GMT offsets when timezone characters are used. Fixes issue 4.
Dan
parents: 1133
diff changeset
   366
      {
a1cca4472a58 Set up more sensible defaults (UTC, DST off) for timezone preferences. Also modified enano_date() to properly include GMT offsets when timezone characters are used. Fixes issue 4.
Dan
parents: 1133
diff changeset
   367
        // add in our own timezone string
a1cca4472a58 Set up more sensible defaults (UTC, DST off) for timezone preferences. Also modified enano_date() to properly include GMT offsets when timezone characters are used. Fixes issue 4.
Dan
parents: 1133
diff changeset
   368
        // FIXME: l10n? (do we need to? does anyone really not know what "GMT" means? even uglier escaping?)
a1cca4472a58 Set up more sensible defaults (UTC, DST off) for timezone preferences. Also modified enano_date() to properly include GMT offsets when timezone characters are used. Fixes issue 4.
Dan
parents: 1133
diff changeset
   369
        $tzi = '\\G\\M\\T';
a1cca4472a58 Set up more sensible defaults (UTC, DST off) for timezone preferences. Also modified enano_date() to properly include GMT offsets when timezone characters are used. Fixes issue 4.
Dan
parents: 1133
diff changeset
   370
        $tzo = $timezone + $dst_offset;
a1cca4472a58 Set up more sensible defaults (UTC, DST off) for timezone preferences. Also modified enano_date() to properly include GMT offsets when timezone characters are used. Fixes issue 4.
Dan
parents: 1133
diff changeset
   371
        $sign = $tzo > 0 ? '+' : '-';
a1cca4472a58 Set up more sensible defaults (UTC, DST off) for timezone preferences. Also modified enano_date() to properly include GMT offsets when timezone characters are used. Fixes issue 4.
Dan
parents: 1133
diff changeset
   372
        $tzi .= $sign . (intval(abs($tzo / 60)));
a1cca4472a58 Set up more sensible defaults (UTC, DST off) for timezone preferences. Also modified enano_date() to properly include GMT offsets when timezone characters are used. Fixes issue 4.
Dan
parents: 1133
diff changeset
   373
        if ( $tzo % 60 )
a1cca4472a58 Set up more sensible defaults (UTC, DST off) for timezone preferences. Also modified enano_date() to properly include GMT offsets when timezone characters are used. Fixes issue 4.
Dan
parents: 1133
diff changeset
   374
          $tzi .= sprintf(":%02d", abs($tzo) % 60);
a1cca4472a58 Set up more sensible defaults (UTC, DST off) for timezone preferences. Also modified enano_date() to properly include GMT offsets when timezone characters are used. Fixes issue 4.
Dan
parents: 1133
diff changeset
   375
        
a1cca4472a58 Set up more sensible defaults (UTC, DST off) for timezone preferences. Also modified enano_date() to properly include GMT offsets when timezone characters are used. Fixes issue 4.
Dan
parents: 1133
diff changeset
   376
        $string = substr($string, 0, $pos) . $tzi . substr($string, $pos + 1);
a1cca4472a58 Set up more sensible defaults (UTC, DST off) for timezone preferences. Also modified enano_date() to properly include GMT offsets when timezone characters are used. Fixes issue 4.
Dan
parents: 1133
diff changeset
   377
      }
a1cca4472a58 Set up more sensible defaults (UTC, DST off) for timezone preferences. Also modified enano_date() to properly include GMT offsets when timezone characters are used. Fixes issue 4.
Dan
parents: 1133
diff changeset
   378
    }
711
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   379
  }
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   380
  
406
7468a663315f Added some basic timezone support; DST support is still to come.
Dan
parents: 391
diff changeset
   381
  // Let PHP do the work for us =)
1081
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   382
  $result = gmdate($string, $timestamp);
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   383
  if ( isset($relative_date) )
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   384
  {
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   385
    $result = "$relative_date, $result";
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   386
  }
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   387
  return $result;
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   388
}
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   389
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   390
/**
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   391
 * Get a relative date ("Today"/"Yesterday"/"N days ago")
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   392
 * @param int Timestamp
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   393
 * @return string
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   394
 */
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   395
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   396
function get_relative_date($time)
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   397
{
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   398
  global $lang, $session;
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   399
  // Our formatting string to pass to enano_date()
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   400
  // This should not include minute/second info, only today's date in whatever format suits your fancy
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   401
  $formatstring = $session->date_format;
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   402
  // Today's date
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   403
  $today = enano_date($formatstring);
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   404
  // Yesterday's date
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   405
  $yesterday = enano_date($formatstring, (time() - (24*60*60)));
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   406
  // Date on the input
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   407
  $then = enano_date($formatstring, $time);
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   408
  // "X days ago" logic
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   409
  for ( $i = 2; $i <= 6; $i++ )
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   410
  {
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   411
    // hours_in_day * minutes_in_hour * seconds_in_minute * num_days
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   412
    $offset = 24 * 60 * 60 * $i;
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   413
    $days_ago = enano_date($formatstring, (time() - $offset));
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   414
    // so does the input timestamp match the date from $i days ago?
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   415
    if ( $then == $days_ago )
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   416
    {
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   417
      // yes, return $i
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   418
      return $lang->get('userfuncs_ml_date_daysago', array('days_ago' => $i));
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   419
    }
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   420
  }
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   421
  // either yesterday, today, or before 6 days ago
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   422
  switch($then)
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   423
  {
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   424
    case $today:
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   425
      return $lang->get('userfuncs_ml_date_today');
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   426
    case $yesterday:
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   427
      return $lang->get('userfuncs_ml_date_yesterday');
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   428
    default:
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   429
      return $then;
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   430
  }
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   431
  //     .--.
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   432
  //    |o_o |
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   433
  //    |!_/ |
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   434
  //   //   \ \
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   435
  //  (|     | )
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   436
  // /'\_   _/`\
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   437
  // \___)=(___/
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
   438
  return 'Linux rocks!';
345
4ccdfeee9a11 WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
parents: 343
diff changeset
   439
}
4ccdfeee9a11 WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
parents: 343
diff changeset
   440
4ccdfeee9a11 WiP commit for admin panel localization. All modules up to Admin:UserManager (working down the list) are localized except Admin:ThemeManager, which is due for a rewrite
Dan
parents: 343
diff changeset
   441
/**
711
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   442
 * Determine if a timestamp is within DST.
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   443
 * @param int Timestamp
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   444
 * @param int Start month (1-12) of DST
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   445
 * @param int Which Sunday DST starts on (*_SUNDAY constants)
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   446
 * @param int End month of DST
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   447
 * @param int Which Sunday DST ends on
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   448
 * @return bool
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   449
 */
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   450
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   451
function check_timestamp_dst($time, $start_month, $start_sunday, $end_month, $end_sunday)
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   452
{
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   453
  static $sundays = array(FIRST_SUNDAY, SECOND_SUNDAY, THIRD_SUNDAY, LAST_SUNDAY);
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   454
  
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   455
  // perform timestamp offset
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   456
  global $timezone;
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   457
  // it's gonna be in minutes, so multiply by 60 to offset the unix timestamp
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   458
  $time = $time + ( $timezone * 60 );
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   459
  $year = intval(gmdate('Y', $time));
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   460
  
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   461
  // one-pass validation
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   462
  if ( !in_array($start_sunday, $sundays) || !in_array($end_sunday, $sundays) ||
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   463
       $start_month < 1 || $start_month > 12 || $end_month < 1 || $end_month > 12 )
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   464
    return false;
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   465
    
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   466
  // get timestamp of the selected sunday (start)
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   467
  $dst_start = get_sunday_timestamp($start_month, $start_sunday, $year);
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   468
  $dst_end   = get_sunday_timestamp($end_month, $end_sunday, $year);
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   469
  
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   470
  if ( $dst_start > $dst_end )
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   471
  {
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   472
    // start time is past the end time, this means we're in the southern hemisphere
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   473
    // as a result, if we're within the range, DST is NOT in progress.
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   474
    return !( $time >= $dst_start && $time <= $dst_end );
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   475
  }
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   476
  
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   477
  return $time >= $dst_start && $time <= $dst_end;
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   478
}
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   479
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   480
/**
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   481
 * Returns a timestamp for the given *_SUNDAY index.
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   482
 * @param int Month
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   483
 * @param int Which Sunday (FIRST, SECOND, THIRD, or LAST)
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   484
 * @param int Year that we're doing our calculations in
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   485
 * @return int
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   486
 */
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   487
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   488
function get_sunday_timestamp($month, $sunday, $year)
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   489
{
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   490
  $days_in_month = array(
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   491
    1 => 31,
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   492
    2 => $year % 4 == 0 && ( $year % 100 != 0 || ( $year % 100 == 0 && $year % 400 == 0 ) ) ? 29 : 28,
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   493
    3 => 31,
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   494
    4 => 30,
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   495
    5 => 31,
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   496
    6 => 30,
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   497
    7 => 31,
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   498
    8 => 31,
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   499
    9 => 30,
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   500
    10 => 31,
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   501
    11 => 30,
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   502
    12 => 31
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   503
  );
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   504
  
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   505
  $result = mktime(0, 0, 0, $month, 1, $year);
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   506
  
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   507
  // hack. allows a specific day of the month to be set instead of a sunday. not a good place to do this.
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   508
  if ( is_string($sunday) && substr($sunday, -1) === 'd' )
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   509
  {
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   510
    $result += 86400 * ( intval($sunday) - 1);
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   511
    return $result;
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   512
  }
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   513
  
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   514
  $tick = 0;
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   515
  $days_remaining = $days_in_month[$month];
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   516
  while ( true )
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   517
  {
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   518
    if ( date('D', $result) == 'Sun' )
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   519
    {
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   520
      $tick++;
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   521
      if ( ( $tick == 1 && $sunday == FIRST_SUNDAY ) ||
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   522
           ( $tick == 2 && $sunday == SECOND_SUNDAY ) ||
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   523
           ( $tick == 3 && $sunday == THIRD_SUNDAY ) ||
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   524
           ( $sunday == LAST_SUNDAY && $days_remaining < 7 ) )
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   525
        break;
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   526
    }
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   527
    $days_remaining--;
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   528
    $result += 86400;
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   529
  }
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   530
  
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   531
  return $result;
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   532
}
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   533
f70d764aab33 Added initial support for DST. Rules are defined in constants.php and are extensible.
Dan
parents: 710
diff changeset
   534
/**
62
9dc4fded30e6 Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
parents: 48
diff changeset
   535
 * 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
parents: 48
diff changeset
   536
 * @param string Page ID string (ex: Special:Administration)
91
8079b0288e8e Added ability to detag deleted pages
Dan
parents: 86
diff changeset
   537
 * @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
parents: 48
diff changeset
   538
 * @return string
9dc4fded30e6 Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
parents: 48
diff changeset
   539
 */
9dc4fded30e6 Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
parents: 48
diff changeset
   540
91
8079b0288e8e Added ability to detag deleted pages
Dan
parents: 86
diff changeset
   541
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
parents: 48
diff changeset
   542
{
9dc4fded30e6 Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
parents: 48
diff changeset
   543
  global $db, $session, $paths, $template, $plugins; // Common objects
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   544
62
9dc4fded30e6 Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
parents: 48
diff changeset
   545
  $idata = RenderMan::strToPageID($page_id);
953
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
   546
  return get_page_title_ns($idata[0], $idata[1]);
62
9dc4fded30e6 Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
parents: 48
diff changeset
   547
}
9dc4fded30e6 Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
parents: 48
diff changeset
   548
9dc4fded30e6 Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
parents: 48
diff changeset
   549
/**
9dc4fded30e6 Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
parents: 48
diff changeset
   550
 * 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
parents: 48
diff changeset
   551
 * @param string Page ID
9dc4fded30e6 Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
parents: 48
diff changeset
   552
 * @param string Namespace
9dc4fded30e6 Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
parents: 48
diff changeset
   553
 * @return string
9dc4fded30e6 Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
parents: 48
diff changeset
   554
 */
9dc4fded30e6 Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
parents: 48
diff changeset
   555
9dc4fded30e6 Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
parents: 48
diff changeset
   556
function get_page_title_ns($page_id, $namespace)
9dc4fded30e6 Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
parents: 48
diff changeset
   557
{
9dc4fded30e6 Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
parents: 48
diff changeset
   558
  global $db, $session, $paths, $template, $plugins; // Common objects
953
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
   559
  
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
   560
  $ns = namespace_factory($page_id, $namespace);
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
   561
  return $ns->title;
62
9dc4fded30e6 Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
parents: 48
diff changeset
   562
}
9dc4fded30e6 Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
parents: 48
diff changeset
   563
9dc4fded30e6 Redirect pages actually work stable-ish now; critical extraneous debug message removed (oops!)
Dan
parents: 48
diff changeset
   564
/**
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   565
 * Redirect the user to the specified URL.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   566
 * @param string $url The URL, either relative or absolute.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   567
 * @param string $title The title of the message
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   568
 * @param string $message A short message to show to the user
556
63e131c38876 More work done on effective permissions API, namely reporting of page group and usergroup names
Dan
parents: 542
diff changeset
   569
 * @param string $timeout Timeout, in seconds, to delay the redirect. Defaults to 3. If 0, sends a 307 Temporary Redirect.
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   570
 */
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   571
210
2b283402e4e4 Added language export to JSON page and localization for Javascript using $lang.get(). Localized AJAX login interface.
Dan
parents: 209
diff changeset
   572
function redirect($url, $title = 'etc_redirect_title', $message = 'etc_redirect_body', $timeout = 3)
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   573
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   574
  global $db, $session, $paths, $template, $plugins; // Common objects
210
2b283402e4e4 Added language export to JSON page and localization for Javascript using $lang.get(). Localized AJAX login interface.
Dan
parents: 209
diff changeset
   575
  global $lang;
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   576
909
94c1ff984286 Finished core of log display interface including filter management. There is still a bit of a to-do list, especially regarding rollbacks and reuploads.
Dan
parents: 906
diff changeset
   577
  // POST check added in 1.1.x because Firefox 3.0 asks us if we want to "resend the form
343
eefe9ab7fe7c Localized the first parts of the admin panel. As a consequence, also wrote a brand new Admin:PageManager that doesn't suck like the old one did.
Dan
parents: 335
diff changeset
   578
  // data to the new location", which can be confusing for some users.
909
94c1ff984286 Finished core of log display interface including filter management. There is still a bit of a to-do list, especially regarding rollbacks and reuploads.
Dan
parents: 906
diff changeset
   579
  $is_firefox_3 = ( strstr(@$_SERVER['HTTP_USER_AGENT'], 'Firefox/3.') ) ? true : false;
94c1ff984286 Finished core of log display interface including filter management. There is still a bit of a to-do list, especially regarding rollbacks and reuploads.
Dan
parents: 906
diff changeset
   580
  if ( $timeout == 0 && ( empty($_POST) || !$is_firefox_3 ) )
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   581
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   582
    header('Location: ' . $url);
391
85f91037cd4f Localization is FINISHED, DAMN IT HELLAH YEAH! OVER WITH! Man, it feels to get that off my chest. Release is in under 48 hours, folks. And we're ready for it.
Dan
parents: 387
diff changeset
   583
    header('Content-length: 0');
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   584
    header('HTTP/1.1 307 Temporary Redirect');
391
85f91037cd4f Localization is FINISHED, DAMN IT HELLAH YEAH! OVER WITH! Man, it feels to get that off my chest. Release is in under 48 hours, folks. And we're ready for it.
Dan
parents: 387
diff changeset
   585
    
85f91037cd4f Localization is FINISHED, DAMN IT HELLAH YEAH! OVER WITH! Man, it feels to get that off my chest. Release is in under 48 hours, folks. And we're ready for it.
Dan
parents: 387
diff changeset
   586
    // with 3xx codes HTTP clients expect a response of 0 bytes, so just die here
85f91037cd4f Localization is FINISHED, DAMN IT HELLAH YEAH! OVER WITH! Man, it feels to get that off my chest. Release is in under 48 hours, folks. And we're ready for it.
Dan
parents: 387
diff changeset
   587
    exit();
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   588
  }
272
e0ec986c0af3 Searching sucks, and Enano's search algorithm was complete bullcrap. So I rewrote it. No, it does not use Google search technology. Like they have a patent for using the Arial font on search result pages anyway.
Dan
parents: 270
diff changeset
   589
  
e0ec986c0af3 Searching sucks, and Enano's search algorithm was complete bullcrap. So I rewrote it. No, it does not use Google search technology. Like they have a patent for using the Arial font on search result pages anyway.
Dan
parents: 270
diff changeset
   590
  if ( !is_object($template) )
e0ec986c0af3 Searching sucks, and Enano's search algorithm was complete bullcrap. So I rewrote it. No, it does not use Google search technology. Like they have a patent for using the Arial font on search result pages anyway.
Dan
parents: 270
diff changeset
   591
  {
e0ec986c0af3 Searching sucks, and Enano's search algorithm was complete bullcrap. So I rewrote it. No, it does not use Google search technology. Like they have a patent for using the Arial font on search result pages anyway.
Dan
parents: 270
diff changeset
   592
    $template = new template_nodb();
e0ec986c0af3 Searching sucks, and Enano's search algorithm was complete bullcrap. So I rewrote it. No, it does not use Google search technology. Like they have a patent for using the Arial font on search result pages anyway.
Dan
parents: 270
diff changeset
   593
    $template->load_theme('oxygen', 'bleu', false);
574
df78a7fb91fd Fixed title not being set properly in redirect()
Dan
parents: 573
diff changeset
   594
    $template->assign_vars(array(
df78a7fb91fd Fixed title not being set properly in redirect()
Dan
parents: 573
diff changeset
   595
        'SITE_NAME' => 'Enano',
df78a7fb91fd Fixed title not being set properly in redirect()
Dan
parents: 573
diff changeset
   596
        'SITE_DESC' => 'This site is experiencing a critical error and cannot load.',
df78a7fb91fd Fixed title not being set properly in redirect()
Dan
parents: 573
diff changeset
   597
        'COPYRIGHT' => 'Powered by Enano CMS - &copy; 2006-2008 Dan Fuhry. This program is Free Software; see the <a href="' . scriptPath . '/install.php?mode=license">GPL file</a> included with this package for details.',
df78a7fb91fd Fixed title not being set properly in redirect()
Dan
parents: 573
diff changeset
   598
        'PAGE_NAME' => htmlspecialchars($title)
df78a7fb91fd Fixed title not being set properly in redirect()
Dan
parents: 573
diff changeset
   599
      ));
272
e0ec986c0af3 Searching sucks, and Enano's search algorithm was complete bullcrap. So I rewrote it. No, it does not use Google search technology. Like they have a patent for using the Arial font on search result pages anyway.
Dan
parents: 270
diff changeset
   600
  }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   601
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   602
  $template->add_header('<meta http-equiv="refresh" content="' . $timeout . '; url=' . str_replace('"', '\\"', $url) . '" />');
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   603
  $template->add_header('<script type="text/javascript">
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   604
      function __r() {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   605
        // FUNCTION AUTOMATICALLY GENERATED
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   606
        window.location="' . str_replace('"', '\\"', $url) . '";
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   607
      }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   608
      setTimeout(\'__r();\', ' . $timeout . '000);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   609
    </script>
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   610
    ');
272
e0ec986c0af3 Searching sucks, and Enano's search algorithm was complete bullcrap. So I rewrote it. No, it does not use Google search technology. Like they have a patent for using the Arial font on search result pages anyway.
Dan
parents: 270
diff changeset
   611
  
e0ec986c0af3 Searching sucks, and Enano's search algorithm was complete bullcrap. So I rewrote it. No, it does not use Google search technology. Like they have a patent for using the Arial font on search result pages anyway.
Dan
parents: 270
diff changeset
   612
  if ( get_class($template) == 'template_nodb' )
e0ec986c0af3 Searching sucks, and Enano's search algorithm was complete bullcrap. So I rewrote it. No, it does not use Google search technology. Like they have a patent for using the Arial font on search result pages anyway.
Dan
parents: 270
diff changeset
   613
    $template->init_vars();
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   614
574
df78a7fb91fd Fixed title not being set properly in redirect()
Dan
parents: 573
diff changeset
   615
  $template->assign_vars(array('PAGE_NAME' => $title));
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   616
  $template->header(true);
210
2b283402e4e4 Added language export to JSON page and localization for Javascript using $lang.get(). Localized AJAX login interface.
Dan
parents: 209
diff changeset
   617
  echo '<p>' . $message . '</p>';
2b283402e4e4 Added language export to JSON page and localization for Javascript using $lang.get(). Localized AJAX login interface.
Dan
parents: 209
diff changeset
   618
  $subst = array(
335
67bd3121a12e Replaced TinyMCE 2.x with 3.0 beta 3. Supports everything but IE. Also rewrote the editor interface completely from the ground up.
Dan
parents: 334
diff changeset
   619
      'timeout' => $timeout,
210
2b283402e4e4 Added language export to JSON page and localization for Javascript using $lang.get(). Localized AJAX login interface.
Dan
parents: 209
diff changeset
   620
      'redirect_url' => str_replace('"', '\\"', $url)
2b283402e4e4 Added language export to JSON page and localization for Javascript using $lang.get(). Localized AJAX login interface.
Dan
parents: 209
diff changeset
   621
    );
2b283402e4e4 Added language export to JSON page and localization for Javascript using $lang.get(). Localized AJAX login interface.
Dan
parents: 209
diff changeset
   622
  echo '<p>' . $lang->get('etc_redirect_timeout', $subst) . '</p>';
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   623
  $template->footer(true);
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   624
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   625
  $db->close();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   626
  exit(0);
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   627
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   628
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   629
562
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   630
/**
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   631
 * Generates a confirmation form if a CSRF check fails. Will terminate execution.
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   632
 */
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   633
573
43e7254afdb4 Renamed some functions (that were new in this release anyway) due to compatibility broken with PunBB bridge
Dan
parents: 566
diff changeset
   634
function csrf_request_confirm()
562
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   635
{
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   636
  global $db, $session, $paths, $template, $plugins; // Common objects
800
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   637
  global $lang, $output;
562
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   638
  
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   639
  // If the token was overridden with the correct one, the user confirmed the action using this form. Continue exec.
800
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   640
  if ( isset($_POST['cstok']) || isset($_GET['cstok']) )
562
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   641
  {
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   642
    // using the if() check makes sure that the token isn't in a cookie, since $_REQUEST includes $_COOKIE.
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   643
    $token_check =& $_REQUEST['cstok'];
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   644
    if ( $token_check === $session->csrf_token )
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   645
    {
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   646
      // overridden token matches, continue exec
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   647
      return true;
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   648
    }
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   649
  }
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   650
  
1092
3b97242ada21 Functions: silenced PHP warnings on ob_* functions
Dan
parents: 1081
diff changeset
   651
  @ob_end_clean();
842
f13bb4f21890 setConfig() will now delete config values if the second parameter is explicitly set to false
Dan
parents: 832
diff changeset
   652
  
800
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   653
  $output->set_title($lang->get('user_csrf_confirm_title'));
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   654
  $output->header();
562
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   655
  
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   656
  // initial info
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   657
  echo '<p>' . $lang->get('user_csrf_confirm_body') . '</p>';
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   658
  
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   659
  // start form
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   660
  $form_method = ( empty($_POST) ) ? 'get' : 'post';
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   661
  echo '<form action="' . htmlspecialchars($_SERVER['REQUEST_URI']) . '" method="' . $form_method . '" enctype="multipart/form-data">';
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   662
  
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   663
  echo '<fieldset enano:expand="closed">';
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   664
  echo '<legend>' . $lang->get('user_csrf_confirm_btn_viewrequest') . '</legend><div>';
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   665
  
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   666
  if ( empty($_POST) )
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   667
  {
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   668
    // GET request
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   669
    echo csrf_confirm_get_recursive();
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   670
  }
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   671
  else
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   672
  {
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   673
    // POST request
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   674
    echo csrf_confirm_post_recursive();
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   675
  }
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   676
  echo '</div></fieldset>';
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   677
  // insert the right CSRF token
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   678
  echo '<input type="hidden" name="cstok" value="' . $session->csrf_token . '" />';
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   679
  echo '<p><input type="submit" value="' . $lang->get('user_csrf_confirm_btn_continue') . '" /></p>';
800
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   680
  echo '</form><script type="text/javascript">addOnloadHook(function(){load_component(\'expander\');});</script>';
562
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   681
  
800
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   682
  $output->footer();
562
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   683
  
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   684
  exit;
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   685
}
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   686
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   687
function csrf_confirm_get_recursive($_inner = false, $pfx = false, $data = false)
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   688
{
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   689
  // make posted arrays work right
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   690
  if ( !$data )
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   691
    ( $_inner == 'post' ) ? $data =& $_POST : $data =& $_GET;
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   692
  foreach ( $data as $key => $value )
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   693
  {
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   694
    $pfx_this = ( empty($pfx) ) ? $key : "{$pfx}[{$key}]";
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   695
    if ( is_array($value) )
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   696
    {
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   697
      csrf_confirm_get_recursive(true, $pfx_this, $value);
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   698
    }
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   699
    else if ( empty($value) )
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   700
    {
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   701
      echo htmlspecialchars($pfx_this . " = <nil>") . "<br />\n";
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   702
      echo '<input type="hidden" name="' . htmlspecialchars($pfx_this) . '" value="" />';
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   703
    }
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   704
    else
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   705
    {
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   706
      echo htmlspecialchars($pfx_this . " = " . $value) . "<br />\n";
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   707
      echo '<input type="hidden" name="' . htmlspecialchars($pfx_this) . '" value="' . htmlspecialchars($value) . '" />';
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   708
    }
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   709
  }
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   710
}
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   711
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   712
function csrf_confirm_post_recursive()
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   713
{
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   714
  csrf_confirm_get_recursive('post');
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   715
}
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
   716
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   717
// Removed wikiFormat() from here, replaced with RenderMan::render
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   718
22
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
   719
/**
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
   720
 * Tell me if the page exists or not.
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
   721
 * @param string the full page ID (Special:Administration) of the page to check for
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
   722
 * @return bool True if the page exists, false otherwise
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
   723
 */
d0314575e2f0 More preliminary l10n work; userpage portal style basics implemented
Dan
parents: 21
diff changeset
   724
953
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
   725
function isPage($p)
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
   726
{
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   727
  global $db, $session, $paths, $template, $plugins; // Common objects
953
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
   728
  static $ispage_cache = array();
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
   729
  if ( isset($ispage_cache[$p]) )
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
   730
    return $ispage_cache[$p];
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
   731
  
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
   732
  list($page_id, $namespace) = RenderMan::strToPageID($p);
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
   733
  $cdata = $paths->get_cdata($page_id, $namespace);
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
   734
  if ( !isset($cdata['page_exists']) )
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
   735
  {
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
   736
    $class = ( class_exists($_ = "Namespace_$namespace") ) ? $_ : "Namespace_Default";
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
   737
    $page = new $class($page_id, $namespace);
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
   738
    return $page->exists();
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
   739
  }
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
   740
  
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
   741
  $ispage_cache[$p] = $cdata['page_exists'];
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
   742
  return $cdata['page_exists'];
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   743
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   744
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   745
/**
800
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   746
 * Returns the appropriate Namespace_* object for a page.
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   747
 * @param string Page ID
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   748
 * @param string Namespace
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   749
 * @param int Revision ID
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   750
 */
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   751
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   752
function namespace_factory($page_id, $namespace, $revision_id = 0)
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   753
{
953
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
   754
  global $db, $session, $paths, $template, $plugins; // Common objects
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
   755
  
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
   756
  static $objcache = array();
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
   757
  $pathskey = $paths->get_pathskey($page_id, $namespace) . ":$revision_id";
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
   758
  if ( isset($objcache[$pathskey]) )
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
   759
    return $objcache[$pathskey];
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
   760
  
800
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   761
  if ( !class_exists("Namespace_$namespace") )
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   762
  {
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   763
    if ( file_exists(ENANO_ROOT . "/includes/namespaces/" . strtolower($namespace) . ".php") )
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   764
    {
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   765
      require(ENANO_ROOT . "/includes/namespaces/" . strtolower($namespace) . ".php");
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   766
    }
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   767
  }
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   768
  if ( class_exists("Namespace_$namespace") )
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   769
  {
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   770
    $class = "Namespace_$namespace";
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   771
    $ns = new $class($page_id, $namespace, $revision_id);
953
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
   772
    $objcache[$pathskey] = $ns;
800
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   773
    return $ns;
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   774
  }
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   775
  else
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   776
  {
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   777
    $ns = new Namespace_Default($page_id, $namespace, $revision_id);
953
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
   778
    $objcache[$pathskey] = $ns;
800
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   779
    return $ns;
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   780
  }
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   781
}
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   782
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   783
/**
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   784
 * These are some old functions that were used with the Midget codebase. They are deprecated and should not be used any more.
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   785
 */
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   786
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   787
function arrayItemUp($arr, $keyname) {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   788
  $keylist = array_keys($arr);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   789
  $keyflop = array_flip($keylist);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   790
  $idx = $keyflop[$keyname];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   791
  $idxm = $idx - 1;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   792
  $temp = $arr[$keylist[$idxm]];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   793
  if($arr[$keylist[0]] == $arr[$keyname]) return $arr;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   794
  $arr[$keylist[$idxm]] = $arr[$keylist[$idx]];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   795
  $arr[$keylist[$idx]] = $temp;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   796
  return $arr;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   797
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   798
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   799
function arrayItemDown($arr, $keyname) {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   800
  $keylist = array_keys($arr);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   801
  $keyflop = array_flip($keylist);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   802
  $idx = $keyflop[$keyname];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   803
  $idxm = $idx + 1;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   804
  $temp = $arr[$keylist[$idxm]];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   805
  $sz = sizeof($arr); $sz--;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   806
  if($arr[$keylist[$sz]] == $arr[$keyname]) return $arr;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   807
  $arr[$keylist[$idxm]]  =  $arr[$keylist[$idx]];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   808
  $arr[$keylist[$idx]]   =  $temp;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   809
  return $arr;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   810
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   811
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   812
function arrayItemTop($arr, $keyname) {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   813
  $keylist = array_keys($arr);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   814
  $keyflop = array_flip($keylist);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   815
  $idx = $keyflop[$keyname];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   816
  while( $orig != $arr[$keylist[0]] ) {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   817
    // echo 'Keyname: '.$keylist[$idx] . '<br />'; flush(); ob_flush(); // Debugger
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   818
    if($idx < 0) return $arr;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   819
    if($keylist[$idx] == '' || $keylist[$idx] < 0 || !$keylist[$idx]) {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   820
      return $arr;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   821
    }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   822
    $arr = arrayItemUp($arr, $keylist[$idx]);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   823
    $idx--;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   824
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   825
  return $arr;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   826
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   827
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   828
function arrayItemBottom($arr, $keyname) {
800
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   829
  $b = $arr[$keyname];
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   830
  unset($arr[$keyname]);
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   831
  $arr[$keyname] = $b;
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   832
  unset($b);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   833
  return $arr;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   834
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   835
606
daf8c556ada7 Moved enano_safe_array_merge() to functions.php as comment.php depends on it
Dan
parents: 599
diff changeset
   836
/**
daf8c556ada7 Moved enano_safe_array_merge() to functions.php as comment.php depends on it
Dan
parents: 599
diff changeset
   837
 * Implementation of array_merge() that preserves key names. $arr2 takes precedence over $arr1.
daf8c556ada7 Moved enano_safe_array_merge() to functions.php as comment.php depends on it
Dan
parents: 599
diff changeset
   838
 * @param array $arr1
daf8c556ada7 Moved enano_safe_array_merge() to functions.php as comment.php depends on it
Dan
parents: 599
diff changeset
   839
 * @param array $arr2
daf8c556ada7 Moved enano_safe_array_merge() to functions.php as comment.php depends on it
Dan
parents: 599
diff changeset
   840
 * @return array
daf8c556ada7 Moved enano_safe_array_merge() to functions.php as comment.php depends on it
Dan
parents: 599
diff changeset
   841
 */
daf8c556ada7 Moved enano_safe_array_merge() to functions.php as comment.php depends on it
Dan
parents: 599
diff changeset
   842
daf8c556ada7 Moved enano_safe_array_merge() to functions.php as comment.php depends on it
Dan
parents: 599
diff changeset
   843
function enano_safe_array_merge($arr1, $arr2)
daf8c556ada7 Moved enano_safe_array_merge() to functions.php as comment.php depends on it
Dan
parents: 599
diff changeset
   844
{
daf8c556ada7 Moved enano_safe_array_merge() to functions.php as comment.php depends on it
Dan
parents: 599
diff changeset
   845
  $arr3 = $arr1;
daf8c556ada7 Moved enano_safe_array_merge() to functions.php as comment.php depends on it
Dan
parents: 599
diff changeset
   846
  foreach($arr2 as $k => $v)
daf8c556ada7 Moved enano_safe_array_merge() to functions.php as comment.php depends on it
Dan
parents: 599
diff changeset
   847
  {
daf8c556ada7 Moved enano_safe_array_merge() to functions.php as comment.php depends on it
Dan
parents: 599
diff changeset
   848
    $arr3[$k] = $v;
daf8c556ada7 Moved enano_safe_array_merge() to functions.php as comment.php depends on it
Dan
parents: 599
diff changeset
   849
  }
daf8c556ada7 Moved enano_safe_array_merge() to functions.php as comment.php depends on it
Dan
parents: 599
diff changeset
   850
  return $arr3;
daf8c556ada7 Moved enano_safe_array_merge() to functions.php as comment.php depends on it
Dan
parents: 599
diff changeset
   851
}
daf8c556ada7 Moved enano_safe_array_merge() to functions.php as comment.php depends on it
Dan
parents: 599
diff changeset
   852
770
62fed244fa1c Fixed timezone preference setting not fully implemented; added ability for users to select their own rank from a list of possible ranks based on group membership and user level
Dan
parents: 766
diff changeset
   853
/**
62fed244fa1c Fixed timezone preference setting not fully implemented; added ability for users to select their own rank from a list of possible ranks based on group membership and user level
Dan
parents: 766
diff changeset
   854
 * Looks at all values in an array and casts them to integers if they are strings with digits. Recursive.
62fed244fa1c Fixed timezone preference setting not fully implemented; added ability for users to select their own rank from a list of possible ranks based on group membership and user level
Dan
parents: 766
diff changeset
   855
 * @param array Array to process
62fed244fa1c Fixed timezone preference setting not fully implemented; added ability for users to select their own rank from a list of possible ranks based on group membership and user level
Dan
parents: 766
diff changeset
   856
 * @return array
62fed244fa1c Fixed timezone preference setting not fully implemented; added ability for users to select their own rank from a list of possible ranks based on group membership and user level
Dan
parents: 766
diff changeset
   857
 */
62fed244fa1c Fixed timezone preference setting not fully implemented; added ability for users to select their own rank from a list of possible ranks based on group membership and user level
Dan
parents: 766
diff changeset
   858
62fed244fa1c Fixed timezone preference setting not fully implemented; added ability for users to select their own rank from a list of possible ranks based on group membership and user level
Dan
parents: 766
diff changeset
   859
function integerize_array($arr)
62fed244fa1c Fixed timezone preference setting not fully implemented; added ability for users to select their own rank from a list of possible ranks based on group membership and user level
Dan
parents: 766
diff changeset
   860
{
62fed244fa1c Fixed timezone preference setting not fully implemented; added ability for users to select their own rank from a list of possible ranks based on group membership and user level
Dan
parents: 766
diff changeset
   861
  if ( !is_array($arr) )
62fed244fa1c Fixed timezone preference setting not fully implemented; added ability for users to select their own rank from a list of possible ranks based on group membership and user level
Dan
parents: 766
diff changeset
   862
    return $arr;
62fed244fa1c Fixed timezone preference setting not fully implemented; added ability for users to select their own rank from a list of possible ranks based on group membership and user level
Dan
parents: 766
diff changeset
   863
  
62fed244fa1c Fixed timezone preference setting not fully implemented; added ability for users to select their own rank from a list of possible ranks based on group membership and user level
Dan
parents: 766
diff changeset
   864
  foreach ( $arr as &$val )
62fed244fa1c Fixed timezone preference setting not fully implemented; added ability for users to select their own rank from a list of possible ranks based on group membership and user level
Dan
parents: 766
diff changeset
   865
  {
62fed244fa1c Fixed timezone preference setting not fully implemented; added ability for users to select their own rank from a list of possible ranks based on group membership and user level
Dan
parents: 766
diff changeset
   866
    if ( is_string($val) && ctype_digit($val) && strlen($val) < 10 )
62fed244fa1c Fixed timezone preference setting not fully implemented; added ability for users to select their own rank from a list of possible ranks based on group membership and user level
Dan
parents: 766
diff changeset
   867
    {
62fed244fa1c Fixed timezone preference setting not fully implemented; added ability for users to select their own rank from a list of possible ranks based on group membership and user level
Dan
parents: 766
diff changeset
   868
      $val = intval($val);
62fed244fa1c Fixed timezone preference setting not fully implemented; added ability for users to select their own rank from a list of possible ranks based on group membership and user level
Dan
parents: 766
diff changeset
   869
    }
62fed244fa1c Fixed timezone preference setting not fully implemented; added ability for users to select their own rank from a list of possible ranks based on group membership and user level
Dan
parents: 766
diff changeset
   870
    else if ( is_array($val) )
62fed244fa1c Fixed timezone preference setting not fully implemented; added ability for users to select their own rank from a list of possible ranks based on group membership and user level
Dan
parents: 766
diff changeset
   871
    {
62fed244fa1c Fixed timezone preference setting not fully implemented; added ability for users to select their own rank from a list of possible ranks based on group membership and user level
Dan
parents: 766
diff changeset
   872
      $val = integerize_array($val);
62fed244fa1c Fixed timezone preference setting not fully implemented; added ability for users to select their own rank from a list of possible ranks based on group membership and user level
Dan
parents: 766
diff changeset
   873
    }
62fed244fa1c Fixed timezone preference setting not fully implemented; added ability for users to select their own rank from a list of possible ranks based on group membership and user level
Dan
parents: 766
diff changeset
   874
  }
62fed244fa1c Fixed timezone preference setting not fully implemented; added ability for users to select their own rank from a list of possible ranks based on group membership and user level
Dan
parents: 766
diff changeset
   875
  return $arr;
62fed244fa1c Fixed timezone preference setting not fully implemented; added ability for users to select their own rank from a list of possible ranks based on group membership and user level
Dan
parents: 766
diff changeset
   876
}
62fed244fa1c Fixed timezone preference setting not fully implemented; added ability for users to select their own rank from a list of possible ranks based on group membership and user level
Dan
parents: 766
diff changeset
   877
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   878
// Convert IP address to hex string
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   879
// Input:  127.0.0.1  (string)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   880
// Output: 0x7f000001 (string)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   881
// Updated 12/8/06 to work with PHP4 and not use eval() (blech)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   882
function ip2hex($ip) {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   883
  if ( preg_match('/^([0-9a-f:]+)$/', $ip) )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   884
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   885
    // this is an ipv6 address
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   886
    return str_replace(':', '', $ip);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   887
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   888
  $nums = explode('.', $ip);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   889
  if(sizeof($nums) != 4) return false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   890
  $str = '0x';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   891
  foreach($nums as $n)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   892
  {
221
e5302cb1945c Localized a good part, if not all, of the registration page and a couple other things.
Dan
parents: 214
diff changeset
   893
    $byte = (string)dechex($n);
e5302cb1945c Localized a good part, if not all, of the registration page and a couple other things.
Dan
parents: 214
diff changeset
   894
    if ( strlen($byte) < 2 )
e5302cb1945c Localized a good part, if not all, of the registration page and a couple other things.
Dan
parents: 214
diff changeset
   895
      $byte = '0' . $byte;
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   896
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   897
  return $str;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   898
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   899
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   900
// Convert DWord to IP address
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   901
// Input:  0x7f000001
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   902
// Output: 127.0.0.1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   903
// Updated 12/8/06 to work with PHP4 and not use eval() (blech)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   904
function hex2ip($in) {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   905
  if(substr($in, 0, 2) == '0x') $ip = substr($in, 2, 8);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   906
  else $ip = substr($in, 0, 8);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   907
  $octets = enano_str_split($ip, 2);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   908
  $str = '';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   909
  $newoct = Array();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   910
  foreach($octets as $o)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   911
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   912
    $o = (int)hexdec($o);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   913
    $newoct[] = $o;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   914
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   915
  return implode('.', $newoct);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   916
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   917
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   918
// Function strip_php moved to RenderMan class
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   919
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   920
/**
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   921
 * Immediately brings the site to a halt with an error message. Unlike grinding_halt() this can only be called after the config has been
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   922
 * fetched (plugin developers don't even need to worry since plugins are always loaded after the config) and shows the site name and
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   923
 * description.
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   924
 * @param string The title of the error message
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   925
 * @param string The body of the message, this can be HTML, and should be separated into paragraphs using the <p> tag
479
192db6ac195b Added $no_wrapper parameter to die_semicritical, useful for some upcoming PageProcessor tweaks.
Dan
parents: 473
diff changeset
   926
 * @param bool Added in 1.1.3. If true, only the error is output. Defaults to false.
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   927
 */
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   928
479
192db6ac195b Added $no_wrapper parameter to die_semicritical, useful for some upcoming PageProcessor tweaks.
Dan
parents: 473
diff changeset
   929
function die_semicritical($t, $p, $no_wrapper = false)
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   930
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   931
  global $db, $session, $paths, $template, $plugins; // Common objects
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   932
  $db->close();
533
698a8f04957c Huge improvements to the template_nodb class and surrounding code; moved template compiler core to its own non-classed function to allow code re-use
Dan
parents: 519
diff changeset
   933
  
1092
3b97242ada21 Functions: silenced PHP warnings on ob_* functions
Dan
parents: 1081
diff changeset
   934
  if ( @ob_get_status() )
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   935
    ob_end_clean();
533
698a8f04957c Huge improvements to the template_nodb class and surrounding code; moved template compiler core to its own non-classed function to allow code re-use
Dan
parents: 519
diff changeset
   936
698a8f04957c Huge improvements to the template_nodb class and surrounding code; moved template compiler core to its own non-classed function to allow code re-use
Dan
parents: 519
diff changeset
   937
  // If the config hasn't been fetched yet, call grinding_halt.
698a8f04957c Huge improvements to the template_nodb class and surrounding code; moved template compiler core to its own non-classed function to allow code re-use
Dan
parents: 519
diff changeset
   938
  if ( !defined('ENANO_CONFIG_FETCHED') )
698a8f04957c Huge improvements to the template_nodb class and surrounding code; moved template compiler core to its own non-classed function to allow code re-use
Dan
parents: 519
diff changeset
   939
  {
698a8f04957c Huge improvements to the template_nodb class and surrounding code; moved template compiler core to its own non-classed function to allow code re-use
Dan
parents: 519
diff changeset
   940
    grinding_halt($t, $p);
698a8f04957c Huge improvements to the template_nodb class and surrounding code; moved template compiler core to its own non-classed function to allow code re-use
Dan
parents: 519
diff changeset
   941
  }
500
455277559782 Added basic CLI support for the Enano API. Loads automatically, just include common.php as normal. REVISION 500!!! :-D
Dan
parents: 481
diff changeset
   942
  
533
698a8f04957c Huge improvements to the template_nodb class and surrounding code; moved template compiler core to its own non-classed function to allow code re-use
Dan
parents: 519
diff changeset
   943
  // also do grinding_halt() if we're in CLI mode
500
455277559782 Added basic CLI support for the Enano API. Loads automatically, just include common.php as normal. REVISION 500!!! :-D
Dan
parents: 481
diff changeset
   944
  if ( defined('ENANO_CLI') )
455277559782 Added basic CLI support for the Enano API. Loads automatically, just include common.php as normal. REVISION 500!!! :-D
Dan
parents: 481
diff changeset
   945
  {
455277559782 Added basic CLI support for the Enano API. Loads automatically, just include common.php as normal. REVISION 500!!! :-D
Dan
parents: 481
diff changeset
   946
    grinding_halt($t, $p);
455277559782 Added basic CLI support for the Enano API. Loads automatically, just include common.php as normal. REVISION 500!!! :-D
Dan
parents: 481
diff changeset
   947
  }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   948
479
192db6ac195b Added $no_wrapper parameter to die_semicritical, useful for some upcoming PageProcessor tweaks.
Dan
parents: 473
diff changeset
   949
  if ( $no_wrapper )
192db6ac195b Added $no_wrapper parameter to die_semicritical, useful for some upcoming PageProcessor tweaks.
Dan
parents: 473
diff changeset
   950
  {
192db6ac195b Added $no_wrapper parameter to die_semicritical, useful for some upcoming PageProcessor tweaks.
Dan
parents: 473
diff changeset
   951
    echo '<h2>' . htmlspecialchars($t) . '</h2>';
192db6ac195b Added $no_wrapper parameter to die_semicritical, useful for some upcoming PageProcessor tweaks.
Dan
parents: 473
diff changeset
   952
    echo "<p>$p</p>";
192db6ac195b Added $no_wrapper parameter to die_semicritical, useful for some upcoming PageProcessor tweaks.
Dan
parents: 473
diff changeset
   953
    exit;
192db6ac195b Added $no_wrapper parameter to die_semicritical, useful for some upcoming PageProcessor tweaks.
Dan
parents: 473
diff changeset
   954
  }
192db6ac195b Added $no_wrapper parameter to die_semicritical, useful for some upcoming PageProcessor tweaks.
Dan
parents: 473
diff changeset
   955
  
800
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   956
  $output = new Output_Safe();
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   957
  $output->set_title($t);
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   958
  $output->header();
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   959
  echo $p;
800
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
   960
  $output->footer();
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   961
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   962
  exit;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   963
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   964
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   965
/**
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   966
 * 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.
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   967
 * @param string The title of the message
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   968
 * @param string The body of the message, this can be HTML, and should be separated into paragraphs using the <p> tag
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   969
 */
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   970
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   971
function die_friendly($t, $p)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   972
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   973
  global $db, $session, $paths, $template, $plugins; // Common objects
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   974
1092
3b97242ada21 Functions: silenced PHP warnings on ob_* functions
Dan
parents: 1081
diff changeset
   975
  if ( @ob_get_status() )
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   976
    ob_end_clean();
1206
50f6c144ec68 Fixed some bugs with account activation, especially if you're a half-logged-in vegetable.
Dan
parents: 1203
diff changeset
   977
  
50f6c144ec68 Fixed some bugs with account activation, especially if you're a half-logged-in vegetable.
Dan
parents: 1203
diff changeset
   978
  global $output;
50f6c144ec68 Fixed some bugs with account activation, especially if you're a half-logged-in vegetable.
Dan
parents: 1203
diff changeset
   979
50f6c144ec68 Fixed some bugs with account activation, especially if you're a half-logged-in vegetable.
Dan
parents: 1203
diff changeset
   980
  $output->set_title($t);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   981
  $template->header();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   982
  echo $p;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   983
  $template->footer();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   984
  $db->close();
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   985
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   986
  exit;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   987
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   988
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   989
/**
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   990
 * 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.
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   991
 * @param string The title of the error message
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   992
 * @param string The body of the message, this can be HTML, and should be separated into paragraphs using the <p> tag
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   993
 */
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   994
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   995
function grinding_halt($t, $p)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   996
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   997
  global $db, $session, $paths, $template, $plugins; // Common objects
125
fb31c951d3a2 Fixed some rather major bugs in the registration system, this will need a release followup
Dan
parents: 112
diff changeset
   998
  
fb31c951d3a2 Fixed some rather major bugs in the registration system, this will need a release followup
Dan
parents: 112
diff changeset
   999
  if ( !defined('scriptPath') )
fb31c951d3a2 Fixed some rather major bugs in the registration system, this will need a release followup
Dan
parents: 112
diff changeset
  1000
    require( ENANO_ROOT . '/config.php' );
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1001
125
fb31c951d3a2 Fixed some rather major bugs in the registration system, this will need a release followup
Dan
parents: 112
diff changeset
  1002
  if ( is_object($db) )
fb31c951d3a2 Fixed some rather major bugs in the registration system, this will need a release followup
Dan
parents: 112
diff changeset
  1003
    $db->close();
500
455277559782 Added basic CLI support for the Enano API. Loads automatically, just include common.php as normal. REVISION 500!!! :-D
Dan
parents: 481
diff changeset
  1004
  
1092
3b97242ada21 Functions: silenced PHP warnings on ob_* functions
Dan
parents: 1081
diff changeset
  1005
  if ( @ob_get_status() )
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1006
    ob_end_clean();
500
455277559782 Added basic CLI support for the Enano API. Loads automatically, just include common.php as normal. REVISION 500!!! :-D
Dan
parents: 481
diff changeset
  1007
  
455277559782 Added basic CLI support for the Enano API. Loads automatically, just include common.php as normal. REVISION 500!!! :-D
Dan
parents: 481
diff changeset
  1008
  if ( defined('ENANO_CLI') )
455277559782 Added basic CLI support for the Enano API. Loads automatically, just include common.php as normal. REVISION 500!!! :-D
Dan
parents: 481
diff changeset
  1009
  {
455277559782 Added basic CLI support for the Enano API. Loads automatically, just include common.php as normal. REVISION 500!!! :-D
Dan
parents: 481
diff changeset
  1010
    // set console color
455277559782 Added basic CLI support for the Enano API. Loads automatically, just include common.php as normal. REVISION 500!!! :-D
Dan
parents: 481
diff changeset
  1011
    echo "\x1B[31;1m";
455277559782 Added basic CLI support for the Enano API. Loads automatically, just include common.php as normal. REVISION 500!!! :-D
Dan
parents: 481
diff changeset
  1012
    // error title
455277559782 Added basic CLI support for the Enano API. Loads automatically, just include common.php as normal. REVISION 500!!! :-D
Dan
parents: 481
diff changeset
  1013
    echo "Critical error in Enano runtime: ";
455277559782 Added basic CLI support for the Enano API. Loads automatically, just include common.php as normal. REVISION 500!!! :-D
Dan
parents: 481
diff changeset
  1014
    // unbold
455277559782 Added basic CLI support for the Enano API. Loads automatically, just include common.php as normal. REVISION 500!!! :-D
Dan
parents: 481
diff changeset
  1015
    echo "$t\n";
455277559782 Added basic CLI support for the Enano API. Loads automatically, just include common.php as normal. REVISION 500!!! :-D
Dan
parents: 481
diff changeset
  1016
    // bold
455277559782 Added basic CLI support for the Enano API. Loads automatically, just include common.php as normal. REVISION 500!!! :-D
Dan
parents: 481
diff changeset
  1017
    echo "\x1B[37;1m";
455277559782 Added basic CLI support for the Enano API. Loads automatically, just include common.php as normal. REVISION 500!!! :-D
Dan
parents: 481
diff changeset
  1018
    echo "Error: ";
455277559782 Added basic CLI support for the Enano API. Loads automatically, just include common.php as normal. REVISION 500!!! :-D
Dan
parents: 481
diff changeset
  1019
    // unbold
455277559782 Added basic CLI support for the Enano API. Loads automatically, just include common.php as normal. REVISION 500!!! :-D
Dan
parents: 481
diff changeset
  1020
    echo "\x1B[0m";
455277559782 Added basic CLI support for the Enano API. Loads automatically, just include common.php as normal. REVISION 500!!! :-D
Dan
parents: 481
diff changeset
  1021
    echo "$p\n";
662
fcab604da9a7 Made grinding_halt() exit with status 1 for POSIX compatibility; jscompress.php utility now accepts non-CDN websites
Dan
parents: 621
diff changeset
  1022
    exit(1);
500
455277559782 Added basic CLI support for the Enano API. Loads automatically, just include common.php as normal. REVISION 500!!! :-D
Dan
parents: 481
diff changeset
  1023
  }
533
698a8f04957c Huge improvements to the template_nodb class and surrounding code; moved template compiler core to its own non-classed function to allow code re-use
Dan
parents: 519
diff changeset
  1024
  $theme = ( defined('ENANO_CONFIG_FETCHED') ) ? getConfig('theme_default') : 'oxygen';
698a8f04957c Huge improvements to the template_nodb class and surrounding code; moved template compiler core to its own non-classed function to allow code re-use
Dan
parents: 519
diff changeset
  1025
  $style = ( defined('ENANO_CONFIG_FETCHED') ) ? '__foo__' : 'bleu';
698a8f04957c Huge improvements to the template_nodb class and surrounding code; moved template compiler core to its own non-classed function to allow code re-use
Dan
parents: 519
diff changeset
  1026
  
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1027
  $tpl = new template_nodb();
533
698a8f04957c Huge improvements to the template_nodb class and surrounding code; moved template compiler core to its own non-classed function to allow code re-use
Dan
parents: 519
diff changeset
  1028
  $tpl->load_theme($theme, $style);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1029
  $tpl->tpl_strings['SITE_NAME'] = 'Critical error';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1030
  $tpl->tpl_strings['SITE_DESC'] = 'This website is experiencing a serious error and cannot load.';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1031
  $tpl->tpl_strings['COPYRIGHT'] = 'Unable to retrieve copyright information';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1032
  $tpl->tpl_strings['PAGE_NAME'] = $t;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1033
  $tpl->header();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1034
  echo $p;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1035
  $tpl->footer();
533
698a8f04957c Huge improvements to the template_nodb class and surrounding code; moved template compiler core to its own non-classed function to allow code re-use
Dan
parents: 519
diff changeset
  1036
  
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1037
  exit;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1038
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1039
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1040
/**
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1041
 * 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.
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1042
 */
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1043
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1044
function show_category_info()
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1045
{
800
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
  1046
  throw new Exception('show_category_info() is deprecated. Use Namespace_*::display_categories().');
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1047
}
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1048
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1049
/**
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1050
 * 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.
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1051
 */
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1052
667
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
  1053
function show_file_info($page = false)
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1054
{
800
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
  1055
  throw new Exception('show_file_info() is deprecated. Use Namespace_File::show_info().');
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1056
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1057
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1058
/**
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1059
 * 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.
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1060
 */
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1061
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1062
function display_page_headers()
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1063
{
953
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  1064
  // Deprecated.
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1065
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1066
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1067
/**
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1068
 * 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.
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1069
 */
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1070
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1071
function display_page_footers()
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1072
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1073
  global $db, $session, $paths, $template, $plugins; // Common objects
800
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
  1074
  
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
  1075
  if ( isset($_GET['nofooters']) )
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
  1076
  {
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
  1077
    return;
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
  1078
  }
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
  1079
  
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1080
  $code = $plugins->setHook('send_page_footers');
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1081
  foreach ( $code as $cmd )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1082
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1083
    eval($cmd);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1084
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1085
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1086
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1087
/**
963
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1088
 * Show the "this is a redirector" notice
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1089
 * @param string Target Page ID
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1090
 * @param string Target Namespace
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1091
 */
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1092
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1093
function display_redirect_notice($page_id, $namespace)
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1094
{
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1095
  global $db, $session, $paths, $template, $plugins; // Common objects
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1096
  global $lang, $output;
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1097
  
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1098
  $url = makeUrlNS($namespace, $page_id, false, true);
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1099
  $ns = namespace_factory($page_id, $namespace);
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1100
  $page_data = $ns->get_cdata();
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1101
  
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1102
  $title = $page_data['name'];
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1103
  
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1104
  $cls = $ns->exists() ? '' : 'class="wikilink-nonexistent" ';
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1105
    
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1106
  $a = '<a ' . $cls . 'href="' . $url . '">' . $title . '</a>';
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1107
  $redir_html = '<br /><div class="mdg-infobox">
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1108
          <table border="0" width="100%" cellspacing="0" cellpadding="0">
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1109
            <tr>
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1110
              <td valign="top">
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1111
                <img alt="Cute wet-floor icon" src="' . cdnPath . '/images/redirector.png" />
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1112
              </td>
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1113
              <td valign="top" style="padding-left: 10px;">
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1114
                ' . $lang->get('page_msg_this_is_a_redirector', array( 'redirect_target' => $a )) . '
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1115
              </td>
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1116
            </tr>
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1117
          </table>
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1118
        </div>
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1119
        <br />
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1120
        <hr style="margin-left: 1em; width: 200px;" />';
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1121
  
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1122
  $output->add_after_header($redir_html);
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1123
}
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1124
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1125
/**
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1126
 * 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.
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1127
 * @param socket A socket resource
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1128
 * @param string The expected response from the server, this needs to be exactly three characters.
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1129
 */
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1130
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1131
function smtp_get_response($socket, $response, $line = __LINE__)
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1132
{
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1133
  $server_response = '';
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1134
  while (substr($server_response, 3, 1) != ' ')
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1135
  {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1136
    if (!($server_response = fgets($socket, 256)))
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1137
    {
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1138
      die_friendly('SMTP Error', "<p>Couldn't get mail server response codes</p>");
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1139
    }
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1140
  }
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1141
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1142
  if (!(substr($server_response, 0, 3) == $response))
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1143
  {
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1144
    die_friendly('SMTP Error', "<p>Ran into problems sending mail. Response: $server_response</p>");
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1145
  }
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1146
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1147
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1148
/**
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1149
 * Wrapper for smtp_send_email_core that takes the sender as the fourth parameter instead of additional headers.
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1150
 * @param string E-mail address to send to
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1151
 * @param string Subject line
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1152
 * @param string The body of the message
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1153
 * @param string Address of the sender
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1154
 */
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1155
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1156
function smtp_send_email($to, $subject, $message, $from)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1157
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1158
  return smtp_send_email_core($to, $subject, $message, "From: <$from>\n");
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1159
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1160
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1161
/**
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1162
 * Replacement or substitute for PHP's mail() builtin function.
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1163
 * @param string E-mail address to send to
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1164
 * @param string Subject line
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1165
 * @param string The body of the message
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1166
 * @param string Message headers, separated by a single newline ("\n")
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1167
 * @copyright (C) phpBB Group
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1168
 * @license GPL
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1169
 */
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1170
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1171
function smtp_send_email_core($mail_to, $subject, $message, $headers = '')
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1172
{
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1173
  // Fix any bare linefeeds in the message to make it RFC821 Compliant.
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1174
  $message = preg_replace("#(?<!\r)\n#si", "\r\n", $message);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1175
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1176
  if ($headers != '')
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1177
  {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1178
    if (is_array($headers))
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1179
    {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1180
      if (sizeof($headers) > 1)
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1181
      {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1182
        $headers = join("\n", $headers);
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1183
      }
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1184
      else
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1185
      {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1186
        $headers = $headers[0];
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1187
      }
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1188
    }
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1189
    $headers = chop($headers);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1190
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1191
    // Make sure there are no bare linefeeds in the headers
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1192
    $headers = preg_replace('#(?<!\r)\n#si', "\r\n", $headers);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1193
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1194
    // Ok this is rather confusing all things considered,
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1195
    // but we have to grab bcc and cc headers and treat them differently
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1196
    // Something we really didn't take into consideration originally
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1197
    $header_array = explode("\r\n", $headers);
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1198
    @reset($header_array);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1199
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1200
    $headers = '';
472
bc4b58034f4d Implemented password reset (albeit hackishly) into the new login API; added dummy window.console object to hopefully reduce errors when Firebug isn't around; fixed the longstanding ACL dismiss/close button bug; fixed a couple undefined variables in mailer; fixed PHP error on attempted opening of /dev/(u)random in rijndael.php; clarified documentation for PageProcessor::update_page(); fixed some logic problems in theme ACL code; disabled CAPTCHA debug
Dan
parents: 468
diff changeset
  1201
    $cc = '';
bc4b58034f4d Implemented password reset (albeit hackishly) into the new login API; added dummy window.console object to hopefully reduce errors when Firebug isn't around; fixed the longstanding ACL dismiss/close button bug; fixed a couple undefined variables in mailer; fixed PHP error on attempted opening of /dev/(u)random in rijndael.php; clarified documentation for PageProcessor::update_page(); fixed some logic problems in theme ACL code; disabled CAPTCHA debug
Dan
parents: 468
diff changeset
  1202
    $bcc = '';
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1203
    while(list(, $header) = each($header_array))
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1204
    {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1205
      if (preg_match('#^cc:#si', $header))
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1206
      {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1207
        $cc = preg_replace('#^cc:(.*)#si', '\1', $header);
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1208
      }
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1209
      else if (preg_match('#^bcc:#si', $header))
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1210
      {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1211
        $bcc = preg_replace('#^bcc:(.*)#si', '\1', $header);
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1212
        $header = '';
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1213
      }
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1214
      $headers .= ($header != '') ? $header . "\r\n" : '';
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1215
    }
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1216
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1217
    $headers = chop($headers);
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1218
    $cc = explode(', ', $cc);
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1219
    $bcc = explode(', ', $bcc);
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1220
  }
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1221
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1222
  if (trim($subject) == '')
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1223
  {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1224
    die_friendly(GENERAL_ERROR, "No email Subject specified");
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1225
  }
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1226
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1227
  if (trim($message) == '')
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1228
  {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1229
    die_friendly(GENERAL_ERROR, "Email message was blank");
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1230
  }
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1231
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1232
  // setup SMTP
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1233
  $host = getConfig('smtp_server');
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1234
  if ( empty($host) )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1235
    return 'No smtp_host in config';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1236
  if ( strstr($host, ':' ) )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1237
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1238
    $n = explode(':', $host);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1239
    $smtp_host = $n[0];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1240
    $port = intval($n[1]);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1241
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1242
  else
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1243
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1244
    $smtp_host = $host;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1245
    $port = 25;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1246
  }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1247
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1248
  $smtp_user = getConfig('smtp_user');
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1249
  $smtp_pass = getConfig('smtp_password');
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1250
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1251
  // Ok we have error checked as much as we can to this point let's get on
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1252
  // it already.
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1253
  if( !$socket = @fsockopen($smtp_host, $port, $errno, $errstr, 20) )
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1254
  {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1255
    die_friendly(GENERAL_ERROR, "Could not connect to smtp host : $errno : $errstr");
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1256
  }
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1257
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1258
  // Wait for reply
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1259
  smtp_get_response($socket, "220", __LINE__);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1260
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1261
  // Do we want to use AUTH?, send RFC2554 EHLO, else send RFC821 HELO
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1262
  // This improved as provided by SirSir to accomodate
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1263
  if( !empty($smtp_user) && !empty($smtp_pass) )
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1264
  {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1265
    enano_fputs($socket, "EHLO " . $smtp_host . "\r\n");
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1266
    smtp_get_response($socket, "250", __LINE__);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1267
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1268
    enano_fputs($socket, "AUTH LOGIN\r\n");
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1269
    smtp_get_response($socket, "334", __LINE__);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1270
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1271
    enano_fputs($socket, base64_encode($smtp_user) . "\r\n");
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1272
    smtp_get_response($socket, "334", __LINE__);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1273
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1274
    enano_fputs($socket, base64_encode($smtp_pass) . "\r\n");
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1275
    smtp_get_response($socket, "235", __LINE__);
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1276
  }
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1277
  else
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1278
  {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1279
    enano_fputs($socket, "HELO " . $smtp_host . "\r\n");
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1280
    smtp_get_response($socket, "250", __LINE__);
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1281
  }
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1282
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1283
  // From this point onward most server response codes should be 250
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1284
  // Specify who the mail is from....
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1285
  enano_fputs($socket, "MAIL FROM: <" . getConfig('contact_email') . ">\r\n");
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1286
  smtp_get_response($socket, "250", __LINE__);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1287
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1288
  // Specify each user to send to and build to header.
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1289
  $to_header = '';
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1290
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1291
  // Add an additional bit of error checking to the To field.
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1292
  $mail_to = (trim($mail_to) == '') ? 'Undisclosed-recipients:;' : trim($mail_to);
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1293
  if (preg_match('#[^ ]+\@[^ ]+#', $mail_to))
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1294
  {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1295
    enano_fputs($socket, "RCPT TO: <$mail_to>\r\n");
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1296
    smtp_get_response($socket, "250", __LINE__);
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1297
  }
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1298
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1299
  // Ok now do the CC and BCC fields...
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1300
  @reset($bcc);
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1301
  while(list(, $bcc_address) = each($bcc))
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1302
  {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1303
    // Add an additional bit of error checking to bcc header...
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1304
    $bcc_address = trim($bcc_address);
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1305
    if (preg_match('#[^ ]+\@[^ ]+#', $bcc_address))
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1306
    {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1307
      enano_fputs($socket, "RCPT TO: <$bcc_address>\r\n");
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1308
      smtp_get_response($socket, "250", __LINE__);
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1309
    }
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1310
  }
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1311
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1312
  @reset($cc);
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1313
  while(list(, $cc_address) = each($cc))
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1314
  {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1315
    // Add an additional bit of error checking to cc header
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1316
    $cc_address = trim($cc_address);
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1317
    if (preg_match('#[^ ]+\@[^ ]+#', $cc_address))
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1318
    {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1319
      enano_fputs($socket, "RCPT TO: <$cc_address>\r\n");
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1320
      smtp_get_response($socket, "250", __LINE__);
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1321
    }
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1322
  }
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1323
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1324
  // Ok now we tell the server we are ready to start sending data
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1325
  enano_fputs($socket, "DATA\r\n");
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1326
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1327
  // This is the last response code we look for until the end of the message.
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1328
  smtp_get_response($socket, "354", __LINE__);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1329
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1330
  // Send the Subject Line...
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1331
  enano_fputs($socket, "Subject: $subject\r\n");
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1332
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1333
  // Now the To Header.
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1334
  enano_fputs($socket, "To: $mail_to\r\n");
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1335
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1336
  // Now any custom headers....
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1337
  enano_fputs($socket, "$headers\r\n\r\n");
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1338
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1339
  // Ok now we are ready for the message...
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1340
  enano_fputs($socket, "$message\r\n");
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1341
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1342
  // Ok the all the ingredients are mixed in let's cook this puppy...
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1343
  enano_fputs($socket, ".\r\n");
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1344
  smtp_get_response($socket, "250", __LINE__);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1345
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1346
  // Now tell the server we are done and close the socket...
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1347
  enano_fputs($socket, "QUIT\r\n");
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1348
  fclose($socket);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1349
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1350
  return TRUE;
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1351
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1352
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1353
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1354
 * Tell which version of Enano we're running.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1355
 * @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.)
685
17ebe24cdf85 Rebranded as 1.1.5 (Caoineag alpha 5) and fixed a couple bugs related to CDN support in template_nodb and installerUI. Updated readme.
Dan
parents: 667
diff changeset
  1356
 * @param bool If true, prevents nightly build information from being appended, useful for upgrade/versioning checks.
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1357
 * @return string
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1358
 */
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1359
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1360
function enano_version($long = false, $no_nightly = false)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1361
{
1203
c6587072e4c4 Fixed ENANO_VERSION under databaseless template class
Dan
parents: 1198
diff changeset
  1362
  if ( !defined('ENANO_CONFIG_FETCHED') )
c6587072e4c4 Fixed ENANO_VERSION under databaseless template class
Dan
parents: 1198
diff changeset
  1363
  {
c6587072e4c4 Fixed ENANO_VERSION under databaseless template class
Dan
parents: 1198
diff changeset
  1364
    return function_exists('installer_enano_version') ? installer_enano_version() : $GLOBALS['enano_version'];
c6587072e4c4 Fixed ENANO_VERSION under databaseless template class
Dan
parents: 1198
diff changeset
  1365
  }
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1366
  $r = getConfig('enano_version');
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1367
  $rc = ( $long ) ? ' release candidate ' : 'RC';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1368
  $b = ( $long ) ? ' beta ' : 'b';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1369
  $a = ( $long ) ? ' alpha ' : 'a';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1370
  if($v = getConfig('enano_rc_version')) $r .= $rc.$v;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1371
  if($v = getConfig('enano_beta_version')) $r .= $b.$v;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1372
  if($v = getConfig('enano_alpha_version')) $r .= $a.$v;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1373
  if ( defined('ENANO_NIGHTLY') && !$no_nightly )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1374
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1375
    $nightlytag  = ENANO_NIGHTLY_MONTH . '-' . ENANO_NIGHTLY_DAY . '-' . ENANO_NIGHTLY_YEAR;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1376
    $nightlylong = ' nightly; build date: ' . ENANO_NIGHTLY_MONTH . '-' . ENANO_NIGHTLY_DAY . '-' . ENANO_NIGHTLY_YEAR;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1377
    $r = ( $long ) ? $r . $nightlylong : $r . '-nightly-' . $nightlytag;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1378
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1379
  return $r;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1380
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1381
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1382
/**
132
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  1383
 * 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
parents: 129
diff changeset
  1384
 * @return string
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  1385
 */
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  1386
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  1387
function enano_codename()
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  1388
{
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  1389
  $names = array(
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  1390
      '1.0RC1' => 'Leprechaun',
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  1391
      '1.0RC2' => 'Clurichaun',
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  1392
      '1.0RC3' => 'Druid',
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  1393
      '1.0'    => 'Banshee',
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  1394
      '1.0.1'  => 'Loch Ness',
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  1395
      '1.0.1.1'=> 'Loch Ness internal bugfix build',
145
6f0bbf88c325 Rebrand for 1.0.2b1
Dan
parents: 142
diff changeset
  1396
      '1.0.2b1'=> 'Coblynau unstable',
317
f8356d9c3481 Rebrand as 1.0.3 (Dyrad)
Dan
parents: 315
diff changeset
  1397
      '1.0.2'  => 'Coblynau',
387
92664d2efab8 Rebranded source code as 1.1.1; added TinyMCE ACL rule as per Vadi's request: http://forum.enanocms.org/viewtopic.php?f=7&t=54
Dan
parents: 382
diff changeset
  1398
      '1.0.3'  => 'Dyrad',
92664d2efab8 Rebranded source code as 1.1.1; added TinyMCE ACL rule as per Vadi's request: http://forum.enanocms.org/viewtopic.php?f=7&t=54
Dan
parents: 382
diff changeset
  1399
      '1.1.1'  => 'Caoineag alpha 1',
411
d1a95497b68f Rebrand as 1.1.2; made upgrade framework functional
Dan
parents: 406
diff changeset
  1400
      '1.1.2'  => 'Caoineag alpha 2',
436
242353360e37 Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents: 424
diff changeset
  1401
      '1.1.3'  => 'Caoineag alpha 3',
536
218a627eb53e Rebrand as 1.1.4 (Caoineag alpha 4)
Dan
parents: 533
diff changeset
  1402
      '1.1.4'  => 'Caoineag alpha 4',
685
17ebe24cdf85 Rebranded as 1.1.5 (Caoineag alpha 5) and fixed a couple bugs related to CDN support in template_nodb and installerUI. Updated readme.
Dan
parents: 667
diff changeset
  1403
      '1.1.5'  => 'Caoineag alpha 5',
1081
745200a9cc2a Fixed some upgrade bugs; added support for choosing one's own date/time formats; rebrand as 1.1.7
Dan
parents: 1061
diff changeset
  1404
      '1.1.6'  => 'Caoineag beta 1',
1206
50f6c144ec68 Fixed some bugs with account activation, especially if you're a half-logged-in vegetable.
Dan
parents: 1203
diff changeset
  1405
      '1.1.7'  => 'Caoineag beta 2',
50f6c144ec68 Fixed some bugs with account activation, especially if you're a half-logged-in vegetable.
Dan
parents: 1203
diff changeset
  1406
      '1.1.8'  => 'Caoineag beta 3',
132
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  1407
    );
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  1408
  $version = enano_version();
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  1409
  if ( isset($names[$version]) )
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  1410
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  1411
    return $names[$version];
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  1412
  }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  1413
  return 'Anonymous build';
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  1414
}
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  1415
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  1416
/**
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1417
 * Badly named function to send back eval'able Javascript code with an error message. Deprecated, use JSON instead.
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1418
 * @param string Message to send
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1419
 */
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1420
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1421
function _die($t) {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1422
  $_ob = 'document.getElementById("ajaxEditContainer").innerHTML = unescape(\'' . rawurlencode('' . $t . '') . '\')';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1423
  die($_ob);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1424
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1425
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1426
/**
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1427
 * Same as _die(), but sends an SQL backtrace with the error message, and doesn't halt execution.
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1428
 * @param string Message to send
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1429
 */
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1430
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1431
function jsdie($text) {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1432
  global $db, $session, $paths, $template, $plugins; // Common objects
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1433
  $text = rawurlencode($text . "\n\nSQL Backtrace:\n" . $db->sql_backtrace());
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1434
  echo 'document.getElementById("ajaxEditContainer").innerHTML = unescape(\''.$text.'\');';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1435
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1436
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1437
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1438
 * Capitalizes the first letter of a string
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1439
 * @param $text string the text to be transformed
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1440
 * @return string
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1441
 */
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1442
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1443
function capitalize_first_letter($text)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1444
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1445
  return strtoupper(substr($text, 0, 1)) . substr($text, 1);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1446
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1447
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1448
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1449
 * Checks if a value in a bitfield is on or off
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1450
 * @param $bitfield int the bit-field value
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1451
 * @param $value int the value to switch off
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1452
 * @return bool
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1453
 */
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1454
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1455
function is_bit($bitfield, $value)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1456
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1457
  return ( $bitfield & $value ) ? true : false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1458
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1459
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1460
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1461
 * Trims spaces/newlines from the beginning and end of a string
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1462
 * @param $text the text to process
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1463
 * @return string
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1464
 */
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1465
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1466
function trim_spaces($text)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1467
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1468
  $d = true;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1469
  while($d)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1470
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1471
    $c = substr($text, 0, 1);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1472
    $a = substr($text, strlen($text)-1, strlen($text));
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1473
    if($c == "\n" || $c == "\r" || $c == "\t" || $c == ' ') $text = substr($text, 1, strlen($text));
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1474
    elseif($a == "\n" || $a == "\r" || $a == "\t" || $a == ' ') $text = substr($text, 0, strlen($text)-1);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1475
    else $d = false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1476
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1477
  return $text;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1478
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1479
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1480
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1481
 * Enano-ese equivalent of str_split() which is only found in PHP5
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1482
 * @param $text string the text to split
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1483
 * @param $inc int size of each block
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1484
 * @return array
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1485
 */
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1486
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1487
function enano_str_split($text, $inc = 1)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1488
{
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1489
  if($inc < 1)
14
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1490
  {
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1491
    return false;
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1492
  }
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1493
  if($inc >= strlen($text))
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1494
  {
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1495
    return Array($text);
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1496
  }
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1497
  $len = ceil(strlen($text) / $inc);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1498
  $ret = Array();
14
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1499
  for ( $i = 0; $i < strlen($text); $i = $i + $inc )
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1500
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1501
    $ret[] = substr($text, $i, $inc);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1502
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1503
  return $ret;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1504
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1505
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1506
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1507
 * Converts a hexadecimal number to a binary string.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1508
 * @param text string hexadecimal number
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1509
 * @return string
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1510
 */
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1511
function hex2bin($text)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1512
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1513
  $arr = enano_str_split($text, 2);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1514
  $ret = '';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1515
  for ($i=0; $i<sizeof($arr); $i++)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1516
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1517
    $ret .= chr(hexdec($arr[$i]));
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1518
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1519
  return $ret;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1520
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1521
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1522
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1523
 * Generates and/or prints a human-readable backtrace
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1524
 * @param bool $return - if true, this function returns a string, otherwise returns null and prints the backtrace
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1525
 * @return mixed
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1526
 */
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1527
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1528
function enano_debug_print_backtrace($return = false)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1529
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1530
  ob_start();
372
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  1531
  if ( !$return )
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  1532
    echo '<pre>';
19
5d003b6c9e89 Added demo mode functionality to various parts of Enano (unlocked only with a plugin) and fixed groups table
Dan
parents: 16
diff changeset
  1533
  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
parents: 16
diff changeset
  1534
  {
5d003b6c9e89 Added demo mode functionality to various parts of Enano (unlocked only with a plugin) and fixed groups table
Dan
parents: 16
diff changeset
  1535
    debug_print_backtrace();
5d003b6c9e89 Added demo mode functionality to various parts of Enano (unlocked only with a plugin) and fixed groups table
Dan
parents: 16
diff changeset
  1536
  }
5d003b6c9e89 Added demo mode functionality to various parts of Enano (unlocked only with a plugin) and fixed groups table
Dan
parents: 16
diff changeset
  1537
  else
5d003b6c9e89 Added demo mode functionality to various parts of Enano (unlocked only with a plugin) and fixed groups table
Dan
parents: 16
diff changeset
  1538
  {
5d003b6c9e89 Added demo mode functionality to various parts of Enano (unlocked only with a plugin) and fixed groups table
Dan
parents: 16
diff changeset
  1539
    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
parents: 16
diff changeset
  1540
  }
372
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  1541
  if ( !$return )
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  1542
    echo '</pre>';
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1543
  $c = ob_get_contents();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1544
  ob_end_clean();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1545
  if($return) return $c;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1546
  else echo $c;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1547
  return null;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1548
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1549
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1550
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1551
 * Like rawurlencode(), but encodes all characters
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1552
 * @param string $text the text to encode
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1553
 * @param optional string $prefix text before each hex character
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1554
 * @param optional string $suffix text after each hex character
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1555
 * @return string
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1556
 */
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1557
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1558
function hexencode($text, $prefix = '%', $suffix = '')
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1559
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1560
  $arr = enano_str_split($text);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1561
  $r = '';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1562
  foreach($arr as $a)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1563
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1564
    $nibble = (string)dechex(ord($a));
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1565
    if(strlen($nibble) == 1) $nibble = '0' . $nibble;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1566
    $r .= $prefix . $nibble . $suffix;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1567
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1568
  return $r;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1569
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1570
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1571
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1572
 * Enano-ese equivalent of get_magic_quotes_gpc()
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1573
 * @return bool
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1574
 */
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1575
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1576
function enano_get_magic_quotes_gpc()
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1577
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1578
  if(function_exists('get_magic_quotes_gpc'))
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1579
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1580
    return ( get_magic_quotes_gpc() == 1 );
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1581
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1582
  else
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1583
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1584
    return ( strtolower(@ini_get('magic_quotes_gpc')) == '1' );
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1585
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1586
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1587
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1588
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1589
 * Recursive stripslashes()
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1590
 * @param array
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1591
 * @return array
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1592
 */
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1593
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1594
function stripslashes_recurse($arr)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1595
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1596
  foreach($arr as $k => $xxxx)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1597
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1598
    $val =& $arr[$k];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1599
    if(is_string($val))
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1600
      $val = stripslashes($val);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1601
    elseif(is_array($val))
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1602
      $val = stripslashes_recurse($val);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1603
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1604
  return $arr;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1605
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1606
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1607
/**
14
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1608
 * 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
parents: 1
diff changeset
  1609
 * @param array
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1610
 * @return array
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1611
 */
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1612
14
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1613
function strip_nul_chars($arr)
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1614
{
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1615
  foreach($arr as $k => $xxxx_unused)
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1616
  {
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1617
    $val =& $arr[$k];
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1618
    if(is_string($val))
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1619
      $val = str_replace("\000", '', $val);
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1620
    elseif(is_array($val))
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1621
      $val = strip_nul_chars($val);
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1622
  }
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1623
  return $arr;
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1624
}
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1625
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1626
/**
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1627
 * 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
parents: 1
diff changeset
  1628
 * @ignore - this doesn't work too well in my tests
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1629
 * @todo port version from the PHP manual
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1630
 * @return void
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1631
 */
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1632
function strip_magic_quotes_gpc()
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1633
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1634
  if(enano_get_magic_quotes_gpc())
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1635
  {
40
723bb7acf914 Fixed a lot of bugs with Safari and Konqueror; improved Opera compatibility
Dan
parents: 38
diff changeset
  1636
    $_POST    = stripslashes_recurse($_POST);
723bb7acf914 Fixed a lot of bugs with Safari and Konqueror; improved Opera compatibility
Dan
parents: 38
diff changeset
  1637
    $_GET     = stripslashes_recurse($_GET);
723bb7acf914 Fixed a lot of bugs with Safari and Konqueror; improved Opera compatibility
Dan
parents: 38
diff changeset
  1638
    $_COOKIE  = stripslashes_recurse($_COOKIE);
723bb7acf914 Fixed a lot of bugs with Safari and Konqueror; improved Opera compatibility
Dan
parents: 38
diff changeset
  1639
    $_REQUEST = stripslashes_recurse($_REQUEST);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1640
  }
40
723bb7acf914 Fixed a lot of bugs with Safari and Konqueror; improved Opera compatibility
Dan
parents: 38
diff changeset
  1641
  $_POST    = strip_nul_chars($_POST);
723bb7acf914 Fixed a lot of bugs with Safari and Konqueror; improved Opera compatibility
Dan
parents: 38
diff changeset
  1642
  $_GET     = strip_nul_chars($_GET);
723bb7acf914 Fixed a lot of bugs with Safari and Konqueror; improved Opera compatibility
Dan
parents: 38
diff changeset
  1643
  $_COOKIE  = strip_nul_chars($_COOKIE);
723bb7acf914 Fixed a lot of bugs with Safari and Konqueror; improved Opera compatibility
Dan
parents: 38
diff changeset
  1644
  $_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
parents: 76
diff changeset
  1645
  $_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
parents: 76
diff changeset
  1646
  $_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
parents: 76
diff changeset
  1647
  $_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
parents: 76
diff changeset
  1648
  $_REQUEST = decode_unicode_array($_REQUEST);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1649
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1650
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1651
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1652
 * A very basic single-character compression algorithm for binary strings/bitfields
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1653
 * @param string $bits the text to compress, should be only 1s and 0s
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1654
 * @return string
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1655
 */
832
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1656
 
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1657
function compress_bitfield($bits)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1658
{
832
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1659
  if ( !preg_match('/^[01]+$/', $bits) )
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1660
    return false;
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1661
  
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1662
  $current = intval($bits{0});
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1663
  $clen = 0;
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1664
  $out = '';
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1665
  for ( $i = 0; $i < strlen($bits); $i++ )
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1666
  {
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1667
    $cbit = intval($bits{$i});
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1668
    if ( $cbit !== $current || $clen == 127 || $i == strlen($bits) - 1 )
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1669
    {
832
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1670
      if ( $i == strlen($bits) - 1 && $cbit === $current )
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1671
      {
832
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1672
        $clen++;
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1673
      }
832
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1674
      // write chunk
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1675
      $byte = $clen;
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1676
      if ( $current === 1 )
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1677
        $byte |= 0x80;
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1678
      $out .= chr($byte);
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1679
      
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1680
      if ( $i == strlen($bits) - 1 && $cbit !== $current )
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1681
      {
832
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1682
        $out .= ( $cbit === 1 ) ? chr(0x81) : chr(0x1);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1683
      }
832
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1684
      
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1685
      // reset
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1686
      $current = intval($cbit);
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1687
      $clen = 0;
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1688
    }
832
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1689
    $clen++;
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1690
  }
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1691
  $crc = dechex(crc32($out));
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1692
  while ( strlen($crc) < 8 )
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1693
    $crc = "0$crc";
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1694
  return "cbf2:{$crc}" . hexencode($out, '', '');
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1695
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1696
832
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1697
// test case
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1698
// $bf = '0111100010000000000000000000000100000000000000001110000000000000000101100000010100001100010000000000000000000000000000111111111111111111111100100001000000000000000000000000000000000000';
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1699
// die('<pre>Original:  ' . " $bf\nCompressed: " . compress_bitfield($bf) . "\nProcessed:  ".uncompress_bitfield(compress_bitfield($bf)).'</pre>');
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1700
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1701
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1702
 * Uncompresses a bitfield compressed with compress_bitfield()
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1703
 * @param string $bits the compressed bitfield
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1704
 * @return string the uncompressed, original (we hope) bitfield OR bool false on error
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1705
 */
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1706
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1707
function uncompress_bitfield($bits)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1708
{
832
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1709
  if ( substr($bits, 0, 4) == 'cbf:' )
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1710
  {
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1711
    return uncompress_bitfield_old($bits);
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1712
  }
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1713
  if ( substr($bits, 0, 5) != 'cbf2:' )
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1714
  {
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1715
    echo __FUNCTION__.'(): ERROR: Invalid stream';
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1716
    return false;
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1717
  }
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1718
  $bits = substr($bits, 5);
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1719
  $crc = substr($bits, 0, 8);
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1720
  $bits = substr($bits, 8);
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1721
  $bits = hexdecode($bits);
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1722
  if ( dechex(crc32($bits)) !== $crc )
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1723
  {
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1724
    echo __FUNCTION__."(): ERROR: CRC failed";
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1725
    return false;
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1726
  }
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1727
  $out = '';
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1728
  for ( $i = 0; $i < strlen($bits); $i++ )
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1729
  {
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1730
    $byte = ord($bits{$i});
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1731
    $char = $byte & 0x80 ? '1' : '0';
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1732
    $byte &= ~0x80;
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1733
    for ( $j = 0; $j < $byte; $j++ )
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1734
    {
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1735
      $out .= $char;
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1736
    }
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1737
  }
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1738
  return $out;
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1739
}
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1740
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1741
/**
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1742
 * Decompressor for old-format bitfields.
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1743
 * @param string
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1744
 * @return string
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1745
 * @access private
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1746
 */
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1747
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1748
function uncompress_bitfield_old($bits)
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  1749
{
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1750
  if(substr($bits, 0, 4) != 'cbf:')
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1751
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1752
    echo __FUNCTION__.'(): ERROR: Invalid stream';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1753
    return false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1754
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1755
  $len = intval(substr($bits, strpos($bits, 'len=')+4, strpos($bits, ';')-strpos($bits, 'len=')-4));
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1756
  $crc = substr($bits, strpos($bits, 'crc=')+4, 8);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1757
  $data = substr($bits, strpos($bits, 'data=')+5, strpos($bits, '|end')-strpos($bits, 'data=')-5);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1758
  $data = explode(',', $data);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1759
  foreach($data as $a => $b)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1760
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1761
    $d =& $data[$a];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1762
    $char = substr($d, 0, 1);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1763
    $dlen = intval(substr($d, 2, strlen($d)-1));
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1764
    $s = '';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1765
    for($i=0;$i<$dlen;$i++,$s.=$char);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1766
    $d = $s;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1767
    unset($s, $dlen, $char);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1768
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1769
  $decompressed = implode('', $data);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1770
  $decompressed = substr($decompressed, 0, -1);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1771
  $dcrc = (string)dechex(crc32($decompressed));
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1772
  if($dcrc != $crc)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1773
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1774
    echo __FUNCTION__.'(): ERROR: CRC check failed<br />debug info:<br />original crc: '.$crc.'<br />decomp\'ed crc: '.$dcrc.'<br />';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1775
    return false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1776
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1777
  return $decompressed;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1778
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1779
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1780
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1781
 * Exports a MySQL table into a SQL string.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1782
 * @param string $table The name of the table to export
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1783
 * @param bool $structure If true, include a CREATE TABLE command
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1784
 * @param bool $data If true, include the contents of the table
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1785
 * @param bool $compact If true, omits newlines between parts of SQL statements, use in Enano database exporter
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1786
 * @return string
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1787
 */
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1788
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1789
function export_table($table, $structure = true, $data = true, $compact = false)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1790
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1791
  global $db, $session, $paths, $template, $plugins; // Common objects
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1792
  $struct_keys = '';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1793
  $divider   = (!$compact) ? "\n" : "\n";
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1794
  $spacer1   = (!$compact) ? "\n" : " ";
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1795
  $spacer2   = (!$compact) ? "  " : " ";
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1796
  $rowspacer = (!$compact) ? "\n  " : " ";
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1797
  $index_list = Array();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1798
  $cols = $db->sql_query('SHOW COLUMNS IN '.$table.';');
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1799
  if(!$cols)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1800
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1801
    echo 'export_table(): Error getting column list: '.$db->get_error_text().'<br />';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1802
    return false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1803
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1804
  $col = Array();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1805
  $sqlcol = Array();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1806
  $collist = Array();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1807
  $pri_keys = Array();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1808
  // Using fetchrow_num() here to compensate for MySQL l10n
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1809
  while( $row = $db->fetchrow_num() )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1810
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1811
    $field =& $row[0];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1812
    $type  =& $row[1];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1813
    $null  =& $row[2];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1814
    $key   =& $row[3];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1815
    $def   =& $row[4];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1816
    $extra =& $row[5];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1817
    $col[] = Array(
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1818
      'name'=>$field,
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1819
      'type'=>$type,
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1820
      'null'=>$null,
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1821
      'key'=>$key,
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1822
      'default'=>$def,
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1823
      'extra'=>$extra,
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1824
      );
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1825
    $collist[] = $field;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1826
  }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1827
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1828
  if ( $structure )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1829
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1830
    $db->sql_query('SET SQL_QUOTE_SHOW_CREATE = 0;');
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1831
    $struct = $db->sql_query('SHOW CREATE TABLE '.$table.';');
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1832
    if ( !$struct )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1833
      $db->_die();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1834
    $row = $db->fetchrow_num();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1835
    $db->free_result();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1836
    $struct = $row[1];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1837
    $struct = preg_replace("/\n\) ENGINE=(.+)$/", "\n);", $struct);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1838
    unset($row);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1839
    if ( $compact )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1840
    {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1841
      $struct_arr = explode("\n", $struct);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1842
      foreach ( $struct_arr as $i => $leg )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1843
      {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1844
        if ( $i == 0 )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1845
          continue;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1846
        $test = trim($leg);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1847
        if ( empty($test) )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1848
        {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1849
          unset($struct_arr[$i]);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1850
          continue;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1851
        }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1852
        $struct_arr[$i] = preg_replace('/^([\s]*)/', ' ', $leg);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1853
      }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1854
      $struct = implode("", $struct_arr);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1855
    }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1856
  }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1857
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1858
  // Structuring complete
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1859
  if($data)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1860
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1861
    $datq = $db->sql_query('SELECT * FROM '.$table.';');
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1862
    if(!$datq)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1863
    {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1864
      echo 'export_table(): Error getting column list: '.$db->get_error_text().'<br />';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1865
      return false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1866
    }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1867
    if($db->numrows() < 1)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1868
    {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1869
      if($structure) return $struct;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1870
      else return '';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1871
    }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1872
    $rowdata = Array();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1873
    $dataqs = Array();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1874
    $insert_strings = Array();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1875
    $z = false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1876
    while($row = $db->fetchrow_num())
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1877
    {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1878
      $z = false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1879
      foreach($row as $i => $cell)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1880
      {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1881
        $str = mysql_encode_column($cell, $col[$i]['type']);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1882
        $rowdata[] = $str;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1883
      }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1884
      $dataqs2 = implode(",$rowspacer", $dataqs) . ",$rowspacer" . '( ' . implode(', ', $rowdata) . ' )';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1885
      $ins = 'INSERT INTO '.$table.'( '.implode(',', $collist).' ) VALUES' . $dataqs2 . ";";
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1886
      if ( strlen( $ins ) > MYSQL_MAX_PACKET_SIZE )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1887
      {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1888
        // We've exceeded the maximum allowed packet size for MySQL - separate this into a different query
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1889
        $insert_strings[] = 'INSERT INTO '.$table.'( '.implode(',', $collist).' ) VALUES' . implode(",$rowspacer", $dataqs) . ";";;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1890
        $dataqs = Array('( ' . implode(', ', $rowdata) . ' )');
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1891
        $z = true;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1892
      }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1893
      else
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1894
      {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1895
        $dataqs[] = '( ' . implode(', ', $rowdata) . ' )';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1896
      }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1897
      $rowdata = Array();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1898
    }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1899
    if ( !$z )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1900
    {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1901
      $insert_strings[] = 'INSERT INTO '.$table.'( '.implode(',', $collist).' ) VALUES' . implode(",$rowspacer", $dataqs) . ";";;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1902
      $dataqs = Array();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1903
    }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1904
    $datstring = implode($divider, $insert_strings);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1905
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1906
  if($structure && !$data) return $struct;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1907
  elseif(!$structure && $data) return $datstring;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1908
  elseif($structure && $data) return $struct . $divider . $datstring;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1909
  elseif(!$structure && !$data) return '';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1910
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1911
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1912
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1913
 * Encodes a string value for use in an INSERT statement for given column type $type.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1914
 * @access private
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1915
 */
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1916
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1917
function mysql_encode_column($input, $type)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1918
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1919
  global $db, $session, $paths, $template, $plugins; // Common objects
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1920
  // Decide whether to quote the string or not
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1921
  if(substr($type, 0, 7) == 'varchar' || $type == 'datetime' || $type == 'text' || $type == 'tinytext' || $type == 'smalltext' || $type == 'longtext' || substr($type, 0, 4) == 'char')
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1922
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1923
    $str = "'" . $db->escape($input) . "'";
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1924
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1925
  elseif(in_array($type, Array('blob', 'longblob', 'mediumblob', 'smallblob')) || substr($type, 0, 6) == 'binary' || substr($type, 0, 9) == 'varbinary')
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1926
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1927
    $str = '0x' . hexencode($input, '', '');
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1928
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1929
  elseif(is_null($input))
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1930
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1931
    $str = 'NULL';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1932
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1933
  else
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1934
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1935
    $str = (string)$input;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1936
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1937
  return $str;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1938
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1939
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1940
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1941
 * Creates an associative array defining which file extensions are allowed and which ones aren't
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1942
 * @return array keyname will be a file extension, value will be true or false
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1943
 */
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1944
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1945
function fetch_allowed_extensions()
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1946
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1947
  global $mime_types;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1948
  $bits = getConfig('allowed_mime_types');
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1949
  if(!$bits) return Array(false);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1950
  $bits = uncompress_bitfield($bits);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1951
  if(!$bits) return Array(false);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1952
  $bits = enano_str_split($bits, 1);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1953
  $ret = Array();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1954
  $mt = array_keys($mime_types);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1955
  foreach($bits as $i => $b)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1956
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1957
    $ret[$mt[$i]] = ( $b == '1' ) ? true : false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1958
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1959
  return $ret;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1960
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1961
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1962
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1963
 * Generates a random key suitable for encryption
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1964
 * @param int $len the length of the key
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1965
 * @return string a BINARY key
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1966
 */
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1967
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1968
function randkey($len = 32)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1969
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1970
  $key = '';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1971
  for($i=0;$i<$len;$i++)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1972
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1973
    $key .= chr(mt_rand(0, 255));
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1974
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1975
  return $key;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1976
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1977
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1978
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1979
 * Decodes a hex string.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1980
 * @param string $hex The hex code to decode
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1981
 * @return string
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1982
 */
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1983
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1984
function hexdecode($hex)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1985
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1986
  $hex = enano_str_split($hex, 2);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1987
  $bin_key = '';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1988
  foreach($hex as $nibble)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1989
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1990
    $byte = chr(hexdec($nibble));
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1991
    $bin_key .= $byte;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1992
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1993
  return $bin_key;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1994
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1995
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1996
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1997
 * Enano's own (almost) bulletproof HTML sanitizer.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1998
 * @param string $html The input HTML
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1999
 * @return string cleaned HTML
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2000
 */
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2001
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2002
function sanitize_html($html, $filter_php = true)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2003
{
163
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2004
  // Random seed for substitution
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2005
  $rand_seed = md5( sha1(microtime()) . mt_rand() );
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2006
  
593
4f9bec0d65c1 More optimization work. Moved special page init functions to common instead of common_post hook. Allowed paths to cache page metadata on filesystem. Phased out the redundancy in $paths->pages that paired a number with every urlname as foreach loops are allowed now (and have been for some time). Fixed missing includes for several functions. Rewrote str_replace_once to be a lot more efficient.
Dan
parents: 592
diff changeset
  2007
  // We need MediaWiki
1027
98c052fc3337 First implementation of new parser; Text_Wiki is now gone. VERY BETA! WiP.
Dan
parents: 978
diff changeset
  2008
  require_once(ENANO_ROOT . '/includes/wikiengine/TagSanitizer.php');
593
4f9bec0d65c1 More optimization work. Moved special page init functions to common instead of common_post hook. Allowed paths to cache page metadata on filesystem. Phased out the redundancy in $paths->pages that paired a number with every urlname as foreach loops are allowed now (and have been for some time). Fixed missing includes for several functions. Rewrote str_replace_once to be a lot more efficient.
Dan
parents: 592
diff changeset
  2009
  
163
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2010
  // Strip out comments that are already escaped
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2011
  preg_match_all('/&lt;!--(.*?)--&gt;/', $html, $comment_match);
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2012
  $i = 0;
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2013
  foreach ( $comment_match[0] as $comment )
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2014
  {
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2015
    $html = str_replace_once($comment, "{HTMLCOMMENT:$i:$rand_seed}", $html);
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2016
    $i++;
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2017
  }
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2018
  
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2019
  // Strip out code sections that will be postprocessed by Text_Wiki
1115
b3c249d06990 Functions: fixed HTML sanitizer to properly preprocess <code> one-liners
Dan
parents: 1110
diff changeset
  2020
  preg_match_all(';^<code(\s[^>]*)?>((?:(?R)|.)*?)</code>(\s|$);msi', $html, $code_match);
163
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2021
  $i = 0;
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2022
  foreach ( $code_match[0] as $code )
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2023
  {
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2024
    $html = str_replace_once($code, "{TW_CODE:$i:$rand_seed}", $html);
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2025
    $i++;
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2026
  }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2027
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2028
  $html = preg_replace('#<([a-z]+)([\s]+)([^>]+?)'.htmlalternatives('javascript:').'(.+?)>(.*?)</\\1>#is', '&lt;\\1\\2\\3javascript:\\59&gt;\\60&lt;/\\1&gt;', $html);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2029
  $html = preg_replace('#<([a-z]+)([\s]+)([^>]+?)'.htmlalternatives('javascript:').'(.+?)>#is', '&lt;\\1\\2\\3javascript:\\59&gt;', $html);
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2030
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2031
  if($filter_php)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2032
    $html = str_replace(
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2033
      Array('<?php',    '<?',    '<%',    '?>',    '%>'),
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2034
      Array('&lt;?php', '&lt;?', '&lt;%', '?&gt;', '%&gt;'),
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2035
      $html);
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2036
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2037
  $tag_whitelist = array_keys ( setupAttributeWhitelist() );
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2038
  if ( !$filter_php )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2039
    $tag_whitelist[] = '?php';
164
54c79adfb694 Fixed comment stripping in sanitize_html()
Dan
parents: 163
diff changeset
  2040
  // allow HTML comments
54c79adfb694 Fixed comment stripping in sanitize_html()
Dan
parents: 163
diff changeset
  2041
  $tag_whitelist[] = '!--';
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2042
  $len = strlen($html);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2043
  $in_quote = false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2044
  $quote_char = '';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2045
  $tag_start = 0;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2046
  $tag_name = '';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2047
  $in_tag = false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2048
  $trk_name = false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2049
  for ( $i = 0; $i < $len; $i++ )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2050
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2051
    $chr = $html{$i};
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2052
    $prev = ( $i == 0 ) ? '' : $html{ $i - 1 };
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2053
    $next = ( ( $i + 1 ) == $len ) ? '' : $html { $i + 1 };
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2054
    if ( $in_quote && $in_tag )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2055
    {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2056
      if ( $quote_char == $chr && $prev != '\\' )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2057
        $in_quote = false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2058
    }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2059
    elseif ( ( $chr == '"' || $chr == "'" ) && $prev != '\\' && $in_tag )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2060
    {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2061
      $in_quote = true;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2062
      $quote_char = $chr;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2063
    }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2064
    if ( $chr == '<' && !$in_tag && $next != '/' )
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2065
    {
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2066
      // start of a tag
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2067
      $tag_start = $i;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2068
      $in_tag = true;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2069
      $trk_name = true;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2070
    }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2071
    elseif ( !$in_quote && $in_tag && $chr == '>' )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2072
    {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2073
      $full_tag = substr($html, $tag_start, ( $i - $tag_start ) + 1 );
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2074
      $l = strlen($tag_name) + 2;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2075
      $attribs_only = trim( substr($full_tag, $l, ( strlen($full_tag) - $l - 1 ) ) );
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2076
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2077
      // Debugging message
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2078
      // echo htmlspecialchars($full_tag) . '<br />';
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2079
450
35f9d6c93eec Fixed case where HTML comments were getting stripped when opening tag not followed by whitespace (<!--foo--> was stripped, <!-- foo --> was not, neither is stripped now)
Dan
parents: 325
diff changeset
  2080
      if ( !in_array($tag_name, $tag_whitelist) && substr($tag_name, 0, 3) != '!--' )
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2081
      {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2082
        // Illegal tag
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2083
        //echo $tag_name . ' ';
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2084
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2085
        $s = ( empty($attribs_only) ) ? '' : ' ';
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2086
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2087
        $sanitized = '&lt;' . $tag_name . $s . $attribs_only . '&gt;';
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2088
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2089
        $html = substr($html, 0, $tag_start) . $sanitized . substr($html, $i + 1);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2090
        $html = str_replace('</' . $tag_name . '>', '&lt;/' . $tag_name . '&gt;', $html);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2091
        $new_i = $tag_start + strlen($sanitized);
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2092
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2093
        $len = strlen($html);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2094
        $i = $new_i;
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2095
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2096
        $in_tag = false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2097
        $tag_name = '';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2098
        continue;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2099
      }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2100
      else
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2101
      {
164
54c79adfb694 Fixed comment stripping in sanitize_html()
Dan
parents: 163
diff changeset
  2102
        // If not filtering PHP, don't bother to strip
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2103
        if ( $tag_name == '?php' && !$filter_php )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2104
          continue;
164
54c79adfb694 Fixed comment stripping in sanitize_html()
Dan
parents: 163
diff changeset
  2105
        // If this is a comment, likewise skip this "tag"
54c79adfb694 Fixed comment stripping in sanitize_html()
Dan
parents: 163
diff changeset
  2106
        if ( $tag_name == '!--' )
54c79adfb694 Fixed comment stripping in sanitize_html()
Dan
parents: 163
diff changeset
  2107
          continue;
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2108
        $f = fixTagAttributes( $attribs_only, $tag_name );
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2109
        $s = ( empty($f) ) ? '' : ' ';
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2110
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2111
        $sanitized = '<' . $tag_name . $f . '>';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2112
        $new_i = $tag_start + strlen($sanitized);
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2113
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2114
        $html = substr($html, 0, $tag_start) . $sanitized . substr($html, $i + 1);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2115
        $len = strlen($html);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2116
        $i = $new_i;
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2117
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2118
        $in_tag = false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2119
        $tag_name = '';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2120
        continue;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2121
      }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2122
    }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2123
    elseif ( $in_tag && $trk_name )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2124
    {
21
663fcf528726 Updated all version numbers back to Banshee; a few preliminary steps towards full UTF-8 support in page URLs
Dan
parents: 19
diff changeset
  2125
      $is_alphabetical = ( strtolower($chr) != strtoupper($chr) || in_array($chr, array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')) || $chr == '?' || $chr == '!' || $chr == '-' );
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2126
      if ( $is_alphabetical )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2127
        $tag_name .= $chr;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2128
      else
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2129
      {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2130
        $trk_name = false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2131
      }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2132
    }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2133
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2134
  }
164
54c79adfb694 Fixed comment stripping in sanitize_html()
Dan
parents: 163
diff changeset
  2135
  
15
ad5986a53197 Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
parents: 14
diff changeset
  2136
  // 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
parents: 14
diff changeset
  2137
  // <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
parents: 14
diff changeset
  2138
  // <
ad5986a53197 Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
parents: 14
diff changeset
  2139
  // 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
parents: 14
diff changeset
  2140
  $html = preg_replace('/<(script|iframe)(.+?)src=([^>]*)</i', '&lt;\\1\\2src=\\3&lt;', $html);
817
880c4b7eb658 SECURITY: Fix XSS under IE in closing tags (shared sanitizer)
Dan
parents: 801
diff changeset
  2141
  
880c4b7eb658 SECURITY: Fix XSS under IE in closing tags (shared sanitizer)
Dan
parents: 801
diff changeset
  2142
  // Vulnerability reported by fuzion from nukeit.org:
880c4b7eb658 SECURITY: Fix XSS under IE in closing tags (shared sanitizer)
Dan
parents: 801
diff changeset
  2143
  // XSS in closing HTML tag style attribute
880c4b7eb658 SECURITY: Fix XSS under IE in closing tags (shared sanitizer)
Dan
parents: 801
diff changeset
  2144
  // Fix: escape all closing tags with non-whitelisted characters
1198
3ec9ac297045 Fixed oversanitation of multiple XHTML closing tags in a row
Dan
parents: 1183
diff changeset
  2145
  $html = preg_replace('!</((?:[^>]*)([^a-z0-9_:>-]+)(?:[^>]*))>!i', '&lt;/\\1&gt;', $html);
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2146
163
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2147
  // Restore stripped comments
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2148
  $i = 0;
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2149
  foreach ( $comment_match[0] as $comment )
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2150
  {
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2151
    $html = str_replace_once("{HTMLCOMMENT:$i:$rand_seed}", $comment, $html);
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2152
    $i++;
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2153
  }
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2154
  
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2155
  // Restore stripped code
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2156
  $i = 0;
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2157
  foreach ( $code_match[0] as $code )
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2158
  {
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2159
    $html = str_replace_once("{TW_CODE:$i:$rand_seed}", $code, $html);
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2160
    $i++;
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2161
  }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2162
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2163
  return $html;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2164
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2165
32
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2166
/**
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2167
 * 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
parents: 22
diff changeset
  2168
 * @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
parents: 22
diff changeset
  2169
 * @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
parents: 22
diff changeset
  2170
 */
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2171
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2172
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
parents: 22
diff changeset
  2173
{
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2174
32
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2175
  $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
parents: 22
diff changeset
  2176
  $tok2 = "</litewiki>";
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2177
32
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2178
  $block_tags = array('div', 'p', 'table', 'blockquote', 'pre');
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2179
32
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2180
  $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
parents: 22
diff changeset
  2181
  $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
parents: 22
diff changeset
  2182
  $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
parents: 22
diff changeset
  2183
  $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
parents: 22
diff changeset
  2184
  $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
parents: 22
diff changeset
  2185
  $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
parents: 22
diff changeset
  2186
  $trk_name = false;
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2187
32
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2188
  $diag = 0;
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2189
32
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2190
  $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
parents: 22
diff changeset
  2191
  $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
parents: 22
diff changeset
  2192
  $block_start = 0;
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2193
32
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2194
  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
parents: 22
diff changeset
  2195
  {
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2196
    $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
parents: 22
diff changeset
  2197
    $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
parents: 22
diff changeset
  2198
    $next = ( ( $i + 1 ) == $len ) ? '' : $html { $i + 1 };
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2199
32
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2200
    // 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
parents: 22
diff changeset
  2201
    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
parents: 22
diff changeset
  2202
    {
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2203
      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
parents: 22
diff changeset
  2204
        $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
parents: 22
diff changeset
  2205
    }
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2206
    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
parents: 22
diff changeset
  2207
    {
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2208
      $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
parents: 22
diff changeset
  2209
      $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
parents: 22
diff changeset
  2210
    }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2211
32
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2212
    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
parents: 22
diff changeset
  2213
    {
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2214
      // 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
parents: 22
diff changeset
  2215
      $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
parents: 22
diff changeset
  2216
      $i++;
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2217
      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
parents: 22
diff changeset
  2218
      {
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2219
        $i++;
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2220
        // 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
parents: 22
diff changeset
  2221
        $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
parents: 22
diff changeset
  2222
        $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
parents: 22
diff changeset
  2223
        $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
parents: 22
diff changeset
  2224
        $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
parents: 22
diff changeset
  2225
        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
parents: 22
diff changeset
  2226
          break;
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2227
      }
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2228
      // 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
parents: 22
diff changeset
  2229
      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
parents: 22
diff changeset
  2230
      {
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2231
        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
parents: 22
diff changeset
  2232
        {
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2233
          $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
parents: 22
diff changeset
  2234
          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
parents: 22
diff changeset
  2235
          {
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2236
            $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
parents: 22
diff changeset
  2237
            $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
parents: 22
diff changeset
  2238
            // 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
parents: 22
diff changeset
  2239
            $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
parents: 22
diff changeset
  2240
            $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
parents: 22
diff changeset
  2241
            $html = substr($html, 0, $block_start) . $new_text . substr($html, $i);
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2242
32
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2243
            $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
parents: 22
diff changeset
  2244
            $len = strlen($html);
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2245
32
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2246
            //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
parents: 22
diff changeset
  2247
          }
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2248
        }
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2249
      }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2250
32
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2251
      $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
parents: 22
diff changeset
  2252
      $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
parents: 22
diff changeset
  2253
      $tag_name = '';
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2254
32
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2255
      continue;
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2256
    }
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2257
    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
parents: 22
diff changeset
  2258
    {
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2259
      // 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
parents: 22
diff changeset
  2260
      $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
parents: 22
diff changeset
  2261
      $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
parents: 22
diff changeset
  2262
      $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
parents: 22
diff changeset
  2263
    }
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2264
    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
parents: 22
diff changeset
  2265
    {
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2266
      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
parents: 22
diff changeset
  2267
      {
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2268
        // 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
parents: 22
diff changeset
  2269
        // echo '&lt;inline ' . $tag_name . '&gt; ';
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2270
32
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2271
        $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
parents: 22
diff changeset
  2272
        $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
parents: 22
diff changeset
  2273
        continue;
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2274
      }
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2275
      else
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2276
      {
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2277
        // echo '&lt;block: ' . $tag_name . ' @ ' . $i . '&gt;<br/>';
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2278
        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
parents: 22
diff changeset
  2279
        {
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2280
          //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
parents: 22
diff changeset
  2281
          $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
parents: 22
diff changeset
  2282
          $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
parents: 22
diff changeset
  2283
          $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
parents: 22
diff changeset
  2284
        }
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2285
        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
parents: 22
diff changeset
  2286
        {
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2287
          $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
parents: 22
diff changeset
  2288
        }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2289
32
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2290
        $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
parents: 22
diff changeset
  2291
        $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
parents: 22
diff changeset
  2292
        continue;
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2293
      }
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2294
    }
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2295
    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
parents: 22
diff changeset
  2296
    {
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2297
      $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
parents: 22
diff changeset
  2298
      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
parents: 22
diff changeset
  2299
        $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
parents: 22
diff changeset
  2300
      else
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2301
      {
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2302
        $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
parents: 22
diff changeset
  2303
      }
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2304
    }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2305
32
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2306
    // Tokenization complete
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2307
32
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2308
  }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2309
32
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2310
  $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
parents: 22
diff changeset
  2311
  // 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
parents: 22
diff changeset
  2312
  $html = preg_replace($regex, '\\1', $html);
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2313
32
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2314
  return $html;
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2315
32
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2316
}
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2317
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2318
function htmlalternatives($string)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2319
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2320
  $ret = '';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2321
  for ( $i = 0; $i < strlen($string); $i++ )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2322
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2323
    $chr = $string{$i};
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2324
    $ch1 = ord($chr);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2325
    $ch2 = dechex($ch1);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2326
    $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) . ')';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2327
    $ret .= $byte;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2328
    $ret .= '([\s]){0,2}';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2329
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2330
  return $ret;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2331
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2332
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2333
/**
906
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2334
 * Generate HTML for a sprite image.
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2335
 * @param string Path to sprite image
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2336
 * @param int Width of resulting image
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2337
 * @param int Height of resulting image
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2338
 * @param int X offset
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2339
 * @param int Y offset
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2340
 * @return object HTMLImageElement
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2341
 */
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2342
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2343
function gen_sprite($path, $width, $height, $xpos, $ypos)
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2344
{
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2345
  $html = '<img src="' . scriptPath . '/images/spacer.gif" width="' . $width . '" height="' . $height . '" ';
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2346
  $xpos = ( $xpos == 0 ) ? '0' : '-' . strval($xpos);
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2347
  $ypos = ( $ypos == 0 ) ? '0' : '-' . strval($ypos);
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2348
  $html .= 'style="background-image: url(' . $path . '); background-repeat: no-repeat; background-position: ' . $ypos . 'px ' . $xpos . 'px;"';
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2349
  $html .= ' />';
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2350
  
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2351
  return $html;
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2352
}
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2353
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2354
/**
825
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2355
 * Portal function allowing spam-filtering plugins.
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2356
 * Hooking guide:
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2357
 *   - Attach to spam_check
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2358
 *   - Return either true or false - true if the message is spam-free, false if it fails your test
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2359
 * @example
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2360
 <code>
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2361
 $plugins->attachHook('spam_check', 'return my_spam_check($string);');
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2362
 function my_spam_check($string)
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2363
 {
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2364
   if ( stristr($string, 'viagra') )
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2365
     return false;
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2366
   
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2367
   return true;
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2368
 }
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2369
 </code>
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2370
 * @param string String to check for spam
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2371
 * @param string Author name
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2372
 * @param string Author e-mail
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2373
 * @param string Author website
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2374
 * @param string Author IP
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2375
 * @return bool
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2376
 */
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2377
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2378
function spamalyze($string, $name = false, $email = false, $url = false, $ip = false)
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2379
{
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2380
  global $db, $session, $paths, $template, $plugins; // Common objects
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2381
  if ( !$ip )
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2382
    $ip =& $_SERVER['REMOTE_ADDR'];
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2383
  
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2384
  $code = $plugins->setHook('spam_check');
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2385
  foreach ( $code as $cmd )
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2386
  {
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2387
    $result = eval($cmd);
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2388
    if ( !$result )
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2389
      return false;
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2390
  }
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2391
  return true;
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2392
}
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2393
9d5c04c1414f Added (very basic) spam filtering plugin support. Plugins can mark a message as spam by hooking into the spam check API, which is documented in functions.php. No spam checking functionality is built-in.
Dan
parents: 817
diff changeset
  2394
/**
875
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2395
 * Generates the HTML of a pagination control.
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2396
 * @param int Current page
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2397
 * @param int Number of pages
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2398
 * @param string sprintf()-style formatting URL for pages
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2399
 * @param int Multiplier for start offset, defaults to 1
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2400
 * @param int Add to each $i for addition to result urls, usually either 0 or 1 (depends on whether you want your ?page= to start with 0 ro 1)
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2401
 * @return string HTML
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2402
 */
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2403
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2404
function generate_paginator($current_page, $num_pages, $result_url, $start_mult = 1, $start_add = 1)
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2405
{
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2406
  global $db, $session, $paths, $template, $plugins; // Common objects
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2407
  global $lang;
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2408
  
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2409
  $out = '';
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2410
  $i = 0;
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2411
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2412
  // Build paginator
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2413
  $pg_css = ( strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') ) ?
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2414
            // IE-specific hack
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2415
            'display: block; width: 1px;':
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2416
            // Other browsers
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2417
            'display: table; margin: 10px 0 0 auto;';
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2418
  
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2419
  $begin = '<div class="tblholder" style="'. $pg_css . '">
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2420
    <table border="0" cellspacing="1" cellpadding="4">
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2421
      <tr><th>' . $lang->get('paginate_lbl_page') . '</th>';
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2422
  $block = '<td class="row1" style="text-align: center;">{LINK}</td>';
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2423
  $end = '</tr></table></div>';
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2424
  $blk = $template->makeParserText($block);
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2425
  $inner = '';
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2426
  $cls = 'row2';
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2427
  if ( $num_pages < 5 )
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2428
  {
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2429
    for ( $i = 0; $i < $num_pages; $i++ )
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2430
    {
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2431
      $cls = ( $cls == 'row1' ) ? 'row2' : 'row1';
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2432
      $offset = strval(($i * $start_mult) + $start_add);
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2433
      $url = htmlspecialchars(sprintf($result_url, $offset));
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2434
      $j = $i + 1;
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2435
      $link = ( $i == $current_page ) ? "<b>$j</b>" : "<a href=".'"'."$url".'"'." style='text-decoration: none;'>$j</a>";
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2436
      $blk->assign_vars(array(
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2437
        'CLASS'=>$cls,
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2438
        'LINK'=>$link
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2439
        ));
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2440
      $inner .= $blk->run();
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2441
    }
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2442
  }
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2443
  else
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2444
  {
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2445
    if ( $current_page + 5 > $num_pages )
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2446
    {
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2447
      $list = Array();
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2448
      $tp = $current_page;
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2449
      if ( $current_page + 0 == $num_pages ) $tp = $tp - 3;
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2450
      if ( $current_page + 1 == $num_pages ) $tp = $tp - 2;
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2451
      if ( $current_page + 2 == $num_pages ) $tp = $tp - 1;
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2452
      for ( $i = $tp - 1; $i <= $tp + 1; $i++ )
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2453
      {
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2454
        $list[] = $i;
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2455
      }
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2456
    }
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2457
    else
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2458
    {
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2459
      $list = Array();
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2460
      $current = $current_page;
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2461
      $lower = ( $current < 3 ) ? 1 : $current - 1;
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2462
      for ( $i = 0; $i < 3; $i++ )
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2463
      {
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2464
        $list[] = $lower + $i;
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2465
      }
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2466
    }
909
94c1ff984286 Finished core of log display interface including filter management. There is still a bit of a to-do list, especially regarding rollbacks and reuploads.
Dan
parents: 906
diff changeset
  2467
    $url = sprintf($result_url, $start_add);
875
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2468
    $link = ( 0 == $current_page ) ? "<b>" . $lang->get('paginate_btn_first') . "</b>" : "<a href=".'"'."$url".'"'." style='text-decoration: none;'>&laquo; " . $lang->get('paginate_btn_first') . "</a>";
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2469
    $blk->assign_vars(array(
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2470
      'CLASS'=>$cls,
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2471
      'LINK'=>$link
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2472
      ));
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2473
    $inner .= $blk->run();
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2474
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2475
    foreach ( $list as $i )
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2476
    {
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2477
      if ( $i == $num_pages )
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2478
        break;
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2479
      $cls = ( $cls == 'row1' ) ? 'row2' : 'row1';
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2480
      $offset = strval(($i * $start_mult) + $start_add);
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2481
      $url = sprintf($result_url, $offset);
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2482
      $j = $i + 1;
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2483
      $link = ( $i == $current_page ) ? "<b>$j</b>" : "<a href=".'"'."$url".'"'." style='text-decoration: none;'>$j</a>";
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2484
      $blk->assign_vars(array(
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2485
        'CLASS'=>$cls,
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2486
        'LINK'=>$link
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2487
        ));
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2488
      $inner .= $blk->run();
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2489
    }
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2490
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2491
    // "Last" button
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2492
    $total = (($num_pages - 1) * $start_mult) + $start_add;
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2493
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2494
    if ( $current_page < $num_pages )
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2495
    {
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2496
      $cls = ( $cls == 'row1' ) ? 'row2' : 'row1';
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2497
      $offset = strval($total);
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2498
      $url = sprintf($result_url, $offset);
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2499
      $link = ( $num_pages - 1 == $current_page ) ? "<b>" . $lang->get('paginate_btn_last') . "</b>" : "<a href=".'"'."$url".'"'." style='text-decoration: none;'>" . $lang->get('paginate_btn_last') . " &raquo;</a>";
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2500
      $blk->assign_vars(array(
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2501
        'CLASS'=>$cls,
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2502
        'LINK'=>$link
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2503
        ));
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2504
      $inner .= $blk->run();
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2505
    }
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2506
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2507
  }
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2508
909
94c1ff984286 Finished core of log display interface including filter management. There is still a bit of a to-do list, especially regarding rollbacks and reuploads.
Dan
parents: 906
diff changeset
  2509
  $inner .= '<td class="row2" style="cursor: pointer;" onclick="paginator_goto(this, '.$current_page.', '.$num_pages.', '.$start_mult.', '.$start_add.', unescape(\'' . rawurlencode($result_url) . '\'));">&darr;</td>';
875
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2510
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2511
  $paginator = "\n$begin$inner$end\n";
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2512
  return $paginator;
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2513
}
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2514
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2515
/**
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2516
 * Paginates (breaks into multiple pages) a MySQL result resource, which is treated as unbuffered.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2517
 * @param resource The MySQL result resource. This should preferably be an unbuffered query.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2518
 * @param string A template, with variables being named after the column name
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2519
 * @param int The number of total results. This should be determined by a second query.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2520
 * @param string sprintf-style formatting string for URLs for result pages. First parameter will be start offset.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2521
 * @param int Optional. Start offset in individual results. Defaults to 0.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2522
 * @param int Optional. The number of results per page. Defualts to 10.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2523
 * @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.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2524
 * @param string Optional. The text to be sent before the result list, only if there are any results. Possibly the start of a table.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2525
 * @param string Optional. The text to be sent after the result list, only if there are any results. Possibly the end of a table.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2526
 * @return string
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2527
 */
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2528
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2529
function paginate($q, $tpl_text, $num_results, $result_url, $start = 0, $perpage = 10, $callers = Array(), $header = '', $footer = '')
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2530
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2531
  global $db, $session, $paths, $template, $plugins; // Common objects
359
e0787bb6285b Implemented IP logging for comments and registration
Dan
parents: 345
diff changeset
  2532
  
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2533
  $parser = $template->makeParserText($tpl_text);
875
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2534
  
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2535
  $num_pages = ceil ( $num_results / $perpage );
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2536
  $out = '';
875
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2537
  $this_page = ceil ( $start / $perpage );
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2538
  $i = 0;
875
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2539
  
953
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  2540
  if ( $num_results > 0 )
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  2541
  {
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  2542
    $paginator = generate_paginator($this_page, $num_pages, $result_url, $perpage, 0);
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  2543
    $out .= $paginator;
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  2544
  }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2545
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2546
  $cls = 'row2';
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2547
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2548
  if ( $row = $db->fetchrow($q) )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2549
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2550
    $i = 0;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2551
    $out .= $header;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2552
    do {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2553
      $i++;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2554
      if ( $i <= $start )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2555
      {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2556
        continue;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2557
      }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2558
      if ( ( $i - $start ) > $perpage )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2559
      {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2560
        break;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2561
      }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2562
      $cls = ( $cls == 'row1' ) ? 'row2' : 'row1';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2563
      foreach ( $row as $j => $val )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2564
      {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2565
        if ( isset($callers[$j]) )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2566
        {
953
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  2567
          $tmp = ( is_callable($callers[$j]) ) ? call_user_func($callers[$j], $val, $row) : $val;
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2568
575
9c1ab9c74662 Fixed two bugs in paginator: noisy warning when rows run out and empty strings not being treated as valid from formatting functions
Dan
parents: 574
diff changeset
  2569
          if ( is_string($tmp) )
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2570
          {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2571
            $row[$j] = $tmp;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2572
          }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2573
        }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2574
      }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2575
      $parser->assign_vars($row);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2576
      $parser->assign_vars(array('_css_class' => $cls));
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2577
      $out .= $parser->run();
575
9c1ab9c74662 Fixed two bugs in paginator: noisy warning when rows run out and empty strings not being treated as valid from formatting functions
Dan
parents: 574
diff changeset
  2578
    } while ( $row = @$db->fetchrow($q) );
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2579
    $out .= $footer;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2580
  }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2581
953
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  2582
  if ( $num_results > 0 )
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  2583
    $out .= $paginator;
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2584
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2585
  return $out;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2586
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2587
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2588
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2589
 * This is the same as paginate(), but it processes an array instead of a MySQL result resource.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2590
 * @param array The results. Each value is simply echoed.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2591
 * @param int The number of total results. This should be determined by a second query.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2592
 * @param string sprintf-style formatting string for URLs for result pages. First parameter will be start offset.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2593
 * @param int Optional. Start offset in individual results. Defaults to 0.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2594
 * @param int Optional. The number of results per page. Defualts to 10.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2595
 * @param string Optional. The text to be sent before the result list, only if there are any results. Possibly the start of a table.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2596
 * @param string Optional. The text to be sent after the result list, only if there are any results. Possibly the end of a table.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2597
 * @return string
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2598
 */
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2599
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2600
function paginate_array($q, $num_results, $result_url, $start = 0, $perpage = 10, $header = '', $footer = '')
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2601
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2602
  global $db, $session, $paths, $template, $plugins; // Common objects
362
02d315d1cc58 Started localization on User CP. Localized pagination, password strength, and various other small widgets. Fixed bug in path manager causing return of fullpage from get_page_id_from_url() even when namespace is Special.
Dan
parents: 359
diff changeset
  2603
  global $lang;
02d315d1cc58 Started localization on User CP. Localized pagination, password strength, and various other small widgets. Fixed bug in path manager causing return of fullpage from get_page_id_from_url() even when namespace is Special.
Dan
parents: 359
diff changeset
  2604
  
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2605
  $num_pages = ceil ( $num_results / $perpage );
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2606
  $out = '';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2607
  $i = 0;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2608
  $this_page = ceil ( $start / $perpage );
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2609
875
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2610
  $paginator = generate_paginator($this_page, $num_pages, $result_url, $perpage, 0);
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2611
  
953
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  2612
  if ( $num_results > 1 )
272
e0ec986c0af3 Searching sucks, and Enano's search algorithm was complete bullcrap. So I rewrote it. No, it does not use Google search technology. Like they have a patent for using the Arial font on search result pages anyway.
Dan
parents: 270
diff changeset
  2613
  {
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2614
    $out .= $paginator;
272
e0ec986c0af3 Searching sucks, and Enano's search algorithm was complete bullcrap. So I rewrote it. No, it does not use Google search technology. Like they have a patent for using the Arial font on search result pages anyway.
Dan
parents: 270
diff changeset
  2615
  }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2616
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2617
  $cls = 'row2';
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2618
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2619
  if ( sizeof($q) > 0 )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2620
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2621
    $i = 0;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2622
    $out .= $header;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2623
    foreach ( $q as $val ) {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2624
      $i++;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2625
      if ( $i <= $start )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2626
      {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2627
        continue;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2628
      }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2629
      if ( ( $i - $start ) > $perpage )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2630
      {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2631
        break;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2632
      }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2633
      $out .= $val;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2634
    }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2635
    $out .= $footer;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2636
  }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2637
953
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  2638
  if ( $num_results > 1 )
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2639
    $out .= $paginator;
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2640
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2641
  return $out;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2642
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2643
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2644
/**
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2645
 * Enano version of fputs for debugging
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2646
 */
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2647
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2648
function enano_fputs($socket, $data)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2649
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2650
  // echo '<pre>' . htmlspecialchars($data) . '</pre>';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2651
  // flush();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2652
  // ob_flush();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2653
  // ob_end_flush();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2654
  return fputs($socket, $data);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2655
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2656
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2657
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2658
 * Sanitizes a page URL string so that it can safely be stored in the database.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2659
 * @param string Page ID to sanitize
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2660
 * @return string Cleaned text
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2661
 */
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2662
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2663
function sanitize_page_id($page_id)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2664
{
325
e17cc42d77cf Fixed: $paths->page_id not set when the page doesn't exist; finally fixed garbled page names for IP addresses
Dan
parents: 322
diff changeset
  2665
  global $db, $session, $paths, $template, $plugins; // Common objects
e17cc42d77cf Fixed: $paths->page_id not set when the page doesn't exist; finally fixed garbled page names for IP addresses
Dan
parents: 322
diff changeset
  2666
  
e17cc42d77cf Fixed: $paths->page_id not set when the page doesn't exist; finally fixed garbled page names for IP addresses
Dan
parents: 322
diff changeset
  2667
  if ( isset($paths->nslist['User']) )
e17cc42d77cf Fixed: $paths->page_id not set when the page doesn't exist; finally fixed garbled page names for IP addresses
Dan
parents: 322
diff changeset
  2668
  {
377
bb3e6c3bd4f4 Removed stray debugging info from ACL editor success notification; added ability for guests to set language on URI (?lang=eng); added html_in_pages ACL type and separated from php_in_pages so HTML can be embedded but not PHP; rewote portions of the path manager to better abstract URL input; added Zend Framework into list of BSD-licensed libraries; localized some remaining strings; got the migration script working, but just barely; fixed display bug in Special:Contributions; localized Main Page button in admin panel
Dan
parents: 376
diff changeset
  2669
    if ( preg_match('/^' . str_replace('/', '\\/', preg_quote($paths->nslist['User'])) . '/', $page_id) )
325
e17cc42d77cf Fixed: $paths->page_id not set when the page doesn't exist; finally fixed garbled page names for IP addresses
Dan
parents: 322
diff changeset
  2670
    {
377
bb3e6c3bd4f4 Removed stray debugging info from ACL editor success notification; added ability for guests to set language on URI (?lang=eng); added html_in_pages ACL type and separated from php_in_pages so HTML can be embedded but not PHP; rewote portions of the path manager to better abstract URL input; added Zend Framework into list of BSD-licensed libraries; localized some remaining strings; got the migration script working, but just barely; fixed display bug in Special:Contributions; localized Main Page button in admin panel
Dan
parents: 376
diff changeset
  2671
      $ip = preg_replace('/^' . str_replace('/', '\\/', preg_quote($paths->nslist['User'])) . '/', '', $page_id);
325
e17cc42d77cf Fixed: $paths->page_id not set when the page doesn't exist; finally fixed garbled page names for IP addresses
Dan
parents: 322
diff changeset
  2672
      if ( is_valid_ip($ip) )
e17cc42d77cf Fixed: $paths->page_id not set when the page doesn't exist; finally fixed garbled page names for IP addresses
Dan
parents: 322
diff changeset
  2673
      {
e17cc42d77cf Fixed: $paths->page_id not set when the page doesn't exist; finally fixed garbled page names for IP addresses
Dan
parents: 322
diff changeset
  2674
        return $page_id;
e17cc42d77cf Fixed: $paths->page_id not set when the page doesn't exist; finally fixed garbled page names for IP addresses
Dan
parents: 322
diff changeset
  2675
      }
e17cc42d77cf Fixed: $paths->page_id not set when the page doesn't exist; finally fixed garbled page names for IP addresses
Dan
parents: 322
diff changeset
  2676
    }
e17cc42d77cf Fixed: $paths->page_id not set when the page doesn't exist; finally fixed garbled page names for IP addresses
Dan
parents: 322
diff changeset
  2677
  }
e17cc42d77cf Fixed: $paths->page_id not set when the page doesn't exist; finally fixed garbled page names for IP addresses
Dan
parents: 322
diff changeset
  2678
  
685
17ebe24cdf85 Rebranded as 1.1.5 (Caoineag alpha 5) and fixed a couple bugs related to CDN support in template_nodb and installerUI. Updated readme.
Dan
parents: 667
diff changeset
  2679
  if ( empty($page_id) )
17ebe24cdf85 Rebranded as 1.1.5 (Caoineag alpha 5) and fixed a couple bugs related to CDN support in template_nodb and installerUI. Updated readme.
Dan
parents: 667
diff changeset
  2680
    return '';
17ebe24cdf85 Rebranded as 1.1.5 (Caoineag alpha 5) and fixed a couple bugs related to CDN support in template_nodb and installerUI. Updated readme.
Dan
parents: 667
diff changeset
  2681
  
15
ad5986a53197 Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
parents: 14
diff changeset
  2682
  // 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
parents: 14
diff changeset
  2683
  $page_id = dirtify_page_id($page_id);
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2684
1061
4ef865b5f497 Tweaked URL sanitizing a bit to make Enanium work better.
Dan
parents: 1035
diff changeset
  2685
  $pid_clean = preg_replace('/[\w\.\/:;\(\)@\[\]=_-]/', 'X', $page_id);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2686
  $pid_dirty = enano_str_split($pid_clean, 1);
685
17ebe24cdf85 Rebranded as 1.1.5 (Caoineag alpha 5) and fixed a couple bugs related to CDN support in template_nodb and installerUI. Updated readme.
Dan
parents: 667
diff changeset
  2687
  
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2688
  foreach ( $pid_dirty as $id => $char )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2689
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2690
    if ( $char == 'X' )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2691
      continue;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2692
    $cid = ord($char);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2693
    $cid = dechex($cid);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2694
    $cid = strval($cid);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2695
    if ( strlen($cid) < 2 )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2696
    {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2697
      $cid = strtoupper("0$cid");
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2698
    }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2699
    $pid_dirty[$id] = ".$cid";
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2700
  }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2701
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2702
  $pid_chars = enano_str_split($page_id, 1);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2703
  $page_id_cleaned = '';
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2704
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2705
  foreach ( $pid_chars as $id => $char )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2706
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2707
    if ( $pid_dirty[$id] == 'X' )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2708
      $page_id_cleaned .= $char;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2709
    else
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2710
      $page_id_cleaned .= $pid_dirty[$id];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2711
  }
325
e17cc42d77cf Fixed: $paths->page_id not set when the page doesn't exist; finally fixed garbled page names for IP addresses
Dan
parents: 322
diff changeset
  2712
  
21
663fcf528726 Updated all version numbers back to Banshee; a few preliminary steps towards full UTF-8 support in page URLs
Dan
parents: 19
diff changeset
  2713
  // global $mime_types;
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2714
21
663fcf528726 Updated all version numbers back to Banshee; a few preliminary steps towards full UTF-8 support in page URLs
Dan
parents: 19
diff changeset
  2715
  // $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
parents: 19
diff changeset
  2716
  // $exts = '(' . implode('|', $exts) . ')';
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2717
21
663fcf528726 Updated all version numbers back to Banshee; a few preliminary steps towards full UTF-8 support in page URLs
Dan
parents: 19
diff changeset
  2718
  // $page_id_cleaned = preg_replace('/\.2e' . $exts . '$/', '.\\1', $page_id_cleaned);
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2719
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2720
  return $page_id_cleaned;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2721
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2722
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2723
/**
15
ad5986a53197 Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
parents: 14
diff changeset
  2724
 * 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
parents: 14
diff changeset
  2725
 * @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
parents: 14
diff changeset
  2726
 * @return string
ad5986a53197 Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
parents: 14
diff changeset
  2727
 */
ad5986a53197 Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
parents: 14
diff changeset
  2728
ad5986a53197 Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
parents: 14
diff changeset
  2729
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
parents: 14
diff changeset
  2730
{
38
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2731
  global $db, $session, $paths, $template, $plugins; // Common objects
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2732
  // 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
parents: 14
diff changeset
  2733
  $page_id = str_replace(' ', '_', $page_id);
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2734
38
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2735
  // Exception for userpages for IP addresses
770
62fed244fa1c Fixed timezone preference setting not fully implemented; added ability for users to select their own rank from a list of possible ranks based on group membership and user level
Dan
parents: 766
diff changeset
  2736
  $pid_ip_check = ( is_object($paths) ) ? preg_replace('+^' . preg_quote($paths->nslist['User']) . '+', '', $page_id) : $page_id;
62fed244fa1c Fixed timezone preference setting not fully implemented; added ability for users to select their own rank from a list of possible ranks based on group membership and user level
Dan
parents: 766
diff changeset
  2737
  if ( is_valid_ip($pid_ip_check) )
38
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2738
  {
325
e17cc42d77cf Fixed: $paths->page_id not set when the page doesn't exist; finally fixed garbled page names for IP addresses
Dan
parents: 322
diff changeset
  2739
    return $page_id;
38
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2740
  }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2741
15
ad5986a53197 Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
parents: 14
diff changeset
  2742
  preg_match_all('/\.[A-Fa-f0-9][A-Fa-f0-9]/', $page_id, $matches);
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2743
15
ad5986a53197 Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
parents: 14
diff changeset
  2744
  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
parents: 14
diff changeset
  2745
  {
ad5986a53197 Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
parents: 14
diff changeset
  2746
    $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
parents: 14
diff changeset
  2747
    $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
parents: 14
diff changeset
  2748
    $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
parents: 14
diff changeset
  2749
    $char = chr($char);
1061
4ef865b5f497 Tweaked URL sanitizing a bit to make Enanium work better.
Dan
parents: 1035
diff changeset
  2750
    if ( preg_match('/^[\w\.\/:;\(\)@\[\]=_-]$/', $char) )
800
9cdfe82c56cd Major underlying changes to namespace handling. Each namespace is handled by its own class which extends Namespace_Default. Much greater customization/pluggability potential, at the possible expense of some code reusing (though code reusing has been avoided thus far). Also a bit better handling of page passwords [SECURITY].
Dan
parents: 798
diff changeset
  2751
      continue;
15
ad5986a53197 Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
parents: 14
diff changeset
  2752
    $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
parents: 14
diff changeset
  2753
  }
325
e17cc42d77cf Fixed: $paths->page_id not set when the page doesn't exist; finally fixed garbled page names for IP addresses
Dan
parents: 322
diff changeset
  2754
  
15
ad5986a53197 Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
parents: 14
diff changeset
  2755
  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
parents: 14
diff changeset
  2756
}
ad5986a53197 Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
parents: 14
diff changeset
  2757
ad5986a53197 Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
parents: 14
diff changeset
  2758
/**
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2759
 * 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
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2760
 * @param int The number to process
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2761
 * @return string Input number with commas added
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2762
 */
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2763
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2764
function commatize($num)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2765
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2766
  $num = (string)$num;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2767
  if ( strpos($num, '.') )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2768
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2769
    $whole = explode('.', $num);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2770
    $num = $whole[0];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2771
    $dec = $whole[1];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2772
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2773
  else
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2774
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2775
    $whole = $num;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2776
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2777
  $offset = ( strlen($num) ) % 3;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2778
  $len = strlen($num);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2779
  $offset = ( $offset == 0 )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2780
    ? 3
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2781
    : $offset;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2782
  for ( $i = $offset; $i < $len; $i=$i+3 )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2783
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2784
    $num = substr($num, 0, $i) . ',' . substr($num, $i, $len);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2785
    $len = strlen($num);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2786
    $i++;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2787
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2788
  if ( isset($dec) )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2789
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2790
    return $num . '.' . $dec;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2791
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2792
  else
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2793
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2794
    return $num;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2795
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2796
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2797
32
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2798
/**
915
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2799
 * Converts a number to a human file size.
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2800
 * @param int File size
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2801
 * @return string
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2802
 */
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2803
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2804
function humanize_filesize($size)
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2805
{
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2806
  global $lang;
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2807
  
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2808
  if ( $size > ( 1099511627776 * 0.9 ) )
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2809
  {
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2810
    return number_format($size / 1099511627776, 1) . $lang->get('etc_unit_terabytes_short');
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2811
  }
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2812
  if ( $size > ( 1073741824 * 0.9 ) )
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2813
  {
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2814
    return number_format($size / 1073741824, 1) . $lang->get('etc_unit_gigabytes_short');
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2815
  }
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2816
  if ( $size > ( 1048576 * 0.9 ) )
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2817
  {
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2818
    return number_format($size / 1048576, 1) . $lang->get('etc_unit_megabytes_short');
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2819
  }
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2820
  if ( $size > ( 1024 * 0.9 ) )
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2821
  {
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2822
    return number_format($size / 1024, 1) . $lang->get('etc_unit_kilobytes_short');
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2823
  }
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2824
  return "$size " . $lang->get('etc_unit_bytes');
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2825
}
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2826
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2827
/**
32
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2828
 * 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
parents: 22
diff changeset
  2829
 * @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
parents: 22
diff changeset
  2830
 * @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
parents: 22
diff changeset
  2831
 * @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
parents: 22
diff changeset
  2832
 */
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2833
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2834
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
parents: 22
diff changeset
  2835
{
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2836
  $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
parents: 22
diff changeset
  2837
  $pos++;
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2838
  $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
parents: 22
diff changeset
  2839
  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
parents: 22
diff changeset
  2840
}
4d87aad3c4c0 Finished everything on the TODO list (yay!); several CSS cleanups; tons more changes in this commit - see the patch for details
Dan
parents: 22
diff changeset
  2841
38
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2842
/**
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2843
 * Tells if a given IP address is valid.
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2844
 * @param string suspected IP address
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2845
 * @return bool true if valid, false otherwise
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2846
 */
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2847
38
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2848
function is_valid_ip($ip)
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2849
{
710
1fbce408813c Fixed IPv6 address match (the one from phpBB3 did not work)
Dan
parents: 685
diff changeset
  2850
  // This next one came from phpBB3.
38
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2851
  $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])';
710
1fbce408813c Fixed IPv6 address match (the one from phpBB3 did not work)
Dan
parents: 685
diff changeset
  2852
  $ipv6 = '(?:[a-f0-9]{0,4}):(?:[a-f0-9]{0,4}):(?:[a-f0-9]{0,4}:|:)?(?:[a-f0-9]{0,4}:|:)?(?:[a-f0-9]{0,4}:|:)?(?:[a-f0-9]{0,4}:|:)?(?:[a-f0-9]{0,4}:|:)?(?:[a-f0-9]{1,4})';
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2853
38
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2854
  if ( preg_match("/^{$ipv4}$/", $ip) || preg_match("/^{$ipv6}$/", $ip) )
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2855
    return true;
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2856
  else
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2857
    return false;
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2858
}
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2859
48
fc9762553a3c E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
parents: 40
diff changeset
  2860
/**
fc9762553a3c E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
parents: 40
diff changeset
  2861
 * 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
parents: 40
diff changeset
  2862
 * @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
parents: 40
diff changeset
  2863
 * @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
parents: 40
diff changeset
  2864
 * @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
parents: 40
diff changeset
  2865
 */
fc9762553a3c E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
parents: 40
diff changeset
  2866
fc9762553a3c E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
parents: 40
diff changeset
  2867
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
parents: 40
diff changeset
  2868
{
fc9762553a3c E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
parents: 40
diff changeset
  2869
  $needle_len = strlen($needle);
593
4f9bec0d65c1 More optimization work. Moved special page init functions to common instead of common_post hook. Allowed paths to cache page metadata on filesystem. Phased out the redundancy in $paths->pages that paired a number with every urlname as foreach loops are allowed now (and have been for some time). Fixed missing includes for several functions. Rewrote str_replace_once to be a lot more efficient.
Dan
parents: 592
diff changeset
  2870
  if ( $pos = strstr($haystack, $needle) )
48
fc9762553a3c E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
parents: 40
diff changeset
  2871
  {
593
4f9bec0d65c1 More optimization work. Moved special page init functions to common instead of common_post hook. Allowed paths to cache page metadata on filesystem. Phased out the redundancy in $paths->pages that paired a number with every urlname as foreach loops are allowed now (and have been for some time). Fixed missing includes for several functions. Rewrote str_replace_once to be a lot more efficient.
Dan
parents: 592
diff changeset
  2872
    $upto = substr($haystack, 0, ( strlen($haystack) - strlen($pos) ));
4f9bec0d65c1 More optimization work. Moved special page init functions to common instead of common_post hook. Allowed paths to cache page metadata on filesystem. Phased out the redundancy in $paths->pages that paired a number with every urlname as foreach loops are allowed now (and have been for some time). Fixed missing includes for several functions. Rewrote str_replace_once to be a lot more efficient.
Dan
parents: 592
diff changeset
  2873
    $from = substr($pos, $needle_len);
4f9bec0d65c1 More optimization work. Moved special page init functions to common instead of common_post hook. Allowed paths to cache page metadata on filesystem. Phased out the redundancy in $paths->pages that paired a number with every urlname as foreach loops are allowed now (and have been for some time). Fixed missing includes for several functions. Rewrote str_replace_once to be a lot more efficient.
Dan
parents: 592
diff changeset
  2874
    return "{$upto}{$thread}{$from}";
48
fc9762553a3c E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
parents: 40
diff changeset
  2875
  }
fc9762553a3c E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
parents: 40
diff changeset
  2876
  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
parents: 40
diff changeset
  2877
}
fc9762553a3c E-mail address mask engine non-Javascript fallback now picks random substitutions for @ and . to make address more unreadable by bots
Dan
parents: 40
diff changeset
  2878
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
parents: 76
diff changeset
  2879
/**
581
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2880
 * Replaces all given occurences of needle in haystack, case insensitively.
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2881
 * @param string Needle
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2882
 * @param string Thread
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2883
 * @param string Haystack
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2884
 * @return string
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2885
 */
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2886
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2887
function str_replace_i($needle, $thread, $haystack)
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2888
{
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2889
  $needle_len = strlen($needle);
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2890
  $haystack_len = strlen($haystack);
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2891
  for ( $i = 0; $i < $haystack_len; $i++ )
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2892
  {
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2893
    $test = substr($haystack, $i, $needle_len);
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2894
    if ( strtolower($test) == strtolower($needle) )
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2895
    {
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2896
      // Got it!
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2897
      $upto = substr($haystack, 0, $i);
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2898
      $from = substr($haystack, ( $i + $needle_len ));
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2899
      $haystack = "{$upto}{$thread}{$from}";
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2900
      $haystack_len = strlen($haystack);
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2901
      $i = $i + strlen($thread);
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2902
    }
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2903
  }
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2904
  return $haystack;
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2905
}
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2906
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2907
/**
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2908
 * Highlights a term in a string.
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2909
 * @param string Needle (term to highlight)
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2910
 * @param string Haystack (search string)
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2911
 * @param string Starting tag (<b>)
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2912
 * @param string Ending tag (</b>)
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2913
 * @return string
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2914
 */
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2915
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2916
function highlight_term($needle, $haystack, $start_tag = '<b>', $end_tag = '</b>')
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2917
{
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2918
  $needle_len = strlen($needle);
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2919
  $haystack_len = strlen($haystack);
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2920
  for ( $i = 0; $i < $haystack_len; $i++ )
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2921
  {
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2922
    $test = substr($haystack, $i, $needle_len);
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2923
    if ( strtolower($test) == strtolower($needle) )
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2924
    {
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2925
      // Got it!
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2926
      $upto = substr($haystack, 0, $i);
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2927
      $from = substr($haystack, ( $i + $needle_len ));
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2928
      $haystack = "{$upto}{$start_tag}{$test}{$end_tag}{$from}";
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2929
      $haystack_len = strlen($haystack);
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2930
      $i = $i + strlen($needle) + strlen($start_tag) + strlen($end_tag);
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2931
    }
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2932
  }
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2933
  return $haystack;
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2934
}
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2935
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2936
/**
756
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2937
 * Registers a new type of search result. Because this is so tricky to do but keep clean, this function takes an associative array as its
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2938
 * only parameter. This array configures the function. The required keys are:
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2939
 *  - table: the database table to search
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2940
 *  - titlecolumn: the column that will be used as the title of the search result. This will have a weight of 1.5
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2941
 *  - uniqueid: a TPL-format string, variables being column names, that will be unique for every result. This should contain a string that
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2942
 *              will be specific to your *type* of search result in addition to a primary key or other unique identifier.
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2943
 *  - linkformat: an array with the keys page_id and namespace which are where your result will link, plus the following additional options:
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2944
 *     - append: added to the full generated URL
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2945
 *     - query: query string without initial "?"
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2946
 * Additional options:
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2947
 *  - datacolumn
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2948
 *  - additionalcolumns: additional data to select if you want to use a custom formatting callback
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2949
 *  - formatcallback: a callback or TPL string. If a callback, it will be called with the parameters being the current result row and an
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2950
 *                    array of words in case you want to highlight anything; the callback will be expected to return a string containing
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2951
 *                    a fully formatted and sanitized blob of HTML. If formatcallback is a TPL string, variables will be named after table
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2952
 *                    columns.
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2953
 *  - additionalwhere: additional SQL to inject into WHERE clause, in the format of "AND foo = bar"
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2954
 * @example Working example of adding users to search results:
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2955
 <code>
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2956
  register_search_handler(array(
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2957
      'table' => 'users',
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2958
      'titlecolumn' => 'username',
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2959
      'uniqueid' => 'ns=User;cid={username}',
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2960
      'additionalcolumns' => array('user_id'),
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2961
      'resultnote' => '[Member]',
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2962
      'linkformat' => array(
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2963
          'page_id' => '{username}',
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2964
          'namespace' => 'User'
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2965
        ),
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2966
      'formatcallback' => 'format_user_search_result',
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2967
    ));
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2968
  
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2969
  function format_user_search_result($row)
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2970
  {
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2971
    global $session, $lang;
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2972
    $rankdata = $session->get_user_rank(intval($row['user_id']));
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2973
    $rankspan = '<span style="' . $rankdata['rank_style'] . '">' . $lang->get($rankdata['rank_title']) . '</span>';
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2974
    if ( empty($rankdata['user_title']) )
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2975
    {
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2976
      return $rankspan;
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2977
    }
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2978
    else
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2979
    {
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2980
      return '"' . htmlspecialchars($rankdata['user_title']) . "\" (<b>$rankspan</b>)";
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2981
    }
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2982
  }
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2983
 </code>
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2984
 * @param array Options array - see function documentation
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2985
 * @return null
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2986
 */
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2987
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2988
global $search_handlers;
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2989
$search_handlers = array();
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2990
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2991
function register_search_handler($options)
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2992
{
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2993
  global $search_handlers;
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2994
  
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2995
  $required = array('table', 'titlecolumn', 'uniqueid', 'linkformat');
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2996
  foreach ( $required as $key )
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2997
  {
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2998
    if ( !isset($options[$key]) )
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  2999
    {
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  3000
      throw new Exception("Required search handler option '$key' is missing");
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  3001
    }
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  3002
  }
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  3003
  $search_handlers[] = $options;
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  3004
  return null;
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  3005
}
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  3006
e8cf18383425 Added a new search API that allows much easier registration of search results. Basically you give the engine a table, a few columns to look at, and tell it how to format the results and you're done.
Dan
parents: 741
diff changeset
  3007
/**
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
parents: 76
diff changeset
  3008
 * 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
parents: 76
diff changeset
  3009
 * @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
parents: 76
diff changeset
  3010
 * @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
parents: 76
diff changeset
  3011
 */
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
parents: 76
diff changeset
  3012
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
parents: 76
diff changeset
  3013
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
parents: 76
diff changeset
  3014
{
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
parents: 76
diff changeset
  3015
  $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
parents: 76
diff changeset
  3016
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
parents: 76
diff changeset
  3017
  $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
parents: 76
diff changeset
  3018
  $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
parents: 76
diff changeset
  3019
  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
parents: 76
diff changeset
  3020
  {
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
parents: 76
diff changeset
  3021
    $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
parents: 76
diff changeset
  3022
    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
parents: 76
diff changeset
  3023
    {
1035
d0d617124b29 Fixed decode_unicode_url() trying to parse non-hex %uXXXX sequences
Dan
parents: 1027
diff changeset
  3024
      if ( !preg_match('/^([a-f0-9]{2})+$/', substr($str, $i + 2, 4)) )
d0d617124b29 Fixed decode_unicode_url() trying to parse non-hex %uXXXX sequences
Dan
parents: 1027
diff changeset
  3025
      {
d0d617124b29 Fixed decode_unicode_url() trying to parse non-hex %uXXXX sequences
Dan
parents: 1027
diff changeset
  3026
        $res .= substr($str, $i, 6);
d0d617124b29 Fixed decode_unicode_url() trying to parse non-hex %uXXXX sequences
Dan
parents: 1027
diff changeset
  3027
        $i += 6;
d0d617124b29 Fixed decode_unicode_url() trying to parse non-hex %uXXXX sequences
Dan
parents: 1027
diff changeset
  3028
        continue;
d0d617124b29 Fixed decode_unicode_url() trying to parse non-hex %uXXXX sequences
Dan
parents: 1027
diff changeset
  3029
      }
d0d617124b29 Fixed decode_unicode_url() trying to parse non-hex %uXXXX sequences
Dan
parents: 1027
diff changeset
  3030
      
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
parents: 76
diff changeset
  3031
      $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
parents: 76
diff changeset
  3032
      $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
parents: 76
diff changeset
  3033
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
parents: 76
diff changeset
  3034
      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
parents: 76
diff changeset
  3035
      {
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
parents: 76
diff changeset
  3036
        // 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
parents: 76
diff changeset
  3037
        $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
parents: 76
diff changeset
  3038
      }
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
parents: 76
diff changeset
  3039
      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
parents: 76
diff changeset
  3040
      {
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
parents: 76
diff changeset
  3041
        // 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
parents: 76
diff changeset
  3042
        $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
parents: 76
diff changeset
  3043
            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
parents: 76
diff changeset
  3044
          . 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
parents: 76
diff changeset
  3045
      }
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
parents: 76
diff changeset
  3046
      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
parents: 76
diff changeset
  3047
      {
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
parents: 76
diff changeset
  3048
        // 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
parents: 76
diff changeset
  3049
        $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
parents: 76
diff changeset
  3050
            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
parents: 76
diff changeset
  3051
          . 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
parents: 76
diff changeset
  3052
          . 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
parents: 76
diff changeset
  3053
      }
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
parents: 76
diff changeset
  3054
    }
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
parents: 76
diff changeset
  3055
    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
parents: 76
diff changeset
  3056
    {
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
parents: 76
diff changeset
  3057
      $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
parents: 76
diff changeset
  3058
    }
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
parents: 76
diff changeset
  3059
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
parents: 76
diff changeset
  3060
    $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
parents: 76
diff changeset
  3061
  }
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
parents: 76
diff changeset
  3062
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
parents: 76
diff changeset
  3063
  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
parents: 76
diff changeset
  3064
}
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
parents: 76
diff changeset
  3065
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
parents: 76
diff changeset
  3066
/**
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
parents: 76
diff changeset
  3067
 * 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
parents: 76
diff changeset
  3068
 * @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
parents: 76
diff changeset
  3069
 * @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
parents: 76
diff changeset
  3070
 */
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
parents: 76
diff changeset
  3071
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
parents: 76
diff changeset
  3072
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
parents: 76
diff changeset
  3073
{
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
parents: 76
diff changeset
  3074
  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
parents: 76
diff changeset
  3075
  {
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
parents: 76
diff changeset
  3076
    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
parents: 76
diff changeset
  3077
    {
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
parents: 76
diff changeset
  3078
      $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
parents: 76
diff changeset
  3079
    }
270
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3080
    else if ( is_array($val) )
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
parents: 76
diff changeset
  3081
    {
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
parents: 76
diff changeset
  3082
      $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
parents: 76
diff changeset
  3083
    }
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
parents: 76
diff changeset
  3084
  }
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
parents: 76
diff changeset
  3085
  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
parents: 76
diff changeset
  3086
}
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
parents: 76
diff changeset
  3087
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
parents: 78
diff changeset
  3088
/**
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
parents: 78
diff changeset
  3089
 * 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
parents: 78
diff changeset
  3090
 * @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
parents: 78
diff changeset
  3091
 * @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
parents: 78
diff changeset
  3092
 */
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
parents: 78
diff changeset
  3093
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
parents: 78
diff changeset
  3094
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
parents: 78
diff changeset
  3095
{
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
parents: 78
diff changeset
  3096
  $tag = strtolower($tag);
315
f49e3c8b638c Fixed focus of AJAX login form fields in IE; removed stale/unused call to $template->makeParserText() in paginate_array(); added hook page_create_request to possibly help control creation of pages of certain namespaces from plugins; fixed critical bug in user CP that prevented plugins from adding custom CP modules
Dan
parents: 311
diff changeset
  3097
  $tag = preg_replace('/[^\w @\$%\^&-]+/', '', $tag);
f49e3c8b638c Fixed focus of AJAX login form fields in IE; removed stale/unused call to $template->makeParserText() in paginate_array(); added hook page_create_request to possibly help control creation of pages of certain namespaces from plugins; fixed critical bug in user CP that prevented plugins from adding custom CP modules
Dan
parents: 311
diff changeset
  3098
  $tag = str_replace('_', ' ', $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
parents: 78
diff changeset
  3099
  $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
parents: 78
diff changeset
  3100
  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
parents: 78
diff changeset
  3101
}
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
parents: 78
diff changeset
  3102
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
parents: 78
diff changeset
  3103
/**
610
de33b0d26741 Fixed gzip output - no longer depends on ob_gzhandler(), uses gzencode() now with a failsafe available if gzencode() is not available. Public function gzip_output() remains unchanged.
Dan
parents: 606
diff changeset
  3104
 * Replacement for gzencode() which doesn't always work.
de33b0d26741 Fixed gzip output - no longer depends on ob_gzhandler(), uses gzencode() now with a failsafe available if gzencode() is not available. Public function gzip_output() remains unchanged.
Dan
parents: 606
diff changeset
  3105
 * @param string Data to compress
de33b0d26741 Fixed gzip output - no longer depends on ob_gzhandler(), uses gzencode() now with a failsafe available if gzencode() is not available. Public function gzip_output() remains unchanged.
Dan
parents: 606
diff changeset
  3106
 * @param int Compression level - 0 (no compression) to 9 (maximum compression)
de33b0d26741 Fixed gzip output - no longer depends on ob_gzhandler(), uses gzencode() now with a failsafe available if gzencode() is not available. Public function gzip_output() remains unchanged.
Dan
parents: 606
diff changeset
  3107
 * @param string Filename to encode into the compressed data - defaults to blank
de33b0d26741 Fixed gzip output - no longer depends on ob_gzhandler(), uses gzencode() now with a failsafe available if gzencode() is not available. Public function gzip_output() remains unchanged.
Dan
parents: 606
diff changeset
  3108
 * @param string Comment for archive - defaults to blank
de33b0d26741 Fixed gzip output - no longer depends on ob_gzhandler(), uses gzencode() now with a failsafe available if gzencode() is not available. Public function gzip_output() remains unchanged.
Dan
parents: 606
diff changeset
  3109
 * @return string Compressed data
de33b0d26741 Fixed gzip output - no longer depends on ob_gzhandler(), uses gzencode() now with a failsafe available if gzencode() is not available. Public function gzip_output() remains unchanged.
Dan
parents: 606
diff changeset
  3110
 */
de33b0d26741 Fixed gzip output - no longer depends on ob_gzhandler(), uses gzencode() now with a failsafe available if gzencode() is not available. Public function gzip_output() remains unchanged.
Dan
parents: 606
diff changeset
  3111
667
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
  3112
function enano_gzencode($data = "", $level = 6, $filename = "", $comments = "")
610
de33b0d26741 Fixed gzip output - no longer depends on ob_gzhandler(), uses gzencode() now with a failsafe available if gzencode() is not available. Public function gzip_output() remains unchanged.
Dan
parents: 606
diff changeset
  3113
{
667
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
  3114
  $flags = (empty($comment)? 0 : 16) + (empty($filename)? 0 : 8);
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
  3115
  $mtime = time();
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
  3116
  
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
  3117
  if ( !function_exists('gzdeflate') )
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
  3118
    return false;
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
  3119
 
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
  3120
  return (pack("C1C1C1C1VC1C1", 0x1f, 0x8b, 8, $flags, $mtime, 2, 0xFF) .
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
  3121
          (empty($filename) ? "" : $filename . "\0") .
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
  3122
          (empty($comment) ? "" : $comment . "\0") .
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
  3123
          gzdeflate($data, $level) .
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
  3124
          pack("VV", crc32($data), strlen($data)));
610
de33b0d26741 Fixed gzip output - no longer depends on ob_gzhandler(), uses gzencode() now with a failsafe available if gzencode() is not available. Public function gzip_output() remains unchanged.
Dan
parents: 606
diff changeset
  3125
}
de33b0d26741 Fixed gzip output - no longer depends on ob_gzhandler(), uses gzencode() now with a failsafe available if gzencode() is not available. Public function gzip_output() remains unchanged.
Dan
parents: 606
diff changeset
  3126
798
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3127
$php_errors = array();
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3128
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3129
/**
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3130
 * Enano's PHP error handler.
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3131
 * handler  ( int $errno  , string $errstr  [, string $errfile  [, int $errline  [, array $errcontext  ]]] )
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3132
 * @access private
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3133
 */
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3134
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3135
function enano_handle_error($errno, $errstr, $errfile, $errline)
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3136
{
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3137
  global $db, $session, $paths, $template, $plugins; // Common objects
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3138
  
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3139
  $er = error_reporting();
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3140
  if ( ! $er & $errno || $er == 0 )
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3141
  {
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3142
    return true;
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3143
  }
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3144
  global $do_gzip, $php_errors;
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3145
  
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3146
  if ( defined('ENANO_DEBUG') )
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3147
  {
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3148
    // turn off gzip and echo out error immediately for debug installs
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3149
    $do_gzip = false;
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3150
  }
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3151
  
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3152
  $error_type = 'error';
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3153
  if ( in_array($errno, array(E_WARNING, E_USER_WARNING)) )
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3154
    $error_type = 'warning';
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3155
  else if ( in_array($errno, array(E_NOTICE, E_USER_NOTICE)) )
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3156
    $error_type = 'notice';
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3157
  
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3158
  if ( @is_object(@$plugins) )
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3159
  {
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3160
    $code = $plugins->setHook('php_error');
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3161
    foreach ( $code as $cmd )
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3162
    {
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3163
      eval($cmd);
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3164
    }
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3165
  }
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3166
  
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3167
  // bypass errors in date() and mktime() (Enano has its own code for this anyway)
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3168
  if ( strstr($errstr, "It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier.") )
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3169
  {
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3170
    return true;
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3171
  }
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3172
  
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3173
  if ( $do_gzip )
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3174
  {
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3175
    $php_errors[] = array(
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3176
        'num' => $errno,
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3177
        'type' => $error_type,
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3178
        'error' => $errstr,
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3179
        'file' => $errfile,
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3180
        'line' => $errline
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3181
      );
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3182
  }
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3183
  else
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3184
  {
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3185
    echo "[ <b>PHP $error_type:</b> $errstr in <b>$errfile</b>:<b>$errline</b> ]<br />";
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3186
  }
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3187
}
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3188
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3189
set_error_handler('enano_handle_error');
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3190
610
de33b0d26741 Fixed gzip output - no longer depends on ob_gzhandler(), uses gzencode() now with a failsafe available if gzencode() is not available. Public function gzip_output() remains unchanged.
Dan
parents: 606
diff changeset
  3191
/**
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
parents: 78
diff changeset
  3192
 * 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
parents: 78
diff changeset
  3193
 */
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
parents: 78
diff changeset
  3194
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
parents: 78
diff changeset
  3195
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
parents: 78
diff changeset
  3196
{
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
parents: 78
diff changeset
  3197
  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
parents: 78
diff changeset
  3198
  
1110
1a3f374310ca Damn it! gzip_output() was not checking for gzip support in the browser, fixed.
Dan
parents: 1099
diff changeset
  3199
  $gzip_supported = false;
1a3f374310ca Damn it! gzip_output() was not checking for gzip support in the browser, fixed.
Dan
parents: 1099
diff changeset
  3200
  if ( isset($_SERVER['HTTP_ACCEPT_ENCODING']) )
1a3f374310ca Damn it! gzip_output() was not checking for gzip support in the browser, fixed.
Dan
parents: 1099
diff changeset
  3201
  {
1a3f374310ca Damn it! gzip_output() was not checking for gzip support in the browser, fixed.
Dan
parents: 1099
diff changeset
  3202
    $encodings = explode(',', $_SERVER['HTTP_ACCEPT_ENCODING']);
1a3f374310ca Damn it! gzip_output() was not checking for gzip support in the browser, fixed.
Dan
parents: 1099
diff changeset
  3203
    $gzip_supported = in_array('gzip', $encodings) || in_array('deflate', $encodings);
1a3f374310ca Damn it! gzip_output() was not checking for gzip support in the browser, fixed.
Dan
parents: 1099
diff changeset
  3204
  }
1a3f374310ca Damn it! gzip_output() was not checking for gzip support in the browser, fixed.
Dan
parents: 1099
diff changeset
  3205
  
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
parents: 78
diff changeset
  3206
  //
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
parents: 78
diff changeset
  3207
  // Compress buffered output if required and send to browser
667
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
  3208
  // Sorry, doesn't work in IE. What else is new?
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
parents: 78
diff changeset
  3209
  //
1110
1a3f374310ca Damn it! gzip_output() was not checking for gzip support in the browser, fixed.
Dan
parents: 1099
diff changeset
  3210
  if ( $do_gzip && function_exists('gzdeflate') && !strstr($_SERVER['HTTP_USER_AGENT'], 'MSIE') && !headers_sent() && $gzip_supported )
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
parents: 78
diff changeset
  3211
  {
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
parents: 78
diff changeset
  3212
    $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
parents: 78
diff changeset
  3213
    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
parents: 78
diff changeset
  3214
    
798
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3215
    global $php_errors;
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3216
    if ( !empty($php_errors) )
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3217
    {
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3218
      $errors = '';
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3219
      foreach ( $php_errors as $error )
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3220
      {
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3221
        $errors .= "[ <b>PHP {$error['type']}:</b> {$error['error']} in <b>{$error['file']}</b>:<b>{$error['line']}</b> ]<br />";
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3222
      }
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3223
      $gzip_contents = str_replace("</body>", "$errors</body>", $gzip_contents);
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3224
    }
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3225
    
667
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
  3226
    $return = @enano_gzencode($gzip_contents);
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
parents: 80
diff changeset
  3227
    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
parents: 80
diff changeset
  3228
    {
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
parents: 80
diff changeset
  3229
      header('Content-encoding: gzip');
542
5841df0ab575 Added ETag support and increased caching settings to try and speed the system up. Result of a YSlow audit.
Dan
parents: 541
diff changeset
  3230
      echo $return;
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
parents: 80
diff changeset
  3231
    }
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
parents: 80
diff changeset
  3232
    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
parents: 80
diff changeset
  3233
    {
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
parents: 80
diff changeset
  3234
      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
parents: 80
diff changeset
  3235
    }
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
parents: 78
diff changeset
  3236
  }
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
parents: 78
diff changeset
  3237
}
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
parents: 78
diff changeset
  3238
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
parents: 78
diff changeset
  3239
/**
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
parents: 78
diff changeset
  3240
 * 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
parents: 78
diff changeset
  3241
 * @param string HTML to process
294
4ab30e8dd168 Nothing special. ksort()ing list of allowed filetypes in the admin panel to make editing the list marginally easier
Dan
parents: 276
diff changeset
  3242
 * @return string much smaller 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
parents: 78
diff changeset
  3243
 */
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
parents: 78
diff changeset
  3244
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
parents: 78
diff changeset
  3245
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
parents: 78
diff changeset
  3246
{
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
parents: 78
diff changeset
  3247
  $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
parents: 78
diff changeset
  3248
  
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
parents: 78
diff changeset
  3249
  // 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
parents: 78
diff changeset
  3250
  $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
parents: 78
diff changeset
  3251
  
125
fb31c951d3a2 Fixed some rather major bugs in the registration system, this will need a release followup
Dan
parents: 112
diff changeset
  3252
  // Which tags to strip for JAVASCRIPT PROCESSING ONLY - you can change this if needed
fb31c951d3a2 Fixed some rather major bugs in the registration system, this will need a release followup
Dan
parents: 112
diff changeset
  3253
  $strip_tags = Array('enano:no-opt');
fb31c951d3a2 Fixed some rather major bugs in the registration system, this will need a release followup
Dan
parents: 112
diff changeset
  3254
  $strip_tags = implode('|', $strip_tags);
fb31c951d3a2 Fixed some rather major bugs in the registration system, this will need a release followup
Dan
parents: 112
diff changeset
  3255
  
fb31c951d3a2 Fixed some rather major bugs in the registration system, this will need a release followup
Dan
parents: 112
diff changeset
  3256
  // Strip out the tags and replace with placeholders
183
91127e62f38f Fixed some regular expressions in HTML optimization algorithm; regex page groups can be edited now (oops)
Dan
parents: 174
diff changeset
  3257
  preg_match_all("#<($strip_tags)([ ]+.*?)?>(.*?)</($strip_tags)>#is", $html, $matches);
125
fb31c951d3a2 Fixed some rather major bugs in the registration system, this will need a release followup
Dan
parents: 112
diff changeset
  3258
  $seed = md5(microtime() . mt_rand()); // Random value used for placeholders
fb31c951d3a2 Fixed some rather major bugs in the registration system, this will need a release followup
Dan
parents: 112
diff changeset
  3259
  for ($i = 0;$i < sizeof($matches[1]); $i++)
fb31c951d3a2 Fixed some rather major bugs in the registration system, this will need a release followup
Dan
parents: 112
diff changeset
  3260
  {
fb31c951d3a2 Fixed some rather major bugs in the registration system, this will need a release followup
Dan
parents: 112
diff changeset
  3261
    $html = str_replace($matches[0][$i], "{DONT_STRIP_ME_NAKED:$seed:$i}", $html);
fb31c951d3a2 Fixed some rather major bugs in the registration system, this will need a release followup
Dan
parents: 112
diff changeset
  3262
  }
fb31c951d3a2 Fixed some rather major bugs in the registration system, this will need a release followup
Dan
parents: 112
diff changeset
  3263
  
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
parents: 78
diff changeset
  3264
  // Optimize (but don't obfuscate) Javascript
184
d74ff822acc9 Replaced autocompleting username with a much more efficient algorithm and caching system
Dan
parents: 183
diff changeset
  3265
  preg_match_all('/<script([ ]+.*?)?>(.*?)(\]\]>)?<\/script>/is', $html, $jscript);
562
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
  3266
  require_once(ENANO_ROOT . '/includes/js-compressor.php');
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
  3267
  $jsc = new JavascriptCompressor();
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
parents: 78
diff changeset
  3268
  
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
parents: 78
diff changeset
  3269
  // 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
parents: 78
diff changeset
  3270
  $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
parents: 78
diff changeset
  3271
                          '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
parents: 78
diff changeset
  3272
                          '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
parents: 78
diff changeset
  3273
                          '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
parents: 78
diff changeset
  3274
                          '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
parents: 78
diff changeset
  3275
  
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
parents: 78
diff changeset
  3276
  $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
parents: 78
diff changeset
  3277
  
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
parents: 78
diff changeset
  3278
  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
parents: 78
diff changeset
  3279
  {
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
parents: 78
diff changeset
  3280
    $js =& $jscript[2][$i];
582
a38876c0793c Majorly reworked Javascript runtime stuff to use on-demand loading.
Dan
parents: 581
diff changeset
  3281
    if ( empty($js) )
a38876c0793c Majorly reworked Javascript runtime stuff to use on-demand loading.
Dan
parents: 581
diff changeset
  3282
      continue;
183
91127e62f38f Fixed some regular expressions in HTML optimization algorithm; regex page groups can be edited now (oops)
Dan
parents: 174
diff changeset
  3283
    
562
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
  3284
    $js = $jsc->getClean($js);
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
parents: 78
diff changeset
  3285
    
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
parents: 80
diff changeset
  3286
    $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
parents: 78
diff changeset
  3287
    // 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
parents: 80
diff changeset
  3288
    $html = str_replace($jscript[0][$i], $replacement, $html);
562
75df0b2c596c Got initial CSRF token framework implemented and sample implementation added in Special:Logout; removing Javascript compression engine from aggressive_optimize_html() and instead calling JavascriptCompressor class from js-compressor.php
Dan
parents: 556
diff changeset
  3289
     
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
parents: 78
diff changeset
  3290
  }
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
parents: 78
diff changeset
  3291
  
125
fb31c951d3a2 Fixed some rather major bugs in the registration system, this will need a release followup
Dan
parents: 112
diff changeset
  3292
  // Re-insert untouchable tags
fb31c951d3a2 Fixed some rather major bugs in the registration system, this will need a release followup
Dan
parents: 112
diff changeset
  3293
  for ($i = 0;$i < sizeof($matches[1]); $i++)
fb31c951d3a2 Fixed some rather major bugs in the registration system, this will need a release followup
Dan
parents: 112
diff changeset
  3294
  {
fb31c951d3a2 Fixed some rather major bugs in the registration system, this will need a release followup
Dan
parents: 112
diff changeset
  3295
    $html = str_replace("{DONT_STRIP_ME_NAKED:$seed:$i}", "<{$matches[1][$i]}{$matches[2][$i]}>{$matches[3][$i]}</{$matches[4][$i]}>", $html);
fb31c951d3a2 Fixed some rather major bugs in the registration system, this will need a release followup
Dan
parents: 112
diff changeset
  3296
  }
fb31c951d3a2 Fixed some rather major bugs in the registration system, this will need a release followup
Dan
parents: 112
diff changeset
  3297
  
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
parents: 78
diff changeset
  3298
  // Which tags to strip - you can change this if needed
137
3bce0c320e80 Fix: textarea tags got stripped naked by the HTML optimizer, now no longer
Dan
parents: 132
diff changeset
  3299
  $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
parents: 78
diff changeset
  3300
  $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
parents: 78
diff changeset
  3301
  
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
parents: 78
diff changeset
  3302
  // 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
parents: 78
diff changeset
  3303
  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
parents: 78
diff changeset
  3304
  $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
parents: 78
diff changeset
  3305
  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
parents: 78
diff changeset
  3306
  {
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
parents: 78
diff changeset
  3307
    $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
parents: 78
diff changeset
  3308
  }
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
parents: 78
diff changeset
  3309
  
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
parents: 78
diff changeset
  3310
  // 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
parents: 78
diff changeset
  3311
  $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
parents: 78
diff changeset
  3312
  
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
parents: 78
diff changeset
  3313
  // 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
parents: 78
diff changeset
  3314
  $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
parents: 78
diff changeset
  3315
  
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
parents: 78
diff changeset
  3316
  // 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
parents: 78
diff changeset
  3317
  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
parents: 78
diff changeset
  3318
  {
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
parents: 78
diff changeset
  3319
    $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
parents: 78
diff changeset
  3320
  }
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
parents: 78
diff changeset
  3321
  
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
parents: 78
diff changeset
  3322
  // 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
parents: 78
diff changeset
  3323
  $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
parents: 78
diff changeset
  3324
  
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
parents: 78
diff changeset
  3325
  $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
parents: 78
diff changeset
  3326
  
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
parents: 78
diff changeset
  3327
  // 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
parents: 80
diff changeset
  3328
  $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
parents: 78
diff changeset
  3329
     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
parents: 78
diff changeset
  3330
     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
parents: 78
diff changeset
  3331
     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
parents: 80
diff changeset
  3332
     -->\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
parents: 78
diff changeset
  3333
  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
parents: 78
diff changeset
  3334
}
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
parents: 78
diff changeset
  3335
128
01955bf53f96 Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
parents: 125
diff changeset
  3336
/**
01955bf53f96 Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
parents: 125
diff changeset
  3337
 * 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
parents: 125
diff changeset
  3338
 * @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
parents: 125
diff changeset
  3339
 * @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
parents: 125
diff changeset
  3340
 */
01955bf53f96 Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
parents: 125
diff changeset
  3341
01955bf53f96 Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
parents: 125
diff changeset
  3342
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
parents: 125
diff changeset
  3343
{
01955bf53f96 Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
parents: 125
diff changeset
  3344
  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
parents: 125
diff changeset
  3345
    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
parents: 125
diff changeset
  3346
  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
parents: 125
diff changeset
  3347
    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
parents: 125
diff changeset
  3348
  $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
parents: 125
diff changeset
  3349
  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
parents: 125
diff changeset
  3350
    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
parents: 125
diff changeset
  3351
  $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
parents: 125
diff changeset
  3352
  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
parents: 125
diff changeset
  3353
    $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
parents: 125
diff changeset
  3354
  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
parents: 125
diff changeset
  3355
    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
parents: 125
diff changeset
  3356
  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
parents: 125
diff changeset
  3357
  {
01955bf53f96 Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
parents: 125
diff changeset
  3358
    $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
parents: 125
diff changeset
  3359
  }
01955bf53f96 Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
parents: 125
diff changeset
  3360
  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
parents: 125
diff changeset
  3361
}
01955bf53f96 Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
parents: 125
diff changeset
  3362
01955bf53f96 Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
parents: 125
diff changeset
  3363
/**
01955bf53f96 Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
parents: 125
diff changeset
  3364
 * 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
parents: 125
diff changeset
  3365
 * 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
parents: 125
diff changeset
  3366
 * @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
parents: 125
diff changeset
  3367
 * @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
parents: 125
diff changeset
  3368
 */
01955bf53f96 Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
parents: 125
diff changeset
  3369
01955bf53f96 Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
parents: 125
diff changeset
  3370
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
parents: 125
diff changeset
  3371
{
01955bf53f96 Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
parents: 125
diff changeset
  3372
  $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
parents: 125
diff changeset
  3373
  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
parents: 125
diff changeset
  3374
    // 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
parents: 125
diff changeset
  3375
    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
parents: 125
diff changeset
  3376
  $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
parents: 125
diff changeset
  3377
  $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
parents: 125
diff changeset
  3378
  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
parents: 125
diff changeset
  3379
  {
01955bf53f96 Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
parents: 125
diff changeset
  3380
    $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
parents: 125
diff changeset
  3381
    $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
parents: 125
diff changeset
  3382
    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
parents: 125
diff changeset
  3383
    {
01955bf53f96 Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
parents: 125
diff changeset
  3384
      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
parents: 125
diff changeset
  3385
      {
01955bf53f96 Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
parents: 125
diff changeset
  3386
        $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
parents: 125
diff changeset
  3387
        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
parents: 125
diff changeset
  3388
          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
parents: 125
diff changeset
  3389
        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
parents: 125
diff changeset
  3390
          $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
parents: 125
diff changeset
  3391
        else
01955bf53f96 Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
parents: 125
diff changeset
  3392
          $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
parents: 125
diff changeset
  3393
      }
01955bf53f96 Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
parents: 125
diff changeset
  3394
      else
01955bf53f96 Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
parents: 125
diff changeset
  3395
      {
01955bf53f96 Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
parents: 125
diff changeset
  3396
        $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
parents: 125
diff changeset
  3397
        $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
parents: 125
diff changeset
  3398
      }
01955bf53f96 Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
parents: 125
diff changeset
  3399
    }
01955bf53f96 Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
parents: 125
diff changeset
  3400
    $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
parents: 125
diff changeset
  3401
    $i++;
01955bf53f96 Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
parents: 125
diff changeset
  3402
  }
01955bf53f96 Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
parents: 125
diff changeset
  3403
  $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
parents: 125
diff changeset
  3404
  
01955bf53f96 Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
parents: 125
diff changeset
  3405
  // 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
parents: 125
diff changeset
  3406
  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
parents: 125
diff changeset
  3407
    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
parents: 125
diff changeset
  3408
      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
parents: 125
diff changeset
  3409
        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
parents: 125
diff changeset
  3410
          $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
parents: 125
diff changeset
  3411
        
01955bf53f96 Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
parents: 125
diff changeset
  3412
  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
parents: 125
diff changeset
  3413
}
01955bf53f96 Improved ban control page and allowed multiple entries/IP ranges; changed some parameters on jBox; user level changes are logged now
Dan
parents: 125
diff changeset
  3414
270
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3415
/**
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3416
 * Parses a valid IP address range into a regular expression.
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3417
 * @param string IP range string
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3418
 * @return string
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3419
 */
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3420
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3421
function parse_ip_range_regex($range)
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3422
{
766
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3423
  if ( strstr($range, ':') )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3424
  {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3425
    return parse_ipv6_range_regex($range);
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3426
  }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3427
  else
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3428
  {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3429
    return parse_ipv4_range_regex($range);
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3430
  }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3431
}
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3432
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3433
/**
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3434
 * Parses a valid IPv4 address range into a regular expression.
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3435
 * @param string IP range string
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3436
 * @return string
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3437
 */
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3438
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3439
function parse_ipv4_range_regex($range)
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3440
{
270
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3441
  // Regular expression to test the range string for validity
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3442
  $regex = '/^(([0-9]+(-[0-9]+)?)(\|([0-9]+(-[0-9]+)?))*)\.'
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3443
           . '(([0-9]+(-[0-9]+)?)(\|([0-9]+(-[0-9]+)?))*)\.'
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3444
           . '(([0-9]+(-[0-9]+)?)(\|([0-9]+(-[0-9]+)?))*)\.'
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3445
           . '(([0-9]+(-[0-9]+)?)(\|([0-9]+(-[0-9]+)?))*)$/';
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3446
  if ( !preg_match($regex, $range) )
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3447
  {
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3448
    return false;
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3449
  }
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3450
  $octets = array(0 => array(), 1 => array(), 2 => array(), 3 => array());
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3451
  list($octets[0], $octets[1], $octets[2], $octets[3]) = explode('.', $range);
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3452
  $return = '^';
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3453
  foreach ( $octets as $octet )
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3454
  {
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3455
    // alternatives array
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3456
    $alts = array();
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3457
    if ( strpos($octet, '|') )
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3458
    {
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3459
      $particles = explode('|', $octet);
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3460
    }
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3461
    else
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3462
    {
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3463
      $particles = array($octet);
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3464
    }
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3465
    foreach ( $particles as $atom )
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3466
    {
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3467
      // each $atom will be either
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3468
      if ( strval(intval($atom)) == $atom )
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3469
      {
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3470
        $alts[] = $atom;
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3471
        continue;
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3472
      }
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3473
      else
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3474
      {
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3475
        // it's a range - parse it out
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3476
        $alt2 = int_range($atom);
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3477
        if ( !$alt2 )
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3478
          return false;
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3479
        foreach ( $alt2 as $neutrino )
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3480
          $alts[] = $neutrino;
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3481
      }
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3482
    }
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3483
    $alts = array_unique($alts);
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3484
    $alts = '|' . implode('|', $alts) . '|';
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3485
    // we can further optimize/compress this by weaseling our way into using some character ranges
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3486
    for ( $i = 1; $i <= 25; $i++ )
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3487
    {
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3488
      $alts = str_replace("|{$i}0|{$i}1|{$i}2|{$i}3|{$i}4|{$i}5|{$i}6|{$i}7|{$i}8|{$i}9|", "|{$i}[0-9]|", $alts);
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3489
    }
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3490
    $alts = str_replace("|1|2|3|4|5|6|7|8|9|", "|[1-9]|", $alts);
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3491
    $alts = '(' . substr($alts, 1, -1) . ')';
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3492
    $return .= $alts . '\.';
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3493
  }
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3494
  $return = substr($return, 0, -2);
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3495
  $return .= '$';
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3496
  return $return;
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3497
}
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3498
504
bc8e0e9ee01d Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
parents: 500
diff changeset
  3499
/**
766
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3500
 * Parses a valid IPv6 address range into a regular expression.
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3501
 * @param string IP range string
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3502
 * @return string
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3503
 */
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3504
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3505
function parse_ipv6_range_regex($range)
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3506
{
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3507
  $range = strtolower(trim($range));
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3508
  $valid = '/^';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3509
  $valid .= '(?:[0-9a-f]{0,4}|[0-9a-f]{1,4}-[0-9a-f]{1,4}):';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3510
  $valid .= '(?:[0-9a-f]{0,4}|[0-9a-f]{1,4}-[0-9a-f]{1,4}):';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3511
  $valid .= '(?:[0-9a-f]{0,4}|[0-9a-f]{1,4}-[0-9a-f]{1,4}:|:)?';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3512
  $valid .= '(?:[0-9a-f]{0,4}|[0-9a-f]{1,4}-[0-9a-f]{1,4}:|:)?';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3513
  $valid .= '(?:[0-9a-f]{0,4}|[0-9a-f]{1,4}-[0-9a-f]{1,4}:|:)?';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3514
  $valid .= '(?:[0-9a-f]{0,4}|[0-9a-f]{1,4}-[0-9a-f]{1,4}:|:)?';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3515
  $valid .= '(?:[0-9a-f]{0,4}|[0-9a-f]{1,4}-[0-9a-f]{1,4}:|:)?';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3516
  $valid .= '(?:[0-9a-f]{0,4}|[0-9a-f]{1,4}-[0-9a-f]{1,4})$/';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3517
  if ( !preg_match($valid, $range) )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3518
    return false;
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3519
  
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3520
  // expand address range.
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3521
  // this takes short ranges like:
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3522
  //   2001:470-471:054-b02b::5-bb
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3523
  // up to:
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3524
  //   2001:0470-0471:0054-b02b:0000:0000:0000:0005-00bb
1099
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
  3525
  $range = preg_replace('/^:/', '0000:', $range);
766
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3526
  $range = explode(':', $range);
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3527
  $expanded = '';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3528
  $size = count($range);
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3529
  foreach ( $range as $byteset )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3530
  {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3531
    if ( empty($byteset) )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3532
    {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3533
      // ::
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3534
      while ( $size < 9 )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3535
      {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3536
        $expanded .= '0000:';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3537
        $size++;
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3538
      }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3539
    }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3540
    else
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3541
    {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3542
      if ( strstr($byteset, '-') ) 
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3543
      {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3544
        // this is a range
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3545
        $sides = explode('-', $byteset);
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3546
        foreach ( $sides as &$bytepair )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3547
        {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3548
          while ( strlen($bytepair) < 4 )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3549
          {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3550
            $bytepair = "0$bytepair";
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3551
          }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3552
        }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3553
        $byteset = implode('-', $sides);
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3554
      }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3555
      else
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3556
      {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3557
        while ( strlen($byteset) < 4 )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3558
        {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3559
          $byteset = "0$byteset";
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3560
        }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3561
      }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3562
      $expanded .= "$byteset:";
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3563
    }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3564
  }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3565
  $expanded = explode(':', rtrim($expanded, ':'));
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3566
  
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3567
  // ready to dive in and start generating range regexes.
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3568
  // this has to be pretty optimized... we want to end up with regexes like:
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3569
  // range: 54-b12b
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3570
  /*
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3571
  /005[4-9a-f]|
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3572
  00[6-9a-f][0-9a-f]|
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3573
  0[1-9a-f][0-9a-f][0-9a-f]|
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3574
  [1-9a][0-9a-f][0-9a-f][0-9a-f]|
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3575
  b[0-0][0-1][0-9a-f]|
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3576
  b0[0-1][0-9a-f]|
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3577
  b02[0-9a-b]/x
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3578
  */
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3579
  foreach ( $expanded as &$word )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3580
  {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3581
    if ( strstr($word, '-') )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3582
    {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3583
      // oh... damn.
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3584
      $word = '(?:' . generate_hex_numeral_range($word) . ')';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3585
    }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3586
  }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3587
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3588
  // return print_r($expanded, true);  
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3589
  return '^' . implode(':', $expanded) . '$';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3590
}
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3591
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3592
/**
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3593
 * Take a hex numeral range and parse it in to a PCRE.
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3594
 * @param string
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3595
 * @return string
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3596
 * @access private
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3597
 */
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3598
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3599
function generate_hex_numeral_range($word)
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3600
{
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3601
  list($low, $high) = explode('-', $word);
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3602
  
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3603
  if ( hexdec($low) > hexdec($high) )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3604
  {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3605
    $_ = $low;
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3606
    $low = $high;
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3607
    $high = $_;
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3608
    unset($_);
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3609
  }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3610
  
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3611
  while ( strlen($low) < strlen($high) )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3612
  {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3613
    $low = "0$low";
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3614
  }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3615
  
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3616
  // trim off everything that's the same
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3617
  $trimmed = '';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3618
  $len = strlen($low);
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3619
  for ( $i = 0; $i < $len; $i++ )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3620
  {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3621
    if ( $low{0} === $high{0} )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3622
    {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3623
      $trimmed .= $low{0};
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3624
      $low = substr($low, 1);
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3625
      $high = substr($high, 1);
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3626
    }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3627
    else
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3628
    {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3629
      break;
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3630
    }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3631
  }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3632
  
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3633
  $len = strlen($high);
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3634
  if ( $len == 1 )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3635
  {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3636
    // this does happen sometimes, so we can save a bit of CPU power here.
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3637
    return $trimmed . __hexdigitrange($low, $high);
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3638
  }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3639
    
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3640
  $return = '';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3641
  // lower half
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3642
  for ( $i = $len - 1; $i > 0; $i-- )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3643
  {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3644
    if ( $low{$i} == 'f' )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3645
      continue;
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3646
    $return .= $trimmed;
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3647
    for ( $j = 0; $j < $len; $j++ )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3648
    {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3649
      if ( $j < $i )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3650
      {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3651
        $return .= $low{$j};
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3652
      }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3653
      else if ( $j == $i && ( $i == $len - 1 || $low{$j} == 'f' ) )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3654
      {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3655
        $return .= __hexdigitrange($low{$j}, 'f');
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3656
      }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3657
      else if ( $j == $i && $i != $len - 1 )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3658
      {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3659
        $return .= __hexdigitrange(dechex(hexdec($low{$j}) + 1), 'f');
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3660
      }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3661
      else
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3662
      {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3663
        $return .= __hexdigitrange('0', 'f');
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3664
      }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3665
    }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3666
    $return .= '|';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3667
  }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3668
  // middle block
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3669
  if ( hexdec($low{0}) + 1 < hexdec($high{0}) )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3670
  {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3671
    if ( hexdec($low{0}) + 1 < hexdec($high{0}) - 1 )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3672
      $return .= $trimmed . __hexdigitrange(dechex(hexdec($low{0}) + 1), dechex(hexdec($high{0}) - 1));
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3673
    else
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3674
      $return .= $trimmed . __hexdigitrange($low{0}, $high{0});
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3675
    if ( $len - 1 > 0 )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3676
      $return .= '[0-9a-f]{' . ( $len - 1 ) . '}|';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3677
  }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3678
  // higher half
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3679
  for ( $i = 1; $i < $len; $i++ )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3680
  {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3681
    if ( $high{$i} == '0' )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3682
      continue;
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3683
    $return .= $trimmed;
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3684
    for ( $j = 0; $j < $len; $j++ )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3685
    {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3686
      if ( $j < $i )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3687
      {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3688
        $return .= $high{$j};
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3689
      }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3690
      else if ( $j == $i && ( $i == $len - 1 || $high{$j} == '0' ) )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3691
      {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3692
        $return .= __hexdigitrange('0', $high{$j});
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3693
      }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3694
      else if ( $j == $i && $i != $len - 1 )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3695
      {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3696
        $return .= __hexdigitrange('0', dechex(hexdec($high{$j}) - 1));
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3697
      }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3698
      else if ( $j > $i )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3699
      {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3700
        $return .= __hexdigitrange('0', 'f');
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3701
      }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3702
      else
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3703
      {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3704
        die("I don't know what to do! i $i j $j");
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3705
      }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3706
    }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3707
    $return .= '|';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3708
  }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3709
  
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3710
  return rtrim($return, '|');
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3711
}
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3712
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3713
function __hexdigitrange($low, $high)
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3714
{
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3715
  if ( $low == $high )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3716
    return $low;
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3717
  if ( empty($low) )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3718
    $low = '0';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3719
  
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3720
  $low_type = ( preg_match('/[0-9]/', $low) ) ? 'num' : 'alph';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3721
  $high_type = ( preg_match('/[0-9]/', $high) ) ? 'num' : 'alph';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3722
  if ( ( $low_type == 'num' && $high_type == 'num') || ( $low_type == 'alph' && $high_type == 'alph' ) )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3723
  {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3724
    return "[$low-$high]";
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3725
  }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3726
  else if ( $low_type == 'num' && $high_type == 'alph' )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3727
  {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3728
    $ret = '[';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3729
    
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3730
    if ( $low == '9' )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3731
      $ret .= '9';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3732
    else
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3733
      $ret .= "$low-9";
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3734
    if ( $high == 'a' )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3735
      $ret .= 'a';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3736
    else
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3737
      $ret .= "a-$high";
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3738
      
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3739
    $ret .= "]";
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3740
    return $ret;
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3741
  }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3742
  else if ( $low_type == 'alph' && $high_type == 'num' )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3743
  {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3744
    // ???? this should never happen
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3745
    return __hexdigitrange($high, $low); 
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3746
  }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3747
}
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3748
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3749
/**
1099
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
  3750
 * Expand an IPv6 address to full form
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
  3751
 * @param string ::1, 2001:470:e054::2
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
  3752
 * @return string 0000:0000:0000:0000:0000:0000:0000:0001, 2001:0470:e054:0000:0000:0000:0000:0002
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
  3753
 */
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
  3754
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
  3755
function expand_ipv6_address($addr)
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
  3756
{
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
  3757
  $expanded = array();
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
  3758
  $addr = explode(':', $addr);
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
  3759
  foreach ( $addr as $i => $bytepair )
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
  3760
  {
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
  3761
    if ( empty($bytepair) )
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
  3762
    {
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
  3763
      // ::
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
  3764
      while ( count($expanded) < (8 - count($addr) + $i + 1) )
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
  3765
      {
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
  3766
        $expanded[] = '0000';
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
  3767
      }
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
  3768
    }
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
  3769
    else
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
  3770
    {
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
  3771
      while ( strlen($bytepair) < 4 )
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
  3772
        $bytepair = "0$bytepair";
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
  3773
      $expanded[] = $bytepair;
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
  3774
    }
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
  3775
  }
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
  3776
  return implode(':', $expanded);
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
  3777
}
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
  3778
73abd46f5148 A bit of shuffling around code related to determining the page title from the URL. It's done in common now, and $paths becomes more of an information repository rather than an information gatherer. Note: This BREAKS $paths->fullpage/$paths->getParam() in *_preloader!
Dan
parents: 1092
diff changeset
  3779
/**
504
bc8e0e9ee01d Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
parents: 500
diff changeset
  3780
 * Validates an e-mail address. Uses a compacted version of the regular expression generated by the scripts at <http://examples.oreilly.com/regex/>.
bc8e0e9ee01d Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
parents: 500
diff changeset
  3781
 * @param string E-mail address
bc8e0e9ee01d Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
parents: 500
diff changeset
  3782
 * @return bool
bc8e0e9ee01d Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
parents: 500
diff changeset
  3783
 */
bc8e0e9ee01d Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
parents: 500
diff changeset
  3784
bc8e0e9ee01d Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
parents: 500
diff changeset
  3785
function check_email_address($email)
bc8e0e9ee01d Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
parents: 500
diff changeset
  3786
{
bc8e0e9ee01d Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
parents: 500
diff changeset
  3787
  static $regexp = '(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|"[^\\\x80-\xff\n\015"]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015"]*)*")[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:\.[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|"[^\\\x80-\xff\n\015"]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015"]*)*")[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*)*@[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:\.[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*)*|(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|"[^\\\x80-\xff\n\015"]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015"]*)*")[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037]*(?:(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)|"[^\\\x80-\xff\n\015"]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015"]*)*")[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037]*)*<[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:@[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:\.[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*)*(?:,[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*@[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:\.[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*)*)*:[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*)?(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|"[^\\\x80-\xff\n\015"]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015"]*)*")[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:\.[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|"[^\\\x80-\xff\n\015"]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015"]*)*")[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*)*@[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:\.[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*)*>)';
bc8e0e9ee01d Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
parents: 500
diff changeset
  3788
  return ( preg_match("/^$regexp$/", $email) ) ? true : false;
bc8e0e9ee01d Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
parents: 500
diff changeset
  3789
}
bc8e0e9ee01d Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
parents: 500
diff changeset
  3790
132
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3791
function password_score_len($password)
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3792
{
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3793
  if ( !is_string($password) )
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3794
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3795
    return -10;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3796
  }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3797
  $len = strlen($password);
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3798
  $score = $len - 7;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3799
  return $score;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3800
}
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3801
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3802
/**
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3803
 * 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
parents: 129
diff changeset
  3804
 * 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
parents: 129
diff changeset
  3805
 * 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
parents: 129
diff changeset
  3806
 * @param string Password to test
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3807
 * @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
parents: 129
diff changeset
  3808
 * @return int
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3809
 */
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3810
472
bc4b58034f4d Implemented password reset (albeit hackishly) into the new login API; added dummy window.console object to hopefully reduce errors when Firebug isn't around; fixed the longstanding ACL dismiss/close button bug; fixed a couple undefined variables in mailer; fixed PHP error on attempted opening of /dev/(u)random in rijndael.php; clarified documentation for PageProcessor::update_page(); fixed some logic problems in theme ACL code; disabled CAPTCHA debug
Dan
parents: 468
diff changeset
  3811
function password_score($password, &$debug = false)
132
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3812
{
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3813
  if ( !is_string($password) )
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3814
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3815
    return -10;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3816
  }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3817
  $score = 0;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3818
  $debug = array();
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3819
  // length check
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3820
  $lenscore = password_score_len($password);
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3821
  
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3822
  $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
parents: 129
diff changeset
  3823
  
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3824
  $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
parents: 129
diff changeset
  3825
  
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3826
  $score += $lenscore;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3827
    
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3828
  $has_upper_lower = false;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3829
  $has_symbols     = false;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3830
  $has_numbers     = false;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3831
  
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3832
  // contains uppercase and lowercase
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3833
  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
parents: 129
diff changeset
  3834
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3835
    $score += 1;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3836
    $has_upper_lower = true;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3837
    $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
parents: 129
diff changeset
  3838
  }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3839
  
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3840
  // contains symbols
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3841
  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
parents: 129
diff changeset
  3842
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3843
    $score += 1;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3844
    $has_symbols = true;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3845
    $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
parents: 129
diff changeset
  3846
  }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3847
  
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3848
  // contains numbers
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3849
  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
parents: 129
diff changeset
  3850
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3851
    $score += 1;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3852
    $has_numbers = true;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3853
    $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
parents: 129
diff changeset
  3854
  }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3855
  
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3856
  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
parents: 129
diff changeset
  3857
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3858
    // 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
parents: 129
diff changeset
  3859
    $score += 4;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3860
    $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
parents: 129
diff changeset
  3861
  }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3862
  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
parents: 129
diff changeset
  3863
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3864
    // 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
parents: 129
diff changeset
  3865
    $score += 2;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3866
    $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
parents: 129
diff changeset
  3867
  }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3868
  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
parents: 129
diff changeset
  3869
            ( $has_upper_lower && $has_numbers ) ||
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3870
            ( $has_symbols && $has_numbers ) )
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3871
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3872
    // 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
parents: 129
diff changeset
  3873
    $score += 1;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3874
    $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
parents: 129
diff changeset
  3875
  }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3876
  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
parents: 129
diff changeset
  3877
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3878
    // 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
parents: 129
diff changeset
  3879
    $score += -4;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3880
    $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
parents: 129
diff changeset
  3881
  }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3882
  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
parents: 129
diff changeset
  3883
            ( !$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
parents: 129
diff changeset
  3884
            ( !$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
parents: 129
diff changeset
  3885
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3886
    $score += -2;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3887
    $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
parents: 129
diff changeset
  3888
  }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3889
  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
parents: 129
diff changeset
  3890
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3891
    $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
parents: 129
diff changeset
  3892
    $score += -3;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3893
  }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3894
  
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3895
  //
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3896
  // Repetition
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3897
  // 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
parents: 129
diff changeset
  3898
  //
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3899
  
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3900
  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
parents: 129
diff changeset
  3901
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3902
    $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
parents: 129
diff changeset
  3903
    $score += -2;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3904
  }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3905
  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
parents: 129
diff changeset
  3906
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3907
    $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
parents: 129
diff changeset
  3908
    $score += -1;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3909
  }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3910
  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
parents: 129
diff changeset
  3911
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3912
    $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
parents: 129
diff changeset
  3913
    $score += 1;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3914
  }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3915
  
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3916
  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
parents: 129
diff changeset
  3917
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3918
    $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
parents: 129
diff changeset
  3919
    $score += -2;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3920
  }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3921
  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
parents: 129
diff changeset
  3922
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3923
    $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
parents: 129
diff changeset
  3924
    $score += -1;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3925
  }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3926
  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
parents: 129
diff changeset
  3927
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3928
    $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
parents: 129
diff changeset
  3929
    $score += -1;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3930
  }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3931
  
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3932
  // 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
parents: 129
diff changeset
  3933
  $prev_char = '';
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3934
  $warn = false;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3935
  $loss = 0;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3936
  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
parents: 129
diff changeset
  3937
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3938
    $chr = $password{$i};
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3939
    if ( $chr == $prev_char && $warn )
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3940
    {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3941
      $loss += -1;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3942
    }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3943
    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
parents: 129
diff changeset
  3944
    {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3945
      $warn = true;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3946
    }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3947
    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
parents: 129
diff changeset
  3948
    {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3949
      $warn = false;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3950
    }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3951
    $prev_char = $chr;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3952
  }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3953
  if ( $loss < 0 )
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3954
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3955
    $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
parents: 129
diff changeset
  3956
    $score += $loss;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3957
    // 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
parents: 129
diff changeset
  3958
    if ( $score < -10 )
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3959
    {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3960
      $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
parents: 129
diff changeset
  3961
      $score = -10;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3962
    }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3963
  }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3964
  
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3965
  return $score;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3966
}
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3967
191
3dbe848431b0 Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
parents: 184
diff changeset
  3968
/**
3dbe848431b0 Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
parents: 184
diff changeset
  3969
 * 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
parents: 184
diff changeset
  3970
 * @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
parents: 184
diff changeset
  3971
 * @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
parents: 184
diff changeset
  3972
 */
3dbe848431b0 Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
parents: 184
diff changeset
  3973
3dbe848431b0 Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
parents: 184
diff changeset
  3974
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
parents: 184
diff changeset
  3975
{
3dbe848431b0 Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
parents: 184
diff changeset
  3976
  global $cron_tasks;
541
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  3977
  $hour_interval = strval($hour_interval);
191
3dbe848431b0 Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
parents: 184
diff changeset
  3978
  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
parents: 184
diff changeset
  3979
    $cron_tasks[$hour_interval] = array();
3dbe848431b0 Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
parents: 184
diff changeset
  3980
  $cron_tasks[$hour_interval][] = $func;
3dbe848431b0 Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
parents: 184
diff changeset
  3981
}
3dbe848431b0 Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
parents: 184
diff changeset
  3982
230
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
parents: 191
diff changeset
  3983
/**
542
5841df0ab575 Added ETag support and increased caching settings to try and speed the system up. Result of a YSlow audit.
Dan
parents: 541
diff changeset
  3984
 * Gets the timestamp for the next estimated cron run.
5841df0ab575 Added ETag support and increased caching settings to try and speed the system up. Result of a YSlow audit.
Dan
parents: 541
diff changeset
  3985
 * @return int
5841df0ab575 Added ETag support and increased caching settings to try and speed the system up. Result of a YSlow audit.
Dan
parents: 541
diff changeset
  3986
 */
5841df0ab575 Added ETag support and increased caching settings to try and speed the system up. Result of a YSlow audit.
Dan
parents: 541
diff changeset
  3987
5841df0ab575 Added ETag support and increased caching settings to try and speed the system up. Result of a YSlow audit.
Dan
parents: 541
diff changeset
  3988
function get_cron_next_run()
5841df0ab575 Added ETag support and increased caching settings to try and speed the system up. Result of a YSlow audit.
Dan
parents: 541
diff changeset
  3989
{
5841df0ab575 Added ETag support and increased caching settings to try and speed the system up. Result of a YSlow audit.
Dan
parents: 541
diff changeset
  3990
  global $cron_tasks;
5841df0ab575 Added ETag support and increased caching settings to try and speed the system up. Result of a YSlow audit.
Dan
parents: 541
diff changeset
  3991
  $lowest_ivl = min(array_keys($cron_tasks));
5841df0ab575 Added ETag support and increased caching settings to try and speed the system up. Result of a YSlow audit.
Dan
parents: 541
diff changeset
  3992
  $last_run = intval(getConfig("cron_lastrun_ivl_$lowest_ivl"));
5841df0ab575 Added ETag support and increased caching settings to try and speed the system up. Result of a YSlow audit.
Dan
parents: 541
diff changeset
  3993
  return intval($last_run + ( 3600 * $lowest_ivl )) - 30;
5841df0ab575 Added ETag support and increased caching settings to try and speed the system up. Result of a YSlow audit.
Dan
parents: 541
diff changeset
  3994
}
5841df0ab575 Added ETag support and increased caching settings to try and speed the system up. Result of a YSlow audit.
Dan
parents: 541
diff changeset
  3995
5841df0ab575 Added ETag support and increased caching settings to try and speed the system up. Result of a YSlow audit.
Dan
parents: 541
diff changeset
  3996
/**
209
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  3997
 * Installs a language.
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  3998
 * @param string The ISO-639-3 identifier for the language. Maximum of 6 characters, usually 3.
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  3999
 * @param string The name of the language in English (Spanish)
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4000
 * @param string The name of the language natively (Español)
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4001
 * @param string The path to the file containing the language's strings. Optional.
191
3dbe848431b0 Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
parents: 184
diff changeset
  4002
 */
3dbe848431b0 Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
parents: 184
diff changeset
  4003
209
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4004
function install_language($lang_code, $lang_name_neutral, $lang_name_local, $lang_file = false)
191
3dbe848431b0 Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
parents: 184
diff changeset
  4005
{
209
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4006
  global $db, $session, $paths, $template, $plugins; // Common objects
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4007
  
371
dc6026376919 Improved compatibility with PostgreSQL and fixed a number of installer bugs; fixed missing "meta" category declaration in language files
Dan
parents: 362
diff changeset
  4008
  $q = $db->sql_query('SELECT 1 FROM '.table_prefix.'language WHERE lang_code = \'' . $db->escape($lang_code) . '\';');
209
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4009
  if ( !$q )
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4010
    $db->_die('functions.php - checking for language existence');
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4011
  
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4012
  if ( $db->numrows() > 0 )
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4013
    // Language already exists
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4014
    return false;
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4015
  
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4016
  $q = $db->sql_query('INSERT INTO ' . table_prefix . 'language(lang_code, lang_name_default, lang_name_native) 
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4017
                         VALUES(
371
dc6026376919 Improved compatibility with PostgreSQL and fixed a number of installer bugs; fixed missing "meta" category declaration in language files
Dan
parents: 362
diff changeset
  4018
                           \'' . $db->escape($lang_code) . '\',
dc6026376919 Improved compatibility with PostgreSQL and fixed a number of installer bugs; fixed missing "meta" category declaration in language files
Dan
parents: 362
diff changeset
  4019
                           \'' . $db->escape($lang_name_neutral) . '\',
372
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4020
                           \'' . $db->escape($lang_name_local) . '\'
209
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4021
                         );');
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4022
  if ( !$q )
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4023
    $db->_die('functions.php - installing language');
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4024
  
371
dc6026376919 Improved compatibility with PostgreSQL and fixed a number of installer bugs; fixed missing "meta" category declaration in language files
Dan
parents: 362
diff changeset
  4025
  if ( ENANO_DBLAYER == 'PGSQL' )
241
c671f3bb8aed Trying to get lang import to work in the installer; it's not working ATM - cache file is generated with lang_id = 0. Syncing to Nighthawk.
Dan
parents: 238
diff changeset
  4026
  {
371
dc6026376919 Improved compatibility with PostgreSQL and fixed a number of installer bugs; fixed missing "meta" category declaration in language files
Dan
parents: 362
diff changeset
  4027
    // exception for Postgres, which doesn't support insert IDs
dc6026376919 Improved compatibility with PostgreSQL and fixed a number of installer bugs; fixed missing "meta" category declaration in language files
Dan
parents: 362
diff changeset
  4028
    // This will cause the Language class to just load by lang code
dc6026376919 Improved compatibility with PostgreSQL and fixed a number of installer bugs; fixed missing "meta" category declaration in language files
Dan
parents: 362
diff changeset
  4029
    // instead of by numeric ID
dc6026376919 Improved compatibility with PostgreSQL and fixed a number of installer bugs; fixed missing "meta" category declaration in language files
Dan
parents: 362
diff changeset
  4030
    $lang_id = $lang_code;
dc6026376919 Improved compatibility with PostgreSQL and fixed a number of installer bugs; fixed missing "meta" category declaration in language files
Dan
parents: 362
diff changeset
  4031
  }
dc6026376919 Improved compatibility with PostgreSQL and fixed a number of installer bugs; fixed missing "meta" category declaration in language files
Dan
parents: 362
diff changeset
  4032
  else
dc6026376919 Improved compatibility with PostgreSQL and fixed a number of installer bugs; fixed missing "meta" category declaration in language files
Dan
parents: 362
diff changeset
  4033
  {
dc6026376919 Improved compatibility with PostgreSQL and fixed a number of installer bugs; fixed missing "meta" category declaration in language files
Dan
parents: 362
diff changeset
  4034
    $lang_id = $db->insert_id();
dc6026376919 Improved compatibility with PostgreSQL and fixed a number of installer bugs; fixed missing "meta" category declaration in language files
Dan
parents: 362
diff changeset
  4035
    if ( empty($lang_id) || $lang_id == 0 )
dc6026376919 Improved compatibility with PostgreSQL and fixed a number of installer bugs; fixed missing "meta" category declaration in language files
Dan
parents: 362
diff changeset
  4036
    {
dc6026376919 Improved compatibility with PostgreSQL and fixed a number of installer bugs; fixed missing "meta" category declaration in language files
Dan
parents: 362
diff changeset
  4037
      $db->_die('functions.php - invalid returned lang_id');
dc6026376919 Improved compatibility with PostgreSQL and fixed a number of installer bugs; fixed missing "meta" category declaration in language files
Dan
parents: 362
diff changeset
  4038
    }
241
c671f3bb8aed Trying to get lang import to work in the installer; it's not working ATM - cache file is generated with lang_id = 0. Syncing to Nighthawk.
Dan
parents: 238
diff changeset
  4039
  }
209
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4040
  
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4041
  // Do we also need to install a language file?
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4042
  if ( is_string($lang_file) && file_exists($lang_file) )
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4043
  {
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4044
    $lang = new Language($lang_id);
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4045
    $lang->import($lang_file);
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4046
  }
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4047
  else if ( is_string($lang_file) && !file_exists($lang_file) )
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4048
  {
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4049
    echo '<b>Notice:</b> Can\'t load language file, so the specified language wasn\'t fully installed.<br />';
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4050
    return false;
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4051
  }
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4052
  return true;
191
3dbe848431b0 Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
parents: 184
diff changeset
  4053
}
3dbe848431b0 Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
parents: 184
diff changeset
  4054
230
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
parents: 191
diff changeset
  4055
/**
372
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4056
 * Lists available languages.
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4057
 * @return array Multi-depth. Associative, with children associative containing keys name, name_eng, and dir.
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4058
 */
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4059
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4060
function list_available_languages()
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4061
{
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4062
  // Pulled from install/includes/common.php
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4063
  
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4064
  // Build a list of available languages
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4065
  $dir = @opendir( ENANO_ROOT . '/language' );
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4066
  if ( !$dir )
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4067
    die('CRITICAL: could not open language directory');
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4068
  
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4069
  $languages = array();
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4070
  
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4071
  while ( $dh = @readdir($dir) )
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4072
  {
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4073
    if ( $dh == '.' || $dh == '..' )
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4074
      continue;
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4075
    if ( file_exists( ENANO_ROOT . "/language/$dh/meta.json" ) )
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4076
    {
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4077
      // Found a language directory, determine metadata
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4078
      $meta = @file_get_contents( ENANO_ROOT . "/language/$dh/meta.json" );
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4079
      if ( empty($meta) )
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4080
        // Could not read metadata file, continue silently
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4081
        continue;
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4082
        
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4083
      // Do some syntax correction on the metadata
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4084
      $meta = enano_clean_json($meta);
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4085
        
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4086
      $meta = enano_json_decode($meta);
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4087
      if ( isset($meta['lang_name_english']) && isset($meta['lang_name_native']) && isset($meta['lang_code']) )
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4088
      {
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4089
        $languages[$meta['lang_code']] = array(
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4090
            'name' => $meta['lang_name_native'],
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4091
            'name_eng' => $meta['lang_name_english'],
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4092
            'dir' => $dh
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4093
          );
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4094
      }
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4095
    }
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4096
  }
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4097
  
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4098
  return $languages;
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4099
}
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4100
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4101
/**
230
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
parents: 191
diff changeset
  4102
 * 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
parents: 191
diff changeset
  4103
 * 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
parents: 191
diff changeset
  4104
 * 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
parents: 191
diff changeset
  4105
 * @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
parents: 191
diff changeset
  4106
 * @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
parents: 191
diff changeset
  4107
 * @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
parents: 191
diff changeset
  4108
 * @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
parents: 191
diff changeset
  4109
 * @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
parents: 191
diff changeset
  4110
 * @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
parents: 191
diff changeset
  4111
 */
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
parents: 191
diff changeset
  4112
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
parents: 191
diff changeset
  4113
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
parents: 191
diff changeset
  4114
{
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
parents: 191
diff changeset
  4115
  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
parents: 191
diff changeset
  4116
  
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
parents: 191
diff changeset
  4117
  if ( !is_int($width) || !is_int($height) )
898
c75754f5b1da When changing namespace of a File: page, associated files are now deleted. Also fixed some issues with image scaling.
Dan
parents: 875
diff changeset
  4118
    throw new Exception('Invalid height or width.');
230
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
parents: 191
diff changeset
  4119
  
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
parents: 191
diff changeset
  4120
  if ( !file_exists($in_file) )
898
c75754f5b1da When changing namespace of a File: page, associated files are now deleted. Also fixed some issues with image scaling.
Dan
parents: 875
diff changeset
  4121
    throw new Exception('Input file does not exist');
230
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
parents: 191
diff changeset
  4122
  
898
c75754f5b1da When changing namespace of a File: page, associated files are now deleted. Also fixed some issues with image scaling.
Dan
parents: 875
diff changeset
  4123
  $in_file_sh = escapeshellarg($in_file);
c75754f5b1da When changing namespace of a File: page, associated files are now deleted. Also fixed some issues with image scaling.
Dan
parents: 875
diff changeset
  4124
  $out_file_sh = escapeshellarg($out_file);
230
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
parents: 191
diff changeset
  4125
  
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
parents: 191
diff changeset
  4126
  if ( file_exists($out_file) && !$unlink )
898
c75754f5b1da When changing namespace of a File: page, associated files are now deleted. Also fixed some issues with image scaling.
Dan
parents: 875
diff changeset
  4127
    throw new Exception('Refusing to write output file as it already exists and $unlink was not specified.');
230
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
parents: 191
diff changeset
  4128
  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
parents: 191
diff changeset
  4129
    @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
parents: 191
diff changeset
  4130
  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
parents: 191
diff changeset
  4131
    // couldn't unlink (delete) the output file
898
c75754f5b1da When changing namespace of a File: page, associated files are now deleted. Also fixed some issues with image scaling.
Dan
parents: 875
diff changeset
  4132
    throw new Exception('Failed to delete existing output file.');
230
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
parents: 191
diff changeset
  4133
    
898
c75754f5b1da When changing namespace of a File: page, associated files are now deleted. Also fixed some issues with image scaling.
Dan
parents: 875
diff changeset
  4134
  $file_ext = strtolower(substr($in_file, ( strrpos($in_file, '.') + 1)));
230
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
parents: 191
diff changeset
  4135
  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
parents: 191
diff changeset
  4136
  {
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
parents: 191
diff changeset
  4137
    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
parents: 191
diff changeset
  4138
      $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
parents: 191
diff changeset
  4139
      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
parents: 191
diff changeset
  4140
    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
parents: 191
diff changeset
  4141
    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
parents: 191
diff changeset
  4142
      $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
parents: 191
diff changeset
  4143
      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
parents: 191
diff changeset
  4144
    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
parents: 191
diff changeset
  4145
      $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
parents: 191
diff changeset
  4146
      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
parents: 191
diff changeset
  4147
    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
parents: 191
diff changeset
  4148
      $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
parents: 191
diff changeset
  4149
      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
parents: 191
diff changeset
  4150
    default:
898
c75754f5b1da When changing namespace of a File: page, associated files are now deleted. Also fixed some issues with image scaling.
Dan
parents: 875
diff changeset
  4151
      throw new Exception('Invalid extension of input file.');
230
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
parents: 191
diff changeset
  4152
  }
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
parents: 191
diff changeset
  4153
    
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
parents: 191
diff changeset
  4154
  $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
parents: 191
diff changeset
  4155
  $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
parents: 191
diff changeset
  4156
      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
parents: 191
diff changeset
  4157
      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
parents: 191
diff changeset
  4158
      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
parents: 191
diff changeset
  4159
    );
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
parents: 191
diff changeset
  4160
  $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
parents: 191
diff changeset
  4161
      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
parents: 191
diff changeset
  4162
      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
parents: 191
diff changeset
  4163
      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
parents: 191
diff changeset
  4164
      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
parents: 191
diff changeset
  4165
    );
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
parents: 191
diff changeset
  4166
  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
parents: 191
diff changeset
  4167
  {
898
c75754f5b1da When changing namespace of a File: page, associated files are now deleted. Also fixed some issues with image scaling.
Dan
parents: 875
diff changeset
  4168
    if ( !preg_match('/^([\/A-z0-9:\. _-]+)$/', $magick_path) )
230
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
parents: 191
diff changeset
  4169
    {
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
parents: 191
diff changeset
  4170
      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
parents: 191
diff changeset
  4171
    }
898
c75754f5b1da When changing namespace of a File: page, associated files are now deleted. Also fixed some issues with image scaling.
Dan
parents: 875
diff changeset
  4172
    $cmdline = "$magick_path $in_file_sh -resize \"{$width}x{$height}>\" $out_file_sh";
230
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
parents: 191
diff changeset
  4173
    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
parents: 191
diff changeset
  4174
    if ( !file_exists($out_file) )
898
c75754f5b1da When changing namespace of a File: page, associated files are now deleted. Also fixed some issues with image scaling.
Dan
parents: 875
diff changeset
  4175
      throw new Exception('ImageMagick: did not produce output image file.');
230
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
parents: 191
diff changeset
  4176
    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
parents: 191
diff changeset
  4177
  }
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
parents: 191
diff changeset
  4178
  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
parents: 191
diff changeset
  4179
  {
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
parents: 191
diff changeset
  4180
    @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
parents: 191
diff changeset
  4181
    if ( !$width_orig || !$height_orig )
898
c75754f5b1da When changing namespace of a File: page, associated files are now deleted. Also fixed some issues with image scaling.
Dan
parents: 875
diff changeset
  4182
      throw new Exception('GD: Could not get height and width of input file.');
230
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
parents: 191
diff changeset
  4183
    // 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
parents: 191
diff changeset
  4184
    
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
parents: 191
diff changeset
  4185
    $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
parents: 191
diff changeset
  4186
    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
parents: 191
diff changeset
  4187
    {
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
parents: 191
diff changeset
  4188
      // 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
parents: 191
diff changeset
  4189
      $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
parents: 191
diff changeset
  4190
      $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
parents: 191
diff changeset
  4191
    }
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
parents: 191
diff changeset
  4192
    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
parents: 191
diff changeset
  4193
    {
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
parents: 191
diff changeset
  4194
      // 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
parents: 191
diff changeset
  4195
      $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
parents: 191
diff changeset
  4196
      $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
parents: 191
diff changeset
  4197
    }
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
parents: 191
diff changeset
  4198
    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
parents: 191
diff changeset
  4199
    {
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
parents: 191
diff changeset
  4200
      $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
parents: 191
diff changeset
  4201
      $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
parents: 191
diff changeset
  4202
    }
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
parents: 191
diff changeset
  4203
    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
parents: 191
diff changeset
  4204
    {
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
parents: 191
diff changeset
  4205
      // 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
parents: 191
diff changeset
  4206
      $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
parents: 191
diff changeset
  4207
      $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
parents: 191
diff changeset
  4208
    }
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
parents: 191
diff changeset
  4209
    
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
parents: 191
diff changeset
  4210
    $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
parents: 191
diff changeset
  4211
    if ( !$newimage )
898
c75754f5b1da When changing namespace of a File: page, associated files are now deleted. Also fixed some issues with image scaling.
Dan
parents: 875
diff changeset
  4212
      throw new Exception('GD: Request to create new truecolor image refused.');
230
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
parents: 191
diff changeset
  4213
    $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
parents: 191
diff changeset
  4214
    if ( !$oldimage )
898
c75754f5b1da When changing namespace of a File: page, associated files are now deleted. Also fixed some issues with image scaling.
Dan
parents: 875
diff changeset
  4215
      throw new Exception('GD: Request to load input image file failed.');
230
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
parents: 191
diff changeset
  4216
    
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
parents: 191
diff changeset
  4217
    // 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
parents: 191
diff changeset
  4218
    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
parents: 191
diff changeset
  4219
    
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
parents: 191
diff changeset
  4220
    // Get output format
898
c75754f5b1da When changing namespace of a File: page, associated files are now deleted. Also fixed some issues with image scaling.
Dan
parents: 875
diff changeset
  4221
    $out_ext = strtolower(substr($out_file, ( strrpos($out_file, '.') + 1)));
230
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
parents: 191
diff changeset
  4222
    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
parents: 191
diff changeset
  4223
    {
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
parents: 191
diff changeset
  4224
      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
parents: 191
diff changeset
  4225
        $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
parents: 191
diff changeset
  4226
        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
parents: 191
diff changeset
  4227
      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
parents: 191
diff changeset
  4228
      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
parents: 191
diff changeset
  4229
        $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
parents: 191
diff changeset
  4230
        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
parents: 191
diff changeset
  4231
      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
parents: 191
diff changeset
  4232
        $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
parents: 191
diff changeset
  4233
        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
parents: 191
diff changeset
  4234
      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
parents: 191
diff changeset
  4235
        $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
parents: 191
diff changeset
  4236
        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
parents: 191
diff changeset
  4237
      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
parents: 191
diff changeset
  4238
        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
parents: 191
diff changeset
  4239
        imagedestroy($oldimage);
898
c75754f5b1da When changing namespace of a File: page, associated files are now deleted. Also fixed some issues with image scaling.
Dan
parents: 875
diff changeset
  4240
        throw new Exception('GD: Invalid extension of output file.');
230
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
parents: 191
diff changeset
  4241
    }
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
parents: 191
diff changeset
  4242
    
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
parents: 191
diff changeset
  4243
    // 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
parents: 191
diff changeset
  4244
    $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
parents: 191
diff changeset
  4245
    
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
parents: 191
diff changeset
  4246
    // 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
parents: 191
diff changeset
  4247
    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
parents: 191
diff changeset
  4248
    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
parents: 191
diff changeset
  4249
    
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
parents: 191
diff changeset
  4250
    // 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
parents: 191
diff changeset
  4251
    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
parents: 191
diff changeset
  4252
  }
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
parents: 191
diff changeset
  4253
  // 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
parents: 191
diff changeset
  4254
  $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
parents: 191
diff changeset
  4255
  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
parents: 191
diff changeset
  4256
  {
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
parents: 191
diff changeset
  4257
    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
parents: 191
diff changeset
  4258
  }
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
parents: 191
diff changeset
  4259
  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
parents: 191
diff changeset
  4260
    return true;
898
c75754f5b1da When changing namespace of a File: page, associated files are now deleted. Also fixed some issues with image scaling.
Dan
parents: 875
diff changeset
  4261
  
c75754f5b1da When changing namespace of a File: page, associated files are now deleted. Also fixed some issues with image scaling.
Dan
parents: 875
diff changeset
  4262
  throw new Exception('Failed to find an appropriate method for scaling.');
230
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
parents: 191
diff changeset
  4263
}
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
parents: 191
diff changeset
  4264
328
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4265
/**
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4266
 * Determines whether a GIF file is animated or not. Credit goes to ZeBadger from <http://www.php.net/imagecreatefromgif>.
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4267
 * Modified to conform to Enano coding standards.
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4268
 * @param string Path to GIF file
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4269
 * @return bool If animated, returns true
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4270
 */
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4271
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4272
 
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4273
function is_gif_animated($filename)
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4274
{
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4275
  $filecontents = @file_get_contents($filename);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4276
  if ( empty($filecontents) )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4277
    return false;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4278
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4279
  $str_loc = 0;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4280
  $count = 0;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4281
  while ( $count < 2 ) // There is no point in continuing after we find a 2nd frame
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4282
  {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4283
    $where1 = strpos($filecontents,"\x00\x21\xF9\x04", $str_loc);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4284
    if ( $where1 === false )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4285
    {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4286
      break;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4287
    }
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4288
    else
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4289
    {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4290
      $str_loc = $where1 + 1;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4291
      $where2 = strpos($filecontents,"\x00\x2C", $str_loc);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4292
      if ( $where2 === false )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4293
      {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4294
        break;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4295
      }
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4296
      else
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4297
      {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4298
        if ( $where1 + 8 == $where2 )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4299
        {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4300
          $count++;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4301
        }
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4302
        $str_loc = $where2 + 1;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4303
      }
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4304
    }
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4305
  }
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4306
  
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4307
  return ( $count > 1 ) ? true : false;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4308
}
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4309
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4310
/**
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4311
 * Retrieves the dimensions of a GIF image.
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4312
 * @param string The path to the GIF file.
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4313
 * @return array Key 0 is width, key 1 is height
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4314
 */
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4315
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4316
function gif_get_dimensions($filename)
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4317
{
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4318
  $filecontents = @file_get_contents($filename);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4319
  if ( empty($filecontents) )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4320
    return false;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4321
  if ( strlen($filecontents) < 10 )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4322
    return false;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4323
  
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4324
  $width = substr($filecontents, 6, 2);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4325
  $height = substr($filecontents, 8, 2);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4326
  $width = unpack('v', $width);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4327
  $height = unpack('v', $height);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4328
  return array($width[1], $height[1]);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4329
}
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4330
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4331
/**
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4332
 * Determines whether a PNG image is animated or not. Based on some specification information from <http://wiki.mozilla.org/APNG_Specification>.
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4333
 * @param string Path to PNG file.
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4334
 * @return bool If animated, returns true
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4335
 */
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4336
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4337
function is_png_animated($filename)
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4338
{
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4339
  $filecontents = @file_get_contents($filename);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4340
  if ( empty($filecontents) )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4341
    return false;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4342
  
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4343
  $parsed = parse_png($filecontents);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4344
  if ( !$parsed )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4345
    return false;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4346
  
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4347
  if ( !isset($parsed['fdAT']) )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4348
    return false;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4349
  
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4350
  if ( count($parsed['fdAT']) > 1 )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4351
    return true;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4352
}
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4353
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4354
/**
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4355
 * Gets the dimensions of a PNG image.
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4356
 * @param string Path to PNG file
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4357
 * @return array Key 0 is width, key 1 is length.
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4358
 */
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4359
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4360
function png_get_dimensions($filename)
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4361
{
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4362
  $filecontents = @file_get_contents($filename);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4363
  if ( empty($filecontents) )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4364
    return false;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4365
  
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4366
  $parsed = parse_png($filecontents);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4367
  if ( !$parsed )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4368
    return false;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4369
  
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4370
  $ihdr_stream = $parsed['IHDR'][0];
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4371
  $width = substr($ihdr_stream, 0, 4);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4372
  $height = substr($ihdr_stream, 4, 4);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4373
  $width = unpack('N', $width);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4374
  $height = unpack('N', $height);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4375
  $x = $width[1];
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4376
  $y = $height[1];
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4377
  return array($x, $y);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4378
}
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4379
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4380
/**
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4381
 * Internal function to parse out the streams of a PNG file. Based on the W3 PNG spec: http://www.w3.org/TR/PNG/
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4382
 * @param string The contents of the PNG
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4383
 * @return array Associative array containing the streams
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4384
 */
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4385
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4386
function parse_png($data)
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4387
{
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4388
  // Trim off first 8 bytes to check for PNG header
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4389
  $header = substr($data, 0, 8);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4390
  if ( $header != "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a" )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4391
  {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4392
    return false;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4393
  }
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4394
  $return = array();
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4395
  $data = substr($data, 8);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4396
  while ( strlen($data) > 0 )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4397
  {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4398
    $chunklen_bin = substr($data, 0, 4);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4399
    $chunk_type = substr($data, 4, 4);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4400
    $chunklen = unpack('N', $chunklen_bin);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4401
    $chunklen = $chunklen[1];
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4402
    $chunk_data = substr($data, 8, $chunklen);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4403
    
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4404
    // If the chunk type is not valid, this may be a malicious PNG with bad offsets. Break out of the loop.
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4405
    if ( !preg_match('/^[A-z]{4}$/', $chunk_type) )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4406
      break;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4407
    
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4408
    if ( !isset($return[$chunk_type]) )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4409
      $return[$chunk_type] = array();
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4410
    $return[$chunk_type][] = $chunk_data;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4411
    
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4412
    $offset_next = 4 // Length
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4413
                 + 4 // Type
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4414
                 + $chunklen // Data
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4415
                 + 4; // CRC
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4416
    $data = substr($data, $offset_next);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4417
  }
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4418
  return $return;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4419
}
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4420
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4421
/**
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4422
 * Retreives information about the intrinsic characteristics of the jpeg image, such as Bits per Component, Height and Width. This function is from the PHP JPEG Metadata Toolkit. Licensed under the GPLv2 or later.
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4423
 * @param array The JPEG header data, as retrieved from the get_jpeg_header_data function
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4424
 * @return array An array containing the intrinsic JPEG values FALSE - if the comment segment couldnt be found
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4425
 * @license GNU General Public License
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4426
 * @copyright Copyright Evan Hunter 2004 
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4427
 */
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4428
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4429
function get_jpeg_intrinsic_values( $jpeg_header_data )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4430
{
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4431
  // Create a blank array for the output
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4432
  $Outputarray = array( );
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4433
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4434
  //Cycle through the header segments until Start Of Frame (SOF) is found or we run out of segments
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4435
  $i = 0;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4436
  while ( ( $i < count( $jpeg_header_data) )  && ( substr( $jpeg_header_data[$i]['SegName'], 0, 3 ) != "SOF" ) )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4437
  {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4438
    $i++;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4439
  }
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4440
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4441
  // Check if a SOF segment has been found
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4442
  if ( substr( $jpeg_header_data[$i]['SegName'], 0, 3 ) == "SOF" )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4443
  {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4444
    // SOF segment was found, extract the information
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4445
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4446
    $data = $jpeg_header_data[$i]['SegData'];
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4447
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4448
    // First byte is Bits per component
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4449
    $Outputarray['Bits per Component'] = ord( $data{0} );
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4450
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4451
    // Second and third bytes are Image Height
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4452
    $Outputarray['Image Height'] = ord( $data{ 1 } ) * 256 + ord( $data{ 2 } );
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4453
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4454
    // Forth and fifth bytes are Image Width
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4455
    $Outputarray['Image Width'] = ord( $data{ 3 } ) * 256 + ord( $data{ 4 } );
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4456
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4457
    // Sixth byte is number of components
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4458
    $numcomponents = ord( $data{ 5 } );
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4459
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4460
    // Following this is a table containing information about the components
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4461
    for( $i = 0; $i < $numcomponents; $i++ )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4462
    {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4463
      $Outputarray['Components'][] = array (  'Component Identifier' => ord( $data{ 6 + $i * 3 } ),
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4464
                'Horizontal Sampling Factor' => ( ord( $data{ 7 + $i * 3 } ) & 0xF0 ) / 16,
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4465
                'Vertical Sampling Factor' => ( ord( $data{ 7 + $i * 3 } ) & 0x0F ),
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4466
                'Quantization table destination selector' => ord( $data{ 8 + $i * 3 } ) );
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4467
    }
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4468
  }
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4469
  else
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4470
  {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4471
    // Couldn't find Start Of Frame segment, hence can't retrieve info
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4472
    return FALSE;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4473
  }
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4474
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4475
  return $Outputarray;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4476
}
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4477
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4478
/**
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4479
 * Reads all the JPEG header segments from an JPEG image file into an array. This function is from the PHP JPEG Metadata Toolkit. Licensed under the GPLv2 or later. Modified slightly for Enano coding standards and to remove unneeded capability.
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4480
 * @param string the filename of the file to JPEG file to read
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4481
 * @return string Array of JPEG header segments, or FALSE - if headers could not be read
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4482
 * @license GNU General Public License
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4483
 * @copyright Copyright Evan Hunter 2004
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4484
 */
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4485
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4486
function get_jpeg_header_data( $filename )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4487
{
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4488
  // Attempt to open the jpeg file - the at symbol supresses the error message about
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4489
  // not being able to open files. The file_exists would have been used, but it
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4490
  // does not work with files fetched over http or ftp.
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4491
  $filehnd = @fopen($filename, 'rb');
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4492
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4493
  // Check if the file opened successfully
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4494
  if ( ! $filehnd  )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4495
  {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4496
    // Could't open the file - exit
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4497
    return FALSE;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4498
  }
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4499
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4500
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4501
  // Read the first two characters
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4502
  $data = fread( $filehnd, 2 );
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4503
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4504
  // Check that the first two characters are 0xFF 0xDA  (SOI - Start of image)
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4505
  if ( $data != "\xFF\xD8" )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4506
  {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4507
    // No SOI (FF D8) at start of file - This probably isn't a JPEG file - close file and return;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4508
    fclose($filehnd);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4509
    return FALSE;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4510
  }
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4511
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4512
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4513
  // Read the third character
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4514
  $data = fread( $filehnd, 2 );
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4515
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4516
  // Check that the third character is 0xFF (Start of first segment header)
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4517
  if ( $data{0} != "\xFF" )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4518
  {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4519
    // NO FF found - close file and return - JPEG is probably corrupted
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4520
    fclose($filehnd);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4521
    return FALSE;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4522
  }
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4523
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4524
  // Flag that we havent yet hit the compressed image data
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4525
  $hit_compressed_image_data = FALSE;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4526
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4527
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4528
  // Cycle through the file until, one of: 1) an EOI (End of image) marker is hit,
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4529
  //               2) we have hit the compressed image data (no more headers are allowed after data)
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4530
  //               3) or end of file is hit
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4531
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4532
  while ( ( $data{1} != "\xD9" ) && (! $hit_compressed_image_data) && ( ! feof( $filehnd ) ))
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4533
  {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4534
    // Found a segment to look at.
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4535
    // Check that the segment marker is not a Restart marker - restart markers don't have size or data after them
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4536
    if (  ( ord($data{1}) < 0xD0 ) || ( ord($data{1}) > 0xD7 ) )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4537
    {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4538
      // Segment isn't a Restart marker
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4539
      // Read the next two bytes (size)
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4540
      $sizestr = fread( $filehnd, 2 );
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4541
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4542
      // convert the size bytes to an integer
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4543
      $decodedsize = unpack ("nsize", $sizestr);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4544
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4545
      // Save the start position of the data
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4546
      $segdatastart = ftell( $filehnd );
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4547
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4548
      // Read the segment data with length indicated by the previously read size
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4549
      $segdata = fread( $filehnd, $decodedsize['size'] - 2 );
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4550
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4551
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4552
      // Store the segment information in the output array
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4553
      $headerdata[] = array(  "SegType" => ord($data{1}),
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4554
            "SegName" => $GLOBALS[ "JPEG_Segment_Names" ][ ord($data{1}) ],
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4555
            "SegDataStart" => $segdatastart,
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4556
            "SegData" => $segdata );
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4557
    }
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4558
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4559
    // If this is a SOS (Start Of Scan) segment, then there is no more header data - the compressed image data follows
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4560
    if ( $data{1} == "\xDA" )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4561
    {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4562
      // Flag that we have hit the compressed image data - exit loop as no more headers available.
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4563
      $hit_compressed_image_data = TRUE;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4564
    }
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4565
    else
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4566
    {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4567
      // Not an SOS - Read the next two bytes - should be the segment marker for the next segment
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4568
      $data = fread( $filehnd, 2 );
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4569
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4570
      // Check that the first byte of the two is 0xFF as it should be for a marker
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4571
      if ( $data{0} != "\xFF" )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4572
      {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4573
        // NO FF found - close file and return - JPEG is probably corrupted
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4574
        fclose($filehnd);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4575
        return FALSE;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4576
      }
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4577
    }
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4578
  }
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4579
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4580
  // Close File
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4581
  fclose($filehnd);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4582
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4583
  // Return the header data retrieved
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4584
  return $headerdata;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4585
}
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4586
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4587
/**
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4588
 * Returns the dimensions of a JPEG image in the same format as {php,gif}_get_dimensions().
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4589
 * @param string JPEG file to check
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4590
 * @return array Key 0 is width, key 1 is height
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4591
 */
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4592
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4593
function jpg_get_dimensions($filename)
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4594
{
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4595
  if ( !file_exists($filename) )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4596
  {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4597
    echo "Doesn't exist<br />";
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4598
    return false;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4599
  }
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4600
  
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4601
  $headers = get_jpeg_header_data($filename);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4602
  if ( !$headers )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4603
  {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4604
    echo "Bad headers<br />";
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4605
    return false;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4606
  }
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4607
  
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4608
  $metadata = get_jpeg_intrinsic_values($headers);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4609
  if ( !$metadata )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4610
  {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4611
    echo "Bad metadata: <pre>" . print_r($metadata, true) . "</pre><br />";
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4612
    return false;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4613
  }
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4614
  
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4615
  if ( !isset($metadata['Image Width']) || !isset($metadata['Image Height']) )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4616
  {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4617
    echo "No metadata<br />";
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4618
    return false;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4619
  }
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4620
  
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4621
  return array($metadata['Image Width'], $metadata['Image Height']);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4622
}
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4623
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4624
/**
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4625
 * Generates a URL for the avatar for the given user ID and avatar type.
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4626
 * @param int User ID
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4627
 * @param string Image type - must be one of jpg, png, or gif.
621
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4628
 * @param string User's e-mail address, makes Special:Avatar redirect if not specified
328
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4629
 * @return string
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4630
 */
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4631
621
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4632
function make_avatar_url($user_id, $avi_type, $user_email = false)
328
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4633
{
541
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  4634
  static $img_types = array(
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  4635
      'png' => IMAGE_TYPE_PNG,
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  4636
      'gif' => IMAGE_TYPE_GIF,
621
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4637
      'jpg' => IMAGE_TYPE_JPG,
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4638
      'grv' => IMAGE_TYPE_GRV
541
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  4639
    );
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  4640
  
328
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4641
  if ( !is_int($user_id) )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4642
    return false;
541
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  4643
  if ( !isset($img_types[$avi_type]) )
328
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4644
    return false;
621
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4645
  
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4646
  if ( $avi_type == 'grv' )
541
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  4647
  {
621
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4648
    if ( $user_email )
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4649
    {
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4650
      return make_gravatar_url($user_email);
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4651
    }
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4652
  }
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4653
  else
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4654
  {
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4655
    $avi_relative_path = '/' . getConfig('avatar_directory') . '/' . $user_id . '.' . $avi_type;
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4656
    if ( !file_exists(ENANO_ROOT . $avi_relative_path) )
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4657
    {
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4658
      return '';
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4659
    }
541
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  4660
  }
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  4661
  
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  4662
  $img_type = $img_types[$avi_type];
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  4663
  
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  4664
  $dateline = @filemtime(ENANO_ROOT . $avi_relative_path);
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  4665
  $avi_id = pack('VVv', $dateline, $user_id, $img_type);
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  4666
  $avi_id = hexencode($avi_id, '', '');
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  4667
    
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  4668
  // return scriptPath . $avi_relative_path;
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  4669
  return makeUrlNS('Special', "Avatar/$avi_id");
328
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4670
}
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4671
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4672
/**
621
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4673
 * Generates a URL to the Gravatar for a user based on his/her e-mail address.
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4674
 * @param string E-mail address
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4675
 * @param int Size - defaults to site-wide limits
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4676
 * @return string URL
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4677
 */
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4678
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4679
function make_gravatar_url($email, $size = false)
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4680
{
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4681
  $email = md5($email);
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4682
  
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4683
  // gravatar parameters
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4684
  if ( $size )
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4685
  {
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4686
    $max_size = intval($size);
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4687
  }
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4688
  else
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4689
  {
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4690
    $max_x = intval(getConfig('avatar_max_width', '150'));
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4691
    $max_y = intval(getConfig('avatar_max_height', '150'));
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4692
    // ?s=
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4693
    $max_size = ( $max_x > $max_y ) ? $max_y : $max_x;
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4694
  }
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4695
  
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4696
  // ?r=
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4697
  $rating = getConfig('gravatar_rating', 'g');
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4698
  
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4699
  // final URL
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4700
  $url = "http://www.gravatar.com/avatar/$email?r=$rating&s=$max_size";
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4701
  
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4702
  return $url;
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4703
}
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4704
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4705
/**
328
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4706
 * Determines an image's filetype based on its signature.
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4707
 * @param string Path to image file
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4708
 * @return string One of gif, png, or jpg, or false if none of these.
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4709
 */
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4710
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4711
function get_image_filetype($filename)
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4712
{
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4713
  $filecontents = @file_get_contents($filename);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4714
  if ( empty($filecontents) )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4715
    return false;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4716
  
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4717
  if ( substr($filecontents, 0, 8) == "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a" )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4718
    return 'png';
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4719
  
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4720
  if ( substr($filecontents, 0, 6) == 'GIF87a' || substr($filecontents, 0, 6) == 'GIF89a' )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4721
    return 'gif';
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4722
  
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4723
  if ( substr($filecontents, 0, 2) == "\xFF\xD8" )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4724
    return 'jpg';
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4725
  
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4726
  return false;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4727
}
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4728
334
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4729
/**
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4730
 * Generates a JSON encoder/decoder singleton.
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4731
 * @return object
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4732
 */
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4733
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4734
function enano_json_singleton()
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4735
{
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4736
  static $json_obj;
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4737
  if ( !is_object($json_obj) )
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4738
    $json_obj = new Services_JSON(SERVICES_JSON_LOOSE_TYPE | SERVICES_JSON_SUPPRESS_ERRORS);
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4739
  
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4740
  return $json_obj;
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4741
}
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4742
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4743
/**
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4744
 * Wrapper for JSON encoding.
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4745
 * @param mixed Variable to encode
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4746
 * @return string JSON-encoded string
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4747
 */
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4748
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4749
function enano_json_encode($data)
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4750
{
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4751
  /*
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4752
  if ( function_exists('json_encode') )
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4753
  {
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4754
    // using PHP5 with JSON support
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4755
    return json_encode($data);
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4756
  }
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4757
  */
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4758
  
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4759
  return Zend_Json::encode($data, true);
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4760
}
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4761
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4762
/**
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4763
 * Wrapper for JSON decoding.
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4764
 * @param string JSON-encoded string
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4765
 * @return mixed Decoded value
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4766
 */
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4767
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4768
function enano_json_decode($data)
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4769
{
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4770
  /*
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4771
  if ( function_exists('json_decode') )
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4772
  {
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4773
    // using PHP5 with JSON support
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4774
    return json_decode($data);
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4775
  }
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4776
  */
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4777
  
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4778
  return Zend_Json::decode($data, Zend_Json::TYPE_ARRAY);
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4779
}
c72b545f1304 More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
parents: 328
diff changeset
  4780
372
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4781
/**
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4782
 * Cleans a snippet of JSON for closer standards compliance (shuts up the picky Zend parser)
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4783
 * @param string Dirty JSON
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4784
 * @return string Clean JSON
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4785
 */
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4786
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4787
function enano_clean_json($json)
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4788
{
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4789
  // eliminate comments
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4790
  $json = preg_replace(array(
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4791
          // eliminate single line comments in '// ...' form
832
7152ca0a0ce9 Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
Dan
parents: 825
diff changeset
  4792
          '#^\s*//(.*)$#m',
372
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4793
          // eliminate multi-line comments in '/* ... */' form, at start of string
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4794
          '#^\s*/\*(.+)\*/#Us',
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4795
          // eliminate multi-line comments in '/* ... */' form, at end of string
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4796
          '#/\*(.+)\*/\s*$#Us'
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4797
        ), '', $json);
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4798
    
1167
3c73e1b6d33f JSON preparser: fixed corruption of strings that include the exact pattern word, comma, space, word, colon
Dan
parents: 1159
diff changeset
  4799
  $json = preg_replace('/([,\{\[])(?:[\r\n]+)([\s]*?)([a-z0-9_]+)([\s]*?):/', '\\1\\2"\\3" :', $json);
372
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4800
  
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4801
  return $json;
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4802
}
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4803
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4804
/**
519
94214ec0871c Started work on the new plugin manager and associated management code. Very incomplete at this point and not usable.
Dan
parents: 507
diff changeset
  4805
 * Trims a snippet of text to the first and last curly braces. Useful for JSON.
94214ec0871c Started work on the new plugin manager and associated management code. Very incomplete at this point and not usable.
Dan
parents: 507
diff changeset
  4806
 * @param string Text to trim
94214ec0871c Started work on the new plugin manager and associated management code. Very incomplete at this point and not usable.
Dan
parents: 507
diff changeset
  4807
 * @return string
94214ec0871c Started work on the new plugin manager and associated management code. Very incomplete at this point and not usable.
Dan
parents: 507
diff changeset
  4808
 */
94214ec0871c Started work on the new plugin manager and associated management code. Very incomplete at this point and not usable.
Dan
parents: 507
diff changeset
  4809
94214ec0871c Started work on the new plugin manager and associated management code. Very incomplete at this point and not usable.
Dan
parents: 507
diff changeset
  4810
function enano_trim_json($json)
94214ec0871c Started work on the new plugin manager and associated management code. Very incomplete at this point and not usable.
Dan
parents: 507
diff changeset
  4811
{
94214ec0871c Started work on the new plugin manager and associated management code. Very incomplete at this point and not usable.
Dan
parents: 507
diff changeset
  4812
  return preg_replace('/^([^{]+)\{/', '{', preg_replace('/\}([^}]+)$/', '}', $json));
94214ec0871c Started work on the new plugin manager and associated management code. Very incomplete at this point and not usable.
Dan
parents: 507
diff changeset
  4813
}
94214ec0871c Started work on the new plugin manager and associated management code. Very incomplete at this point and not usable.
Dan
parents: 507
diff changeset
  4814
94214ec0871c Started work on the new plugin manager and associated management code. Very incomplete at this point and not usable.
Dan
parents: 507
diff changeset
  4815
/**
372
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4816
 * Starts the profiler.
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4817
 */
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4818
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4819
function profiler_start()
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4820
{
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4821
  global $_profiler;
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4822
  $_profiler = array();
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4823
  
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4824
  if ( !defined('ENANO_DEBUG') )
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4825
    return false;
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4826
  
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4827
  $_profiler[] = array(
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4828
      'point' => 'Profiling started',
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4829
      'time' => microtime_float(),
424
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4830
      'backtrace' => false,
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4831
      'mem' => false
372
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4832
    );
424
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4833
  if ( function_exists('memory_get_usage') )
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4834
  {
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4835
    $_profiler[ count($_profiler) - 1 ]['mem'] = memory_get_usage();
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4836
  }
372
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4837
}
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4838
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4839
/**
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4840
 * Logs something in the profiler.
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4841
 * @param string Point name or message
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4842
 * @param bool Optional. If true (default), a backtrace will be generated and added to the profiler data. False disables this, often for security reasons.
953
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4843
 * @param resource Optional. If specified, bases the time difference off of this event instead of the previous event/
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4844
 * @return resource Event ID
372
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4845
 */
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4846
953
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4847
function profiler_log($point, $allow_backtrace = true, $parent_event = false)
372
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4848
{
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4849
  if ( !defined('ENANO_DEBUG') )
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4850
    return false;
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4851
  
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4852
  global $_profiler;
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4853
  $backtrace = false;
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4854
  if ( $allow_backtrace && function_exists('debug_print_backtrace') )
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4855
  {
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4856
    list(, $backtrace) = explode("\n", enano_debug_print_backtrace(true));
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4857
  }
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4858
  $_profiler[] = array(
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4859
      'point' => $point,
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4860
      'time' => microtime_float(),
424
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4861
      'backtrace' => $backtrace,
953
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4862
      'mem' => false,
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4863
      'parent_event' => $parent_event
372
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4864
    );
424
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4865
  if ( function_exists('memory_get_usage') )
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4866
  {
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4867
    $_profiler[ count($_profiler) - 1 ]['mem'] = memory_get_usage();
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4868
  }
953
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4869
  return count($_profiler) - 1;
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4870
}
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4871
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4872
/**
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4873
 * Insert a message (an event without any time data) into the profiler.
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4874
 * @param string Message
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4875
 */
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4876
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4877
function profiler_message($message)
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4878
{
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4879
  if ( !defined('ENANO_DEBUG') )
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4880
    return false;
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4881
  
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4882
  global $_profiler;
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4883
  
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4884
  $_profiler[] = array(
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4885
      'message' => $message,
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4886
    );
372
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4887
}
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4888
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4889
/**
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4890
 * Returns the profiler's data (so far).
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4891
 * @return array
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4892
 */
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4893
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4894
function profiler_dump()
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4895
{
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4896
  return $GLOBALS['_profiler'];
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4897
}
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4898
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4899
/**
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4900
 * Generates an HTML version of the performance profile. Not localized because only used as a debugging tool.
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4901
 * @return string
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4902
 */
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4903
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4904
function profiler_make_html()
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4905
{
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4906
  if ( !defined('ENANO_DEBUG') )
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4907
    return '';
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4908
    
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4909
  $profile = profiler_dump();
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4910
  
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4911
  $html = '<div class="tblholder">';
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4912
  $html .= '<table border="0" cellspacing="1" cellpadding="4">';
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4913
  
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4914
  $time_start = $time_last = $profile[0]['time'];
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4915
  
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4916
  foreach ( $profile as $i => $entry )
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4917
  {
592
27377179fe58 Another sweep from the optimization monster.
Dan
parents: 582
diff changeset
  4918
    // $time_since_last = $entry['time'] - $time_last;
27377179fe58 Another sweep from the optimization monster.
Dan
parents: 582
diff changeset
  4919
    // if ( $time_since_last < 0.01 )
27377179fe58 Another sweep from the optimization monster.
Dan
parents: 582
diff changeset
  4920
    //   continue;
27377179fe58 Another sweep from the optimization monster.
Dan
parents: 582
diff changeset
  4921
    
953
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4922
    if ( isset($entry['message']) )
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4923
    {
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4924
      $html .= "<!-- ########################################################## -->\n<tr>\n  <th colspan=\"2\">Message $i</th>\n</tr>";
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4925
      
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4926
      $html .= '<tr>' . "\n";
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4927
      $html .= '  <td class="row2">Message:</td>' . "\n";
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4928
      $html .= '  <td class="row1">' . htmlspecialchars($entry['message']) . '</td>' . "\n";
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4929
      $html .= '</tr>' . "\n";
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4930
      continue;
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4931
    }
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4932
    
382
2ccb55995aef Profiling enabled for RenderMan's wikiformat routine; [minor] made HTML from profiler more pretty
Dan
parents: 381
diff changeset
  4933
    $html .= "<!-- ########################################################## -->\n<tr>\n  <th colspan=\"2\">Event $i</th>\n</tr>";
372
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4934
    
382
2ccb55995aef Profiling enabled for RenderMan's wikiformat routine; [minor] made HTML from profiler more pretty
Dan
parents: 381
diff changeset
  4935
    $html .= '<tr>' . "\n";
2ccb55995aef Profiling enabled for RenderMan's wikiformat routine; [minor] made HTML from profiler more pretty
Dan
parents: 381
diff changeset
  4936
    $html .= '  <td class="row2">Event:</td>' . "\n";
2ccb55995aef Profiling enabled for RenderMan's wikiformat routine; [minor] made HTML from profiler more pretty
Dan
parents: 381
diff changeset
  4937
    $html .= '  <td class="row1">' . htmlspecialchars($entry['point']) . '</td>' . "\n";
2ccb55995aef Profiling enabled for RenderMan's wikiformat routine; [minor] made HTML from profiler more pretty
Dan
parents: 381
diff changeset
  4938
    $html .= '</tr>' . "\n";
372
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4939
    
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4940
    $time = $entry['time'] - $time_start;
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4941
    
382
2ccb55995aef Profiling enabled for RenderMan's wikiformat routine; [minor] made HTML from profiler more pretty
Dan
parents: 381
diff changeset
  4942
    $html .= '<tr>' . "\n";
2ccb55995aef Profiling enabled for RenderMan's wikiformat routine; [minor] made HTML from profiler more pretty
Dan
parents: 381
diff changeset
  4943
    $html .= '  <td class="row2">Time since start:</td>' . "\n";
2ccb55995aef Profiling enabled for RenderMan's wikiformat routine; [minor] made HTML from profiler more pretty
Dan
parents: 381
diff changeset
  4944
    $html .= '  <td class="row1">' . $time . 's</td>' . "\n";
2ccb55995aef Profiling enabled for RenderMan's wikiformat routine; [minor] made HTML from profiler more pretty
Dan
parents: 381
diff changeset
  4945
    $html .= '</tr>' . "\n";
372
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4946
    
953
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4947
    $time_label = 'Time since last event:';
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4948
    if ( $entry['parent_event'] && is_int($entry['parent_event']) && isset($profile[$entry['parent_event']]) )
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4949
    {
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4950
      $time_last = $profile[$entry['parent_event']]['time'];
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4951
      $time_label = "Time since event #{$entry['parent_event']}:";
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4952
    }
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4953
    
372
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4954
    $time = $entry['time'] - $time_last;
382
2ccb55995aef Profiling enabled for RenderMan's wikiformat routine; [minor] made HTML from profiler more pretty
Dan
parents: 381
diff changeset
  4955
    if ( $time < 0.0001 )
953
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4956
      $time_html = 'Marginal';
382
2ccb55995aef Profiling enabled for RenderMan's wikiformat routine; [minor] made HTML from profiler more pretty
Dan
parents: 381
diff changeset
  4957
    else
953
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4958
      $time_html = number_format($time, 6) . "s";
372
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4959
    
953
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4960
    if ( $time > 0.02 )
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4961
      $time_html = "<span style=\"background-color: #a00; padding: 4px; color: #fff; font-weight: bold;\">$time_html</span>";
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4962
      
382
2ccb55995aef Profiling enabled for RenderMan's wikiformat routine; [minor] made HTML from profiler more pretty
Dan
parents: 381
diff changeset
  4963
    $html .= '<tr>' . "\n";
953
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4964
    $html .= '  <td class="row2">' . $time_label . '</td>' . "\n";
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  4965
    $html .= '  <td class="row1">' . $time_html . '</td>' . "\n";
382
2ccb55995aef Profiling enabled for RenderMan's wikiformat routine; [minor] made HTML from profiler more pretty
Dan
parents: 381
diff changeset
  4966
    $html .= '</tr>' . "\n";
372
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4967
    
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4968
    if ( $entry['backtrace'] )
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4969
    {
382
2ccb55995aef Profiling enabled for RenderMan's wikiformat routine; [minor] made HTML from profiler more pretty
Dan
parents: 381
diff changeset
  4970
      $html .= '<tr>' . "\n";
2ccb55995aef Profiling enabled for RenderMan's wikiformat routine; [minor] made HTML from profiler more pretty
Dan
parents: 381
diff changeset
  4971
      $html .= '  <td class="row2">Called from:</td>' . "\n";
2ccb55995aef Profiling enabled for RenderMan's wikiformat routine; [minor] made HTML from profiler more pretty
Dan
parents: 381
diff changeset
  4972
      $html .= '  <td class="row1">' . htmlspecialchars($entry['backtrace']) . '</td>' . "\n";
2ccb55995aef Profiling enabled for RenderMan's wikiformat routine; [minor] made HTML from profiler more pretty
Dan
parents: 381
diff changeset
  4973
      $html .= '</tr>' . "\n";
372
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4974
    }
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4975
    
424
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4976
    if ( $entry['mem'] )
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4977
    {
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4978
      $html .= '<tr>' . "\n";
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4979
      $html .= '  <td class="row2">Total mem usage:</td>' . "\n";
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4980
      $html .= '  <td class="row1">' . htmlspecialchars($entry['mem']) . ' (bytes)</td>' . "\n";
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4981
      $html .= '</tr>' . "\n";
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4982
    }
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4983
    
382
2ccb55995aef Profiling enabled for RenderMan's wikiformat routine; [minor] made HTML from profiler more pretty
Dan
parents: 381
diff changeset
  4984
    $html .= "\n";
2ccb55995aef Profiling enabled for RenderMan's wikiformat routine; [minor] made HTML from profiler more pretty
Dan
parents: 381
diff changeset
  4985
    
372
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4986
    $time_last = $entry['time'];
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4987
  }
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4988
  $html .= '</table></div>';
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4989
  
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4990
  return $html;
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4991
}
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4992
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4993
// Might as well start the profiler, it has no external dependencies except from this file.
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4994
profiler_start();
5bd429428101 A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents: 371
diff changeset
  4995
376
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  4996
/**
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  4997
 * Returns the number of times a character occurs in a given string.
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  4998
 * @param string Haystack
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  4999
 * @param string Needle
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5000
 * @return int
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5001
 */
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5002
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5003
function get_char_count($string, $char)
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5004
{
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5005
  $char = substr($char, 0, 1);
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5006
  $count = 0;
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5007
  for ( $i = 0; $i < strlen($string); $i++ )
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5008
  {
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5009
    if ( $string{$i} == $char )
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5010
      $count++;
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5011
  }
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5012
  return $count;
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5013
}
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5014
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5015
/**
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5016
 * Returns the number of lines in a string.
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5017
 * @param string String to check
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5018
 * @return int
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5019
 */
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5020
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5021
function get_line_count($string)
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5022
{
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5023
  return ( get_char_count($string, "\n") ) + 1;
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5024
}
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5025
481
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5026
if ( !function_exists('sys_get_temp_dir') )
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5027
{
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5028
    // Based on http://www.phpit.net/
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5029
    // article/creating-zip-tar-archives-dynamically-php/2/
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5030
    /**
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5031
     * Attempt to get the system's temp directory.
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5032
     * @return string or bool false on failure
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5033
     */
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5034
    
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5035
    function sys_get_temp_dir()
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5036
    {
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5037
        // Try to get from environment variable
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5038
        if ( !empty($_ENV['TMP']) )
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5039
        {
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5040
            return realpath( $_ENV['TMP'] );
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5041
        }
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5042
        else if ( !empty($_ENV['TMPDIR']) )
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5043
        {
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5044
            return realpath( $_ENV['TMPDIR'] );
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5045
        }
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5046
        else if ( !empty($_ENV['TEMP']) )
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5047
        {
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5048
            return realpath( $_ENV['TEMP'] );
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5049
        }
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5050
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5051
        // Detect by creating a temporary file
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5052
        else
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5053
        {
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5054
            // Try to use system's temporary directory
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5055
            // as random name shouldn't exist
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5056
            $temp_file = tempnam( md5(uniqid(rand(), TRUE)), '' );
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5057
            if ( $temp_file )
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5058
            {
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5059
                $temp_dir = realpath( dirname($temp_file) );
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5060
                unlink( $temp_file );
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5061
                return $temp_dir;
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5062
            }
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5063
            else
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5064
            {
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5065
                return FALSE;
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5066
            }
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5067
        }
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5068
    }
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5069
}
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5070
541
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5071
/**
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5072
 * Grabs and processes all rank information directly from the database.
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5073
 */
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5074
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5075
function fetch_rank_data()
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5076
{
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5077
  global $db, $session, $paths, $template, $plugins; // Common objects
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5078
  global $lang;
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5079
  
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5080
  $sql = $session->generate_rank_sql();
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5081
  $q = $db->sql_query($sql);
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5082
  if ( !$q )
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5083
    $db->_die();
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5084
  
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5085
  $GLOBALS['user_ranks'] = array();
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5086
  global $user_ranks;
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5087
  
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5088
  while ( $row = $db->fetchrow($q) )
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5089
  {
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5090
    $user_id = $row['user_id'];
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5091
    $username = $row['username'];
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5092
    $row = $session->calculate_user_rank($row);
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5093
    $user_ranks[$username] =  $row;
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5094
    $user_ranks[$user_id]  =& $user_ranks[$username];
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5095
  }
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5096
}
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5097
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5098
/**
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5099
 * Caches the computed user rank information.
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5100
 */
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5101
573
43e7254afdb4 Renamed some functions (that were new in this release anyway) due to compatibility broken with PunBB bridge
Dan
parents: 566
diff changeset
  5102
function generate_cache_userranks()
541
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5103
{
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5104
  global $db, $session, $paths, $template, $plugins; // Common objects
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5105
  global $lang;
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5106
  global $user_ranks;
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5107
  
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5108
  fetch_rank_data();
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5109
  
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5110
  $user_ranks_stripped = array();
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5111
  foreach ( $user_ranks as $key => $value )
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5112
  {
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5113
    if ( is_int($key) )
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5114
      $user_ranks_stripped[$key] = $value;
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5115
  }
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5116
  
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5117
  $ranks_exported = "<?php\n\n// Automatically generated user rank cache.\nglobal \$user_ranks;\n" . '$user_ranks = ' . $lang->var_export_string($user_ranks_stripped) . ';';
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5118
  $uid_map = array();
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5119
  foreach ( $user_ranks as $id => $row )
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5120
  {
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5121
    if ( !is_int($id) )
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5122
    {
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5123
      $username = $id;
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5124
      continue;
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5125
    }
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5126
    
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5127
    $un_san = addslashes($username);
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5128
    $ranks_exported .= "\n\$user_ranks['$un_san'] =& \$user_ranks[{$row['user_id']}];";
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5129
  }
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5130
  $ranks_exported .= "\n\ndefine('ENANO_RANKS_CACHE_LOADED', 1); \n?>";
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5131
  
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5132
  // open ranks cache file
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5133
  $fh = @fopen( ENANO_ROOT . '/cache/cache_ranks.php', 'w' );
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5134
  if ( !$fh )
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5135
    return false;
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5136
  fwrite($fh, $ranks_exported);
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5137
  fclose($fh);
613
c08670a77871 Completed work (we hope) on CacheManager admin page
Dan
parents: 610
diff changeset
  5138
  
c08670a77871 Completed work (we hope) on CacheManager admin page
Dan
parents: 610
diff changeset
  5139
  return true;
541
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5140
}
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5141
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5142
/**
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5143
 * Loads the rank data, first attempting the cache file and then the database.
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5144
 */
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5145
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5146
function load_rank_data()
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5147
{
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5148
  if ( file_exists( ENANO_ROOT . '/cache/cache_ranks.php' ) )
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5149
  {
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5150
    @include(ENANO_ROOT . '/cache/cache_ranks.php');
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5151
  }
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5152
  if ( !defined('ENANO_RANKS_CACHE_LOADED') )
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5153
  {
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5154
    fetch_rank_data();
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5155
  }
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5156
}
acb7e23b6ffa Massive commit with various changes. Added user ranks system (no admin interface yet) and ability for users to have custom user titles. Made cron framework accept fractions of hours through floating-point intervals. Modifed ACL editor to use miniPrompt framework for close confirmation box. Made avatar system use a special page as opposed to fetching the files directly for caching reasons.
Dan
parents: 536
diff changeset
  5157
599
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5158
/**
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5159
 * Function to purge all caches used in Enano. Useful for upgrades, maintenance, backing the site up, etc.
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5160
 */
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5161
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5162
function purge_all_caches()
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5163
{
613
c08670a77871 Completed work (we hope) on CacheManager admin page
Dan
parents: 610
diff changeset
  5164
  global $cache;
599
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5165
  if ( $dh = opendir(ENANO_ROOT . '/cache') )
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5166
  {
613
c08670a77871 Completed work (we hope) on CacheManager admin page
Dan
parents: 610
diff changeset
  5167
    $cache->purge('page_meta');
c08670a77871 Completed work (we hope) on CacheManager admin page
Dan
parents: 610
diff changeset
  5168
    $cache->purge('anon_sidebar');
c08670a77871 Completed work (we hope) on CacheManager admin page
Dan
parents: 610
diff changeset
  5169
    $cache->purge('plugins');
953
323c4cd1aa37 Made some more changes to the way namespaces are handled, for optimization purposes. This is a bit of a structural reorganization: $paths->pages is obsoleted in its entirety; calculating page existence and metadata is now the job of the Namespace_* backend class. There are many things in PageProcessor that should be reorganized, and page actions in general should really be rethought. This is probably the beginning of a long process that will be taking place over the course of the betas.
Dan
parents: 915
diff changeset
  5170
    $cache->purge('wiki_edit_notice');
613
c08670a77871 Completed work (we hope) on CacheManager admin page
Dan
parents: 610
diff changeset
  5171
    
599
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5172
    $data_files = array(
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5173
        'aes_decrypt.php',
613
c08670a77871 Completed work (we hope) on CacheManager admin page
Dan
parents: 610
diff changeset
  5174
        // ranks cache is stored using a custom engine (not enano's default cache)
599
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5175
        'cache_ranks.php'
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5176
      );
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5177
    while ( $file = @readdir($dh) )
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5178
    {
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5179
      $fullpath = ENANO_ROOT . "/cache/$file";
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5180
      // we don't want to mess with directories
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5181
      if ( !is_file($fullpath) )
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5182
        continue;
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5183
      
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5184
      // data files
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5185
      if ( in_array($file, $data_files) )
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5186
        unlink($fullpath);
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5187
      // template files
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5188
      else if ( preg_match('/\.(?:tpl|css)\.php$/', $file) )
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5189
        unlink($fullpath);
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5190
      // compressed javascript
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5191
      else if ( preg_match('/^jsres_(?:[A-z0-9_-]+)\.js\.json$/', $file) )
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5192
        unlink($fullpath);
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5193
      // tinymce stuff
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5194
      else if ( preg_match('/^tiny_mce_(?:[a-f0-9]+)\.gz$/', $file) )
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5195
        unlink($fullpath);
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5196
      // language files
613
c08670a77871 Completed work (we hope) on CacheManager admin page
Dan
parents: 610
diff changeset
  5197
      else if ( preg_match('/^lang_json_(?:[a-f0-9]+?)\.php$/', $file) || preg_match('/^(?:cache_)?lang_(?:[0-9]+?)\.php$/', $file) )
599
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5198
        unlink($fullpath);
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5199
    }
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5200
    return true;
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5201
  }
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5202
  return false;
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5203
}
52bffa6c499f Added purge_all_caches() routine to functions.php. Temporary, will be discarded once the new cache code is implemented
Dan
parents: 593
diff changeset
  5204
851
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5205
/**
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5206
 * Implementation of the "which" command in native PHP.
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5207
 * @param string command
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5208
 * @return string path to executable, or false on failure
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5209
 */
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5210
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5211
function which($executable)
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5212
{
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5213
  $path = ( isset($_ENV['PATH']) ) ? $_ENV['PATH'] : ( isset($_SERVER['PATH']) ? $_SERVER['PATH'] : false );
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5214
  if ( !$path )
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5215
    // couldn't get OS's PATH
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5216
    return false;
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5217
    
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5218
  $win32 = ( PHP_OS == 'WINNT' || PHP_OS == 'WIN32' );
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5219
  $extensions = $win32 ? array('.exe', '.com', '.bat') : array('');
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5220
  $separator = $win32 ? ';' : ':';
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5221
  $paths = explode($separator, $path);
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5222
  foreach ( $paths as $dir )
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5223
  {
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5224
    foreach ( $extensions as $ext )
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5225
    {
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5226
      $fullpath = "$dir/{$executable}{$ext}";
1133
6e51ca5e29eb which(): added silencer to shut up errors on servers with open_basedir restriction
Dan
parents: 1123
diff changeset
  5227
      if ( @file_exists($fullpath) && @is_executable($fullpath) )
851
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5228
      {
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5229
        return $fullpath;
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5230
      }
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5231
    }
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5232
  }
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5233
  return false;
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5234
}
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5235
857
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5236
/**
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5237
 * Properly test a file or directory for writability. Used in various places around installer.
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5238
 * @param string File or directory to test
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5239
 * @return bool
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5240
 */
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5241
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5242
function write_test($filename)
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5243
{
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5244
  // We need to actually _open_ the file to make sure it can be written, because sometimes this fails even when is_writable() returns
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5245
  // true on Windows/IIS servers. Don't ask me why.
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5246
  
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5247
  $file = ENANO_ROOT . '/' . $filename;
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5248
  if ( is_dir($file) )
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5249
  {
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5250
    $file = rtrim($file, '/') . '/' . 'enanoinstalltest.txt';
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5251
    if ( file_exists($file) )
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5252
    {
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5253
      $fp = @fopen($file, 'a+');
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5254
      if ( !$fp )
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5255
        return false;
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5256
      fclose($fp);
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5257
      unlink($file);
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5258
      return true;
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5259
    }
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5260
    else
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5261
    {
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5262
      $fp = @fopen($file, 'w');
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5263
      if ( !$fp )
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5264
        return false;
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5265
      fclose($fp);
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5266
      unlink($file);
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5267
      return true;
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5268
    }
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5269
  }
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5270
  else
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5271
  {
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5272
    if ( file_exists($file) )
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5273
    {
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5274
      $fp = @fopen($file, 'a+');
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5275
      if ( !$fp )
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5276
        return false;
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5277
      fclose($fp);
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5278
      return true;
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5279
    }
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5280
    else
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5281
    {
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5282
      $fp = @fopen($file, 'w');
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5283
      if ( !$fp )
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5284
        return false;
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5285
      fclose($fp);
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5286
      return true;
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5287
    }
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5288
  }
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5289
}
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5290
1183
15957df91ea4 OK screw that, put the crypto backend check in functions.
Dan
parents: 1167
diff changeset
  5291
/**
15957df91ea4 OK screw that, put the crypto backend check in functions.
Dan
parents: 1167
diff changeset
  5292
 * Get the appropriate crypto backend for this server
15957df91ea4 OK screw that, put the crypto backend check in functions.
Dan
parents: 1167
diff changeset
  5293
 * @return string
15957df91ea4 OK screw that, put the crypto backend check in functions.
Dan
parents: 1167
diff changeset
  5294
 */
15957df91ea4 OK screw that, put the crypto backend check in functions.
Dan
parents: 1167
diff changeset
  5295
15957df91ea4 OK screw that, put the crypto backend check in functions.
Dan
parents: 1167
diff changeset
  5296
function install_get_crypto_backend()
15957df91ea4 OK screw that, put the crypto backend check in functions.
Dan
parents: 1167
diff changeset
  5297
{
15957df91ea4 OK screw that, put the crypto backend check in functions.
Dan
parents: 1167
diff changeset
  5298
  $crypto_backend = 'none';
15957df91ea4 OK screw that, put the crypto backend check in functions.
Dan
parents: 1167
diff changeset
  5299
15957df91ea4 OK screw that, put the crypto backend check in functions.
Dan
parents: 1167
diff changeset
  5300
  // Extension test: BCMath
15957df91ea4 OK screw that, put the crypto backend check in functions.
Dan
parents: 1167
diff changeset
  5301
  if ( function_exists('bcadd') )
15957df91ea4 OK screw that, put the crypto backend check in functions.
Dan
parents: 1167
diff changeset
  5302
    $crypto_backend = 'bcmath';
15957df91ea4 OK screw that, put the crypto backend check in functions.
Dan
parents: 1167
diff changeset
  5303
  
15957df91ea4 OK screw that, put the crypto backend check in functions.
Dan
parents: 1167
diff changeset
  5304
  // Extension test: Big_Int
15957df91ea4 OK screw that, put the crypto backend check in functions.
Dan
parents: 1167
diff changeset
  5305
  if ( function_exists('bi_from_str') )
15957df91ea4 OK screw that, put the crypto backend check in functions.
Dan
parents: 1167
diff changeset
  5306
    $crypto_backend = 'bigint';
15957df91ea4 OK screw that, put the crypto backend check in functions.
Dan
parents: 1167
diff changeset
  5307
  
15957df91ea4 OK screw that, put the crypto backend check in functions.
Dan
parents: 1167
diff changeset
  5308
  // Extension test: GMP
15957df91ea4 OK screw that, put the crypto backend check in functions.
Dan
parents: 1167
diff changeset
  5309
  if ( function_exists('gmp_init') )
15957df91ea4 OK screw that, put the crypto backend check in functions.
Dan
parents: 1167
diff changeset
  5310
    $crypto_backend = 'gmp';
15957df91ea4 OK screw that, put the crypto backend check in functions.
Dan
parents: 1167
diff changeset
  5311
  
15957df91ea4 OK screw that, put the crypto backend check in functions.
Dan
parents: 1167
diff changeset
  5312
  return $crypto_backend;
15957df91ea4 OK screw that, put the crypto backend check in functions.
Dan
parents: 1167
diff changeset
  5313
}
15957df91ea4 OK screw that, put the crypto backend check in functions.
Dan
parents: 1167
diff changeset
  5314