includes/functions.php
author Dan
Sat, 12 Dec 2009 17:30:46 -0500
changeset 1164 1cd9e6df6f27
parent 1159 a1cca4472a58
child 1167 3c73e1b6d33f
permissions -rw-r--r--
Installer: cleaned up CSS header; updated comments in config.php to not say that passwords are stored with AES (as they are now stored with HMAC-SHA1)
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();
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   977
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   978
  $paths->cpage['name'] = $t;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   979
  $template->tpl_strings['PAGE_NAME'] = $t;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   980
  $template->header();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   981
  echo $p;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   982
  $template->footer();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   983
  $db->close();
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   984
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   985
  exit;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   986
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   987
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   988
/**
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   989
 * 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
   990
 * @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
   991
 * @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
   992
 */
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
   993
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   994
function grinding_halt($t, $p)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   995
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
   996
  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
   997
  
fb31c951d3a2 Fixed some rather major bugs in the registration system, this will need a release followup
Dan
parents: 112
diff changeset
   998
  if ( !defined('scriptPath') )
fb31c951d3a2 Fixed some rather major bugs in the registration system, this will need a release followup
Dan
parents: 112
diff changeset
   999
    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
  1000
125
fb31c951d3a2 Fixed some rather major bugs in the registration system, this will need a release followup
Dan
parents: 112
diff changeset
  1001
  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
  1002
    $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
  1003
  
1092
3b97242ada21 Functions: silenced PHP warnings on ob_* functions
Dan
parents: 1081
diff changeset
  1004
  if ( @ob_get_status() )
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1005
    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
  1006
  
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
  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
  1008
  {
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
    // 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
  1010
    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
  1011
    // 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
  1012
    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
  1013
    // 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
  1014
    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
  1015
    // 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
  1016
    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
  1017
    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
  1018
    // 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
  1019
    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
  1020
    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
  1021
    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
  1022
  }
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
  1023
  $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
  1024
  $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
  1025
  
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1026
  $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
  1027
  $tpl->load_theme($theme, $style);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1028
  $tpl->tpl_strings['SITE_NAME'] = 'Critical error';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1029
  $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
  1030
  $tpl->tpl_strings['COPYRIGHT'] = 'Unable to retrieve copyright information';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1031
  $tpl->tpl_strings['PAGE_NAME'] = $t;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1032
  $tpl->header();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1033
  echo $p;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1034
  $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
  1035
  
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1036
  exit;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1037
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1038
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1039
/**
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1040
 * 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
  1041
 */
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
function show_category_info()
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1044
{
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
  1045
  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
  1046
}
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
 * 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
  1050
 */
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1051
667
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
  1052
function show_file_info($page = false)
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1053
{
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
  1054
  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
  1055
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1056
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1057
/**
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1058
 * 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
  1059
 */
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1060
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1061
function display_page_headers()
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1062
{
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
  1063
  // Deprecated.
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1064
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1065
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1066
/**
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1067
 * 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
  1068
 */
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1069
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1070
function display_page_footers()
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1071
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1072
  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
  1073
  
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
  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
  1075
  {
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
    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
  1077
  }
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
  
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1079
  $code = $plugins->setHook('send_page_footers');
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1080
  foreach ( $code as $cmd )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1081
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1082
    eval($cmd);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1083
  }
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
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1086
/**
963
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1087
 * 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
  1088
 * @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
  1089
 * @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
  1090
 */
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
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
  1093
{
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1094
  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
  1095
  global $lang, $output;
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1096
  
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1097
  $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
  1098
  $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
  1099
  $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
  1100
  
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1101
  $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
  1102
  
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1103
  $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
  1104
    
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1105
  $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
  1106
  $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
  1107
          <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
  1108
            <tr>
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1109
              <td valign="top">
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1110
                <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
  1111
              </td>
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1112
              <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
  1113
                ' . $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
  1114
              </td>
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1115
            </tr>
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1116
          </table>
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1117
        </div>
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1118
        <br />
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1119
        <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
  1120
  
b572ce1114f1 Wikitext redirects should work again + get_redirect() added to Namespace_* to allow plugins to extend
Dan
parents: 953
diff changeset
  1121
  $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
  1122
}
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
/**
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1125
 * 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
  1126
 * @param socket A socket resource
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1127
 * @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
  1128
 */
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
function smtp_get_response($socket, $response, $line = __LINE__)
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1131
{
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1132
  $server_response = '';
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1133
  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
  1134
  {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1135
    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
  1136
    {
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1137
      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
  1138
    }
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1139
  }
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1140
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1141
  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
  1142
  {
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1143
    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
  1144
  }
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1145
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1146
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1147
/**
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1148
 * 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
  1149
 * @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
  1150
 * @param string Subject line
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1151
 * @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
  1152
 * @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
  1153
 */
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1154
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1155
function smtp_send_email($to, $subject, $message, $from)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1156
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1157
  return smtp_send_email_core($to, $subject, $message, "From: <$from>\n");
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1158
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1159
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1160
/**
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1161
 * 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
  1162
 * @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
  1163
 * @param string Subject line
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1164
 * @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
  1165
 * @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
  1166
 * @copyright (C) phpBB Group
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1167
 * @license GPL
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1168
 */
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1169
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1170
function smtp_send_email_core($mail_to, $subject, $message, $headers = '')
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1171
{
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1172
  // 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
  1173
  $message = preg_replace("#(?<!\r)\n#si", "\r\n", $message);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1174
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1175
  if ($headers != '')
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1176
  {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1177
    if (is_array($headers))
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1178
    {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1179
      if (sizeof($headers) > 1)
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1180
      {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1181
        $headers = join("\n", $headers);
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1182
      }
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1183
      else
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1184
      {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1185
        $headers = $headers[0];
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1186
      }
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
    $headers = chop($headers);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1189
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1190
    // 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
  1191
    $headers = preg_replace('#(?<!\r)\n#si', "\r\n", $headers);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1192
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1193
    // 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
  1194
    // 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
  1195
    // 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
  1196
    $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
  1197
    @reset($header_array);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1198
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1199
    $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
  1200
    $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
  1201
    $bcc = '';
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1202
    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
  1203
    {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1204
      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
  1205
      {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1206
        $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
  1207
      }
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1208
      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
  1209
      {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1210
        $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
  1211
        $header = '';
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1212
      }
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1213
      $headers .= ($header != '') ? $header . "\r\n" : '';
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1214
    }
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1215
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1216
    $headers = chop($headers);
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1217
    $cc = explode(', ', $cc);
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1218
    $bcc = explode(', ', $bcc);
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1219
  }
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1220
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1221
  if (trim($subject) == '')
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1222
  {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1223
    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
  1224
  }
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1225
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1226
  if (trim($message) == '')
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1227
  {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1228
    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
  1229
  }
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1230
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1231
  // setup SMTP
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1232
  $host = getConfig('smtp_server');
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1233
  if ( empty($host) )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1234
    return 'No smtp_host in config';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1235
  if ( strstr($host, ':' ) )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1236
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1237
    $n = explode(':', $host);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1238
    $smtp_host = $n[0];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1239
    $port = intval($n[1]);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1240
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1241
  else
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1242
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1243
    $smtp_host = $host;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1244
    $port = 25;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1245
  }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1246
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1247
  $smtp_user = getConfig('smtp_user');
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1248
  $smtp_pass = getConfig('smtp_password');
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1249
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1250
  // 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
  1251
  // it already.
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1252
  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
  1253
  {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1254
    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
  1255
  }
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
  // Wait for reply
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1258
  smtp_get_response($socket, "220", __LINE__);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1259
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1260
  // 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
  1261
  // 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
  1262
  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
  1263
  {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1264
    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
  1265
    smtp_get_response($socket, "250", __LINE__);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1266
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1267
    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
  1268
    smtp_get_response($socket, "334", __LINE__);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1269
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1270
    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
  1271
    smtp_get_response($socket, "334", __LINE__);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1272
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1273
    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
  1274
    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
  1275
  }
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1276
  else
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1277
  {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1278
    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
  1279
    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
  1280
  }
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1281
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1282
  // 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
  1283
  // 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
  1284
  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
  1285
  smtp_get_response($socket, "250", __LINE__);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1286
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1287
  // 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
  1288
  $to_header = '';
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1289
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1290
  // 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
  1291
  $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
  1292
  if (preg_match('#[^ ]+\@[^ ]+#', $mail_to))
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1293
  {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1294
    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
  1295
    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
  1296
  }
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1297
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1298
  // 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
  1299
  @reset($bcc);
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1300
  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
  1301
  {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1302
    // 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
  1303
    $bcc_address = trim($bcc_address);
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1304
    if (preg_match('#[^ ]+\@[^ ]+#', $bcc_address))
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1305
    {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1306
      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
  1307
      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
  1308
    }
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1309
  }
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1310
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1311
  @reset($cc);
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1312
  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
  1313
  {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1314
    // 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
  1315
    $cc_address = trim($cc_address);
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1316
    if (preg_match('#[^ ]+\@[^ ]+#', $cc_address))
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1317
    {
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1318
      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
  1319
      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
  1320
    }
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1321
  }
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1322
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1323
  // 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
  1324
  enano_fputs($socket, "DATA\r\n");
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1325
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1326
  // 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
  1327
  smtp_get_response($socket, "354", __LINE__);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1328
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1329
  // Send the Subject Line...
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1330
  enano_fputs($socket, "Subject: $subject\r\n");
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1331
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1332
  // Now the To Header.
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1333
  enano_fputs($socket, "To: $mail_to\r\n");
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1334
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1335
  // Now any custom headers....
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1336
  enano_fputs($socket, "$headers\r\n\r\n");
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1337
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1338
  // 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
  1339
  enano_fputs($socket, "$message\r\n");
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1340
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1341
  // 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
  1342
  enano_fputs($socket, ".\r\n");
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1343
  smtp_get_response($socket, "250", __LINE__);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1344
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1345
  // 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
  1346
  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
  1347
  fclose($socket);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1348
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1349
  return TRUE;
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1350
}
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
 * Tell which version of Enano we're running.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1354
 * @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
  1355
 * @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
  1356
 * @return string
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1357
 */
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
function enano_version($long = false, $no_nightly = false)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1360
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1361
  $r = getConfig('enano_version');
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1362
  $rc = ( $long ) ? ' release candidate ' : 'RC';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1363
  $b = ( $long ) ? ' beta ' : 'b';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1364
  $a = ( $long ) ? ' alpha ' : 'a';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1365
  if($v = getConfig('enano_rc_version')) $r .= $rc.$v;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1366
  if($v = getConfig('enano_beta_version')) $r .= $b.$v;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1367
  if($v = getConfig('enano_alpha_version')) $r .= $a.$v;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1368
  if ( defined('ENANO_NIGHTLY') && !$no_nightly )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1369
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1370
    $nightlytag  = ENANO_NIGHTLY_MONTH . '-' . ENANO_NIGHTLY_DAY . '-' . ENANO_NIGHTLY_YEAR;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1371
    $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
  1372
    $r = ( $long ) ? $r . $nightlylong : $r . '-nightly-' . $nightlytag;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1373
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1374
  return $r;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1375
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1376
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1377
/**
132
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  1378
 * 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
  1379
 * @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
  1380
 */
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  1381
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  1382
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
  1383
{
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  1384
  $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
  1385
      '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
  1386
      '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
  1387
      '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
  1388
      '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
  1389
      '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
  1390
      '1.0.1.1'=> 'Loch Ness internal bugfix build',
145
6f0bbf88c325 Rebrand for 1.0.2b1
Dan
parents: 142
diff changeset
  1391
      '1.0.2b1'=> 'Coblynau unstable',
317
f8356d9c3481 Rebrand as 1.0.3 (Dyrad)
Dan
parents: 315
diff changeset
  1392
      '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
  1393
      '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
  1394
      '1.1.1'  => 'Caoineag alpha 1',
411
d1a95497b68f Rebrand as 1.1.2; made upgrade framework functional
Dan
parents: 406
diff changeset
  1395
      '1.1.2'  => 'Caoineag alpha 2',
436
242353360e37 Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents: 424
diff changeset
  1396
      '1.1.3'  => 'Caoineag alpha 3',
536
218a627eb53e Rebrand as 1.1.4 (Caoineag alpha 4)
Dan
parents: 533
diff changeset
  1397
      '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
  1398
      '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
  1399
      '1.1.6'  => 'Caoineag beta 1',
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
  1400
      '1.1.7'  => 'Caoineag beta 2'
132
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  1401
    );
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  1402
  $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
  1403
  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
  1404
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  1405
    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
  1406
  }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  1407
  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
  1408
}
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  1409
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  1410
/**
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1411
 * 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
  1412
 * @param string Message to send
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1413
 */
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1414
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1415
function _die($t) {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1416
  $_ob = 'document.getElementById("ajaxEditContainer").innerHTML = unescape(\'' . rawurlencode('' . $t . '') . '\')';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1417
  die($_ob);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1418
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1419
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1420
/**
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1421
 * 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
  1422
 * @param string Message to send
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1423
 */
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1424
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1425
function jsdie($text) {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1426
  global $db, $session, $paths, $template, $plugins; // Common objects
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1427
  $text = rawurlencode($text . "\n\nSQL Backtrace:\n" . $db->sql_backtrace());
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1428
  echo 'document.getElementById("ajaxEditContainer").innerHTML = unescape(\''.$text.'\');';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1429
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1430
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1431
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1432
 * Capitalizes the first letter of a string
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1433
 * @param $text string the text to be transformed
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1434
 * @return string
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1435
 */
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1436
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1437
function capitalize_first_letter($text)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1438
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1439
  return strtoupper(substr($text, 0, 1)) . substr($text, 1);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1440
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1441
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1442
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1443
 * Checks if a value in a bitfield is on or off
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1444
 * @param $bitfield int the bit-field value
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1445
 * @param $value int the value to switch off
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1446
 * @return bool
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1447
 */
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1448
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1449
function is_bit($bitfield, $value)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1450
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1451
  return ( $bitfield & $value ) ? true : false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1452
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1453
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1454
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1455
 * Trims spaces/newlines from the beginning and end of a string
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1456
 * @param $text the text to process
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1457
 * @return string
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1458
 */
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1459
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1460
function trim_spaces($text)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1461
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1462
  $d = true;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1463
  while($d)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1464
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1465
    $c = substr($text, 0, 1);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1466
    $a = substr($text, strlen($text)-1, strlen($text));
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1467
    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
  1468
    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
  1469
    else $d = false;
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
  return $text;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1472
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1473
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1474
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1475
 * Enano-ese equivalent of str_split() which is only found in PHP5
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1476
 * @param $text string the text to split
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1477
 * @param $inc int size of each block
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1478
 * @return array
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1479
 */
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1480
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1481
function enano_str_split($text, $inc = 1)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1482
{
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1483
  if($inc < 1)
14
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1484
  {
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1485
    return false;
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1486
  }
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1487
  if($inc >= strlen($text))
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1488
  {
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1489
    return Array($text);
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1490
  }
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1491
  $len = ceil(strlen($text) / $inc);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1492
  $ret = Array();
14
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1493
  for ( $i = 0; $i < strlen($text); $i = $i + $inc )
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1494
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1495
    $ret[] = substr($text, $i, $inc);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1496
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1497
  return $ret;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1498
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1499
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
 * Converts a hexadecimal number to a binary string.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1502
 * @param text string hexadecimal number
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1503
 * @return string
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
function hex2bin($text)
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
  $arr = enano_str_split($text, 2);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1508
  $ret = '';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1509
  for ($i=0; $i<sizeof($arr); $i++)
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
    $ret .= chr(hexdec($arr[$i]));
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
  return $ret;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1514
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1515
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
 * 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
  1518
 * @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
  1519
 * @return mixed
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1520
 */
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1521
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1522
function enano_debug_print_backtrace($return = false)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1523
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1524
  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
  1525
  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
  1526
    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
  1527
  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
  1528
  {
5d003b6c9e89 Added demo mode functionality to various parts of Enano (unlocked only with a plugin) and fixed groups table
Dan
parents: 16
diff changeset
  1529
    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
  1530
  }
5d003b6c9e89 Added demo mode functionality to various parts of Enano (unlocked only with a plugin) and fixed groups table
Dan
parents: 16
diff changeset
  1531
  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
  1532
  {
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
    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
  1534
  }
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
  1535
  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
  1536
    echo '</pre>';
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1537
  $c = ob_get_contents();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1538
  ob_end_clean();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1539
  if($return) return $c;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1540
  else echo $c;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1541
  return null;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1542
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1543
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1544
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1545
 * Like rawurlencode(), but encodes all characters
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1546
 * @param string $text the text to encode
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1547
 * @param optional string $prefix text before each hex character
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1548
 * @param optional string $suffix text after each hex character
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1549
 * @return string
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1550
 */
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1551
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1552
function hexencode($text, $prefix = '%', $suffix = '')
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1553
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1554
  $arr = enano_str_split($text);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1555
  $r = '';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1556
  foreach($arr as $a)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1557
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1558
    $nibble = (string)dechex(ord($a));
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1559
    if(strlen($nibble) == 1) $nibble = '0' . $nibble;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1560
    $r .= $prefix . $nibble . $suffix;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1561
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1562
  return $r;
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
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1565
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1566
 * Enano-ese equivalent of get_magic_quotes_gpc()
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1567
 * @return bool
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1568
 */
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1569
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1570
function enano_get_magic_quotes_gpc()
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
  if(function_exists('get_magic_quotes_gpc'))
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1573
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1574
    return ( get_magic_quotes_gpc() == 1 );
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1575
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1576
  else
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
    return ( strtolower(@ini_get('magic_quotes_gpc')) == '1' );
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
}
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
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1583
 * Recursive stripslashes()
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1584
 * @param array
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1585
 * @return array
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1586
 */
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1587
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1588
function stripslashes_recurse($arr)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1589
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1590
  foreach($arr as $k => $xxxx)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1591
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1592
    $val =& $arr[$k];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1593
    if(is_string($val))
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1594
      $val = stripslashes($val);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1595
    elseif(is_array($val))
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1596
      $val = stripslashes_recurse($val);
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
  return $arr;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1599
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1600
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1601
/**
14
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1602
 * 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
  1603
 * @param array
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1604
 * @return array
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1605
 */
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1606
14
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1607
function strip_nul_chars($arr)
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1608
{
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1609
  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
  1610
  {
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1611
    $val =& $arr[$k];
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1612
    if(is_string($val))
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1613
      $val = str_replace("\000", '', $val);
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1614
    elseif(is_array($val))
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1615
      $val = strip_nul_chars($val);
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
  return $arr;
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1618
}
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1619
ce6053bb48d8 Security: NUL characters are now stripped from GPC; several code readability standards changes
Dan
parents: 1
diff changeset
  1620
/**
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1621
 * 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
  1622
 * @ignore - this doesn't work too well in my tests
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1623
 * @todo port version from the PHP manual
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1624
 * @return void
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1625
 */
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1626
function strip_magic_quotes_gpc()
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1627
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1628
  if(enano_get_magic_quotes_gpc())
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1629
  {
40
723bb7acf914 Fixed a lot of bugs with Safari and Konqueror; improved Opera compatibility
Dan
parents: 38
diff changeset
  1630
    $_POST    = stripslashes_recurse($_POST);
723bb7acf914 Fixed a lot of bugs with Safari and Konqueror; improved Opera compatibility
Dan
parents: 38
diff changeset
  1631
    $_GET     = stripslashes_recurse($_GET);
723bb7acf914 Fixed a lot of bugs with Safari and Konqueror; improved Opera compatibility
Dan
parents: 38
diff changeset
  1632
    $_COOKIE  = stripslashes_recurse($_COOKIE);
723bb7acf914 Fixed a lot of bugs with Safari and Konqueror; improved Opera compatibility
Dan
parents: 38
diff changeset
  1633
    $_REQUEST = stripslashes_recurse($_REQUEST);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1634
  }
40
723bb7acf914 Fixed a lot of bugs with Safari and Konqueror; improved Opera compatibility
Dan
parents: 38
diff changeset
  1635
  $_POST    = strip_nul_chars($_POST);
723bb7acf914 Fixed a lot of bugs with Safari and Konqueror; improved Opera compatibility
Dan
parents: 38
diff changeset
  1636
  $_GET     = strip_nul_chars($_GET);
723bb7acf914 Fixed a lot of bugs with Safari and Konqueror; improved Opera compatibility
Dan
parents: 38
diff changeset
  1637
  $_COOKIE  = strip_nul_chars($_COOKIE);
723bb7acf914 Fixed a lot of bugs with Safari and Konqueror; improved Opera compatibility
Dan
parents: 38
diff changeset
  1638
  $_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
  1639
  $_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
  1640
  $_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
  1641
  $_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
  1642
  $_REQUEST = decode_unicode_array($_REQUEST);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1643
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1644
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1645
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1646
 * 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
  1647
 * @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
  1648
 * @return string
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1649
 */
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
  1650
 
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1651
function compress_bitfield($bits)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1652
{
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
  1653
  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
  1654
    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
  1655
  
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
  $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
  1657
  $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
  1658
  $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
  1659
  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
  1660
  {
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
    $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
  1662
    if ( $cbit !== $current || $clen == 127 || $i == strlen($bits) - 1 )
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1663
    {
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
  1664
      if ( $i == strlen($bits) - 1 && $cbit === $current )
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1665
      {
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
  1666
        $clen++;
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1667
      }
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
  1668
      // 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
  1669
      $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
  1670
      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
  1671
        $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
  1672
      $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
  1673
      
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
      if ( $i == strlen($bits) - 1 && $cbit !== $current )
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1675
      {
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
  1676
        $out .= ( $cbit === 1 ) ? chr(0x81) : chr(0x1);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1677
      }
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
  1678
      
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
      // 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
  1680
      $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
  1681
      $clen = 0;
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1682
    }
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
  1683
    $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
  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
  $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
  1686
  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
  1687
    $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
  1688
  return "cbf2:{$crc}" . hexencode($out, '', '');
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1689
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1690
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
  1691
// 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
  1692
// $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
  1693
// 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
  1694
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
 * Uncompresses a bitfield compressed with compress_bitfield()
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1697
 * @param string $bits the compressed bitfield
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1698
 * @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
  1699
 */
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1700
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1701
function uncompress_bitfield($bits)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1702
{
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
  1703
  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
  1704
  {
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
  1705
    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
  1706
  }
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
  1707
  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
  1708
  {
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
    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
  1710
    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
  1711
  }
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
  $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
  1713
  $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
  1714
  $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
  1715
  $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
  1716
  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
  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
    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
  1719
    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
  1720
  }
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
  $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
  1722
  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
  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
    $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
  1725
    $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
  1726
    $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
  1727
    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
  1728
    {
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
      $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
  1730
    }
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
  }
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
  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
  1733
}
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
/**
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
 * 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
  1737
 * @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
  1738
 * @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
  1739
 * @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
  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
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
  1743
{
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1744
  if(substr($bits, 0, 4) != 'cbf:')
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1745
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1746
    echo __FUNCTION__.'(): ERROR: Invalid stream';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1747
    return false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1748
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1749
  $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
  1750
  $crc = substr($bits, strpos($bits, 'crc=')+4, 8);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1751
  $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
  1752
  $data = explode(',', $data);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1753
  foreach($data as $a => $b)
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
    $d =& $data[$a];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1756
    $char = substr($d, 0, 1);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1757
    $dlen = intval(substr($d, 2, strlen($d)-1));
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1758
    $s = '';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1759
    for($i=0;$i<$dlen;$i++,$s.=$char);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1760
    $d = $s;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1761
    unset($s, $dlen, $char);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1762
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1763
  $decompressed = implode('', $data);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1764
  $decompressed = substr($decompressed, 0, -1);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1765
  $dcrc = (string)dechex(crc32($decompressed));
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1766
  if($dcrc != $crc)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1767
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1768
    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
  1769
    return false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1770
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1771
  return $decompressed;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1772
}
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
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1775
 * Exports a MySQL table into a SQL string.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1776
 * @param string $table The name of the table to export
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1777
 * @param bool $structure If true, include a CREATE TABLE command
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1778
 * @param bool $data If true, include the contents of the table
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1779
 * @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
  1780
 * @return string
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1781
 */
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1782
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1783
function export_table($table, $structure = true, $data = true, $compact = false)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1784
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1785
  global $db, $session, $paths, $template, $plugins; // Common objects
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1786
  $struct_keys = '';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1787
  $divider   = (!$compact) ? "\n" : "\n";
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1788
  $spacer1   = (!$compact) ? "\n" : " ";
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1789
  $spacer2   = (!$compact) ? "  " : " ";
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1790
  $rowspacer = (!$compact) ? "\n  " : " ";
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1791
  $index_list = Array();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1792
  $cols = $db->sql_query('SHOW COLUMNS IN '.$table.';');
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1793
  if(!$cols)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1794
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1795
    echo 'export_table(): Error getting column list: '.$db->get_error_text().'<br />';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1796
    return false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1797
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1798
  $col = Array();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1799
  $sqlcol = Array();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1800
  $collist = Array();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1801
  $pri_keys = Array();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1802
  // Using fetchrow_num() here to compensate for MySQL l10n
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1803
  while( $row = $db->fetchrow_num() )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1804
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1805
    $field =& $row[0];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1806
    $type  =& $row[1];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1807
    $null  =& $row[2];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1808
    $key   =& $row[3];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1809
    $def   =& $row[4];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1810
    $extra =& $row[5];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1811
    $col[] = Array(
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1812
      'name'=>$field,
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1813
      'type'=>$type,
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1814
      'null'=>$null,
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1815
      'key'=>$key,
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1816
      'default'=>$def,
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1817
      'extra'=>$extra,
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1818
      );
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1819
    $collist[] = $field;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1820
  }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1821
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1822
  if ( $structure )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1823
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1824
    $db->sql_query('SET SQL_QUOTE_SHOW_CREATE = 0;');
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1825
    $struct = $db->sql_query('SHOW CREATE TABLE '.$table.';');
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1826
    if ( !$struct )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1827
      $db->_die();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1828
    $row = $db->fetchrow_num();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1829
    $db->free_result();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1830
    $struct = $row[1];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1831
    $struct = preg_replace("/\n\) ENGINE=(.+)$/", "\n);", $struct);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1832
    unset($row);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1833
    if ( $compact )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1834
    {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1835
      $struct_arr = explode("\n", $struct);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1836
      foreach ( $struct_arr as $i => $leg )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1837
      {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1838
        if ( $i == 0 )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1839
          continue;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1840
        $test = trim($leg);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1841
        if ( empty($test) )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1842
        {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1843
          unset($struct_arr[$i]);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1844
          continue;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1845
        }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1846
        $struct_arr[$i] = preg_replace('/^([\s]*)/', ' ', $leg);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1847
      }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1848
      $struct = implode("", $struct_arr);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1849
    }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1850
  }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1851
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1852
  // Structuring complete
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1853
  if($data)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1854
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1855
    $datq = $db->sql_query('SELECT * FROM '.$table.';');
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1856
    if(!$datq)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1857
    {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1858
      echo 'export_table(): Error getting column list: '.$db->get_error_text().'<br />';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1859
      return false;
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
    if($db->numrows() < 1)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1862
    {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1863
      if($structure) return $struct;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1864
      else return '';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1865
    }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1866
    $rowdata = Array();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1867
    $dataqs = Array();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1868
    $insert_strings = Array();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1869
    $z = false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1870
    while($row = $db->fetchrow_num())
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
      $z = false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1873
      foreach($row as $i => $cell)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1874
      {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1875
        $str = mysql_encode_column($cell, $col[$i]['type']);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1876
        $rowdata[] = $str;
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
      $dataqs2 = implode(",$rowspacer", $dataqs) . ",$rowspacer" . '( ' . implode(', ', $rowdata) . ' )';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1879
      $ins = 'INSERT INTO '.$table.'( '.implode(',', $collist).' ) VALUES' . $dataqs2 . ";";
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1880
      if ( strlen( $ins ) > MYSQL_MAX_PACKET_SIZE )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1881
      {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1882
        // 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
  1883
        $insert_strings[] = 'INSERT INTO '.$table.'( '.implode(',', $collist).' ) VALUES' . implode(",$rowspacer", $dataqs) . ";";;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1884
        $dataqs = Array('( ' . implode(', ', $rowdata) . ' )');
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1885
        $z = true;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1886
      }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1887
      else
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1888
      {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1889
        $dataqs[] = '( ' . implode(', ', $rowdata) . ' )';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1890
      }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1891
      $rowdata = Array();
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
    if ( !$z )
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
      $insert_strings[] = 'INSERT INTO '.$table.'( '.implode(',', $collist).' ) VALUES' . implode(",$rowspacer", $dataqs) . ";";;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1896
      $dataqs = Array();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1897
    }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1898
    $datstring = implode($divider, $insert_strings);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1899
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1900
  if($structure && !$data) return $struct;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1901
  elseif(!$structure && $data) return $datstring;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1902
  elseif($structure && $data) return $struct . $divider . $datstring;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1903
  elseif(!$structure && !$data) return '';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1904
}
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
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1907
 * 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
  1908
 * @access private
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1909
 */
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  1910
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1911
function mysql_encode_column($input, $type)
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
  global $db, $session, $paths, $template, $plugins; // Common objects
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1914
  // Decide whether to quote the string or not
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1915
  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
  1916
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1917
    $str = "'" . $db->escape($input) . "'";
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
  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
  1920
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1921
    $str = '0x' . hexencode($input, '', '');
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
  elseif(is_null($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
    $str = 'NULL';
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
  else
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
    $str = (string)$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
  return $str;
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
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
 * 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
  1936
 * @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
  1937
 */
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
function fetch_allowed_extensions()
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
  global $mime_types;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1942
  $bits = getConfig('allowed_mime_types');
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1943
  if(!$bits) return Array(false);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1944
  $bits = uncompress_bitfield($bits);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1945
  if(!$bits) return Array(false);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1946
  $bits = enano_str_split($bits, 1);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1947
  $ret = Array();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1948
  $mt = array_keys($mime_types);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1949
  foreach($bits as $i => $b)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1950
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1951
    $ret[$mt[$i]] = ( $b == '1' ) ? true : false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1952
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1953
  return $ret;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1954
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1955
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
 * Generates a random key suitable for encryption
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1958
 * @param int $len the length of the key
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1959
 * @return string a BINARY key
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
function randkey($len = 32)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1963
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1964
  $key = '';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1965
  for($i=0;$i<$len;$i++)
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
    $key .= chr(mt_rand(0, 255));
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1968
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1969
  return $key;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1970
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1971
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
 * Decodes a hex string.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1974
 * @param string $hex The hex code to decode
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1975
 * @return string
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
function hexdecode($hex)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1979
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1980
  $hex = enano_str_split($hex, 2);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1981
  $bin_key = '';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1982
  foreach($hex as $nibble)
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
    $byte = chr(hexdec($nibble));
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1985
    $bin_key .= $byte;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1986
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1987
  return $bin_key;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1988
}
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
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1991
 * Enano's own (almost) bulletproof HTML sanitizer.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1992
 * @param string $html The input HTML
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1993
 * @return string cleaned HTML
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
function sanitize_html($html, $filter_php = true)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  1997
{
163
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  1998
  // Random seed for substitution
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  1999
  $rand_seed = md5( sha1(microtime()) . mt_rand() );
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2000
  
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
  2001
  // We need MediaWiki
1027
98c052fc3337 First implementation of new parser; Text_Wiki is now gone. VERY BETA! WiP.
Dan
parents: 978
diff changeset
  2002
  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
  2003
  
163
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2004
  // Strip out comments that are already escaped
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2005
  preg_match_all('/&lt;!--(.*?)--&gt;/', $html, $comment_match);
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2006
  $i = 0;
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2007
  foreach ( $comment_match[0] as $comment )
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2008
  {
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2009
    $html = str_replace_once($comment, "{HTMLCOMMENT:$i:$rand_seed}", $html);
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2010
    $i++;
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2011
  }
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2012
  
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2013
  // 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
  2014
  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
  2015
  $i = 0;
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2016
  foreach ( $code_match[0] as $code )
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
    $html = str_replace_once($code, "{TW_CODE:$i:$rand_seed}", $html);
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2019
    $i++;
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2020
  }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2021
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2022
  $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
  2023
  $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
  2024
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2025
  if($filter_php)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2026
    $html = str_replace(
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2027
      Array('<?php',    '<?',    '<%',    '?>',    '%>'),
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2028
      Array('&lt;?php', '&lt;?', '&lt;%', '?&gt;', '%&gt;'),
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2029
      $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
  $tag_whitelist = array_keys ( setupAttributeWhitelist() );
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2032
  if ( !$filter_php )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2033
    $tag_whitelist[] = '?php';
164
54c79adfb694 Fixed comment stripping in sanitize_html()
Dan
parents: 163
diff changeset
  2034
  // allow HTML comments
54c79adfb694 Fixed comment stripping in sanitize_html()
Dan
parents: 163
diff changeset
  2035
  $tag_whitelist[] = '!--';
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2036
  $len = strlen($html);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2037
  $in_quote = false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2038
  $quote_char = '';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2039
  $tag_start = 0;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2040
  $tag_name = '';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2041
  $in_tag = false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2042
  $trk_name = false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2043
  for ( $i = 0; $i < $len; $i++ )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2044
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2045
    $chr = $html{$i};
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2046
    $prev = ( $i == 0 ) ? '' : $html{ $i - 1 };
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2047
    $next = ( ( $i + 1 ) == $len ) ? '' : $html { $i + 1 };
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2048
    if ( $in_quote && $in_tag )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2049
    {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2050
      if ( $quote_char == $chr && $prev != '\\' )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2051
        $in_quote = false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2052
    }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2053
    elseif ( ( $chr == '"' || $chr == "'" ) && $prev != '\\' && $in_tag )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2054
    {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2055
      $in_quote = true;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2056
      $quote_char = $chr;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2057
    }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2058
    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
  2059
    {
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2060
      // start of a tag
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2061
      $tag_start = $i;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2062
      $in_tag = true;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2063
      $trk_name = true;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2064
    }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2065
    elseif ( !$in_quote && $in_tag && $chr == '>' )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2066
    {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2067
      $full_tag = substr($html, $tag_start, ( $i - $tag_start ) + 1 );
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2068
      $l = strlen($tag_name) + 2;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2069
      $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
  2070
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2071
      // Debugging message
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2072
      // 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
  2073
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
  2074
      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
  2075
      {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2076
        // Illegal tag
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2077
        //echo $tag_name . ' ';
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2078
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2079
        $s = ( empty($attribs_only) ) ? '' : ' ';
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2080
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2081
        $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
  2082
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2083
        $html = substr($html, 0, $tag_start) . $sanitized . substr($html, $i + 1);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2084
        $html = str_replace('</' . $tag_name . '>', '&lt;/' . $tag_name . '&gt;', $html);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2085
        $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
  2086
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2087
        $len = strlen($html);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2088
        $i = $new_i;
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2089
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2090
        $in_tag = false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2091
        $tag_name = '';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2092
        continue;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2093
      }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2094
      else
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2095
      {
164
54c79adfb694 Fixed comment stripping in sanitize_html()
Dan
parents: 163
diff changeset
  2096
        // If not filtering PHP, don't bother to strip
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2097
        if ( $tag_name == '?php' && !$filter_php )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2098
          continue;
164
54c79adfb694 Fixed comment stripping in sanitize_html()
Dan
parents: 163
diff changeset
  2099
        // If this is a comment, likewise skip this "tag"
54c79adfb694 Fixed comment stripping in sanitize_html()
Dan
parents: 163
diff changeset
  2100
        if ( $tag_name == '!--' )
54c79adfb694 Fixed comment stripping in sanitize_html()
Dan
parents: 163
diff changeset
  2101
          continue;
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2102
        $f = fixTagAttributes( $attribs_only, $tag_name );
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2103
        $s = ( empty($f) ) ? '' : ' ';
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2104
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2105
        $sanitized = '<' . $tag_name . $f . '>';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2106
        $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
  2107
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2108
        $html = substr($html, 0, $tag_start) . $sanitized . substr($html, $i + 1);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2109
        $len = strlen($html);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2110
        $i = $new_i;
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2111
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2112
        $in_tag = false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2113
        $tag_name = '';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2114
        continue;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2115
      }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2116
    }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2117
    elseif ( $in_tag && $trk_name )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2118
    {
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
  2119
      $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
  2120
      if ( $is_alphabetical )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2121
        $tag_name .= $chr;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2122
      else
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2123
      {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2124
        $trk_name = false;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2125
      }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2126
    }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2127
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2128
  }
164
54c79adfb694 Fixed comment stripping in sanitize_html()
Dan
parents: 163
diff changeset
  2129
  
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
  2130
  // 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
  2131
  // <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
  2132
  // <
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
  2133
  // 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
  2134
  $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
  2135
  
880c4b7eb658 SECURITY: Fix XSS under IE in closing tags (shared sanitizer)
Dan
parents: 801
diff changeset
  2136
  // Vulnerability reported by fuzion from nukeit.org:
880c4b7eb658 SECURITY: Fix XSS under IE in closing tags (shared sanitizer)
Dan
parents: 801
diff changeset
  2137
  // XSS in closing HTML tag style attribute
880c4b7eb658 SECURITY: Fix XSS under IE in closing tags (shared sanitizer)
Dan
parents: 801
diff changeset
  2138
  // Fix: escape all closing tags with non-whitelisted characters
1115
b3c249d06990 Functions: fixed HTML sanitizer to properly preprocess <code> one-liners
Dan
parents: 1110
diff changeset
  2139
  $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
  2140
163
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2141
  // Restore stripped comments
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2142
  $i = 0;
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2143
  foreach ( $comment_match[0] as $comment )
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2144
  {
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2145
    $html = str_replace_once("{HTMLCOMMENT:$i:$rand_seed}", $comment, $html);
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2146
    $i++;
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2147
  }
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2148
  
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2149
  // Restore stripped code
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2150
  $i = 0;
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2151
  foreach ( $code_match[0] as $code )
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2152
  {
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2153
    $html = str_replace_once("{TW_CODE:$i:$rand_seed}", $code, $html);
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2154
    $i++;
ad00dc1f8706 Improvements and fixes (hacks?) for HTML sanitization
Dan
parents: 145
diff changeset
  2155
  }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2156
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2157
  return $html;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2158
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2159
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
  2160
/**
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
  2161
 * 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
  2162
 * @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
  2163
 * @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
  2164
 */
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
  2165
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
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
  2167
{
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2168
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
  2169
  $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
  2170
  $tok2 = "</litewiki>";
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2171
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
  2172
  $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
  2173
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
  2174
  $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
  2175
  $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
  2176
  $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
  2177
  $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
  2178
  $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
  2179
  $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
  2180
  $trk_name = false;
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2181
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
  2182
  $diag = 0;
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2183
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
  2184
  $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
  2185
  $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
  2186
  $block_start = 0;
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
  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
  2189
  {
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
    $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
  2191
    $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
  2192
    $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
  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
    // 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
  2195
    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
  2196
    {
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
      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
  2198
        $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
  2199
    }
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
    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
  2201
    {
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
      $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
  2203
      $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
  2204
    }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2205
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
  2206
    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
  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
      // 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
  2209
      $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
  2210
      $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
  2211
      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
  2212
      {
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
        $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
  2214
        // 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
  2215
        $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
  2216
        $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
  2217
        $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
  2218
        $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
  2219
        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
  2220
          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
  2221
      }
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
      // 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
  2223
      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
  2224
      {
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 ( $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
  2226
        {
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
          $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
  2228
          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
  2229
          {
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
            $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
  2231
            $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
  2232
            // 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
  2233
            $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
  2234
            $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
  2235
            $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
  2236
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
  2237
            $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
  2238
            $len = strlen($html);
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2239
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
  2240
            //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
  2241
          }
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
  2242
        }
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
      }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2244
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
  2245
      $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
  2246
      $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
  2247
      $tag_name = '';
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2248
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
  2249
      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
  2250
    }
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
    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
  2252
    {
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
      // 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
  2254
      $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
  2255
      $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
  2256
      $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
  2257
    }
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
    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
  2259
    {
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
      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
  2261
      {
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
        // 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
  2263
        // 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
  2264
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
  2265
        $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
  2266
        $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
  2267
        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
  2268
      }
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
      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
  2270
      {
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
        // 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
  2272
        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
  2273
        {
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
          //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
  2275
          $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
  2276
          $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
  2277
          $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
  2278
        }
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
        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
  2280
        {
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
          $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
  2282
        }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2283
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
  2284
        $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
  2285
        $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
        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
  2287
      }
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
    }
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
  2289
    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
  2290
    {
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
      $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
  2292
      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
  2293
        $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
  2294
      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
  2295
      {
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
        $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
  2297
      }
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
    }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2299
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
  2300
    // Tokenization complete
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2301
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
  2302
  }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2303
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
  2304
  $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
  2305
  // 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
  2306
  $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
  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
  return $html;
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
}
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
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2312
function htmlalternatives($string)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2313
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2314
  $ret = '';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2315
  for ( $i = 0; $i < strlen($string); $i++ )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2316
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2317
    $chr = $string{$i};
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2318
    $ch1 = ord($chr);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2319
    $ch2 = dechex($ch1);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2320
    $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
  2321
    $ret .= $byte;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2322
    $ret .= '([\s]){0,2}';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2323
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2324
  return $ret;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2325
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2326
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2327
/**
906
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2328
 * Generate HTML for a sprite image.
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2329
 * @param string Path to sprite image
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2330
 * @param int Width of resulting image
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2331
 * @param int Height of resulting image
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2332
 * @param int X offset
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2333
 * @param int Y offset
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2334
 * @return object HTMLImageElement
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2335
 */
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2336
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2337
function gen_sprite($path, $width, $height, $xpos, $ypos)
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2338
{
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2339
  $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
  2340
  $xpos = ( $xpos == 0 ) ? '0' : '-' . strval($xpos);
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2341
  $ypos = ( $ypos == 0 ) ? '0' : '-' . strval($ypos);
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2342
  $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
  2343
  $html .= ' />';
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
  return $html;
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2346
}
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2347
c949e82b8f49 New page protection UI. Both miniPrompt and failsafe HTML.
Dan
parents: 898
diff changeset
  2348
/**
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
  2349
 * 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
  2350
 * 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
  2351
 *   - 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
  2352
 *   - 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
  2353
 * @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
  2354
 <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
  2355
 $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
  2356
 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
  2357
 {
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
   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
  2359
     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
  2360
   
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
   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
  2362
 }
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
 </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
  2364
 * @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
  2365
 * @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
  2366
 * @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
  2367
 * @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
  2368
 * @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
  2369
 * @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
  2370
 */
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
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
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
  2373
{
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
  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
  2375
  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
  2376
    $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
  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
  $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
  2379
  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
  2380
  {
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
    $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
  2382
    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
  2383
      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
  2384
  }
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
  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
  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
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
/**
875
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2389
 * Generates the HTML of a pagination control.
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2390
 * @param int Current page
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2391
 * @param int Number of pages
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2392
 * @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
  2393
 * @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
  2394
 * @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
  2395
 * @return string HTML
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2396
 */
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2397
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2398
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
  2399
{
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2400
  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
  2401
  global $lang;
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
  $out = '';
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2404
  $i = 0;
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
  // Build paginator
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2407
  $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
  2408
            // IE-specific hack
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2409
            'display: block; width: 1px;':
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2410
            // Other browsers
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2411
            'display: table; margin: 10px 0 0 auto;';
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2412
  
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2413
  $begin = '<div class="tblholder" style="'. $pg_css . '">
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2414
    <table border="0" cellspacing="1" cellpadding="4">
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2415
      <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
  2416
  $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
  2417
  $end = '</tr></table></div>';
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2418
  $blk = $template->makeParserText($block);
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2419
  $inner = '';
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2420
  $cls = 'row2';
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2421
  if ( $num_pages < 5 )
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2422
  {
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2423
    for ( $i = 0; $i < $num_pages; $i++ )
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2424
    {
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2425
      $cls = ( $cls == 'row1' ) ? 'row2' : 'row1';
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2426
      $offset = strval(($i * $start_mult) + $start_add);
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2427
      $url = htmlspecialchars(sprintf($result_url, $offset));
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2428
      $j = $i + 1;
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2429
      $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
  2430
      $blk->assign_vars(array(
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2431
        'CLASS'=>$cls,
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2432
        'LINK'=>$link
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2433
        ));
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2434
      $inner .= $blk->run();
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2435
    }
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2436
  }
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2437
  else
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2438
  {
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2439
    if ( $current_page + 5 > $num_pages )
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2440
    {
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2441
      $list = Array();
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2442
      $tp = $current_page;
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2443
      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
  2444
      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
  2445
      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
  2446
      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
  2447
      {
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2448
        $list[] = $i;
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2449
      }
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2450
    }
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2451
    else
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2452
    {
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2453
      $list = Array();
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2454
      $current = $current_page;
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2455
      $lower = ( $current < 3 ) ? 1 : $current - 1;
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2456
      for ( $i = 0; $i < 3; $i++ )
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2457
      {
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2458
        $list[] = $lower + $i;
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2459
      }
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2460
    }
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
  2461
    $url = sprintf($result_url, $start_add);
875
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2462
    $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
  2463
    $blk->assign_vars(array(
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2464
      'CLASS'=>$cls,
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2465
      'LINK'=>$link
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2466
      ));
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2467
    $inner .= $blk->run();
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2468
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2469
    foreach ( $list as $i )
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2470
    {
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2471
      if ( $i == $num_pages )
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2472
        break;
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2473
      $cls = ( $cls == 'row1' ) ? 'row2' : 'row1';
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2474
      $offset = strval(($i * $start_mult) + $start_add);
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2475
      $url = sprintf($result_url, $offset);
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2476
      $j = $i + 1;
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2477
      $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
  2478
      $blk->assign_vars(array(
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2479
        'CLASS'=>$cls,
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2480
        'LINK'=>$link
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2481
        ));
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2482
      $inner .= $blk->run();
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2483
    }
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2484
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2485
    // "Last" button
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2486
    $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
  2487
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2488
    if ( $current_page < $num_pages )
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
      $cls = ( $cls == 'row1' ) ? 'row2' : 'row1';
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2491
      $offset = strval($total);
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2492
      $url = sprintf($result_url, $offset);
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2493
      $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
  2494
      $blk->assign_vars(array(
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2495
        'CLASS'=>$cls,
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2496
        'LINK'=>$link
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2497
        ));
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2498
      $inner .= $blk->run();
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2499
    }
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2500
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2501
  }
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2502
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
  2503
  $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
  2504
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2505
  $paginator = "\n$begin$inner$end\n";
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2506
  return $paginator;
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
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2509
/**
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2510
 * 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
  2511
 * @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
  2512
 * @param string A template, with variables being named after the column name
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2513
 * @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
  2514
 * @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
  2515
 * @param int Optional. Start offset in individual results. Defaults to 0.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2516
 * @param int Optional. The number of results per page. Defualts to 10.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2517
 * @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
  2518
 * @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
  2519
 * @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
  2520
 * @return string
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2521
 */
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2522
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2523
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
  2524
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2525
  global $db, $session, $paths, $template, $plugins; // Common objects
359
e0787bb6285b Implemented IP logging for comments and registration
Dan
parents: 345
diff changeset
  2526
  
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2527
  $parser = $template->makeParserText($tpl_text);
875
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2528
  
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2529
  $num_pages = ceil ( $num_results / $perpage );
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2530
  $out = '';
875
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2531
  $this_page = ceil ( $start / $perpage );
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2532
  $i = 0;
875
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2533
  
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
  2534
  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
  2535
  {
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
  2536
    $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
  2537
    $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
  2538
  }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2539
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2540
  $cls = 'row2';
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2541
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2542
  if ( $row = $db->fetchrow($q) )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2543
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2544
    $i = 0;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2545
    $out .= $header;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2546
    do {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2547
      $i++;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2548
      if ( $i <= $start )
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
        continue;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2551
      }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2552
      if ( ( $i - $start ) > $perpage )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2553
      {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2554
        break;
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
      $cls = ( $cls == 'row1' ) ? 'row2' : 'row1';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2557
      foreach ( $row as $j => $val )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2558
      {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2559
        if ( isset($callers[$j]) )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2560
        {
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
  2561
          $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
  2562
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
  2563
          if ( is_string($tmp) )
1
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
            $row[$j] = $tmp;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2566
          }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2567
        }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2568
      }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2569
      $parser->assign_vars($row);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2570
      $parser->assign_vars(array('_css_class' => $cls));
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2571
      $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
  2572
    } while ( $row = @$db->fetchrow($q) );
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2573
    $out .= $footer;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2574
  }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2575
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
  2576
  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
  2577
    $out .= $paginator;
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2578
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2579
  return $out;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2580
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2581
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2582
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2583
 * 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
  2584
 * @param array The results. Each value is simply echoed.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2585
 * @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
  2586
 * @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
  2587
 * @param int Optional. Start offset in individual results. Defaults to 0.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2588
 * @param int Optional. The number of results per page. Defualts to 10.
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2589
 * @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
  2590
 * @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
  2591
 * @return string
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2592
 */
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2593
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2594
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
  2595
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2596
  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
  2597
  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
  2598
  
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2599
  $num_pages = ceil ( $num_results / $perpage );
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2600
  $out = '';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2601
  $i = 0;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2602
  $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
  2603
875
0c3dd4c166c0 Some fixes to paginator (pagination control code moved to separate function)
Dan
parents: 857
diff changeset
  2604
  $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
  2605
  
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
  2606
  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
  2607
  {
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2608
    $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
  2609
  }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2610
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2611
  $cls = 'row2';
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2612
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2613
  if ( sizeof($q) > 0 )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2614
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2615
    $i = 0;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2616
    $out .= $header;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2617
    foreach ( $q as $val ) {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2618
      $i++;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2619
      if ( $i <= $start )
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
        continue;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2622
      }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2623
      if ( ( $i - $start ) > $perpage )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2624
      {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2625
        break;
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
      $out .= $val;
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
    $out .= $footer;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2630
  }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2631
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
  2632
  if ( $num_results > 1 )
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2633
    $out .= $paginator;
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2634
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2635
  return $out;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2636
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2637
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2638
/**
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2639
 * Enano version of fputs for debugging
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2640
 */
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2641
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2642
function enano_fputs($socket, $data)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2643
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2644
  // echo '<pre>' . htmlspecialchars($data) . '</pre>';
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2645
  // flush();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2646
  // ob_flush();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2647
  // ob_end_flush();
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2648
  return 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
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2651
/**
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2652
 * 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
  2653
 * @param string Page ID to sanitize
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2654
 * @return string Cleaned text
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
function sanitize_page_id($page_id)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2658
{
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
  2659
  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
  2660
  
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
  2661
  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
  2662
  {
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
  2663
    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
  2664
    {
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
  2665
      $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
  2666
      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
  2667
      {
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
        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
  2669
      }
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
    }
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
  2671
  }
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
  
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
  2673
  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
  2674
    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
  2675
  
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
  2676
  // 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
  2677
  $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
  2678
1061
4ef865b5f497 Tweaked URL sanitizing a bit to make Enanium work better.
Dan
parents: 1035
diff changeset
  2679
  $pid_clean = preg_replace('/[\w\.\/:;\(\)@\[\]=_-]/', 'X', $page_id);
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2680
  $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
  2681
  
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2682
  foreach ( $pid_dirty as $id => $char )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2683
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2684
    if ( $char == 'X' )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2685
      continue;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2686
    $cid = ord($char);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2687
    $cid = dechex($cid);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2688
    $cid = strval($cid);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2689
    if ( strlen($cid) < 2 )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2690
    {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2691
      $cid = strtoupper("0$cid");
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2692
    }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2693
    $pid_dirty[$id] = ".$cid";
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2694
  }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2695
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2696
  $pid_chars = enano_str_split($page_id, 1);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2697
  $page_id_cleaned = '';
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2698
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2699
  foreach ( $pid_chars as $id => $char )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2700
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2701
    if ( $pid_dirty[$id] == 'X' )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2702
      $page_id_cleaned .= $char;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2703
    else
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2704
      $page_id_cleaned .= $pid_dirty[$id];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2705
  }
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
  2706
  
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
  2707
  // global $mime_types;
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2708
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
  2709
  // $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
  2710
  // $exts = '(' . implode('|', $exts) . ')';
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2711
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
  2712
  // $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
  2713
1
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2714
  return $page_id_cleaned;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2715
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2716
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2717
/**
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
  2718
 * 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
  2719
 * @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
  2720
 * @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
  2721
 */
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
  2722
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
  2723
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
  2724
{
38
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2725
  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
  2726
  // 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
  2727
  $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
  2728
38
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2729
  // 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
  2730
  $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
  2731
  if ( is_valid_ip($pid_ip_check) )
38
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2732
  {
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
  2733
    return $page_id;
38
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2734
  }
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2735
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
  2736
  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
  2737
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
  2738
  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
  2739
  {
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
  2740
    $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
  2741
    $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
  2742
    $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
  2743
    $char = chr($char);
1061
4ef865b5f497 Tweaked URL sanitizing a bit to make Enanium work better.
Dan
parents: 1035
diff changeset
  2744
    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
  2745
      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
  2746
    $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
  2747
  }
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
  2748
  
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
  2749
  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
  2750
}
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
  2751
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
/**
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2753
 * 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
  2754
 * @param int The number to process
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2755
 * @return string Input number with commas added
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2756
 */
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2757
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2758
function commatize($num)
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2759
{
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2760
  $num = (string)$num;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2761
  if ( strpos($num, '.') )
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
    $whole = explode('.', $num);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2764
    $num = $whole[0];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2765
    $dec = $whole[1];
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2766
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2767
  else
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 = $num;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2770
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2771
  $offset = ( strlen($num) ) % 3;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2772
  $len = strlen($num);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2773
  $offset = ( $offset == 0 )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2774
    ? 3
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2775
    : $offset;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2776
  for ( $i = $offset; $i < $len; $i=$i+3 )
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2777
  {
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2778
    $num = substr($num, 0, $i) . ',' . substr($num, $i, $len);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2779
    $len = strlen($num);
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2780
    $i++;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2781
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2782
  if ( isset($dec) )
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
    return $num . '.' . $dec;
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2785
  }
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2786
  else
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
    return $num;
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
}
fe660c52c48f Adding /includes
dan@scribus.fuhry.local.fuhry.local
parents:
diff changeset
  2791
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
  2792
/**
915
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2793
 * 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
  2794
 * @param int File size
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2795
 * @return string
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2796
 */
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2797
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2798
function humanize_filesize($size)
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2799
{
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2800
  global $lang;
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2801
  
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2802
  if ( $size > ( 1099511627776 * 0.9 ) )
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
    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
  2805
  }
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2806
  if ( $size > ( 1073741824 * 0.9 ) )
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
    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
  2809
  }
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2810
  if ( $size > ( 1048576 * 0.9 ) )
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
    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
  2813
  }
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2814
  if ( $size > ( 1024 * 0.9 ) )
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
    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
  2817
  }
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2818
  return "$size " . $lang->get('etc_unit_bytes');
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
91f4da84966f New, beautiful, rethought Admin:Home. No, really, you'll like it.
Dan
parents: 909
diff changeset
  2821
/**
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
  2822
 * 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
  2823
 * @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
  2824
 * @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
  2825
 * @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
  2826
 */
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
  2827
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
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
  2829
{
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
  $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
  2831
  $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
  2832
  $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
  2833
  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
  2834
}
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
38
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2836
/**
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2837
 * Tells if a given IP address is valid.
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2838
 * @param string suspected IP address
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2839
 * @return bool true if valid, false otherwise
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2840
 */
76
608dee512bf0 Work started on page tags, still aways to go, but syncing to Nighthawk
Dan
parents: 74
diff changeset
  2841
38
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2842
function is_valid_ip($ip)
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2843
{
710
1fbce408813c Fixed IPv6 address match (the one from phpBB3 did not work)
Dan
parents: 685
diff changeset
  2844
  // This next one came from phpBB3.
38
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2845
  $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
  2846
  $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
  2847
38
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2848
  if ( preg_match("/^{$ipv4}$/", $ip) || preg_match("/^{$ipv6}$/", $ip) )
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2849
    return true;
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2850
  else
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2851
    return false;
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2852
}
ed06961e54dd Fixed user pages + the new .xx page URL format
Dan
parents: 32
diff changeset
  2853
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
  2854
/**
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
  2855
 * 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
  2856
 * @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
  2857
 * @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
  2858
 * @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
  2859
 */
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
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
  2862
{
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
  $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
  2864
  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
  2865
  {
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
  2866
    $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
  2867
    $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
  2868
    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
  2869
  }
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
  2870
  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
  2871
}
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
  2872
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
  2873
/**
581
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2874
 * 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
  2875
 * @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
  2876
 * @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
  2877
 * @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
  2878
 * @return string
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2879
 */
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2880
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2881
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
  2882
{
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2883
  $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
  2884
  $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
  2885
  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
  2886
  {
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2887
    $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
  2888
    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
  2889
    {
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2890
      // Got it!
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2891
      $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
  2892
      $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
  2893
      $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
  2894
      $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
  2895
      $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
  2896
    }
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2897
  }
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2898
  return $haystack;
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2899
}
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2900
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2901
/**
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2902
 * 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
  2903
 * @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
  2904
 * @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
  2905
 * @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
  2906
 * @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
  2907
 * @return string
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2908
 */
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2909
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2910
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
  2911
{
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2912
  $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
  2913
  $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
  2914
  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
  2915
  {
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2916
    $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
  2917
    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
  2918
    {
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2919
      // Got it!
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2920
      $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
  2921
      $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
  2922
      $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
  2923
      $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
  2924
      $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
  2925
    }
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2926
  }
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2927
  return $haystack;
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2928
}
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2929
5e8fd89c02ea Initial progress towards converting auto-completion framework to Spry. Not currently in a very working state.
Dan
parents: 575
diff changeset
  2930
/**
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
  2931
 * 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
  2932
 * 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
  2933
 *  - 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
  2934
 *  - 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
  2935
 *  - 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
  2936
 *              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
  2937
 *  - 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
  2938
 *     - 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
  2939
 *     - 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
  2940
 * 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
  2941
 *  - 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
  2942
 *  - 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
  2943
 *  - 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
  2944
 *                    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
  2945
 *                    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
  2946
 *                    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
  2947
 *  - 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
  2948
 * @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
  2949
 <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
  2950
  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
  2951
      '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
  2952
      '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
  2953
      '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
  2954
      '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
  2955
      '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
  2956
      '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
  2957
          '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
  2958
          '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
  2959
        ),
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
      '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
  2961
    ));
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
  
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
  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
  2964
  {
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
    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
  2966
    $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
  2967
    $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
  2968
    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
  2969
    {
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
      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
  2971
    }
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
    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
  2973
    {
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
      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
  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
  }
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
 </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
  2978
 * @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
  2979
 * @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
  2980
 */
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
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
  2983
$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
  2984
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
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
  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
  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
  2988
  
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
  $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
  2990
  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
  2991
  {
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
    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
  2993
    {
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
      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
  2995
    }
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
  }
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
  $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
  2998
  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
  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
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
/**
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
  3002
 * 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
  3003
 * @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
  3004
 * @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
  3005
 */
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
  3006
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
  3007
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
  3008
{
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
  $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
  3010
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
  $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
  3012
  $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
  3013
  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
  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
    $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
  3016
    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
  3017
    {
1035
d0d617124b29 Fixed decode_unicode_url() trying to parse non-hex %uXXXX sequences
Dan
parents: 1027
diff changeset
  3018
      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
  3019
      {
d0d617124b29 Fixed decode_unicode_url() trying to parse non-hex %uXXXX sequences
Dan
parents: 1027
diff changeset
  3020
        $res .= substr($str, $i, 6);
d0d617124b29 Fixed decode_unicode_url() trying to parse non-hex %uXXXX sequences
Dan
parents: 1027
diff changeset
  3021
        $i += 6;
d0d617124b29 Fixed decode_unicode_url() trying to parse non-hex %uXXXX sequences
Dan
parents: 1027
diff changeset
  3022
        continue;
d0d617124b29 Fixed decode_unicode_url() trying to parse non-hex %uXXXX sequences
Dan
parents: 1027
diff changeset
  3023
      }
d0d617124b29 Fixed decode_unicode_url() trying to parse non-hex %uXXXX sequences
Dan
parents: 1027
diff changeset
  3024
      
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
  3025
      $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
  3026
      $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
  3027
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
  3028
      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
  3029
      {
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
  3030
        // 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
  3031
        $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
  3032
      }
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
      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
  3034
      {
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
        // 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
  3036
        $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
  3037
            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
  3038
          . 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
  3039
      }
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
      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
  3041
      {
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
        // 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
  3043
        $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
  3044
            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
  3045
          . 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
  3046
          . 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
  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
    }
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
    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
  3050
    {
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
      $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
  3052
    }
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
    $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
  3055
  }
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
  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
  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
/**
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
 * 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
  3062
 * @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
  3063
 * @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
  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
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
  3067
{
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
  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
  3069
  {
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
    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
  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
      $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
  3073
    }
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
  3074
    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
  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
      $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
  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
  }
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
  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
  3080
}
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
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
  3082
/**
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
  3083
 * 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
  3084
 * @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
  3085
 * @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
  3086
 */
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
  3087
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
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
  3089
{
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
  $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
  3091
  $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
  3092
  $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
  3093
  $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
  3094
  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
  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
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
  3097
/**
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
  3098
 * 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
  3099
 * @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
  3100
 * @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
  3101
 * @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
  3102
 * @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
  3103
 * @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
  3104
 */
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
667
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
  3106
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
  3107
{
667
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
  3108
  $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
  3109
  $mtime = time();
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
  3110
  
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
  3111
  if ( !function_exists('gzdeflate') )
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
  3112
    return false;
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
  3113
 
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
  3114
  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
  3115
          (empty($filename) ? "" : $filename . "\0") .
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
  3116
          (empty($comment) ? "" : $comment . "\0") .
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
  3117
          gzdeflate($data, $level) .
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
  3118
          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
  3119
}
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
  3120
798
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3121
$php_errors = array();
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3122
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3123
/**
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3124
 * Enano's PHP error handler.
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3125
 * 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
  3126
 * @access private
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3127
 */
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
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
  3130
{
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3131
  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
  3132
  
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3133
  $er = error_reporting();
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3134
  if ( ! $er & $errno || $er == 0 )
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3135
  {
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3136
    return true;
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3137
  }
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3138
  global $do_gzip, $php_errors;
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3139
  
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3140
  if ( defined('ENANO_DEBUG') )
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
    // 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
  3143
    $do_gzip = false;
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3144
  }
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
  $error_type = 'error';
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3147
  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
  3148
    $error_type = 'warning';
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3149
  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
  3150
    $error_type = 'notice';
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
  if ( @is_object(@$plugins) )
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3153
  {
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3154
    $code = $plugins->setHook('php_error');
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3155
    foreach ( $code as $cmd )
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3156
    {
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3157
      eval($cmd);
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3158
    }
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
  
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3161
  // 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
  3162
  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
  3163
  {
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3164
    return true;
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
  if ( $do_gzip )
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3168
  {
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3169
    $php_errors[] = array(
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3170
        'num' => $errno,
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3171
        'type' => $error_type,
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3172
        'error' => $errstr,
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3173
        'file' => $errfile,
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3174
        'line' => $errline
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3175
      );
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3176
  }
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3177
  else
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3178
  {
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3179
    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
  3180
  }
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
set_error_handler('enano_handle_error');
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3184
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
  3185
/**
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
  3186
 * 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
  3187
 */
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
  3188
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
  3189
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
  3190
{
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
  3191
  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
  3192
  
1110
1a3f374310ca Damn it! gzip_output() was not checking for gzip support in the browser, fixed.
Dan
parents: 1099
diff changeset
  3193
  $gzip_supported = false;
1a3f374310ca Damn it! gzip_output() was not checking for gzip support in the browser, fixed.
Dan
parents: 1099
diff changeset
  3194
  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
  3195
  {
1a3f374310ca Damn it! gzip_output() was not checking for gzip support in the browser, fixed.
Dan
parents: 1099
diff changeset
  3196
    $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
  3197
    $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
  3198
  }
1a3f374310ca Damn it! gzip_output() was not checking for gzip support in the browser, fixed.
Dan
parents: 1099
diff changeset
  3199
  
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
  3200
  //
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
  3201
  // 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
  3202
  // 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
  3203
  //
1110
1a3f374310ca Damn it! gzip_output() was not checking for gzip support in the browser, fixed.
Dan
parents: 1099
diff changeset
  3204
  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
  3205
  {
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
    $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
  3207
    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
  3208
    
798
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3209
    global $php_errors;
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3210
    if ( !empty($php_errors) )
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3211
    {
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3212
      $errors = '';
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3213
      foreach ( $php_errors as $error )
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3214
      {
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3215
        $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
  3216
      }
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3217
      $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
  3218
    }
ddfc1b554a08 Redid error handler (it was causing some problems with gzip enabled)
Dan
parents: 770
diff changeset
  3219
    
667
72818d2bf336 Fixed improperly set up gzencode() replacement; fixed bad regexp in scale_image() security check
Dan
parents: 662
diff changeset
  3220
    $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
  3221
    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
  3222
    {
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
  3223
      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
  3224
      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
  3225
    }
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
  3226
    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
  3227
    {
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
      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
  3229
    }
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
  3230
  }
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
  3231
}
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
  3232
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
  3233
/**
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
  3234
 * 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
  3235
 * @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
  3236
 * @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
  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
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
  3240
{
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
  $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
  3242
  
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
  // 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
  3244
  $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
  3245
  
125
fb31c951d3a2 Fixed some rather major bugs in the registration system, this will need a release followup
Dan
parents: 112
diff changeset
  3246
  // 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
  3247
  $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
  3248
  $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
  3249
  
fb31c951d3a2 Fixed some rather major bugs in the registration system, this will need a release followup
Dan
parents: 112
diff changeset
  3250
  // 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
  3251
  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
  3252
  $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
  3253
  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
  3254
  {
fb31c951d3a2 Fixed some rather major bugs in the registration system, this will need a release followup
Dan
parents: 112
diff changeset
  3255
    $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
  3256
  }
fb31c951d3a2 Fixed some rather major bugs in the registration system, this will need a release followup
Dan
parents: 112
diff changeset
  3257
  
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
  3258
  // 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
  3259
  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
  3260
  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
  3261
  $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
  3262
  
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
  3263
  // 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
  3264
  $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
  3265
                          '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
  3266
                          '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
  3267
                          '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
  3268
                          '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
  3269
  
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 = '(' . 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
  3271
  
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
  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
  3273
  {
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
    $js =& $jscript[2][$i];
582
a38876c0793c Majorly reworked Javascript runtime stuff to use on-demand loading.
Dan
parents: 581
diff changeset
  3275
    if ( empty($js) )
a38876c0793c Majorly reworked Javascript runtime stuff to use on-demand loading.
Dan
parents: 581
diff changeset
  3276
      continue;
183
91127e62f38f Fixed some regular expressions in HTML optimization algorithm; regex page groups can be edited now (oops)
Dan
parents: 174
diff changeset
  3277
    
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
  3278
    $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
  3279
    
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
  3280
    $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
  3281
    // 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
  3282
    $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
  3283
     
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
  3284
  }
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
  
125
fb31c951d3a2 Fixed some rather major bugs in the registration system, this will need a release followup
Dan
parents: 112
diff changeset
  3286
  // 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
  3287
  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
  3288
  {
fb31c951d3a2 Fixed some rather major bugs in the registration system, this will need a release followup
Dan
parents: 112
diff changeset
  3289
    $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
  3290
  }
fb31c951d3a2 Fixed some rather major bugs in the registration system, this will need a release followup
Dan
parents: 112
diff changeset
  3291
  
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
  3292
  // 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
  3293
  $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
  3294
  $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
  3295
  
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
  3296
  // 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
  3297
  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
  3298
  $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
  3299
  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
  3300
  {
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
    $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
  3302
  }
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
  
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
  // 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
  3305
  $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
  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
  // 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
  3308
  $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
  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
  // 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
  3311
  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
  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
    $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
  3314
  }
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
  // 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
  3317
  $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
  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
  $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
  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
  // 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
  3322
  $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
  3323
     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
  3324
     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
  3325
     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
  3326
     -->\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
  3327
  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
  3328
}
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
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
  3330
/**
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
  3331
 * 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
  3332
 * @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
  3333
 * @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
  3334
 */
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
  3335
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
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
  3337
{
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
  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
  3339
    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
  3340
  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
  3341
    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
  3342
  $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
  3343
  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
  3344
    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
  3345
  $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
  3346
  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
  3347
    $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
  3348
  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
  3349
    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
  3350
  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
  3351
  {
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
    $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
  3353
  }
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
  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
  3355
}
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
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
 * 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
  3359
 * 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
  3360
 * @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
  3361
 * @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
  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
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
  3365
{
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
  $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
  3367
  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
  3368
    // 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
  3369
    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
  3370
  $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
  3371
  $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
  3372
  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
  3373
  {
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
    $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
  3375
    $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
  3376
    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
  3377
    {
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
      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
  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
        $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
  3381
        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
  3382
          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
  3383
        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
  3384
          $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
  3385
        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
  3386
          $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
  3387
      }
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
      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
  3389
      {
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
        $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
  3391
        $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
  3392
      }
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
    $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
  3395
    $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
  3396
  }
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
  $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
  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
  // 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
  3400
  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
  3401
    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
  3402
      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
  3403
        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
  3404
          $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
  3405
        
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
  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
  3407
}
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
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
  3409
/**
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3410
 * 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
  3411
 * @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
  3412
 * @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
  3413
 */
5bcdee999015 Major fixes to the ban system - large IP match lists don't slow down the server miserably anymore.
Dan
parents: 256
diff changeset
  3414
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
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
  3416
{
766
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3417
  if ( strstr($range, ':') )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3418
  {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3419
    return parse_ipv6_range_regex($range);
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3420
  }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3421
  else
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3422
  {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3423
    return parse_ipv4_range_regex($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
}
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
/**
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3428
 * 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
  3429
 * @param string IP range string
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3430
 * @return string
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
function parse_ipv4_range_regex($range)
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3434
{
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
  3435
  // 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
  3436
  $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
  3437
           . '(([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
  3438
           . '(([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
  3439
           . '(([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
  3440
  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
  3441
  {
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
    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
  3443
  }
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
  $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
  3445
  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
  3446
  $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
  3447
  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
  3448
  {
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
    // 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
  3450
    $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
  3451
    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
  3452
    {
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
      $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
  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
    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
  3456
    {
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
      $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
  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
    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
  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
      // 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
  3462
      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
  3463
      {
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
        $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
  3465
        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
  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
      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
  3468
      {
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
        // 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
  3470
        $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
  3471
        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
  3472
          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
  3473
        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
  3474
          $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
  3475
      }
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
    }
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
    $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
  3478
    $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
  3479
    // 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
  3480
    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
  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
      $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
  3483
    }
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 = 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
  3485
    $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
  3486
    $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
  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
  $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
  3489
  $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
  3490
  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
  3491
}
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
504
bc8e0e9ee01d Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
parents: 500
diff changeset
  3493
/**
766
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3494
 * 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
  3495
 * @param string IP range string
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3496
 * @return string
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3497
 */
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3498
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3499
function parse_ipv6_range_regex($range)
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3500
{
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3501
  $range = strtolower(trim($range));
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3502
  $valid = '/^';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3503
  $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
  3504
  $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
  3505
  $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
  3506
  $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
  3507
  $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
  3508
  $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
  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
  if ( !preg_match($valid, $range) )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3512
    return false;
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3513
  
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3514
  // expand address range.
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3515
  // this takes short ranges like:
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3516
  //   2001:470-471:054-b02b::5-bb
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3517
  // up to:
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3518
  //   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
  3519
  $range = preg_replace('/^:/', '0000:', $range);
766
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3520
  $range = explode(':', $range);
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3521
  $expanded = '';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3522
  $size = count($range);
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3523
  foreach ( $range as $byteset )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3524
  {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3525
    if ( empty($byteset) )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3526
    {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3527
      // ::
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3528
      while ( $size < 9 )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3529
      {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3530
        $expanded .= '0000:';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3531
        $size++;
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
    else
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
      if ( strstr($byteset, '-') ) 
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3537
      {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3538
        // this is a range
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3539
        $sides = explode('-', $byteset);
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3540
        foreach ( $sides as &$bytepair )
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
          while ( strlen($bytepair) < 4 )
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
            $bytepair = "0$bytepair";
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3545
          }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3546
        }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3547
        $byteset = implode('-', $sides);
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3548
      }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3549
      else
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3550
      {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3551
        while ( strlen($byteset) < 4 )
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 = "0$byteset";
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
      }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3556
      $expanded .= "$byteset:";
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3557
    }
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
  $expanded = explode(':', rtrim($expanded, ':'));
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
  // ready to dive in and start generating range regexes.
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3562
  // 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
  3563
  // range: 54-b12b
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
  /005[4-9a-f]|
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3566
  00[6-9a-f][0-9a-f]|
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3567
  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
  3568
  [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
  3569
  b[0-0][0-1][0-9a-f]|
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3570
  b0[0-1][0-9a-f]|
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3571
  b02[0-9a-b]/x
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3572
  */
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3573
  foreach ( $expanded as &$word )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3574
  {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3575
    if ( strstr($word, '-') )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3576
    {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3577
      // oh... damn.
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3578
      $word = '(?:' . generate_hex_numeral_range($word) . ')';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3579
    }
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
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3582
  // return print_r($expanded, true);  
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3583
  return '^' . implode(':', $expanded) . '$';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3584
}
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
 * 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
  3588
 * @param string
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3589
 * @return string
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3590
 * @access private
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
function generate_hex_numeral_range($word)
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3594
{
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3595
  list($low, $high) = explode('-', $word);
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3596
  
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3597
  if ( hexdec($low) > hexdec($high) )
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
    $_ = $low;
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3600
    $low = $high;
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3601
    $high = $_;
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3602
    unset($_);
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3603
  }
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
  while ( strlen($low) < strlen($high) )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3606
  {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3607
    $low = "0$low";
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3608
  }
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
  // trim off everything that's the same
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3611
  $trimmed = '';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3612
  $len = strlen($low);
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3613
  for ( $i = 0; $i < $len; $i++ )
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
    if ( $low{0} === $high{0} )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3616
    {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3617
      $trimmed .= $low{0};
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3618
      $low = substr($low, 1);
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3619
      $high = substr($high, 1);
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
    else
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
      break;
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3624
    }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3625
  }
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
  $len = strlen($high);
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3628
  if ( $len == 1 )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3629
  {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3630
    // 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
  3631
    return $trimmed . __hexdigitrange($low, $high);
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
    
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3634
  $return = '';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3635
  // lower half
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3636
  for ( $i = $len - 1; $i > 0; $i-- )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3637
  {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3638
    if ( $low{$i} == 'f' )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3639
      continue;
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3640
    $return .= $trimmed;
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3641
    for ( $j = 0; $j < $len; $j++ )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3642
    {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3643
      if ( $j < $i )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3644
      {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3645
        $return .= $low{$j};
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3646
      }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3647
      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
  3648
      {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3649
        $return .= __hexdigitrange($low{$j}, 'f');
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
      else if ( $j == $i && $i != $len - 1 )
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
        $return .= __hexdigitrange(dechex(hexdec($low{$j}) + 1), '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
      else
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
        $return .= __hexdigitrange('0', 'f');
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
    }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3660
    $return .= '|';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3661
  }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3662
  // middle block
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3663
  if ( hexdec($low{0}) + 1 < hexdec($high{0}) )
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
    if ( hexdec($low{0}) + 1 < hexdec($high{0}) - 1 )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3666
      $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
  3667
    else
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3668
      $return .= $trimmed . __hexdigitrange($low{0}, $high{0});
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3669
    if ( $len - 1 > 0 )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3670
      $return .= '[0-9a-f]{' . ( $len - 1 ) . '}|';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3671
  }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3672
  // higher half
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3673
  for ( $i = 1; $i < $len; $i++ )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3674
  {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3675
    if ( $high{$i} == '0' )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3676
      continue;
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3677
    $return .= $trimmed;
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3678
    for ( $j = 0; $j < $len; $j++ )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3679
    {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3680
      if ( $j < $i )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3681
      {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3682
        $return .= $high{$j};
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3683
      }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3684
      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
  3685
      {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3686
        $return .= __hexdigitrange('0', $high{$j});
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
      else if ( $j == $i && $i != $len - 1 )
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
        $return .= __hexdigitrange('0', dechex(hexdec($high{$j}) - 1));
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
      else if ( $j > $i )
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
        $return .= __hexdigitrange('0', 'f');
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
      else
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
        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
  3699
      }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3700
    }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3701
    $return .= '|';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3702
  }
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
  return rtrim($return, '|');
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
function __hexdigitrange($low, $high)
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
  if ( $low == $high )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3710
    return $low;
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3711
  if ( empty($low) )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3712
    $low = '0';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3713
  
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3714
  $low_type = ( preg_match('/[0-9]/', $low) ) ? 'num' : 'alph';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3715
  $high_type = ( preg_match('/[0-9]/', $high) ) ? 'num' : 'alph';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3716
  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
  3717
  {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3718
    return "[$low-$high]";
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
  else if ( $low_type == 'num' && $high_type == 'alph' )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3721
  {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3722
    $ret = '[';
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
    if ( $low == '9' )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3725
      $ret .= '9';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3726
    else
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3727
      $ret .= "$low-9";
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3728
    if ( $high == 'a' )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3729
      $ret .= 'a';
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3730
    else
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3731
      $ret .= "a-$high";
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3732
      
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3733
    $ret .= "]";
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3734
    return $ret;
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3735
  }
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3736
  else if ( $low_type == 'alph' && $high_type == 'num' )
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3737
  {
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3738
    // ???? this should never happen
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3739
    return __hexdigitrange($high, $low); 
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3740
  }
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
d6690840e331 Added support for IPv6 IP ranges... ehh, not easy.
Dan
parents: 756
diff changeset
  3743
/**
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
  3744
 * 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
  3745
 * @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
  3746
 * @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
  3747
 */
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
  3748
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
  3749
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
  3750
{
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
  $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
  3752
  $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
  3753
  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
  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
    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
  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
      // ::
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
      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
  3759
      {
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
        $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
  3761
      }
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
    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
  3764
    {
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
      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
  3766
        $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
  3767
      $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
  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
  }
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
  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
  3771
}
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
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
/**
504
bc8e0e9ee01d Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
parents: 500
diff changeset
  3774
 * 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
  3775
 * @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
  3776
 * @return bool
bc8e0e9ee01d Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
parents: 500
diff changeset
  3777
 */
bc8e0e9ee01d Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
parents: 500
diff changeset
  3778
bc8e0e9ee01d Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
parents: 500
diff changeset
  3779
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
  3780
{
bc8e0e9ee01d Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
parents: 500
diff changeset
  3781
  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
  3782
  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
  3783
}
bc8e0e9ee01d Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
parents: 500
diff changeset
  3784
132
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3785
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
  3786
{
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3787
  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
  3788
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3789
    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
  3790
  }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3791
  $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
  3792
  $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
  3793
  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
  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
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
 * 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
  3798
 * 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
  3799
 * 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
  3800
 * @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
  3801
 * @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
  3802
 * @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
  3803
 */
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3804
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
  3805
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
  3806
{
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3807
  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
  3808
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3809
    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
  3810
  }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3811
  $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
  3812
  $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
  3813
  // 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
  3814
  $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
  3815
  
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3816
  $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
  3817
  
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[] = '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
  3819
  
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3820
  $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
  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
  $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
  3823
  $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
  3824
  $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
  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
  // 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
  3827
  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
  3828
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3829
    $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
  3830
    $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
  3831
    $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
  3832
  }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3833
  
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3834
  // 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
  3835
  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
  3836
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3837
    $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
  3838
    $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
  3839
    $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
  3840
  }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3841
  
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3842
  // 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
  3843
  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
  3844
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3845
    $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
  3846
    $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
  3847
    $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
  3848
  }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3849
  
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3850
  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
  3851
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3852
    // 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
  3853
    $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
  3854
    $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
  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
  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
  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
    // 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
  3859
    $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
  3860
    $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
  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 ) ||
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3863
            ( $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
  3864
            ( $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
  3865
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3866
    // 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
  3867
    $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
  3868
    $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
  3869
  }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3870
  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
  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
    // 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
  3873
    $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
  3874
    $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
  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 ( ( !$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
  3877
            ( !$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
  3878
            ( !$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
  3879
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3880
    $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
  3881
    $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
  3882
  }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3883
  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
  3884
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3885
    $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
  3886
    $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
  3887
  }
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
  //
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3890
  // Repetition
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3891
  // 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
  3892
  //
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
  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
  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
    $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
  3897
    $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
  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
  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
  3900
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3901
    $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
  3902
    $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
  3903
  }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3904
  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
  3905
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3906
    $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
  3907
    $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
  3908
  }
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
  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
  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 -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
  3913
    $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
  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
  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
  3916
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3917
    $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
  3918
    $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
  3919
  }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3920
  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
  3921
  {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3922
    $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
  3923
    $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
  3924
  }
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
  // 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
  3927
  $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
  3928
  $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
  3929
  $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
  3930
  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
  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
    $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
  3933
    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
  3934
    {
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 += -1;
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3936
    }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3937
    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
  3938
    {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3939
      $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
  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
    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
  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
      $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
  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
    $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
  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
  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
  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
    $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
  3950
    $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
  3951
    // 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
  3952
    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
  3953
    {
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3954
      $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
  3955
      $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
  3956
    }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3957
  }
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3958
  
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3959
  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
  3960
}
0ae1b281a884 [sync only] Minor display change in Special:About_Enano; added initial PHP function for password strength testing
Dan
parents: 129
diff changeset
  3961
191
3dbe848431b0 Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
parents: 184
diff changeset
  3962
/**
3dbe848431b0 Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
parents: 184
diff changeset
  3963
 * 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
  3964
 * @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
  3965
 * @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
  3966
 */
3dbe848431b0 Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
parents: 184
diff changeset
  3967
3dbe848431b0 Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
parents: 184
diff changeset
  3968
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
  3969
{
3dbe848431b0 Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
parents: 184
diff changeset
  3970
  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
  3971
  $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
  3972
  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
  3973
    $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
  3974
  $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
  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
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
  3977
/**
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
  3978
 * 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
  3979
 * @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
  3980
 */
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
  3981
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
  3982
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
  3983
{
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
  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
  3985
  $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
  3986
  $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
  3987
  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
  3988
}
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
/**
209
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  3991
 * Installs a language.
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  3992
 * @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
  3993
 * @param string The name of the language in English (Spanish)
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  3994
 * @param string The name of the language natively (Español)
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  3995
 * @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
  3996
 */
3dbe848431b0 Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
parents: 184
diff changeset
  3997
209
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  3998
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
  3999
{
209
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4000
  global $db, $session, $paths, $template, $plugins; // Common objects
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4001
  
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
  4002
  $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
  4003
  if ( !$q )
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4004
    $db->_die('functions.php - checking for language existence');
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4005
  
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4006
  if ( $db->numrows() > 0 )
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4007
    // Language already exists
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4008
    return false;
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4009
  
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4010
  $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
  4011
                         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
  4012
                           \'' . $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
  4013
                           \'' . $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
  4014
                           \'' . $db->escape($lang_name_local) . '\'
209
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4015
                         );');
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4016
  if ( !$q )
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4017
    $db->_die('functions.php - installing language');
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4018
  
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
  4019
  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
  4020
  {
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
  4021
    // 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
  4022
    // 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
  4023
    // 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
  4024
    $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
  4025
  }
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
  4026
  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
  4027
  {
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
    $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
  4029
    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
  4030
    {
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
      $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
  4032
    }
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
  4033
  }
209
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4034
  
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4035
  // Do we also need to install a language file?
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4036
  if ( is_string($lang_file) && file_exists($lang_file) )
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4037
  {
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4038
    $lang = new Language($lang_id);
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4039
    $lang->import($lang_file);
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4040
  }
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4041
  else if ( is_string($lang_file) && !file_exists($lang_file) )
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4042
  {
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4043
    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
  4044
    return false;
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4045
  }
8a00247d1dee Login page mostly localized
Dan
parents: 193
diff changeset
  4046
  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
  4047
}
3dbe848431b0 Added a cron framework. Currently tasks will not be run; will implement into templates in next commit
Dan
parents: 184
diff changeset
  4048
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
  4049
/**
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
  4050
 * 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
  4051
 * @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
  4052
 */
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
  4053
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
  4054
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
  4055
{
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
  // 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
  4057
  
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
  // 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
  4059
  $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
  4060
  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
  4061
    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
  4062
  
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
  $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
  4064
  
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
  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
  4066
  {
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
    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
  4068
      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
  4069
    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
  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
      // 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
  4072
      $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
  4073
      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
  4074
        // 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
  4075
        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
  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
      // 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
  4078
      $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
  4079
        
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
      $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
  4081
      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
  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
        $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
  4084
            '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
  4085
            '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
  4086
            '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
  4087
          );
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
    }
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
  }
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
  
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
  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
  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
/**
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
  4096
 * 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
  4097
 * 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
  4098
 * 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
  4099
 * @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
  4100
 * @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
  4101
 * @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
  4102
 * @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
  4103
 * @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
  4104
 * @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
  4105
 */
3daa715e0f69 Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, 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
3daa715e0f69 Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, 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
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
  4108
{
3daa715e0f69 Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, 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
  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
  4110
  
3daa715e0f69 Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, 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
  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
  4112
    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
  4113
  
3daa715e0f69 Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, 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
  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
  4115
    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
  4116
  
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
  4117
  $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
  4118
  $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
  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($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
  4121
    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
  4122
  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
  4123
    @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
  4124
  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
  4125
    // 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
  4126
    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
  4127
    
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
  4128
  $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
  4129
  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
  4130
  {
3daa715e0f69 Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, 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
    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
  4132
      $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
  4133
      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
  4134
    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
  4135
    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
  4136
      $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
  4137
      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
  4138
    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
  4139
      $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
  4140
      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
  4141
    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
  4142
      $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
  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
    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
  4145
      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
  4146
  }
3daa715e0f69 Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, 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
    
3daa715e0f69 Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, 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
  $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
  4149
  $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
  4150
      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
  4151
      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
  4152
      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
  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
  $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
  4155
      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
  4156
      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
  4157
      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
  4158
      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
  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
  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
  4161
  {
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
  4162
    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
  4163
    {
3daa715e0f69 Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, 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
      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
  4165
    }
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
  4166
    $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
  4167
    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
  4168
    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
  4169
      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
  4170
    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
  4171
  }
3daa715e0f69 Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, 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
  4172
  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
  4173
  {
3daa715e0f69 Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, 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
    @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
  4175
    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
  4176
      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
  4177
    // 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
  4178
    
3daa715e0f69 Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, 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
    $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
  4180
    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
  4181
    {
3daa715e0f69 Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, 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
  4182
      // 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
  4183
      $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
  4184
      $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
  4185
    }
3daa715e0f69 Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, 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
    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
  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. 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
  4189
      $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
  4190
      $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
  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
      $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
  4195
      $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
  4196
    }
3daa715e0f69 Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, 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
    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
  4198
    {
3daa715e0f69 Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, 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
      // 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
  4200
      $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
  4201
      $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
  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
    
3daa715e0f69 Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, 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
    $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
  4205
    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
  4206
      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
  4207
    $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
  4208
    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
  4209
      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
  4210
    
3daa715e0f69 Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, 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
    // 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
  4212
    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
  4213
    
3daa715e0f69 Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, 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
    // 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
  4215
    $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
  4216
    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
  4217
    {
3daa715e0f69 Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, 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
      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
  4219
        $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
  4220
        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
  4221
      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
  4222
      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
  4223
        $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
  4224
        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
  4225
      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
  4226
        $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
  4227
        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
  4228
      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
  4229
        $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
  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
      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
  4232
        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
  4233
        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
  4234
        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
  4235
    }
3daa715e0f69 Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, 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
    
3daa715e0f69 Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, 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
    // 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
  4238
    $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
  4239
    
3daa715e0f69 Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, 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
  4240
    // 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
  4241
    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
  4242
    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
  4243
    
3daa715e0f69 Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, 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
    // 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
  4245
    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
  4246
  }
3daa715e0f69 Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, 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
  // 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
  4248
  $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
  4249
  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
  4250
  {
3daa715e0f69 Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, 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
    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
  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
  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
  4254
    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
  4255
  
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
  4256
  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
  4257
}
3daa715e0f69 Alternate scaling using GD is implemented now; images will be scaled with ImageMagick if enabled and working; else, 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
328
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4259
/**
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4260
 * 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
  4261
 * 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
  4262
 * @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
  4263
 * @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
  4264
 */
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
 
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4267
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
  4268
{
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4269
  $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
  4270
  if ( empty($filecontents) )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4271
    return false;
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
  $str_loc = 0;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4274
  $count = 0;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4275
  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
  4276
  {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4277
    $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
  4278
    if ( $where1 === false )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4279
    {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4280
      break;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4281
    }
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4282
    else
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4283
    {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4284
      $str_loc = $where1 + 1;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4285
      $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
  4286
      if ( $where2 === false )
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
        break;
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
      else
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4291
      {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4292
        if ( $where1 + 8 == $where2 )
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
          $count++;
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
        $str_loc = $where2 + 1;
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
    }
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
  
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4301
  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
  4302
}
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
 * 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
  4306
 * @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
  4307
 * @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
  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
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
  4311
{
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4312
  $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
  4313
  if ( empty($filecontents) )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4314
    return false;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4315
  if ( strlen($filecontents) < 10 )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4316
    return false;
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
  $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
  4319
  $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
  4320
  $width = unpack('v', $width);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4321
  $height = unpack('v', $height);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4322
  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
  4323
}
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4324
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4325
/**
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4326
 * 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
  4327
 * @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
  4328
 * @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
  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
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
  4332
{
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4333
  $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
  4334
  if ( empty($filecontents) )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4335
    return false;
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
  $parsed = parse_png($filecontents);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4338
  if ( !$parsed )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4339
    return false;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4340
  
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4341
  if ( !isset($parsed['fdAT']) )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4342
    return false;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4343
  
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4344
  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
  4345
    return true;
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
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4348
/**
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4349
 * 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
  4350
 * @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
  4351
 * @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
  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
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
  4355
{
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4356
  $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
  4357
  if ( empty($filecontents) )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4358
    return false;
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
  $parsed = parse_png($filecontents);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4361
  if ( !$parsed )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4362
    return false;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4363
  
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4364
  $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
  4365
  $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
  4366
  $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
  4367
  $width = unpack('N', $width);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4368
  $height = unpack('N', $height);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4369
  $x = $width[1];
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4370
  $y = $height[1];
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4371
  return array($x, $y);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4372
}
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4373
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4374
/**
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4375
 * 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
  4376
 * @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
  4377
 * @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
  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
function parse_png($data)
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4381
{
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4382
  // 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
  4383
  $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
  4384
  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
  4385
  {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4386
    return false;
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
  $return = array();
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4389
  $data = substr($data, 8);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4390
  while ( strlen($data) > 0 )
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
    $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
  4393
    $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
  4394
    $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
  4395
    $chunklen = $chunklen[1];
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4396
    $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
  4397
    
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4398
    // 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
  4399
    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
  4400
      break;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4401
    
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4402
    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
  4403
      $return[$chunk_type] = array();
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4404
    $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
  4405
    
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4406
    $offset_next = 4 // Length
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4407
                 + 4 // Type
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4408
                 + $chunklen // Data
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4409
                 + 4; // CRC
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4410
    $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
  4411
  }
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4412
  return $return;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4413
}
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4414
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4415
/**
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4416
 * 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
  4417
 * @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
  4418
 * @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
  4419
 * @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
  4420
 * @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
  4421
 */
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4422
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4423
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
  4424
{
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4425
  // 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
  4426
  $Outputarray = array( );
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
  //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
  4429
  $i = 0;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4430
  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
  4431
  {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4432
    $i++;
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
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4435
  // 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
  4436
  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
  4437
  {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4438
    // 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
  4439
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4440
    $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
  4441
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4442
    // 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
  4443
    $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
  4444
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4445
    // 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
  4446
    $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
  4447
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4448
    // 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
  4449
    $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
  4450
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4451
    // 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
  4452
    $numcomponents = ord( $data{ 5 } );
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
    // 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
  4455
    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
  4456
    {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4457
      $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
  4458
                '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
  4459
                '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
  4460
                '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
  4461
    }
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
  else
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4464
  {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4465
    // 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
  4466
    return FALSE;
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
  return $Outputarray;
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
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4472
/**
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4473
 * 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
  4474
 * @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
  4475
 * @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
  4476
 * @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
  4477
 * @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
  4478
 */
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4479
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4480
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
  4481
{
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4482
  // 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
  4483
  // 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
  4484
  // 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
  4485
  $filehnd = @fopen($filename, 'rb');
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4486
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4487
  // 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
  4488
  if ( ! $filehnd  )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4489
  {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4490
    // 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
  4491
    return FALSE;
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
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4494
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4495
  // 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
  4496
  $data = fread( $filehnd, 2 );
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4497
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4498
  // 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
  4499
  if ( $data != "\xFF\xD8" )
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
    // 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
  4502
    fclose($filehnd);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4503
    return FALSE;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4504
  }
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4505
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
  // Read the third character
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4508
  $data = fread( $filehnd, 2 );
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4509
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4510
  // 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
  4511
  if ( $data{0} != "\xFF" )
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
    // 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
  4514
    fclose($filehnd);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4515
    return FALSE;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4516
  }
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4517
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4518
  // 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
  4519
  $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
  4520
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4521
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4522
  // 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
  4523
  //               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
  4524
  //               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
  4525
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4526
  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
  4527
  {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4528
    // 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
  4529
    // 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
  4530
    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
  4531
    {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4532
      // 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
  4533
      // 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
  4534
      $sizestr = fread( $filehnd, 2 );
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4535
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4536
      // 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
  4537
      $decodedsize = unpack ("nsize", $sizestr);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4538
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4539
      // 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
  4540
      $segdatastart = ftell( $filehnd );
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
      // 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
  4543
      $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
  4544
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4545
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4546
      // 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
  4547
      $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
  4548
            "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
  4549
            "SegDataStart" => $segdatastart,
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4550
            "SegData" => $segdata );
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
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4553
    // 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
  4554
    if ( $data{1} == "\xDA" )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4555
    {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4556
      // 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
  4557
      $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
  4558
    }
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4559
    else
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4560
    {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4561
      // 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
  4562
      $data = fread( $filehnd, 2 );
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4563
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4564
      // 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
  4565
      if ( $data{0} != "\xFF" )
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
        // 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
  4568
        fclose($filehnd);
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4569
        return FALSE;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4570
      }
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4571
    }
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
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4574
  // Close File
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4575
  fclose($filehnd);
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
  // 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
  4578
  return $headerdata;
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
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4581
/**
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4582
 * 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
  4583
 * @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
  4584
 * @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
  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
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
  4588
{
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4589
  if ( !file_exists($filename) )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4590
  {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4591
    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
  4592
    return false;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4593
  }
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
  $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
  4596
  if ( !$headers )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4597
  {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4598
    echo "Bad headers<br />";
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4599
    return false;
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
  
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4602
  $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
  4603
  if ( !$metadata )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4604
  {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4605
    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
  4606
    return false;
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
  
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4609
  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
  4610
  {
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4611
    echo "No metadata<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
  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
  4616
}
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4617
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4618
/**
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4619
 * 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
  4620
 * @param int User ID
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4621
 * @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
  4622
 * @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
  4623
 * @return string
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
621
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4626
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
  4627
{
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
  4628
  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
  4629
      '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
  4630
      'gif' => IMAGE_TYPE_GIF,
621
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4631
      'jpg' => IMAGE_TYPE_JPG,
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4632
      '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
  4633
    );
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
  
328
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4635
  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
  4636
    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
  4637
  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
  4638
    return false;
621
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4639
  
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4640
  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
  4641
  {
621
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4642
    if ( $user_email )
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4643
    {
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4644
      return make_gravatar_url($user_email);
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
  }
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4647
  else
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4648
  {
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4649
    $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
  4650
    if ( !file_exists(ENANO_ROOT . $avi_relative_path) )
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
      return '';
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4653
    }
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
  4654
  }
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
  4655
  
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
  4656
  $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
  4657
  
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
  4658
  $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
  4659
  $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
  4660
  $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
  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
  // 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
  4663
  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
  4664
}
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4665
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4666
/**
621
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4667
 * 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
  4668
 * @param string E-mail address
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4669
 * @param int Size - defaults to site-wide limits
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4670
 * @return string URL
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4671
 */
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4672
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4673
function make_gravatar_url($email, $size = false)
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4674
{
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4675
  $email = md5($email);
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4676
  
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4677
  // gravatar parameters
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4678
  if ( $size )
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4679
  {
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4680
    $max_size = intval($size);
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4681
  }
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4682
  else
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4683
  {
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4684
    $max_x = intval(getConfig('avatar_max_width', '150'));
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4685
    $max_y = intval(getConfig('avatar_max_height', '150'));
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4686
    // ?s=
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4687
    $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
  4688
  }
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
  // ?r=
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4691
  $rating = getConfig('gravatar_rating', 'g');
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4692
  
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4693
  // final URL
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4694
  $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
  4695
  
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4696
  return $url;
68f8a9cc0a18 Added Gravatar support! And it's really configurable too.
Dan
parents: 620
diff changeset
  4697
}
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
/**
328
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4700
 * 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
  4701
 * @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
  4702
 * @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
  4703
 */
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4704
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4705
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
  4706
{
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4707
  $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
  4708
  if ( empty($filecontents) )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4709
    return false;
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
  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
  4712
    return 'png';
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4713
  
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4714
  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
  4715
    return 'gif';
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, 2) == "\xFF\xD8" )
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4718
    return 'jpg';
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
  return false;
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4721
}
dc838fd61a06 Added initial avatar support. Currently rather feature complete except for admin controls for avatar.
Dan
parents: 326
diff changeset
  4722
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
  4723
/**
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
  4724
 * 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
  4725
 * @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
  4726
 */
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
  4727
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
  4728
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
  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
  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
  4731
  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
  4732
    $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
  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
  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
  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
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
/**
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
 * 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
  4739
 * @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
  4740
 * @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
  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
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
  4744
{
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
  /*
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
  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
  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
    // 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
  4749
    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
  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
  
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
  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
  4754
}
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
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
 * 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
  4758
 * @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
  4759
 * @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
  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
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
  4763
{
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
  /*
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
  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
  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
    // 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
  4768
    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
  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
  
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
  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
  4773
}
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
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
  4775
/**
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
  4776
 * 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
  4777
 * @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
  4778
 * @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
  4779
 */
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
  4780
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
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
  4782
{
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
  // 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
  4784
  $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
  4785
          // 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
  4786
          '#^\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
  4787
          // 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
  4788
          '#^\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
  4789
          // 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
  4790
          '#/\*(.+)\*/\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
  4791
        ), '', $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
  4792
    
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
  $json = preg_replace('/([,\{\[])([\s]*?)([a-z0-9_]+)([\s]*?):/', '\\1\\2"\\3" :', $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
  4794
  
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
  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
  4796
}
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
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
/**
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
  4799
 * 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
  4800
 * @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
  4801
 * @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
  4802
 */
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
  4803
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
  4804
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
  4805
{
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
  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
  4807
}
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
/**
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
  4810
 * 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
  4811
 */
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
  4812
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
  4813
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
  4814
{
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
  4815
  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
  4816
  $_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
  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
  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
  4819
    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
  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
  $_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
  4822
      '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
  4823
      'time' => microtime_float(),
424
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4824
      'backtrace' => false,
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4825
      '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
  4826
    );
424
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4827
  if ( function_exists('memory_get_usage') )
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4828
  {
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4829
    $_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
  4830
  }
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
  4831
}
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
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
  4833
/**
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
  4834
 * 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
  4835
 * @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
  4836
 * @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
  4837
 * @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
  4838
 * @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
  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
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
  4841
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
  4842
{
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
  4843
  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
  4844
    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
  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
  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
  4847
  $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
  4848
  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
  4849
  {
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
    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
  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
  $_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
  4853
      '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
  4854
      'time' => microtime_float(),
424
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4855
      '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
  4856
      '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
  4857
      '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
  4858
    );
424
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4859
  if ( function_exists('memory_get_usage') )
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4860
  {
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4861
    $_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
  4862
  }
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
  4863
  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
  4864
}
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
  4865
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
  4866
/**
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
  4867
 * 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
  4868
 * @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
  4869
 */
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
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
  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
  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
  4874
    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
  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
  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
  4877
  
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
  $_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
  4879
      '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
  4880
    );
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
  4881
}
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
  4882
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
  4883
/**
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
  4884
 * 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
  4885
 * @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
  4886
 */
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
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
  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
  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
  4891
}
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
 * 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
  4895
 * @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
  4896
 */
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
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
  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
  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
  4901
    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
  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
  $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
  4904
  
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
  $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
  4906
  $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
  4907
  
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
  $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
  4909
  
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
  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
  4911
  {
592
27377179fe58 Another sweep from the optimization monster.
Dan
parents: 582
diff changeset
  4912
    // $time_since_last = $entry['time'] - $time_last;
27377179fe58 Another sweep from the optimization monster.
Dan
parents: 582
diff changeset
  4913
    // if ( $time_since_last < 0.01 )
27377179fe58 Another sweep from the optimization monster.
Dan
parents: 582
diff changeset
  4914
    //   continue;
27377179fe58 Another sweep from the optimization monster.
Dan
parents: 582
diff changeset
  4915
    
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
  4916
    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
  4917
    {
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
  4918
      $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
  4919
      
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
  4920
      $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
  4921
      $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
  4922
      $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
  4923
      $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
  4924
      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
  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
    
382
2ccb55995aef Profiling enabled for RenderMan's wikiformat routine; [minor] made HTML from profiler more pretty
Dan
parents: 381
diff changeset
  4927
    $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
  4928
    
382
2ccb55995aef Profiling enabled for RenderMan's wikiformat routine; [minor] made HTML from profiler more pretty
Dan
parents: 381
diff changeset
  4929
    $html .= '<tr>' . "\n";
2ccb55995aef Profiling enabled for RenderMan's wikiformat routine; [minor] made HTML from profiler more pretty
Dan
parents: 381
diff changeset
  4930
    $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
  4931
    $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
  4932
    $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
  4933
    
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
    $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
  4935
    
382
2ccb55995aef Profiling enabled for RenderMan's wikiformat routine; [minor] made HTML from profiler more pretty
Dan
parents: 381
diff changeset
  4936
    $html .= '<tr>' . "\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="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
  4938
    $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
  4939
    $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
  4940
    
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
  4941
    $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
  4942
    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
  4943
    {
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
  4944
      $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
  4945
      $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
  4946
    }
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
    
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
  4948
    $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
  4949
    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
  4950
      $time_html = 'Marginal';
382
2ccb55995aef Profiling enabled for RenderMan's wikiformat routine; [minor] made HTML from profiler more pretty
Dan
parents: 381
diff changeset
  4951
    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
  4952
      $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
  4953
    
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
  4954
    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
  4955
      $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
  4956
      
382
2ccb55995aef Profiling enabled for RenderMan's wikiformat routine; [minor] made HTML from profiler more pretty
Dan
parents: 381
diff changeset
  4957
    $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
  4958
    $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
  4959
    $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
  4960
    $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
  4961
    
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
  4962
    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
  4963
    {
382
2ccb55995aef Profiling enabled for RenderMan's wikiformat routine; [minor] made HTML from profiler more pretty
Dan
parents: 381
diff changeset
  4964
      $html .= '<tr>' . "\n";
2ccb55995aef Profiling enabled for RenderMan's wikiformat routine; [minor] made HTML from profiler more pretty
Dan
parents: 381
diff changeset
  4965
      $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
  4966
      $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
  4967
      $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
  4968
    }
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
    
424
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4970
    if ( $entry['mem'] )
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4971
    {
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4972
      $html .= '<tr>' . "\n";
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4973
      $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
  4974
      $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
  4975
      $html .= '</tr>' . "\n";
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4976
    }
f58e0b6e9c22 Some memory usage improvements, I think. PHP is being weird to me.
Dan
parents: 411
diff changeset
  4977
    
382
2ccb55995aef Profiling enabled for RenderMan's wikiformat routine; [minor] made HTML from profiler more pretty
Dan
parents: 381
diff changeset
  4978
    $html .= "\n";
2ccb55995aef Profiling enabled for RenderMan's wikiformat routine; [minor] made HTML from profiler more pretty
Dan
parents: 381
diff changeset
  4979
    
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
  4980
    $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
  4981
  }
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
  4982
  $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
  4983
  
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
  4984
  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
  4985
}
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
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
// 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
  4988
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
  4989
376
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  4990
/**
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  4991
 * 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
  4992
 * @param string Haystack
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  4993
 * @param string Needle
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  4994
 * @return int
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  4995
 */
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
function get_char_count($string, $char)
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  4998
{
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  4999
  $char = substr($char, 0, 1);
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5000
  $count = 0;
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5001
  for ( $i = 0; $i < strlen($string); $i++ )
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
    if ( $string{$i} == $char )
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5004
      $count++;
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5005
  }
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5006
  return $count;
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5007
}
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
/**
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5010
 * Returns the number of lines in a string.
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5011
 * @param string String to check
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5012
 * @return int
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
function get_line_count($string)
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5016
{
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5017
  return ( get_char_count($string, "\n") ) + 1;
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5018
}
66732bd4532c Finished (or nearly finished) the admin language CP
Dan
parents: 373
diff changeset
  5019
481
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5020
if ( !function_exists('sys_get_temp_dir') )
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5021
{
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5022
    // Based on http://www.phpit.net/
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5023
    // article/creating-zip-tar-archives-dynamically-php/2/
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5024
    /**
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5025
     * Attempt to get the system's temp directory.
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5026
     * @return string or bool false on failure
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
    
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5029
    function sys_get_temp_dir()
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
        // Try to get from environment variable
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5032
        if ( !empty($_ENV['TMP']) )
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
            return realpath( $_ENV['TMP'] );
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5035
        }
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5036
        else if ( !empty($_ENV['TMPDIR']) )
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5037
        {
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5038
            return realpath( $_ENV['TMPDIR'] );
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
        else if ( !empty($_ENV['TEMP']) )
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
            return realpath( $_ENV['TEMP'] );
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
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5045
        // Detect by creating a temporary file
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5046
        else
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
            // Try to use system's temporary directory
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5049
            // as random name shouldn't exist
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5050
            $temp_file = tempnam( md5(uniqid(rand(), TRUE)), '' );
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5051
            if ( $temp_file )
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5052
            {
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5053
                $temp_dir = realpath( dirname($temp_file) );
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5054
                unlink( $temp_file );
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5055
                return $temp_dir;
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5056
            }
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5057
            else
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
                return FALSE;
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5060
            }
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5061
        }
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
}
07bf15b066bc Hopefully completed rewrite and localization of rollback backend and interface
Dan
parents: 479
diff changeset
  5064
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
  5065
/**
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
  5066
 * 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
  5067
 */
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
  5068
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
  5069
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
  5070
{
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
  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
  5072
  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
  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
  $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
  5075
  $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
  5076
  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
  5077
    $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
  5078
  
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
  $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
  5080
  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
  5081
  
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
  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
  5083
  {
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
    $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
  5085
    $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
  5086
    $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
  5087
    $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
  5088
    $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
  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
}
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
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
/**
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
 * 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
  5094
 */
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
573
43e7254afdb4 Renamed some functions (that were new in this release anyway) due to compatibility broken with PunBB bridge
Dan
parents: 566
diff changeset
  5096
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
  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
  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
  5099
  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
  5100
  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
  5101
  
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
  5102
  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
  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
  $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
  5105
  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
  5106
  {
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
    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
  5108
      $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
  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
  
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
  $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
  5112
  $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
  5113
  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
  5114
  {
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
    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
  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
      $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
  5118
      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
  5119
    }
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
    $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
  5122
    $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
  5123
  }
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
  $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
  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
  // 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
  5127
  $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
  5128
  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
  5129
    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
  5130
  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
  5131
  fclose($fh);
613
c08670a77871 Completed work (we hope) on CacheManager admin page
Dan
parents: 610
diff changeset
  5132
  
c08670a77871 Completed work (we hope) on CacheManager admin page
Dan
parents: 610
diff changeset
  5133
  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
  5134
}
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
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
/**
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
 * 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
  5138
 */
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
  5139
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
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
  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
  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
  5143
  {
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
    @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
  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
  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
  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
    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
  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
}
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
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
  5152
/**
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
  5153
 * 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
  5154
 */
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
  5155
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
  5156
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
  5157
{
613
c08670a77871 Completed work (we hope) on CacheManager admin page
Dan
parents: 610
diff changeset
  5158
  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
  5159
  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
  5160
  {
613
c08670a77871 Completed work (we hope) on CacheManager admin page
Dan
parents: 610
diff changeset
  5161
    $cache->purge('page_meta');
c08670a77871 Completed work (we hope) on CacheManager admin page
Dan
parents: 610
diff changeset
  5162
    $cache->purge('anon_sidebar');
c08670a77871 Completed work (we hope) on CacheManager admin page
Dan
parents: 610
diff changeset
  5163
    $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
  5164
    $cache->purge('wiki_edit_notice');
613
c08670a77871 Completed work (we hope) on CacheManager admin page
Dan
parents: 610
diff changeset
  5165
    
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
  5166
    $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
  5167
        'aes_decrypt.php',
613
c08670a77871 Completed work (we hope) on CacheManager admin page
Dan
parents: 610
diff changeset
  5168
        // 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
  5169
        '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
  5170
      );
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
  5171
    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
  5172
    {
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
      $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
  5174
      // 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
  5175
      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
  5176
        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
  5177
      
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
      // 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
  5179
      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
  5180
        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
  5181
      // 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
  5182
      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
  5183
        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
  5184
      // 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
  5185
      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
  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
      // 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
  5188
      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
  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
      // language files
613
c08670a77871 Completed work (we hope) on CacheManager admin page
Dan
parents: 610
diff changeset
  5191
      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
  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
    }
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
    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
  5195
  }
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
  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
  5197
}
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
851
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5199
/**
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5200
 * 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
  5201
 * @param string command
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5202
 * @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
  5203
 */
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5204
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5205
function which($executable)
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5206
{
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5207
  $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
  5208
  if ( !$path )
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5209
    // 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
  5210
    return false;
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5211
    
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5212
  $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
  5213
  $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
  5214
  $separator = $win32 ? ';' : ':';
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5215
  $paths = explode($separator, $path);
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5216
  foreach ( $paths as $dir )
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
    foreach ( $extensions as $ext )
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5219
    {
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5220
      $fullpath = "$dir/{$executable}{$ext}";
1133
6e51ca5e29eb which(): added silencer to shut up errors on servers with open_basedir restriction
Dan
parents: 1123
diff changeset
  5221
      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
  5222
      {
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5223
        return $fullpath;
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5224
      }
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
  }
b98798f6572d Redesigned installer sysreqs page to cover more features, be more comprehensive, and look better
Dan
parents: 842
diff changeset
  5227
  return false;
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
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
  5230
/**
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5231
 * 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
  5232
 * @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
  5233
 * @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
  5234
 */
f3a5a276208c Added support for alternate port numbers on database servers. Also in install-cli, merged in new sysreqs functionality.
Dan
parents: 851
diff changeset
  5235
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
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
  5237
{
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
  // 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
  5239
  // 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
  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
  $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
  5242
  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
  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
    $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
  5245
    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
  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
      $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
  5248
      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
  5249
        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
  5250
      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
  5251
      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
  5252
      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
  5253
    }
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
    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
  5255
    {
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
      $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
  5257
      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
  5258
        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
  5259
      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
  5260
      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
  5261
      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
  5262
    }
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
  }
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
  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
  5265
  {
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
    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
  5267
    {
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
      $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
  5269
      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
  5270
        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
  5271
      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
  5272
      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
  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
    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
  5275
    {
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
      $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
  5277
      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
  5278
        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
  5279
      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
  5280
      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
  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
  }
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
}
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