author | Dan |
Thu, 26 Feb 2009 01:27:23 -0500 | |
changeset 844 | 7549f2880c32 |
parent 843 | 4415e50e4e84 |
child 876 | aed15c337b72 |
permissions | -rw-r--r-- |
1 | 1 |
<?php |
2 |
||
3 |
/** |
|
4 |
* Enano - an open-source CMS capable of wiki functions, Drupal-like sidebar blocks, and everything in between |
|
801
eb8b23f11744
Two big commits in one day I know, but redid password storage to use HMAC-SHA1. Consolidated much AES processing to three core methods in session that should handle everything automagically. Installation works; upgrades should. Rebranded as 1.1.6.
Dan
parents:
793
diff
changeset
|
5 |
* Version 1.1.6 (Caoineag beta 1) |
536 | 6 |
* Copyright (C) 2006-2008 Dan Fuhry |
1 | 7 |
* paths.php - The part of Enano that actually manages content. Everything related to page handling and namespaces is in here. |
8 |
* |
|
9 |
* This program is Free Software; you can redistribute and/or modify it under the terms of the GNU General Public License |
|
10 |
* as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. |
|
11 |
* |
|
12 |
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied |
|
13 |
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for details. |
|
14 |
* |
|
15 |
* @package Enano |
|
16 |
* @subpackage PathManager |
|
23
320acf077276
At last, I fixed all those phased-out enano.homelinux.org links!
Dan
parents:
21
diff
changeset
|
17 |
* @see http://enanocms.org/Help:API_Documentation |
1 | 18 |
*/ |
19 |
||
571
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
20 |
class pathManager |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
21 |
{ |
692
78473351a6c9
Changed namespace properties (including core identifier) for external pages that load the Enano API to be a uniform "API" namespace and "SystemAPI:" prefix.
Dan
parents:
685
diff
changeset
|
22 |
public $pages, $custom_page, $cpage, $page, $fullpage, $page_exists, $page_id, $namespace, $nslist, $admin_tree, $wiki_mode, $page_protected, $template_cache, $external_api_page; |
571
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
23 |
|
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
24 |
/** |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
25 |
* List of custom processing functions for namespaces. This is protected so trying to do anything with it will throw an error. |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
26 |
* @access private |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
27 |
* @var array |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
28 |
*/ |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
29 |
|
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
30 |
protected $namespace_processors; |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
31 |
|
1 | 32 |
function __construct() |
33 |
{ |
|
34 |
global $db, $session, $paths, $template, $plugins; // Common objects |
|
35 |
||
36 |
$GLOBALS['paths'] =& $this; |
|
37 |
$this->pages = Array(); |
|
38 |
||
39 |
// DEFINE NAMESPACES HERE |
|
40 |
// The key names should NOT EVER be changed, or Enano will be very broken |
|
771
5e85d7db8ee5
Merged WINDOWS_MOD_REWRITE_WORKAROUNDS changes from stable.
Dan
parents:
770
diff
changeset
|
41 |
$namespace_delimiter = ( defined('WINDOWS_MOD_REWRITE_WORKAROUNDS') ) ? '.' : ':'; |
1 | 42 |
$this->nslist = Array( |
771
5e85d7db8ee5
Merged WINDOWS_MOD_REWRITE_WORKAROUNDS changes from stable.
Dan
parents:
770
diff
changeset
|
43 |
'Article' => '', |
5e85d7db8ee5
Merged WINDOWS_MOD_REWRITE_WORKAROUNDS changes from stable.
Dan
parents:
770
diff
changeset
|
44 |
'User' => 'User' . $namespace_delimiter, |
5e85d7db8ee5
Merged WINDOWS_MOD_REWRITE_WORKAROUNDS changes from stable.
Dan
parents:
770
diff
changeset
|
45 |
'File' => 'File' . $namespace_delimiter, |
5e85d7db8ee5
Merged WINDOWS_MOD_REWRITE_WORKAROUNDS changes from stable.
Dan
parents:
770
diff
changeset
|
46 |
'Help' => 'Help' . $namespace_delimiter, |
5e85d7db8ee5
Merged WINDOWS_MOD_REWRITE_WORKAROUNDS changes from stable.
Dan
parents:
770
diff
changeset
|
47 |
'Admin' => 'Admin' . $namespace_delimiter, |
5e85d7db8ee5
Merged WINDOWS_MOD_REWRITE_WORKAROUNDS changes from stable.
Dan
parents:
770
diff
changeset
|
48 |
'Special' => 'Special' . $namespace_delimiter, |
5e85d7db8ee5
Merged WINDOWS_MOD_REWRITE_WORKAROUNDS changes from stable.
Dan
parents:
770
diff
changeset
|
49 |
'System' => 'Enano' . $namespace_delimiter, |
5e85d7db8ee5
Merged WINDOWS_MOD_REWRITE_WORKAROUNDS changes from stable.
Dan
parents:
770
diff
changeset
|
50 |
'Template' => 'Template' . $namespace_delimiter, |
5e85d7db8ee5
Merged WINDOWS_MOD_REWRITE_WORKAROUNDS changes from stable.
Dan
parents:
770
diff
changeset
|
51 |
'Category' => 'Category' . $namespace_delimiter, |
5e85d7db8ee5
Merged WINDOWS_MOD_REWRITE_WORKAROUNDS changes from stable.
Dan
parents:
770
diff
changeset
|
52 |
'API' => 'SystemAPI' . $namespace_delimiter, |
5e85d7db8ee5
Merged WINDOWS_MOD_REWRITE_WORKAROUNDS changes from stable.
Dan
parents:
770
diff
changeset
|
53 |
'Project' => sanitize_page_id(getConfig('site_name')) . $namespace_delimiter, |
1 | 54 |
); |
55 |
||
56 |
// ACL types |
|
57 |
// These can also be added from within plugins |
|
58 |
||
218 | 59 |
$session->register_acl_type('read', AUTH_ALLOW, 'perm_read'); |
60 |
$session->register_acl_type('post_comments', AUTH_ALLOW, 'perm_post_comments', Array('read'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
61 |
$session->register_acl_type('edit_comments', AUTH_ALLOW, 'perm_edit_comments', Array('post_comments'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
62 |
$session->register_acl_type('edit_page', AUTH_WIKIMODE, 'perm_edit_page', Array('view_source'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
748
e39454295bbb
Added makeSwitchable Dynano method for textareas; enabled support for makeSwitchable in comment runtime
Dan
parents:
741
diff
changeset
|
63 |
$session->register_acl_type('edit_wysiwyg', AUTH_ALLOW, 'perm_edit_wysiwyg', Array(), 'Article|User|Project|Template|File|Help|System|Category'); |
218 | 64 |
$session->register_acl_type('view_source', AUTH_WIKIMODE, 'perm_view_source', Array('read'), 'Article|User|Project|Template|File|Help|System|Category'); // Only used if the page is protected |
65 |
$session->register_acl_type('mod_comments', AUTH_DISALLOW, 'perm_mod_comments', Array('edit_comments'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
66 |
$session->register_acl_type('history_view', AUTH_WIKIMODE, 'perm_history_view', Array('read'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
67 |
$session->register_acl_type('history_rollback', AUTH_DISALLOW, 'perm_history_rollback', Array('history_view'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
238 | 68 |
$session->register_acl_type('history_rollback_extra', AUTH_DISALLOW, 'perm_history_rollback_extra', Array('history_rollback'), 'Article|User|Project|Template|File|Help|System|Category|Special'); |
218 | 69 |
$session->register_acl_type('protect', AUTH_DISALLOW, 'perm_protect', Array('read'), 'Article|User|Project|Template|File|Help|System|Category'); |
70 |
$session->register_acl_type('rename', AUTH_WIKIMODE, 'perm_rename', Array('read'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
71 |
$session->register_acl_type('clear_logs', AUTH_DISALLOW, 'perm_clear_logs', Array('read', 'protect', 'even_when_protected'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
72 |
$session->register_acl_type('vote_delete', AUTH_ALLOW, 'perm_vote_delete', Array('read'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
73 |
$session->register_acl_type('vote_reset', AUTH_DISALLOW, 'perm_vote_reset', Array('read'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
74 |
$session->register_acl_type('delete_page', AUTH_DISALLOW, 'perm_delete_page', Array(), 'Article|User|Project|Template|File|Help|System|Category'); |
|
75 |
$session->register_acl_type('tag_create', AUTH_ALLOW, 'perm_tag_create', Array('read'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
76 |
$session->register_acl_type('tag_delete_own', AUTH_ALLOW, 'perm_tag_delete_own', Array('read', 'tag_create'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
77 |
$session->register_acl_type('tag_delete_other', AUTH_DISALLOW, 'perm_tag_delete_other', Array('read'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
78 |
$session->register_acl_type('set_wiki_mode', AUTH_DISALLOW, 'perm_set_wiki_mode', Array('read'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
79 |
$session->register_acl_type('password_set', AUTH_DISALLOW, 'perm_password_set', Array('read'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
80 |
$session->register_acl_type('password_reset', AUTH_DISALLOW, 'perm_password_reset', Array('read'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
81 |
$session->register_acl_type('mod_misc', AUTH_DISALLOW, 'perm_mod_misc', Array(), 'All'); |
|
82 |
$session->register_acl_type('edit_cat', AUTH_WIKIMODE, 'perm_edit_cat', Array('read'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
83 |
$session->register_acl_type('even_when_protected', AUTH_DISALLOW, 'perm_even_when_protected', Array('edit_page', 'rename', 'mod_comments', 'edit_cat'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
84 |
$session->register_acl_type('upload_files', AUTH_DISALLOW, 'perm_upload_files', Array('create_page'), 'Article|User|Project|Template|File|Help|System|Category|Special'); |
|
85 |
$session->register_acl_type('upload_new_version', AUTH_WIKIMODE, 'perm_upload_new_version', Array('upload_files'), 'Article|User|Project|Template|File|Help|System|Category|Special'); |
|
86 |
$session->register_acl_type('create_page', AUTH_WIKIMODE, 'perm_create_page', Array(), 'Article|User|Project|Template|File|Help|System|Category|Special'); |
|
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:
372
diff
changeset
|
87 |
$session->register_acl_type('html_in_pages', AUTH_DISALLOW, 'perm_html_in_pages', Array('edit_page'), 'Article|User|Project|Template|File|Help|System|Category|Admin'); |
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:
372
diff
changeset
|
88 |
$session->register_acl_type('php_in_pages', AUTH_DISALLOW, 'perm_php_in_pages', Array('edit_page', 'html_in_pages'), 'Article|User|Project|Template|File|Help|System|Category|Admin'); |
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:
540
diff
changeset
|
89 |
$session->register_acl_type('custom_user_title', AUTH_DISALLOW, 'perm_custom_user_title', Array(), 'User|Special'); |
571
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
90 |
$session->register_acl_type('edit_acl', AUTH_DISALLOW, 'perm_edit_acl', Array()); |
1 | 91 |
|
92 |
// DO NOT add new admin pages here! Use a plugin to call $paths->addAdminNode(); |
|
613 | 93 |
$this->addAdminNode('adm_cat_general', 'adm_page_general_config', 'GeneralConfig', array(2, 2)); |
94 |
$this->addAdminNode('adm_cat_general', 'adm_page_file_uploads', 'UploadConfig', array(2, 5)); |
|
95 |
$this->addAdminNode('adm_cat_general', 'adm_page_file_types', 'UploadAllowedMimeTypes', array(1, 5)); |
|
96 |
$this->addAdminNode('adm_cat_content', 'adm_page_manager', 'PageManager', array(1, 4)); |
|
97 |
$this->addAdminNode('adm_cat_content', 'adm_page_editor', 'PageEditor', array(3, 3)); |
|
98 |
$this->addAdminNode('adm_cat_content', 'adm_page_pg_groups', 'PageGroups', array(4, 3)); |
|
99 |
$this->addAdminNode('adm_cat_appearance', 'adm_page_themes', 'ThemeManager', array(4, 4)); |
|
100 |
$this->addAdminNode('adm_cat_appearance', 'adm_page_plugins', 'PluginManager', array(2, 4)); |
|
101 |
$this->addAdminNode('adm_cat_appearance', 'adm_page_db_backup', 'DBBackup', array(1, 2)); |
|
102 |
$this->addAdminNode('adm_cat_appearance', 'adm_page_lang_manager', 'LangManager', array(1, 3)); |
|
103 |
$this->addAdminNode('adm_cat_appearance', 'adm_page_cache_manager', 'CacheManager', array(3, 1)); |
|
104 |
$this->addAdminNode('adm_cat_users', 'adm_page_users', 'UserManager', array(3, 5)); |
|
105 |
$this->addAdminNode('adm_cat_users', 'adm_page_user_groups', 'GroupManager', array(3, 2)); |
|
106 |
$this->addAdminNode('adm_cat_users', 'adm_page_coppa', 'COPPA', array(4, 1)); |
|
107 |
$this->addAdminNode('adm_cat_users', 'adm_page_mass_email', 'MassEmail', array(2, 3)); |
|
108 |
$this->addAdminNode('adm_cat_users', 'adm_page_user_ranks', 'UserRanks', array(4, 5)); |
|
109 |
$this->addAdminNode('adm_cat_security', 'adm_page_security_log', 'SecurityLog', array(3, 4)); |
|
110 |
$this->addAdminNode('adm_cat_security', 'adm_page_ban_control', 'BanControl', array(2, 1)); |
|
1 | 111 |
|
112 |
$code = $plugins->setHook('acl_rule_init'); |
|
113 |
foreach ( $code as $cmd ) |
|
114 |
{ |
|
115 |
eval($cmd); |
|
116 |
} |
|
117 |
||
592 | 118 |
$this->wiki_mode = ( getConfig('wiki_mode') == '1' ) ? 1 : 0; |
1 | 119 |
$this->template_cache = Array(); |
120 |
} |
|
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
|
121 |
|
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:
372
diff
changeset
|
122 |
function parse_url($sanitize = true) |
1 | 123 |
{ |
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:
372
diff
changeset
|
124 |
$title = ''; |
515
be77f34d03af
Fixed bad URL interpretation on CGI and Apache wrongly supplying PATH_INFO when directory index requested
Dan
parents:
510
diff
changeset
|
125 |
if ( isset($_GET['title']) ) |
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:
372
diff
changeset
|
126 |
{ |
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:
372
diff
changeset
|
127 |
$title = $_GET['title']; |
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:
372
diff
changeset
|
128 |
} |
515
be77f34d03af
Fixed bad URL interpretation on CGI and Apache wrongly supplying PATH_INFO when directory index requested
Dan
parents:
510
diff
changeset
|
129 |
else if ( isset($_SERVER['PATH_INFO']) ) |
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:
372
diff
changeset
|
130 |
{ |
515
be77f34d03af
Fixed bad URL interpretation on CGI and Apache wrongly supplying PATH_INFO when directory index requested
Dan
parents:
510
diff
changeset
|
131 |
// fix for apache + CGI (occurred on a GoDaddy server, thanks mm3) |
be77f34d03af
Fixed bad URL interpretation on CGI and Apache wrongly supplying PATH_INFO when directory index requested
Dan
parents:
510
diff
changeset
|
132 |
if ( @substr(@$_SERVER['GATEWAY_INTERFACE'], 0, 3) === 'CGI' && $_SERVER['PATH_INFO'] == scriptPath . '/index.php' ) |
be77f34d03af
Fixed bad URL interpretation on CGI and Apache wrongly supplying PATH_INFO when directory index requested
Dan
parents:
510
diff
changeset
|
133 |
{ |
be77f34d03af
Fixed bad URL interpretation on CGI and Apache wrongly supplying PATH_INFO when directory index requested
Dan
parents:
510
diff
changeset
|
134 |
// do nothing; ignore PATH_INFO |
be77f34d03af
Fixed bad URL interpretation on CGI and Apache wrongly supplying PATH_INFO when directory index requested
Dan
parents:
510
diff
changeset
|
135 |
} |
be77f34d03af
Fixed bad URL interpretation on CGI and Apache wrongly supplying PATH_INFO when directory index requested
Dan
parents:
510
diff
changeset
|
136 |
else |
be77f34d03af
Fixed bad URL interpretation on CGI and Apache wrongly supplying PATH_INFO when directory index requested
Dan
parents:
510
diff
changeset
|
137 |
{ |
be77f34d03af
Fixed bad URL interpretation on CGI and Apache wrongly supplying PATH_INFO when directory index requested
Dan
parents:
510
diff
changeset
|
138 |
$title = substr($_SERVER['PATH_INFO'], ( strpos($_SERVER['PATH_INFO'], '/') ) + 1 ); |
be77f34d03af
Fixed bad URL interpretation on CGI and Apache wrongly supplying PATH_INFO when directory index requested
Dan
parents:
510
diff
changeset
|
139 |
} |
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:
372
diff
changeset
|
140 |
} |
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:
372
diff
changeset
|
141 |
else |
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:
372
diff
changeset
|
142 |
{ |
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:
372
diff
changeset
|
143 |
// This method really isn't supported because apache has a habit of passing dots as underscores, thus corrupting the request |
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:
372
diff
changeset
|
144 |
// If you really want to try it, the URI format is yoursite.com/?/Page_title |
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:
372
diff
changeset
|
145 |
if ( count($_GET) > 0 ) |
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:
372
diff
changeset
|
146 |
{ |
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:
372
diff
changeset
|
147 |
list($getkey) = array_keys($_GET); |
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:
372
diff
changeset
|
148 |
if ( substr($getkey, 0, 1) == '/' ) |
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:
372
diff
changeset
|
149 |
{ |
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:
372
diff
changeset
|
150 |
$title = substr($getkey, 1); |
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:
372
diff
changeset
|
151 |
} |
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:
372
diff
changeset
|
152 |
} |
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:
372
diff
changeset
|
153 |
} |
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:
372
diff
changeset
|
154 |
return ( $sanitize ) ? sanitize_page_id($title) : $title; |
1 | 155 |
} |
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
|
156 |
|
1 | 157 |
function init() |
158 |
{ |
|
159 |
global $db, $session, $paths, $template, $plugins; // Common objects |
|
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
|
160 |
global $lang; |
607
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
parents:
605
diff
changeset
|
161 |
global $cache; |
1 | 162 |
|
163 |
$code = $plugins->setHook('paths_init_before'); |
|
164 |
foreach ( $code as $cmd ) |
|
165 |
{ |
|
166 |
eval($cmd); |
|
167 |
} |
|
168 |
||
607
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
parents:
605
diff
changeset
|
169 |
if ( $page_cache = $cache->fetch('page_meta') ) |
1 | 170 |
{ |
607
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
parents:
605
diff
changeset
|
171 |
$this->pages = array_merge($this->pages, $page_cache); |
1 | 172 |
} |
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
|
173 |
else |
1 | 174 |
{ |
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
|
175 |
$e = $db->sql_query('SELECT name,urlname,namespace,special,visible,comments_on,protected,delvotes,' . "\n" |
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:
801
diff
changeset
|
176 |
. ' delvote_ips,wiki_mode,password,page_format FROM '.table_prefix.'pages ORDER BY name;'); |
1 | 177 |
|
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
|
178 |
if( !$e ) |
380
73444271fd1c
Updated acledit and comment templates on themes, as they weren't in sync with Oxygen; fixed some undefined index errors in SpecialAdmin and paths
Dan
parents:
377
diff
changeset
|
179 |
{ |
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
|
180 |
$db->_die('The error seems to have occured while selecting the page information. File: includes/paths.php; line: '.__LINE__); |
380
73444271fd1c
Updated acledit and comment templates on themes, as they weren't in sync with Oxygen; fixed some undefined index errors in SpecialAdmin and paths
Dan
parents:
377
diff
changeset
|
181 |
} |
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
|
182 |
while($r = $db->fetchrow()) |
380
73444271fd1c
Updated acledit and comment templates on themes, as they weren't in sync with Oxygen; fixed some undefined index errors in SpecialAdmin and paths
Dan
parents:
377
diff
changeset
|
183 |
{ |
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
|
184 |
$r = $this->calculate_metadata_from_row($r); |
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
|
185 |
|
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
|
186 |
$this->pages[$r['urlname']] = $r; |
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
|
187 |
$this->pages[] =& $this->pages[$r['urlname']]; |
380
73444271fd1c
Updated acledit and comment templates on themes, as they weren't in sync with Oxygen; fixed some undefined index errors in SpecialAdmin and paths
Dan
parents:
377
diff
changeset
|
188 |
} |
1 | 189 |
|
607
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
parents:
605
diff
changeset
|
190 |
$this->update_metadata_cache(); |
1 | 191 |
} |
192 |
$db->free_result(); |
|
351 | 193 |
if ( defined('ENANO_INTERFACE_INDEX') || defined('ENANO_INTERFACE_AJAX') || defined('IN_ENANO_UPGRADE') ) |
1 | 194 |
{ |
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:
372
diff
changeset
|
195 |
$title = $this->parse_url(false); |
741 | 196 |
if ( empty($title) && get_main_page() != '' ) |
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:
372
diff
changeset
|
197 |
{ |
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:
372
diff
changeset
|
198 |
$this->main_page(); |
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:
372
diff
changeset
|
199 |
} |
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:
372
diff
changeset
|
200 |
if ( strstr($title, ' ') || strstr($title, '+') || strstr($title, '%20') ) |
1 | 201 |
{ |
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:
372
diff
changeset
|
202 |
$title = sanitize_page_id($title); |
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:
372
diff
changeset
|
203 |
redirect(makeUrl($title), '', '', 0); |
1 | 204 |
} |
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:
372
diff
changeset
|
205 |
$title = sanitize_page_id($title); |
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:
372
diff
changeset
|
206 |
// We've got the title, pull the namespace from it |
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:
372
diff
changeset
|
207 |
$namespace = 'Article'; |
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:
372
diff
changeset
|
208 |
$page_id = $title; |
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:
372
diff
changeset
|
209 |
foreach ( $this->nslist as $ns => $prefix ) |
1 | 210 |
{ |
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:
372
diff
changeset
|
211 |
$prefix_len = strlen($prefix); |
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:
372
diff
changeset
|
212 |
if ( substr($title, 0, $prefix_len) == $prefix ) |
311
a007145a0ff6
Deprecated debugConsole and removed all calls to it. Added a lot of comments to common.php. Added support for "anonymous pages" that are created when the Enano API is loaded from an external script. Fixed missing border-bottom on Type 2 sidebar blocks in Oxygen.
Dan
parents:
292
diff
changeset
|
213 |
{ |
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:
372
diff
changeset
|
214 |
$page_id = substr($title, $prefix_len); |
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:
372
diff
changeset
|
215 |
$namespace = $ns; |
311
a007145a0ff6
Deprecated debugConsole and removed all calls to it. Added a lot of comments to common.php. Added support for "anonymous pages" that are created when the Enano API is loaded from an external script. Fixed missing border-bottom on Type 2 sidebar blocks in Oxygen.
Dan
parents:
292
diff
changeset
|
216 |
} |
1 | 217 |
} |
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:
372
diff
changeset
|
218 |
$this->namespace = $namespace; |
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:
372
diff
changeset
|
219 |
$this->fullpage = $title; |
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:
372
diff
changeset
|
220 |
if ( $namespace == 'Special' || $namespace == 'Admin' ) |
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:
372
diff
changeset
|
221 |
{ |
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:
372
diff
changeset
|
222 |
list($page_id) = explode('/', $page_id); |
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:
372
diff
changeset
|
223 |
} |
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:
372
diff
changeset
|
224 |
$this->page = $this->nslist[$namespace] . $page_id; |
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:
372
diff
changeset
|
225 |
$this->page_id = $page_id; |
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:
372
diff
changeset
|
226 |
// die("All done setting parameters. What we've got:<br/>namespace: $namespace<br/>fullpage: $this->fullpage<br/>page: $this->page<br/>page_id: $this->page_id"); |
1 | 227 |
} |
228 |
else |
|
229 |
{ |
|
311
a007145a0ff6
Deprecated debugConsole and removed all calls to it. Added a lot of comments to common.php. Added support for "anonymous pages" that are created when the Enano API is loaded from an external script. Fixed missing border-bottom on Type 2 sidebar blocks in Oxygen.
Dan
parents:
292
diff
changeset
|
230 |
// Starting up Enano with the API from a page that wants to do its own thing. Generate |
a007145a0ff6
Deprecated debugConsole and removed all calls to it. Added a lot of comments to common.php. Added support for "anonymous pages" that are created when the Enano API is loaded from an external script. Fixed missing border-bottom on Type 2 sidebar blocks in Oxygen.
Dan
parents:
292
diff
changeset
|
231 |
// metadata for an anonymous page and avoid redirection at all costs. |
a007145a0ff6
Deprecated debugConsole and removed all calls to it. Added a lot of comments to common.php. Added support for "anonymous pages" that are created when the Enano API is loaded from an external script. Fixed missing border-bottom on Type 2 sidebar blocks in Oxygen.
Dan
parents:
292
diff
changeset
|
232 |
if ( isset($GLOBALS['title']) ) |
a007145a0ff6
Deprecated debugConsole and removed all calls to it. Added a lot of comments to common.php. Added support for "anonymous pages" that are created when the Enano API is loaded from an external script. Fixed missing border-bottom on Type 2 sidebar blocks in Oxygen.
Dan
parents:
292
diff
changeset
|
233 |
{ |
a007145a0ff6
Deprecated debugConsole and removed all calls to it. Added a lot of comments to common.php. Added support for "anonymous pages" that are created when the Enano API is loaded from an external script. Fixed missing border-bottom on Type 2 sidebar blocks in Oxygen.
Dan
parents:
292
diff
changeset
|
234 |
$title =& $GLOBALS['title']; |
a007145a0ff6
Deprecated debugConsole and removed all calls to it. Added a lot of comments to common.php. Added support for "anonymous pages" that are created when the Enano API is loaded from an external script. Fixed missing border-bottom on Type 2 sidebar blocks in Oxygen.
Dan
parents:
292
diff
changeset
|
235 |
} |
a007145a0ff6
Deprecated debugConsole and removed all calls to it. Added a lot of comments to common.php. Added support for "anonymous pages" that are created when the Enano API is loaded from an external script. Fixed missing border-bottom on Type 2 sidebar blocks in Oxygen.
Dan
parents:
292
diff
changeset
|
236 |
else |
1 | 237 |
{ |
312
6c7060d36a23
Improved physical pages: they support comments and have their own dedicated namespace now. Still some consistency fixes to make.
Dan
parents:
311
diff
changeset
|
238 |
$title = basename($_SERVER['SCRIPT_NAME']); |
1 | 239 |
} |
312
6c7060d36a23
Improved physical pages: they support comments and have their own dedicated namespace now. Still some consistency fixes to make.
Dan
parents:
311
diff
changeset
|
240 |
$base_uri = str_replace( scriptPath . '/', '', $_SERVER['SCRIPT_NAME'] ); |
692
78473351a6c9
Changed namespace properties (including core identifier) for external pages that load the Enano API to be a uniform "API" namespace and "SystemAPI:" prefix.
Dan
parents:
685
diff
changeset
|
241 |
$this->page = $this->nslist['API'] . sanitize_page_id($base_uri); |
78473351a6c9
Changed namespace properties (including core identifier) for external pages that load the Enano API to be a uniform "API" namespace and "SystemAPI:" prefix.
Dan
parents:
685
diff
changeset
|
242 |
$this->fullpage = $this->nslist['API'] . sanitize_page_id($base_uri); |
78473351a6c9
Changed namespace properties (including core identifier) for external pages that load the Enano API to be a uniform "API" namespace and "SystemAPI:" prefix.
Dan
parents:
685
diff
changeset
|
243 |
$this->namespace = 'API'; |
311
a007145a0ff6
Deprecated debugConsole and removed all calls to it. Added a lot of comments to common.php. Added support for "anonymous pages" that are created when the Enano API is loaded from an external script. Fixed missing border-bottom on Type 2 sidebar blocks in Oxygen.
Dan
parents:
292
diff
changeset
|
244 |
$this->cpage = array( |
a007145a0ff6
Deprecated debugConsole and removed all calls to it. Added a lot of comments to common.php. Added support for "anonymous pages" that are created when the Enano API is loaded from an external script. Fixed missing border-bottom on Type 2 sidebar blocks in Oxygen.
Dan
parents:
292
diff
changeset
|
245 |
'name' => $title, |
312
6c7060d36a23
Improved physical pages: they support comments and have their own dedicated namespace now. Still some consistency fixes to make.
Dan
parents:
311
diff
changeset
|
246 |
'urlname' => sanitize_page_id($base_uri), |
692
78473351a6c9
Changed namespace properties (including core identifier) for external pages that load the Enano API to be a uniform "API" namespace and "SystemAPI:" prefix.
Dan
parents:
685
diff
changeset
|
247 |
'namespace' => 'API', |
312
6c7060d36a23
Improved physical pages: they support comments and have their own dedicated namespace now. Still some consistency fixes to make.
Dan
parents:
311
diff
changeset
|
248 |
'special' => 1, |
311
a007145a0ff6
Deprecated debugConsole and removed all calls to it. Added a lot of comments to common.php. Added support for "anonymous pages" that are created when the Enano API is loaded from an external script. Fixed missing border-bottom on Type 2 sidebar blocks in Oxygen.
Dan
parents:
292
diff
changeset
|
249 |
'visible' => 1, |
312
6c7060d36a23
Improved physical pages: they support comments and have their own dedicated namespace now. Still some consistency fixes to make.
Dan
parents:
311
diff
changeset
|
250 |
'comments_on' => 1, |
311
a007145a0ff6
Deprecated debugConsole and removed all calls to it. Added a lot of comments to common.php. Added support for "anonymous pages" that are created when the Enano API is loaded from an external script. Fixed missing border-bottom on Type 2 sidebar blocks in Oxygen.
Dan
parents:
292
diff
changeset
|
251 |
'protected' => 1, |
a007145a0ff6
Deprecated debugConsole and removed all calls to it. Added a lot of comments to common.php. Added support for "anonymous pages" that are created when the Enano API is loaded from an external script. Fixed missing border-bottom on Type 2 sidebar blocks in Oxygen.
Dan
parents:
292
diff
changeset
|
252 |
'delvotes' => 0, |
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:
801
diff
changeset
|
253 |
'delvote_ips' => '', |
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:
801
diff
changeset
|
254 |
'page_format' => getConfig('default_page_format', 'wikitext') |
311
a007145a0ff6
Deprecated debugConsole and removed all calls to it. Added a lot of comments to common.php. Added support for "anonymous pages" that are created when the Enano API is loaded from an external script. Fixed missing border-bottom on Type 2 sidebar blocks in Oxygen.
Dan
parents:
292
diff
changeset
|
255 |
); |
692
78473351a6c9
Changed namespace properties (including core identifier) for external pages that load the Enano API to be a uniform "API" namespace and "SystemAPI:" prefix.
Dan
parents:
685
diff
changeset
|
256 |
$this->external_api_page = true; |
78473351a6c9
Changed namespace properties (including core identifier) for external pages that load the Enano API to be a uniform "API" namespace and "SystemAPI:" prefix.
Dan
parents:
685
diff
changeset
|
257 |
$code = $plugins->setHook('paths_external_api_page'); |
312
6c7060d36a23
Improved physical pages: they support comments and have their own dedicated namespace now. Still some consistency fixes to make.
Dan
parents:
311
diff
changeset
|
258 |
foreach ( $code as $cmd ) |
6c7060d36a23
Improved physical pages: they support comments and have their own dedicated namespace now. Still some consistency fixes to make.
Dan
parents:
311
diff
changeset
|
259 |
{ |
6c7060d36a23
Improved physical pages: they support comments and have their own dedicated namespace now. Still some consistency fixes to make.
Dan
parents:
311
diff
changeset
|
260 |
eval($cmd); |
6c7060d36a23
Improved physical pages: they support comments and have their own dedicated namespace now. Still some consistency fixes to make.
Dan
parents:
311
diff
changeset
|
261 |
} |
1 | 262 |
} |
263 |
||
15
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
parents:
11
diff
changeset
|
264 |
$this->page = sanitize_page_id($this->page); |
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
parents:
11
diff
changeset
|
265 |
$this->fullpage = sanitize_page_id($this->fullpage); |
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
parents:
11
diff
changeset
|
266 |
|
1 | 267 |
if(isset($this->pages[$this->page])) |
268 |
{ |
|
269 |
$this->page_exists = true; |
|
270 |
$this->cpage = $this->pages[$this->page]; |
|
322
5f1cd51bf1be
Many changes. Installer with PostgreSQL is broken badly and will be for some time.
Dan
parents:
320
diff
changeset
|
271 |
$this->page_id =& $this->cpage['urlname_nons']; |
1 | 272 |
$this->namespace = $this->cpage['namespace']; |
273 |
if(!isset($this->cpage['wiki_mode'])) $this->cpage['wiki_mode'] = 2; |
|
274 |
||
275 |
// Determine the wiki mode for this page, now that we have this->cpage established |
|
276 |
if($this->cpage['wiki_mode'] == 2) |
|
277 |
{ |
|
278 |
$this->wiki_mode = (int)getConfig('wiki_mode'); |
|
279 |
} |
|
280 |
else |
|
281 |
{ |
|
282 |
$this->wiki_mode = $this->cpage['wiki_mode']; |
|
283 |
} |
|
284 |
// Allow the user to create/modify his user page uncondtionally (admins can still protect the page) |
|
285 |
if($this->page == $this->nslist['User'].str_replace(' ', '_', $session->username)) |
|
286 |
{ |
|
287 |
$this->wiki_mode = true; |
|
288 |
} |
|
289 |
// And above all, if the site requires wiki mode to be off for non-logged-in users, disable it now |
|
290 |
if(getConfig('wiki_mode_require_login')=='1' && !$session->user_logged_in) |
|
291 |
{ |
|
292 |
$this->wiki_mode = false; |
|
293 |
} |
|
294 |
if($this->cpage['protected'] == 2) |
|
295 |
{ |
|
296 |
// The page is semi-protected, determine permissions |
|
297 |
if($session->user_logged_in && $session->reg_time + 60*60*24*4 < time()) |
|
298 |
{ |
|
299 |
$this->page_protected = 0; |
|
300 |
} |
|
301 |
else |
|
302 |
{ |
|
303 |
$this->page_protected = 1; |
|
304 |
} |
|
305 |
} |
|
306 |
else |
|
307 |
{ |
|
308 |
$this->page_protected = $this->cpage['protected']; |
|
309 |
} |
|
310 |
} |
|
311 |
else |
|
312 |
{ |
|
313 |
$this->page_exists = false; |
|
15
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
parents:
11
diff
changeset
|
314 |
$page_name = dirtify_page_id($this->page); |
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
parents:
11
diff
changeset
|
315 |
$page_name = str_replace('_', ' ', $page_name); |
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
parents:
11
diff
changeset
|
316 |
|
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
parents:
11
diff
changeset
|
317 |
$pid_cleaned = sanitize_page_id($this->page); |
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
parents:
11
diff
changeset
|
318 |
if ( $pid_cleaned != $this->page ) |
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
parents:
11
diff
changeset
|
319 |
{ |
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
|
320 |
redirect(makeUrl($pid_cleaned), 'Sanitizer message', 'page id sanitized', 0); |
15
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
parents:
11
diff
changeset
|
321 |
} |
ad5986a53197
Fixed complicated SQL injection vulnerability in URL handler, updated license info for Tigra Tree Menu, and killed one XSS vulnerability
Dan
parents:
11
diff
changeset
|
322 |
|
311
a007145a0ff6
Deprecated debugConsole and removed all calls to it. Added a lot of comments to common.php. Added support for "anonymous pages" that are created when the Enano API is loaded from an external script. Fixed missing border-bottom on Type 2 sidebar blocks in Oxygen.
Dan
parents:
292
diff
changeset
|
323 |
if ( !is_array($this->cpage) ) |
a007145a0ff6
Deprecated debugConsole and removed all calls to it. Added a lot of comments to common.php. Added support for "anonymous pages" that are created when the Enano API is loaded from an external script. Fixed missing border-bottom on Type 2 sidebar blocks in Oxygen.
Dan
parents:
292
diff
changeset
|
324 |
{ |
a007145a0ff6
Deprecated debugConsole and removed all calls to it. Added a lot of comments to common.php. Added support for "anonymous pages" that are created when the Enano API is loaded from an external script. Fixed missing border-bottom on Type 2 sidebar blocks in Oxygen.
Dan
parents:
292
diff
changeset
|
325 |
$this->cpage = Array( |
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:
801
diff
changeset
|
326 |
'name' => $page_name, |
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:
801
diff
changeset
|
327 |
'urlname' => $this->page, |
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:
801
diff
changeset
|
328 |
'namespace' => 'Article', |
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:
801
diff
changeset
|
329 |
'special' => 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:
801
diff
changeset
|
330 |
'visible' => 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:
801
diff
changeset
|
331 |
'comments_on' => 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:
801
diff
changeset
|
332 |
'protected' => 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:
801
diff
changeset
|
333 |
'delvotes' => 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:
801
diff
changeset
|
334 |
'delvote_ips' => '', |
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:
801
diff
changeset
|
335 |
'wiki_mode' => 2, |
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:
801
diff
changeset
|
336 |
'page_format' => getConfig('default_page_format', 'wikitext') |
311
a007145a0ff6
Deprecated debugConsole and removed all calls to it. Added a lot of comments to common.php. Added support for "anonymous pages" that are created when the Enano API is loaded from an external script. Fixed missing border-bottom on Type 2 sidebar blocks in Oxygen.
Dan
parents:
292
diff
changeset
|
337 |
); |
a007145a0ff6
Deprecated debugConsole and removed all calls to it. Added a lot of comments to common.php. Added support for "anonymous pages" that are created when the Enano API is loaded from an external script. Fixed missing border-bottom on Type 2 sidebar blocks in Oxygen.
Dan
parents:
292
diff
changeset
|
338 |
} |
1 | 339 |
// Look for a namespace prefix in the urlname, and assign a different namespace, if necessary |
340 |
$k = array_keys($this->nslist); |
|
341 |
for($i=0;$i<sizeof($this->nslist);$i++) |
|
342 |
{ |
|
343 |
$ln = strlen($this->nslist[$k[$i]]); |
|
344 |
if( substr($this->page, 0, $ln) == $this->nslist[$k[$i]] ) |
|
345 |
{ |
|
346 |
$this->cpage['namespace'] = $k[$i]; |
|
347 |
$this->cpage['urlname_nons'] = substr($this->page, strlen($this->nslist[$this->cpage['namespace']]), strlen($this->page)); |
|
348 |
if(!isset($this->cpage['wiki_mode'])) |
|
349 |
{ |
|
350 |
$this->cpage['wiki_mode'] = 2; |
|
351 |
} |
|
352 |
} |
|
353 |
} |
|
354 |
$this->namespace = $this->cpage['namespace']; |
|
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
|
355 |
$this->page_id =& $this->cpage['urlname_nons']; |
1 | 356 |
|
357 |
if($this->namespace=='System') |
|
358 |
{ |
|
359 |
$this->cpage['protected'] = 1; |
|
360 |
} |
|
692
78473351a6c9
Changed namespace properties (including core identifier) for external pages that load the Enano API to be a uniform "API" namespace and "SystemAPI:" prefix.
Dan
parents:
685
diff
changeset
|
361 |
if($this->namespace == 'Special' && !$this->external_api_page) |
1 | 362 |
{ |
363 |
// Can't load nonexistent pages |
|
741 | 364 |
if( is_string(get_main_page()) ) |
116
77c75179bb95
Made most special pages "visible"; fixup for non-existent special page redirect in paths.php; rewrote Special:AllPages to have pagination (WiP, Special:SpecialPages is possibly next, depending on whether paginate_array works or not)
Dan
parents:
109
diff
changeset
|
365 |
{ |
741 | 366 |
$main_page = makeUrl(get_main_page()); |
116
77c75179bb95
Made most special pages "visible"; fixup for non-existent special page redirect in paths.php; rewrote Special:AllPages to have pagination (WiP, Special:SpecialPages is possibly next, depending on whether paginate_array works or not)
Dan
parents:
109
diff
changeset
|
367 |
} |
77c75179bb95
Made most special pages "visible"; fixup for non-existent special page redirect in paths.php; rewrote Special:AllPages to have pagination (WiP, Special:SpecialPages is possibly next, depending on whether paginate_array works or not)
Dan
parents:
109
diff
changeset
|
368 |
else |
77c75179bb95
Made most special pages "visible"; fixup for non-existent special page redirect in paths.php; rewrote Special:AllPages to have pagination (WiP, Special:SpecialPages is possibly next, depending on whether paginate_array works or not)
Dan
parents:
109
diff
changeset
|
369 |
{ |
77c75179bb95
Made most special pages "visible"; fixup for non-existent special page redirect in paths.php; rewrote Special:AllPages to have pagination (WiP, Special:SpecialPages is possibly next, depending on whether paginate_array works or not)
Dan
parents:
109
diff
changeset
|
370 |
$main_page = makeUrl($this->pages[0]['urlname']); |
77c75179bb95
Made most special pages "visible"; fixup for non-existent special page redirect in paths.php; rewrote Special:AllPages to have pagination (WiP, Special:SpecialPages is possibly next, depending on whether paginate_array works or not)
Dan
parents:
109
diff
changeset
|
371 |
} |
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
|
372 |
redirect($main_page, $lang->get('page_msg_special_404_title'), $lang->get('page_msg_special_404_body', array('sp_link' => makeUrlNS('Special', 'SpecialPages'))), 15); |
116
77c75179bb95
Made most special pages "visible"; fixup for non-existent special page redirect in paths.php; rewrote Special:AllPages to have pagination (WiP, Special:SpecialPages is possibly next, depending on whether paginate_array works or not)
Dan
parents:
109
diff
changeset
|
373 |
exit; |
1 | 374 |
} |
375 |
// Allow the user to create/modify his user page uncondtionally (admins can still protect the page) |
|
376 |
if($this->page == $this->nslist['User'].str_replace(' ', '_', $session->username)) |
|
377 |
{ |
|
378 |
$this->wiki_mode = true; |
|
379 |
} |
|
380 |
} |
|
381 |
// This is used in the admin panel to keep track of form submission targets |
|
382 |
$this->cpage['module'] = $this->cpage['urlname']; |
|
383 |
||
793
c0724bf6039b
Added dynamic reload-less re-auth to admin panel, so that if a session is lost it can be recovered without a reload. Support for hooking into form submits will be added in the future.
Dan
parents:
771
diff
changeset
|
384 |
$this->cpage['require_admin'] = ( $this->cpage['namespace'] === 'Admin' ); |
c0724bf6039b
Added dynamic reload-less re-auth to admin panel, so that if a session is lost it can be recovered without a reload. Support for hooking into form submits will be added in the future.
Dan
parents:
771
diff
changeset
|
385 |
|
1 | 386 |
// Page is set up, call any hooks |
387 |
$code = $plugins->setHook('page_set'); |
|
388 |
foreach ( $code as $cmd ) |
|
389 |
{ |
|
390 |
eval($cmd); |
|
391 |
} |
|
590
03a60844c7c5
Several optimization changes including getting rid of a few eval()s. Added placeholder functions for the theme manager, which should be working now
Dan
parents:
571
diff
changeset
|
392 |
|
03a60844c7c5
Several optimization changes including getting rid of a few eval()s. Added placeholder functions for the theme manager, which should be working now
Dan
parents:
571
diff
changeset
|
393 |
profiler_log('Paths and CMS core initted'); |
1 | 394 |
$session->init_permissions(); |
395 |
} |
|
396 |
||
397 |
function add_page($flags) |
|
398 |
{ |
|
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:
326
diff
changeset
|
399 |
global $lang; |
1 | 400 |
$flags['urlname_nons'] = $flags['urlname']; |
401 |
$flags['urlname'] = $this->nslist[$flags['namespace']] . $flags['urlname']; // Applies the User:/File:/etc prefixes to the URL names |
|
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:
326
diff
changeset
|
402 |
|
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:
326
diff
changeset
|
403 |
if ( is_object($lang) ) |
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:
326
diff
changeset
|
404 |
{ |
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:
326
diff
changeset
|
405 |
if ( preg_match('/^[a-z0-9]+_[a-z0-9_]+$/', $flags['name']) ) |
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:
326
diff
changeset
|
406 |
$flags['name'] = $lang->get($flags['name']); |
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:
326
diff
changeset
|
407 |
} |
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:
326
diff
changeset
|
408 |
|
793
c0724bf6039b
Added dynamic reload-less re-auth to admin panel, so that if a session is lost it can be recovered without a reload. Support for hooking into form submits will be added in the future.
Dan
parents:
771
diff
changeset
|
409 |
$flags['require_admin'] = ( $flags['namespace'] === 'Admin' ); |
c0724bf6039b
Added dynamic reload-less re-auth to admin panel, so that if a session is lost it can be recovered without a reload. Support for hooking into form submits will be added in the future.
Dan
parents:
771
diff
changeset
|
410 |
|
590
03a60844c7c5
Several optimization changes including getting rid of a few eval()s. Added placeholder functions for the theme manager, which should be working now
Dan
parents:
571
diff
changeset
|
411 |
$pages_len = sizeof($this->pages) / 2; |
1 | 412 |
$this->pages[$pages_len] = $flags; |
413 |
$this->pages[$flags['urlname']] =& $this->pages[$pages_len]; |
|
414 |
} |
|
415 |
||
416 |
function main_page() |
|
417 |
{ |
|
741 | 418 |
if( is_string(get_main_page()) ) |
1 | 419 |
{ |
741 | 420 |
$main_page = makeUrl(get_main_page()); |
1 | 421 |
} |
422 |
else |
|
423 |
{ |
|
93
95c4d91bd954
Redirections to the main page use the redirect() function now
Dan
parents:
80
diff
changeset
|
424 |
$main_page = makeUrl($this->pages[0]['urlname']); |
1 | 425 |
} |
93
95c4d91bd954
Redirections to the main page use the redirect() function now
Dan
parents:
80
diff
changeset
|
426 |
redirect($main_page, 'Redirecting...', 'Invalid request, redirecting to main page', 0); |
1 | 427 |
exit; |
428 |
} |
|
429 |
||
430 |
function sysmsg($n) |
|
431 |
{ |
|
432 |
global $db, $session, $paths, $template, $plugins; // Common objects |
|
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:
334
diff
changeset
|
433 |
$q = $db->sql_query('SELECT page_text, char_tag FROM '.table_prefix.'page_text WHERE page_id=\''.$db->escape(sanitize_page_id($n)).'\' AND namespace=\'System\''); |
1 | 434 |
if( !$q ) |
435 |
{ |
|
436 |
$db->_die('Error during generic selection of system page data.'); |
|
437 |
} |
|
438 |
if($db->numrows() < 1) |
|
439 |
{ |
|
440 |
return false; |
|
441 |
//$db->_die('Error during generic selection of system page data: there were no rows in the text table that matched the page text query.'); |
|
442 |
} |
|
443 |
$r = $db->fetchrow(); |
|
444 |
$db->free_result(); |
|
445 |
$message = $r['page_text']; |
|
446 |
||
447 |
$message = preg_replace('/<noinclude>(.*?)<\/noinclude>/is', '', $message); |
|
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:
334
diff
changeset
|
448 |
$message = preg_replace('/<nodisplay>(.*?)<\/nodisplay>/is', '\\1', $message); |
1 | 449 |
|
450 |
return $message; |
|
451 |
} |
|
452 |
function get_pageid_from_url() |
|
453 |
{ |
|
395
fa4c5ecb7c9a
Fixed splitting bug (really the same issue from stable) in get_pageid_from_url(); upgraded TinyMCE to version 3.0-stable
Dan
parents:
391
diff
changeset
|
454 |
$url = $this->parse_url(); |
fa4c5ecb7c9a
Fixed splitting bug (really the same issue from stable) in get_pageid_from_url(); upgraded TinyMCE to version 3.0-stable
Dan
parents:
391
diff
changeset
|
455 |
if ( substr($url, 0, strlen($this->nslist['Special'])) == $this->nslist['Special'] || |
fa4c5ecb7c9a
Fixed splitting bug (really the same issue from stable) in get_pageid_from_url(); upgraded TinyMCE to version 3.0-stable
Dan
parents:
391
diff
changeset
|
456 |
substr($url, 0, strlen($this->nslist['Admin'])) == $this->nslist['Admin']) |
1 | 457 |
{ |
463
0857911fb7f1
Fixed some bugs with $paths->getParam() and $paths->get_pageid_from_url() when slashes are in the namespace prefix. Result of testing on Windows Vista + Apache 2.2. Using TortoiseHG
Dan
parents:
461
diff
changeset
|
458 |
list(, $ns) = RenderMan::strToPageID($url); |
0857911fb7f1
Fixed some bugs with $paths->getParam() and $paths->get_pageid_from_url() when slashes are in the namespace prefix. Result of testing on Windows Vista + Apache 2.2. Using TortoiseHG
Dan
parents:
461
diff
changeset
|
459 |
$upart = substr($url, strlen($this->nslist[$ns])); |
0857911fb7f1
Fixed some bugs with $paths->getParam() and $paths->get_pageid_from_url() when slashes are in the namespace prefix. Result of testing on Windows Vista + Apache 2.2. Using TortoiseHG
Dan
parents:
461
diff
changeset
|
460 |
list($upart) = explode('/', $upart); |
0857911fb7f1
Fixed some bugs with $paths->getParam() and $paths->get_pageid_from_url() when slashes are in the namespace prefix. Result of testing on Windows Vista + Apache 2.2. Using TortoiseHG
Dan
parents:
461
diff
changeset
|
461 |
$url = $this->nslist[$ns] . $upart; |
1 | 462 |
} |
395
fa4c5ecb7c9a
Fixed splitting bug (really the same issue from stable) in get_pageid_from_url(); upgraded TinyMCE to version 3.0-stable
Dan
parents:
391
diff
changeset
|
463 |
return $url; |
1 | 464 |
} |
465 |
// Parses a (very carefully formed) array into Javascript code compatible with the Tigra Tree Menu used in the admin menu |
|
466 |
function parseAdminTree() |
|
467 |
{ |
|
211 | 468 |
global $lang; |
469 |
||
1 | 470 |
$k = array_keys($this->admin_tree); |
471 |
$i = 0; |
|
472 |
$ret = ''; |
|
613 | 473 |
$icon = $this->make_sprite_icon(4, 2); |
505 | 474 |
$icon = addslashes($icon); |
475 |
$ret .= "var TREE_ITEMS = [\n ['$icon" . $lang->get('adm_btn_home') . "', 'javascript:ajaxPage(\'".$this->nslist['Admin']."Home\');',\n "; |
|
1 | 476 |
foreach($k as $key) |
477 |
{ |
|
478 |
$i++; |
|
843
4415e50e4e84
Added possibility for auth plugins, which can log a user in using non-standard authentication methods.
Dan
parents:
832
diff
changeset
|
479 |
$name = $lang->get($key); |
211 | 480 |
$ret .= "['".$name."', 'javascript:trees[0].toggle($i)', \n"; |
1 | 481 |
foreach($this->admin_tree[$key] as $c) |
482 |
{ |
|
483 |
$i++; |
|
843
4415e50e4e84
Added possibility for auth plugins, which can log a user in using non-standard authentication methods.
Dan
parents:
832
diff
changeset
|
484 |
$name = $lang->get($c['name']); |
650
e45183014778
Added CDN support: a URL to a CDN can now be specified and Enano will load all images, CSS, and javascript (except TinyMCE) from that server
Dan
parents:
617
diff
changeset
|
485 |
if ( $c['icon'] && $c['icon'] != cdnPath . '/images/spacer.gif' ) |
505 | 486 |
{ |
613 | 487 |
if ( is_array($c['icon']) ) |
488 |
{ |
|
489 |
// this is a sprite reference |
|
490 |
list($ix, $iy) = $c['icon']; |
|
491 |
$icon = $this->make_sprite_icon($ix, $iy); |
|
492 |
} |
|
493 |
else |
|
494 |
{ |
|
495 |
$icon = "<img alt=\"\" src=\"{$c['icon']}\" style=\"border-width: 0; margin-right: 3px;\" /> "; |
|
496 |
} |
|
505 | 497 |
} |
498 |
else |
|
499 |
{ |
|
500 |
$icon = ''; |
|
501 |
} |
|
502 |
$icon = addslashes($icon); |
|
503 |
$ret .= " ['$icon$name', 'javascript:ajaxPage(\\'".$this->nslist['Admin'].$c['pageid']."\\');'],\n"; |
|
1 | 504 |
} |
505 |
$ret .= " ],\n"; |
|
506 |
} |
|
613 | 507 |
$icon = $this->make_sprite_icon(1, 1); |
505 | 508 |
$icon = addslashes($icon); |
509 |
$ret .= " ['$icon" . $lang->get('adm_btn_logout') . "', 'javascript:ajaxPage(\\'".$this->nslist['Admin']."AdminLogout\\');'],\n"; |
|
211 | 510 |
$ret .= " ['<span id=\\'keepalivestat\\'>" . $lang->get('adm_btn_keepalive_loading') . "</span>', 'javascript:ajaxToggleKeepalive();', |
511 |
['" . $lang->get('adm_btn_keepalive_about') . "', 'javascript:aboutKeepAlive();'] |
|
118
0c5efda996bf
Added keep-alive function to admin panel (had been planned for some time) and a new hook, template_var_init_end
Dan
parents:
116
diff
changeset
|
512 |
],\n"; |
1 | 513 |
// I used this while I painstakingly wrote the Runt code that auto-expands certain nodes based on the value of a bitfield stored in a cookie. *shudders* |
514 |
// $ret .= " ['(debug) Clear menu bitfield', 'javascript:createCookie(\\'admin_menu_state\\', \\'1\\', 365);'],\n"; |
|
515 |
$ret .= "]\n];"; |
|
516 |
return $ret; |
|
517 |
} |
|
505 | 518 |
|
519 |
/** |
|
613 | 520 |
* Internal function to generate HTML code for an icon in the admin panel tree which is sprited. |
521 |
* @param int X index of icon |
|
522 |
* @param int Y index of icon |
|
523 |
* @return string |
|
524 |
*/ |
|
525 |
||
526 |
function make_sprite_icon($ix, $iy) |
|
527 |
{ |
|
528 |
$xpos = 16 * ( $ix - 1 ); |
|
529 |
$ypos = 16 * ( $iy - 1 ); |
|
650
e45183014778
Added CDN support: a URL to a CDN can now be specified and Enano will load all images, CSS, and javascript (except TinyMCE) from that server
Dan
parents:
617
diff
changeset
|
530 |
return "<img alt=\"\" src=\"" . cdnPath . "/images/spacer.gif\" class=\"adminiconsprite\" style=\"border-width: 0; margin-right: 3px; background-position: -{$xpos}px -{$ypos}px;\" /> "; |
613 | 531 |
} |
532 |
||
533 |
/** |
|
505 | 534 |
* Creates a new entry in the administration panel's navigation tree. |
535 |
* @param string Section name - if this is a language string identifier, it will be sent through $lang->get() |
|
536 |
* @param string The title of the page, also may be a language string identifier |
|
537 |
* @param string The page ID of the admin page, the namespace Admin is assumed |
|
538 |
* @param string Optional. The path to a 16x16 image that will be displayed as the icon for this admin page |
|
539 |
*/ |
|
540 |
||
541 |
function addAdminNode($section, $page_title, $url, $icon = false) |
|
1 | 542 |
{ |
505 | 543 |
if ( !$icon ) |
544 |
{ |
|
650
e45183014778
Added CDN support: a URL to a CDN can now be specified and Enano will load all images, CSS, and javascript (except TinyMCE) from that server
Dan
parents:
617
diff
changeset
|
545 |
$icon = cdnPath . '/images/spacer.gif'; |
505 | 546 |
} |
1 | 547 |
if(!isset($this->admin_tree[$section])) |
548 |
{ |
|
549 |
$this->admin_tree[$section] = Array(); |
|
550 |
} |
|
551 |
$this->admin_tree[$section][] = Array( |
|
505 | 552 |
'name' => $page_title, |
553 |
'pageid' => $url, |
|
554 |
'icon' => $icon |
|
1 | 555 |
); |
556 |
} |
|
557 |
function getParam($id = 0) |
|
558 |
{ |
|
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:
372
diff
changeset
|
559 |
$title = $this->parse_url(false); |
463
0857911fb7f1
Fixed some bugs with $paths->getParam() and $paths->get_pageid_from_url() when slashes are in the namespace prefix. Result of testing on Windows Vista + Apache 2.2. Using TortoiseHG
Dan
parents:
461
diff
changeset
|
560 |
list(, $ns) = RenderMan::strToPageID($title); |
0857911fb7f1
Fixed some bugs with $paths->getParam() and $paths->get_pageid_from_url() when slashes are in the namespace prefix. Result of testing on Windows Vista + Apache 2.2. Using TortoiseHG
Dan
parents:
461
diff
changeset
|
561 |
$title = substr($title, strlen($this->nslist[$ns])); |
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:
372
diff
changeset
|
562 |
$regex = '/^' . str_replace('/', '\\/', preg_quote($this->nslist[$this->namespace])) . '\\/?/'; |
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:
372
diff
changeset
|
563 |
$title = preg_replace($regex, '', $title); |
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:
372
diff
changeset
|
564 |
$title = explode('/', $title); |
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:
372
diff
changeset
|
565 |
$id = $id + 1; |
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:
372
diff
changeset
|
566 |
return ( isset($title[$id]) ) ? $title[$id] : false; |
1 | 567 |
} |
568 |
||
569 |
function getAllParams() |
|
570 |
{ |
|
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:
372
diff
changeset
|
571 |
$title = $this->parse_url(false); |
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:
372
diff
changeset
|
572 |
$regex = '/^' . str_replace('/', '\\/', preg_quote($this->nslist[$this->namespace])) . '\\/?/'; |
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:
372
diff
changeset
|
573 |
$title = preg_replace($regex, '', $title); |
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:
372
diff
changeset
|
574 |
$title = explode('/', $title); |
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:
372
diff
changeset
|
575 |
unset($title[0]); |
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:
372
diff
changeset
|
576 |
return implode('/', $title); |
1 | 577 |
} |
578 |
||
579 |
/** |
|
580 |
* Creates a new namespace in memory |
|
581 |
* @param string $id the namespace ID |
|
582 |
* @param string $prefix the URL prefix, must not be blank or already used |
|
583 |
* @return bool true on success false on failure |
|
584 |
*/ |
|
585 |
||
586 |
function create_namespace($id, $prefix) |
|
587 |
{ |
|
588 |
if(in_array($prefix, $this->nslist)) |
|
589 |
{ |
|
590 |
// echo '<b>Warning:</b> pathManager::create_namespace: Prefix "'.$prefix.'" is already taken<br />'; |
|
591 |
return false; |
|
592 |
} |
|
593 |
if( isset($this->nslist[$id]) ) |
|
594 |
{ |
|
595 |
// echo '<b>Warning:</b> pathManager::create_namespace: Namespace ID "'.$prefix.'" is already taken<br />'; |
|
596 |
return false; |
|
597 |
} |
|
598 |
$this->nslist[$id] = $prefix; |
|
599 |
} |
|
600 |
||
601 |
/** |
|
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
|
602 |
* Updates the cache containing all page metadata. |
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
|
603 |
*/ |
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
|
604 |
|
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
|
605 |
function update_metadata_cache() |
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
|
606 |
{ |
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
|
607 |
global $db, $session, $paths, $template, $plugins; // Common objects |
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
|
608 |
|
607
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
parents:
605
diff
changeset
|
609 |
if ( getConfig('cache_thumbs') != '1' ) |
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
parents:
605
diff
changeset
|
610 |
return false; |
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
parents:
605
diff
changeset
|
611 |
|
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
|
612 |
$e = $db->sql_unbuffered_query('SELECT name,urlname,namespace,special,visible,comments_on,protected,delvotes,' . "\n" |
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:
801
diff
changeset
|
613 |
. ' delvote_ips,wiki_mode,password,page_format FROM '.table_prefix.'pages ORDER BY name;'); |
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
|
614 |
if ( !$e ) |
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
|
615 |
$db->_die(); |
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
|
616 |
|
607
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
parents:
605
diff
changeset
|
617 |
$md_array = array(); |
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
parents:
605
diff
changeset
|
618 |
|
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
|
619 |
while ( $row = $db->fetchrow() ) |
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
|
620 |
{ |
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
|
621 |
$row = $this->calculate_metadata_from_row($row); |
607
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
parents:
605
diff
changeset
|
622 |
$md_array[$row['urlname']] = $row; |
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
|
623 |
} |
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
|
624 |
|
607
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
parents:
605
diff
changeset
|
625 |
// import cache functions |
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
parents:
605
diff
changeset
|
626 |
global $cache; |
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
|
627 |
|
607
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
parents:
605
diff
changeset
|
628 |
// store data (TTL 20 minutes) |
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:
748
diff
changeset
|
629 |
try |
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:
748
diff
changeset
|
630 |
{ |
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:
748
diff
changeset
|
631 |
$cache->store('page_meta', $md_array, 20); |
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:
748
diff
changeset
|
632 |
} |
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:
748
diff
changeset
|
633 |
catch ( Exception $e ) |
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:
748
diff
changeset
|
634 |
{ |
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:
748
diff
changeset
|
635 |
} |
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
|
636 |
|
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
|
637 |
return true; |
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
|
638 |
} |
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
|
639 |
|
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
|
640 |
/** |
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
|
641 |
* Takes a result row from the pages table and calculates correct values for it. |
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
|
642 |
* @param array |
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
|
643 |
* @return array |
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
|
644 |
*/ |
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
|
645 |
|
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
|
646 |
function calculate_metadata_from_row($r) |
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
|
647 |
{ |
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
|
648 |
$r['urlname_nons'] = $r['urlname']; |
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
|
649 |
if ( isset($this->nslist[$r['namespace']]) ) |
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
|
650 |
{ |
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
|
651 |
$r['urlname'] = $this->nslist[$r['namespace']] . $r['urlname']; // Applies the User:/File:/etc prefixes to the URL names |
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
|
652 |
} |
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
|
653 |
else |
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
|
654 |
{ |
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
|
655 |
$ns_char = substr($this->nslist['Special'], -1); |
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
|
656 |
$r['urlname'] = $r['namespace'] . $ns_char . $r['urlname']; |
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
|
657 |
} |
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
|
658 |
|
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
|
659 |
if ( $r['delvotes'] == null) |
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
|
660 |
{ |
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
|
661 |
$r['delvotes'] = 0; |
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
|
662 |
} |
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
|
663 |
if ( $r['protected'] == 0 || $r['protected'] == 1 ) |
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
|
664 |
{ |
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
|
665 |
$r['really_protected'] = (int)$r['protected']; |
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
|
666 |
} |
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
|
667 |
else if ( $r['protected'] == 2 && getConfig('wiki_mode') == '1') |
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
|
668 |
{ |
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
|
669 |
$r['really_protected'] = 1; |
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
|
670 |
} |
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
|
671 |
else if ( $r['protected'] == 2 && getConfig('wiki_mode') == '0' ) |
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
|
672 |
{ |
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
|
673 |
$r['really_protected'] = 0; |
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
|
674 |
} |
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
|
675 |
return $r; |
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
|
676 |
} |
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
|
677 |
|
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
|
678 |
/** |
571
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
679 |
* Registers a handler to manually process a namespace instead of the default PageProcessor behavior. |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
680 |
* The first and only parameter passed to the processing function will be the PageProcessor instance. |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
681 |
* @param string Namespace to process |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
682 |
* @param mixed Function address. Either a function name or an array of the form array(0 => mixed (string:class name or object), 1 => string:method) |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
683 |
*/ |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
684 |
|
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
685 |
function register_namespace_processor($namespace, $function) |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
686 |
{ |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
687 |
if ( isset($this->namespace_processors[$namespace]) ) |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
688 |
{ |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
689 |
$processorname = ( is_string($this->namespace_processors[$namespace]) ) ? |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
690 |
$this->namespace_processors[$namespace] : |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
691 |
( is_object($this->namespace_processors[$namespace][0]) ? get_class($this->namespace_processors[$namespace][0]) : $this->namespace_processors[$namespace][0] ) . '::' . |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
692 |
$this->namespace_processors[$namespace][1]; |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
693 |
|
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
694 |
trigger_error("Namespace \"$namespace\" is already being processed by $processorname - replacing caller", E_USER_WARNING); |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
695 |
} |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
696 |
if ( !is_string($function) ) |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
697 |
{ |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
698 |
if ( !is_array($function) ) |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
699 |
return false; |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
700 |
if ( count($function) != 2 ) |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
701 |
return false; |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
702 |
if ( !is_string($function[0]) && !is_object($function[0]) ) |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
703 |
return false; |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
704 |
if ( !is_string($function[1]) ) |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
705 |
return false; |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
706 |
} |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
707 |
|
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
708 |
// security: don't allow Special or Admin namespaces to be overridden |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
709 |
if ( $namespace == 'Special' || $namespace == 'Admin' ) |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
710 |
{ |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
711 |
trigger_error("Security manager denied attempt to override processor for $namespace", E_USER_ERROR); |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
712 |
} |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
713 |
|
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
714 |
$this->namespace_processors[$namespace] = $function; |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
715 |
} |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
716 |
|
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
717 |
/** |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
718 |
* Returns a namespace processor if one exists, otherwise returns false. |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
719 |
* @param string Namespace |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
720 |
* @return mixed |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
721 |
*/ |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
722 |
|
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
723 |
function get_namespace_processor($namespace) |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
724 |
{ |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
725 |
return ( isset($this->namespace_processors[$namespace]) ) ? $this->namespace_processors[$namespace] : false; |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
726 |
} |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
727 |
|
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
728 |
/** |
1 | 729 |
* Fetches the page texts for searching |
730 |
*/ |
|
731 |
||
732 |
function fetch_page_search_texts() |
|
733 |
{ |
|
734 |
global $db, $session, $paths, $template, $plugins; // Common objects |
|
735 |
$texts = Array(); |
|
736 |
$q = $db->sql_query('SELECT t.page_id,t.namespace,t.page_text,t.char_tag FROM '.table_prefix.'page_text AS t |
|
737 |
LEFT JOIN '.table_prefix.'pages AS p |
|
738 |
ON t.page_id=p.urlname |
|
739 |
WHERE p.namespace=t.namespace |
|
740 |
AND ( p.password=\'\' OR p.password=\'da39a3ee5e6b4b0d3255bfef95601890afd80709\' ) |
|
741 |
AND p.visible=1;'); // Only indexes "visible" pages |
|
742 |
||
743 |
if( !$q ) |
|
744 |
{ |
|
745 |
return false; |
|
746 |
} |
|
747 |
while($row = $db->fetchrow()) |
|
748 |
{ |
|
749 |
$pid = $this->nslist[$row['namespace']] . $row['page_id']; |
|
750 |
$texts[$pid] = $row['page_text']; |
|
751 |
} |
|
752 |
$db->free_result(); |
|
753 |
||
754 |
return $texts; |
|
755 |
} |
|
756 |
||
757 |
/** |
|
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:
256
diff
changeset
|
758 |
* Generates an SQL query to grab all of the text |
1 | 759 |
*/ |
760 |
||
761 |
function fetch_page_search_resource() |
|
762 |
{ |
|
763 |
global $db, $session, $paths, $template, $plugins; // Common objects |
|
764 |
// sha1('') returns "da39a3ee5e6b4b0d3255bfef95601890afd80709" |
|
320
112debff64bd
SURPRISE! Preliminary PostgreSQL support added. The required schema file is not present in this commit and will be included at a later date. No installer support is implemented. Also in this commit: several fixes including <!-- SYSMSG ... --> was broken in template compiler; set fixed width on included images to prevent the thumbnail box from getting huge; added a much more friendly interface to AJAX responses that are invalid JSON
Dan
parents:
317
diff
changeset
|
765 |
|
112debff64bd
SURPRISE! Preliminary PostgreSQL support added. The required schema file is not present in this commit and will be included at a later date. No installer support is implemented. Also in this commit: several fixes including <!-- SYSMSG ... --> was broken in template compiler; set fixed width on included images to prevent the thumbnail box from getting huge; added a much more friendly interface to AJAX responses that are invalid JSON
Dan
parents:
317
diff
changeset
|
766 |
$concat_column = ( ENANO_DBLAYER == 'MYSQL' ) ? |
112debff64bd
SURPRISE! Preliminary PostgreSQL support added. The required schema file is not present in this commit and will be included at a later date. No installer support is implemented. Also in this commit: several fixes including <!-- SYSMSG ... --> was broken in template compiler; set fixed width on included images to prevent the thumbnail box from getting huge; added a much more friendly interface to AJAX responses that are invalid JSON
Dan
parents:
317
diff
changeset
|
767 |
'CONCAT(\'ns=\',t.namespace,\';pid=\',t.page_id)' : |
112debff64bd
SURPRISE! Preliminary PostgreSQL support added. The required schema file is not present in this commit and will be included at a later date. No installer support is implemented. Also in this commit: several fixes including <!-- SYSMSG ... --> was broken in template compiler; set fixed width on included images to prevent the thumbnail box from getting huge; added a much more friendly interface to AJAX responses that are invalid JSON
Dan
parents:
317
diff
changeset
|
768 |
"'ns=' || t.namespace || ';pid=' || t.page_id"; |
112debff64bd
SURPRISE! Preliminary PostgreSQL support added. The required schema file is not present in this commit and will be included at a later date. No installer support is implemented. Also in this commit: several fixes including <!-- SYSMSG ... --> was broken in template compiler; set fixed width on included images to prevent the thumbnail box from getting huge; added a much more friendly interface to AJAX responses that are invalid JSON
Dan
parents:
317
diff
changeset
|
769 |
|
112debff64bd
SURPRISE! Preliminary PostgreSQL support added. The required schema file is not present in this commit and will be included at a later date. No installer support is implemented. Also in this commit: several fixes including <!-- SYSMSG ... --> was broken in template compiler; set fixed width on included images to prevent the thumbnail box from getting huge; added a much more friendly interface to AJAX responses that are invalid JSON
Dan
parents:
317
diff
changeset
|
770 |
$texts = 'SELECT t.page_text, ' . $concat_column . ' AS page_idstring, t.page_id, t.namespace FROM '.table_prefix.'page_text AS t |
1 | 771 |
LEFT JOIN '.table_prefix.'pages AS p |
772 |
ON ( t.page_id=p.urlname AND t.namespace=p.namespace ) |
|
773 |
WHERE p.namespace=t.namespace |
|
774 |
AND ( p.password=\'\' OR p.password=\'da39a3ee5e6b4b0d3255bfef95601890afd80709\' ) |
|
775 |
AND p.visible=1;'; // Only indexes "visible" pages |
|
776 |
return $texts; |
|
777 |
} |
|
778 |
||
779 |
/** |
|
461 | 780 |
* Builds a word list for search indexing. |
781 |
* @param string Text to index |
|
782 |
* @param string Page ID of the page being indexed |
|
783 |
* @param string Title of the page being indexed |
|
784 |
* @return array List of words |
|
1 | 785 |
*/ |
461 | 786 |
|
787 |
function calculate_word_list($text, $page_id, $page_name) |
|
788 |
{ |
|
789 |
$page_id = dirtify_page_id($page_id); |
|
790 |
$text = preg_replace('/[^a-z0-9\']/i', ' ', $text); |
|
791 |
$page_id = preg_replace('/[^a-z0-9\']/i', ' ', $page_id); |
|
792 |
$page_name = preg_replace('/[^a-z0-9\']/i', ' ', $page_name); |
|
793 |
$text .= " $page_id $page_name"; |
|
794 |
$text = explode(' ', $text); |
|
795 |
foreach ( $text as $i => &$word ) |
|
796 |
{ |
|
797 |
if ( strstr($word, "''") ) |
|
798 |
$word = preg_replace("/[']{2,}/", '', $word); |
|
799 |
if ( strlen($word) < 2 ) |
|
800 |
unset($text[$i]); |
|
801 |
} |
|
802 |
$text = array_unique(array_values($text)); |
|
499
6b7fdd898ba3
Fixed some bugs with PostgreSQL and added a word_lcase column to the search_index table because collation is not working under MySQL. TODO: Trigger search index rebuild on upgrade to 1.1.4.
Dan
parents:
463
diff
changeset
|
803 |
// for debugging purposes (usually XSS safe because of character stripping) |
6b7fdd898ba3
Fixed some bugs with PostgreSQL and added a word_lcase column to the search_index table because collation is not working under MySQL. TODO: Trigger search index rebuild on upgrade to 1.1.4.
Dan
parents:
463
diff
changeset
|
804 |
// echo ' ' . implode(' ', $text) . '<br />'; |
461 | 805 |
return $text; |
806 |
} |
|
807 |
||
808 |
/** |
|
809 |
* Rebuilds the site's entire search index. Considerably more exciting if run from the command line. |
|
810 |
* @param bool If true, verbose output. |
|
811 |
* @param bool If true, verbose + debugging output. |
|
812 |
*/ |
|
813 |
||
814 |
function rebuild_search_index($verbose = false, $debug = false) |
|
1 | 815 |
{ |
816 |
global $db, $session, $paths, $template, $plugins; // Common objects |
|
616
e311f5e6f904
Got the installer working. Fixed a few bugs including a nasty-to-debug issue where the lang_id was being hardcoded during installation, resulting in strings being inserted with the wrong lang_id causing an infinfinite loop with fetch() throwing a "no strings" error and using template (which calls fetch()) to complain
Dan
parents:
613
diff
changeset
|
817 |
require_once(ENANO_ROOT . '/includes/search.php'); |
461 | 818 |
|
696
bd5069e1f19a
Revamped page deletion interface; fixed bug where page_meta cache was not being cleared upon restoration of deleted page.
Dan
parents:
692
diff
changeset
|
819 |
$progress = false; |
bd5069e1f19a
Revamped page deletion interface; fixed bug where page_meta cache was not being cleared upon restoration of deleted page.
Dan
parents:
692
diff
changeset
|
820 |
if ( class_exists('ProgressBar') ) |
bd5069e1f19a
Revamped page deletion interface; fixed bug where page_meta cache was not being cleared upon restoration of deleted page.
Dan
parents:
692
diff
changeset
|
821 |
{ |
bd5069e1f19a
Revamped page deletion interface; fixed bug where page_meta cache was not being cleared upon restoration of deleted page.
Dan
parents:
692
diff
changeset
|
822 |
// CLI only. |
bd5069e1f19a
Revamped page deletion interface; fixed bug where page_meta cache was not being cleared upon restoration of deleted page.
Dan
parents:
692
diff
changeset
|
823 |
$progress = new ProgressBar('Rebuilding search index: [', ']', 'Initializing...', 'green', 'blue', 'white', 'yellow'); |
bd5069e1f19a
Revamped page deletion interface; fixed bug where page_meta cache was not being cleared upon restoration of deleted page.
Dan
parents:
692
diff
changeset
|
824 |
$verbose = false; |
bd5069e1f19a
Revamped page deletion interface; fixed bug where page_meta cache was not being cleared upon restoration of deleted page.
Dan
parents:
692
diff
changeset
|
825 |
$debug = false; |
bd5069e1f19a
Revamped page deletion interface; fixed bug where page_meta cache was not being cleared upon restoration of deleted page.
Dan
parents:
692
diff
changeset
|
826 |
$progress->start(); |
bd5069e1f19a
Revamped page deletion interface; fixed bug where page_meta cache was not being cleared upon restoration of deleted page.
Dan
parents:
692
diff
changeset
|
827 |
} |
bd5069e1f19a
Revamped page deletion interface; fixed bug where page_meta cache was not being cleared upon restoration of deleted page.
Dan
parents:
692
diff
changeset
|
828 |
|
461 | 829 |
@set_time_limit(0); |
830 |
||
510
290fa071842a
Fixed some bugs in the installer that prevented it from working without mod_rewrite and/or with a table_prefix present
Dan
parents:
507
diff
changeset
|
831 |
$q = $db->sql_query('DELETE FROM ' . table_prefix . 'search_index;'); |
461 | 832 |
if ( !$q ) |
833 |
$db->_die(); |
|
834 |
||
835 |
$sha1_blank = sha1(''); |
|
836 |
$query_func = ( ENANO_DBLAYER == 'MYSQL' ) ? 'mysql_query' : 'pg_query'; |
|
837 |
||
838 |
// |
|
839 |
// Index $pages_in_batch pages at a time |
|
840 |
// |
|
841 |
$pages_in_batch = 15; |
|
842 |
||
843 |
// First find out how many pages there are |
|
844 |
$q = $db->sql_query('SELECT COUNT(p.urlname) AS num_pages FROM ' . table_prefix . "page_text AS t\n" |
|
845 |
. " LEFT JOIN " . table_prefix . "pages AS p\n" |
|
846 |
. " ON ( p.urlname = t.page_id AND p.namespace = t.namespace )\n" |
|
847 |
. " WHERE ( p.password = '' OR p.password = '$sha1_blank' )\n" |
|
848 |
. " AND ( p.visible = 1 );"); |
|
849 |
if ( !$q ) |
|
850 |
$db->_die(); |
|
851 |
||
852 |
list($num_pages) = $db->fetchrow_num(); |
|
853 |
$num_pages = intval($num_pages); |
|
854 |
$loops = ceil($num_pages / $pages_in_batch); |
|
855 |
$master_word_list = array(); |
|
856 |
$stopwords = get_stopwords(); |
|
857 |
||
858 |
for ( $j = 0; $j < $loops; ) |
|
292
b3cfaf0a505c
Fixed highlighting in search results; changed search algorithm to give more score for terms found in page title; hopefully (hackishly) fixed login_key_cache getting too long
Dan
parents:
286
diff
changeset
|
859 |
{ |
461 | 860 |
$offset = $j * $pages_in_batch; |
861 |
||
862 |
$j++; |
|
863 |
||
864 |
if ( $verbose && $debug ) |
|
292
b3cfaf0a505c
Fixed highlighting in search results; changed search algorithm to give more score for terms found in page title; hopefully (hackishly) fixed login_key_cache getting too long
Dan
parents:
286
diff
changeset
|
865 |
{ |
461 | 866 |
echo "Running indexing round $j of $loops (offset $offset)\n" . ( isset($_SERVER['REQUEST_URI']) ? '<br />' : '' ); |
292
b3cfaf0a505c
Fixed highlighting in search results; changed search algorithm to give more score for terms found in page title; hopefully (hackishly) fixed login_key_cache getting too long
Dan
parents:
286
diff
changeset
|
867 |
} |
461 | 868 |
|
567
7f196509bf78
Actually made the "prevent search indexing" switch work. Needs to be merged with stable.
Dan
parents:
555
diff
changeset
|
869 |
// this is friendly to both MySQL and PostgreSQL. |
7f196509bf78
Actually made the "prevent search indexing" switch work. Needs to be merged with stable.
Dan
parents:
555
diff
changeset
|
870 |
$texts = $db->sql_query('SELECT p.name, p.visible, t.page_id, t.namespace, t.page_text FROM ' . table_prefix . "page_text AS t\n" |
461 | 871 |
. " LEFT JOIN " . table_prefix . "pages AS p\n" |
872 |
. " ON ( p.urlname = t.page_id AND p.namespace = t.namespace )\n" |
|
873 |
. " WHERE ( p.password = '' OR p.password = '$sha1_blank' )\n" |
|
874 |
. " AND ( p.visible = 1 )\n" |
|
499
6b7fdd898ba3
Fixed some bugs with PostgreSQL and added a word_lcase column to the search_index table because collation is not working under MySQL. TODO: Trigger search index rebuild on upgrade to 1.1.4.
Dan
parents:
463
diff
changeset
|
875 |
. " LIMIT $pages_in_batch OFFSET $offset;", false); |
461 | 876 |
if ( !$texts ) |
877 |
$db->_die(); |
|
878 |
||
879 |
$k = $offset; |
|
880 |
||
881 |
if ( $row = $db->fetchrow($texts) ) |
|
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:
256
diff
changeset
|
882 |
{ |
461 | 883 |
do |
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:
256
diff
changeset
|
884 |
{ |
461 | 885 |
$k++; |
886 |
if ( $verbose ) |
|
887 |
{ |
|
888 |
$mu = memory_get_usage(); |
|
889 |
echo " Indexing page $k of $num_pages: {$row['namespace']}:{$row['page_id']}"; |
|
890 |
if ( $debug ) |
|
891 |
echo ", mem = $mu..."; |
|
892 |
flush(); |
|
893 |
} |
|
696
bd5069e1f19a
Revamped page deletion interface; fixed bug where page_meta cache was not being cleared upon restoration of deleted page.
Dan
parents:
692
diff
changeset
|
894 |
else if ( is_object($progress) ) |
bd5069e1f19a
Revamped page deletion interface; fixed bug where page_meta cache was not being cleared upon restoration of deleted page.
Dan
parents:
692
diff
changeset
|
895 |
{ |
bd5069e1f19a
Revamped page deletion interface; fixed bug where page_meta cache was not being cleared upon restoration of deleted page.
Dan
parents:
692
diff
changeset
|
896 |
$progress->update_text_quiet("$k/$num_pages {$row['namespace']}:{$row['page_id']}"); |
bd5069e1f19a
Revamped page deletion interface; fixed bug where page_meta cache was not being cleared upon restoration of deleted page.
Dan
parents:
692
diff
changeset
|
897 |
$progress->set($k, $num_pages); |
bd5069e1f19a
Revamped page deletion interface; fixed bug where page_meta cache was not being cleared upon restoration of deleted page.
Dan
parents:
692
diff
changeset
|
898 |
} |
461 | 899 |
|
567
7f196509bf78
Actually made the "prevent search indexing" switch work. Needs to be merged with stable.
Dan
parents:
555
diff
changeset
|
900 |
// skip this page if it's not supposed to be indexed |
7f196509bf78
Actually made the "prevent search indexing" switch work. Needs to be merged with stable.
Dan
parents:
555
diff
changeset
|
901 |
if ( $row['visible'] == 0 ) |
7f196509bf78
Actually made the "prevent search indexing" switch work. Needs to be merged with stable.
Dan
parents:
555
diff
changeset
|
902 |
{ |
7f196509bf78
Actually made the "prevent search indexing" switch work. Needs to be merged with stable.
Dan
parents:
555
diff
changeset
|
903 |
if ( $verbose ) |
7f196509bf78
Actually made the "prevent search indexing" switch work. Needs to be merged with stable.
Dan
parents:
555
diff
changeset
|
904 |
{ |
7f196509bf78
Actually made the "prevent search indexing" switch work. Needs to be merged with stable.
Dan
parents:
555
diff
changeset
|
905 |
echo "skipped"; |
7f196509bf78
Actually made the "prevent search indexing" switch work. Needs to be merged with stable.
Dan
parents:
555
diff
changeset
|
906 |
if ( isset($_SERVER['REQUEST_URI']) ) |
7f196509bf78
Actually made the "prevent search indexing" switch work. Needs to be merged with stable.
Dan
parents:
555
diff
changeset
|
907 |
echo '<br />'; |
7f196509bf78
Actually made the "prevent search indexing" switch work. Needs to be merged with stable.
Dan
parents:
555
diff
changeset
|
908 |
echo "\n"; |
7f196509bf78
Actually made the "prevent search indexing" switch work. Needs to be merged with stable.
Dan
parents:
555
diff
changeset
|
909 |
} |
7f196509bf78
Actually made the "prevent search indexing" switch work. Needs to be merged with stable.
Dan
parents:
555
diff
changeset
|
910 |
continue; |
7f196509bf78
Actually made the "prevent search indexing" switch work. Needs to be merged with stable.
Dan
parents:
555
diff
changeset
|
911 |
} |
7f196509bf78
Actually made the "prevent search indexing" switch work. Needs to be merged with stable.
Dan
parents:
555
diff
changeset
|
912 |
|
461 | 913 |
// Indexing identifier for the page in the DB |
914 |
$page_uniqid = "ns={$row['namespace']};pid=" . sanitize_page_id($row['page_id']); |
|
915 |
$page_uniqid = $db->escape($page_uniqid); |
|
916 |
||
917 |
// List of words on the page |
|
918 |
$wordlist = $this->calculate_word_list($row['page_text'], $row['page_id'], $row['name']); |
|
919 |
||
920 |
// Index calculation complete -- run inserts |
|
921 |
$inserts = array(); |
|
922 |
foreach ( $wordlist as $word ) |
|
923 |
{ |
|
924 |
if ( in_array($word, $stopwords) || strval(intval($word)) === $word || strlen($word) < 3 ) |
|
925 |
continue; |
|
926 |
$word_db = $db->escape($word); |
|
499
6b7fdd898ba3
Fixed some bugs with PostgreSQL and added a word_lcase column to the search_index table because collation is not working under MySQL. TODO: Trigger search index rebuild on upgrade to 1.1.4.
Dan
parents:
463
diff
changeset
|
927 |
$word_db_lc = $db->escape(strtolower($word)); |
461 | 928 |
if ( !in_array($word, $master_word_list) ) |
929 |
{ |
|
499
6b7fdd898ba3
Fixed some bugs with PostgreSQL and added a word_lcase column to the search_index table because collation is not working under MySQL. TODO: Trigger search index rebuild on upgrade to 1.1.4.
Dan
parents:
463
diff
changeset
|
930 |
$inserts[] = "( '$word_db', '$word_db_lc', '$page_uniqid' )"; |
461 | 931 |
} |
932 |
else |
|
933 |
{ |
|
934 |
if ( $verbose && $debug ) |
|
935 |
echo '.'; |
|
936 |
$pid_col = ( ENANO_DBLAYER == 'MYSQL' ) ? |
|
937 |
"CONCAT( page_names, ',$page_uniqid' )": |
|
938 |
"page_names || ',$page_uniqid'"; |
|
939 |
$q = $db->sql_query('UPDATE ' . table_prefix . "search_index SET page_names = $pid_col WHERE word = '$word_db';", false); |
|
940 |
if ( !$q ) |
|
941 |
$db->_die(); |
|
942 |
} |
|
943 |
} |
|
944 |
if ( count($inserts) > 0 ) |
|
945 |
{ |
|
946 |
if ( $verbose && $debug ) |
|
947 |
echo 'i'; |
|
948 |
$inserts = implode(",\n ", $inserts); |
|
499
6b7fdd898ba3
Fixed some bugs with PostgreSQL and added a word_lcase column to the search_index table because collation is not working under MySQL. TODO: Trigger search index rebuild on upgrade to 1.1.4.
Dan
parents:
463
diff
changeset
|
949 |
$q = $db->sql_query('INSERT INTO ' . table_prefix . "search_index(word, word_lcase, page_names) VALUES\n $inserts;", false); |
461 | 950 |
if ( !$q ) |
951 |
$db->_die(); |
|
952 |
} |
|
953 |
||
954 |
$master_word_list = array_unique(array_merge($master_word_list, $wordlist)); |
|
955 |
if ( $verbose ) |
|
956 |
{ |
|
957 |
if ( isset($_SERVER['REQUEST_URI']) ) |
|
958 |
echo '<br />'; |
|
959 |
echo "\n"; |
|
960 |
} |
|
961 |
unset($inserts, $wordlist, $page_uniqid, $word_db, $q, $word, $row); |
|
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:
256
diff
changeset
|
962 |
} |
461 | 963 |
while ( $row = $db->fetchrow($texts) ); |
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:
256
diff
changeset
|
964 |
} |
461 | 965 |
$db->free_result($texts); |
1 | 966 |
} |
292
b3cfaf0a505c
Fixed highlighting in search results; changed search algorithm to give more score for terms found in page title; hopefully (hackishly) fixed login_key_cache getting too long
Dan
parents:
286
diff
changeset
|
967 |
if ( $verbose ) |
b3cfaf0a505c
Fixed highlighting in search results; changed search algorithm to give more score for terms found in page title; hopefully (hackishly) fixed login_key_cache getting too long
Dan
parents:
286
diff
changeset
|
968 |
{ |
461 | 969 |
echo "Indexing complete."; |
970 |
if ( isset($_SERVER['REQUEST_URI']) ) |
|
971 |
echo '<br />'; |
|
972 |
echo "\n"; |
|
292
b3cfaf0a505c
Fixed highlighting in search results; changed search algorithm to give more score for terms found in page title; hopefully (hackishly) fixed login_key_cache getting too long
Dan
parents:
286
diff
changeset
|
973 |
} |
696
bd5069e1f19a
Revamped page deletion interface; fixed bug where page_meta cache was not being cleared upon restoration of deleted page.
Dan
parents:
692
diff
changeset
|
974 |
else if ( is_object($progress) ) |
bd5069e1f19a
Revamped page deletion interface; fixed bug where page_meta cache was not being cleared upon restoration of deleted page.
Dan
parents:
692
diff
changeset
|
975 |
{ |
bd5069e1f19a
Revamped page deletion interface; fixed bug where page_meta cache was not being cleared upon restoration of deleted page.
Dan
parents:
692
diff
changeset
|
976 |
$progress->update_text('Complete.'); |
bd5069e1f19a
Revamped page deletion interface; fixed bug where page_meta cache was not being cleared upon restoration of deleted page.
Dan
parents:
692
diff
changeset
|
977 |
$progress->end(); |
bd5069e1f19a
Revamped page deletion interface; fixed bug where page_meta cache was not being cleared upon restoration of deleted page.
Dan
parents:
692
diff
changeset
|
978 |
} |
461 | 979 |
return true; |
1 | 980 |
} |
981 |
||
982 |
/** |
|
983 |
* Partially rebuilds the search index, removing/inserting entries only for the current page |
|
984 |
* @param string $page_id |
|
985 |
* @param string $namespace |
|
986 |
*/ |
|
987 |
||
988 |
function rebuild_page_index($page_id, $namespace) |
|
989 |
{ |
|
990 |
global $db, $session, $paths, $template, $plugins; // Common objects |
|
617
9e4ccf67b6ea
Fixed missing require() on search.php in rebuild_page_index()
Dan
parents:
616
diff
changeset
|
991 |
require_once(ENANO_ROOT . '/includes/search.php'); |
9e4ccf67b6ea
Fixed missing require() on search.php in rebuild_page_index()
Dan
parents:
616
diff
changeset
|
992 |
|
1 | 993 |
if(!$db->sql_query('SELECT page_text FROM '.table_prefix.'page_text |
994 |
WHERE page_id=\''.$db->escape($page_id).'\' AND namespace=\''.$db->escape($namespace).'\';')) |
|
995 |
{ |
|
996 |
return $db->get_error(); |
|
997 |
} |
|
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:
256
diff
changeset
|
998 |
if ( $db->numrows() < 1 ) |
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:
256
diff
changeset
|
999 |
return 'E: No rows'; |
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:
256
diff
changeset
|
1000 |
$idstring = $this->nslist[$namespace] . sanitize_page_id($page_id); |
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:
256
diff
changeset
|
1001 |
if ( !isset($this->pages[$idstring]) ) |
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:
256
diff
changeset
|
1002 |
{ |
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:
256
diff
changeset
|
1003 |
return 'E: Can\'t find page metadata'; |
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:
256
diff
changeset
|
1004 |
} |
1 | 1005 |
$row = $db->fetchrow(); |
1006 |
$db->free_result(); |
|
1007 |
$search = new Searcher(); |
|
571
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
1008 |
|
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
1009 |
// if the page shouldn't be indexed, send a blank set of strings to the indexing engine |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
1010 |
if ( $this->pages[$idstring]['visible'] == 0 ) |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
1011 |
{ |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
1012 |
$search->buildIndex(Array("ns={$namespace};pid={$page_id}"=>'')); |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
1013 |
} |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
1014 |
else |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
1015 |
{ |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
1016 |
$search->buildIndex(Array("ns={$namespace};pid={$page_id}"=>$row['page_text'] . ' ' . $this->pages[$idstring]['name'])); |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
1017 |
} |
66e14e61613e
Got ACL scope logic working again and began enforcing it. Breaking API change: assigning page title with $template->tpl_strings['PAGE_NAME'] will no longer work, use $template->assign_vars(). Workaround may be added later. Test for assign_vars method if compatibility needed. Added namespace processor API (non-breaking change). Several other things tweaked around as well.
Dan
parents:
567
diff
changeset
|
1018 |
|
1 | 1019 |
$new_index = $search->index; |
1020 |
||
320
112debff64bd
SURPRISE! Preliminary PostgreSQL support added. The required schema file is not present in this commit and will be included at a later date. No installer support is implemented. Also in this commit: several fixes including <!-- SYSMSG ... --> was broken in template compiler; set fixed width on included images to prevent the thumbnail box from getting huge; added a much more friendly interface to AJAX responses that are invalid JSON
Dan
parents:
317
diff
changeset
|
1021 |
if ( ENANO_DBLAYER == 'MYSQL' ) |
1 | 1022 |
{ |
320
112debff64bd
SURPRISE! Preliminary PostgreSQL support added. The required schema file is not present in this commit and will be included at a later date. No installer support is implemented. Also in this commit: several fixes including <!-- SYSMSG ... --> was broken in template compiler; set fixed width on included images to prevent the thumbnail box from getting huge; added a much more friendly interface to AJAX responses that are invalid JSON
Dan
parents:
317
diff
changeset
|
1023 |
$keys = array_keys($search->index); |
112debff64bd
SURPRISE! Preliminary PostgreSQL support added. The required schema file is not present in this commit and will be included at a later date. No installer support is implemented. Also in this commit: several fixes including <!-- SYSMSG ... --> was broken in template compiler; set fixed width on included images to prevent the thumbnail box from getting huge; added a much more friendly interface to AJAX responses that are invalid JSON
Dan
parents:
317
diff
changeset
|
1024 |
foreach($keys as $i => $k) |
112debff64bd
SURPRISE! Preliminary PostgreSQL support added. The required schema file is not present in this commit and will be included at a later date. No installer support is implemented. Also in this commit: several fixes including <!-- SYSMSG ... --> was broken in template compiler; set fixed width on included images to prevent the thumbnail box from getting huge; added a much more friendly interface to AJAX responses that are invalid JSON
Dan
parents:
317
diff
changeset
|
1025 |
{ |
112debff64bd
SURPRISE! Preliminary PostgreSQL support added. The required schema file is not present in this commit and will be included at a later date. No installer support is implemented. Also in this commit: several fixes including <!-- SYSMSG ... --> was broken in template compiler; set fixed width on included images to prevent the thumbnail box from getting huge; added a much more friendly interface to AJAX responses that are invalid JSON
Dan
parents:
317
diff
changeset
|
1026 |
$c =& $keys[$i]; |
112debff64bd
SURPRISE! Preliminary PostgreSQL support added. The required schema file is not present in this commit and will be included at a later date. No installer support is implemented. Also in this commit: several fixes including <!-- SYSMSG ... --> was broken in template compiler; set fixed width on included images to prevent the thumbnail box from getting huge; added a much more friendly interface to AJAX responses that are invalid JSON
Dan
parents:
317
diff
changeset
|
1027 |
$c = hexencode($c, '', ''); |
112debff64bd
SURPRISE! Preliminary PostgreSQL support added. The required schema file is not present in this commit and will be included at a later date. No installer support is implemented. Also in this commit: several fixes including <!-- SYSMSG ... --> was broken in template compiler; set fixed width on included images to prevent the thumbnail box from getting huge; added a much more friendly interface to AJAX responses that are invalid JSON
Dan
parents:
317
diff
changeset
|
1028 |
} |
112debff64bd
SURPRISE! Preliminary PostgreSQL support added. The required schema file is not present in this commit and will be included at a later date. No installer support is implemented. Also in this commit: several fixes including <!-- SYSMSG ... --> was broken in template compiler; set fixed width on included images to prevent the thumbnail box from getting huge; added a much more friendly interface to AJAX responses that are invalid JSON
Dan
parents:
317
diff
changeset
|
1029 |
$keys = "word=0x" . implode ( " OR word=0x", $keys ) . ""; |
1 | 1030 |
} |
320
112debff64bd
SURPRISE! Preliminary PostgreSQL support added. The required schema file is not present in this commit and will be included at a later date. No installer support is implemented. Also in this commit: several fixes including <!-- SYSMSG ... --> was broken in template compiler; set fixed width on included images to prevent the thumbnail box from getting huge; added a much more friendly interface to AJAX responses that are invalid JSON
Dan
parents:
317
diff
changeset
|
1031 |
else |
112debff64bd
SURPRISE! Preliminary PostgreSQL support added. The required schema file is not present in this commit and will be included at a later date. No installer support is implemented. Also in this commit: several fixes including <!-- SYSMSG ... --> was broken in template compiler; set fixed width on included images to prevent the thumbnail box from getting huge; added a much more friendly interface to AJAX responses that are invalid JSON
Dan
parents:
317
diff
changeset
|
1032 |
{ |
112debff64bd
SURPRISE! Preliminary PostgreSQL support added. The required schema file is not present in this commit and will be included at a later date. No installer support is implemented. Also in this commit: several fixes including <!-- SYSMSG ... --> was broken in template compiler; set fixed width on included images to prevent the thumbnail box from getting huge; added a much more friendly interface to AJAX responses that are invalid JSON
Dan
parents:
317
diff
changeset
|
1033 |
$keys = array_keys($search->index); |
112debff64bd
SURPRISE! Preliminary PostgreSQL support added. The required schema file is not present in this commit and will be included at a later date. No installer support is implemented. Also in this commit: several fixes including <!-- SYSMSG ... --> was broken in template compiler; set fixed width on included images to prevent the thumbnail box from getting huge; added a much more friendly interface to AJAX responses that are invalid JSON
Dan
parents:
317
diff
changeset
|
1034 |
foreach($keys as $i => $k) |
112debff64bd
SURPRISE! Preliminary PostgreSQL support added. The required schema file is not present in this commit and will be included at a later date. No installer support is implemented. Also in this commit: several fixes including <!-- SYSMSG ... --> was broken in template compiler; set fixed width on included images to prevent the thumbnail box from getting huge; added a much more friendly interface to AJAX responses that are invalid JSON
Dan
parents:
317
diff
changeset
|
1035 |
{ |
112debff64bd
SURPRISE! Preliminary PostgreSQL support added. The required schema file is not present in this commit and will be included at a later date. No installer support is implemented. Also in this commit: several fixes including <!-- SYSMSG ... --> was broken in template compiler; set fixed width on included images to prevent the thumbnail box from getting huge; added a much more friendly interface to AJAX responses that are invalid JSON
Dan
parents:
317
diff
changeset
|
1036 |
$c =& $keys[$i]; |
112debff64bd
SURPRISE! Preliminary PostgreSQL support added. The required schema file is not present in this commit and will be included at a later date. No installer support is implemented. Also in this commit: several fixes including <!-- SYSMSG ... --> was broken in template compiler; set fixed width on included images to prevent the thumbnail box from getting huge; added a much more friendly interface to AJAX responses that are invalid JSON
Dan
parents:
317
diff
changeset
|
1037 |
$c = $db->escape($c); |
112debff64bd
SURPRISE! Preliminary PostgreSQL support added. The required schema file is not present in this commit and will be included at a later date. No installer support is implemented. Also in this commit: several fixes including <!-- SYSMSG ... --> was broken in template compiler; set fixed width on included images to prevent the thumbnail box from getting huge; added a much more friendly interface to AJAX responses that are invalid JSON
Dan
parents:
317
diff
changeset
|
1038 |
} |
112debff64bd
SURPRISE! Preliminary PostgreSQL support added. The required schema file is not present in this commit and will be included at a later date. No installer support is implemented. Also in this commit: several fixes including <!-- SYSMSG ... --> was broken in template compiler; set fixed width on included images to prevent the thumbnail box from getting huge; added a much more friendly interface to AJAX responses that are invalid JSON
Dan
parents:
317
diff
changeset
|
1039 |
$keys = "word='" . implode ( "' OR word='", $keys ) . "'"; |
112debff64bd
SURPRISE! Preliminary PostgreSQL support added. The required schema file is not present in this commit and will be included at a later date. No installer support is implemented. Also in this commit: several fixes including <!-- SYSMSG ... --> was broken in template compiler; set fixed width on included images to prevent the thumbnail box from getting huge; added a much more friendly interface to AJAX responses that are invalid JSON
Dan
parents:
317
diff
changeset
|
1040 |
} |
1 | 1041 |
|
1042 |
$query = $db->sql_query('SELECT word,page_names FROM '.table_prefix.'search_index WHERE '.$keys.';'); |
|
1043 |
||
1044 |
while($row = $db->fetchrow()) |
|
1045 |
{ |
|
1046 |
$row['word'] = rtrim($row['word'], "\0"); |
|
1047 |
$new_index[ $row['word'] ] = $row['page_names'] . ',' . $search->index[ $row['word'] ]; |
|
1048 |
} |
|
1049 |
$db->free_result(); |
|
1050 |
||
1051 |
$db->sql_query('DELETE FROM '.table_prefix.'search_index WHERE '.$keys.';'); |
|
1052 |
||
1053 |
$secs = Array(); |
|
540
1e4b759da336
Added but didn't set up custom_user_title ACL; fixed rebuild_page_index() to use word_lcase
Dan
parents:
536
diff
changeset
|
1054 |
$q = 'INSERT INTO '.table_prefix.'search_index(word,word_lcase,page_names) VALUES'; |
1 | 1055 |
foreach($new_index as $word => $pages) |
1056 |
{ |
|
540
1e4b759da336
Added but didn't set up custom_user_title ACL; fixed rebuild_page_index() to use word_lcase
Dan
parents:
536
diff
changeset
|
1057 |
$secs[] = '(\''.$db->escape($word).'\', \'' . $db->escape(strtolower($word)) . '\', \''.$db->escape($pages).'\')'; |
1 | 1058 |
} |
1059 |
$q .= implode(',', $secs); |
|
1060 |
unset($secs); |
|
1061 |
$q .= ';'; |
|
1062 |
if(!$db->check_query($q)) |
|
1063 |
{ |
|
1064 |
die('BUG: PathManager::rebuild_page_index: Query rejected by SQL parser:<pre>'.$q.'</pre>'); |
|
1065 |
} |
|
1066 |
$result = $db->sql_query($q); |
|
1067 |
if($result) |
|
1068 |
return true; |
|
1069 |
else |
|
1070 |
$db->_die('The search index was trying to rebuild itself when the error occured.'); |
|
1071 |
||
1072 |
} |
|
1073 |
||
1074 |
/** |
|
1075 |
* Creates an instance of the Searcher class, including index info |
|
1076 |
* @return object |
|
1077 |
*/ |
|
1078 |
||
1079 |
function makeSearcher($match_case = false) |
|
1080 |
{ |
|
1081 |
global $db, $session, $paths, $template, $plugins; // Common objects |
|
1082 |
$search = new Searcher(); |
|
1083 |
$q = $db->sql_query('SELECT word,page_names FROM '.table_prefix.'search_index;'); |
|
1084 |
if(!$q) |
|
1085 |
{ |
|
1086 |
echo $db->get_error(); |
|
1087 |
return false; |
|
1088 |
} |
|
1089 |
$idx = Array(); |
|
1090 |
while($row = $db->fetchrow($q)) |
|
1091 |
{ |
|
1092 |
$row['word'] = rtrim($row['word'], "\0"); |
|
1093 |
$idx[$row['word']] = $row['page_names']; |
|
1094 |
} |
|
1095 |
$db->free_result(); |
|
1096 |
$search->index = $idx; |
|
1097 |
if($match_case) |
|
1098 |
$search->match_case = true; |
|
1099 |
return $search; |
|
1100 |
} |
|
1101 |
||
1102 |
/** |
|
1103 |
* Creates an associative array filled with the values of all the page titles |
|
1104 |
* @return array |
|
1105 |
*/ |
|
1106 |
||
1107 |
function get_page_titles() |
|
1108 |
{ |
|
1109 |
$texts = Array(); |
|
1110 |
for ( $i = 0; $i < sizeof($this->pages) / 2; $i++ ) |
|
1111 |
{ |
|
1112 |
$texts[$this->pages[$i]['urlname']] = $this->pages[$i]['name']; |
|
1113 |
} |
|
1114 |
return $texts; |
|
1115 |
} |
|
1116 |
||
1117 |
/** |
|
1118 |
* Creates an instance of the Searcher class, including index info for page titles |
|
1119 |
* @return object |
|
1120 |
*/ |
|
1121 |
||
1122 |
function makeTitleSearcher($match_case = false) |
|
1123 |
{ |
|
1124 |
global $db, $session, $paths, $template, $plugins; // Common objects |
|
1125 |
$search = new Searcher(); |
|
1126 |
$texts = $this->get_page_titles(); |
|
1127 |
$search->buildIndex($texts); |
|
1128 |
if($match_case) |
|
1129 |
$search->match_case = true; |
|
1130 |
return $search; |
|
1131 |
} |
|
1132 |
||
73
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
parents:
55
diff
changeset
|
1133 |
/** |
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
parents:
55
diff
changeset
|
1134 |
* Returns a list of groups that a given page is a member of. |
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
parents:
55
diff
changeset
|
1135 |
* @param string Page ID |
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
parents:
55
diff
changeset
|
1136 |
* @param string Namespace |
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
parents:
55
diff
changeset
|
1137 |
* @return array |
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
parents:
55
diff
changeset
|
1138 |
*/ |
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
parents:
55
diff
changeset
|
1139 |
|
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
parents:
55
diff
changeset
|
1140 |
function get_page_groups($page_id, $namespace) |
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
parents:
55
diff
changeset
|
1141 |
{ |
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
parents:
55
diff
changeset
|
1142 |
global $db, $session, $paths, $template, $plugins; // Common objects |
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
parents:
55
diff
changeset
|
1143 |
|
156
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1144 |
static $cache = array(); |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1145 |
|
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1146 |
if ( count($cache) == 0 ) |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1147 |
{ |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1148 |
foreach ( $this->nslist as $key => $_ ) |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1149 |
{ |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1150 |
$cache[$key] = array(); |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1151 |
} |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1152 |
} |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1153 |
|
73
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
parents:
55
diff
changeset
|
1154 |
if ( !isset($this->nslist[$namespace]) ) |
151
824821224153
Added a new Javascript variable, aclDisableTransitionFX, that will switch off effects on message boxes and the ACL editor when set to true
Dan
parents:
142
diff
changeset
|
1155 |
die('$paths->get_page_groups(): HACKING ATTEMPT: namespace "'. htmlspecialchars($namespace) .'" doesn\'t exist'); |
73
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
parents:
55
diff
changeset
|
1156 |
|
156
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1157 |
$page_id_unescaped = $paths->nslist[$namespace] . |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1158 |
dirtify_page_id($page_id); |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1159 |
$page_id_str = $paths->nslist[$namespace] . |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1160 |
sanitize_page_id($page_id); |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1161 |
|
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1162 |
$page_id = $db->escape(sanitize_page_id($page_id)); |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1163 |
|
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1164 |
if ( isset($cache[$namespace][$page_id]) ) |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1165 |
{ |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1166 |
return $cache[$namespace][$page_id]; |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1167 |
} |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1168 |
|
73
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
parents:
55
diff
changeset
|
1169 |
$group_list = array(); |
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
parents:
55
diff
changeset
|
1170 |
|
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
parents:
55
diff
changeset
|
1171 |
// What linked categories have this page? |
156
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1172 |
$q = $db->sql_unbuffered_query('SELECT g.pg_id, g.pg_type, g.pg_target FROM '.table_prefix.'page_groups AS g |
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:
76
diff
changeset
|
1173 |
LEFT JOIN '.table_prefix.'categories AS c |
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at 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:
76
diff
changeset
|
1174 |
ON ( ( c.category_id = g.pg_target AND g.pg_type = ' . PAGE_GRP_CATLINK . ' ) OR c.category_id IS NULL ) |
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at 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:
76
diff
changeset
|
1175 |
LEFT JOIN '.table_prefix.'page_group_members AS m |
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at 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:
76
diff
changeset
|
1176 |
ON ( ( g.pg_id = m.pg_id AND g.pg_type = ' . PAGE_GRP_NORMAL . ' ) OR ( m.pg_id IS NULL ) ) |
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at 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:
76
diff
changeset
|
1177 |
LEFT JOIN '.table_prefix.'tags AS t |
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at 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:
76
diff
changeset
|
1178 |
ON ( ( t.tag_name = g.pg_target AND pg_type = ' . PAGE_GRP_TAGGED . ' ) OR t.tag_name IS NULL ) |
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at 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:
76
diff
changeset
|
1179 |
WHERE |
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at 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:
76
diff
changeset
|
1180 |
( c.page_id=\'' . $page_id . '\' AND c.namespace=\'' . $namespace . '\' ) OR |
cb7dde69c301
Improved and enabled HTML optimization algorithm; enabled gzip compression; added but did not test at 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:
76
diff
changeset
|
1181 |
( t.page_id=\'' . $page_id . '\' AND t.namespace=\'' . $namespace . '\' ) OR |
156
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1182 |
( m.page_id=\'' . $page_id . '\' AND m.namespace=\'' . $namespace . '\' ) OR |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1183 |
( g.pg_type = ' . PAGE_GRP_REGEX . ' );'); |
73
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
parents:
55
diff
changeset
|
1184 |
if ( !$q ) |
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
parents:
55
diff
changeset
|
1185 |
$db->_die(); |
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
parents:
55
diff
changeset
|
1186 |
|
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
parents:
55
diff
changeset
|
1187 |
while ( $row = $db->fetchrow() ) |
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
parents:
55
diff
changeset
|
1188 |
{ |
156
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1189 |
if ( $row['pg_type'] == PAGE_GRP_REGEX ) |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1190 |
{ |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1191 |
//echo "<debug> matching page " . htmlspecialchars($page_id_unescaped) . " against regex <tt>" . htmlspecialchars($row['pg_target']) . "</tt>."; |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1192 |
if ( @preg_match($row['pg_target'], $page_id_unescaped) || @preg_match($row['pg_target'], $page_id_str) ) |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1193 |
{ |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1194 |
//echo "..matched"; |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1195 |
$group_list[] = $row['pg_id']; |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1196 |
} |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1197 |
//echo "<br />"; |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1198 |
} |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1199 |
else |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1200 |
{ |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1201 |
$group_list[] = $row['pg_id']; |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1202 |
} |
73
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
parents:
55
diff
changeset
|
1203 |
} |
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
parents:
55
diff
changeset
|
1204 |
|
74
68469a95658d
Various bugfixes and cleanups, too much to remember... see the diffs for what got changed :-)
Dan
parents:
73
diff
changeset
|
1205 |
$db->free_result(); |
68469a95658d
Various bugfixes and cleanups, too much to remember... see the diffs for what got changed :-)
Dan
parents:
73
diff
changeset
|
1206 |
|
156
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1207 |
$cache[$namespace][$page_id] = $group_list; |
73
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
parents:
55
diff
changeset
|
1208 |
|
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
parents:
55
diff
changeset
|
1209 |
return $group_list; |
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
parents:
55
diff
changeset
|
1210 |
|
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
parents:
55
diff
changeset
|
1211 |
} |
0a74676a2f2f
Made the move to Loch Ness, and got some basic page grouping functionality working. TODO: fix some UI issues in Javascript ACL editor and change non-JS ACL editor to work with page groups too
Dan
parents:
55
diff
changeset
|
1212 |
|
1 | 1213 |
} |
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
|
1214 |
|
1 | 1215 |
?> |