diff --git a/action.php b/action.php
index 6af314f..02d2222 100644
--- a/action.php
+++ b/action.php
@@ -25,269 +25,278 @@ class action_plugin_userhomepage extends DokuWiki_Action_Plugin{
function init(&$event, $param) {
global $conf;
- $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') {
- $dest = str_replace("data/pages", "./pages", $this->getConf('templates_path'));
- msg("Userhomepage option [templates_path
] should be changed to a path relative to data folder (as set by Dokuwiki's [savedir
] setting). Current value is based on former default (i.e. data/pages/...
) and will still work but this message will keep appearing until the value is corrected, check this page for details.",2);
- } else {
- $dest = $this->getConf('templates_path');
- }
- $this->dataDir = $conf['savedir'];
- // CREATE PRIVATE NAMESPACE START PAGE TEMPLATES IF NEEDED (is required by options, doesn't exist yet and a known user is logged in)
- if (($this->getConf('create_private_ns')) && (!is_file($this->dataDir.'/'.$this->getConf('templates_path').'/userhomepage_private.txt')) && ($_SERVER['REMOTE_USER'] != null)) {
- // If a template exists in path as builded before 2015/05/14 version, use it as source to create userhomepage_private.txt in new templates_path
- if ((is_file(DOKU_CONF.'../'.$this->getConf('templates_path').'/userhomepage_private.txt')) && ($this->getConf('templatepath') != null)) {
- $source = DOKU_CONF.'../'.$this->getConf('templates_path').'/userhomepage_private.txt';
- // If a template from version 3.0.4 exists, use it as source to create userhomepage_private.txt in templates_path
- } elseif ((is_file(DOKU_INC.$this->getConf('templatepath'))) && ($this->getConf('templatepath') != null)) {
- $source = $this->getConf('templatepath');
- // Otherwise, we're on a fresh install
- } else {
- $source = 'lib/plugins/userhomepage/lang/'.$conf['lang'].'/userhomepage_private.default';
- }
- $this->copyFile($source, $dest, 'userhomepage_private.txt');
- }
- // CREATE PUBLIC PAGE TEMPLATES IF NEEDED (is required by options, doesn't exist yet and a known user is logged in)
- if (($this->getConf('create_public_page')) && (!is_file($this->dataDir.'/'.$this->getConf('templates_path').'/userhomepage_public.txt')) && ($_SERVER['REMOTE_USER'] != null)) {
- // If a template exists in path as builded before 2015/05/14 version, use it as source to create userhomepage_private.txt in new templates_path
- if ((is_file(DOKU_CONF.'../'.$this->getConf('templates_path').'/userhomepage_public.txt')) && ($this->getConf('templatepath') != null)) {
- $source = DOKU_CONF.'../'.$this->getConf('templates_path').'/userhomepage_public.txt';
- } else {
- $source = 'lib/plugins/userhomepage/lang/'.$conf['lang'].'/userhomepage_public.default';
- }
- $this->copyFile($source, $dest, 'userhomepage_public.txt');
- }
- // TARGETS
- // ...:start.txt or ...:simon_delage.txt
- $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();
- // If no user is logged in and a timestamp exists, set timestamp to null (ensures that redirection will work if user just logged out and comes back before closing browser)
- } elseif (($_SERVER['REMOTE_USER']==null) && (isset($_SESSION['uhptimestamp']))) {
- $_SESSION['uhptimestamp'] = null;
+ 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') {
+ $dest = str_replace("data/pages", "./pages", $this->getConf('templates_path'));
+ msg("Userhomepage option [templates_path
] should be changed to a path relative to data folder (as set by Dokuwiki's [savedir
] setting). Current value is based on former default (i.e. data/pages/...
) and will still work but this message will keep appearing until the value is corrected, check this page for details.",2);
+ } else {
+ $dest = $this->getConf('templates_path');
+ }
+ $this->dataDir = $conf['savedir'];
+ // CREATE PRIVATE NAMESPACE START PAGE TEMPLATES IF NEEDED (is required by options, doesn't exist yet and a known user is logged in)
+ if (($this->getConf('create_private_ns')) && (!is_file($this->dataDir.'/'.$this->getConf('templates_path').'/userhomepage_private.txt')) && ($_SERVER['REMOTE_USER'] != null)) {
+ // If a template exists in path as builded before 2015/05/14 version, use it as source to create userhomepage_private.txt in new templates_path
+ if ((is_file(DOKU_CONF.'../'.$this->getConf('templates_path').'/userhomepage_private.txt')) && ($this->getConf('templatepath') != null)) {
+ $source = DOKU_CONF.'../'.$this->getConf('templates_path').'/userhomepage_private.txt';
+ // If a template from version 3.0.4 exists, use it as source to create userhomepage_private.txt in templates_path
+ } elseif ((is_file(DOKU_INC.$this->getConf('templatepath'))) && ($this->getConf('templatepath') != null)) {
+ $source = $this->getConf('templatepath');
+ // Otherwise, we're on a fresh install
+ } else {
+ $source = 'lib/plugins/userhomepage/lang/'.$conf['lang'].'/userhomepage_private.default';
+ }
+ $this->copyFile($source, $dest, 'userhomepage_private.txt');
+ }
+ // CREATE PUBLIC PAGE TEMPLATES IF NEEDED (is required by options, doesn't exist yet and a known user is logged in)
+ if (($this->getConf('create_public_page')) && (!is_file($this->dataDir.'/'.$this->getConf('templates_path').'/userhomepage_public.txt')) && ($_SERVER['REMOTE_USER'] != null)) {
+ // If a template exists in path as builded before 2015/05/14 version, use it as source to create userhomepage_private.txt in new templates_path
+ if ((is_file(DOKU_CONF.'../'.$this->getConf('templates_path').'/userhomepage_public.txt')) && ($this->getConf('templatepath') != null)) {
+ $source = DOKU_CONF.'../'.$this->getConf('templates_path').'/userhomepage_public.txt';
+ } else {
+ $source = 'lib/plugins/userhomepage/lang/'.$conf['lang'].'/userhomepage_public.default';
+ }
+ $this->copyFile($source, $dest, 'userhomepage_public.txt');
+ }
+ // TARGETS
+ // ...:start.txt or ...:simon_delage.txt
+ $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();
+ // If no user is logged in and a timestamp exists, set timestamp to null (ensures that redirection will work if user just logged out and comes back before closing browser)
+ } elseif (($_SERVER['REMOTE_USER']==null) && (isset($_SESSION['uhptimestamp']))) {
+ $_SESSION['uhptimestamp'] = null;
+ }
+ } else {
+ return flase;
}
}
function redirect(&$event, $param) {
global $conf;
global $lang;
- $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)) {
- // if private page doesn't exists, create it (from template)
- if ($this->getConf('create_private_ns') && is_file($this->dataDir.'/'.$this->getConf('templates_path').'/userhomepage_private.txt') && !page_exists($this->private_page) && !checklock($this->private_page) && !checkwordblock()) {
- // Target private start page template
- $this->private_page_template = $this->dataDir.'/'.$this->getConf('templates_path').'/userhomepage_private.txt';
- // Create private page
- lock($this->private_page);
- saveWikiText($this->private_page,$this->applyTemplate('private'),'Automatically created');
- unlock($this->private_page);
- // Announce private namespace was created
- msg($this->getLang('createdprivatens').' ('.$this->private_page.')', 1);
- // Note that we created private page
- $created['private'] = page_exists($this->private_page);
- }
- // If private ns is managed by plugin, check for any template from skeleton that doesn't exist yet
- if ($this->getConf('create_private_ns') && (is_dir($this->dataDir.'/'.$this->getConf('templates_path').'/uhp_private_skeleton'))) {
- //$files = scandir($this->dataDir.'/'.$this->getConf('templates_path').'/uhp_private_skeleton/');
- $path = realpath($this->dataDir.'/'.$this->getConf('templates_path').'/uhp_private_skeleton/');
- $objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST);
- if ($this->getConf('group_by_name')) {
- // private:s:simon or private:s:simon_delage
- $this->private_ns = cleanID($this->getConf('users_namespace').':'.substr($this->privateNamespace(), 0, 1).':'. $this->privateNamespace());
- } else {
- // private:simon or private:simon_delage
- $this->private_ns = cleanID($this->getConf('users_namespace').':'. $this->privateNamespace());
+
+ 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)) {
+ // if private page doesn't exists, create it (from template)
+ if ($this->getConf('create_private_ns') && is_file($this->dataDir.'/'.$this->getConf('templates_path').'/userhomepage_private.txt') && !page_exists($this->private_page) && !checklock($this->private_page) && !checkwordblock()) {
+ // Target private start page template
+ $this->private_page_template = $this->dataDir.'/'.$this->getConf('templates_path').'/userhomepage_private.txt';
+ // Create private page
+ lock($this->private_page);
+ saveWikiText($this->private_page,$this->applyTemplate('private'),'Automatically created');
+ unlock($this->private_page);
+ // Announce private namespace was created
+ msg($this->getLang('createdprivatens').' ('.$this->private_page.')', 1);
+ // Note that we created private page
+ $created['private'] = page_exists($this->private_page);
}
- foreach($objects as $objectName => $object){
- $file = str_replace($path, '', $objectName);
- if ((is_file($this->dataDir.'/'.$this->getConf('templates_path').'/uhp_private_skeleton'.$file)) and (strpos($file, '.txt') !== false)) {
- $custom_page_id = cleanID(str_replace('.txt', '', str_replace('/', ':', str_replace('\\', ':', $file))));
- $this->custom_target = $this->private_ns.':'.$custom_page_id;
- if (!page_exists($this->custom_target)) {
- $this->custom_page_template = $this->dataDir.'/'.$this->getConf('templates_path').'/uhp_private_skeleton'.$file;
- lock($this->custom_target);
- saveWikiText($this->custom_target,$this->applyTemplate($this->custom_page_template),'Automatically created');
- msg("Added '".$this->custom_target."' page from user namespace skeleton to your private namespace.",0);
- unlock($this->custom_target);
+ // If private ns is managed by plugin, check for any template from skeleton that doesn't exist yet
+ if ($this->getConf('create_private_ns') && (is_dir($this->dataDir.'/'.$this->getConf('templates_path').'/uhp_private_skeleton'))) {
+ //$files = scandir($this->dataDir.'/'.$this->getConf('templates_path').'/uhp_private_skeleton/');
+ $path = realpath($this->dataDir.'/'.$this->getConf('templates_path').'/uhp_private_skeleton/');
+ $objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST);
+ if ($this->getConf('group_by_name')) {
+ // private:s:simon or private:s:simon_delage
+ $this->private_ns = cleanID($this->getConf('users_namespace').':'.substr($this->privateNamespace(), 0, 1).':'. $this->privateNamespace());
+ } else {
+ // private:simon or private:simon_delage
+ $this->private_ns = cleanID($this->getConf('users_namespace').':'. $this->privateNamespace());
+ }
+ foreach($objects as $objectName => $object){
+ $file = str_replace($path, '', $objectName);
+ if ((is_file($this->dataDir.'/'.$this->getConf('templates_path').'/uhp_private_skeleton'.$file)) and (strpos($file, '.txt') !== false)) {
+ $custom_page_id = cleanID(str_replace('.txt', '', str_replace('/', ':', str_replace('\\', ':', $file))));
+ $this->custom_target = $this->private_ns.':'.$custom_page_id;
+ if (!page_exists($this->custom_target)) {
+ $this->custom_page_template = $this->dataDir.'/'.$this->getConf('templates_path').'/uhp_private_skeleton'.$file;
+ lock($this->custom_target);
+ saveWikiText($this->custom_target,$this->applyTemplate($this->custom_page_template),'Automatically created');
+ msg("Added '".$this->custom_target."' page from user namespace skeleton to your private namespace.",0);
+ unlock($this->custom_target);
+ }
}
}
}
- }
- // Public page?
- // If public page doesn't exists, create it (from template)
- if ($this->getConf('create_public_page') && is_file($this->dataDir.'/'.$this->getConf('templates_path').'/userhomepage_public.txt') && !page_exists($this->public_page) && !checklock($this->public_page) && !checkwordblock()) {
- // Target public page template
- $this->public_page_template = $this->dataDir.'/'.$this->getConf('templates_path').'/userhomepage_public.txt';
- // Create public page
- lock($this->public_page);
- saveWikiText($this->public_page,$this->applyTemplate('public'),'Automatically created');
- unlock($this->public_page);
- // Announce plubic page was created
- msg($this->getLang('createdpublicpage').' ('.$this->public_page.')', 1);
- // Note that we created public page
- $created['public'] = page_exists($this->public_page);
- }
- // List IDs that can match wiki start
- $wikistart = array($conf['start'], ':'.$conf['start']);
- // If Translation plugin is active, wiki start page can also be '??:start'
- if (!plugin_isdisabled('translation')) {
- // For each language in Translation settings
- foreach (explode(' ',$conf['plugin']['translation']['translations']) as $language){
- array_push($wikistart, $language.':'.$conf['start'], ':'.$language.':'.$conf['start']);
+ // Public page?
+ // If public page doesn't exists, create it (from template)
+ if ($this->getConf('create_public_page') && is_file($this->dataDir.'/'.$this->getConf('templates_path').'/userhomepage_public.txt') && !page_exists($this->public_page) && !checklock($this->public_page) && !checkwordblock()) {
+ // Target public page template
+ $this->public_page_template = $this->dataDir.'/'.$this->getConf('templates_path').'/userhomepage_public.txt';
+ // Create public page
+ lock($this->public_page);
+ saveWikiText($this->public_page,$this->applyTemplate('public'),'Automatically created');
+ unlock($this->public_page);
+ // Announce plubic page was created
+ msg($this->getLang('createdpublicpage').' ('.$this->public_page.')', 1);
+ // Note that we created public page
+ $created['public'] = page_exists($this->public_page);
+ }
+ // List IDs that can match wiki start
+ $wikistart = array($conf['start'], ':'.$conf['start']);
+ // If Translation plugin is active, wiki start page can also be '??:start'
+ if (!plugin_isdisabled('translation')) {
+ // For each language in Translation settings
+ foreach (explode(' ',$conf['plugin']['translation']['translations']) as $language){
+ array_push($wikistart, $language.':'.$conf['start'], ':'.$language.':'.$conf['start']);
+ }
+ }
+ // 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, 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, 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, '', true));
}
}
- // 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->getConf('no_acl')) && ($conf['useacl']) && (isset($_SERVER['REMOTE_USER']))) {
- $existingLines = file(DOKU_CONF.'acl.auth.php');
- $newLines = array();
- // ACL
- $acl = new admin_plugin_acl();
- // On private namespace
- if ($this->getConf('create_private_ns')) {
- // For known users
- // If use_name_string or group_by_name is enabled, we can't use ACL wildcards so let's create ACL for current user on his private ns
- if (($this->getConf('use_name_string')) or ($this->getConf('group_by_name'))) {
- $where = $this->private_ns.':*';
- $who = strtolower($_SERVER['REMOTE_USER']);
- // Otherwise we can set ACL for all known users at once
- } else {
- $where = cleanID($this->getConf('users_namespace')).':%USER%:*';
+ if ($this->settingsCheck()) {
+ if ((!$this->getConf('no_acl')) && ($conf['useacl']) && (isset($_SERVER['REMOTE_USER']))) {
+ $existingLines = file(DOKU_CONF.'acl.auth.php');
+ $newLines = array();
+ // ACL
+ $acl = new admin_plugin_acl();
+ // On private namespace
+ if ($this->getConf('create_private_ns')) {
+ // For known users
+ // If use_name_string or group_by_name is enabled, we can't use ACL wildcards so let's create ACL for current user on his private ns
+ if (($this->getConf('use_name_string')) or ($this->getConf('group_by_name'))) {
+ $where = $this->private_ns.':*';
+ $who = strtolower($_SERVER['REMOTE_USER']);
+ // Otherwise we can set ACL for all known users at once
+ } else {
+ $where = cleanID($this->getConf('users_namespace')).':%USER%:*';
+ $who = '%USER%';
+ }
+ $perm = AUTH_DELETE;
+ if (!in_array("$where\t$who\t$perm\n", $existingLines)) { $newLines[] = array('where' => $where, 'who' => $who, 'perm' => $perm); }
+ // For @ALL
+ if ($this->getConf('acl_all_private') != 'noacl') {
+ $where = cleanID($this->getConf('users_namespace')).':*';
+ $who = '@ALL';
+ $perm = (int)$this->getConf('acl_all_private');
+ if (!in_array("$where\t$who\t$perm\n", $existingLines)) { $newLines[] = array('where' => $where, 'who' => $who, 'perm' => $perm); }
+ }
+ // For @user
+ if (($this->getConf('acl_user_private') != 'noacl') && ($this->getConf('acl_user_private') !== $this->getConf('acl_all_private'))) {
+ $where = cleanID($this->getConf('users_namespace')).':*';
+ $who = '@user';
+ $perm = (int)$this->getConf('acl_user_private');
+ if (!in_array("$where\t$who\t$perm\n", $existingLines)) { $newLines[] = array('where' => $where, 'who' => $who, 'perm' => $perm); }
+ }
+ } // end of private namespaces acl
+ // On public user pages
+ if ($this->getConf('create_public_page')) {
+ // For known users
+ if (strpos($this->getConf('public_pages_ns'),':%NAME%:%START%') !== false) {
+ $where = cleanID(str_replace(':%NAME%:%START%', '', $this->getConf('public_pages_ns'))).':*';
+ } else {
+ $where = cleanID($this->getConf('public_pages_ns')).':%USER%';
+ }
$who = '%USER%';
- }
- $perm = AUTH_DELETE;
- if (!in_array("$where\t$who\t$perm\n", $existingLines)) { $newLines[] = array('where' => $where, 'who' => $who, 'perm' => $perm); }
- // For @ALL
- if ($this->getConf('acl_all_private') != 'noacl') {
- $where = cleanID($this->getConf('users_namespace')).':*';
- $who = '@ALL';
- $perm = (int)$this->getConf('acl_all_private');
+ $perm = AUTH_EDIT;
if (!in_array("$where\t$who\t$perm\n", $existingLines)) { $newLines[] = array('where' => $where, 'who' => $who, 'perm' => $perm); }
- }
- // For @user
- if (($this->getConf('acl_user_private') != 'noacl') && ($this->getConf('acl_user_private') !== $this->getConf('acl_all_private'))) {
- $where = cleanID($this->getConf('users_namespace')).':*';
- $who = '@user';
- $perm = (int)$this->getConf('acl_user_private');
- if (!in_array("$where\t$who\t$perm\n", $existingLines)) { $newLines[] = array('where' => $where, 'who' => $who, 'perm' => $perm); }
- }
- } // end of private namespaces acl
- // On public user pages
- if ($this->getConf('create_public_page')) {
- // For known users
- if (strpos($this->getConf('public_pages_ns'),':%NAME%:%START%') !== false) {
- $where = cleanID(str_replace(':%NAME%:%START%', '', $this->getConf('public_pages_ns'))).':*';
- } else {
- $where = cleanID($this->getConf('public_pages_ns')).':%USER%';
- }
- $who = '%USER%';
- $perm = AUTH_EDIT;
- if (!in_array("$where\t$who\t$perm\n", $existingLines)) { $newLines[] = array('where' => $where, 'who' => $who, 'perm' => $perm); }
- // For others
- if ($this->getConf('acl_all_public') != 'noacl') {
- // If both private and public namespaces are identical, we need to force rights for @ALL and/or @user on each public page
- if ($this->getConf('users_namespace') == $this->getConf('public_pages_ns')) {
- $files = scandir($this->dataDir.'/pages/'.$this->getConf('public_pages_ns'));
- foreach($files as $file) {
- if (is_file($this->dataDir.'/pages/'.$this->getConf('public_pages_ns').'/'.$file)) {
- // ACL on templates will be managed another way
- if (strpos($file, 'userhomepage_p') !== 0) {
- // @ALL
- if ($this->getConf('acl_all_public') != 'noacl') {
- $where = $this->getConf('public_pages_ns').':'.substr($file, 0, -4);
- $who = '@ALL';
- $perm = $this->getConf('acl_all_public');
- if (!in_array("$where\t$who\t$perm\n", $existingLines)) { $newLines[] = array('where' => $where, 'who' => $who, 'perm' => $perm); }
- }
- // @user
- if ($this->getConf('acl_user_public') != 'noacl') {
- $where = $this->getConf('public_pages_ns').':'.substr($file, 0, -4);
- $who = '@user';
- $perm = $this->getConf('acl_user_public');
- if (!in_array("$where\t$who\t$perm\n", $existingLines)) { $newLines[] = array('where' => $where, 'who' => $who, 'perm' => $perm); }
+ // For others
+ if ($this->getConf('acl_all_public') != 'noacl') {
+ // If both private and public namespaces are identical, we need to force rights for @ALL and/or @user on each public page
+ if ($this->getConf('users_namespace') == $this->getConf('public_pages_ns')) {
+ $files = scandir($this->dataDir.'/pages/'.$this->getConf('public_pages_ns'));
+ foreach($files as $file) {
+ if (is_file($this->dataDir.'/pages/'.$this->getConf('public_pages_ns').'/'.$file)) {
+ // ACL on templates will be managed another way
+ if (strpos($file, 'userhomepage_p') !== 0) {
+ // @ALL
+ if ($this->getConf('acl_all_public') != 'noacl') {
+ $where = $this->getConf('public_pages_ns').':'.substr($file, 0, -4);
+ $who = '@ALL';
+ $perm = $this->getConf('acl_all_public');
+ if (!in_array("$where\t$who\t$perm\n", $existingLines)) { $newLines[] = array('where' => $where, 'who' => $who, 'perm' => $perm); }
+ }
+ // @user
+ if ($this->getConf('acl_user_public') != 'noacl') {
+ $where = $this->getConf('public_pages_ns').':'.substr($file, 0, -4);
+ $who = '@user';
+ $perm = $this->getConf('acl_user_public');
+ if (!in_array("$where\t$who\t$perm\n", $existingLines)) { $newLines[] = array('where' => $where, 'who' => $who, 'perm' => $perm); }
+ }
}
}
}
- }
- // Otherwise we just need to give the right permission to each group on public pages namespace
- } else {
- // @ALL
- if ($this->getConf('acl_all_public') != 'noacl') {
- $where = cleanID(str_replace(':%NAME%:%START%', '', $this->getConf('public_pages_ns'))).':*';
- $who = '@ALL';
- $perm = $this->getConf('acl_all_public');
- if (!in_array("$where\t$who\t$perm\n", $existingLines)) { $newLines[] = array('where' => $where, 'who' => $who, 'perm' => $perm); }
- }
- // @user
- if ($this->getConf('acl_user_public') != 'noacl') {
- $where = cleanID(str_replace(':%NAME%:%START%', '', $this->getConf('public_pages_ns'))).':*';
- $who = '@user';
- $perm = $this->getConf('acl_user_public');
- if (!in_array("$where\t$who\t$perm\n", $existingLines)) { $newLines[] = array('where' => $where, 'who' => $who, 'perm' => $perm); }
+ // Otherwise we just need to give the right permission to each group on public pages namespace
+ } else {
+ // @ALL
+ if ($this->getConf('acl_all_public') != 'noacl') {
+ $where = cleanID(str_replace(':%NAME%:%START%', '', $this->getConf('public_pages_ns'))).':*';
+ $who = '@ALL';
+ $perm = $this->getConf('acl_all_public');
+ if (!in_array("$where\t$who\t$perm\n", $existingLines)) { $newLines[] = array('where' => $where, 'who' => $who, 'perm' => $perm); }
+ }
+ // @user
+ if ($this->getConf('acl_user_public') != 'noacl') {
+ $where = cleanID(str_replace(':%NAME%:%START%', '', $this->getConf('public_pages_ns'))).':*';
+ $who = '@user';
+ $perm = $this->getConf('acl_user_public');
+ if (!in_array("$where\t$who\t$perm\n", $existingLines)) { $newLines[] = array('where' => $where, 'who' => $who, 'perm' => $perm); }
+ }
}
}
- }
- } // end for public pages acl
- // On templates if they're in data/pages
- if (strpos($this->getConf('templates_path'),'/pages') !== false) {
- // For @ALL
- if (($this->getConf('acl_all_templates') != 'noacl') && (($this->getConf('create_private_ns')) or ($this->getConf('create_public_page')))) {
- $where = end(explode('/',$this->getConf('templates_path'))).':userhomepage_private';
- $who = '@ALL';
- $perm = (int)$this->getConf('acl_all_templates');
- if (!in_array("$where\t$who\t$perm\n", $existingLines)) { $newLines[] = array('where' => $where, 'who' => $who, 'perm' => $perm); }
- $where = end(explode('/',$this->getConf('templates_path'))).':userhomepage_public';
- $who = '@ALL';
- $perm = (int)$this->getConf('acl_all_templates');
- if (!in_array("$where\t$who\t$perm\n", $existingLines)) { $newLines[] = array('where' => $where, 'who' => $who, 'perm' => $perm); }
- }
- // For @user
- if (($this->getConf('acl_user_templates') != 'noacl') && ($this->getConf('acl_user_templates') !== $this->getConf('acl_all_templates')) && (($this->getConf('create_private_ns')) or ($this->getConf('create_public_page')))) {
- $where = end(explode('/',$this->getConf('templates_path'))).':userhomepage_private';
- $who = '@user';
- $perm = (int)$this->getConf('acl_user_templates');
- if (!in_array("$where\t$who\t$perm\n", $existingLines)) { $newLines[] = array('where' => $where, 'who' => $who, 'perm' => $perm); }
- $where = end(explode('/',$this->getConf('templates_path'))).':userhomepage_public';
- $who = '@user';
- $perm = (int)$this->getConf('acl_user_templates');
- if (!in_array("$where\t$who\t$perm\n", $existingLines)) { $newLines[] = array('where' => $where, 'who' => $who, 'perm' => $perm); }
- }
- } // end of templates acl
- $i = count($newLines);
- if ($i > 0) {
- msg("Userhomepage: adding or updating ".$i." ACL rules.",1);
- foreach($newLines as $line) {
- if (($line['where'] != null) && ($line['who'] != null)) {
- // delete potential ACL rule with same scope (aka 'where') and same user (aka 'who')
- $acl->_acl_del($line['where'], $line['who']);
- $acl->_acl_add($line['where'], $line['who'], $line['perm']);
+ } // end for public pages acl
+ // On templates if they're in data/pages
+ if (strpos($this->getConf('templates_path'),'/pages') !== false) {
+ // For @ALL
+ if (($this->getConf('acl_all_templates') != 'noacl') && (($this->getConf('create_private_ns')) or ($this->getConf('create_public_page')))) {
+ $where = end(explode('/',$this->getConf('templates_path'))).':userhomepage_private';
+ $who = '@ALL';
+ $perm = (int)$this->getConf('acl_all_templates');
+ if (!in_array("$where\t$who\t$perm\n", $existingLines)) { $newLines[] = array('where' => $where, 'who' => $who, 'perm' => $perm); }
+ $where = end(explode('/',$this->getConf('templates_path'))).':userhomepage_public';
+ $who = '@ALL';
+ $perm = (int)$this->getConf('acl_all_templates');
+ if (!in_array("$where\t$who\t$perm\n", $existingLines)) { $newLines[] = array('where' => $where, 'who' => $who, 'perm' => $perm); }
+ }
+ // For @user
+ if (($this->getConf('acl_user_templates') != 'noacl') && ($this->getConf('acl_user_templates') !== $this->getConf('acl_all_templates')) && (($this->getConf('create_private_ns')) or ($this->getConf('create_public_page')))) {
+ $where = end(explode('/',$this->getConf('templates_path'))).':userhomepage_private';
+ $who = '@user';
+ $perm = (int)$this->getConf('acl_user_templates');
+ if (!in_array("$where\t$who\t$perm\n", $existingLines)) { $newLines[] = array('where' => $where, 'who' => $who, 'perm' => $perm); }
+ $where = end(explode('/',$this->getConf('templates_path'))).':userhomepage_public';
+ $who = '@user';
+ $perm = (int)$this->getConf('acl_user_templates');
+ if (!in_array("$where\t$who\t$perm\n", $existingLines)) { $newLines[] = array('where' => $where, 'who' => $who, 'perm' => $perm); }
+ }
+ } // end of templates acl
+ $i = count($newLines);
+ if ($i > 0) {
+ msg("Userhomepage: adding or updating ".$i." ACL rules.",1);
+ foreach($newLines as $line) {
+ if (($line['where'] != null) && ($line['who'] != null)) {
+ // delete potential ACL rule with same scope (aka 'where') and same user (aka 'who')
+ $acl->_acl_del($line['where'], $line['who']);
+ $acl->_acl_add($line['where'], $line['who'], $line['perm']);
+ }
}
}
}
+ } else {
+ return flase;
}
}
@@ -353,56 +362,81 @@ class action_plugin_userhomepage extends DokuWiki_Action_Plugin{
global $INFO;
global $conf;
- if (($conf['showuseras'] == "username_link") and ($this->getConf('userlink_replace'))) {
- $classes = $this->getConf('userlink_classes');
- $classes = str_replace(',', ' ', $classes);
- if ($this->getConf('userlink_fa')) {
- $classes = str_replace('interwiki', '', $classes);
- }
- $this->username = $event->data['username'];
- $this->name = $event->data['name'];
- $this->link = $event->data['link'];
- $this->userlink = $event->data['userlink'];
- $this->textonly = $event->data['textonly'];
- // Logged in as...
- if (strpos($this->name, '') !== false) {
- $privateId = $this->helper->getPrivateID();
- $publicId = $this->helper->getPublicID();
- if ((page_exists($privateId)) && (page_exists($publicId))) {
- if ($this->getConf('userlink_fa')) {
- $return = ''.$INFO['userinfo']['name'].' ('.$_SERVER['REMOTE_USER'].')';
+ if ($this->settingsCheck()) {
+ if (($conf['showuseras'] == "username_link") and ($this->getConf('userlink_replace'))) {
+ $classes = $this->getConf('userlink_classes');
+ $classes = str_replace(',', ' ', $classes);
+ if ($this->getConf('userlink_fa')) {
+ $classes = str_replace('interwiki', '', $classes);
+ }
+ $this->username = $event->data['username'];
+ $this->name = $event->data['name'];
+ $this->link = $event->data['link'];
+ $this->userlink = $event->data['userlink'];
+ $this->textonly = $event->data['textonly'];
+ // Logged in as...
+ if (strpos($this->name, '') !== false) {
+ $privateId = $this->helper->getPrivateID();
+ $publicId = $this->helper->getPublicID();
+ if ((page_exists($privateId)) && (page_exists($publicId))) {
+ if ($this->getConf('userlink_fa')) {
+ $return = ''.$INFO['userinfo']['name'].' ('.$_SERVER['REMOTE_USER'].')';
+ } else {
+ $return = ''.$INFO['userinfo']['name'].' ('.$_SERVER['REMOTE_USER'].')';
+ }
+ } elseif (page_exists($publicId)) {
+ if ($this->getConf('userlink_fa')) {
+ $return = ' ('.$_SERVER['REMOTE_USER'].')';
+ } else {
+ $return = ''.$INFO['userinfo']['name'].' ('.$_SERVER['REMOTE_USER'].')';
+ }
+ } elseif (page_exists($privateId)) {
+ if ($this->getConf('userlink_fa')) {
+ $return = ''.$INFO['userinfo']['name'].'';
+ } else {
+ $return = ''.$INFO['userinfo']['name'].' ('.$_SERVER['REMOTE_USER'].')';
+ }
} else {
- $return = ''.$INFO['userinfo']['name'].' ('.$_SERVER['REMOTE_USER'].')';
- }
- } elseif (page_exists($publicId)) {
- if ($this->getConf('userlink_fa')) {
- $return = ' ('.$_SERVER['REMOTE_USER'].')';
- } else {
- $return = ''.$INFO['userinfo']['name'].' ('.$_SERVER['REMOTE_USER'].')';
- }
- } elseif (page_exists($privateId)) {
- if ($this->getConf('userlink_fa')) {
- $return = ''.$INFO['userinfo']['name'].'';
- } else {
- $return = ''.$INFO['userinfo']['name'].' ('.$_SERVER['REMOTE_USER'].')';
+ $return = null;
}
+ // ... or Last modified...
} else {
+ // No change for this right now
$return = null;
}
- // ... or Last modified...
+ if ($return != null) {
+ $event->data = array(
+ 'username' => $this->username,
+ 'name' => $this->name,
+ 'link' => $this->link,
+ 'userlink' => $return,
+ 'textonly' => $this->textonly
+ );
+ }
+ }
+ } 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 {
- // No change for this right now
- $return = null;
- }
- if ($return != null) {
- $event->data = array(
- 'username' => $this->username,
- 'name' => $this->name,
- 'link' => $this->link,
- 'userlink' => $return,
- 'textonly' => $this->textonly
- );
+ return true;
}
+ } else {
+ return true;
}
}