diff --git a/inc/plugins/dispname.php b/inc/plugins/dispname.php index a0d860d..af80dab 100644 --- a/inc/plugins/dispname.php +++ b/inc/plugins/dispname.php @@ -48,8 +48,12 @@ function ___setvars(&$a) { $plugins->add_hook('portal_do_login_start', 'dispname_member_login'); $plugins->add_hook('member_do_login_start', 'dispname_member_login'); +$plugins->add_hook('datahandler_login_validate_start', 'dispname_member_login'); // 1.8 only $plugins->add_hook('member_register_end', 'dispname_register_langs'); -$plugins->add_hook('xmlhttp', 'dispname_register_checkloginname'); +if($GLOBALS['mybb']->version_code >= 1700) + $plugins->add_hook('xmlhttp', 'dispname_register_checkloginname18'); +else + $plugins->add_hook('xmlhttp', 'dispname_register_checkloginname'); if(defined('IN_ADMINCP')) { $action =& $GLOBALS['mybb']->input['do']; @@ -71,8 +75,8 @@ function dispname_info() 'website' => 'http://mybbhacks.zingaburga.com/', 'author' => 'ZiNgA BuRgA', 'authorsite' => 'http://zingaburga.com/', - 'version' => '1.05', - 'compatibility' => '14*,15*,16*', + 'version' => '1.10', + 'compatibility' => '14*,15*,16*,17*,18*', 'guid' => '' ); } @@ -84,12 +88,22 @@ function dispname_close_board($e) { function dispname_template_mods() { return array( '' => '', - '' => '', + '' => '', 'regValidator.register(\'username\', \'ajax\', {url:\'xmlhttp.php?action=username_availability\', loading_message:\'{$lang->js_validator_checking_username}\'});' => 'regValidator.register(\'loginname\', \'ajax\', {url:\'xmlhttp.php?action=loginname_availability\', loading_message:\'{$lang->js_validator_checking_loginname}\'}); - regValidator.register(\'username\', \'ajax\', {url:\'xmlhttp.php?action=username_availability\', loading_message:\'{$lang->js_validator_checking_username}\'});' + regValidator.register(\'username\', \'ajax\', {url:\'xmlhttp.php?action=username_availability\', loading_message:\'{$lang->js_validator_checking_username}\'});', + 'email: {' => 'loginname: { + required: true, + remote:{ + url: "xmlhttp.php?action=loginname_availability", + type: "post", + dataType: "json", + data: { my_post_key: my_post_key } + } + }, + email: {' ); } -function dispname_activate() { +function dispname_install() { global $db, $mybb; // close the board for a sec @@ -103,16 +117,22 @@ function dispname_activate() { $db->write_query('ALTER TABLE `'.$db->table_prefix.'users` ADD UNIQUE KEY `loginname` (`loginname`)'); + if($unclose_board) dispname_close_board(0); +} +function dispname_activate() { require MYBB_ROOT.'inc/adminfunctions_templates.php'; foreach(dispname_template_mods() as $src => $dest) find_replace_templatesets('member_register', '~'.preg_quote($src).'~', $dest); - - - - - if($unclose_board) dispname_close_board(0); +} +function dispname_is_installed() { + return $GLOBALS['db']->field_exists('loginname', 'users'); } function dispname_deactivate() { + require MYBB_ROOT.'inc/adminfunctions_templates.php'; + foreach(dispname_template_mods() as $src => $dest) + find_replace_templatesets('member_register', '~'.preg_quote($dest, '~').'~', $src, 0); +} +function dispname_uninstall() { global $db, $cache; // close the board for a sec @@ -149,12 +169,6 @@ function dispname_deactivate() { $db->write_query('ALTER TABLE `'.$db->table_prefix.'users` DROP COLUMN `loginname`, DROP KEY `loginname`, ADD UNIQUE KEY `username` (`username`)'); - - require MYBB_ROOT.'inc/adminfunctions_templates.php'; - foreach(dispname_template_mods() as $src => $dest) - find_replace_templatesets('member_register', '~'.preg_quote($dest).'~', $src, 0); - - if($unclose_board) dispname_close_board(0); } @@ -243,11 +257,12 @@ function query($string, $hide_errors=0, $write_query=0) { '); control_object($GLOBALS['lang'], ' function sprintf($string) { + $args = func_get_args(); if($string == $this->email_activateaccount) { // !!! relies on language string !!! $string = str_replace("Username: {1}", "Username: ".$GLOBALS[\'user\'][\'loginname\'], $string); + $args[0] = $string; } - $args = func_get_args(); return call_user_func_array(array(parent, \'sprintf\'), $args); } '); @@ -255,23 +270,28 @@ function sprintf($string) { function dispname_member_lostpw() { control_object($GLOBALS['lang'], ' function sprintf($string) { - if($string == $this->email_lostpw) { + $args = func_get_args(); + if($string == $this->email_lostpw || $string == $this->email_lostpw2) { // !!! relies on language string !!! $string = str_replace("Username: {1}", "Username: ".$GLOBALS[\'user\'][\'loginname\'], $string); + $args[0] = $string; } - $args = func_get_args(); return call_user_func_array(array(parent, \'sprintf\'), $args); } '); } function dispname_member_login() { + static $hooked = false; + if($hooked) return; + $hooked = true; control_object($GLOBALS['db'], ' function simple_select($table, $fields="*", $conditions="", $options=array()) { if($table == "users" && $options[\'limit\'] == 1) { if(substr($conditions, 0, 10) == "username=\'") $conditions = "loginname".substr($conditions, 8); - elseif(substr($conditions, 0, 17) == "LOWER(username)=\'") + elseif(substr($conditions, 0, 17) == "LOWER(username)=\'" + || substr($conditions, 0, 19) == "LOWER(username) = \'") $conditions = "LOWER(loginname)".substr($conditions, 15); } return parent::simple_select($table, $fields, $conditions, $options); @@ -289,16 +309,17 @@ function write_query($query, $hide_errors=0) { function dispname_admin_login() { control_object($GLOBALS['db'], ' function simple_select($table, $fields="*", $conditions="", $options=array()) { - static $done = false; + static $done = 0; static $done2 = false; - if(!$done && $table == "users" && $options[\'limit\'] == 1) { + if($done <'.($GLOBALS['mybb']->version_code >= 1700 ?3:1).' && $table == "users" && $options[\'limit\'] == 1) { if(substr($conditions, 0, 10) == "username=\'") { $conditions = "loginname".substr($conditions, 8); - $done = true; + ++$done; } - elseif(substr($conditions, 0, 17) == "LOWER(username)=\'") { + elseif(substr($conditions, 0, 17) == "LOWER(username)=\'" + || substr($conditions, 0, 19) == "LOWER(username) = \'") { $conditions = "LOWER(loginname)".substr($conditions, 15); - $done = true; + ++$done; } } elseif(!$done2 && $table == "users" && $fields == "uid,email" && substr($conditions, 0, 19) == "LOWER(username) = \'") { @@ -351,7 +372,23 @@ function dispname_register_checkloginname() { else die(''.$lang->sprintf($lang->username_available, $nameout).''); } - +function dispname_register_checkloginname18() { + global $mybb; + if($mybb->input['action'] != 'loginname_availability') return; + global $lang; + // don't see the point in doing a post check, but meh + if(!verify_post_check($mybb->get_input('my_post_key'), true)) + xmlhttp_error($lang->invalid_post_code); + + header('Content-type: application/json; charset='.$GLOBALS['charset']); + if(!dispname_loginname_valid($mybb->input['loginname'])) + die(json_encode($lang->banned_characters_username)); + $nameout = htmlspecialchars_uni($mybb->input['loginname']); + if(dispname_loginname_exists($mybb->input['loginname'])) + die(json_encode($lang->sprintf($lang->username_taken, $nameout))); + else + die(json_encode('true')); +} function dispname_admin_add_field() { global $mybb, $plugins; @@ -401,11 +438,11 @@ function dispname_loginname_exists($name, $uid=0) { $uid_check = ''; if($uid) $uid_check = ' AND uid!='.intval($uid); - $query = $db->simple_select('users', 'COUNT(uid) AS count', 'LOWER(loginname)="'.$db->escape_string(strtolower($name)).'"'.$uid_check); - return ($db->fetch_field($query, 'count') > 0); + $query = $db->simple_select('users', 'uid', 'LOWER(loginname)="'.$db->escape_string(strtolower($name)).'"'.$uid_check, array('limit' => 1)); + return (bool)$db->fetch_field($query, 'uid'); } // TODO: admin search users?? // TODO: langs - when logging in, change "Username" -> "Login name" -?> \ No newline at end of file +?>