diff --git a/inside/ActionParser.php b/inside/ActionParser.php index bf20c89..bd95502 100644 --- a/inside/ActionParser.php +++ b/inside/ActionParser.php @@ -851,68 +851,79 @@ class ActionParser { } public function _registerMembership() { - $cardno = scriptParam("cardno"); + $id = scriptParam("cardno"); $password = scriptParam("verificationCode"); - if (checkPassword($cardno, $password)) { + + $msa_code = verifyActivationCode($id, $password); + // was the verification successful ? + if (!is_null($msa_code)) { $user = new User(scriptParam("userid")); - if ($user->cardno != NULL) { - $this->_renewMembership(); - return; + if (!is_null($user->getMembercard())) { + // user has a card, only renew membership + return $this->_renewMembership(); } - if ($user->registerMembership($cardno) == true) { - notify("Betalt medlemskap er registrert. Medlemskort vil bli produsert og sendt til din registrerte adresse."); + + if ($user->registerMembership()) { + // mark activation code as used + $msa_code->setUserId($user->getId()); + $msa_code->setUsed(new DateTime()); + $msa_code->store(); + + notify("Betalt medlemskap er registrert. Medlemskort vil bli produsert."); } else { $GLOBALS['extraScriptParams']['page'] = "register-membership"; } } else { - notify("Kortnummer og kortkode passer ikke sammen. Kortnummeret er det som står på kodelappen, ikke det som står på medlemskortet ditt. Vi gjør også oppmerksom på det skilles mellom store og små bokstaver."); + notify("Aktiveringsnummer og kode passer ikke sammen. Kortnummeret er det som står på kodelappen, ikke det som står på medlemskortet ditt. Vi gjør også oppmerksom på det skilles mellom store og små bokstaver."); $GLOBALS['extraScriptParams']['page'] = "register-membership"; $GLOBALS['extraScriptParams']['report-bug'] = "register-membership"; } } public function _registerMembershipPayex() { - $user = new User(scriptParam("userid")); - $cardno = $user->cardno; - $expires = $user->expires; - if ($cardno == NULL) { - if (!$user->registerMembershipPayex()) { - return false; - } - } else { - if (!$user->renewMembershipPayex()) { - return false; - } - } $payment = new Payment(NULL, $_POST); if ($payment->status == "FAILURE") { $GLOBALS['extraScriptParams']['page'] = "register-membership"; - if ($cardno == NULL) { - $user->setCardno("NULL"); - } - $user->setExpires($expires); } else { + $user = new User(scriptParam("userid")); + + // check if user needs a member card + if (is_null($user->getMemberCard())) { + if (!$user->registerMembershipPayex()) { + return false; + } + } else { + if (!$user->renewMembershipPayex()) { + return false; + } + } + $GLOBALS['extraScriptParams']['page'] = "register-payex-transaction-confirm"; $GLOBALS['extraScriptParams']['transactionid'] = $payment->transaction_id; } } public function _renewMembership() { - $cardno = scriptParam("cardno"); + $id = scriptParam("cardno"); $password = scriptParam("verificationCode"); - if ($cardno == "") { - notify("Du må taste inn et kortnummer."); + + if (empty($id)) { + notify("Du må taste inn et aktiveringsnummer."); $GLOBALS['extraScriptParams']['page'] = "renew-membership"; return false; } - if (!validCardno($cardno)) { - notify("Aktiveringsnummeret er allerede registrert."); - $GLOBALS['extraScriptParams']['page'] = "renew-membership"; - return false; - } - if (checkPassword($cardno, $password)) { + + $msa_code = verifyActivationCode($id, $password); + + // was the verification successful ? + if (!is_null($msa_code)) { $user = new User(scriptParam("userid")); - if ($user->renewMembership($cardno) == true) { + if ($user->renewMembership()) { + // mark code as used + $msa_code->setUsed(new DateTime()); + $msa_code->setUserId($user->getId()); + $msa_code->store(); + notify("Fornyelse av medlemskap er registrert. Nytt oblat vil bli sendt til din registrerte adresse."); } else { $GLOBALS['extraScriptParams']['page'] = "renew-membership"; @@ -923,6 +934,22 @@ class ActionParser { $GLOBALS['extraScriptParams']['report-bug'] = "renew-membership"; } } + + protected function verifyActivationCode($id, $password) { + $msa_code = new MembershipActivationCode(); + if ($msa_code->findById($id)) { + if (!is_null($msa_code->getUsed())) { + // code has been used allready, and is therefore illegal + return null; + } + + if (trim($password) == $msa_code->getCode()) { + // valid password, return object + return $msa_code; + } + } + return null; + } public function _cartCheckout() { $order_id = scriptParam("order_id"); @@ -936,20 +963,20 @@ class ActionParser { $payment->executeRedirect(scriptParam('transaction_id_string'), $order_id); } - public function _transactionReturn() { - $orderRef = scriptParam('orderRef'); - $transaction_id = scriptParam('transactionid'); - $transaction = new Transaction($transaction_id); - $payment = new Payment(); - if ($payment->completeTransaction($orderRef, $transaction_id)) { - $order_id = $transaction->order_id; - $order = new Order($order_id); - $order->setStatus(4); - $order->performOperations(); - $GLOBALS['extraScriptParams']['page'] = "transaction-confirmation"; - $GLOBALS['extraScriptParams']['transactionid'] = $transaction_id; - } - } + public function _transactionReturn() { + $orderRef = scriptParam('orderRef'); + $transaction_id = scriptParam('transactionid'); + $transaction = new Transaction($transaction_id); + $payment = new Payment(); + if ($payment->completeTransaction($orderRef, $transaction_id)) { + $order_id = $transaction->order_id; + $order = new Order($order_id); + $order->setStatus(4); + $order->performOperations(); + $GLOBALS['extraScriptParams']['page'] = "transaction-confirmation"; + $GLOBALS['extraScriptParams']['transactionid'] = $transaction_id; + } + } public function _payexTransaction() { $payment = new Payment(NULL, $_POST); @@ -1007,13 +1034,15 @@ class ActionParser { } public function _grantCardno() { - $user = new User(scriptParam("userid")); - $user->grantCardno(); + //$user = new User(scriptParam("userid")); + //$user->grantCardno(); + notify("Error: ActionParser::_grantCardno() is a deprecated function."); } public function _updateUserHasCard() { - $user = new User(scriptParam("userid")); - $user->setHasCard(1); + //$user = new User(scriptParam("userid")); + //$user->setHasCard(1); + notify("Error: ActionParser::_updateUserHasCard() is a deprecated function."); } public function _updateUserDivisionRequest() { diff --git a/inside/Page.php b/inside/Page.php index 40fb357..eb1f1dc 100644 --- a/inside/Page.php +++ b/inside/Page.php @@ -2117,7 +2117,8 @@ Teksten under er hentet fra kunnskapsdatabasen. Du st Array("id" => 'expired', "title" => "utløpt medlemskap"), Array("id" => 'valid', "title" => "gyldig medlemskap"), Array("id" => 'no-cardno', "title" => "ikke kjøpt medlemskap (etter H05)"), - Array("id" => 'no-card', "title" => "ikke fått medlemskort"), + Array("id" => 'card-not-produced', "title" => "medlemskort ikke produsert"), + Array("id" => 'card-not-delivered', "title" => "kort produsert, ikke levert"), Array("id" => 'no-sticker', "title" => "har kort, mangler oblat"), ); @@ -2490,16 +2491,18 @@ Teksten under er hentet fra kunnskapsdatabasen. Du st $fields[] = Array("label" => "studiested", "type" => "select", "attributes" => Array("name" => "placeOfStudy", "values" => $pos, "disabled" => $readonly, "currentValue" => $user->placeOfStudy)); - if(isAdmin() || checkAuth("perform-update-user-hascard")){ - $fields[] = Array("label" => "har medlemskort", "type" => "select", - "attributes" => Array("name" => "hasCard", "values" => $cardValues, - "disabled" => $readonly, "currentValue" => $user->hasCard)); - }else { - $fields[] = Array("label" => "har medlemskort", "type" => "hidden", - "attributes" => Array("name" => "hasCard", - "disabled" => $readonly, "value" => $user->hasCard)); - - } + if (isAdmin() || checkAuth("perform-update-user-hascard")) { + $fields[] = Array("label" => "har medlemskort", "type" => "select", + "attributes" => Array("name" => "cardProduced", "values" => $cardValues, + "disabled" => $readonly, "currentValue" => $user->getCardProduced())); + } else { + $fields[] = Array("label" => "har medlemskort", "type" => "hidden", + "attributes" => Array("name" => "cardProduced", + "disabled" => $readonly, "value" => $user->getCardProduced())); + } + $fields[] = Array("label" => "har fått utlevert medlemskort", "type" => "hidden", + "attributes" => Array("name" => "cardDelivered", + "disabled" => $readonly, "value" => $user->getCardDelivered())); $form = new Form($title, $enctype, $method, $action, $fields, NULL, $readonly); $form->display(); @@ -3216,8 +3219,13 @@ Teksten under er hentet fra kunnskapsdatabasen. Du st print ""; print ""; - if ($user->hasCard()) print 'ja'; - else print 'nei'; + if ($user->getCardDelivered()) { + print 'ja'; + } elseif ($user->getCardProduced()) { + print 'ja'; + } else { + print 'nei'; + } print ""; print "" . $user->getLastSticker() . ""; @@ -3227,8 +3235,10 @@ Teksten under er hentet fra kunnskapsdatabasen. Du st print ""; print "getId() . "\" />"; if ($user->hasExpired()) { - if (!$user->hasCard()) { + if (!$user->getCardProduced()) { print "forny (produser kort)"; + } elseif (!$user->getCardDelivered()) { + print "lever ut kort"; } else { print ""; print ""; } } else { - if (!$user->hasCard()) { + if (!$user->getCardProduced()) { print "produser kort"; + } elseif (!$user->getCardDelivered()) { + print "lever ut kort"; } elseif (!$user->hasCardSticker()) { print ""; print "getExpiryDate())) . "\" />"; @@ -3254,7 +3266,7 @@ Teksten under er hentet fra kunnskapsdatabasen. Du st print ""; print ""; - if ($user->hasCard()) { + if ($user->getCardDelivered()) { print "produser nytt medlemskort"; } print ""; diff --git a/inside/User.php b/inside/User.php index 7a530ca..7d16ebd 100644 --- a/inside/User.php +++ b/inside/User.php @@ -25,7 +25,8 @@ class User { var $expires; var $division_id_request; var $group_id; - var $hasCard; + var $cardProduced; + var $cardDelivered; var $validAddress; var $lastSticker; @@ -101,7 +102,7 @@ class User { } } else { //ID set, existing user if ($data != NULL) { - //Update existing user + // Update existing user $this->addresstype = isset ($data['addresstype']) ? "int" : "no"; } else { //Retrieve data from backend for display or other actions @@ -119,7 +120,8 @@ class User { } $this->birthdate = $data['birthdate']; - $this->hasCard = $data['hasCard']; + $this->cardProduced = $data['cardProduced']; + $this->cardDelivered = $data['cardDelivered']; $this->validAddress = $data['valid_address']; } @@ -254,8 +256,17 @@ class User { } else { //Update $this->conn->autoCommit(false); - $sql = sprintf("UPDATE din_user SET " . " firstname = %s, " . " lastname = %s, " . " addresstype = %s, " . " email = %s, " . " birthdate = %s, " . " placeOfStudy = %s, " . " hasCard = %s " . "WHERE " . " id = %s", $this->conn->quoteSmart($this->firstname), $this->conn->quoteSmart($this->lastname), $this->conn->quoteSmart($this->addresstype), $this->conn->quoteSmart($this->email == "" ? NULL : $this->email), $this->conn->quoteSmart($this->birthdate), $this->conn->quoteSmart($this->placeOfStudy), $this->conn->quoteSmart($this->hasCard), $this->conn->quoteSmart($this->id)); - + $sql = "UPDATE din_user SET " . + "firstname = " . $this->conn->quoteSmart($this->firstname) . + ", lastname = " . $this->conn->quoteSmart($this->lastname) . + ", addresstype = " . $this->conn->quoteSmart($this->addresstype) . + ", email = " . $this->conn->quoteSmart($this->email == "" ? NULL : $this->email) . + ", birthdate = " . $this->conn->quoteSmart($this->birthdate) . + ", placeOfStudy = " . $this->conn->quoteSmart($this->placeOfStudy) . + ", cardProduced = " . $this->conn->quoteSmart($this->cardProduced) . + ", cardDelivered = " . $this->conn->quoteSmart($this->cardDelivered) . + " WHERE id = " . $this->conn->quoteSmart($this->id); + $result = $this->conn->query($sql); if (DB :: isError($result) == true) { error("Update user: " . $result->toString()); @@ -676,7 +687,7 @@ class User { return false; } $this->conn->autoCommit(false); - $sql = "UPDATE din_user SET " . " hasCard = '0' " . "WHERE " . " id = $this->id"; + $sql = "UPDATE din_user SET cardProduced='0', cardDelivered='0' WHERE id = " . $this->id; $result = $this->conn->query($sql); if (DB :: isError($result) == true) { error($result->toString()); @@ -860,8 +871,48 @@ class User { } } - public function getHasCard() { - return $this->hasCard; + public function getCardProduced() { + return $this->cardProduced; + } + + public function setCardProduced($produced) { + if ($produced) { + $sql = "UPDATE din_user SET cardProduced=1 WHERE id=$this->id"; + $desc = "medlemskort produsert"; + $this->cardProduced = 1; + } else { + $sql = "UPDATE din_user SET cardProduced=0, cardDelivered=0 WHERE id=$this->id"; + $desc = "mangler medlemskort"; + $this->cardProduced = 0; + } + $result = $this->conn->query($sql); + + if (DB :: isError($result) != true) { + $this->_registerUpdate("Medlemskortstatus endret til $desc"); + notify("Medlemskortstatus for " . $this->firstname . " " . $this->lastname . " er endret til " . $desc . ""); + } + } + + public function getCardDelivered() { + return $this->cardDelivered; + } + + public function setCardDelivered($delivered) { + if ($delivered) { + $sql = "UPDATE din_user SET cardDelivered=1 WHERE id=$this->id"; + $desc = "medlemskort utlevert"; + $this->cardDelivered = 1; + } else { + $sql = "UPDATE din_user SET cardDelivered=0 WHERE id=$this->id"; + $desc = "medlemskort ikke utlevert"; + $this->cardDelivered = 0; + } + $result = $this->conn->query($sql); + + if (DB :: isError($result) != true) { + $this->_registerUpdate("Medlemskortstatus endret til $desc"); + notify("Medlemskortstatus for " . $this->firstname . " " . $this->lastname . " er endret til " . $desc . ""); + } } public function hasCardSticker() { @@ -920,20 +971,6 @@ class User { } } - public function setHasCard($value) { - $sql = "UPDATE din_user SET hasCard = $value " . - "WHERE id = $this->id"; - $result = $this->conn->query($sql); - - if (DB :: isError($result) != true) { - $value = ($value == 0) ? "mangler medlemskort" : "har medlemskort"; - - $this->_registerUpdate("Medlemskortstatus endret til $value"); - notify("Medlemskortstatus for " . $this->firstname . " " . $this->lastname . " er endret til " . $value . ""); - User :: updateLastSticker(date("Y")); - } - } - /** * changes validity status of users address * values can be: @@ -1140,13 +1177,28 @@ class User { print " " . $this->lastname . "\n"; print " "; - if (!$this->getHasCard()) { - print "
id . "_hascard_form\" " . "action=\"javascript: setHasCard('" . $this->id . "')\" " . "method=\"post\">"; - print "\n"; + if ($this->cardno == null) { + // User hasn't ordered a card + print "id . "_cardno_form\" action=\"javascript: grantCardNumber('" . $this->id . "')\" " . "method=\"post\">"; + print "\n"; + print "\n"; + print "
"; + } elseif (!$this->getCardProduced()) { + // User's card has been produced, but has not been delivered yet + print "
id . "_cardproduced_form\" " . "action=\"javascript: setCardProduced('" . $this->id . "')\" " . "method=\"post\">"; + print "\n"; print "\n"; print "
"; + } elseif (!$this->getCardDelivered()) { + // User's card has been produced, but has not been delivered yet + print "
id . "_carddelivered_form\" " . "action=\"javascript: setCardDelivered('" . $this->id . "')\" " . "method=\"post\">"; + print "\n"; + print "\n"; + print "
"; + } else { - print "kort mistet?"; + // User has a membercard + //print "kort mistet?"; } print " \n"; @@ -1177,11 +1229,6 @@ class User { print "\n"; print "\n"; print ""; - } else { - print "
id . "_cardno_form\" action=\"javascript: grantCardNumber('" . $this->id . "')\" " . "method=\"post\">"; - print "\n"; - print "\n"; - print "
"; } print ""; print "\n"; @@ -1191,20 +1238,21 @@ class User { print "\n"; print " "; - print "
id . "')\" method=\"post\">"; - print "
"; - print ""; - print ""; - print ""; - print "
"; - print "
"; + if ($this->cardno != NULL) { + print "
id . "')\" method=\"post\">"; + print "
"; + print ""; + print ""; + print ""; + print "
"; + print "
"; + } print "\n"; print " " . $this->getRegistered() . "\n"; @@ -1425,14 +1473,16 @@ class User { elseif (strtotime($this->expires) < strtotime("now")) return "Du har ikke registrert gyldig medlemskap i år (medlemskapet ditt gikk ut " . date("d.m.Y", strtotime($this->expires)) . ")."; elseif (strtotime($this->expires) > strtotime("now")) { - if ($this->hasCard == "1") { + if ($this->getCardDelivered()) { if ($this->lastSticker < date("Y", strtotime($this->expires))) { - return "Du har aktivert medlemskapet ditt, og det vil bli sendt oblat til å klistre på medlemskortet ditt."; + return "Du har aktivert medlemskapet ditt, og du kan hente oblat til å klistre på medlemskortet ditt i bilettluka på Det Norske Studentersamfund."; } else { return "Du har gyldig medlemskap (gyldig til " . date("d. m. Y", strtotime($this->expires)) . ")."; } - } elseif ($this->hasCard == "0") { - return "Medlemskapet ditt er registrert, og medlemskortet ditt for " . date("Y", strtotime($this->expires)) . " produseres. Det tar normalt rundt to uker fra medlemskapet er registrert til du mottar ditt medlemskort."; + } elseif ($this->getCardProduced()) { + return "Medlemskapet ditt for " . date("Y", strtotime($this->expires)) . " er registrert, og medlemskortet ditt ligger klar til henting i billettluka på Det Norske Studentersamfund."; + } else { + return "Medlemskapet ditt er registrert, og medlemskortet ditt for " . date("Y", strtotime($this->expires)) . " produseres."; } } diff --git a/inside/Users.php b/inside/Users.php index 5fe70d5..fef886c 100644 --- a/inside/Users.php +++ b/inside/Users.php @@ -96,11 +96,14 @@ class Users { case 'no-cardno': $expression = "u.cardno IS NULL"; break; - case 'no-card': - $expression = "u.hasCard = 0 AND u.cardno IS NOT NULL"; + case 'card-not-produced': + $expression = "u.cardProduced = 0 AND u.cardno IS NOT NULL"; + break; + case 'card-not-delivered': + $expression = "u.cardProduced = 1 AND u.cardDelivered = 0 AND u.cardno IS NOT NULL"; break; case 'no-sticker': - $expression = "u.hasCard = 1 AND u.expires > NOW() AND u.lastSticker < YEAR(u.expires)"; + $expression = "u.cardDelivered = 1 AND u.expires > NOW() AND u.lastSticker < YEAR(u.expires)"; break; case 'all': $expression = '1'; diff --git a/inside/ajax.js b/inside/ajax.js index 111198f..462162b 100644 --- a/inside/ajax.js +++ b/inside/ajax.js @@ -45,12 +45,12 @@ function grantCardNumber(userid) { oXmlHttp.send(null); } -function setHasCard(userid) { - var form = document.getElementById("user_"+userid+"_hascard_form"); +function setCardProduced(userid) { + var form = document.getElementById("user_"+userid+"_cardproduced_form"); form.style.display = "none"; var oXmlHttp = zXmlHttp.createRequest(); - var sURL = "sethascard.php?userid=" + userid; + var sURL = "setcardproduced.php?userid=" + userid; oXmlHttp.open("get", sURL, true); oXmlHttp.onreadystatechange = function() { if (oXmlHttp.readyState == 4){ @@ -70,6 +70,31 @@ function setHasCard(userid) { oXmlHttp.send(null); } +function setCardDelivered(userid) { + var form = document.getElementById("user_"+userid+"_carddelivered_form"); + form.style.display = "none"; + + var oXmlHttp = zXmlHttp.createRequest(); + var sURL = "setcarddelivered.php?userid=" + userid; + oXmlHttp.open("get", sURL, true); + oXmlHttp.onreadystatechange = function() { + if (oXmlHttp.readyState == 4){ + if (oXmlHttp.status == 200) { + //alert(oXmlHttp.responseXML); + //alert(oXmlHttp.responseText); + var response = oXmlHttp.responseXML.documentElement; + var lastSticker = response.getElementsByTagName('laststicker')[0].firstChild.data; + document.getElementById('user_'+userid+'_laststicker').innerHTML = lastSticker; + + form.parentNode.innerHTML = "Medlemskort er levert"; + }else { + alert("An error occured: " + oXmlHttp.statusText); + } + } + }; + oXmlHttp.send(null); +} + function updateUserExpiry(userid) { var input = document.getElementById("newExpiryDate_"+userid); var value = input.value; diff --git a/inside/includes.php b/inside/includes.php index 9cc8480..ea7f24d 100644 --- a/inside/includes.php +++ b/inside/includes.php @@ -63,6 +63,8 @@ require_once "JobCategory.php"; require_once "JobCategories.php"; require_once "Locations.php"; require_once "Messages.php"; +require_once "MemberCard.php"; +require_once "MembershipActivationCode.php"; require_once "Navigation.php"; require_once "Nordea.php"; require_once "Order.php"; @@ -79,7 +81,11 @@ require_once "Products.php"; require_once "ProgramSelection.php"; require_once "ProgramsSelection.php"; require_once "Transaction.php"; -require_once "User.php"; +//if (getcurrentuser() == 2460) { +// require_once "User_new.php"; +//} else { + require_once "User.php"; +//} require_once "Users.php"; require_once "UserGroupRelationship.php"; require_once "UserGroupRelationships.php"; diff --git a/inside/setcarddelivered.php b/inside/setcarddelivered.php new file mode 100644 index 0000000..e1754f2 --- /dev/null +++ b/inside/setcarddelivered.php @@ -0,0 +1,15 @@ +'); + +require_once "includes.php"; + +$userid = $_GET["userid"]; + +$user = new User($userid); +$user->setCardDelivered(1); +?> + + cardno; ?> + lastSticker; ?> + diff --git a/inside/setcardproduced.php b/inside/setcardproduced.php new file mode 100644 index 0000000..f71b895 --- /dev/null +++ b/inside/setcardproduced.php @@ -0,0 +1,18 @@ +'); + +require_once "includes.php"; + +$userid = $_GET["userid"]; + +$user = new User($userid); +$user->setCardProduced(1); +$user->updateLastSticker(date("Y", strtotime($user->getExpiryDate($user->cardno)))); +$user->sendCardProducedNotifyMail(); + +?> + + cardno; ?> + lastSticker; ?> +