Table of Contents

User HomePage Plugin

Compatible with DokuWiki

  • 2024-02-06 "Kaos" unknown
  • 2023-04-04 "Jack Jackrum" unknown
  • 2022-07-31 "Igor" yes
  • 2020-07-29 "Hogfather" yes

plugin Creates users' private namespace and/or public page and redirects them to their own private namespace on login. The pages are base on customizable templates. The current version added the public page feature, a helper and many ACL settings to cover common

Last updated on
2022-08-29
Provides
Action
Repository
Source

:!: if you installed this plugin before 2021-12-16, note that instructions in User Links section changed a bit to keep original user check.

Installation

Search and install the plugin using the Extension Manager. Refer to Plugins on how to install plugins manually.

:!: Important: 2015-02-01's version introduced a crucial change in ACL process to reduce the amount of IO operations on acl.auth.php file and hopefully get rid of a bug that corrupted it from time to time. Please update ! :-)

Upgrading from version 3.0.4

:!: Even if keeping backward compatibility has been a major concern while developing this new version, it is strongly recomended to backup your Dokuwiki (at least conf folder and data related to users' public pages or private namespaces).

Some options were kept only for backward compatibility but pay extra care to all settings concerning private namespace to make sure you get the same file organisation than with previous version.
A new option [Create Private Namespace] wich is disabled by default will prevent any page creation just after the installation of the new version. Before enabling that option, backup your ACL file (conf/acl.auth.php) and then remove ACL rules linked to the old version of the plugin.
Note that the old page template file is no longer bundled so it can't be overwritten by the new package ;-)

If you prefer to stick to old 3.0.4 version, here's a package with only a few fixes to enable saving settings (wich didn't work in the most recent package available) and a minor change on ACL to actually protect the created user namespaces.

Settings

:!: Warning about Avatar plugin : if local avatar images and UHP's private namespaces are stored in same place, UHP's ACL rules might block avatars for visitors. Consider changing either UHP's ['users_namespace'] or Avatar's ['namespace'] setting.

:!: Warning about templates : some templates include an option for users' pages namespace wich default doesn't correspond to what's expected in a standard Dokuwiki install and that might be a source of conflict (for example wiki:user). Make sure to have the same namespace in template's and User Homepage options.
To my knowledge, concerned templates are Monobook and Vector (please feel free to add any other).

Right after saving settings, depending on selected options, you will get a success (or error m() message about the creation of the page templates:
www.geekitude.fr_externe_dokuwiki_userhomepage_templates_successfull_copy.jpg

Templates

The plugin uses three page templates (userhomepage_private.txt, userhomepage_public.txt and eventually userhomepage_publicspace.txt) that will automatically be created when needed (ie: enabling create_private_ns or create_public_page) to the path set in templates_path setting (from localized source files found in <dokuwiki_plugins>/userhomepage/lang/<language_code> folder). They contain basic informations usefull for users.

:!: Don't edit the localized source files as they will be overwritten by plugin updates, only those within the path set in templates_path setting

Page templates can use any standard page template replacement pattern (@NAME@, @USER@, …) and the following specific ones:

Once the page templates are set, here's what will happen when a user logs in:
www.geekitude.fr_externe_dokuwiki_userhomepage_first_login.jpg

Get more out of page templates

Private or Public Namespace Skeleton

If you create a folder named 'uhp_private_skeleton' or 'uhp_public_skeleton' in same folder as 'Userhomepage' page templates (so it should be '…/data/pages/user/uhp_private_skeleton' if you didn't change any option), and place page templates there, they will be added to user's private or public namespace(s) on login (even if skeleton page templates were added after user's namespace creation).

:!: This feature was added in 2015-10-04 version. :!: Skeleton feature was added for Public Namespace in 2018-02-27 version.

About ACL

When possible, the plugin uses wildcards to keep ACL rules as compact as possible.
Here is how they look like for a very short number of users with all settings at their default values:
www.geekitude.fr_externe_dokuwiki_userhomepage_acl_basic.jpg
Note that rules for @user group only apply if they're different from the equivalent setting for @ALL group.
There will be less ACL rules if the private namespaces are not stored in the same namespace as private page as this enables ACL wildcards on public pages:
www.geekitude.fr_externe_dokuwiki_userhomepage_acl_less.jpg
But much more if you enable use_name_string or group_by_name options as they break ACL wildcards on private namespaces. Moreover, in that case, unlike for public pages, acl for each private namespace will only apply when the given user logs in (wich can be a problem if the pages allready exist).

About Redirection

When a user logs in and didn't requested a specific page (or requested the Wiki start page), he will be redirected to his private namespace start page if it exists (works if Wiki start page is localized).

In facts, a timestamp is stored in PHP $_SESSION variable on log in (under the name uhptimestamp) and any request to get Wiki start page within 2 seconds after log in will be redirected (this is to ensures that the redirection works even if user logged in through “Remember Me” process). Let me know if the delay should be customizable in settings.

Helper

To use the helper, use the following code:

<?php
$userhomepage = plugin_load('helper','userhomepage');
if ($userhomepage) echo $userhomepage-><helper_function_call>;
?>

Where you replace the string <helper_function_call> by one of the following:

Here is a way to replace the regular “Logged in as” string to show links to both private Namespace and public page for templates that don't trigger COMMON_USER_LINK event.

The file to change depends on template but with Dokuwiki template, it would be the file …lib/tpl/dokuwiki/tpl_header.php and replace these lines :

                        if (!empty($_SERVER['REMOTE_USER'])) {
                            echo '<li class="user">';
                            tpl_userinfo(); /* 'Logged in as ...' */
                            echo '</li>';
                        }

…with…

                        if (!empty($_SERVER['REMOTE_USER'])) {
                            if ((!plugin_isdisabled('userhomepage')) and ($userhomepageHelper == null)) {
                                $userhomepageHelper = plugin_load('helper','userhomepage');
                            }
                            // If User HomePage helper is loaded, replace standard 'Logged in as...' link (case where one or both pages don't exist is managed by User HomePage helper)
                            if ($userhomepageHelper) {
                                echo $userhomepageHelper->getComplexLoggedInAs();
                            } else {
                                echo '<li class="user">';
                                tpl_userinfo(); /* 'Logged in as ...' */
                                echo '</li>';
                            }
                        }

Dokuwiki's showuseras setting is the best way to display a link to last editor's public page in docInfo section but if you prefer a link showing editor's login instead of full name, here is a way to do it.

The file to change depends on template but with Dokuwiki template, it would be the file …lib/tpl/dokuwiki/main.php. Open it and replace this line :

                <div class="docInfo"><?php tpl_pageinfo() ?></div>

…with…

                <div class="docInfo">
                    <?php
                        // If Userhomepage helper is loaded
                        if ($userhomepageHelper != null) {
                            $userhomepageHelper->getPageInfo();
                        // Else if Userhomepage helper is not loaded yet but enabled
                        } elseif (!plugin_isdisabled('userhomepage')) {
                            $userhomepageHelper = plugin_load('helper','userhomepage');
                            $userhomepageHelper->getPageInfo();
                        // Otherwise use plain text
                        } else {
                            tpl_pageinfo();
                        }
                    ?>
                </div>

Compatibility

That event is triggered by templates when they are ready to print out the Logged in as string and link. User Homepage will then be able to automatically replace the standard link with it's own. Here's a list of tested templates and the compatibility with that feature (feel free to add any other) :

Template name Compatibility Notes
arctic :-/ will look better addingiw_user class but images should still be moved down a bit (will try to find a fix)
arcticut :-/ same as above
bootstrap3 :-) support added by template's author (2011/11/18)
breeze :-)
codowik :-)
default :-/ image should be moved up a bit, preexistant bug, see Last modified link
dokubook :-( no Logged in as link
dokubootstrapsimplified :-( no Logged in as link
dokucms :-( no Logged in as link
dokuwiki :-)
doogiestpl :-/ small visual bug, image's are too high, preexistant so will not fix
fullframe :-)
greensteel :-)
kajukkk NOK :-( no Logged in as link, bugged on my “microapached” test wiki so it's hard to tell
lisps :-( no Logged in as link
monobook :-( no Logged in as link
prsnl10 :-/ small visual bug, image's are too high, preexistant so will not fix
ramtop :-( no Logged in as link
raw :-( apparently no such link, bugged on my “microapached” test wiki so it's hard to tell
roundbox :-/ no icon showing, seems a feature
scanlines :-( no Logged in as link
simplesidebar :-)
starter :-)
starterbootstrap :-( no Logged in as link
taratasy :-(
vector :-/ no icon on logged in link
wallpaper :-( no Logged in as link
writr :-)
zenlink :-( no Logged in as link

Note : I didn't check if there was an option to enable to show Logged in as link when I couldn't see it.

Classes

The following CSS classes are also applied to the links: - classic link (ie. with image icon) to Private Namespace: uhp_private - classic link to Public Page: uhp_public - “Fontawesome” links: uhp_fa.

These classes can be changed by template authors (or with user styles) to tune the style.

Change Log

See Github for older data

Known Bugs and Issues

Please refer to the GitHub issue tracker for reporting issues.

Discussion

Please use Github issue tracker or this forum thread.

1)
by creating a <dokuwiki_conf>/interwiki.local.conf file to redirect that link to the correct namespace with something like <choosen_ns> :<choosen_ns>:{NAME}
2)
in that case, here is an example of what you should put interwiki.local.conf conf file for user interwiki link type: :user:{NAME}:start (or adapt accordingly to your wiki's start setting