diff --git a/_template_public.txt b/_template_public.txt new file mode 100644 index 0000000..6f4fd79 --- /dev/null +++ b/_template_public.txt @@ -0,0 +1 @@ +====== @NAME@ (@USER@) - Public Page ====== \ No newline at end of file diff --git a/action.php b/action.php index 26cb404..d7cc069 100644 --- a/action.php +++ b/action.php @@ -23,16 +23,16 @@ class action_plugin_userhomepage extends DokuWiki_Action_Plugin{ global $INFO; if (($_SERVER['REMOTE_USER']!=null)&&($_REQUEST['do']=='login')) { $this->init(); - $id = $this->home_wiki_page; + $id = $this->private_page; // if page doesn't exists, create it if (!page_exists($id) && !checklock($id) && !checkwordblock()) { // set acl's if requested if ( $this->getConf('set_permissions') == 1 ) { $acl = new admin_plugin_acl(); // Old user-page ACL (version 3.0.4): - // $ns = cleanID($this->home_wiki_ns.':'.$this->homePage()); + // $ns = cleanID($this->private_ns.':'.$this->privatePage()); // New user-namespace ACL: - $ns = cleanID($this->home_wiki_ns).':*'; + $ns = cleanID($this->private_ns).':*'; $acl->_acl_add($this->getConf('users_namespace').':*', '@ALL', (int)$this->getConf('set_permissions_others')); $acl->_acl_add($this->getConf('users_namespace').':*', '@user', (int)$this->getConf('set_permissions_others')); $acl->_acl_add($ns, strtolower($_SERVER['REMOTE_USER']), AUTH_DELETE); @@ -75,16 +75,29 @@ class action_plugin_userhomepage extends DokuWiki_Action_Plugin{ $this->private_page_template = DOKU_INC . $this->getConf('templatepath'); if ($this->getConf('group_by_name')) { // private:s:simon - $this->home_wiki_ns = cleanID($this->getConf('users_namespace').':'.strtolower(substr($this->homeNamespace(), 0, 1)).':'. $this->homeNamespace()); + $this->private_ns = cleanID($this->getConf('users_namespace').':'.strtolower(substr($this->privateNamespace(), 0, 1)).':'. $this->privateNamespace()); } else { // private:simon - $this->home_wiki_ns = cleanID($this->getConf('users_namespace').':'. $this->homeNamespace()); + $this->private_ns = cleanID($this->getConf('users_namespace').':'. $this->privateNamespace()); } // private:simon:start.txt - $this->home_wiki_page= cleanID($this->home_wiki_ns . ':' . $this->homePage()); + $this->private_page= cleanID($this->private_ns . ':' . $this->privatePage()); + // Public page? + if ($this->getConf('create_public_page')) { + $this->public_page_template = DOKU_INC . $this->getConf('templatepathpublic'); + // user:simon.txt + $this->public_page= cleanID($this->getConf('public_pages_ns').':'. $_SERVER['REMOTE_USER']); + // if page doesn't exists, create it + if (!page_exists($this->public_page) && !checklock($this->public_page) && !checkwordblock()) { + //writes the user info to public page + lock($this->public_page); + saveWikiText($this->public_page,$this->_template_public(),$lang['created']); + unlock($this->public_page); + } + } } } - function homeNamespace() { + function privateNamespace() { if ( $this->getConf('use_name_string')) { global $INFO; $raw_string = $INFO['userinfo']['name']; @@ -95,14 +108,14 @@ class action_plugin_userhomepage extends DokuWiki_Action_Plugin{ return strtolower($_SERVER['REMOTE_USER']); } } - function homePage() { - if ( $this->getConf('use_start_page')) { - global $conf; - return $conf['start']; - } else { - return $this->homeNamespace(); - } - } + function privatePage() { + if ( $this->getConf('use_start_page')) { + global $conf; + return $conf['start']; + } else { + return $this->homeNamespace(); + }; + } function _template_private() { global $INFO; $content = io_readFile($this->private_page_template, false); @@ -112,18 +125,27 @@ class action_plugin_userhomepage extends DokuWiki_Action_Plugin{ $content = str_replace('@USER@',$user,$content); return $content; } + function _template_public() { + global $INFO; + $content = io_readFile($this->public_page_template, false); + $name = $INFO['userinfo']['name']; + $user = strtolower($_SERVER['REMOTE_USER']); + $content = str_replace('@NAME@',$name,$content); + $content = str_replace('@USER@',$user,$content); + return $content; + } //draws a home button, used by calls from main.php in template folder function homeButton() { $this->init(); if ($_SERVER['REMOTE_USER']!=null) { - echo '
'; + echo '
'; } } //draws a home link, used by calls from main.php in template folder function homeLink() { $this->init(); if ($_SERVER['REMOTE_USER']!=null) { - echo 'Home'; + echo 'Home'; } } } diff --git a/conf/default.php b/conf/default.php index 81c5dfa..0fa6069 100644 --- a/conf/default.php +++ b/conf/default.php @@ -6,6 +6,7 @@ * @license: CC Attribution-Share Alike 3.0 Unported */ +$conf['create_private_ns'] = 1; $conf['use_name_string'] = 0; $conf['use_start_page'] = 1; $conf['users_namespace'] = 'private'; @@ -14,3 +15,6 @@ $conf['set_permissions_others'] = '0'; $conf['group_by_name'] = 1; $conf['templatepath'] = 'lib/plugins/userhomepage/_template_private.txt'; $conf['edit_before_create'] = 0; +$conf['create_public_page'] = 0; +$conf['public_pages_ns'] = 'user'; +$conf['templatepathpublic'] = 'lib/plugins/userhomepage/_template_public.txt'; diff --git a/conf/metadata.php b/conf/metadata.php index 33a79c9..204440d 100644 --- a/conf/metadata.php +++ b/conf/metadata.php @@ -6,6 +6,7 @@ * @license: CC Attribution-Share Alike 3.0 Unported */ +$meta['create_private_ns'] = array('onoff'); $meta['use_name_string'] = array('onoff','_caution' => 'warning'); $meta['use_start_page'] = array('onoff'); $meta['users_namespace'] = array('string','_pattern' => '/^(|[a-zA-Z\-:]+)$/'); @@ -14,3 +15,6 @@ $meta['set_permissions_others'] = array('multichoice','_choices'=>array('0','1', $meta['group_by_name'] = array('onoff'); $meta['templatepath'] = array('string'); $meta['edit_before_create'] = array('onoff'); +$meta['create_public_page'] = array('onoff'); +$meta['public_pages_ns'] = array('string','_pattern' => '/^(|[a-zA-Z\-:]+)$/','_caution' => 'warning'); +$meta['templatepathpublic'] = array('string'); diff --git a/lang/en/settings.php b/lang/en/settings.php index dd72515..f02f5af 100644 --- a/lang/en/settings.php +++ b/lang/en/settings.php @@ -6,6 +6,7 @@ * @license: CC Attribution-Share Alike 3.0 Unported */ +$lang['create_private_ns'] = 'Create user\'s private namespace'; $lang['use_name_string'] = 'Use user\'s full name instead of login for his namespace and homepage (will break %USER% wildcard in ACL for that namespace).'; $lang['use_start_page'] = 'Use the wiki\'s start page string instead of the user\'s namespace string set above for the start page of his namespace.'; $lang['users_namespace'] = 'Namespace under which user namespaces are created (can be anything but user without messing up with Dokuwiki default behaviour).'; @@ -20,3 +21,6 @@ $lang['set_permissions_others_o_16'] = 'Delete'; $lang['group_by_name'] = 'Group users\' namespaces by the first character of user name ?'; $lang['templatepath'] = 'Doku relative path to the template file for user\'s namespace start page.'; $lang['edit_before_create'] = 'Allow users to edit their namespace start page before create (note that template will not be used if you enable this option).'; +$lang['create_public_page'] = 'Create a public page for user'; +$lang['public_pages_ns'] = 'Namespace under wich public pages ar created. If a value other than \'user\' is used, ?????????????????'; +$lang['templatepathpublic'] = 'lib/plugins/userhomepage/_template_public.txt';