'ai',
'email' => 'ai',
'date' => '2013-09-30',
'name' => 'subconfhelper',
'desc' => 'override various configuration settings per subdomain',
'url' => 'https://www.dokuwiki.org/plugin:subconfhelper' );
}
function register( &$controller) {
$controller->register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, 'check_vhost' );
$controller->register_hook('TPL_ACT_RENDER', 'BEFORE', $this, 'check_act' );
}
function read_config( $domain ) {
if( !$domain ) { return false; }
if( isset( $this->sconf[$domain] )) {
return $this->sconf[$domain]; }
else {
$this->sconf[$domain] = array( );
$conf = &$this->sconf[$domain]; }
$this->config_path = DOKU_CONF;
$this->config_prefix = 'subconfhelper_';
while( $domain && !$subdomain ) {
$conf_file = $this->config_path.$this->config_prefix.$domain.'.php';
if( !file_exists( $conf_file )) {
if( strpos( $domain, '.' )) {
$domain = substr( $domain, 0, strrpos( $domain, '.' )); }
else {
$subdomain = $domain; }}
else {
$subdomain = $domain; }}
if( file_exists( $conf_file )) {
require_once( $conf_file ); }
return $conf;
}
function check_vhost( &$event, $param ) {
global $ACT, $INFO;
$domain = $_SERVER['HTTP_HOST'];
$sconf = $this->read_config( $domain );
if( is_array( $sconf )) {
if( $ACT == 'register' && $_POST['save'] ) {
if( $this->override_register( $sconf )) {
$ACT = 'login'; }
else {
$_POST['save'] = false; }}
$this->override_defaultpage( $sconf );
$this->override_template( $sconf );
$this->override_namespace( $sconf );
$this->override_conf( $sconf );
}
}
function check_act( &$event, $param ) {
global $conf, $ACT, $INFO;
$domain = $_SERVER['HTTP_HOST'];
$sconf = $this->read_config( $domain );
if( $ACT == 'index' && $sconf['ns'] ) {
$dir = $conf['datadir'];
$ns = cleanID($ns);
$ns = utf8_encodeFN( str_replace( ':', '/', $ns));
echo p_locale_xhtml('index');
echo '
';
$data = array();
search($data,$conf['datadir'],'search_index',array( 'ns' => $ns ), $sconf['ns'] );
echo html_buildlist( $data,'idx','html_list_index','html_li_index' );
echo '
';
$event->preventDefault();
}
}
function override_conf( $conf_override ) {
global $conf;
foreach( array( 'disableactions' ) as $key ) {
if( isset( $conf_override[$key] )) {
$conf[$key] = $conf_override[$key]; }}
}
function override_register( $conf_override ) {
global $lang;
global $conf;
global $auth;
global $INPUT;
if(!$INPUT->post->bool('save')) return false;
if(!actionOK('register')) return false;
$default_groups = isset( $conf_override['default_groups'] ) ? $conf_override['default_groups'] : $conf['default_groups'];
if(!$auth) return false;
// gather input
$login = trim($auth->cleanUser($INPUT->post->str('login')));
$fullname = trim(preg_replace('/[\x00-\x1f:<>&%,;]+/', '', $INPUT->post->str('fullname')));
$email = trim(preg_replace('/[\x00-\x1f:<>&%,;]+/', '', $INPUT->post->str('email')));
$pass = $INPUT->post->str('pass');
$passchk = $INPUT->post->str('passchk');
if(empty($login) || empty($fullname) || empty($email)) {
msg($lang['regmissing'], -1);
return false;
}
if($conf['autopasswd']) {
$pass = auth_pwgen($login); // automatically generate password
} elseif(empty($pass) || empty($passchk)) {
msg($lang['regmissing'], -1); // complain about missing passwords
return false;
} elseif($pass != $passchk) {
msg($lang['regbadpass'], -1); // complain about misspelled passwords
return false;
}
//check mail
if(!mail_isvalid($email)) {
msg($lang['regbadmail'], -1);
return false;
}
//okay try to create the user
if(!$auth->triggerUserMod('create', array($login, $pass, $fullname, $email, $default_group ))) {
msg($lang['reguexists'], -1);
return false;
}
// send notification about the new user
$subscription = new Subscription();
$subscription->send_register($login, $fullname, $email);
// are we done?
if(!$conf['autopasswd']) {
msg($lang['regsuccess2'], 1);
return true;
}
// autogenerated password? then send password to user
if(auth_sendPassword($login, $pass)) {
msg($lang['regsuccess'], 1);
return true;
} else {
msg($lang['regmailfail'], -1);
return false;
}
}
function override_template( $conf_override ) {
$t = plugin_load( 'action', 'templateconfhelper_templateaction' );
if( $t ) {
$t->tpl_switch( $conf_override['template'] ); }
}
function override_defaultpage( $conf_override ) {
global $ID,$INFO,$conf;
if( $defaultpage = $conf_override['default_startpage'] ) {
if( $ID == $conf['start'] ) {
$ID = $defaultpage;
$NS = getNS( $ID );
$INFO = pageinfo( );
$JSINFO['id'] = $ID;
$INFO['namespace'] = (string) $INFO['namespace'];
if( $conf['breadcrumbs'] ) breadcrumbs( ); }}
}
function override_namespace( $conf_override ) {
global $ID,$INFO,$conf;
if( !$conf_override['ns'] ) { return ''; }
$path = explode( ':', $ID );
if( strpos( $ID, $conf_override['ns'] ) === 0 ) { return ''; }
if( strpos( ':'.$ID, str_replace( '/', ':',
$conf_override['ns'] )) === 0 ) { return ''; }
if( $conf_override['ns_inherit'] ) {
$newfile = wikiFN( $conf_override['ns'].':'.$ID );
if( !file_exists( wikiFN( $conf_override['ns'].':'.$ID ))
&& file_exists( wikiFN($ID))) { return ''; }}
$ID = $conf_override['ns'].':'.$ID;
if( strpos( $ID, ':' ) === 0 ) {
$ID = substr( $ID, 1 ); }
$NS = getNS( $ID );
$INFO = pageinfo( );
$JSINFO['id'] = $ID;
$INFO['namespace'] = (string) $INFO['namespace'];
if( $conf['breadcrumbs'] ) breadcrumbs();
}
}