diff --git a/components/signup.php b/components/signup.php index 04a5b4140cf364e8bb5f6264eb851163154bcc68..93c395e6fa4891009d970a80ee6f55c4aedc8a92 100644 --- a/components/signup.php +++ b/components/signup.php @@ -11,6 +11,11 @@ $script_path="/home/member/eclipse/signuptests/"; +$override_permission="staff"; + +// is the validation (mostly) overridable +$overridable=isset($session->groups[$permission]); + //set defaults $mode = 'login'; @@ -38,13 +43,15 @@ if(isset($_REQUEST['signupid'])&&isset($_REQUEST['signuppw'])){ $row=$data[0]; // if the id hasnt already been used if(!(isset($row[activated])&&isset($row[username]))){ - // pass on the id and passwd + // pass on the id and passwd and id the validation is overridable $smarty->assign("signupid",$signupid); $smarty->assign("signuppw",$signuppw); + $smarty->assign("overridable",$overridable); $smarty->assign("usertype",$row[type]); // if accepting the form if(isset($_REQUEST['username']) && isset($_REQUEST['realname']) && isset($_REQUEST['email']) && isset($_REQUEST['phone'])){ require_once("../lib/validation.php"); + $override = $overridable && (isset($_POST['override']) && $_POST['override']=="on"); $valid=true; $errors=array(); $fields=array(); @@ -53,42 +60,42 @@ if(isset($_REQUEST['signupid'])&&isset($_REQUEST['signuppw'])){ $errors['username']=$error; } $fields['username']=$_REQUEST['username']; - if(!validSignupEmail($_REQUEST['email'])){ + if(!(validSignupEmail($_REQUEST['email']) || $override)){ $valid=false; $errors['email']=$error; } $fields['email']=$_REQUEST['email']; - if(!validPhone($_REQUEST['phone'])){ + if(!(validPhone($_REQUEST['phone']) || $override)){ $valid=false; $errors['phone']=$error; } $fields['phone']=$_REQUEST['phone']; if($row[type]!=2){ - if(!validAddress($_REQUEST['address'])){ + if(!(validAddress($_REQUEST['address']) || $override)){ $valid=false; $errors['address']=$error; } $fields['address']=$_POST['address']; - if(!validRealName($_REQUEST['realname'])){ + if(!validRealName($_REQUEST['realname'],$override)){ $valid=false; $errors['realname']=$error; } $fields['realname']=$_REQUEST['realname']; } else{ - if(!validRealName($_REQUEST['contact'])){ + if(!(validRealName($_REQUEST['contact'],false) || $override)){ $valid=false; $errors['contact']=$error; } $fields['contact']=$_REQUEST['contact']; - if(!validSocName($_REQUEST['realname'])){ + if(!validSocName($_REQUEST['realname'], $override)){ $valid=false; $errors['realname']=$error; } $fields['realname']=$_REQUEST['realname']; } if($row[type]==1){ - if(!validSID($_REQUEST['studentid'])){ + if(!validSID($_REQUEST['studentid'],$override)){ $valid=false; $errors['studentid']=$error; } diff --git a/components/signupajax.php b/components/signupajax.php index dd455917b3453ccfe29af2f41e2d2609d47f5017..522dd9676bf7b24d87d0d708296115a2a09a4767 100644 --- a/components/signupajax.php +++ b/components/signupajax.php @@ -7,7 +7,7 @@ if (isset($_GET['key'])){ switch($_GET['key']){ case "sid": $sid=$_GET['value']; - if(validSID($sid)){ + if(validSID($sid,false)){ echo "OK:".lookupSID($_GET['value']); } else{ @@ -29,7 +29,7 @@ if (isset($_GET['key'])){ break; case "realname": $realname = $_GET['value']; - if(validRealName($realname)){ + if(validRealName($realname,false)){ echo "OK"; } else{ @@ -38,7 +38,7 @@ if (isset($_GET['key'])){ break; case "socname": $socname = $_GET['value']; - if(validSocName($socname)){ + if(validSocName($socname,false)){ echo "OK"; } else{ diff --git a/htdocs/js/signup.js b/htdocs/js/signup.js index 63f307781db4b961672d2e64f97c49bdef557047..5f784242db70d7d4680b7d9b089cb20376e8c606 100644 --- a/htdocs/js/signup.js +++ b/htdocs/js/signup.js @@ -7,7 +7,7 @@ function validate(){ break; } } - if(valid){ + if(valid || ($('input#override:checked').size()==1)){ $('input#submit').removeAttr("disabled"); } else{ @@ -233,5 +233,6 @@ $(function(){ //validate phone number $("input#phone").change(processPhone); $("textarea#address").change(processAddress); + $("input#override").change(validate); }) diff --git a/lib/validation.php b/lib/validation.php index 37ded2741555fab861a22c5c2e7a872b1add2d38..f8e802c19ae2e31716ca7a921fc117e0be1308b1 100644 --- a/lib/validation.php +++ b/lib/validation.php @@ -148,38 +148,59 @@ function validUsername ($username){ return true; } } -function validSID($SID){ +function validSID($SID,$override){ global $error; - if(!eregi("^[0-9]*$", $SID) || strlen($SID) != 6){ - $error = "Invalid student ID"; - return false; - } - elseif(sidUsed($SID)){ - $error = "A user with that student ID already exsists, email <a href=\"mailto:admin@sucs.org\">admin@sucs.org</a> if this is an error."; - return false; - } - elseif(lookupSID($SID)==" "){ - $error = "Student not found, email<a href=\"mailto:admin@sucs.org\">admin@sucs.org</a> if this is an error."; - return false; + if($override){ + if($SID==""){ + $error = "You MUST provide some sort of student number"; + return false; + } + else{ + return true; + } } else{ - return true; + if(!eregi("^[0-9]*$", $SID) || strlen($SID) != 6){ + $error = "Invalid student ID"; + return false; + } + elseif(sidUsed($SID)){ + $error = "A user with that student ID already exsists, email <a href=\"mailto:admin@sucs.org\">admin@sucs.org</a> if this is an error."; + return false; + } + elseif(lookupSID($SID)==" "){ + $error = "Student not found, email<a href=\"mailto:admin@sucs.org\">admin@sucs.org</a> if this is an error."; + return false; + } + else{ + return true; + } } } -function validRealName($realName){ +function validRealName($realName,$override){ global $error; - //check for enough names for real name (we insist on at least 2 - if(count(explode(" ",$realName)) < 2) - { - $error = "Too few names given, please give at least two."; - return false; - } - //check for a sane realname, see comment below - elseif (!ereg("^([A-Z]([.]+ +[A-Z])*([\']+[A-Z])*[a-z]+[ -]*)+$", $realName)) - { - $error = "Name incorrectly formated, email <a href=\"mailto:admin@sucs.org\">admin@sucs.org</a> if this is an error."; - return false; - } + if($override){ + if($realName==""){ + $error="You MUST provide some sort of name"; + return false; + } + else{ + return true; + } + } + else{ + //check for enough names for real name (we insist on at least 2 + if(count(explode(" ",$realName)) < 2) + { + $error = "Too few names given, please give at least two."; + return false; + } + //check for a sane realname, see comment below + elseif (!ereg("^([A-Z]([.]+ +[A-Z])*([\']+[A-Z])*[a-z]+[ -]*)+$", $realName)) + { + $error = "Name incorrectly formated, email <a href=\"mailto:admin@sucs.org\">admin@sucs.org</a> if this is an error."; + return false; + } /* * This should force sane real names, with capitals for the first letter of each word, * Whist alowing for complex names such as Robin M. O'Leary @@ -203,18 +224,30 @@ function validRealName($realName){ * RObin M O'Leary is not * */ - else{ - return true; + else{ + return true; + } } } -function validSocName($socname){ +function validSocName($socname,$override){ global $error; - if(!ereg('^[A-Z1-9]',$socname) || strlen($socname) < 2){ - $error = "Must start with a capital letter or a number and be more than 1 character"; - return false; + if($override){ + if($socname==""){ + $error="You MUST provide some sort of name"; + return false; + } + else{ + return true; + } } else{ - return true; + if(!ereg('^[A-Z1-9]',$socname) || strlen($socname) < 2){ + $error = "Must start with a capital letter or a number and be more than 1 character"; + return false; + } + else{ + return true; + } } } diff --git a/templates/signup.tpl b/templates/signup.tpl index 57ff3e4fce23c6e18c950d67b542b735cef0d1f8..e2e8cc8590a162727bc027482e66c93775732bf7 100644 --- a/templates/signup.tpl +++ b/templates/signup.tpl @@ -74,7 +74,13 @@ <label for="phone">Phone Number</label> <span class="textinput"><input type="text" id="phone" name="phone" size="30" {if $mode=='re-form'}value='{$fields.phone}'{/if}/></span> <div id="phonemessage"{if $mode=='re-form'}{if isset($errors.phone)} style="color:red">{$errors.phone}{else} style="color:green">OK{/if}{else}>{/if}</div> - </div> + </div> + {if $overridable} + <div class="row" id="overridediv"> + <label for="overridable">Override Validation</label> + <span class="textinput"><input type="checkbox" id="override" name="override" /></span> + </div> + {/if} <input type="hidden" id="signupid" name="signupid" value="{$signupid}" /> <input type="hidden" id="signuppw" name="signuppw" value="{$signuppw}" /> <div class="row" id="submitdiv">