public static function register_subscription() { /* Controleren of alle vereiste velden ingevuld zijn. */ if (!empty($_POST['firstname']) && !empty($_POST['lastname']) && !empty($_POST['street']) && !empty($_POST['house_nr']) && !empty($_POST['zipcode']) && !empty($_POST['city']) && !empty($_POST['bank_account']) && !empty($_POST['email']) && !empty($_POST['passwd_sha512']) && !empty($_POST['passwd_conf_sha512'])) { /* Kijken of minimaal een van de twee telefoonnummers ingevuld is. */ if (!empty($_POST['phone_home']) || !empty($_POST['phone_mob'])) { /* Controleren of het bank rekening nummer een getal is. */ if (is_numeric($_POST['bank_account']) && strlen($_POST['bank_account']) == 6) { /* Controleren of het huis nummer een getal is. */ if (is_numeric($_POST['house_nr'])) { /* Controleren of het e-mailadres klopt. */ if (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { /* Kijken of beide ingevulde wachtwoorden overeen komen. */ if ($_POST['passwd_sha512'] == $_POST['passwd_conf_sha512']) { /* Escape de heel $_POST array, en plaats het resultaat terug in $_POST. */ $_POST = Database::escape_array($_POST); /* Select query uitvoeren op het ingevulde email. */ $check_mail = Database::query("SELECT id FROM customer WHERE email = '" . $_POST['email'] . "' LIMIT 1"); /* Kijken of de query is gelukt. */ if ($check_mail) { /* Kijken of het email niet al bestaat. */ if ($check_mail->num_rows == 0) { /* Haal minimaal bedrag op wat de klant moet kunnen betalen. */ $min_balance = Settings::get('citypark_subscription_month_cost') * Settings::get('citypark_register_min_balance'); /* Voor de zekerheid komma's vervangen met punten. */ $min_balance = str_replace(',', '.', $min_balance); /* Bij de bank controlleren of de gebruiker het minimum bedrag kan betalen. */ if (Bank_api::check($_POST['bank_account'], $min_balance)) { /* Het nieuwe wachtwoord aanmaken. */ $passwd = password_hash($_POST['passwd_sha512'], PASSWORD_DEFAULT, ['cost' => Settings::get('login_passwd_cost')]); /* Het nieuwe wachtwoord base64 encoderen. */ $passwd = base64_encode($passwd); /* Insert query voor een customer. */ $insert_customer = Database::query("INSERT INTO customer (username, password, email, active, register_date) VALUES ('', '" . $passwd . "', '" . $_POST['email'] . "', 0, NOW())"); /* Controleren of de query is gelukt. */ if ($insert_customer) { /* Haal het customer ID op. */ $customer_id = Database::insert_id(); /* Insert query voor customer info. */ $insert_customer_info = Database::query("INSERT INTO customer_info (customer_id, firstname, inserts, lastname, street, house_nr, house_nr_add, city, zipcode, phone_home, phone_mob, bank_account) VALUES (" . $customer_id . ", '" . $_POST['firstname'] . "', " . (!empty($_POST['inserts']) ? '\'' . $_POST['inserts'] . '\'' : 'NULL') . ", '" . $_POST['lastname'] . "', '" . $_POST['street'] . "', " . $_POST['house_nr'] . ", " . (!empty($_POST['house_nr_add']) ? '\'' . $_POST['house_nr_add'] . '\'' : 'NULL') . ", '" . $_POST['city'] . "', '" . $_POST['zipcode'] . "', '" . $_POST['phone_home'] . "', '" . $_POST['phone_mob'] . "', " . $_POST['bank_account'] . ")"); /* Controleren of de insert query is gelukt. */ if ($insert_customer_info) { /* Proberen twee passen op te halen. */ try { /* Haal de passen op. */ $pass_array = Self::get_free_pass(); } catch (Exception $e) { /* Foutmelding gevangen, verwijder de customer uit de database. */ Database::query("DELETE FROM customer WHERE id = " . $customer_id); Database::query("DELETE FROM customer_info WHERE customer_id = " . $customer_id); /* Gooi foutmelding door. */ throw new Exception($e->getMessage()); } /* Maak een nieuw abonneenummer. */ $abonneenummer = Self::new_sub_number(); /* Insert query voor abonnee. */ $insert_subscription = Database::query("INSERT INTO subscription (customer_id, sub_number, start_date) VALUES (" . $customer_id . ", " . $abonneenummer . ", NOW())"); /* Kijken of de insert gelukt is. */ if ($insert_subscription) { /* Haal het abonnee ID op. */ $abonnee_id = Database::insert_id(); /* Maak een random string aan met 96 karakters. */ $activate_key_db = Functions::random_string(96); /* Zet hier het account id voor. */ $activate_key = $customer_id . '-' . $activate_key_db; /* Base64 encode de activate keys. */ $activate_key = base64_encode($activate_key); $activate_key_db = base64_encode($activate_key_db); /* Update de customer, en geef de gebruikersnaam het zelfde als het abonneenummer en sla de activate key op. */ $update_username = Database::query("UPDATE customer SET username = '******', activate_key = '" . Database::escape($activate_key_db) . "' WHERE id = " . $customer_id); /* Kijken of de update query gelukt is. */ if ($update_username) { /* Update de twee RFID kaarten en koppel ze aan het abonnement. */ $update_card_one = Database::query("UPDATE rfid_card SET subscription_id = " . $abonnee_id . ", type_card = 'subscription', in_use = 1, blocked = 0, blocked_reason = NULL, blocked_date = NULL WHERE id = " . Database::escape($pass_array[0])); /* Kijken of de update query is gelukt. */ if ($update_card_one) { /* Update de tweede kaart. */ $update_card_two = Database::query("UPDATE rfid_card SET subscription_id = " . $abonnee_id . ", type_card = 'guest', in_use = 1, blocked = 0, blocked_reason = NULL, blocked_date = NULL WHERE id = " . Database::escape($pass_array[1])); /* Kijken tweede update query is gelukt. */ if ($update_card_two) { /* Betaling maken, en kijken of deze is gelukt. */ if (Payment::pay_subscription($abonneenummer, 1, $_POST['bank_account'], true)) { /* Query om permissies aan account toe te voegen. */ $insert_permission = Database::query("INSERT INTO permission_customer_in_group (customer_id, group_id) VALUES (" . $customer_id . ", " . (int) Database::escape(Settings::get('citypark_standard_group')) . ")"); if ($insert_permission) { /* Probeer het onderstaande. */ try { /* Probeer een mail te sturen. */ Email::send_mail($_POST['email'], 'CityPark - Abonnoment aanvraag', 'Beste ' . $_POST['firstname'] . ' ' . $_POST['lastname'] . ',<br /><br />Op ' . Date('d-m-Y \\o\\m H:i:s') . ' heeft u succesvol een abonnement aangevraagd bij CityPark.<br /><br />Er zijn twee parkeerpassen aan uw abonnement gekoppeld en worden zo snel mogelijk naar uw adres gestuurt. De parkeerpassen die aan uw abonnement zijn gekoppeld hebben de nummers:<br /><i>Abonneepas #' . $pass_array[0] . '</i><br /><i>Gastenpas #' . $pass_array[1] . '</i><br /><br />Om toegang te krijgen tot het klantenpaneel, dient u het account, die aangemaakt is tijdens het aanvragen van het abonnement, te activeren. U kunt uw account activeren door op de onderstaande link te klikken.<br /><a href="' . Config::$base_href . '?activate=' . $activate_key . '">Klik hier om uw account te activeren</a><br /><br />Het gebruikersnaam van uw account is <strong>' . $abonneenummer . '</strong>, en het wachtwoord heeft u zelf ingevuld.<br /><br />Het factuur van uw eerste maandafschiften is te vinden op het klantenpaneel.<br /><br />Uw abonnement is per direct in gegaan, en u kunt de parkeerpassen direct gebruiken wanneer u deze ontvangen heeft. Indien de parkeerpassen verloren raken of gestolen zijn, kunt u deze blokkeren in het klantenpaneel.'); /* Registratie gelukt, return een true. */ return true; } catch (Exception $e) { /* Foutmelding gevangen, gooi deze door. */ throw new Exception($e->getMessage()); } } else { /* Query mislukt, maar omdat de betaling wel gelukt is, laten we het abonnement in de database staan. */ /* Gooi foutmelding. */ throw new Exception('Er is wat fout gegaan bij het toevoegen van de rechten op uw account. Neem a.u.b. contact op.<br />' . Database::error()); } } else { /* Query mislukt, verwijder de customer uit de database. */ Database::query("DELETE FROM customer WHERE id = " . $customer_id); Database::query("UPDATE rfid_card SET type_card = NULL, in_use = 0 WHERE id = " . Database::escape($pass_array[0])); Database::query("UPDATE rfid_card SET type_card = NULL, in_use = 0 WHERE id = " . Database::escape($pass_array[1])); /* Gooi foutmelding door. */ throw new Exception('Er kon geen betaling worden gedaan.'); } } else { /* Query mislukt, verwijder de customer uit de database. */ Database::query("DELETE FROM customer WHERE id = " . $customer_id); Database::query("UPDATE rfid_card SET type_card = NULL, in_use = 0 WHERE id = " . Database::escape($pass_array[0])); /* Gooi foutmelding. */ throw new Exception('[1] Er ging wat fout bij het koppelen van de parkeer passen.<br />' . Database::error()); } } else { /* Query mislukt, verwijder de customer uit de database. */ Database::query("DELETE FROM customer WHERE id = " . $customer_id); /* Gooi foutmelding. */ throw new Exception('[0] Er ging wat fout bij het koppelen van de parkeer passen.<br />' . Database::error()); } } else { /* Query mislukt, verwijder de customer uit de database. */ Database::query("DELETE FROM customer WHERE id = " . $customer_id); /* Gooi foutmelding door. */ throw new Exception('Er ging wat fout tijdens het genereren van uw gebruikersnaam.<br />' . Database::error()); } } else { /* Query mislukt, verwijder de customer uit de database. */ Database::query("DELETE FROM customer WHERE id = " . $customer_id); /* Gooi foutmelding door. */ throw new Exception('Er ging wat fout bij het aanmaken van uw abonnement.<br />' . Database::error()); } } else { /* Om de database schoon te houden, verwijderen we de customer zelf. */ Database::query("DELETE FROM customer WHERE id = " . $customer_id); /* MySQL Foutmelding. */ throw new Exception('Er ging wat fout tijdens het aanmaken van uw account gegevens.<br />' . Database::error()); } } else { /* MySQL Foutmelding. */ throw new Exception('Er ging wat fout tijdens het aanmaken van uw account.<br />' . Database::error()); } } else { /* De klant heeft niet genoeg saldo om te mogen registreren. */ throw new Exception('Het saldo op rekeningnummer \'' . $_POST['bank_account'] . '\' is te laag om de registratie te voltooien.'); } } else { /* Er bestaat al een klant met dit email. */ throw new Exception('Er is al reeds een klant geregistreerd met het ingevulde e-mailadres.'); } } else { /* MySQL Foutmelding. */ throw new Exception('Er ging wat fout tijdens het controleren van uw e-mailadres.<br />' . Database::error()); } } else { /* Wachtwoorden komen niet overeen. */ throw new Exception('De twee ingevulde wachtwoorden komen niet overeen.'); } } else { /* E-mailadres is ongeldig. */ throw new Exception('Het ingevulde e-mailadres is ongeldig.'); } } else { /* Huisnummer is geen getal. */ throw new Exception('Het ingevulde huisnummer is ongeldig.'); } } else { /* Banknummer is geen getal. */ throw new Exception('Het ingevulde rekeningnummer is ongeldig.'); } } else { /* Beide telefoonnummers missen. */ throw new Exception('Minimaal een van de telefoonnummers dient ingevuld te worden.'); } } else { /* Niet alle verplichte velden zijn ingevuld. */ throw new Exception('Niet alle verplichte velden zijn ingevuld.'); } }