2014-08-30 13:23:38 +02:00
< ? php
2014-08-31 03:29:56 +02:00
/**
2014-09-11 22:50:42 +02:00
* Userhomepage plugin main file
* Previous authors : James GuanFeng Lin , Mikhail I . Izmestev , Daniel Stonier
* @ author : Simon Delage < simon . geekitude @ gmail . com >
* @ license : CC Attribution - Share Alike 3.0 Unported < http :// creativecommons . org / licenses / by - sa / 3.0 />
2014-08-31 03:29:56 +02:00
*/
2014-09-11 22:50:42 +02:00
2014-08-31 04:10:39 +02:00
// must be run within Dokuwiki
2014-09-11 22:50:42 +02:00
if ( ! defined ( 'DOKU_INC' )) die ();
if ( ! defined ( 'DOKU_PLUGIN' )) define ( 'DOKU_PLUGIN' , DOKU_INC . 'lib/plugins/' );
2014-09-10 17:09:50 +02:00
2014-09-11 22:50:42 +02:00
require_once ( DOKU_PLUGIN . 'action.php' );
require_once ( DOKU_PLUGIN . '/acl/admin.php' );
2014-09-07 11:51:44 +02:00
2014-09-11 22:50:42 +02:00
class action_plugin_userhomepage extends DokuWiki_Action_Plugin {
function register ( & $controller ) {
2014-09-13 02:13:16 +02:00
$controller -> register_hook ( 'DOKUWIKI_STARTED' , 'AFTER' , $this , 'init' , array ());
$controller -> register_hook ( 'ACTION_ACT_PREPROCESS' , 'BEFORE' , $this , 'redirect' , array ());
$controller -> register_hook ( 'ACTION_ACT_PREPROCESS' , 'AFTER' , $this , 'acl' , array ());
2015-06-19 02:33:37 +02:00
$controller -> register_hook ( 'COMMON_USER_LINK' , 'AFTER' , $this , 'replaceUserLink' , array ());
2014-09-01 18:37:07 +02:00
}
2014-09-11 22:50:42 +02:00
function init ( & $event , $param ) {
global $conf ;
2015-06-19 02:33:37 +02:00
$this -> helper = plugin_load ( 'helper' , 'userhomepage' );
2015-06-05 00:03:49 +02:00
// 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 [<code>templates_path</code>] should be changed to a path relative to data folder (as set by Dokuwiki's [<code>savedir</code>] setting). Current value is based on former default (i.e. <code>data/pages/...</code>) and will still work but this message will keep appearing until the value is corrected, check <a href='https://www.dokuwiki.org/plugin:userhomepage'>this page</a> 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 )) {
2014-09-11 22:50:42 +02:00
$source = $this -> getConf ( 'templatepath' );
2015-06-05 00:03:49 +02:00
// Otherwise, we're on a fresh install
2014-09-11 22:50:42 +02:00
} else {
$source = 'lib/plugins/userhomepage/lang/' . $conf [ 'lang' ] . '/userhomepage_private.default' ;
}
2015-06-05 00:03:49 +02:00
$this -> copyFile ( $source , $dest , 'userhomepage_private.txt' );
2014-09-11 22:50:42 +02:00
}
2015-06-05 00:03:49 +02:00
// 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' );
2014-09-11 22:50:42 +02:00
}
// TARGETS
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 ());
}
// ...:start.txt or ...:simon_delage.txt
$this -> private_page = $this -> private_ns . ':' . $this -> privateStart ();
// user:simon.txt
$this -> public_page = cleanID ( $this -> getConf ( 'public_pages_ns' ) . ':' . $_SERVER [ 'REMOTE_USER' ]);
2014-09-21 19:17:21 +02:00
// 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 ;
}
2014-09-11 22:50:42 +02:00
}
function redirect ( & $event , $param ) {
global $conf ;
global $lang ;
$created = array ();
2014-09-21 19:17:21 +02:00
// 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 )) {
2014-09-11 22:50:42 +02:00
// if private page doesn't exists, create it (from template)
2015-06-05 00:03:49 +02:00
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 ()) {
2014-09-11 22:50:42 +02:00
// Target private start page template
2015-06-05 00:03:49 +02:00
$this -> private_page_template = $this -> dataDir . '/' . $this -> getConf ( 'templates_path' ) . '/userhomepage_private.txt' ;
2014-09-11 22:50:42 +02:00
// 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 . ')' , 0 );
// Note that we created private page
2014-10-10 18:20:26 +02:00
$created [ 'private' ] = page_exists ( $this -> private_page );
2014-09-11 22:50:42 +02:00
}
// Public page?
// If public page doesn't exists, create it (from template)
2015-06-05 00:03:49 +02:00
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 ()) {
2014-09-11 22:50:42 +02:00
// Target public page template
2015-06-05 00:03:49 +02:00
$this -> public_page_template = $this -> dataDir . '/' . $this -> getConf ( 'templates_path' ) . '/userhomepage_public.txt' ;
2014-09-11 22:50:42 +02:00
// 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 . ')' , 0 );
// Note that we created public page
2014-10-10 18:20:26 +02:00
$created [ 'public' ] = page_exists ( $this -> public_page );
2014-09-11 22:50:42 +02:00
}
2014-09-21 19:17:21 +02:00
// 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'
2014-09-11 22:50:42 +02:00
if ( ! plugin_isdisabled ( 'translation' )) {
2014-09-21 19:17:21 +02:00
// For each language in Translation settings
foreach ( explode ( ' ' , $conf [ 'plugin' ][ 'translation' ][ 'translations' ]) as $language ){
array_push ( $wikistart , $language . ':' . $conf [ 'start' ], ':' . $language . ':' . $conf [ 'start' ]);
2014-09-11 22:50:42 +02:00
}
}
2015-06-13 02:05:52 +02:00
// If Public page was just created, redirect to it and edit (or show)
2015-06-20 18:30:52 +02:00
if (( $created [ 'public' ]) && ( page_exists ( $this -> public_page ))) {
2015-06-18 09:14:39 +02:00
// send_redirect(wl($this->public_page, 'do='.$this->getConf('action'), false, '&'));
send_redirect ( wl ( $this -> public_page , array ( 'do=' . $this -> getConf ( 'action' )), true ));
2014-09-11 22:50:42 +02:00
// Else if private start page was just created and edit option is set, redirect to it and edit
2015-06-20 18:30:52 +02:00
} elseif (( $created [ 'private' ]) && ( page_exists ( $this -> private_page )) && ( $this -> getConf ( 'edit_before_create' ))) {
2015-06-18 09:14:39 +02:00
// send_redirect(wl($this->private_page, 'do='.$this->getConf('action'), false, '&'));
send_redirect ( wl ( $this -> private_page , array ( 'do=' . $this -> getConf ( 'action' )), true ));
2014-09-21 19:17:21 +02:00
// Else if 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 (( page_exists ( $this -> private_page )) && ((( ! isset ( $_GET [ 'id' ])) or ( in_array ( $_GET [ 'id' ], $wikistart ))) && ( time () - $_SESSION [ " uhptimestamp " ] <= 2 ))) {
2015-06-18 09:14:39 +02:00
// send_redirect(wl($this->private_page));
send_redirect ( wl ( $this -> private_page , '' , true ));
2014-09-11 22:50:42 +02:00
}
}
}
2014-09-13 02:13:16 +02:00
function acl ( & $event , $param ) {
global $conf ;
2015-06-27 16:27:51 +02:00
// if ((!$this->getConf('no_acl')) && ($conf['useacl'])) {
if (( ! $this -> getConf ( 'no_acl' )) && ( $conf [ 'useacl' ]) && ( isset ( $_SERVER [ 'REMOTE_USER' ]))) {
2015-02-01 15:56:10 +01:00
$existingLines = file ( DOKU_CONF . 'acl.auth.php' );
$newLines = array ();
2014-12-06 18:08:11 +01:00
// 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' ))) {
2015-02-01 15:56:10 +01:00
$where = $this -> private_ns . ':*' ;
$who = strtolower ( $_SERVER [ 'REMOTE_USER' ]);
2014-12-06 18:08:11 +01:00
// Otherwise we can set ACL for all known users at once
} else {
2015-02-01 15:56:10 +01:00
$where = cleanID ( $this -> getConf ( 'users_namespace' )) . ':%USER%:*' ;
$who = '%USER%' ;
2014-12-06 18:08:11 +01:00
}
2015-02-01 15:56:10 +01:00
$perm = AUTH_DELETE ;
if ( ! in_array ( " $where\t $who\t $perm\n " , $existingLines )) { $newLines [] = array ( 'where' => $where , 'who' => $who , 'perm' => $perm ); }
2014-12-06 18:08:11 +01:00
// For @ALL
if ( $this -> getConf ( 'acl_all_private' ) != 'noacl' ) {
2015-02-01 15:56:10 +01:00
$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 ); }
2014-12-06 18:08:11 +01:00
}
// For @user
if (( $this -> getConf ( 'acl_user_private' ) != 'noacl' ) && ( $this -> getConf ( 'acl_user_private' ) !== $this -> getConf ( 'acl_all_private' ))) {
2015-02-01 15:56:10 +01:00
$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 ); }
2014-12-06 18:08:11 +01:00
}
} // end of private namespaces acl
// On public user pages
if ( $this -> getConf ( 'create_public_page' )) {
// For known users
2015-02-01 15:56:10 +01:00
$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 ); }
2014-12-06 18:08:11 +01:00
// 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' )) {
2015-06-05 00:03:49 +02:00
$files = scandir ( $this -> dataDir . '/pages/' . $this -> getConf ( 'public_pages_ns' ));
2014-12-18 01:40:21 +01:00
foreach ( $files as $file ) {
2015-06-05 00:03:49 +02:00
if ( is_file ( $this -> dataDir . '/pages/' . $this -> getConf ( 'public_pages_ns' ) . '/' . $file )) {
2014-12-18 01:40:21 +01:00
// ACL on templates will be managed another way
if ( strpos ( $file , 'userhomepage_p' ) !== 0 ) {
// @ALL
if ( $this -> getConf ( 'acl_all_public' ) != 'noacl' ) {
2015-02-01 15:56:10 +01:00
$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 ); }
2014-12-18 01:40:21 +01:00
}
// @user
if ( $this -> getConf ( 'acl_user_public' ) != 'noacl' ) {
2015-02-01 15:56:10 +01:00
$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 ); }
2014-12-18 01:40:21 +01:00
}
2014-12-06 18:08:11 +01:00
}
2014-09-13 02:13:16 +02:00
}
}
2014-12-06 18:08:11 +01:00
// Otherwise we just need to give the right permission to each group on public pages namespace
} else {
// @ALL
2014-12-18 01:40:21 +01:00
if ( $this -> getConf ( 'acl_all_public' ) != 'noacl' ) {
2015-02-01 15:56:10 +01:00
$where = cleanID ( $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 ); }
2014-12-18 01:40:21 +01:00
}
2014-12-06 18:08:11 +01:00
// @user
2014-12-18 01:40:21 +01:00
if ( $this -> getConf ( 'acl_user_public' ) != 'noacl' ) {
2015-02-01 15:56:10 +01:00
$where = cleanID ( $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 ); }
2014-12-06 18:08:11 +01:00
}
2014-09-13 02:13:16 +02:00
}
}
2014-12-06 18:08:11 +01:00
} // end for public pages acl
// On templates if they're in data/pages
2015-06-05 00:03:49 +02:00
if ( strpos ( $this -> getConf ( 'templates_path' ), '/pages' ) !== false ) {
2014-12-06 18:08:11 +01:00
// For @ALL
if (( $this -> getConf ( 'acl_all_templates' ) != 'noacl' ) && (( $this -> getConf ( 'create_private_ns' )) or ( $this -> getConf ( 'create_public_page' )))) {
2015-02-01 15:56:10 +01:00
$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 ); }
2014-12-06 18:08:11 +01:00
}
// 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' )))) {
2015-02-01 15:56:10 +01:00
$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 ); }
2014-12-06 18:08:11 +01:00
}
} // end of templates acl
2015-02-01 15:56:10 +01:00
$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' ]);
}
}
}
2014-12-06 18:08:11 +01:00
}
2014-09-13 02:13:16 +02:00
}
function copyFile ( $source = null , $target_dir = null , $target_file = null ) {
2015-06-05 00:03:49 +02:00
if ( ! is_file ( $this -> dataDir . DIRECTORY_SEPARATOR . $target_dir . DIRECTORY_SEPARATOR . $target_file )) {
if ( ! is_dir ( $this -> dataDir . DIRECTORY_SEPARATOR . $target_dir )){
io_mkdir_p ( $this -> dataDir . DIRECTORY_SEPARATOR . $target_dir ) || msg ( " Creating directory $target_dir failed " , - 1 );
}
$source = str_replace ( '/' , DIRECTORY_SEPARATOR , $source );
copy ( $source , $this -> dataDir . DIRECTORY_SEPARATOR . $target_dir . DIRECTORY_SEPARATOR . $target_file );
if ( is_file ( $this -> dataDir . DIRECTORY_SEPARATOR . $target_dir . DIRECTORY_SEPARATOR . $target_file )) {
msg ( $this -> getLang ( 'copysuccess' ) . ' (' . $source . ' > ' . $this -> dataDir . DIRECTORY_SEPARATOR . $target_dir . DIRECTORY_SEPARATOR . $target_file . ')' , 1 );
} else {
msg ( $this -> getLang ( 'copyerror' ) . ' (' . $source . ' > ' . $this -> dataDir . DIRECTORY_SEPARATOR . $target_dir . DIRECTORY_SEPARATOR . $target_file . ')' , - 1 );
}
2015-02-11 12:55:04 +01:00
} else {
2015-06-05 00:03:49 +02:00
msg ( $this -> getLang ( 'copynotneeded' ) . ' (' . $source . ' > ' . $this -> dataDir . DIRECTORY_SEPARATOR . $target_dir . DIRECTORY_SEPARATOR . $target_file . ')' , 0 );
2014-09-13 02:13:16 +02:00
}
}
2014-09-11 22:50:42 +02:00
function privateNamespace () {
if ( $this -> getConf ( 'use_name_string' )) {
global $INFO ;
$raw_string = cleanID ( $INFO [ 'userinfo' ][ 'name' ]);
// simon_delage
return $raw_string ;
} else {
// simon
return strtolower ( $_SERVER [ 'REMOTE_USER' ]);
}
}
function privateStart () {
if ( $this -> getConf ( 'use_start_page' )) {
global $conf ;
return cleanID ( $conf [ 'start' ]);
} else {
return $this -> privateNamespace ();
}
}
function applyTemplate ( $type ) {
if ( $type == 'private' ) {
$content = io_readFile ( $this -> private_page_template , false );
} elseif ( $type == 'public' ) {
$content = io_readFile ( $this -> public_page_template , false );
}
2014-09-13 12:16:35 +02:00
$content = str_replace ( '@TARGETPRIVATEPAGE@' , $this -> private_page , $content );
2014-09-11 22:50:42 +02:00
$content = str_replace ( '@TARGETPRIVATENS@' , $this -> private_ns , $content );
$content = str_replace ( '@TARGETPUBLICPAGE@' , $this -> public_page , $content );
$content = str_replace ( '@TARGETPUBLICNS@' , cleanID ( $this -> getConf ( 'public_pages_ns' )), $content );
// Improved template process to use standard replacement patterns from https://www.dokuwiki.org/namespace_templates based on code proposed by Christian Nancy
// Build a fake data structure for the parser
$data = array ( 'tpl' => $content , 'id' => $this -> private_page );
// Use the built-in parser
$content = parsePageTemplate ( $data );
return $content ;
}
2015-06-19 02:33:37 +02:00
function replaceUserLink ( & $event , $param ) {
global $INFO ;
global $conf ;
if (( $conf [ 'showuseras' ] == " username_link " ) and ( $this -> getConf ( 'userlink_replace' ))) {
$classes = $this -> getConf ( 'userlink_classes' );
2015-07-10 21:53:41 +02:00
$classes = str_replace ( ',' , ' ' , $classes );
if ( $this -> getConf ( 'userlink_fa' )) {
$classes = str_replace ( 'interwiki' , '' , $classes );
}
2015-06-19 02:33:37 +02:00
$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 , '<bdi>' ) !== false ) {
$privateId = $this -> helper -> getPrivateID ();
$publicId = $this -> helper -> getPublicID ();
if (( page_exists ( $privateId )) && ( page_exists ( $publicId ))) {
2015-07-10 21:53:41 +02:00
if ( $this -> getConf ( 'userlink_fa' )) {
2015-07-17 22:51:31 +02:00
$return = '<a href="' . wl ( $privateId ) . '" class="' . $classes . ' uhp_fa" rel="nofollow" title="' . $this -> getLang ( 'privatenamespace' ) . ' (' . $privateId . ')' . '"><bdi><i class="fa fa-user-secret"></i>' . $INFO [ 'userinfo' ][ 'name' ] . '</bdi></a> (<a href="' . wl ( $publicId ) . '" class="' . $classes . ' uhp_fa" rel="nofollow" title="' . $this -> getLang ( 'publicpage' ) . ' (' . $publicId . ')' . '"><bdi><i class="fa fa-user"></i> ' . $_SERVER [ 'REMOTE_USER' ] . '</bdi></a>)' ;
2015-07-10 21:53:41 +02:00
} else {
$return = '<a href="' . wl ( $privateId ) . '" class="' . $classes . ' uhp_private" rel="nofollow" title="' . $this -> getLang ( 'privatenamespace' ) . ' (' . $privateId . ')' . '"><bdi>' . $INFO [ 'userinfo' ][ 'name' ] . '</bdi></a> (<a href="' . wl ( $publicId ) . '" class="' . $classes . ' uhp_public" rel="nofollow" title="' . $this -> getLang ( 'publicpage' ) . ' (' . $publicId . ')' . '"><bdi>' . $_SERVER [ 'REMOTE_USER' ] . '</bdi></a>)' ;
}
2015-06-19 02:33:37 +02:00
} elseif ( page_exists ( $publicId )) {
2015-07-10 21:53:41 +02:00
if ( $this -> getConf ( 'userlink_fa' )) {
$return = '</a> (<a href="' . wl ( $publicId ) . '" class="' . $classes . ' uhp_fa" rel="nofollow" title="' . $this -> getLang ( 'publicpage' ) . '(' . $publicId . ')' . '"><bdi><i class="fa fa-user"></i> ' . $_SERVER [ 'REMOTE_USER' ] . '</bdi></a>)' ;
} else {
$return = '<bdi>' . $INFO [ 'userinfo' ][ 'name' ] . '</bdi> (<a href="' . wl ( $publicId ) . '" class="' . $classes . ' uhp_public" rel="nofollow" title="' . $this -> getLang ( 'publicpage' ) . ' (' . $publicId . ')' . '"><bdi>' . $_SERVER [ 'REMOTE_USER' ] . '</bdi></a>)' ;
}
2015-06-19 02:33:37 +02:00
} elseif ( page_exists ( $privateId )) {
2015-07-10 21:53:41 +02:00
if ( $this -> getConf ( 'userlink_fa' )) {
$return = '<a href="' . wl ( $privateId ) . '" class="' . $classes . ' uhp_fa" rel="nofollow" title="' . $this -> getLang ( 'privatenamespace' ) . ' (' . $privateId . ')' . '"><bdi><i class="fa fa-user-secret"></i>' . $INFO [ 'userinfo' ][ 'name' ] . '</bdi></a>' ;
} else {
$return = '<a href="' . wl ( $privateId ) . '" class="' . $classes . ' uhp_private" rel="nofollow" title="' . $this -> getLang ( 'privatenamespace' ) . ' (' . $privateId . ')' . '"><bdi>' . $INFO [ 'userinfo' ][ 'name' ] . '</bdi></a> (<bdi>' . $_SERVER [ 'REMOTE_USER' ] . '</bdi>)' ;
}
2015-06-19 02:33:37 +02:00
} else {
$return = null ;
}
// ... or Last modified...
} 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
);
}
}
}
2014-08-30 13:23:38 +02:00
}