2010-07-01 23:48:07 +00:00
< ? php
function settings_init ( & $a ) {
2010-09-09 03:14:17 +00:00
if ( local_user ()) {
profile_load ( $a , $a -> user [ 'nickname' ]);
2010-07-01 23:48:07 +00:00
}
}
function settings_post ( & $a ) {
2010-07-20 05:52:31 +00:00
if ( ! local_user ()) {
2010-08-08 06:54:22 +00:00
notice ( t ( 'Permission denied.' ) . EOL );
2010-07-01 23:48:07 +00:00
return ;
}
2010-12-23 04:23:41 +00:00
2010-10-18 21:34:59 +00:00
if ( count ( $a -> user ) && x ( $a -> user , 'uid' ) && $a -> user [ 'uid' ] != local_user ()) {
2010-08-08 06:54:22 +00:00
notice ( t ( 'Permission denied.' ) . EOL );
2010-07-01 23:48:07 +00:00
return ;
}
2011-01-05 21:10:47 +00:00
if (( $a -> argc > 1 ) && ( $a -> argv [ 1 ] == 'addon' )) {
call_hooks ( 'plugin_settings_post' , $_POST );
return ;
}
call_hooks ( 'settings_post' , $_POST );
2010-08-20 05:18:06 +00:00
if (( x ( $_POST , 'npassword' )) || ( x ( $_POST , 'confirm' ))) {
2010-07-01 23:48:07 +00:00
2010-10-09 23:19:52 +00:00
$newpass = $_POST [ 'npassword' ];
$confirm = $_POST [ 'confirm' ];
2010-07-01 23:48:07 +00:00
$err = false ;
if ( $newpass != $confirm ) {
2010-08-08 06:54:22 +00:00
notice ( t ( 'Passwords do not match. Password unchanged.' ) . EOL );
2010-07-01 23:48:07 +00:00
$err = true ;
}
if (( ! x ( $newpass )) || ( ! x ( $confirm ))) {
2010-08-08 06:54:22 +00:00
notice ( t ( 'Empty passwords are not allowed. Password unchanged.' ) . EOL );
2010-07-01 23:48:07 +00:00
$err = true ;
}
if ( ! $err ) {
$password = hash ( 'whirlpool' , $newpass );
$r = q ( " UPDATE `user` SET `password` = '%s' WHERE `uid` = %d LIMIT 1 " ,
dbesc ( $password ),
2010-10-18 21:34:59 +00:00
intval ( local_user ())
2010-09-09 03:52:43 +00:00
);
2010-07-01 23:48:07 +00:00
if ( $r )
2010-08-08 06:54:22 +00:00
notice ( t ( 'Password changed.' ) . EOL );
2010-07-01 23:48:07 +00:00
else
2010-08-08 06:54:22 +00:00
notice ( t ( 'Password update failed. Please try again.' ) . EOL );
2010-07-01 23:48:07 +00:00
}
}
2010-11-17 23:41:18 +00:00
$theme = (( x ( $_POST , 'theme' )) ? notags ( trim ( $_POST [ 'theme' ])) : '' );
$username = (( x ( $_POST , 'username' )) ? notags ( trim ( $_POST [ 'username' ])) : '' );
$email = (( x ( $_POST , 'email' )) ? notags ( trim ( $_POST [ 'email' ])) : '' );
$timezone = (( x ( $_POST , 'timezone' )) ? notags ( trim ( $_POST [ 'timezone' ])) : '' );
$defloc = (( x ( $_POST , 'defloc' )) ? notags ( trim ( $_POST [ 'defloc' ])) : '' );
$openid = (( x ( $_POST , 'openid_url' )) ? notags ( trim ( $_POST [ 'openid_url' ])) : '' );
2010-12-20 08:27:00 +00:00
$maxreq = (( x ( $_POST , 'maxreq' )) ? intval ( $_POST [ 'maxreq' ]) : 0 );
2010-11-17 23:41:18 +00:00
$allow_location = ((( x ( $_POST , 'allow_location' )) && ( intval ( $_POST [ 'allow_location' ]) == 1 )) ? 1 : 0 );
$publish = ((( x ( $_POST , 'profile_in_directory' )) && ( intval ( $_POST [ 'profile_in_directory' ]) == 1 )) ? 1 : 0 );
$net_publish = ((( x ( $_POST , 'profile_in_netdirectory' )) && ( intval ( $_POST [ 'profile_in_netdirectory' ]) == 1 )) ? 1 : 0 );
$old_visibility = ((( x ( $_POST , 'visibility' )) && ( intval ( $_POST [ 'visibility' ]) == 1 )) ? 1 : 0 );
$page_flags = ((( x ( $_POST , 'page-flags' )) && ( intval ( $_POST [ 'page-flags' ]))) ? intval ( $_POST [ 'page-flags' ]) : 0 );
2010-08-20 05:04:18 +00:00
2010-08-14 14:55:18 +00:00
$notify = 0 ;
2010-11-17 23:41:18 +00:00
if ( x ( $_POST , 'notify1' ))
2010-08-14 14:55:18 +00:00
$notify += intval ( $_POST [ 'notify1' ]);
2010-11-17 23:41:18 +00:00
if ( x ( $_POST , 'notify2' ))
2010-08-14 14:55:18 +00:00
$notify += intval ( $_POST [ 'notify2' ]);
2010-11-17 23:41:18 +00:00
if ( x ( $_POST , 'notify3' ))
2010-08-14 14:55:18 +00:00
$notify += intval ( $_POST [ 'notify3' ]);
2010-11-17 23:41:18 +00:00
if ( x ( $_POST , 'notify4' ))
2010-08-14 14:55:18 +00:00
$notify += intval ( $_POST [ 'notify4' ]);
2010-11-17 23:41:18 +00:00
if ( x ( $_POST , 'notify5' ))
2010-08-14 14:55:18 +00:00
$notify += intval ( $_POST [ 'notify5' ]);
2010-07-01 23:48:07 +00:00
$email_changed = false ;
2010-09-09 03:14:17 +00:00
2010-07-01 23:48:07 +00:00
$err = '' ;
if ( $username != $a -> user [ 'username' ]) {
if ( strlen ( $username ) > 40 )
2010-08-08 06:54:22 +00:00
$err .= t ( ' Please use a shorter name.' );
2010-07-01 23:48:07 +00:00
if ( strlen ( $username ) < 3 )
2010-08-08 06:54:22 +00:00
$err .= t ( ' Name too short.' );
2010-07-01 23:48:07 +00:00
}
2010-10-17 03:38:27 +00:00
2010-07-01 23:48:07 +00:00
if ( $email != $a -> user [ 'email' ]) {
$email_changed = true ;
2010-11-14 08:32:31 +00:00
if ( ! valid_email ( $email ))
$err .= t ( ' Not valid email.' );
2011-01-05 06:17:58 +00:00
if (( x ( $a -> config , 'admin_email' )) && ( strcasecmp ( $email , $a -> config [ 'admin_email' ]) == 0 )) {
$err .= t ( ' Cannot change to that email.' );
$email = $a -> user [ 'email' ];
}
2010-07-01 23:48:07 +00:00
}
2010-10-17 03:38:27 +00:00
if ( strlen ( $err )) {
notice ( $err . EOL );
return ;
}
2010-07-01 23:48:07 +00:00
if ( $timezone != $a -> user [ 'timezone' ]) {
if ( strlen ( $timezone ))
date_default_timezone_set ( $timezone );
}
2010-08-08 06:54:22 +00:00
2010-09-09 03:14:17 +00:00
$str_group_allow = perms2str ( $_POST [ 'group_allow' ]);
$str_contact_allow = perms2str ( $_POST [ 'contact_allow' ]);
$str_group_deny = perms2str ( $_POST [ 'group_deny' ]);
$str_contact_deny = perms2str ( $_POST [ 'contact_deny' ]);
2010-08-08 06:54:22 +00:00
2010-12-23 22:40:32 +00:00
$openidserver = $a -> user [ 'openidserver' ];
2010-12-23 22:54:34 +00:00
// If openid has changed or if there's an openid but no openidserver, try and discover it.
if ( $openid != $a -> user [ 'openid' ] || ( strlen ( $openid ) && ( ! strlen ( $openidserver )))) {
2011-01-03 05:25:38 +00:00
$tmp_str = $openid ;
if ( strlen ( $tmp_str ) && validate_url ( $tmp_str )) {
2011-01-03 05:20:17 +00:00
logger ( 'updating openidserver' );
require_once ( 'library/openid.php' );
$open_id_obj = new LightOpenID ;
$open_id_obj -> identity = $openid ;
$openidserver = $open_id_obj -> discover ( $open_id_obj -> identity );
}
else
$openidserver = '' ;
2010-12-23 20:52:51 +00:00
}
2010-12-23 22:40:32 +00:00
$r = q ( " UPDATE `user` SET `username` = '%s', `email` = '%s', `openid` = '%s', `timezone` = '%s', `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s', `notify-flags` = %d, `page-flags` = %d, `default-location` = '%s', `allow_location` = %d, `theme` = '%s', `maxreq` = %d, `openidserver` = '%s' WHERE `uid` = %d LIMIT 1 " ,
2010-07-01 23:48:07 +00:00
dbesc ( $username ),
dbesc ( $email ),
2010-11-17 23:41:18 +00:00
dbesc ( $openid ),
2010-07-01 23:48:07 +00:00
dbesc ( $timezone ),
2010-08-08 06:54:22 +00:00
dbesc ( $str_contact_allow ),
dbesc ( $str_group_allow ),
dbesc ( $str_contact_deny ),
dbesc ( $str_group_deny ),
2010-08-14 14:55:18 +00:00
intval ( $notify ),
2010-10-18 07:43:49 +00:00
intval ( $page_flags ),
2010-08-21 23:31:46 +00:00
dbesc ( $defloc ),
2010-10-20 03:52:05 +00:00
intval ( $allow_location ),
2010-08-16 12:23:26 +00:00
dbesc ( $theme ),
2010-12-20 08:27:00 +00:00
intval ( $maxreq ),
2010-12-23 22:40:32 +00:00
dbesc ( $openidserver ),
2010-10-18 21:34:59 +00:00
intval ( local_user ())
2010-08-08 06:54:22 +00:00
);
if ( $r )
notice ( t ( 'Settings updated.' ) . EOL );
2010-08-20 05:04:18 +00:00
$r = q ( " UPDATE `profile`
SET `publish` = % d , `net-publish` = % d
WHERE `is-default` = 1 AND `uid` = % d LIMIT 1 " ,
intval ( $publish ),
intval ( $net_publish ),
2010-10-18 21:34:59 +00:00
intval ( local_user ())
2010-08-20 05:04:18 +00:00
);
if ( $old_visibility != $net_publish ) {
// Update global directory in background
$php_path = (( strlen ( $a -> config [ 'php_path' ])) ? $a -> config [ 'php_path' ] : 'php' );
$url = $_SESSION [ 'my_url' ];
if ( $url && strlen ( get_config ( 'system' , 'directory_submit_url' )))
proc_close ( proc_open ( " \" $php_path\ " \ " include/directory.php \" \" $url\ " & " ,
array (), $foo ));
}
2010-08-16 12:23:26 +00:00
$_SESSION [ 'theme' ] = $theme ;
2010-07-01 23:48:07 +00:00
if ( $email_changed && $a -> config [ 'register_policy' ] == REGISTER_VERIFY ) {
// FIXME - set to un-verified, blocked and redirect to logout
}
2010-07-06 04:39:55 +00:00
2010-08-16 12:23:26 +00:00
goaway ( $a -> get_baseurl () . '/settings' );
2010-09-09 03:14:17 +00:00
return ; // NOTREACHED
2010-07-01 23:48:07 +00:00
}
if ( ! function_exists ( 'settings_content' )) {
function settings_content ( & $a ) {
2010-10-17 03:38:27 +00:00
2010-10-31 23:38:22 +00:00
$o = '' ;
2010-09-19 04:11:18 +00:00
$o .= '<script> $(document).ready(function() { $(\'#nav-settings-link\').addClass(\'nav-selected\'); });</script>' ;
2010-07-01 23:48:07 +00:00
2010-07-30 13:09:20 +00:00
if ( ! local_user ()) {
notice ( t ( 'Permission denied.' ) . EOL );
2010-07-01 23:48:07 +00:00
return ;
}
2010-12-25 07:44:17 +00:00
if (( $a -> argc > 1 ) && ( $a -> argv [ 1 ] === 'addon' )) {
$o .= '<h1>' . t ( 'Plugin Settings' ) . '</h1>' ;
$o .= '<div id="account-settings-link"><a href="settings">' . t ( 'Account Settings' ) . '</a></div>' ;
$o .= '<form action="settings/addon" method="post" >' ;
$r = q ( " SELECT * FROM `hook` WHERE `hook` = 'plugin_settings' " );
if ( ! count ( $r ))
2010-12-25 09:24:51 +00:00
notice ( t ( 'No Plugin settings configured' ) . EOL );
2010-12-25 07:44:17 +00:00
call_hooks ( 'plugin_settings' , $o );
$o .= '</form>' ;
return $o ;
}
2010-11-16 05:02:59 +00:00
require_once ( 'include/acl_selectors.php' );
2010-07-01 23:48:07 +00:00
2010-08-20 05:04:18 +00:00
$p = q ( " SELECT * FROM `profile` WHERE `is-default` = 1 AND `uid` = %d LIMIT 1 " ,
2010-11-17 23:41:18 +00:00
intval ( local_user ())
2010-08-20 05:04:18 +00:00
);
if ( count ( $p ))
$profile = $p [ 0 ];
2010-07-01 23:48:07 +00:00
$username = $a -> user [ 'username' ];
$email = $a -> user [ 'email' ];
$nickname = $a -> user [ 'nickname' ];
$timezone = $a -> user [ 'timezone' ];
2010-08-14 14:55:18 +00:00
$notify = $a -> user [ 'notify-flags' ];
2010-08-21 23:31:46 +00:00
$defloc = $a -> user [ 'default-location' ];
2010-11-17 23:41:18 +00:00
$openid = $a -> user [ 'openid' ];
2010-12-20 08:27:00 +00:00
$maxreq = $a -> user [ 'maxreq' ];
2010-07-01 23:48:07 +00:00
2010-08-16 12:23:26 +00:00
if ( ! strlen ( $a -> user [ 'timezone' ]))
$timezone = date_default_timezone_get ();
2010-07-20 05:52:31 +00:00
2010-10-18 07:43:49 +00:00
$pageset_tpl = load_view_file ( 'view/pagetypes.tpl' );
$pagetype = replace_macros ( $pageset_tpl , array (
2010-10-18 23:38:48 +00:00
'$normal' => (( $a -> user [ 'page-flags' ] == PAGE_NORMAL ) ? " checked= \" checked \" " : " " ),
'$soapbox' => (( $a -> user [ 'page-flags' ] == PAGE_SOAPBOX ) ? " checked= \" checked \" " : " " ),
'$community' => (( $a -> user [ 'page-flags' ] == PAGE_COMMUNITY ) ? " checked= \" checked \" " : " " ),
'$freelove' => (( $a -> user [ 'page-flags' ] == PAGE_FREELOVE ) ? " checked= \" checked \" " : " " ),
2010-10-18 07:43:49 +00:00
'$page_normal' => PAGE_NORMAL ,
'$page_soapbox' => PAGE_SOAPBOX ,
'$page_community' => PAGE_COMMUNITY ,
'$page_freelove' => PAGE_FREELOVE
));
2010-11-29 04:58:23 +00:00
$noid = get_config ( 'system' , 'no_openid' );
if ( $noid ) {
$oidhtml = '' ;
}
else {
$oidhtml = '<label id="settings-openid-label" for="settings-openid" >' . t ( 'OpenID: ' ) . '</label><input type="text" id="settings-openid" class="openid" name="openid_url" value="$openid" />' . t ( " \x28 Optional \x29 Allow this OpenID to login to this account. " );
}
2011-01-03 06:09:54 +00:00
if ( get_config ( 'system' , 'publish_all' )) {
$profile_in_dir = '<input type="hidden" name="profile_in_directory" value="1" />' ;
}
else {
$opt_tpl = load_view_file ( " view/profile-in-directory.tpl " );
$profile_in_dir = replace_macros ( $opt_tpl , array (
'$yes_selected' => (( $profile [ 'publish' ]) ? " checked= \" checked \" " : " " ),
'$no_selected' => (( $profile [ 'publish' ] == 0 ) ? " checked= \" checked \" " : " " )
));
}
2010-08-20 05:04:18 +00:00
if ( strlen ( get_config ( 'system' , 'directory_submit_url' ))) {
2010-09-23 01:00:19 +00:00
$opt_tpl = load_view_file ( " view/profile-in-netdir.tpl " );
2010-08-20 05:04:18 +00:00
$profile_in_net_dir = replace_macros ( $opt_tpl , array (
2010-09-09 03:14:17 +00:00
'$yes_selected' => (( $profile [ 'net-publish' ]) ? " checked= \" checked \" " : " " ),
'$no_selected' => (( $profile [ 'net-publish' ] == 0 ) ? " checked= \" checked \" " : " " )
2010-08-20 05:04:18 +00:00
));
}
else
$profile_in_net_dir = '' ;
2010-10-20 03:52:05 +00:00
$loc_checked = (( $a -> user [ 'allow_location' ] == 1 ) ? " checked= \" checked \" " : " " );
2010-09-30 12:10:25 +00:00
$invisible = ((( ! $profile [ 'publish' ]) && ( ! $profile [ 'net-publish' ]))
? true : false );
if ( $invisible )
2010-10-18 03:04:17 +00:00
notice ( t ( 'Profile is <strong>not published</strong>.' ) . EOL );
2010-09-30 12:10:25 +00:00
2010-09-23 01:00:19 +00:00
$nickname_block = load_view_file ( " view/settings_nick_set.tpl " );
2010-07-20 05:52:31 +00:00
$nickname_subdir = '' ;
if ( strlen ( $a -> get_path ())) {
2010-09-23 01:00:19 +00:00
$subdir_tpl = load_view_file ( 'view/settings_nick_subdir.tpl' );
2010-07-20 05:52:31 +00:00
$nickname_subdir = replace_macros ( $subdir_tpl , array (
'$baseurl' => $a -> get_baseurl (),
'$nickname' => $nickname ,
'$hostname' => $a -> get_hostname ()
));
}
2010-08-16 12:23:26 +00:00
$theme_selector = '<select name="theme" id="theme-select" >' ;
$files = glob ( 'view/theme/*' );
2011-01-04 05:55:21 +00:00
$default_theme = get_config ( 'system' , 'theme' );
if ( ! $default_theme )
$default_theme = 'default' ;
2010-08-16 12:23:26 +00:00
if ( $files ) {
foreach ( $files as $file ) {
$f = basename ( $file );
2011-01-04 05:55:21 +00:00
$selected = (( $f == $_SESSION [ 'theme' ]) || ( $f === $default_theme && ( ! x ( $_SESSION , 'theme' )))
2010-08-16 12:23:26 +00:00
? ' selected="selected" ' : '' );
$theme_selector .= '<option val="' . basename ( $file ) . '"' . $selected . '>' . basename ( $file ) . '</option>' ;
}
}
$theme_selector .= '</select>' ;
2010-07-01 23:48:07 +00:00
$nickname_block = replace_macros ( $nickname_block , array (
'$nickname' => $nickname ,
2010-11-17 23:41:18 +00:00
'$uid' => local_user (),
2010-07-20 05:52:31 +00:00
'$subdir' => $nickname_subdir ,
'$basepath' => $a -> get_hostname (),
2010-07-01 23:48:07 +00:00
'$baseurl' => $a -> get_baseurl ()));
2010-09-23 01:00:19 +00:00
$stpl = load_view_file ( 'view/settings.tpl' );
2010-07-01 23:48:07 +00:00
2010-10-18 07:43:49 +00:00
$celeb = ((( $a -> user [ 'page-flags' ] == PAGE_SOAPBOX ) || ( $a -> user [ 'page-flags' ] == PAGE_COMMUNITY )) ? true : false );
2010-09-19 04:11:18 +00:00
$o .= replace_macros ( $stpl , array (
2010-07-01 23:48:07 +00:00
'$baseurl' => $a -> get_baseurl (),
2010-11-29 04:58:23 +00:00
'$oidhtml' => $oidhtml ,
2010-11-17 23:41:18 +00:00
'$uid' => local_user (),
2010-07-01 23:48:07 +00:00
'$username' => $username ,
2010-11-17 23:41:18 +00:00
'$openid' => $openid ,
2010-07-01 23:48:07 +00:00
'$email' => $email ,
'$nickname_block' => $nickname_block ,
'$timezone' => $timezone ,
2010-07-30 13:09:20 +00:00
'$zoneselect' => select_timezone ( $timezone ),
2010-08-21 23:31:46 +00:00
'$defloc' => $defloc ,
2010-10-20 03:52:05 +00:00
'$loc_checked' => $loc_checked ,
2010-08-20 05:04:18 +00:00
'$profile_in_dir' => $profile_in_dir ,
'$profile_in_net_dir' => $profile_in_net_dir ,
2010-08-08 06:54:22 +00:00
'$permissions' => t ( 'Default Post Permissions' ),
2010-08-20 05:04:18 +00:00
'$visibility' => $profile [ 'net-publish' ],
2010-10-18 07:43:49 +00:00
'$aclselect' => populate_acl ( $a -> user , $celeb ),
2010-08-14 14:55:18 +00:00
'$sel_notify1' => (( $notify & NOTIFY_INTRO ) ? ' checked="checked" ' : '' ),
'$sel_notify2' => (( $notify & NOTIFY_CONFIRM ) ? ' checked="checked" ' : '' ),
'$sel_notify3' => (( $notify & NOTIFY_WALL ) ? ' checked="checked" ' : '' ),
'$sel_notify4' => (( $notify & NOTIFY_COMMENT ) ? ' checked="checked" ' : '' ),
2010-08-16 12:23:26 +00:00
'$sel_notify5' => (( $notify & NOTIFY_MAIL ) ? ' checked="checked" ' : '' ),
2010-12-20 08:27:00 +00:00
'$maxreq' => $maxreq ,
2010-10-18 07:43:49 +00:00
'$theme' => $theme_selector ,
'$pagetype' => $pagetype
2010-07-30 13:09:20 +00:00
));
2010-07-01 23:48:07 +00:00
2010-12-23 22:40:32 +00:00
call_hooks ( 'settings_form' , $o );
$o .= '</form>' . " \r \n " ;
2010-12-23 04:23:41 +00:00
2010-07-01 23:48:07 +00:00
return $o ;
2010-12-23 04:23:41 +00:00
}}