PageRenderTime 46ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/assets/snippets/weblogin/websignup.inc.php

https://github.com/modxcms/evolution
PHP | 485 lines | 451 code | 17 blank | 17 comment | 22 complexity | aed4fa38fc66b3f28044f142623888fb MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.1, MIT, BSD-2-Clause, Apache-2.0, BSD-3-Clause
  1. <?php
  2. # WebSignup 1.0
  3. # Created By Raymond Irving April, 2005
  4. #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  5. defined('IN_PARSER_MODE') or die();
  6. # load tpl
  7. if(is_numeric($tpl)) $tpl = ($doc=$modx->getDocuments($tpl)) ? $doc['content']:"Document '$tpl' not found.";
  8. else if($tpl) $tpl = ($chunk=$modx->getChunk($tpl)) ? $chunk:"Chunk '$tpl' not found.";
  9. if(!$tpl) $tpl = getWebSignuptpl($useCaptcha);
  10. // extract declarations
  11. $declare = webLoginExtractDeclarations($tpl);
  12. $tpls = explode((isset($declare["separator"]) ? $declare["separator"]:"<!--tpl_separator-->"),$tpl);
  13. if(!$isPostBack){
  14. // display signup screen
  15. $tpl = $tpls[0];
  16. $tpl = str_replace("[+action+]",$modx->makeURL($modx->documentIdentifier),$tpl);
  17. $tpl.="<script type='text/javascript'>
  18. if (document.websignupfrm) document.websignupfrm.username.focus();
  19. </script>";
  20. $output .= $tpl;
  21. }
  22. else if ($isPostBack){
  23. $username = $modx->db->escape($modx->stripTags(trim($_POST['username'])));
  24. $fullname = $modx->db->escape($modx->stripTags($_POST['fullname']));
  25. $email = $modx->db->escape($modx->stripTags($_POST['email']));
  26. $password = $modx->db->escape($modx->stripTags($_POST['password']));
  27. $country = $modx->db->escape($modx->stripTags($_POST['country']));
  28. $state = $modx->db->escape($modx->stripTags($_POST['state']));
  29. $zip = $modx->db->escape($modx->stripTags($_POST['zip']));
  30. $formcode = $_POST['formcode'];
  31. // load template section #1
  32. $tpl = $tpls[0];
  33. $tpl = str_replace("[+action+]",$modx->makeURL($modx->documentIdentifier),$tpl);
  34. $tpl = str_replace("[+username+]",$username,$tpl);
  35. $tpl = str_replace("[+fullname+]",$fullname,$tpl);
  36. $tpl = str_replace("[+email+]",$email,$tpl);
  37. $tpl = str_replace("[+country+]",$country,$tpl);
  38. $tpl = str_replace("[+state+]",$state,$tpl);
  39. $tpl = str_replace("[+zip+]",$zip,$tpl);
  40. $tpl.="<script type='text/javascript'>if (document.websignupfrm) document.websignupfrm.username.focus();</script>";
  41. // check for duplicate user name
  42. if($username=="") {
  43. $output = webLoginAlert("Missing username. Please enter a user name.").$tpl;
  44. return;
  45. }
  46. else {
  47. $rs = $modx->db->select('count(id)', $modx->getFullTableName("web_users"), "username='{$username}'");
  48. $limit = $modx->db->getValue($rs);
  49. if($limit>0) {
  50. $output = webLoginAlert("Username is already in use!").$tpl;
  51. return;
  52. }
  53. }
  54. // verify email
  55. if($email=='' || !preg_match("/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$/i", $email)){
  56. $output = webLoginAlert("E-mail address doesn't seem to be valid!").$tpl;
  57. return;
  58. }
  59. // check for duplicate email address
  60. $rs = $modx->db->select('count(internalKey)', $modx->getFullTableName("web_user_attributes"), "email='{$email}' AND internalKey!='{$id}'");
  61. $limit = $modx->db->getValue($rs);
  62. if($limit>0) {
  63. $output = webLoginAlert("Email is already in use!").$tpl;
  64. return;
  65. }
  66. // if there is no password, randomly generate a new one
  67. if (isset($_POST['password'])) {
  68. // verify password
  69. if ($_POST['password'] != $_POST['confirmpassword']) {
  70. $output = webLoginAlert("Password typed is mismatched"). $tpl;
  71. return;
  72. }
  73. // check password
  74. if (strlen($password) < 6 ) {
  75. $output = webLoginAlert("Password is too short!").$tpl;
  76. return;
  77. }
  78. elseif($password=="") {
  79. $output = webLoginAlert("You didn't specify a password for this user!").$tpl;
  80. return;
  81. }
  82. } else {
  83. $password = webLoginGeneratePassword();
  84. }
  85. // verify form code
  86. if($useCaptcha && $_SESSION['veriword']!=$formcode) {
  87. $output = webLoginAlert("Incorrect form code. Please enter the correct code displayed by the image.").$tpl;
  88. return;
  89. }
  90. // create the user account
  91. $key = $modx->db->insert(
  92. array(
  93. 'username' => $username,
  94. 'password' => md5($password),
  95. ), $modx->getFullTableName("web_users"));
  96. // save user attributes
  97. $modx->db->insert(
  98. array(
  99. 'internalKey' => $key,
  100. 'fullname' => $fullname,
  101. 'email' => $email,
  102. 'zip' => $zip,
  103. 'state' => $state,
  104. 'country' => $country,
  105. ), $modx->getFullTableName("web_user_attributes"));
  106. // add user to web groups
  107. if(count($groups)>0) {
  108. $ds = $modx->db->select('id', $modx->getFullTableName("webgroup_names"), "name IN ('".implode("','",$groups)."')");
  109. while ($wg = $modx->db->getValue($ds)) {
  110. $modx->db->query("REPLACE INTO ".$modx->getFullTableName("web_groups")." (webgroup,webuser) VALUES('$wg','$key')");
  111. }
  112. }
  113. // invoke OnWebSaveUser event
  114. $modx->invokeEvent("OnWebSaveUser",
  115. array(
  116. "mode" => "new",
  117. "userid" => $key,
  118. "username" => $username,
  119. "userpassword" => $password,
  120. "useremail" => $email,
  121. "userfullname" => $fullname
  122. ));
  123. // send email notification
  124. $rt = webLoginSendNewPassword($email,$username,$password,$fullname);
  125. if ($rt!==true) { // an error occured
  126. $output = $rt.$tpl;
  127. return;
  128. }
  129. // display change notification
  130. $newpassmsg = "A copy of the new password was sent to your email address.";
  131. $tpl = $tpls[1];
  132. $tpl = str_replace("[+newpassmsg+]",$newpassmsg,$tpl);
  133. $output .= $tpl;
  134. }
  135. // Returns Default WebChangePwd tpl
  136. function getWebSignuptpl($useCaptcha){
  137. ob_start();
  138. ?>
  139. <!-- #declare:separator <hr> -->
  140. <!-- login form section-->
  141. <form method="post" name="websignupfrm" action="[+action+]" style="margin: 0px; padding: 0px;">
  142. <table border="0" cellpadding="2">
  143. <tr>
  144. <td>
  145. <table border="0" width="100%">
  146. <tr>
  147. <td>User name:*</td>
  148. <td>
  149. <input type="text" name="username" class="inputBox" style="width:300px" size="20" maxlength="15" value="[+username+]"></td>
  150. </tr>
  151. <tr>
  152. <td>Full name:</td>
  153. <td>
  154. <input type="text" name="fullname" class="inputBox" style="width:300px" size="20" maxlength="100" value="[+fullname+]"></td>
  155. </tr>
  156. <tr>
  157. <td>Email address:*</td>
  158. <td>
  159. <input type="text" name="email" class="inputBox" style="width:300px" size="20" value="[+email+]"></td>
  160. </tr>
  161. <tr>
  162. <td>Password:*</td>
  163. <td>
  164. <input type="password" name="password" class="inputBox" style="width:300px" size="20"></td>
  165. </tr>
  166. <tr>
  167. <td>Confirm password:*</td>
  168. <td>
  169. <input type="password" name="confirmpassword" class="inputBox" style="width:300px" size="20"></td>
  170. </tr>
  171. <tr>
  172. <td>Country:</td>
  173. <td><select size="1" name="country" style="width:300px">
  174. <option value="" selected>&nbsp;</option>
  175. <option value="1">Afghanistan</option>
  176. <option value="2">Albania</option>
  177. <option value="3">Algeria</option>
  178. <option value="4">American Samoa</option>
  179. <option value="5">Andorra</option>
  180. <option value="6">Angola</option>
  181. <option value="7">Anguilla</option>
  182. <option value="8">Antarctica</option>
  183. <option value="9">Antigua and Barbuda</option>
  184. <option value="10">Argentina</option>
  185. <option value="11">Armenia</option>
  186. <option value="12">Aruba</option>
  187. <option value="13">Australia</option>
  188. <option value="14">Austria</option>
  189. <option value="15">Azerbaijan</option>
  190. <option value="16">Bahamas</option>
  191. <option value="17">Bahrain</option>
  192. <option value="18">Bangladesh</option>
  193. <option value="19">Barbados</option>
  194. <option value="20">Belarus</option>
  195. <option value="21">Belgium</option>
  196. <option value="22">Belize</option>
  197. <option value="23">Benin</option>
  198. <option value="24">Bermuda</option>
  199. <option value="25">Bhutan</option>
  200. <option value="26">Bolivia</option>
  201. <option value="27">Bosnia and Herzegowina</option>
  202. <option value="28">Botswana</option>
  203. <option value="29">Bouvet Island</option>
  204. <option value="30">Brazil</option>
  205. <option value="31">British Indian Ocean Territory</option>
  206. <option value="32">Brunei Darussalam</option>
  207. <option value="33">Bulgaria</option>
  208. <option value="34">Burkina Faso</option>
  209. <option value="35">Burundi</option>
  210. <option value="36">Cambodia</option>
  211. <option value="37">Cameroon</option>
  212. <option value="38">Canada</option>
  213. <option value="39">Cape Verde</option>
  214. <option value="40">Cayman Islands</option>
  215. <option value="41">Central African Republic</option>
  216. <option value="42">Chad</option>
  217. <option value="43">Chile</option>
  218. <option value="44">China</option>
  219. <option value="45">Christmas Island</option>
  220. <option value="46">Cocos (Keeling) Islands</option>
  221. <option value="47">Colombia</option>
  222. <option value="48">Comoros</option>
  223. <option value="49">Congo</option>
  224. <option value="50">Cook Islands</option>
  225. <option value="51">Costa Rica</option>
  226. <option value="52">Cote D&#39;Ivoire</option>
  227. <option value="53">Croatia</option>
  228. <option value="54">Cuba</option>
  229. <option value="55">Cyprus</option>
  230. <option value="56">Czech Republic</option>
  231. <option value="57">Denmark</option>
  232. <option value="58">Djibouti</option>
  233. <option value="59">Dominica</option>
  234. <option value="60">Dominican Republic</option>
  235. <option value="61">East Timor</option>
  236. <option value="62">Ecuador</option>
  237. <option value="63">Egypt</option>
  238. <option value="64">El Salvador</option>
  239. <option value="65">Equatorial Guinea</option>
  240. <option value="66">Eritrea</option>
  241. <option value="67">Estonia</option>
  242. <option value="68">Ethiopia</option>
  243. <option value="69">Falkland Islands (Malvinas)</option>
  244. <option value="70">Faroe Islands</option>
  245. <option value="71">Fiji</option>
  246. <option value="72">Finland</option>
  247. <option value="73">France</option>
  248. <option value="74">France, Metropolitan</option>
  249. <option value="75">French Guiana</option>
  250. <option value="76">French Polynesia</option>
  251. <option value="77">French Southern Territories</option>
  252. <option value="78">Gabon</option>
  253. <option value="79">Gambia</option>
  254. <option value="80">Georgia</option>
  255. <option value="81">Germany</option>
  256. <option value="82">Ghana</option>
  257. <option value="83">Gibraltar</option>
  258. <option value="84">Greece</option>
  259. <option value="85">Greenland</option>
  260. <option value="86">Grenada</option>
  261. <option value="87">Guadeloupe</option>
  262. <option value="88">Guam</option>
  263. <option value="89">Guatemala</option>
  264. <option value="90">Guinea</option>
  265. <option value="91">Guinea-bissau</option>
  266. <option value="92">Guyana</option>
  267. <option value="93">Haiti</option>
  268. <option value="94">Heard and Mc Donald Islands</option>
  269. <option value="95">Honduras</option>
  270. <option value="96">Hong Kong</option>
  271. <option value="97">Hungary</option>
  272. <option value="98">Iceland</option>
  273. <option value="99">India</option>
  274. <option value="100">Indonesia</option>
  275. <option value="101">Iran (Islamic Republic of)</option>
  276. <option value="102">Iraq</option>
  277. <option value="103">Ireland</option>
  278. <option value="104">Israel</option>
  279. <option value="105">Italy</option>
  280. <option value="106">Jamaica</option>
  281. <option value="107">Japan</option>
  282. <option value="108">Jordan</option>
  283. <option value="109">Kazakhstan</option>
  284. <option value="110">Kenya</option>
  285. <option value="111">Kiribati</option>
  286. <option value="112">Korea, Democratic People&#39;s Republic of</option>
  287. <option value="113">Korea, Republic of</option>
  288. <option value="114">Kuwait</option>
  289. <option value="115">Kyrgyzstan</option>
  290. <option value="116">Lao People&#39;s Democratic Republic</option>
  291. <option value="117">Latvia</option>
  292. <option value="118">Lebanon</option>
  293. <option value="119">Lesotho</option>
  294. <option value="120">Liberia</option>
  295. <option value="121">Libyan Arab Jamahiriya</option>
  296. <option value="122">Liechtenstein</option>
  297. <option value="123">Lithuania</option>
  298. <option value="124">Luxembourg</option>
  299. <option value="125">Macau</option>
  300. <option value="126">Macedonia, The Former Yugoslav Republic of</option>
  301. <option value="127">Madagascar</option>
  302. <option value="128">Malawi</option>
  303. <option value="129">Malaysia</option>
  304. <option value="130">Maldives</option>
  305. <option value="131">Mali</option>
  306. <option value="132">Malta</option>
  307. <option value="133">Marshall Islands</option>
  308. <option value="134">Martinique</option>
  309. <option value="135">Mauritania</option>
  310. <option value="136">Mauritius</option>
  311. <option value="137">Mayotte</option>
  312. <option value="138">Mexico</option>
  313. <option value="139">Micronesia, Federated States of</option>
  314. <option value="140">Moldova, Republic of</option>
  315. <option value="141">Monaco</option>
  316. <option value="142">Mongolia</option>
  317. <option value="143">Montserrat</option>
  318. <option value="144">Morocco</option>
  319. <option value="145">Mozambique</option>
  320. <option value="146">Myanmar</option>
  321. <option value="147">Namibia</option>
  322. <option value="148">Nauru</option>
  323. <option value="149">Nepal</option>
  324. <option value="150">Netherlands</option>
  325. <option value="151">Netherlands Antilles</option>
  326. <option value="152">New Caledonia</option>
  327. <option value="153">New Zealand</option>
  328. <option value="154">Nicaragua</option>
  329. <option value="155">Niger</option>
  330. <option value="156">Nigeria</option>
  331. <option value="157">Niue</option>
  332. <option value="158">Norfolk Island</option>
  333. <option value="159">Northern Mariana Islands</option>
  334. <option value="160">Norway</option>
  335. <option value="161">Oman</option>
  336. <option value="162">Pakistan</option>
  337. <option value="163">Palau</option>
  338. <option value="164">Panama</option>
  339. <option value="165">Papua New Guinea</option>
  340. <option value="166">Paraguay</option>
  341. <option value="167">Peru</option>
  342. <option value="168">Philippines</option>
  343. <option value="169">Pitcairn</option>
  344. <option value="170">Poland</option>
  345. <option value="171">Portugal</option>
  346. <option value="172">Puerto Rico</option>
  347. <option value="173">Qatar</option>
  348. <option value="174">Reunion</option>
  349. <option value="175">Romania</option>
  350. <option value="176">Russian Federation</option>
  351. <option value="177">Rwanda</option>
  352. <option value="178">Saint Kitts and Nevis</option>
  353. <option value="179">Saint Lucia</option>
  354. <option value="180">Saint Vincent and the Grenadines</option>
  355. <option value="181">Samoa</option>
  356. <option value="182">San Marino</option>
  357. <option value="183">Sao Tome and Principe</option>
  358. <option value="184">Saudi Arabia</option>
  359. <option value="185">Senegal</option>
  360. <option value="186">Seychelles</option>
  361. <option value="187">Sierra Leone</option>
  362. <option value="188">Singapore</option>
  363. <option value="189">Slovakia (Slovak Republic)</option>
  364. <option value="190">Slovenia</option>
  365. <option value="191">Solomon Islands</option>
  366. <option value="192">Somalia</option>
  367. <option value="193">South Africa</option>
  368. <option value="194">South Georgia and the South Sandwich Islands</option>
  369. <option value="195">Spain</option>
  370. <option value="196">Sri Lanka</option>
  371. <option value="197">St. Helena</option>
  372. <option value="198">St. Pierre and Miquelon</option>
  373. <option value="199">Sudan</option>
  374. <option value="200">Suriname</option>
  375. <option value="201">Svalbard and Jan Mayen Islands</option>
  376. <option value="202">Swaziland</option>
  377. <option value="203">Sweden</option>
  378. <option value="204">Switzerland</option>
  379. <option value="205">Syrian Arab Republic</option>
  380. <option value="206">Taiwan</option>
  381. <option value="207">Tajikistan</option>
  382. <option value="208">Tanzania, United Republic of</option>
  383. <option value="209">Thailand</option>
  384. <option value="210">Togo</option>
  385. <option value="211">Tokelau</option>
  386. <option value="212">Tonga</option>
  387. <option value="213">Trinidad and Tobago</option>
  388. <option value="214">Tunisia</option>
  389. <option value="215">Turkey</option>
  390. <option value="216">Turkmenistan</option>
  391. <option value="217">Turks and Caicos Islands</option>
  392. <option value="218">Tuvalu</option>
  393. <option value="219">Uganda</option>
  394. <option value="220">Ukraine</option>
  395. <option value="221">United Arab Emirates</option>
  396. <option value="222">United Kingdom</option>
  397. <option value="223">United States</option>
  398. <option value="224">United States Minor Outlying Islands</option>
  399. <option value="225">Uruguay</option>
  400. <option value="226">Uzbekistan</option>
  401. <option value="227">Vanuatu</option>
  402. <option value="228">Vatican City State (Holy See)</option>
  403. <option value="229">Venezuela</option>
  404. <option value="230">Viet Nam</option>
  405. <option value="231">Virgin Islands (British)</option>
  406. <option value="232">Virgin Islands (U.S.)</option>
  407. <option value="233">Wallis and Futuna Islands</option>
  408. <option value="234">Western Sahara</option>
  409. <option value="235">Yemen</option>
  410. <option value="236">Yugoslavia</option>
  411. <option value="237">Zaire</option>
  412. <option value="238">Zambia</option>
  413. <option value="239">Zimbabwe</option>
  414. </select></td>
  415. </tr>
  416. <tr>
  417. <td>State:</td>
  418. <td>
  419. <input type="text" name="state" class="inputBox" style="width:300px" size="20" maxlength="50" value="[+state+]"></td>
  420. </tr>
  421. <tr>
  422. <td>Zip:</td>
  423. <td>
  424. <input type="text" name="zip" class="inputBox" style="width:300px" maxlength="50" size="20" value="[+zip+]"></td>
  425. </tr>
  426. <?php if ($useCaptcha){ ?>
  427. <tr>
  428. <td valign="top">Form code:*</td>
  429. <td>
  430. <input type="text" name="formcode" class="inputBox" style="width:150px" size="20">
  431. <a href="[+action+]"><img align="top" src="[(site_manager_url)]includes/veriword.php?rand=<?php echo rand(); ?>" width="148" height="60" alt="If you have trouble reading the code, click on the code itself to generate a new random code." style="border: 1px solid #003399"></a>
  432. </td>
  433. </tr>
  434. <?php } ?>
  435. <tr>
  436. <td colspan="2">&nbsp;* - Indicates required fields</td>
  437. </tr>
  438. </table>
  439. </td>
  440. </tr>
  441. <tr>
  442. <td align="right">
  443. <input type="submit" value="Submit" name="cmdwebsignup" />
  444. <input type="reset" value="Reset" name="cmdreset" />
  445. </td>
  446. </tr>
  447. </table>
  448. </form>
  449. <script language="javascript" type="text/javascript">
  450. var id = "[+country+]";
  451. var f = document.websignupfrm;
  452. var i = parseInt(id);
  453. if (!isNaN(i)) f.country.options[i].selected = true;
  454. </script>
  455. <hr>
  456. <!-- notification section -->
  457. <span style="font-weight:bold;">Signup completed successfully</span><br />
  458. Your account was successfully created.<br />
  459. A copy of your signup information was sent to your email address.<br /><br />
  460. <?php
  461. $t = ob_get_contents();
  462. ob_end_clean();
  463. return $t;
  464. }
  465. ?>