=======================================================================================================================================
Modification Title: Pre-Register Users

Modification Version: 1.1

Modification Author: John Briggs

Modification Description:
This modification will provide a new tool in the admin panel to pre-register user accounts.
This modification will automatically send passwords to the pre-registered e-mail provided.

Modification Copyright:  2009 John Briggs. All rights reserved.

Modification Compatibility: XMB 1.9.8 SP3

Modification Install Note: Before adding this modification to your forum you should back up all files related to this modification.

Modification License Note: This modification is released under the GPL v3 License. A copy is provided with this software package.

=======================================================================================================================================
=======
Step 1:
=======
========================
Edit File: /include/admin.inc.php
========================
==========
Find Code:
==========

    &raquo;&nbsp;<a href="cp.php?action=members"><?php echo $lang['textmembers']?></a><br />

===============
Add Code Below:
===============

    <!-- Pre-Register Users Mod Begin -->
    &raquo;&nbsp;<a href="tools.php?action=reguser"><?php echo $lang['reguser']?></a><br />
    <!-- Pre-Register Users Mod End -->

=======================================================================================================================================
=======
Step 2:
=======

====================
Edit File: tools.php
====================

==========
Find Code:
==========

    case 'logsdump':
        if (!X_SADMIN) {
            error($lang['superadminonly'], false, '</td></tr></table></td></tr></table><br />');
        }

        if (noSubmit('yessubmit')) {
            echo '<tr bgcolor="'.$altbg2.'" class="ctrtablerow"><td>'.$lang['logsdump_confirm'].'<br /><form action="tools.php?action=logsdump" method="post"><input type="submit" name="yessubmit" value="'.$lang['textyes'].'" /> - <input type="submit" name="yessubmit" value="'.$lang['textno'].'" /></form></td></tr>';
        } else if ($lang['textyes'] == $yessubmit) {
            $db->query("TRUNCATE ".X_PREFIX."logs");
            nav($lang['tools']);
            echo '<tr bgcolor="'.$altbg2.'" class="ctrtablerow"><td>'.$lang['tool_completed'].' - '.$lang['tool_logs'].'</td></tr></table></table>';
            end_time();
            eval('echo "'.template('footer').'";');
            exit();
        } else {
            redirect('./cp.php', 0);
        }
        break;

===============
Add Code Below:
===============

    // Pre-Register Users Mod Begin
    case 'reguser':
        if (!X_SADMIN) {
            error($lang['superadminonly'], false, '</td></tr></table></td></tr></table><br />');
        }

        if (noSubmit('regusersubmit')) {
            ?>
            <tr bgcolor="<?php echo $THEME['altbg2']?>">
            <td>
            <form action="tools.php?action=reguser" method="post">
            <table cellspacing="0" cellpadding="0" border="0" width="550" align="center">
            <tr>
            <td bgcolor="<?php echo $THEME['bordercolor']?>">
            <table border="0" cellspacing="<?php echo $THEME['borderwidth']?>" cellpadding="<?php echo $THEME['tablespace']?>" width="100%">
            <tr>
            <td class="category" colspan="2"><strong><font color="<?php echo $THEME['cattext']?>"><?php echo $lang['reguser']?></font></strong></td>
            </tr>
            <tr class="tablerow">
            <td bgcolor="<?php echo $THEME['altbg1']?>" width="22%"><?php echo $lang['regusername']?></td>
            <td bgcolor="<?php echo $THEME['altbg2']?>"><input type="text" name="regusername" size="25" maxlength="25" /></td>
            </tr>
            <tr class="tablerow">
            <td bgcolor="<?php echo $THEME['altbg1']?>" width="22%"><?php echo $lang['regemail']?></td>
            <td bgcolor="<?php echo $THEME['altbg2']?>"><input type="text" name="regemail" size="25" /></td>
            </tr>
            <tr class="ctrtablerow">
            <td bgcolor="<?php echo $THEME['altbg2']?>" colspan="2"><input type="submit" class="submit" name="regusersubmit" value="<?php echo $lang['regsubmit']?>" />&nbsp;<input type="reset" value="<?php echo $lang['regclear']?>" /></td>
            </tr>
            </table>
            </td>
            </tr>
            </table>
            </form>
            </td>
            </tr>
            <?php
        } else {
            $regusername = trim(stripslashes($regusername));
            $regemail = trim(stripslashes($regemail));
            $regdate = $db->time($onlinetime);

            if (empty($regusername) || empty($regemail)) {
                error($lang['regempty'], false, '</td></tr></table></td></tr></table><br />');
            }

            if (strlen($regusername) < 3 || strlen($regusername) > 32) {
                error($lang['username_length_invalid'], false, '</td></tr></table></td></tr></table><br />');
            }

            if ($SETTINGS['doublee'] == 'off' && false !== strpos($regemail, "@")) {
                $email1 = ", email";
                $email2 = "OR email='$regemail'";
            } else {
                $email1 = $email2 = '';
            }

            $query = $db->query("SELECT username$email1 FROM ".X_PREFIX."members WHERE username = '$regusername' $email2");
            $usercheck = $db->num_rows($query);
            $db->free_result($query);

            if (!($usercheck == 0)) {
                error($lang['regcheck'], false, '</td></tr></table></td></tr></table><br />');
            }

            $fail = false;
            $efail = false;
            $query = $db->query("SELECT * FROM ".X_PREFIX."restricted");
            while($restriction = $db->fetch_array($query)) {
                if ($restriction['case_sensitivity'] == 1) {
                    if ($restriction['partial'] == 1) {
                        if (strpos($regusername, $restriction['name']) !== false) {
                            $fail = true;
                        }

                        if (strpos($regemail, $restriction['name']) !== false) {
                            $efail = true;
                        }
                    } else {
                        if ($regusername == $restriction['name']) {
                            $fail = true;
                        }

                        if ($regemail == $restriction['name']) {
                            $efail = true;
                        }
                    }
                } else {
                    $t_username = strtolower($regusername);
                    $t_email = strtolower($regemail);
                    $restriction['name'] = strtolower($restriction['name']);
                    if ($restriction['partial'] == 1) {
                        if (strpos($t_username, $restriction['name']) !== false) {
                            $fail = true;
                        }

                        if (strpos($t_email, $restriction['name']) !== false) {
                            $efail = true;
                        }
                    } else {
                        if ($t_username == $restriction['name']) {
                            $fail = true;
                        }

                        if ($t_email == $restriction['name']) {
                            $efail = true;
                        }
                    }
                }
            }
            $db->free_result($query);

            $find = array('<', '>', '|', '"', '[', ']', '\\', ',', '@', '\'');
            foreach($find as $needle) {
                if (false !== strpos($regusername, $needle)) {
                    error($lang['regbadchar'], false, '</td></tr></table></td></tr></table><br />');
                }
            }

            if ($efail || $fail) {
                error($lang['regerestricted'], false, '</td></tr></table></td></tr></table><br />');
            }

            if (false === strpos($regemail, "@")) {
                error($lang['regbademail'], false, '</td></tr></table></td></tr></table><br />');
            }

            $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';
            $regpassword = '';
            mt_srand((double)microtime() * 1000000);
            $max = mt_rand(8, 12);
            for($get=strlen($chars), $i=0; $i < $max; $i++) {
                $regpassword .= $chars[mt_rand(0, $get)];
            }
            $newmd5pass = md5(trim($regpassword));

            $db->query("INSERT INTO ".X_PREFIX."members (username, password, regdate, email, status, showemail, theme, langfile, timeformat, dateformat, mood, pwdate, tpp, ppp, saveogu2u, emailonu2u, useoldu2u) VALUES ('$regusername', '$newmd5pass', $regdate, '$regemail', 'Member', 'no', '0', 'English', 24, 'dd-mm-yyyy', '', $regdate, 30, 30, 'yes', 'no', 'no');");

            altMail($regemail, '['.$SETTINGS['bbname'].'] '.$lang['textyourpw'], $lang['textyourpwis']."\n\n".$regusername."\n".$regpassword."\n\n".$SETTINGS['boardurl'], "From: ".$SETTINGS['bbname']." <".$SETTINGS['adminemail'].">");
            echo '<tr bgcolor="'.$THEME['altbg2'].'" class="ctrtablerow"><td>'.$lang['regusersuccess'].'</td></tr>';
            redirect('tools.php?action=reguser', 2, X_REDIRECT_JS);
        }
        break;
    // Pre-Register Users Mod End

=======================================================================================================================================
=======
Step 3:
=======
=======================
Edit File: /lang/English.lang.php
=======================
=================================
Add Code Above To End Of File Above ?>
=================================

// Pre-Register Users Mod Begin
$lang['reguser'] = 'Register User';
$lang['regusername'] = 'Username:';
$lang['regemail'] = 'E-mail:';
$lang['regsubmit'] = 'Submit User';
$lang['regclear'] = 'Clear Form';
$lang['regusersuccess'] = 'User Registered Successfully!';
$lang['regurestricted'] = 'Sorry, you are unable to register this name as it is currently reserved. Please go back and try again.';
$lang['regerestricted'] = 'Sorry, you are unable to register this e-mail as it is currently reserved. Please go back and try again.';
$lang['regbademail'] = 'Sorry, you have submited an invalid e-mail address. Please go back and try again.';
$lang['regbadchar'] = 'Sorry, you cannot use invalid chars for usernames. Please go back and try again.';
$lang['regcheck'] = 'Sorry, you cannot create this username and/or e-mail as it already exists. Please go back and try again.';
$lang['regempty'] = 'Sorry, the username or e-mail address cannot be blank. Please go back and try again.';
// Pre-Register Users Mod End

=======================================================================================================================================
Enjoy!