Profile
MAJ is an Open Source, PHP-based content management system (CMS) that can be deployed as a blog, bulletin or message board, Internet forum, and wiki. It is extensible via PHP panels and is HTML5 and CSS3 ready.
Git
This blob has been accessed 840 times via Git panel.

  1. <?php
  2.  
  3. if (file_exists("data/lite.txt")) {
  4.         exit();
  5. }
  6.  
  7. if (!file_exists("data/reg.txt")) {
  8.         exit();
  9. }
  10.  
  11. error_reporting(E_ERROR);
  12.  
  13.         function stripslashes_array($data) {
  14.                 if (is_array($data)) {
  15.                         foreach ($data as $key => $value) {
  16.                                 $data[$key] = stripslashes_array($value);
  17.                         }
  18.                         return $data;
  19.                 }
  20.                 else {
  21.                         return stripslashes($data);
  22.                 }
  23.         }
  24.         $_REQUEST = stripslashes_array($_REQUEST);
  25. }
  26.  
  27. if (isset($_POST['go']) and ($_POST['go'] == "index")) {
  28.         header("Location: .");
  29. }
  30.  
  31. if (file_exists("data/offset.txt")) {
  32.         $offset = file_get_contents("data/offset.txt");
  33. }
  34. else {
  35.         $offset = 0;
  36. }
  37.  
  38. if (file_exists("data/bb-min-age.txt")) {
  39.         $minage = file_get_contents("data/bb-min-age.txt");
  40. }
  41. else {
  42.         $minage = 5;
  43. }
  44.  
  45. if (file_exists("data/bb-max-age.txt")) {
  46.         $maxage = file_get_contents("data/bb-max-age.txt");
  47. }
  48. else {
  49.         $maxage = 125;
  50. }
  51.  
  52. ?>
  53.  
  54. <title>Register</title>
  55.  
  56. <style>
  57.  
  58. body {
  59.         color: #666666;
  60.         margin: 10px;
  61.         padding: 0px;
  62.         text-align: left;
  63.         font-family: <?php
  64.                                 if (file_exists("data/fonts/body.txt")) {
  65.                                         $font_body = file_get_contents("data/fonts/body.txt");
  66.                                         echo "{$font_body},";
  67.                                 }
  68.         ?> arial, helvetica, sans-serif;
  69.         background-color: #FFFFFF;
  70. }
  71.  
  72. * {
  73.         font-size: 11px;
  74. }
  75.  
  76. a {
  77.         font-weight: bold;
  78.         text-decoration: none;
  79. }
  80.  
  81. a:link, a:visited {
  82.         color: #666666;
  83. }
  84.  
  85. a:hover {
  86.         color: #336699;
  87. }
  88.  
  89. a:active {
  90.         color: #336699;
  91. }
  92.  
  93. .input {        
  94.         color: #666666;
  95.         background: #ffffff;
  96.         border: #999999 solid 1px;
  97.         width: 300px;
  98.         font-family: <?php
  99.                                 if (file_exists("data/fonts/input.txt")) {
  100.                                         $font_input = file_get_contents("data/fonts/input.txt");
  101.                                         echo "$font_input,";
  102.                                 }
  103.         ?> arial, helvetica, sans-serif;
  104.         font-size: 11px;
  105.         font-weight: normal;
  106. }
  107.  
  108. .bd {  
  109.         color: #666666;
  110.         background: #ffffff;
  111.         border: #999999 solid 1px;
  112.         width: 98px;
  113.         font-family: <?php
  114.                                 if (file_exists("data/fonts/input.txt")) {
  115.                                         $font_input = file_get_contents("data/fonts/input.txt");
  116.                                         echo "$font_input,";
  117.                                 }
  118.         ?> arial, helvetica, sans-serif;
  119.         font-size: 11px;
  120.         font-weight: normal;
  121. }
  122.  
  123. </style>
  124.  
  125. <?php
  126.  
  127. function str_rand($length = 8, $seeds = 'abcdefghijklmnopqrstuvwxyz0123456789') {
  128.         $str = '';
  129.         $seeds_count = strlen($seeds);
  130.        
  131.         list($usec, $sec) = explode(' ', microtime());
  132.         $seed = (float) $sec + ((float) $usec * 100000);
  133.         mt_srand($seed);
  134.        
  135.         for ($i = 0; $length > $i; $i++) {
  136.                 $str .= $seeds{mt_rand(0, $seeds_count - 1)};
  137.         }
  138.        
  139.         return $str;
  140. }
  141.  
  142. function rmdirr($recurse_dirname) {
  143.  
  144.         if (!file_exists($recurse_dirname)) {
  145.                 return false;
  146.         }
  147.  
  148.         if (is_file($recurse_dirname)) {
  149.                 return unlink($recurse_dirname);
  150.         }
  151.  
  152.         $recurse_dir = dir($recurse_dirname);
  153.  
  154.         while (false !== $recurse_entry = $recurse_dir->read()) {
  155.  
  156.                 if ($recurse_entry == '.' || $recurse_entry == '..') {
  157.                         continue;
  158.                 }
  159.  
  160.                 rmdirr("$recurse_dirname/$recurse_entry");
  161.         }
  162.  
  163.         $recurse_dir->close();
  164.         return rmdir($recurse_dirname);
  165. }
  166.  
  167. if (isset($_REQUEST['username']) and !empty($_REQUEST['username']) and isset($_REQUEST['key']) and !empty($_REQUEST['key']) and isset($_REQUEST['action']) and !empty($_REQUEST['action']) and ereg('^[^./][^/]*$', $_REQUEST['username'])) {
  168.  
  169.         $username = $_REQUEST['username'];
  170.  
  171.         if (file_exists("data/members/confirmed/$username") and ($_REQUEST['key'] == file_get_contents("data/members/confirmed/$username/key.txt"))) {
  172.                 if ($_REQUEST['action'] == "approve") {
  173.                         unlink("data/members/confirmed/$username/key.txt");
  174.                         $timestamp = date("YmdHis", time() + $offset);
  175.                         $fp_timestamp_txt = fopen("data/members/confirmed/$username/timestamp.txt","w");
  176.                         fwrite($fp_timestamp_txt,$timestamp);
  177.                         fclose($fp_timestamp_txt);
  178.                         if (!file_exists("data/members/active")) {
  179.                                 mkdir("data/members/active");
  180.                         }
  181.                         rename("data/members/confirmed/$username","data/members/active/$username");
  182.  
  183.                         $password = str_rand(16);
  184.                        
  185.                         /* Fun with crypt! */
  186.                         $passwd = sha1($password);
  187.                         $passwd = md5($passwd);
  188.                         $passwd = crypt($passwd, $passwd);
  189.  
  190.                         $fp_passwd_txt = fopen("data/members/active/$username/password.txt","w");
  191.                         fwrite($fp_passwd_txt,$passwd);
  192.                         fclose($fp_passwd_txt);
  193.  
  194.                         $firstname = file_get_contents("data/members/active/$username/firstname.txt");
  195.                         $lastname = file_get_contents("data/members/active/$username/lastname.txt");
  196.                         $email = file_get_contents("data/members/active/$username/email.txt");
  197.                         $from_email = file_get_contents("data/email.txt");
  198.  
  199.                         $mailer = 'MAJ/2.0 (PHP/' . phpversion() . ')';
  200.  
  201.                         $sig_author = file_get_contents("data/author.txt");
  202.  
  203.                         $sig_url = $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . "/";
  204.                         $sig_url = str_replace('//', '/', $sig_url);
  205.                         $sig_url = "http://" . $sig_url;
  206.  
  207.                         $registered_notice = "$firstname $lastname ($email), AKA $username, has been successfully registered at {$sig_url}.";
  208.                         $registered_notice = wordwrap($registered_notice);
  209.  
  210.                         $password_notice = "Hi $firstname,\n\nYour membership at $sig_url has been activated.\n\nThe initial password for \"$username\" is \"$password\" (case-sensitive). Please change this as soon as possible. For security reasons, your password on record is encrypted - you're the only one who knows what it is.\n\nIf you need further assistance, please send email to $from_email.\n\nThanks!\n\n--\n$sig_author\n$sig_url\n";
  211.  
  212.                         $password_notice = wordwrap($password_notice);
  213.  
  214.                         $email_from = '"' . $sig_author . '" <' . $from_email . '>';
  215.                         $email_to =  '"' . "$firstname $lastname" . '" <' . $email . '>';
  216.  
  217.                         mail($email_from, "registration notice ($email)", $registered_notice,
  218.                                 "From: $email_from\r\n" .
  219.                                 "Reply-To: $email_from\r\n" .
  220.                                 "X-Mailer: $mailer");
  221.  
  222.                         mail($email_to, "password notice ($username)", $password_notice,
  223.                                 "From: $email_from\r\n" .
  224.                                 "Reply-To: $email_from\r\n" .
  225.                                 "X-Mailer: $mailer");
  226.  
  227.                         $fp_new_txt = fopen("data/bb-new.txt","w");
  228.                         fwrite($fp_new_txt,$username);
  229.                         fclose($fp_new_txt);
  230.  
  231.                         echo "<p><font style=\"font-size: 12px;\"><b>Approved</b></font></p><p>The e-mail address ";
  232.                         readfile("data/members/active/$username/email.txt");
  233.                         echo " has been registered.<br>Click <a href=index.php>here</a> to go to the index page.</p>";
  234.                 }
  235.  
  236.                 if ($_REQUEST['action'] == "deny") {
  237.                         rmdirr("data/members/confirmed/$username");
  238.                         echo "<p><font style=\"font-size: 12px;\"><b>Denied</b></font></p><p>The e-mail address ";
  239.                         readfile("data/members/active/$username/email.txt");
  240.                         echo " will not be registered.<br>Registration request deleted.<br>Click <a href=index.php>here</a> to go to the index page.</p>";
  241.                 }
  242.  
  243.         }
  244.         exit();
  245. }
  246.  
  247. if (isset($_REQUEST['username']) and !empty($_REQUEST['username']) and isset($_REQUEST['key']) and !empty($_REQUEST['key']) and ereg('^[^./][^/]*$', $_REQUEST['username'])) {
  248.  
  249.         $username = $_REQUEST['username'];
  250.  
  251.         if (file_exists("data/members/pending/$username") and ($_REQUEST['key'] == file_get_contents("data/members/pending/$username/key.txt"))) {
  252.  
  253.                 $firstname = file_get_contents("data/members/pending/$username/firstname.txt");
  254.                 $lastname = file_get_contents("data/members/pending/$username/lastname.txt");
  255.                 $email = file_get_contents("data/members/pending/$username/email.txt");
  256.                 $from_email = file_get_contents("data/email.txt");
  257.  
  258.                 $mailer = 'MAJ/2.0 (PHP/' . phpversion() . ')';
  259.  
  260.                 $sig_url = $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . "/";
  261.                 $sig_url = str_replace('//', '/', $sig_url);
  262.                 $sig_url = "http://" . $sig_url;
  263.  
  264.                 $sig_author = file_get_contents("data/author.txt");
  265.  
  266.                 unlink("data/members/pending/$username/key.txt");
  267.  
  268.                 $timestamp = date("YmdHis", time() + $offset);
  269.  
  270.                 $fp_timestamp_txt = fopen("data/members/pending/$username/timestamp.txt","w");
  271.                 fwrite($fp_timestamp_txt,$timestamp);
  272.                 fclose($fp_timestamp_txt);
  273.  
  274.                 if (!file_exists("data/xapp.txt")) {
  275.                         if (!file_exists("data/members/confirmed")) {
  276.                                 mkdir("data/members/confirmed");
  277.                         }
  278.                         rename("data/members/pending/$username","data/members/confirmed/$username");
  279.  
  280.                         $key = str_rand(40);
  281.  
  282.                         $fp_key_txt = fopen("data/members/confirmed/$username/key.txt","w");
  283.                         fwrite($fp_key_txt,$key);
  284.                         fclose($fp_key_txt);
  285.  
  286.                         $confirmation_notice = "$firstname $lastname, AKA $username, successfully confirmed the e-mail address $email for registration at {$sig_url}.\n\nVisit the link below to approve this registration:\n\n{$sig_url}reg.php?username=$username&key=$key&action=approve\n\nVisit the link below to deny this registration:\n\n{$sig_url}reg.php?username=$username&key=$key&action=deny\n\nYou can also approve or deny pending registration requests at a later time by logging on to your blog.";
  287.                         $confirmation_notice = wordwrap($confirmation_notice);
  288.  
  289.                         $email_from = '"' . $sig_author . '" <' . $from_email . '>';
  290.  
  291.                         mail($email_from, "confirmation notice ($email)", $confirmation_notice,
  292.                                 "From: $email_from\r\n" .
  293.                                 "Reply-To: $email_from\r\n" .
  294.                                 "X-Mailer: $mailer");
  295.                 }
  296.                 else {
  297.                         if (!file_exists("data/members/active")) {
  298.                                 mkdir("data/members/active");
  299.                         }
  300.                         rename("data/members/pending/$username","data/members/active/$username");
  301.                         $registered_notice = "$firstname $lastname ($email), AKA $username, has been successfully registered at {$sig_url}.";
  302.                         $registered_notice = wordwrap($registered_notice);
  303.  
  304.                         $email_from = '"' . $sig_author . '" <' . $from_email . '>';
  305.  
  306.                         mail($email_from, "registration notice ($email)", $registered_notice,
  307.                                 "From: $email_from\r\n" .
  308.                                 "Reply-To: $email_from\r\n" .
  309.                                 "X-Mailer: $mailer");
  310.  
  311.                         $password = str_rand(16);
  312.                        
  313.                         /* Fun with crypt! */
  314.                         $passwd = sha1($password);
  315.                         $passwd = md5($passwd);
  316.                         $passwd = crypt($passwd, $passwd);
  317.  
  318.                         $fp_passwd_txt = fopen("data/members/active/$username/password.txt","w");
  319.                         fwrite($fp_passwd_txt,$passwd);
  320.                         fclose($fp_passwd_txt);
  321.  
  322.                         $firstname = file_get_contents("data/members/active/$username/firstname.txt");
  323.                         $lastname = file_get_contents("data/members/active/$username/lastname.txt");
  324.                         $email = file_get_contents("data/members/active/$username/email.txt");
  325.                         $from_email = file_get_contents("data/email.txt");
  326.  
  327.                         $mailer = 'MAJ/2.0 (PHP/' . phpversion() . ')';
  328.  
  329.                         $sig_author = file_get_contents("data/author.txt");
  330.  
  331.                         $sig_url = $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . "/";
  332.                         $sig_url = str_replace('//', '/', $sig_url);
  333.                         $sig_url = "http://" . $sig_url;
  334.  
  335.                         $password_notice = "Hi $firstname,\n\nYour membership at $sig_url has been activated.\n\nThe initial password for \"$username\" is \"$password\" (case-sensitive). Please change this as soon as possible. For security reasons, your password on record is encrypted - you're the only one who knows what it is.\n\nIf you need further assistance, please send email to $from_email.\n\nThanks!\n\n--\n$sig_author\n$sig_url\n";
  336.  
  337.                         $password_notice = wordwrap($password_notice);
  338.  
  339.                         $email_from = '"' . $sig_author . '" <' . $from_email . '>';
  340.                         $email_to =  '"' . "$firstname $lastname" . '" <' . $email . '>';
  341.  
  342.                         mail($email_to, "password notice ($username)", $password_notice,
  343.                                 "From: $email_from\r\n" .
  344.                                 "Reply-To: $email_from\r\n" .
  345.                                 "X-Mailer: $mailer");
  346.  
  347.                         $fp_new_txt = fopen("data/bb-new.txt","w");
  348.                         fwrite($fp_new_txt,$username);
  349.                         fclose($fp_new_txt);
  350.                        
  351.                 }
  352.  
  353.                 echo "<p><font style=\"font-size: 12px;\"><b>Thanks!</b></font></p><p>You have successfully verified your e-mail address.<br>";
  354.  
  355.                 if (file_exists("data/xapp.txt")) {
  356.                         echo "You are now a registered member on this site.";
  357.                 }
  358.                 else {
  359.                         echo "Your membership will be activated as soon as your registration is approved.";
  360.                 }
  361.  
  362.                 echo "<br>Click <a href=index.php>here</a> to go to the index page.</p>";
  363.  
  364.         }
  365.  
  366.         exit();
  367. }
  368.  
  369. if ($_POST['submit'] == "1") {
  370.  
  371.         $check_members = array_merge(glob("data/members/active/*"),glob("data/members/confirmed/*"),glob("data/members/pending/*"));
  372.        
  373.         $err_reg = "0";
  374.  
  375.         if (!isset($_REQUEST['username']) or empty($_REQUEST['username'])) {
  376.                 $err_reg = $err_reg + 1;
  377.                 $err_username = "This field is required.";
  378.                 $err_username = "<td><img src=\"images/widget.x.png\" border=\"0\" width=\"14\" height=\"14\"></td><td>$err_username</td>";
  379.         }
  380.         else {
  381.                 $username = strip_tags($_REQUEST['username']);
  382.                 $username = htmlentities($username, ENT_NOQUOTES);
  383.                 $username = trim($username);
  384.                 $username = str_replace(" ","_",$username);
  385.                 $username = strtolower($username);
  386.                
  387.                 $err_username = "<td><img src=\"images/widget.ok.png\" border=\"0\" width=\"14\" height=\"14\"></td><td>$username</td>";
  388.        
  389.                 if (($username == "all") or ereg('^\.', $username) or ereg('\.$', $username) or ereg('@', $username)) {
  390.                         $err_reg = $err_reg + 1;
  391.                         $err_username = "The username $username is not allowed on this site.";
  392.                         $err_username = "<td><img src=\"images/widget.x.png\" border=\"0\" width=\"14\" height=\"14\"></td><td>$err_username</td>";
  393.                 }
  394.  
  395.                 if (preg_match("/\b$username\b/i", file_get_contents("data/bb-reserved.txt"))) {
  396.                         $err_reg = $err_reg + 1;
  397.                         $err_username = "The username $username is reserved, please try again.";
  398.                         $err_username = "<td><img src=\"images/widget.x.png\" border=\"0\" width=\"14\" height=\"14\"></td><td>$err_username</td>";
  399.                 }
  400.  
  401.                 if (file_exists("data/members/pending/$username") or file_exists("data/members/confirmed/$username") or file_exists("data/members/active/$username") or ($username == file_get_contents("data/username.txt"))) {
  402.                         $err_reg = $err_reg + 1;
  403.                         $err_username = "The username $username is already taken, please try again.";
  404.                         $err_username = "<td><img src=\"images/widget.x.png\" border=\"0\" width=\"14\" height=\"14\"></td><td>$err_username</td>";
  405.                 }
  406.         }
  407.  
  408.         if (!isset($_REQUEST['firstname']) or empty($_REQUEST['firstname'])) {
  409.                 $err_reg = $err_reg + 1;
  410.                 $err_firstname = "This field is required.";
  411.                 $err_firstname = "<td><img src=\"images/widget.x.png\" border=\"0\" width=\"14\" height=\"14\"></td><td>$err_firstname</td>";
  412.         }
  413.         else {
  414.                 $firstname = strip_tags($_POST['firstname']);
  415.                 $firstname = htmlentities($firstname, ENT_NOQUOTES);
  416.                 $firstname = trim($firstname);
  417.                 $firstname = strtolower($firstname);           
  418.                 $firstname = ucwords($firstname);
  419.                
  420.                 $err_firstname = "<td><img src=\"images/widget.ok.png\" border=\"0\" width=\"14\" height=\"14\"></td><td>$firstname</td>";
  421.         }
  422.  
  423.         if (!isset($_REQUEST['lastname']) or empty($_REQUEST['lastname'])) {
  424.                 $err_reg = $err_reg + 1;
  425.                 $err_lastname = "This field is required.";
  426.                 $err_lastname = "<td><img src=\"images/widget.x.png\" border=\"0\" width=\"14\" height=\"14\"></td><td>$err_lastname</td>";
  427.         }
  428.         else {
  429.                 $lastname = strip_tags($_POST['lastname']);
  430.                 $lastname = htmlentities($lastname, ENT_NOQUOTES);
  431.                 $lastname = trim($lastname);
  432.                 $lastname = strtolower($lastname);
  433.                 $lastname = ucwords($lastname);
  434.  
  435.                 $err_lastname = "<td><img src=\"images/widget.ok.png\" border=\"0\" width=\"14\" height=\"14\"></td><td>$lastname</td>";
  436.         }
  437.        
  438.         if (isset($firstname) and isset($lastname)) {
  439.        
  440.                 if ((strtolower($firstname) . " " . strtolower($lastname)) == strtolower(file_get_contents("data/author.txt"))) {
  441.                         $err_reg = $err_reg + 1;
  442.                         $err_firstname = "$firstname $lastname is already registered.";
  443.                         $err_firstname = "<td><img src=\"images/widget.x.png\" border=\"0\" width=\"14\" height=\"14\"></td><td>$err_firstname</td>";
  444.                         $err_lastname = $err_firstname;
  445.                 }
  446.        
  447.                 foreach ($check_members as $check_member) {
  448.                
  449.                         if ((strtolower($firstname) == strtolower(file_get_contents("$check_member/firstname.txt"))) and (strtolower($lastname) == strtolower(file_get_contents("$check_member/lastname.txt")))) {
  450.                                 $err_reg = $err_reg + 2;
  451.                                 $err_firstname = "$firstname $lastname is already registered.";
  452.                                 $err_firstname = "<td><img src=\"images/widget.x.png\" border=\"0\" width=\"14\" height=\"14\"></td><td>$err_firstname</td>";
  453.                                 $err_lastname = $err_firstname;
  454.                         }
  455.                 }
  456.         }
  457.  
  458.         if (!isset($_POST['email']) or empty($_POST['email'])) {
  459.                 $err_reg = $err_reg + 1;
  460.                 $err_email = "This field is required.";
  461.                 $err_email = "<td><img src=\"images/widget.x.png\" border=\"0\" width=\"14\" height=\"14\"></td><td>$err_email</td>";
  462.         }
  463.         else { 
  464.                 $email = strip_tags($_POST['email']);
  465.                 $email = htmlentities($email, ENT_NOQUOTES);
  466.                 $email = trim($email);
  467.                 $email = strtolower($email);
  468.                 $email = str_replace(" ","",$email);
  469.  
  470.                 $err_email = "<td><img src=\"images/widget.ok.png\" border=\"0\" width=\"14\" height=\"14\"></td><td>$email</td>";
  471.  
  472.                 if (!ereg("@", $email) or !ereg("\.", $email) or ereg('^\.', $email) or ereg('\.$', $email)) {
  473.                         $err_reg = $err_reg + 1;
  474.                         $err_email = "The email address $email is invalid.";
  475.                         $err_email = "<td><img src=\"images/widget.x.png\" border=\"0\" width=\"14\" height=\"14\"></td><td>$err_email</td>";
  476.                 }
  477.  
  478.                 if (preg_match("/\b$email\b/i", file_get_contents("data/bb-banned.txt"))) {
  479.                         $err_reg = $err_reg + 1;
  480.                         $err_email = "The email address $email is not allowed on this site.";
  481.                         $err_email = "<td><img src=\"images/widget.x.png\" border=\"0\" width=\"14\" height=\"14\"></td><td>$err_email</td>";
  482.                 }
  483.                
  484.                 if ($email == file_get_contents("data/email.txt")) {
  485.                         $err_reg = $err_reg + 1;
  486.                         $err_email = "The email address $email is already in use.";
  487.                         $err_email = "<td><img src=\"images/widget.x.png\" border=\"0\" width=\"14\" height=\"14\"></td><td>$err_email</td>";
  488.                 }
  489.                
  490.                 foreach ($check_members as $check_member) {
  491.                
  492.                         if ($email == file_get_contents("$check_member/email.txt")) {
  493.                                 $err_reg = $err_reg + 1;
  494.                                 $err_email = "The email address $email is already in use.";
  495.                                 $err_email = "<td><img src=\"images/widget.x.png\" border=\"0\" width=\"14\" height=\"14\"></td><td>$err_email</td>";                          
  496.                         }
  497.                 }
  498.         }
  499.  
  500.         if (!isset($_POST['bd_year']) or empty($_POST['bd_year']) or !isset($_POST['bd_month']) or empty($_POST['bd_month']) or !isset($_POST['bd_day']) or empty($_POST['bd_day']) or !is_numeric($_POST['bd_year']) or !is_numeric($_POST['bd_month']) or !is_numeric($_POST['bd_day'])or (strlen($_POST['bd_year']) > "4") or (strlen($_POST['bd_month']) > "2") or (strlen($_POST['bd_day']) > "2") or ($_POST['bd_month'] < 1) or ($_POST['bd_month'] > 12) or ($_POST['bd_day'] < 1) or ($_POST['bd_day'] > 31) or (date("Y", time() + $offset) < $_POST['bd_year']) or ((date("Y", time() + $offset) == $_POST['bd_year']) and (date("m", time() + $offset) < $_POST['bd_month'])) or ((date("Y", time() + $offset) == $_POST['bd_year']) and (date("m", time() + $offset) == $_POST['bd_month']) and (date("d", time() + $offset) < $_POST['bd_day']))) {
  501.                 $err_reg = $err_reg + 1;
  502.                 $err_bday = "The date you entered is invalid.";
  503.                 $err_bday = "<td><img src=\"images/widget.x.png\" border=\"0\" width=\"14\" height=\"14\"></td><td>$err_bday</td>";
  504.         }
  505.         else {
  506.                 if ((date("m", time() + $offset) == $_POST['bd_month']) and (date("d", time() + $offset) == $_POST['bd_day'])) {
  507.                         $err_bday = "<td><img src=\"images/widget.ok.png\" border=\"0\" width=\"14\" height=\"14\"></td><td>Happy Birthday!</td>";
  508.                 }
  509.                 else {
  510.                         $err_bday = "<td><img src=\"images/widget.ok.png\" border=\"0\" width=\"14\" height=\"14\"></td><td>{$_POST['bd_year']} {$_POST['bd_month']} {$_POST['bd_day']}</td>";
  511.                 }
  512.                
  513.                 if ((date("Y", time() + $offset) - $_POST['bd_year']) > $maxage) {
  514.                         $err_reg = $err_reg + 1;
  515.                         $err_bday = "You are too old.";
  516.                         $err_bday = "<td><img src=\"images/widget.x.png\" border=\"0\" width=\"14\" height=\"14\"></td><td>$err_bday</td>";
  517.                 }
  518.        
  519.                 if ((date("Y", time() + $offset) - $_POST['bd_year']) < $minage) {
  520.                         $err_reg = $err_reg + 1;
  521.                         $err_bday = "You are too young.";
  522.                         $err_bday = "<td><img src=\"images/widget.x.png\" border=\"0\" width=\"14\" height=\"14\"></td><td>$err_bday</td>";
  523.                 }
  524.         }
  525.  
  526.         if (!isset($_POST['country']) or empty($_POST['country'])) {
  527.                 $err_reg = $err_reg + 1;
  528.                 $err_country = "This field is required.";
  529.                 $err_country = "<td><img src=\"images/widget.x.png\" border=\"0\" width=\"14\" height=\"14\"></td><td>$err_country</td>";
  530.         }
  531.         else {
  532.                 $country = trim($_POST['country']);
  533.                 $country = strtoupper($country);
  534.                 $err_country = "<td><img src=\"images/widget.ok.png\" border=\"0\" width=\"14\" height=\"14\"></td><td>$country</td>";
  535.         }
  536.  
  537.         if (!isset($_POST['city']) or empty($_POST['city'])) {
  538.                 $err_reg = $err_reg + 1;
  539.                 $err_city = "This field is required.";
  540.                 $err_city = "<td><img src=\"images/widget.x.png\" border=\"0\" width=\"14\" height=\"14\"></td><td>$err_city</td>";
  541.         }
  542.         else {
  543.                 $city = strip_tags($_POST['city']);
  544.                 $city = htmlentities($city, ENT_NOQUOTES);
  545.                 $city = trim($city);
  546.                 $city = strtolower($city);
  547.                 $city = ucwords($city);
  548.  
  549.                 $err_city = "<td><img src=\"images/widget.ok.png\" border=\"0\" width=\"14\" height=\"14\"></td><td>$city</td>";
  550.         }
  551.  
  552.         if (!isset($_POST['captcha_get']) or empty($_POST['captcha_get']) or !isset($_POST['captcha_put']) or empty($_POST['captcha_put'])) {
  553.                 $err_reg = $err_reg + 1;
  554.                 $err_captcha = "This field is required.";
  555.                 $err_captcha = "<td><img src=\"images/widget.x.png\" border=\"0\" width=\"14\" height=\"14\"></td><td>$err_captcha</td>";
  556.         }
  557.         else {
  558.                 if ($_POST['captcha_get'] != $_POST['captcha_put']) {
  559.  
  560.                         $err_reg = $err_reg + 1;
  561.                
  562.                         if (file_exists("data/scaptcha.txt")) {
  563.                                 $err_captcha = "The solution you entered is incorrect.";
  564.                         }
  565.                         else {
  566.                                 $err_captcha = "The registration code you entered is incorrect.";
  567.                         }
  568.        
  569.                         $err_captcha = "<td><img src=\"images/widget.x.png\" border=\"0\" width=\"14\" height=\"14\"></td><td>$err_captcha</td>";
  570.                 }
  571.  
  572.                 if ($_POST['captcha_get'] == $_POST['captcha_put']) {
  573.                         $err_captcha = "<td><img src=\"images/widget.ok.png\" border=\"0\" width=\"14\" height=\"14\"></td><td>{$_POST['captcha_put']}</td>";
  574.                 }
  575.         }
  576.  
  577.         if ($err_reg < 1) {
  578.  
  579.                 if (!file_exists("data/members")) {
  580.                         mkdir("data/members");
  581.                 }
  582.  
  583.                 if (!file_exists("data/members/pending")) {
  584.                         mkdir("data/members/pending");
  585.                 }
  586.        
  587.                 mkdir("data/members/pending/$username");
  588.  
  589.                 $fp_firstname_txt = fopen("data/members/pending/$username/firstname.txt","w");
  590.                 fwrite($fp_firstname_txt,$firstname);
  591.                 fclose($fp_firstname_txt);
  592.  
  593.                 $fp_lastname_txt = fopen("data/members/pending/$username/lastname.txt","w");
  594.                 fwrite($fp_lastname_txt,$lastname);
  595.                 fclose($fp_lastname_txt);
  596.  
  597.                 $fp_email_txt = fopen("data/members/pending/$username/email.txt","w");
  598.                 fwrite($fp_email_txt,$email);
  599.                 fclose($fp_email_txt);
  600.  
  601.                 $bday = $_POST['bd_year'] . $_POST['bd_month'] . $_POST['bd_day'];
  602.                 $fp_bday_txt = fopen("data/members/pending/$username/bday.txt","w");
  603.                 fwrite($fp_bday_txt,$bday);
  604.                 fclose($fp_bday_txt);
  605.  
  606.                 if (isset($_POST['url']) and !empty($_POST['url']) and (ereg("\.", $_POST['url']))) {
  607.                         $url = str_replace('http://', '', $_POST['url']);
  608.                         $url = strtolower($url);
  609.                         $url = trim($url);
  610.                         $url = 'http://' . $url;
  611.                         $url = str_replace(" ","",$url);
  612.                         $url = htmlentities($url, ENT_NOQUOTES);
  613.                         $fp_url_txt = fopen("data/members/pending/$username/url.txt","w");
  614.                         fwrite($fp_url_txt,$url);
  615.                         fclose($fp_url_txt);
  616.                 }
  617.  
  618.                 $fp_country_txt = fopen("data/members/pending/$username/country.txt","w");
  619.                 fwrite($fp_country_txt,$country);
  620.                 fclose($fp_country_txt);
  621.  
  622.                 $fp_city_txt = fopen("data/members/pending/$username/city.txt","w");
  623.                 fwrite($fp_city_txt,$city);
  624.                 fclose($fp_city_txt);
  625.  
  626.                 $key = str_rand(40);
  627.  
  628.                 $fp_key_txt = fopen("data/members/pending/$username/key.txt","w");
  629.                 fwrite($fp_key_txt,$key);
  630.                 fclose($fp_key_txt);
  631.  
  632.                 $mailer = 'MAJ/2.0 (PHP/' . phpversion() . ')';
  633.  
  634.                 $sig_url = $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . "/";
  635.                 $sig_url = str_replace('//', '/', $sig_url);
  636.                 $sig_url = "http://" . $sig_url;
  637.  
  638.                 $sig_author = file_get_contents("data/author.txt");
  639.                 $from_email = file_get_contents("data/email.txt");
  640.  
  641.                 $confirm_thanks = "Hi $firstname,\n\nWe have received a registration request for $email to $sig_url. To confirm this, simply visit this link:\n\n{$sig_url}reg.php?username=$username&key=$key\n\nIf you do not wish to be a member, please disregard this message. If you think you are being maliciously registered, or have any other questions, send them to $from_email.\n\nThanks!\n\n--\n$sig_author\n$sig_url\n";
  642.  
  643.                 $confirm_thanks = wordwrap($confirm_thanks);
  644.  
  645.                 $email_from = '"' . $sig_author . '" <' . $from_email . '>';
  646.                 $email_to =  '"' . "$firstname $lastname" . '" <' . $email . '>';
  647.  
  648.                 mail($email_to, "confirm $key", $confirm_thanks,
  649.                                 "From: $email_from\r\n" .
  650.                                 "Reply-To: $email_from\r\n" .
  651.                                 "X-Mailer: $mailer");
  652.                                
  653.                 unset($err_username);
  654.                 unset($err_firstname);
  655.                 unset($err_lastname);
  656.                 unset($err_email);
  657.                 unset($err_bday);
  658.                 unset($err_country);
  659.                 unset($err_city);
  660.                 unset($err_captcha);
  661.                
  662.                 echo "<p><font style=\"font-size: 12px;\"><b>Thanks!</b></font></p><p>Your registration request was successfully submitted. Check your $email inbox for details.<br>You can register another e-mail address below or click <a href=index.php>here</a> to go to the index page.</p>";
  663.         }
  664. }
  665.  
  666. ?>
  667.  
  668. <p><b>Register</b></p><p>
  669.  
  670. <?php
  671.  
  672. if (!file_exists("data/scaptcha.txt")) {
  673.  
  674.         $captcha_rand = str_rand(7);
  675.  
  676.         echo "Complete all required fields and enter <b>$captcha_rand</b> as your registration code below.";
  677. }
  678. else {
  679.         $scaptcha_x = rand(1,10);
  680.         $scaptcha_y = rand(1,10);
  681.         $scaptcha_z = rand(1,10);      
  682.  
  683.         $captcha_rand = $scaptcha_x + $scaptcha_y + $scaptcha_z;
  684.  
  685.         echo "Complete all required fields and solve the simple equation below.";
  686. }
  687.  
  688. if ($err_reg == 1) {
  689.         echo " $err_reg error detected, please try again.";
  690. }
  691.  
  692. if ($err_reg > 1) {
  693.         echo " $err_reg errors detected, please try again.";
  694. }
  695.  
  696. echo "</p>";
  697.  
  698. if (file_exists("data/bb-disclaimer.txt")) {
  699.         echo "<p>";
  700.         readfile("data/bb-disclaimer.txt");
  701.         echo "</p>";
  702. }
  703.  
  704. ?>
  705.  
  706. <table border="0" cellspacing="2" cellpadding="0">
  707. <form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
  708. <input type=hidden name=captcha_get value="<?php echo $captcha_rand; ?>">
  709. <tr><td width=100><p>Username</p></td><td colspan=3><input required autofocus class=input type=text autocomplete=off name=username maxlength=30></td><?php echo $err_username; ?></tr>
  710. <tr><td width=100><p>First Name</p></td><td width=300 colspan=3><input required class=input type=text autocomplete=off name=firstname maxlength=30></td><?php echo $err_firstname; ?></tr>
  711. <tr><td width=100><p>Last Name</p></td><td colspan=3><input required class=input type=text autocomplete=off name=lastname maxlength=30></td><?php echo $err_lastname; ?></tr>
  712. <tr><td width=100><p>E-mail Address</p></td><td colspan=3><input required class=input type=email autocomplete=off name=email maxlength=60></td><?php echo $err_email; ?></tr>
  713. <tr><td width=100><p>Birthdate</p></td><td><input required class=bd type=text autocomplete=off name=bd_year maxlength=4 value=YYYY></td><td><input required class=bd type=text autocomplete=off name=bd_month maxlength=2 value=MM></td><td><input required class=bd type=text autocomplete=off name=bd_day maxlength=2 value=DD></td><?php echo $err_bday; ?></tr>
  714. <tr><td width=100><p>Website (optional)</p></td><td colspan=3><input class=input type=url autocomplete=off name=url maxlength=300></td></tr>
  715.  
  716. <tr><td width=100><p>Country</p></td><td colspan=3>
  717.  
  718. <select class="input" name="country" required>
  719. <option value=""></option>
  720. <option value="AF">Afghanistan</option>
  721. <option value="AX">Aland (Ahvenanmaa) Islands</option>
  722. <option value="AL">Albania</option>
  723. <option value="DZ">Algeria</option>
  724. <option value="AS">American Samoa</option>
  725. <option value="AD">Andorra</option>
  726. <option value="AO">Angola</option>
  727. <option value="AI">Anguilla</option>
  728. <option value="AQ">Antarctica</option>
  729. <option value="AG">Antigua & Barbuda</option>
  730. <option value="AR">Argentina</option>
  731. <option value="AM">Armenia</option>
  732. <option value="AW">Aruba</option>
  733. <option value="AU">Australia</option>
  734. <option value="AT">Austria</option>
  735. <option value="AZ">Azerbaijan</option>
  736. <option value="BS">Bahamas</option>
  737. <option value="BH">Bahrain</option>
  738. <option value="BD">Bangladesh</option>
  739. <option value="BB">Barbados</option>
  740. <option value="BY">Belarus</option>
  741. <option value="BE">Belgium</option>
  742. <option value="BZ">Belize</option>
  743. <option value="BJ">Benin</option>
  744. <option value="BM">Bermuda</option>
  745. <option value="BT">Bhutan</option>
  746. <option value="BO">Bolivia</option>
  747. <option value="BA">Bosnia & Herzegovina</option>
  748. <option value="BW">Botswana</option>
  749. <option value="BV">Bouvet Island</option>
  750. <option value="BR">Brazil</option>
  751. <option value="IO">British Indian Ocean Territory</option>
  752. <option value="BN">Brunei Darussalam</option>
  753. <option value="BG">Bulgaria</option>
  754. <option value="BF">Burkina Faso</option>
  755. <option value="BI">Burundi</option>
  756. <option value="KH">Cambodia</option>
  757. <option value="CM">Cameroon</option>
  758. <option value="CA">Canada</option>
  759. <option value="CV">Cape Verde</option>
  760. <option value="KY">Cayman Islands</option>
  761. <option value="CF">Central African Republic</option>
  762. <option value="TD">Chad</option>
  763. <option value="CL">Chile</option>
  764. <option value="CN">China</option>
  765. <option value="CX">Christmas Island</option>
  766. <option value="CC">Cocos (Keeling) Islands</option>
  767. <option value="CO">Colombia</option>
  768. <option value="KM">Comoros</option>
  769. <option value="CG">Congo</option>
  770. <option value="CD">Congo (Democratic Republic)</option>
  771. <option value="CK">Cook Islands</option>
  772. <option value="CR">Costa Rica</option>
  773. <option value="CI">Cote D'Ivoire</option>
  774. <option value="HR">Croatia</option>
  775. <option value="CU">Cuba</option>
  776. <option value="CY">Cyprus</option>
  777. <option value="CZ">Czech Republic</option>
  778. <option value="DK">Denmark</option>
  779. <option value="DJ">Djibouti</option>
  780. <option value="DM">Dominica</option>
  781. <option value="DO">Dominican Republic</option>
  782. <option value="EC">Ecuador</option>
  783. <option value="EG">Egypt</option>
  784. <option value="SV">El Salvador</option>
  785. <option value="GQ">Equatorial Guinea</option>
  786. <option value="ER">Eritrea</option>
  787. <option value="EE">Estonia</option>
  788. <option value="ET">Ethiopia</option>
  789. <option value="FK">Falkland Islands (Malvinas)</option>
  790. <option value="FO">Faroe Islands</option>
  791. <option value="FJ">Fiji</option>
  792. <option value="FI">Finland</option>
  793. <option value="FR">France</option>
  794. <option value="GF">French Guiana</option>
  795. <option value="PF">French Polynesia</option>
  796. <option value="TF">French Southern Territories</option>
  797. <option value="GA">Gabon</option>
  798. <option value="GM">Gambia</option>
  799. <option value="GE">Georgia</option>
  800. <option value="DE">Germany</option>
  801. <option value="GH">Ghana</option>
  802. <option value="GI">Gibraltar</option>
  803. <option value="GR">Greece</option>
  804. <option value="GL">Greenland</option>
  805. <option value="GD">Grenada</option>
  806. <option value="GP">Guadeloupe</option>
  807. <option value="GU">Guam</option>
  808. <option value="GT">Guatemala</option>
  809. <option value="GG">Guernsey</option>
  810. <option value="GN">Guinea</option>
  811. <option value="GW">Guinea-Bissau</option>
  812. <option value="GY">Guyana</option>
  813. <option value="HT">Haiti</option>
  814. <option value="HM">Heard Island & Mcdonald Islands</option>
  815. <option value="VA">Holy See (Vatican City State)</option>
  816. <option value="HN">Honduras</option>
  817. <option value="HK">Hong Kong</option>
  818. <option value="HU">Hungary</option>
  819. <option value="IS">Iceland</option>
  820. <option value="IN">India</option>
  821. <option value="ID">Indonesia</option>
  822. <option value="IR">Iran (Islamic Republic)</option>
  823. <option value="IQ">Iraq</option>
  824. <option value="IE">Ireland</option>
  825. <option value="IM">Isle Of Man</option>
  826. <option value="IL">Israel</option>
  827. <option value="IT">Italy</option>
  828. <option value="JM">Jamaica</option>
  829. <option value="JP">Japan</option>
  830. <option value="JE">Jersey</option>
  831. <option value="JO">Jordan</option>
  832. <option value="KZ">Kazakhstan</option>
  833. <option value="KE">Kenya</option>
  834. <option value="KI">Kiribati</option>
  835. <option value="KP">Korea (Democratic People's Republic)</option>
  836. <option value="KR">Korea (Republic)</option>
  837. <option value="KW">Kuwait</option>
  838. <option value="KG">Kyrgyzstan</option>
  839. <option value="LA">Laos</option>
  840. <option value="LV">Latvia</option>
  841. <option value="LB">Lebanon</option>
  842. <option value="LS">Lesotho</option>
  843. <option value="LR">Liberia</option>
  844. <option value="LY">Libyan Arab Jamahiriya</option>
  845. <option value="LI">Liechtenstein</option>
  846. <option value="LT">Lithuania</option>
  847. <option value="LU">Luxembourg</option>
  848. <option value="MO">Macao</option>
  849. <option value="MK">Macedonia (Yugoslav Republic)</option>
  850. <option value="MG">Madagascar</option>
  851. <option value="MW">Malawi</option>
  852. <option value="MY">Malaysia</option>
  853. <option value="MV">Maldives</option>
  854. <option value="ML">Mali</option>
  855. <option value="MT">Malta</option>
  856. <option value="MH">Marshall Islands</option>
  857. <option value="MQ">Martinique</option>
  858. <option value="MR">Mauritania</option>
  859. <option value="MU">Mauritius</option>
  860. <option value="YT">Mayotte</option>
  861. <option value="MX">Mexico</option>
  862. <option value="FM">Micronesia (Federated States)</option>
  863. <option value="MD">Moldova (Republic)</option>
  864. <option value="MC">Monaco</option>
  865. <option value="MN">Mongolia</option>
  866. <option value="MS">Montserrat</option>
  867. <option value="MA">Morocco</option>
  868. <option value="MZ">Mozambique</option>
  869. <option value="MM">Myanmar</option>
  870. <option value="NA">Namibia</option>
  871. <option value="NR">Nauru</option>
  872. <option value="NP">Nepal</option>
  873. <option value="NL">Netherlands</option>
  874. <option value="AN">Netherlands Antilles</option>
  875. <option value="NC">New Caledonia</option>
  876. <option value="NZ">New Zealand</option>
  877. <option value="NI">Nicaragua</option>
  878. <option value="NE">Niger</option>
  879. <option value="NG">Nigeria</option>
  880. <option value="NU">Niue</option>
  881. <option value="NF">Norfolk Island</option>
  882. <option value="MP">Northern Mariana Islands</option>
  883. <option value="NO">Norway</option>
  884. <option value="OM">Oman</option>
  885. <option value="PK">Pakistan</option>
  886. <option value="PW">Palau</option>
  887. <option value="PS">Palestinian Territory</option>
  888. <option value="PA">Panama</option>
  889. <option value="PG">Papua New Guinea</option>
  890. <option value="PY">Paraguay</option>
  891. <option value="PE">Peru</option>
  892. <option value="PH">Philippines</option>
  893. <option value="PN">Pitcairn</option>
  894. <option value="PL">Poland</option>
  895. <option value="PT">Portugal</option>
  896. <option value="PR">Puerto Rico</option>
  897. <option value="QA">Qatar</option>
  898. <option value="RE">Reunion</option>
  899. <option value="RO">Romania</option>
  900. <option value="RU">Russian Federation</option>
  901. <option value="RW">Rwanda</option>
  902. <option value="SH">Saint Helena</option>
  903. <option value="KN">Saint Kitts & Nevis</option>
  904. <option value="LC">Saint Lucia</option>
  905. <option value="PM">Saint Pierre & Miquelon</option>
  906. <option value="VC">Saint Vincent & The Grenadines</option>
  907. <option value="WS">Samoa</option>
  908. <option value="SM">San Marino</option>
  909. <option value="ST">Sao Tome & Principe</option>
  910. <option value="SA">Saudi Arabia</option>
  911. <option value="SN">Senegal</option>
  912. <option value="CS">Serbia & Montenegro</option>
  913. <option value="SC">Seychelles</option>
  914. <option value="SL">Sierra Leone</option>
  915. <option value="SG">Singapore</option>
  916. <option value="SK">Slovakia</option>
  917. <option value="SI">Slovenia</option>
  918. <option value="SB">Solomon Islands</option>
  919. <option value="SO">Somalia</option>
  920. <option value="ZA">South Africa</option>
  921. <option value="GS">South Georgia & The South Sandwich Islands</option>
  922. <option value="ES">Spain</option>
  923. <option value="LK">Sri Lanka</option>
  924. <option value="SD">Sudan</option>
  925. <option value="SR">Suriname</option>
  926. <option value="SJ">Svalbard & Jan Mayen</option>
  927. <option value="SZ">Swaziland</option>
  928. <option value="SE">Sweden</option>
  929. <option value="CH">Switzerland</option>
  930. <option value="SY">Syrian Arab Republic</option>
  931. <option value="TW">Taiwan</option>
  932. <option value="TJ">Tajikistan</option>
  933. <option value="TZ">Tanzania (United Republic)</option>
  934. <option value="TH">Thailand</option>
  935. <option value="TL">Timor-Leste</option>
  936. <option value="TG">Togo</option>
  937. <option value="TK">Tokelau</option>
  938. <option value="TO">Tonga</option>
  939. <option value="TT">Trinidad & Tobago</option>
  940. <option value="TN">Tunisia</option>
  941. <option value="TR">Turkey</option>
  942. <option value="TM">Turkmenistan</option>
  943. <option value="TC">Turks & Caicos Islands</option>
  944. <option value="TV">Tuvalu</option>
  945. <option value="UG">Uganda</option>
  946. <option value="UA">Ukraine</option>
  947. <option value="AE">United Arab Emirates</option>
  948. <option value="GB">United Kingdom</option>
  949. <option value="US">United States</option>
  950. <option value="UM">United States Minor Outlying Islands</option>
  951. <option value="UY">Uruguay</option>
  952. <option value="UZ">Uzbekistan</option>
  953. <option value="VU">Vanuatu</option>
  954. <option value="VE">Venezuela</option>
  955. <option value="VN">Vietnam</option>
  956. <option value="VG">Virgin Islands (British)</option>
  957. <option value="VI">Virgin Islands (US)</option>
  958. <option value="WF">Wallis & Futuna</option>
  959. <option value="EH">Western Sahara</option>
  960. <option value="YE">Yemen</option>
  961. <option value="ZM">Zambia</option>
  962. <option value="ZW">Zimbabwe</option>
  963. </select>
  964.  
  965. </td><?php echo $err_country; ?></tr>
  966.  
  967. <tr><td width=100><p>City or Municipality</p></td><td colspan=3><input required class=input type=text autocomplete=off name=city maxlength=100></td><?php echo $err_city; ?></tr>
  968.  
  969. <tr><td width=100><p><?php
  970.  
  971. if (!file_exists("data/scaptcha.txt")) {
  972.         echo "Registration Code";
  973. }
  974. else {
  975.         echo "$scaptcha_x + $scaptcha_y + $scaptcha_z =";
  976. }
  977.  
  978. ?></p></td><td colspan=3><input required class=input type=text autocomplete=off name=captcha_put maxlength=7></td><?php echo $err_captcha; ?></tr>
  979. <tr><td><p></p></td><td colspan=3><input type=hidden name=submit value=1><input class=input type=submit value="click here to submit your registration"></td></tr>
  980. </form>
  981. <form enctype="multipart/form-data" method="post">
  982. <tr><td><p></p></td><td colspan=3><input type="hidden" name="go" value="index"><input class=input type=submit value="click here to go to the index page"></td></tr>
  983. </form>
  984.  
Credits
Sunday, Sep 18, 2005, 12:00 AM (Revision 11 - Thursday, Jul 14, 2011, 7:30 PM)
Open Source enables software developers to stand on the shoulders of giants instead of reinventing the wheel, so to speak. Kudos and many thanks to the folks who made their work freely available for reuse in MAJ.

read more
Bugs and Exploits
Friday, Aug 26, 2005, 12:00 AM (Revision 23 - Wednesday, May 29, 2013, 5:25 AM)
Although MAJ started as a family project, care has been taken to make it as "safe" as possible. With more people now working on MAJ, bugs and exploitable code may sometimes slip in. We invite you to poke around and see if you can find any. Generally, there are two things you can do when you find a MAJ or PHP-related bug or exploit:

1. Take advantage of it. But hey, what's so exciting about messing up someone's blog? Ho-hum, right?
2. Report it here so that we can work on a fix and make MAJ better.

read more
Search
Download
MAJ 2.0
75 files
35524 downloads
MAJ 1.0
26 files
14406 downloads
MAJ 0.14
45 files
37089 downloads