Making sure Public NS doesn't conflict with Private one

This commit is contained in:
Simon DELAGE 2015-11-22 10:47:44 +01:00
parent cb5f4827d7
commit 76ec613777

View file

@ -25,6 +25,8 @@ class action_plugin_userhomepage extends DokuWiki_Action_Plugin{
function init(&$event, $param) {
global $conf;
if ($this->settingsCheck(true)) {
$this->helper = plugin_load('helper','userhomepage');
// If templates_path option starts with 'data/pages' it can automatically be adapted but should be changed
if (substr($this->getConf('templates_path'),0,10) == 'data/pages') {
@ -63,7 +65,6 @@ class action_plugin_userhomepage extends DokuWiki_Action_Plugin{
$this->private_page = $this->helper->getPrivateID();
// user:simon.txt
$this->public_page = $this->helper->getPublicID();
// If a user is logged in, store timestamp (if it wasn't stored yet)
if (($_SERVER['REMOTE_USER']!=null) && (!isset($_SESSION['uhptimestamp']))) {
$_SESSION['uhptimestamp'] = time();
@ -71,11 +72,16 @@ class action_plugin_userhomepage extends DokuWiki_Action_Plugin{
} elseif (($_SERVER['REMOTE_USER']==null) && (isset($_SESSION['uhptimestamp']))) {
$_SESSION['uhptimestamp'] = null;
}
} else {
return flase;
}
}
function redirect(&$event, $param) {
global $conf;
global $lang;
if ($this->settingsCheck()) {
$created = array();
// If a user is logged in and not allready requesting his private namespace start page
if (($_SERVER['REMOTE_USER']!=null)&&($_REQUEST['id']!=$this->private_page)) {
@ -144,24 +150,24 @@ class action_plugin_userhomepage extends DokuWiki_Action_Plugin{
}
// If Public page was just created, redirect to it and edit (or show)
if (($created['public']) && (page_exists($this->public_page))) {
// send_redirect(wl($this->public_page, 'do='.$this->getConf('action'), false, '&'));
send_redirect(wl($this->public_page, array('do='.$this->getConf('action')), true));
// Else if private start page was just created and edit option is set, redirect to it and edit
} elseif (($created['private']) && (page_exists($this->private_page)) && ($this->getConf('edit_before_create'))) {
// send_redirect(wl($this->private_page, 'do='.$this->getConf('action'), false, '&'));
send_redirect(wl($this->private_page, array('do='.$this->getConf('action')), true));
// Else if redirection is enabled and user's private page exists AND [(user isn't requesting a specific page OR he's requesting wiki start page) AND logged in 2sec ago max]
} elseif (($this->getConf('redirection')) && (page_exists($this->private_page)) && (((!isset($_GET['id'])) or (in_array($_GET['id'], $wikistart))) && (time()-$_SESSION["uhptimestamp"] <= 2))) {
// send_redirect(wl($this->private_page));
send_redirect(wl($this->private_page, '', true));
}
}
} else {
return flase;
}
}
function acl(&$event, $param) {
global $conf;
// if ((!$this->getConf('no_acl')) && ($conf['useacl'])) {
if ($this->settingsCheck()) {
if ((!$this->getConf('no_acl')) && ($conf['useacl']) && (isset($_SERVER['REMOTE_USER']))) {
$existingLines = file(DOKU_CONF.'acl.auth.php');
$newLines = array();
@ -289,6 +295,9 @@ class action_plugin_userhomepage extends DokuWiki_Action_Plugin{
}
}
}
} else {
return flase;
}
}
function copyFile($source = null, $target_dir = null, $target_file = null) {
@ -353,6 +362,7 @@ class action_plugin_userhomepage extends DokuWiki_Action_Plugin{
global $INFO;
global $conf;
if ($this->settingsCheck()) {
if (($conf['showuseras'] == "username_link") and ($this->getConf('userlink_replace'))) {
$classes = $this->getConf('userlink_classes');
$classes = str_replace(',', ' ', $classes);
@ -404,6 +414,30 @@ class action_plugin_userhomepage extends DokuWiki_Action_Plugin{
);
}
}
} else {
return flase;
}
}
function settingsCheck($msg=false) {
global $conf;
// Error #1: Public page switched to namespace and is in conflict with Private namespace
if (strpos($this->getConf('public_pages_ns'),':%NAME%:%START%') !== false) {
$PublicNS = str_replace(':%NAME%:%START%', '', $this->getConf('public_pages_ns'));
$PublicNS = str_replace(':', '', $PublicNS);
$PrivateNS = str_replace(':', '', $this->getConf('users_namespace'));
if ($PublicNS == $PublicNS) {
if ($msg) {
msg("UserHomePage error #1 ! Make sure Private and Public namespaces are different. Plugin will have no effect untill this is corrected.", -1);
}
return false;
} else {
return true;
}
} else {
return true;
}
}
}