author | Dan |
Mon, 14 Apr 2008 12:13:12 -0400 | |
changeset 536 | 218a627eb53e |
parent 515 | be77f34d03af |
child 540 | 1e4b759da336 |
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 |
|
536 | 5 |
* Version 1.1.4 (Caoineag alpha 4) |
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 |
||
20 |
class pathManager { |
|
322
5f1cd51bf1be
Many changes. Installer with PostgreSQL is broken badly and will be for some time.
Dan
parents:
320
diff
changeset
|
21 |
var $pages, $custom_page, $cpage, $page, $fullpage, $page_exists, $page_id, $namespace, $nslist, $admin_tree, $wiki_mode, $page_protected, $template_cache, $anonymous_page; |
1 | 22 |
function __construct() |
23 |
{ |
|
24 |
global $db, $session, $paths, $template, $plugins; // Common objects |
|
25 |
||
26 |
$GLOBALS['paths'] =& $this; |
|
27 |
$this->pages = Array(); |
|
28 |
||
29 |
// DEFINE NAMESPACES HERE |
|
30 |
// The key names should NOT EVER be changed, or Enano will be very broken |
|
31 |
$this->nslist = Array( |
|
32 |
'Article' =>'', |
|
33 |
'User' =>'User:', |
|
34 |
'File' =>'File:', |
|
35 |
'Help' =>'Help:', |
|
36 |
'Admin' =>'Admin:', |
|
37 |
'Special' =>'Special:', |
|
38 |
'System' =>'Enano:', |
|
39 |
'Template'=>'Template:', |
|
40 |
'Category'=>'Category:', |
|
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
|
41 |
'Anonymous'=>'PhysicalRedirect:', |
40
723bb7acf914
Fixed a lot of bugs with Safari and Konqueror; improved Opera compatibility
Dan
parents:
30
diff
changeset
|
42 |
'Project' =>sanitize_page_id(getConfig('site_name')).':', |
1 | 43 |
); |
44 |
||
45 |
// ACL types |
|
46 |
// These can also be added from within plugins |
|
47 |
||
218 | 48 |
$session->register_acl_type('read', AUTH_ALLOW, 'perm_read'); |
49 |
$session->register_acl_type('post_comments', AUTH_ALLOW, 'perm_post_comments', Array('read'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
50 |
$session->register_acl_type('edit_comments', AUTH_ALLOW, 'perm_edit_comments', Array('post_comments'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
51 |
$session->register_acl_type('edit_page', AUTH_WIKIMODE, 'perm_edit_page', Array('view_source'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
387
92664d2efab8
Rebranded source code as 1.1.1; added TinyMCE ACL rule as per Vadi's request: http://forum.enanocms.org/viewtopic.php?f=7&t=54
Dan
parents:
380
diff
changeset
|
52 |
$session->register_acl_type('edit_wysiwyg', AUTH_ALLOW, 'perm_edit_wysiwyg', Array('edit_page'), 'Article|User|Project|Template|File|Help|System|Category'); |
218 | 53 |
$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 |
54 |
$session->register_acl_type('mod_comments', AUTH_DISALLOW, 'perm_mod_comments', Array('edit_comments'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
55 |
$session->register_acl_type('history_view', AUTH_WIKIMODE, 'perm_history_view', Array('read'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
56 |
$session->register_acl_type('history_rollback', AUTH_DISALLOW, 'perm_history_rollback', Array('history_view'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
238 | 57 |
$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 | 58 |
$session->register_acl_type('protect', AUTH_DISALLOW, 'perm_protect', Array('read'), 'Article|User|Project|Template|File|Help|System|Category'); |
59 |
$session->register_acl_type('rename', AUTH_WIKIMODE, 'perm_rename', Array('read'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
60 |
$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'); |
|
61 |
$session->register_acl_type('vote_delete', AUTH_ALLOW, 'perm_vote_delete', Array('read'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
62 |
$session->register_acl_type('vote_reset', AUTH_DISALLOW, 'perm_vote_reset', Array('read'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
63 |
$session->register_acl_type('delete_page', AUTH_DISALLOW, 'perm_delete_page', Array(), 'Article|User|Project|Template|File|Help|System|Category'); |
|
64 |
$session->register_acl_type('tag_create', AUTH_ALLOW, 'perm_tag_create', Array('read'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
65 |
$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'); |
|
66 |
$session->register_acl_type('tag_delete_other', AUTH_DISALLOW, 'perm_tag_delete_other', Array('read'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
67 |
$session->register_acl_type('set_wiki_mode', AUTH_DISALLOW, 'perm_set_wiki_mode', Array('read'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
68 |
$session->register_acl_type('password_set', AUTH_DISALLOW, 'perm_password_set', Array('read'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
69 |
$session->register_acl_type('password_reset', AUTH_DISALLOW, 'perm_password_reset', Array('read'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
70 |
$session->register_acl_type('mod_misc', AUTH_DISALLOW, 'perm_mod_misc', Array(), 'All'); |
|
71 |
$session->register_acl_type('edit_cat', AUTH_WIKIMODE, 'perm_edit_cat', Array('read'), 'Article|User|Project|Template|File|Help|System|Category'); |
|
72 |
$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'); |
|
73 |
$session->register_acl_type('upload_files', AUTH_DISALLOW, 'perm_upload_files', Array('create_page'), 'Article|User|Project|Template|File|Help|System|Category|Special'); |
|
74 |
$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'); |
|
75 |
$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
|
76 |
$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
|
77 |
$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'); |
218 | 78 |
$session->register_acl_type('edit_acl', AUTH_DISALLOW, 'perm_edit_acl', Array('read', 'post_comments', 'edit_comments', 'edit_page', 'view_source', 'mod_comments', 'history_view', 'history_rollback', 'history_rollback_extra', 'protect', 'rename', 'clear_logs', 'vote_delete', 'vote_reset', 'delete_page', 'set_wiki_mode', 'password_set', 'password_reset', 'mod_misc', 'edit_cat', 'even_when_protected', 'upload_files', 'upload_new_version', 'create_page', 'php_in_pages')); |
1 | 79 |
|
80 |
// DO NOT add new admin pages here! Use a plugin to call $paths->addAdminNode(); |
|
505 | 81 |
$this->addAdminNode('adm_cat_general', 'adm_page_general_config', 'GeneralConfig', scriptPath . '/images/icons/applets/generalconfig.png'); |
82 |
$this->addAdminNode('adm_cat_general', 'adm_page_file_uploads', 'UploadConfig', scriptPath . '/images/icons/applets/uploadconfig.png'); |
|
83 |
$this->addAdminNode('adm_cat_general', 'adm_page_file_types', 'UploadAllowedMimeTypes', scriptPath . '/images/icons/applets/uploadallowedmimetypes.png'); |
|
84 |
$this->addAdminNode('adm_cat_general', 'adm_page_plugins', 'PluginManager', scriptPath . '/images/icons/applets/pluginmanager.png'); |
|
85 |
$this->addAdminNode('adm_cat_general', 'adm_page_db_backup', 'DBBackup', scriptPath . '/images/icons/applets/dbbackup.png'); |
|
86 |
$this->addAdminNode('adm_cat_general', 'adm_page_lang_manager', 'LangManager', scriptPath . '/images/icons/applets/langmanager.png'); |
|
87 |
$this->addAdminNode('adm_cat_content', 'adm_page_manager', 'PageManager', scriptPath . '/images/icons/applets/pagemanager.png'); |
|
88 |
$this->addAdminNode('adm_cat_content', 'adm_page_editor', 'PageEditor', scriptPath . '/images/icons/applets/pageeditor.png'); |
|
89 |
$this->addAdminNode('adm_cat_content', 'adm_page_pg_groups', 'PageGroups', scriptPath . '/images/icons/applets/pagegroups.png'); |
|
90 |
$this->addAdminNode('adm_cat_appearance', 'adm_page_themes', 'ThemeManager', scriptPath . '/images/icons/applets/thememanager.png'); |
|
91 |
$this->addAdminNode('adm_cat_users', 'adm_page_users', 'UserManager', scriptPath . '/images/icons/applets/usermanager.png'); |
|
92 |
$this->addAdminNode('adm_cat_users', 'adm_page_user_groups', 'GroupManager', scriptPath . '/images/icons/applets/groupmanager.png'); |
|
93 |
$this->addAdminNode('adm_cat_users', 'adm_page_coppa', 'COPPA', scriptPath . '/images/icons/applets/coppa.png'); |
|
94 |
$this->addAdminNode('adm_cat_users', 'adm_page_mass_email', 'MassEmail', scriptPath . '/images/icons/applets/massemail.png'); |
|
95 |
$this->addAdminNode('adm_cat_security', 'adm_page_security_log', 'SecurityLog', scriptPath . '/images/icons/applets/securitylog.png'); |
|
96 |
$this->addAdminNode('adm_cat_security', 'adm_page_ban_control', 'BanControl', scriptPath . '/images/icons/applets/bancontrol.png'); |
|
1 | 97 |
|
98 |
$code = $plugins->setHook('acl_rule_init'); |
|
99 |
foreach ( $code as $cmd ) |
|
100 |
{ |
|
101 |
eval($cmd); |
|
102 |
} |
|
103 |
||
104 |
$this->wiki_mode = (int)getConfig('wiki_mode')=='1'; |
|
105 |
$this->template_cache = Array(); |
|
106 |
} |
|
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
|
107 |
function parse_url($sanitize = true) |
1 | 108 |
{ |
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
|
109 |
$title = ''; |
515
be77f34d03af
Fixed bad URL interpretation on CGI and Apache wrongly supplying PATH_INFO when directory index requested
Dan
parents:
510
diff
changeset
|
110 |
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
|
111 |
{ |
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
|
112 |
$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
|
113 |
} |
515
be77f34d03af
Fixed bad URL interpretation on CGI and Apache wrongly supplying PATH_INFO when directory index requested
Dan
parents:
510
diff
changeset
|
114 |
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
|
115 |
{ |
515
be77f34d03af
Fixed bad URL interpretation on CGI and Apache wrongly supplying PATH_INFO when directory index requested
Dan
parents:
510
diff
changeset
|
116 |
// 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
|
117 |
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
|
118 |
{ |
be77f34d03af
Fixed bad URL interpretation on CGI and Apache wrongly supplying PATH_INFO when directory index requested
Dan
parents:
510
diff
changeset
|
119 |
// 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
|
120 |
} |
be77f34d03af
Fixed bad URL interpretation on CGI and Apache wrongly supplying PATH_INFO when directory index requested
Dan
parents:
510
diff
changeset
|
121 |
else |
be77f34d03af
Fixed bad URL interpretation on CGI and Apache wrongly supplying PATH_INFO when directory index requested
Dan
parents:
510
diff
changeset
|
122 |
{ |
be77f34d03af
Fixed bad URL interpretation on CGI and Apache wrongly supplying PATH_INFO when directory index requested
Dan
parents:
510
diff
changeset
|
123 |
$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
|
124 |
} |
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
|
125 |
} |
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 |
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
|
127 |
{ |
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 |
// 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
|
129 |
// 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
|
130 |
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
|
131 |
{ |
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
|
132 |
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
|
133 |
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
|
134 |
{ |
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
|
135 |
$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
|
136 |
} |
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
|
137 |
} |
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
|
138 |
} |
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
|
139 |
return ( $sanitize ) ? sanitize_page_id($title) : $title; |
1 | 140 |
} |
141 |
function init() |
|
142 |
{ |
|
143 |
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
|
144 |
global $lang; |
1 | 145 |
|
146 |
$code = $plugins->setHook('paths_init_before'); |
|
147 |
foreach ( $code as $cmd ) |
|
148 |
{ |
|
149 |
eval($cmd); |
|
150 |
} |
|
151 |
||
286
b2f985e4cef3
Fixed a number of issues with SQL query readability and some undefined index-ish errors; consequently the SQL report feature was added
Dan
parents:
272
diff
changeset
|
152 |
$e = $db->sql_query('SELECT name,urlname,namespace,special,visible,comments_on,protected,delvotes,' . "\n" |
b2f985e4cef3
Fixed a number of issues with SQL query readability and some undefined index-ish errors; consequently the SQL report feature was added
Dan
parents:
272
diff
changeset
|
153 |
. ' delvote_ips,wiki_mode,password FROM '.table_prefix.'pages ORDER BY name;'); |
1 | 154 |
if( !$e ) |
155 |
{ |
|
156 |
$db->_die('The error seems to have occured while selecting the page information. File: includes/paths.php; line: '.__LINE__); |
|
157 |
} |
|
158 |
while($r = $db->fetchrow()) |
|
159 |
{ |
|
160 |
||
161 |
$r['urlname_nons'] = $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
|
162 |
if ( isset($this->nslist[$r['namespace']]) ) |
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
|
163 |
{ |
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
|
164 |
$r['urlname'] = $this->nslist[$r['namespace']] . $r['urlname']; // Applies the User:/File:/etc prefixes to the URL names |
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
|
165 |
} |
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
|
166 |
else |
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
|
167 |
{ |
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
|
168 |
$ns_char = substr($this->nslist['Special'], -1); |
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
|
169 |
$r['urlname'] = $r['namespace'] . $ns_char . $r['urlname']; |
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
|
170 |
} |
1 | 171 |
|
172 |
if ( $r['delvotes'] == null) |
|
173 |
{ |
|
174 |
$r['delvotes'] = 0; |
|
175 |
} |
|
176 |
if ( $r['protected'] == 0 || $r['protected'] == 1 ) |
|
177 |
{ |
|
178 |
$r['really_protected'] = (int)$r['protected']; |
|
179 |
} |
|
180 |
else if ( $r['protected'] == 2 && getConfig('wiki_mode') == '1') |
|
181 |
{ |
|
182 |
$r['really_protected'] = 1; |
|
183 |
} |
|
184 |
else if ( $r['protected'] == 2 && getConfig('wiki_mode') == '0' ) |
|
185 |
{ |
|
186 |
$r['really_protected'] = 0; |
|
187 |
} |
|
188 |
||
189 |
$this->pages[$r['urlname']] = $r; |
|
190 |
$this->pages[] =& $this->pages[$r['urlname']]; |
|
191 |
||
192 |
} |
|
193 |
$db->free_result(); |
|
351 | 194 |
if ( defined('ENANO_INTERFACE_INDEX') || defined('ENANO_INTERFACE_AJAX') || defined('IN_ENANO_UPGRADE') ) |
1 | 195 |
{ |
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
|
196 |
$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
|
197 |
if ( empty($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
|
198 |
{ |
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 |
$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
|
200 |
} |
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
|
201 |
if ( strstr($title, ' ') || strstr($title, '+') || strstr($title, '%20') ) |
1 | 202 |
{ |
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
|
203 |
$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
|
204 |
redirect(makeUrl($title), '', '', 0); |
1 | 205 |
} |
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
|
206 |
$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
|
207 |
// 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
|
208 |
$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
|
209 |
$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
|
210 |
foreach ( $this->nslist as $ns => $prefix ) |
1 | 211 |
{ |
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
|
212 |
$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
|
213 |
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
|
214 |
{ |
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
|
215 |
$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
|
216 |
$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
|
217 |
} |
1 | 218 |
} |
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
|
219 |
$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
|
220 |
$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
|
221 |
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
|
222 |
{ |
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 |
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
|
224 |
} |
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 = $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
|
226 |
$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
|
227 |
// 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 | 228 |
} |
229 |
else |
|
230 |
{ |
|
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
|
231 |
// 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
|
232 |
// 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
|
233 |
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
|
234 |
{ |
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 |
$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
|
236 |
} |
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
|
237 |
else |
1 | 238 |
{ |
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
|
239 |
$title = basename($_SERVER['SCRIPT_NAME']); |
1 | 240 |
} |
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
|
241 |
$base_uri = str_replace( scriptPath . '/', '', $_SERVER['SCRIPT_NAME'] ); |
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
|
242 |
$this->page = $this->nslist['Anonymous'] . sanitize_page_id($base_uri); |
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
|
243 |
$this->fullpage = $this->nslist['Anonymous'] . sanitize_page_id($base_uri); |
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
|
244 |
$this->namespace = 'Anonymous'; |
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
|
245 |
$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
|
246 |
'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
|
247 |
'urlname' => sanitize_page_id($base_uri), |
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 |
'namespace' => 'Anonymous', |
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
|
249 |
'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
|
250 |
'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
|
251 |
'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
|
252 |
'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
|
253 |
'delvotes' => 0, |
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
|
254 |
'delvote_ips' => '' |
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 |
); |
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
|
256 |
$this->anonymous_page = true; |
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
|
257 |
$code = $plugins->setHook('paths_anonymous_page'); |
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( |
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
|
326 |
'name'=>$page_name, |
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
|
327 |
'urlname'=>$this->page, |
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
|
328 |
'namespace'=>'Article', |
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
|
329 |
'special'=>0, |
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
|
330 |
'visible'=>0, |
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
|
331 |
'comments_on'=>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
|
332 |
'protected'=>0, |
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
|
333 |
'delvotes'=>0, |
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
|
334 |
'delvote_ips'=>'', |
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
|
335 |
'wiki_mode'=>2, |
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
|
336 |
); |
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 |
} |
1 | 338 |
// Look for a namespace prefix in the urlname, and assign a different namespace, if necessary |
339 |
$k = array_keys($this->nslist); |
|
340 |
for($i=0;$i<sizeof($this->nslist);$i++) |
|
341 |
{ |
|
342 |
$ln = strlen($this->nslist[$k[$i]]); |
|
343 |
if( substr($this->page, 0, $ln) == $this->nslist[$k[$i]] ) |
|
344 |
{ |
|
345 |
$this->cpage['namespace'] = $k[$i]; |
|
346 |
$this->cpage['urlname_nons'] = substr($this->page, strlen($this->nslist[$this->cpage['namespace']]), strlen($this->page)); |
|
347 |
if(!isset($this->cpage['wiki_mode'])) |
|
348 |
{ |
|
349 |
$this->cpage['wiki_mode'] = 2; |
|
350 |
} |
|
351 |
} |
|
352 |
} |
|
353 |
$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
|
354 |
$this->page_id =& $this->cpage['urlname_nons']; |
1 | 355 |
|
356 |
if($this->namespace=='System') |
|
357 |
{ |
|
358 |
$this->cpage['protected'] = 1; |
|
359 |
} |
|
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
|
360 |
if($this->namespace == 'Special' && !$this->anonymous_page) |
1 | 361 |
{ |
362 |
// Can't load nonexistent pages |
|
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
|
363 |
if( is_string(getConfig('main_page')) ) |
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
|
364 |
{ |
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 |
$main_page = makeUrl(getConfig('main_page')); |
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
|
366 |
} |
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 |
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
|
368 |
{ |
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 |
$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
|
370 |
} |
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
|
371 |
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
|
372 |
exit; |
1 | 373 |
} |
374 |
// Allow the user to create/modify his user page uncondtionally (admins can still protect the page) |
|
375 |
if($this->page == $this->nslist['User'].str_replace(' ', '_', $session->username)) |
|
376 |
{ |
|
377 |
$this->wiki_mode = true; |
|
378 |
} |
|
379 |
} |
|
380 |
// This is used in the admin panel to keep track of form submission targets |
|
381 |
$this->cpage['module'] = $this->cpage['urlname']; |
|
382 |
||
383 |
// Page is set up, call any hooks |
|
384 |
$code = $plugins->setHook('page_set'); |
|
385 |
foreach ( $code as $cmd ) |
|
386 |
{ |
|
387 |
eval($cmd); |
|
388 |
} |
|
389 |
||
390 |
$session->init_permissions(); |
|
372
5bd429428101
A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
parents:
362
diff
changeset
|
391 |
profiler_log('Paths and CMS core initted'); |
1 | 392 |
} |
393 |
||
394 |
function add_page($flags) |
|
395 |
{ |
|
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
|
396 |
global $lang; |
1 | 397 |
$flags['urlname_nons'] = $flags['urlname']; |
398 |
$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
|
399 |
|
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
|
400 |
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
|
401 |
{ |
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 |
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
|
403 |
$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
|
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 |
|
1 | 406 |
$pages_len = sizeof($this->pages)/2; |
407 |
$this->pages[$pages_len] = $flags; |
|
408 |
$this->pages[$flags['urlname']] =& $this->pages[$pages_len]; |
|
409 |
} |
|
410 |
||
411 |
function main_page() |
|
412 |
{ |
|
413 |
if( is_string(getConfig('main_page')) ) |
|
414 |
{ |
|
93
95c4d91bd954
Redirections to the main page use the redirect() function now
Dan
parents:
80
diff
changeset
|
415 |
$main_page = makeUrl(getConfig('main_page')); |
1 | 416 |
} |
417 |
else |
|
418 |
{ |
|
93
95c4d91bd954
Redirections to the main page use the redirect() function now
Dan
parents:
80
diff
changeset
|
419 |
$main_page = makeUrl($this->pages[0]['urlname']); |
1 | 420 |
} |
93
95c4d91bd954
Redirections to the main page use the redirect() function now
Dan
parents:
80
diff
changeset
|
421 |
redirect($main_page, 'Redirecting...', 'Invalid request, redirecting to main page', 0); |
1 | 422 |
exit; |
423 |
} |
|
424 |
||
425 |
function sysmsg($n) |
|
426 |
{ |
|
427 |
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
|
428 |
$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 | 429 |
if( !$q ) |
430 |
{ |
|
431 |
$db->_die('Error during generic selection of system page data.'); |
|
432 |
} |
|
433 |
if($db->numrows() < 1) |
|
434 |
{ |
|
435 |
return false; |
|
436 |
//$db->_die('Error during generic selection of system page data: there were no rows in the text table that matched the page text query.'); |
|
437 |
} |
|
438 |
$r = $db->fetchrow(); |
|
439 |
$db->free_result(); |
|
440 |
$message = $r['page_text']; |
|
441 |
||
442 |
$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
|
443 |
$message = preg_replace('/<nodisplay>(.*?)<\/nodisplay>/is', '\\1', $message); |
1 | 444 |
|
445 |
return $message; |
|
446 |
} |
|
447 |
function get_pageid_from_url() |
|
448 |
{ |
|
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
|
449 |
$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
|
450 |
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
|
451 |
substr($url, 0, strlen($this->nslist['Admin'])) == $this->nslist['Admin']) |
1 | 452 |
{ |
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
|
453 |
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
|
454 |
$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
|
455 |
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
|
456 |
$url = $this->nslist[$ns] . $upart; |
1 | 457 |
} |
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
|
458 |
return $url; |
1 | 459 |
} |
460 |
// Parses a (very carefully formed) array into Javascript code compatible with the Tigra Tree Menu used in the admin menu |
|
461 |
function parseAdminTree() |
|
462 |
{ |
|
211 | 463 |
global $lang; |
464 |
||
1 | 465 |
$k = array_keys($this->admin_tree); |
466 |
$i = 0; |
|
467 |
$ret = ''; |
|
505 | 468 |
$icon = "<img alt=\"\" src=\"" . scriptPath . "/images/icons/applets/home.png\" style=\"border-width: 0; margin-right: 3px;\" /> "; |
469 |
$icon = addslashes($icon); |
|
470 |
$ret .= "var TREE_ITEMS = [\n ['$icon" . $lang->get('adm_btn_home') . "', 'javascript:ajaxPage(\'".$this->nslist['Admin']."Home\');',\n "; |
|
1 | 471 |
foreach($k as $key) |
472 |
{ |
|
473 |
$i++; |
|
211 | 474 |
$name = ( preg_match('/^[a-z0-9_]+$/', $key) ) ? $lang->get($key) : $key; |
475 |
$ret .= "['".$name."', 'javascript:trees[0].toggle($i)', \n"; |
|
1 | 476 |
foreach($this->admin_tree[$key] as $c) |
477 |
{ |
|
478 |
$i++; |
|
211 | 479 |
$name = ( preg_match('/^[a-z0-9_]+$/', $key) ) ? $lang->get($c['name']) : $c['name']; |
505 | 480 |
if ( $c['icon'] && $c['icon'] != scriptPath . '/images/spacer.gif' ) |
481 |
{ |
|
482 |
$icon = "<img alt=\"\" src=\"{$c['icon']}\" style=\"border-width: 0; margin-right: 3px;\" /> "; |
|
483 |
} |
|
484 |
else |
|
485 |
{ |
|
486 |
$icon = ''; |
|
487 |
} |
|
488 |
$icon = addslashes($icon); |
|
489 |
$ret .= " ['$icon$name', 'javascript:ajaxPage(\\'".$this->nslist['Admin'].$c['pageid']."\\');'],\n"; |
|
1 | 490 |
} |
491 |
$ret .= " ],\n"; |
|
492 |
} |
|
505 | 493 |
$icon = "<img alt=\"\" src=\"" . scriptPath . "/images/icons/applets/adminlogout.png\" style=\"border-width: 0; margin-right: 3px;\" /> "; |
494 |
$icon = addslashes($icon); |
|
495 |
$ret .= " ['$icon" . $lang->get('adm_btn_logout') . "', 'javascript:ajaxPage(\\'".$this->nslist['Admin']."AdminLogout\\');'],\n"; |
|
211 | 496 |
$ret .= " ['<span id=\\'keepalivestat\\'>" . $lang->get('adm_btn_keepalive_loading') . "</span>', 'javascript:ajaxToggleKeepalive();', |
497 |
['" . $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
|
498 |
],\n"; |
1 | 499 |
// 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* |
500 |
// $ret .= " ['(debug) Clear menu bitfield', 'javascript:createCookie(\\'admin_menu_state\\', \\'1\\', 365);'],\n"; |
|
501 |
$ret .= "]\n];"; |
|
502 |
return $ret; |
|
503 |
} |
|
505 | 504 |
|
505 |
/** |
|
506 |
* Creates a new entry in the administration panel's navigation tree. |
|
507 |
* @param string Section name - if this is a language string identifier, it will be sent through $lang->get() |
|
508 |
* @param string The title of the page, also may be a language string identifier |
|
509 |
* @param string The page ID of the admin page, the namespace Admin is assumed |
|
510 |
* @param string Optional. The path to a 16x16 image that will be displayed as the icon for this admin page |
|
511 |
*/ |
|
512 |
||
513 |
function addAdminNode($section, $page_title, $url, $icon = false) |
|
1 | 514 |
{ |
505 | 515 |
if ( !$icon ) |
516 |
{ |
|
517 |
$icon = scriptPath . '/images/spacer.gif'; |
|
518 |
} |
|
1 | 519 |
if(!isset($this->admin_tree[$section])) |
520 |
{ |
|
521 |
$this->admin_tree[$section] = Array(); |
|
522 |
} |
|
523 |
$this->admin_tree[$section][] = Array( |
|
505 | 524 |
'name' => $page_title, |
525 |
'pageid' => $url, |
|
526 |
'icon' => $icon |
|
1 | 527 |
); |
528 |
} |
|
529 |
function getParam($id = 0) |
|
530 |
{ |
|
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
|
531 |
$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
|
532 |
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
|
533 |
$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
|
534 |
$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
|
535 |
$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
|
536 |
$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
|
537 |
$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
|
538 |
return ( isset($title[$id]) ) ? $title[$id] : false; |
1 | 539 |
} |
540 |
||
541 |
function getAllParams() |
|
542 |
{ |
|
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
|
543 |
$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
|
544 |
$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
|
545 |
$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
|
546 |
$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
|
547 |
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
|
548 |
return implode('/', $title); |
1 | 549 |
} |
550 |
||
551 |
/** |
|
552 |
* Creates a new namespace in memory |
|
553 |
* @param string $id the namespace ID |
|
554 |
* @param string $prefix the URL prefix, must not be blank or already used |
|
555 |
* @return bool true on success false on failure |
|
556 |
*/ |
|
557 |
||
558 |
function create_namespace($id, $prefix) |
|
559 |
{ |
|
560 |
if(in_array($prefix, $this->nslist)) |
|
561 |
{ |
|
562 |
// echo '<b>Warning:</b> pathManager::create_namespace: Prefix "'.$prefix.'" is already taken<br />'; |
|
563 |
return false; |
|
564 |
} |
|
565 |
if( isset($this->nslist[$id]) ) |
|
566 |
{ |
|
567 |
// echo '<b>Warning:</b> pathManager::create_namespace: Namespace ID "'.$prefix.'" is already taken<br />'; |
|
568 |
return false; |
|
569 |
} |
|
570 |
$this->nslist[$id] = $prefix; |
|
571 |
} |
|
572 |
||
573 |
/** |
|
574 |
* Fetches the page texts for searching |
|
575 |
*/ |
|
576 |
||
577 |
function fetch_page_search_texts() |
|
578 |
{ |
|
579 |
global $db, $session, $paths, $template, $plugins; // Common objects |
|
580 |
$texts = Array(); |
|
581 |
$q = $db->sql_query('SELECT t.page_id,t.namespace,t.page_text,t.char_tag FROM '.table_prefix.'page_text AS t |
|
582 |
LEFT JOIN '.table_prefix.'pages AS p |
|
583 |
ON t.page_id=p.urlname |
|
584 |
WHERE p.namespace=t.namespace |
|
585 |
AND ( p.password=\'\' OR p.password=\'da39a3ee5e6b4b0d3255bfef95601890afd80709\' ) |
|
586 |
AND p.visible=1;'); // Only indexes "visible" pages |
|
587 |
||
588 |
if( !$q ) |
|
589 |
{ |
|
590 |
return false; |
|
591 |
} |
|
592 |
while($row = $db->fetchrow()) |
|
593 |
{ |
|
594 |
$pid = $this->nslist[$row['namespace']] . $row['page_id']; |
|
595 |
$texts[$pid] = $row['page_text']; |
|
596 |
} |
|
597 |
$db->free_result(); |
|
598 |
||
599 |
return $texts; |
|
600 |
} |
|
601 |
||
602 |
/** |
|
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
|
603 |
* Generates an SQL query to grab all of the text |
1 | 604 |
*/ |
605 |
||
606 |
function fetch_page_search_resource() |
|
607 |
{ |
|
608 |
global $db, $session, $paths, $template, $plugins; // Common objects |
|
609 |
// 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
|
610 |
|
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
|
611 |
$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
|
612 |
'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
|
613 |
"'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
|
614 |
|
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
|
615 |
$texts = 'SELECT t.page_text, ' . $concat_column . ' AS page_idstring, t.page_id, t.namespace FROM '.table_prefix.'page_text AS t |
1 | 616 |
LEFT JOIN '.table_prefix.'pages AS p |
617 |
ON ( t.page_id=p.urlname AND t.namespace=p.namespace ) |
|
618 |
WHERE p.namespace=t.namespace |
|
619 |
AND ( p.password=\'\' OR p.password=\'da39a3ee5e6b4b0d3255bfef95601890afd80709\' ) |
|
620 |
AND p.visible=1;'; // Only indexes "visible" pages |
|
621 |
return $texts; |
|
622 |
} |
|
623 |
||
624 |
/** |
|
461 | 625 |
* Builds a word list for search indexing. |
626 |
* @param string Text to index |
|
627 |
* @param string Page ID of the page being indexed |
|
628 |
* @param string Title of the page being indexed |
|
629 |
* @return array List of words |
|
1 | 630 |
*/ |
461 | 631 |
|
632 |
function calculate_word_list($text, $page_id, $page_name) |
|
633 |
{ |
|
634 |
$page_id = dirtify_page_id($page_id); |
|
635 |
$text = preg_replace('/[^a-z0-9\']/i', ' ', $text); |
|
636 |
$page_id = preg_replace('/[^a-z0-9\']/i', ' ', $page_id); |
|
637 |
$page_name = preg_replace('/[^a-z0-9\']/i', ' ', $page_name); |
|
638 |
$text .= " $page_id $page_name"; |
|
639 |
$text = explode(' ', $text); |
|
640 |
foreach ( $text as $i => &$word ) |
|
641 |
{ |
|
642 |
if ( strstr($word, "''") ) |
|
643 |
$word = preg_replace("/[']{2,}/", '', $word); |
|
644 |
if ( strlen($word) < 2 ) |
|
645 |
unset($text[$i]); |
|
646 |
} |
|
647 |
$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
|
648 |
// 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
|
649 |
// echo ' ' . implode(' ', $text) . '<br />'; |
461 | 650 |
return $text; |
651 |
} |
|
652 |
||
653 |
/** |
|
654 |
* Rebuilds the site's entire search index. Considerably more exciting if run from the command line. |
|
655 |
* @param bool If true, verbose output. |
|
656 |
* @param bool If true, verbose + debugging output. |
|
657 |
*/ |
|
658 |
||
659 |
function rebuild_search_index($verbose = false, $debug = false) |
|
1 | 660 |
{ |
661 |
global $db, $session, $paths, $template, $plugins; // Common objects |
|
461 | 662 |
|
663 |
@set_time_limit(0); |
|
664 |
||
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
|
665 |
$q = $db->sql_query('DELETE FROM ' . table_prefix . 'search_index;'); |
461 | 666 |
if ( !$q ) |
667 |
$db->_die(); |
|
668 |
||
669 |
$sha1_blank = sha1(''); |
|
670 |
$query_func = ( ENANO_DBLAYER == 'MYSQL' ) ? 'mysql_query' : 'pg_query'; |
|
671 |
||
672 |
// |
|
673 |
// Index $pages_in_batch pages at a time |
|
674 |
// |
|
675 |
$pages_in_batch = 15; |
|
676 |
||
677 |
// First find out how many pages there are |
|
678 |
$q = $db->sql_query('SELECT COUNT(p.urlname) AS num_pages FROM ' . table_prefix . "page_text AS t\n" |
|
679 |
. " LEFT JOIN " . table_prefix . "pages AS p\n" |
|
680 |
. " ON ( p.urlname = t.page_id AND p.namespace = t.namespace )\n" |
|
681 |
. " WHERE ( p.password = '' OR p.password = '$sha1_blank' )\n" |
|
682 |
. " AND ( p.visible = 1 );"); |
|
683 |
if ( !$q ) |
|
684 |
$db->_die(); |
|
685 |
||
686 |
list($num_pages) = $db->fetchrow_num(); |
|
687 |
$num_pages = intval($num_pages); |
|
688 |
$loops = ceil($num_pages / $pages_in_batch); |
|
689 |
$master_word_list = array(); |
|
690 |
$stopwords = get_stopwords(); |
|
691 |
||
692 |
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
|
693 |
{ |
461 | 694 |
$offset = $j * $pages_in_batch; |
695 |
||
696 |
$j++; |
|
697 |
||
698 |
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
|
699 |
{ |
461 | 700 |
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
|
701 |
} |
461 | 702 |
|
703 |
$texts = $db->sql_query('SELECT p.name, t.page_id, t.namespace, t.page_text FROM ' . table_prefix . "page_text AS t\n" |
|
704 |
. " LEFT JOIN " . table_prefix . "pages AS p\n" |
|
705 |
. " ON ( p.urlname = t.page_id AND p.namespace = t.namespace )\n" |
|
706 |
. " WHERE ( p.password = '' OR p.password = '$sha1_blank' )\n" |
|
707 |
. " 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
|
708 |
. " LIMIT $pages_in_batch OFFSET $offset;", false); |
461 | 709 |
if ( !$texts ) |
710 |
$db->_die(); |
|
711 |
||
712 |
$k = $offset; |
|
713 |
||
714 |
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
|
715 |
{ |
461 | 716 |
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
|
717 |
{ |
461 | 718 |
$k++; |
719 |
if ( $verbose ) |
|
720 |
{ |
|
721 |
$mu = memory_get_usage(); |
|
722 |
echo " Indexing page $k of $num_pages: {$row['namespace']}:{$row['page_id']}"; |
|
723 |
if ( $debug ) |
|
724 |
echo ", mem = $mu..."; |
|
725 |
flush(); |
|
726 |
} |
|
727 |
||
728 |
// Indexing identifier for the page in the DB |
|
729 |
$page_uniqid = "ns={$row['namespace']};pid=" . sanitize_page_id($row['page_id']); |
|
730 |
$page_uniqid = $db->escape($page_uniqid); |
|
731 |
||
732 |
// List of words on the page |
|
733 |
$wordlist = $this->calculate_word_list($row['page_text'], $row['page_id'], $row['name']); |
|
734 |
||
735 |
// Index calculation complete -- run inserts |
|
736 |
$inserts = array(); |
|
737 |
foreach ( $wordlist as $word ) |
|
738 |
{ |
|
739 |
if ( in_array($word, $stopwords) || strval(intval($word)) === $word || strlen($word) < 3 ) |
|
740 |
continue; |
|
741 |
$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
|
742 |
$word_db_lc = $db->escape(strtolower($word)); |
461 | 743 |
if ( !in_array($word, $master_word_list) ) |
744 |
{ |
|
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
|
745 |
$inserts[] = "( '$word_db', '$word_db_lc', '$page_uniqid' )"; |
461 | 746 |
} |
747 |
else |
|
748 |
{ |
|
749 |
if ( $verbose && $debug ) |
|
750 |
echo '.'; |
|
751 |
$pid_col = ( ENANO_DBLAYER == 'MYSQL' ) ? |
|
752 |
"CONCAT( page_names, ',$page_uniqid' )": |
|
753 |
"page_names || ',$page_uniqid'"; |
|
754 |
$q = $db->sql_query('UPDATE ' . table_prefix . "search_index SET page_names = $pid_col WHERE word = '$word_db';", false); |
|
755 |
if ( !$q ) |
|
756 |
$db->_die(); |
|
757 |
} |
|
758 |
} |
|
759 |
if ( count($inserts) > 0 ) |
|
760 |
{ |
|
761 |
if ( $verbose && $debug ) |
|
762 |
echo 'i'; |
|
763 |
$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
|
764 |
$q = $db->sql_query('INSERT INTO ' . table_prefix . "search_index(word, word_lcase, page_names) VALUES\n $inserts;", false); |
461 | 765 |
if ( !$q ) |
766 |
$db->_die(); |
|
767 |
} |
|
768 |
||
769 |
$master_word_list = array_unique(array_merge($master_word_list, $wordlist)); |
|
770 |
if ( $verbose ) |
|
771 |
{ |
|
772 |
if ( isset($_SERVER['REQUEST_URI']) ) |
|
773 |
echo '<br />'; |
|
774 |
echo "\n"; |
|
775 |
} |
|
776 |
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
|
777 |
} |
461 | 778 |
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
|
779 |
} |
461 | 780 |
$db->free_result($texts); |
1 | 781 |
} |
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
|
782 |
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
|
783 |
{ |
461 | 784 |
echo "Indexing complete."; |
785 |
if ( isset($_SERVER['REQUEST_URI']) ) |
|
786 |
echo '<br />'; |
|
787 |
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
|
788 |
} |
461 | 789 |
return true; |
1 | 790 |
} |
791 |
||
792 |
/** |
|
793 |
* Partially rebuilds the search index, removing/inserting entries only for the current page |
|
794 |
* @param string $page_id |
|
795 |
* @param string $namespace |
|
796 |
*/ |
|
797 |
||
798 |
function rebuild_page_index($page_id, $namespace) |
|
799 |
{ |
|
800 |
global $db, $session, $paths, $template, $plugins; // Common objects |
|
801 |
if(!$db->sql_query('SELECT page_text FROM '.table_prefix.'page_text |
|
802 |
WHERE page_id=\''.$db->escape($page_id).'\' AND namespace=\''.$db->escape($namespace).'\';')) |
|
803 |
{ |
|
804 |
return $db->get_error(); |
|
805 |
} |
|
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
|
806 |
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
|
807 |
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
|
808 |
$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
|
809 |
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
|
810 |
{ |
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
|
811 |
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
|
812 |
} |
1 | 813 |
$row = $db->fetchrow(); |
814 |
$db->free_result(); |
|
815 |
$search = new Searcher(); |
|
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
|
816 |
$search->buildIndex(Array("ns={$namespace};pid={$page_id}"=>$row['page_text'] . ' ' . $this->pages[$idstring]['name'])); |
1 | 817 |
$new_index = $search->index; |
818 |
||
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
|
819 |
if ( ENANO_DBLAYER == 'MYSQL' ) |
1 | 820 |
{ |
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
|
821 |
$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
|
822 |
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
|
823 |
{ |
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
|
824 |
$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
|
825 |
$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
|
826 |
} |
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
|
827 |
$keys = "word=0x" . implode ( " OR word=0x", $keys ) . ""; |
1 | 828 |
} |
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
|
829 |
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
|
830 |
{ |
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
|
831 |
$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
|
832 |
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
|
833 |
{ |
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
|
834 |
$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
|
835 |
$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
|
836 |
} |
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
|
837 |
$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
|
838 |
} |
1 | 839 |
|
840 |
$query = $db->sql_query('SELECT word,page_names FROM '.table_prefix.'search_index WHERE '.$keys.';'); |
|
841 |
||
842 |
while($row = $db->fetchrow()) |
|
843 |
{ |
|
844 |
$row['word'] = rtrim($row['word'], "\0"); |
|
845 |
$new_index[ $row['word'] ] = $row['page_names'] . ',' . $search->index[ $row['word'] ]; |
|
846 |
} |
|
847 |
$db->free_result(); |
|
848 |
||
849 |
$db->sql_query('DELETE FROM '.table_prefix.'search_index WHERE '.$keys.';'); |
|
850 |
||
851 |
$secs = Array(); |
|
852 |
$q = 'INSERT INTO '.table_prefix.'search_index(word,page_names) VALUES'; |
|
853 |
foreach($new_index as $word => $pages) |
|
854 |
{ |
|
855 |
$secs[] = '(\''.$db->escape($word).'\', \''.$db->escape($pages).'\')'; |
|
856 |
} |
|
857 |
$q .= implode(',', $secs); |
|
858 |
unset($secs); |
|
859 |
$q .= ';'; |
|
860 |
if(!$db->check_query($q)) |
|
861 |
{ |
|
862 |
die('BUG: PathManager::rebuild_page_index: Query rejected by SQL parser:<pre>'.$q.'</pre>'); |
|
863 |
} |
|
864 |
$result = $db->sql_query($q); |
|
865 |
if($result) |
|
866 |
return true; |
|
867 |
else |
|
868 |
$db->_die('The search index was trying to rebuild itself when the error occured.'); |
|
869 |
||
870 |
} |
|
871 |
||
872 |
/** |
|
873 |
* Creates an instance of the Searcher class, including index info |
|
874 |
* @return object |
|
875 |
*/ |
|
876 |
||
877 |
function makeSearcher($match_case = false) |
|
878 |
{ |
|
879 |
global $db, $session, $paths, $template, $plugins; // Common objects |
|
880 |
$search = new Searcher(); |
|
881 |
$q = $db->sql_query('SELECT word,page_names FROM '.table_prefix.'search_index;'); |
|
882 |
if(!$q) |
|
883 |
{ |
|
884 |
echo $db->get_error(); |
|
885 |
return false; |
|
886 |
} |
|
887 |
$idx = Array(); |
|
888 |
while($row = $db->fetchrow($q)) |
|
889 |
{ |
|
890 |
$row['word'] = rtrim($row['word'], "\0"); |
|
891 |
$idx[$row['word']] = $row['page_names']; |
|
892 |
} |
|
893 |
$db->free_result(); |
|
894 |
$search->index = $idx; |
|
895 |
if($match_case) |
|
896 |
$search->match_case = true; |
|
897 |
return $search; |
|
898 |
} |
|
899 |
||
900 |
/** |
|
901 |
* Creates an associative array filled with the values of all the page titles |
|
902 |
* @return array |
|
903 |
*/ |
|
904 |
||
905 |
function get_page_titles() |
|
906 |
{ |
|
907 |
$texts = Array(); |
|
908 |
for ( $i = 0; $i < sizeof($this->pages) / 2; $i++ ) |
|
909 |
{ |
|
910 |
$texts[$this->pages[$i]['urlname']] = $this->pages[$i]['name']; |
|
911 |
} |
|
912 |
return $texts; |
|
913 |
} |
|
914 |
||
915 |
/** |
|
916 |
* Creates an instance of the Searcher class, including index info for page titles |
|
917 |
* @return object |
|
918 |
*/ |
|
919 |
||
920 |
function makeTitleSearcher($match_case = false) |
|
921 |
{ |
|
922 |
global $db, $session, $paths, $template, $plugins; // Common objects |
|
923 |
$search = new Searcher(); |
|
924 |
$texts = $this->get_page_titles(); |
|
925 |
$search->buildIndex($texts); |
|
926 |
if($match_case) |
|
927 |
$search->match_case = true; |
|
928 |
return $search; |
|
929 |
} |
|
930 |
||
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
|
931 |
/** |
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
|
932 |
* 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
|
933 |
* @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
|
934 |
* @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
|
935 |
* @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
|
936 |
*/ |
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
|
937 |
|
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
|
938 |
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
|
939 |
{ |
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
|
940 |
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
|
941 |
|
156
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
942 |
static $cache = array(); |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
943 |
|
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
944 |
if ( count($cache) == 0 ) |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
945 |
{ |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
946 |
foreach ( $this->nslist as $key => $_ ) |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
947 |
{ |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
948 |
$cache[$key] = array(); |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
949 |
} |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
950 |
} |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
951 |
|
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
|
952 |
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
|
953 |
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
|
954 |
|
156
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
955 |
$page_id_unescaped = $paths->nslist[$namespace] . |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
956 |
dirtify_page_id($page_id); |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
957 |
$page_id_str = $paths->nslist[$namespace] . |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
958 |
sanitize_page_id($page_id); |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
959 |
|
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
960 |
$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
|
961 |
|
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
962 |
if ( isset($cache[$namespace][$page_id]) ) |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
963 |
{ |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
964 |
return $cache[$namespace][$page_id]; |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
965 |
} |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
966 |
|
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
|
967 |
$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
|
968 |
|
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
|
969 |
// What linked categories have this page? |
156
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
970 |
$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
|
971 |
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
|
972 |
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
|
973 |
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
|
974 |
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
|
975 |
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
|
976 |
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
|
977 |
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
|
978 |
( 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
|
979 |
( 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
|
980 |
( 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
|
981 |
( 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
|
982 |
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
|
983 |
$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
|
984 |
|
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
|
985 |
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
|
986 |
{ |
156
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
987 |
if ( $row['pg_type'] == PAGE_GRP_REGEX ) |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
988 |
{ |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
989 |
//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
|
990 |
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
|
991 |
{ |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
992 |
//echo "..matched"; |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
993 |
$group_list[] = $row['pg_id']; |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
994 |
} |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
995 |
//echo "<br />"; |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
996 |
} |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
997 |
else |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
998 |
{ |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
999 |
$group_list[] = $row['pg_id']; |
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1000 |
} |
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
|
1001 |
} |
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
|
1002 |
|
74
68469a95658d
Various bugfixes and cleanups, too much to remember... see the diffs for what got changed :-)
Dan
parents:
73
diff
changeset
|
1003 |
$db->free_result(); |
68469a95658d
Various bugfixes and cleanups, too much to remember... see the diffs for what got changed :-)
Dan
parents:
73
diff
changeset
|
1004 |
|
156
edbff85d43e8
Feature add: new page group type: regular expression match (PCRE)
Dan
parents:
151
diff
changeset
|
1005 |
$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
|
1006 |
|
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
|
1007 |
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
|
1008 |
|
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
|
1009 |
} |
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
|
1010 |
|
1 | 1011 |
} |
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
|
1012 |
|
1 | 1013 |
?> |