From 326cb874e74a417e84b6c9e9d9ae9b38515aa91b Mon Sep 17 00:00:00 2001 From: Skylar Ittner Date: Sat, 2 Mar 2019 22:48:30 -0700 Subject: [PATCH] Begin conversion to day camp registration system --- database.mwb | Bin 11260 -> 12930 bytes lib/Child.lib.php | 114 ----- lib/Family.lib.php | 291 ----------- nbproject/project.xml | 2 +- .../{submitmembership.php => submit.php} | 14 +- public/index.php | 13 +- public/parts/renew.php | 81 --- public/parts/signup.php | 463 +++--------------- public/parts/template_child_entry.php | 89 ---- public/parts/template_person.php | 267 ++++++++++ public/parts/verify.php | 107 ---- public/static/fontawesome-all.min.js | 5 - public/static/fontawesome.min.js | 1 + public/static/hachelogo.svg | 2 - public/static/material-color.min.css | 7 + public/static/signup.js | 69 ++- public/static/solid.min.js | 1 + public/static/style.css | 17 + settings.template.php | 4 +- 19 files changed, 440 insertions(+), 1107 deletions(-) delete mode 100644 lib/Child.lib.php delete mode 100644 lib/Family.lib.php rename public/actions/{submitmembership.php => submit.php} (97%) delete mode 100644 public/parts/renew.php delete mode 100644 public/parts/template_child_entry.php create mode 100644 public/parts/template_person.php delete mode 100644 public/parts/verify.php delete mode 100644 public/static/fontawesome-all.min.js create mode 100644 public/static/fontawesome.min.js delete mode 100644 public/static/hachelogo.svg create mode 100644 public/static/material-color.min.css create mode 100644 public/static/solid.min.js create mode 100644 public/static/style.css diff --git a/database.mwb b/database.mwb index c859bfcb381a4f250b16e16b43e9e26c0dacfe6b..11189fcac9e8f4b6fb857fe3dc5ea16eac4bc411 100644 GIT binary patch literal 12930 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 IU=8#C0LI<35&!@I literal 11260 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 diff --git a/lib/Child.lib.php b/lib/Child.lib.php deleted file mode 100644 index bde67bd..0000000 --- a/lib/Child.lib.php +++ /dev/null @@ -1,114 +0,0 @@ -get('people', ["familyid", "name", "birthday", "graduated"], ['personid' => $id]); - - $this->id = $id; - $this->familyid = $info['familyid']; - $this->name = $info['name']; - $this->birthday = strtotime($info['birthday']); - $this->graduated = $info['graduated'] == 1; - - return $this; - } - - public function save() { - global $database; - if (is_int($this->id) && $database->has("people", ['personid' => $this->id])) { - $database->update("people", ["name" => $this->name, "birthday" => date("Y-m-d", $this->birthday), "graduated" => $this->graduated], ['personid' => $this->id]); - } else { - $database->insert("people", ["familyid" => $this->familyid, "name" => $this->name, "birthday" => date("Y-m-d", $this->birthday), "graduated" => $this->graduated]); - $this->id = $database->id(); - } - } - - public static function exists(int $cid, int $fid = null) { - global $database; - if (is_null($fid)) { - return $database->has("people", [ - 'personid' => $cid - ]); - } - return $database->has("people", ["AND" => [ - 'familyid' => $fid, - 'personid' => $cid - ]]); - } - - public function getID(): int { - return $this->id; - } - - public function getFamilyID(): int { - return $this->familyid; - } - - public function getFamily(): Family { - return (new Family())->load($this->familyid); - } - - public function getName(): string { - return $this->name; - } - - /** - * Get the person's birth date as a UNIX timestamp. - * @return int - */ - public function getBirthday(): int { - return $this->birthday; - } - - public function isGraduated(): bool { - return $this->graduated == true; - } - - public function setName(string $name) { - $this->name = $name; - } - - /** - * Set the person's birth date to either a UNIX timestamp or a date string. - * @param int $timestamp - * @param string $date A string parseable by strtotime(). - */ - public function setBirthday(int $timestamp = null, string $date = null) { - if (is_null($timestamp) && !is_null($date)) { - $this->birthday = strtotime($date); - } else if (!is_null($timestamp) && is_null($date)) { - $this->birthday = $timestamp; - } - } - - public function setGraduated(bool $graduated) { - $this->graduated = $graduated; - } - - public function setFamilyID(int $id) { - $this->familyid = $id; - } - - public function setFamily(Family $f) { - $this->familyid = $f->getID(); - } - -} diff --git a/lib/Family.lib.php b/lib/Family.lib.php deleted file mode 100644 index be35c46..0000000 --- a/lib/Family.lib.php +++ /dev/null @@ -1,291 +0,0 @@ -has("families", ['familyid' => $familyid])) { - $this->id = $familyid; - } else { - throw new Exception("No such family exists."); - } - - $f = $database->get("families", [ - 'familyid (id)', - 'familyname (name)', - 'phone', - 'email', - 'newsletter_method (newsletter)', - 'address', - 'city', - 'state', - 'zip', - 'father_name (father)', - 'mother_name (mother)', - 'photo_permission (photo)', - 'expires', - 'private' - ], [ - "familyid" => $this->id - ]); - - $children = $database->select("people", 'personid', ["familyid" => $this->id]); - - $this->name = $f['name']; - $this->father = $f['father']; - $this->mother = $f['mother']; - $this->phone = $f['phone']; - $this->email = $f['email']; - $this->address = $f['address']; - $this->city = $f['city']; - $this->state = $f['state']; - $this->zip = $f['zip']; - $this->photo = $f['photo'] == 1; - $this->newsletter = $f['newsletter']; - $this->expires = strtotime($f['expires']); - $this->private = $f['private'] == 1; - - foreach ($children as $c) { - $this->children[] = (new Child())->load($c); - } - - return $this; - } - - public function save() { - global $database; - if (is_int($this->id) && $database->has("families", ['familyid' => $this->id])) { - $database->update("families", [ - "familyname" => $this->getName(), - "father_name" => $this->getFather(), - "mother_name" => $this->getMother(), - "phone" => $this->getPhone(), - "email" => $this->getEmail(), - "address" => $this->getAddress(), - "city" => $this->getCity(), - "state" => $this->getState(), - "zip" => $this->getZip(), - "photo_permission" => $this->getPhotoPermission(), - "newsletter_method" => $this->getNewsletter(), - "expires" => date("Y-m-d", $this->getExpires()), - "private" => $this->getPrivate() - ], [ - "familyid" => $this->id - ]); - } else { - $database->insert("families", [ - "familyname" => $this->getName(), - "father_name" => $this->getFather(), - "mother_name" => $this->getMother(), - "phone" => $this->getPhone(), - "email" => $this->getEmail(), - "address" => $this->getAddress(), - "city" => $this->getCity(), - "state" => $this->getState(), - "zip" => $this->getZip(), - "photo_permission" => $this->getPhotoPermission(), - "newsletter_method" => $this->getNewsletter(), - "expires" => date("Y-m-d", $this->getExpires()), - "private" => $this->getPrivate() - ]); - $this->id = $database->id(); - } - - for ($i = 0; $i < count($this->children); $i++) { - $this->children[$i]->setFamilyID($this->id); - $this->children[$i]->save(); - } - } - - public function getID() { - return $this->id; - } - - public function getName(): string { - return $this->name; - } - - public function getFather(): string { - return $this->father; - } - - public function getMother(): string { - return $this->mother; - } - - public function getPhone(): string { - return $this->phone; - } - - public function getEmail(): string { - return $this->email; - } - - public function getAddress(): string { - return $this->address; - } - - public function getCity(): string { - return $this->city; - } - - public function getState(): string { - return $this->state; - } - - public function getZip(): string { - return $this->zip; - } - - public function getPhotoPermission(): bool { - return $this->photo == true; - } - - public function getNewsletter(): int { - return $this->newsletter; - } - - public function getChildren(): array { - return $this->children; - } - - public function getExpires(): int { - return $this->expires; - } - - public function getPrivate(): bool { - return $this->private == true; - } - - - - public function setName(string $name) { - $this->name = $name; - } - - public function setFather(string $name) { - $this->father = $name; - } - - public function setMother(string $name) { - $this->mother = $name; - } - - public function setPhone(string $phone) { - $phone = preg_replace("/[^0-9]/", "", $phone); - if (strlen($phone) == 11) { - $phone = preg_replace("/^1/", "", $phone); - } - if (strlen($phone) != 10) { - throw new Exception("Enter a valid 10-digit phone number."); - } - $this->phone = $phone; - } - - public function setEmail(string $email) { - $email = strtolower($email); - if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { - throw new Exception("The email address looks wrong."); - } - $this->email = $email; - } - - public function setAddress(string $address) { - $this->address = $address; - } - - public function setCity(string $city) { - $this->city = $city; - } - - /** - * Set the state, in two-character form. - * @param string $state - * @throws Exception - */ - public function setState(string $state) { - $state = strtoupper($state); - if (!preg_match("/^[A-Z]{2}$/", $state)) { - throw new Exception("Select a valid state."); - } - $this->state = strtoupper($state); - } - - public function setZip(string $zip) { - if (!preg_match("/^[0-9]{5}(-?[0-9]{4})?$/", $zip)) { - throw new Exception("Enter a valid five or nine digit US ZIP code."); - } - $this->zip = $zip; - } - - public function setPhotoPermission(bool $perm) { - $this->photo = $perm; - } - - public function setNewsletter(int $newsletter) { - if (!is_int($newsletter) || !($newsletter == 1 || $newsletter == 2 || $newsletter == 3)) { - throw new Exception("Invalid newsletter preference."); - } - $this->newsletter = $newsletter; - } - - public function setChildren(array $children) { - $this->children = $children; - } - - public function addChild(Child $child) { - $this->children[] = $child; - } - - /** - * Set the membership expiration date to either a UNIX timestamp or a date - * string. - * @param int $timestamp - * @param string $date A string parseable by strtotime(). - */ - public function setExpires(int $timestamp = null, string $date = null) { - if (is_null($timestamp) && !is_null($date)) { - $this->expires = strtotime($date); - } else if (!is_null($timestamp) && is_null($date)) { - $this->expires = $timestamp; - } - } - - public function setPrivate(bool $private) { - $this->private = $private; - } - -} diff --git a/nbproject/project.xml b/nbproject/project.xml index 0ab2e4f..75ab9c3 100644 --- a/nbproject/project.xml +++ b/nbproject/project.xml @@ -3,7 +3,7 @@ org.netbeans.modules.php.project - MembershipPortal + CampPortal diff --git a/public/actions/submitmembership.php b/public/actions/submit.php similarity index 97% rename from public/actions/submitmembership.php rename to public/actions/submit.php index c8f17f5..bfebe35 100644 --- a/public/actions/submitmembership.php +++ b/public/actions/submit.php @@ -8,24 +8,18 @@ require_once __DIR__ . "/../../lib/requiredpublic.php"; -require_once __DIR__ . "/../../lib/Family.lib.php"; -require_once __DIR__ . "/../../lib/Child.lib.php"; require_once __DIR__ . "/../../lib/Email.lib.php"; +var_export($_POST); +die(); + function errorBack(string $errormsg) { header("Location: ../?page=signup&error=" . htmlentities($errormsg)); die($errormsg); } -if (empty($_POST['agree_terms'])) { - errorBack("You must agree to HACHE's policy."); -} - -$family = new Family(); -$renewal = false; - if (!empty($_SESSION['familyid']) && $database->has("families", ['familyid' => $_SESSION['familyid']])) { - $family = (new Family())->load($_SESSION['familyid']); + $family = $_SESSION['familyid']; $renewal = true; } else if (!empty($_POST['renewing'])) { // Session expired, but we're renewing, so kick them back to verification diff --git a/public/index.php b/public/index.php index 17c1ec2..82777dd 100644 --- a/public/index.php +++ b/public/index.php @@ -7,15 +7,9 @@ require_once __DIR__ . "/../lib/requiredpublic.php"; -$page = "entry.php"; +$page = "signup.php"; if (!empty($_GET['page'])) { switch ($_GET['page']) { - case "renew": - $page = "renew.php"; - break; - case "verify": - $page = "verify.php"; - break; case "signup": $page = "signup.php"; break; @@ -32,9 +26,12 @@ if (!empty($_GET['page'])) { <?php echo $SETTINGS["site_title"]; ?> + + - + + -
-
-
-
- -
- HACHE: Helena Area Christian Home Educators - -

Renew Your Membership

- -
-

- Please enter your email address below. You'll be - sent a verification code. This is to ensure nobody - else can view or change your family's information. -

- - time()) { - $msg = " This membership isn't expiring until " . date("F j, Y", $_GET['exp'] * 1) . " and cannot be renewed yet."; - } else { - // Somebody is screwing with the URL - // for some reason - $msg = " This membership isn't close enough to expiration and cannot be renewed yet."; - } - break; - } - } - if ($msg != "") { - ?> -
- -
- - -
-
-
- - - -
- -
- -
-
-
-
-
-
-
-
\ No newline at end of file diff --git a/public/parts/signup.php b/public/parts/signup.php index ae117da..c96926b 100644 --- a/public/parts/signup.php +++ b/public/parts/signup.php @@ -9,58 +9,33 @@ if (empty($IN_SITE)) { die("Access denied."); } -$familyname = ""; -$fathername = ""; -$mothername = ""; -$streetaddress = ""; -$city = ""; -$state = ""; -$zip = ""; -$phone = ""; -$email = ""; -$newsletter_method = ""; - -$children = []; +$campers = []; +$adults = []; +$youth = []; if (isset($_SESSION['familyid']) && $database->has('families', ['familyid' => $_SESSION['familyid']])) { - $familyinfo = $database->get("families", ['familyname', 'phone', 'email', 'address', 'city', 'state', 'zip', 'father_name (fathername)', 'mother_name (mothername)', 'newsletter_method'], ['familyid' => $_SESSION['familyid']]); - $children = $database->select("people", 'personid', ['familyid' => $_SESSION['familyid']]); - $familyname = $familyinfo['familyname']; - $fathername = $familyinfo['fathername']; - $mothername = $familyinfo['mothername']; - $streetaddress = $familyinfo['address']; - $city = $familyinfo['city']; - $state = $familyinfo['state']; - $zip = $familyinfo['zip']; - $phone = $familyinfo['phone']; - $email = $familyinfo['email']; - $newsletter_method = $familyinfo['newsletter_method']; + $campers = $database->select("people", 'personid', ['AND' => ['familyid' => $_SESSION['familyid'], 'camperid[!]' => null]]); + $adults = $database->select("people", 'personid', ['AND' => ['familyid' => $_SESSION['familyid'], 'adultid[!]' => null]]); + $youth = $database->select("people", 'personid', ['AND' => ['familyid' => $_SESSION['familyid'], 'youthid[!]' => null]]); } ?>
-
+ - + -
+
- HACHE: Helena Area Christian Home Educators
- Membership Renewal"; - } else { - echo "

Membership Application

"; - } - ?> +

Day Camp Registration

@@ -78,393 +53,97 @@ if (isset($_SESSION['familyid']) && $database->has('families', ['familyid' => $_ } ?> + +
-
-

Basic Information

+
+

Campers

-
- -
- - "Family Name (Last Name)", - "icon" => "fas fa-users", - "name" => "familyname", - "maxlength" => 100, - "value" => $familyname, - "error" => "Enter your last name." - ], - [ - "label" => "Father's Name", - "icon" => "fas fa-male", - "name" => "fathername", - "maxlength" => 255, - "value" => $fathername, - "error" => "Enter the father's name." - ], - [ - "label" => "Mother's Name", - "icon" => "fas fa-female", - "name" => "mothername", - "maxlength" => 255, - "value" => $mothername, - "error" => "Enter the mother's name." - ], - [ - "label" => "Street Address", - "icon" => "fas fa-home", - "name" => "streetaddress", - "maxlength" => 500, - "value" => $streetaddress, - "error" => "Enter your address." - ], - [ - "label" => "City", - "icon" => "fas fa-city", - "name" => "city", - "maxlength" => 255, - "width" => 3, - "value" => $city, - "error" => "Enter your city." - ], - [ - "label" => "State", - "icon" => "fas fa-flag", - "name" => "state", - "type" => "select", - "value" => $state, - "error" => "Choose a state.", - "options" => [ - 'MT' => 'Montana', - 'AL' => 'Alabama', - 'AK' => 'Alaska', - 'AZ' => 'Arizona', - 'AR' => 'Arkansas', - 'CA' => 'California', - 'CO' => 'Colorado', - 'CT' => 'Connecticut', - 'DE' => 'Delaware', - 'DC' => 'District of Columbia', - 'FL' => 'Florida', - 'GA' => 'Georgia', - 'HI' => 'Hawaii', - 'ID' => 'Idaho', - 'IL' => 'Illinois', - 'IN' => 'Indiana', - 'IA' => 'Iowa', - 'KS' => 'Kansas', - 'KY' => 'Kentucky', - 'LA' => 'Louisiana', - 'ME' => 'Maine', - 'MD' => 'Maryland', - 'MA' => 'Massachusetts', - 'MI' => 'Michigan', - 'MN' => 'Minnesota', - 'MS' => 'Mississippi', - 'MO' => 'Missouri', - 'MT' => 'Montana', - 'NE' => 'Nebraska', - 'NV' => 'Nevada', - 'NH' => 'New Hampshire', - 'NJ' => 'New Jersey', - 'NM' => 'New Mexico', - 'NY' => 'New York', - 'NC' => 'North Carolina', - 'ND' => 'North Dakota', - 'OH' => 'Ohio', - 'OK' => 'Oklahoma', - 'OR' => 'Oregon', - 'PA' => 'Pennsylvania', - 'RI' => 'Rhode Island', - 'SC' => 'South Carolina', - 'SD' => 'South Dakota', - 'TN' => 'Tennessee', - 'TX' => 'Texas', - 'UT' => 'Utah', - 'VT' => 'Vermont', - 'VA' => 'Virginia', - 'WA' => 'Washington', - 'WV' => 'West Virginia', - 'WI' => 'Wisconsin', - 'WY' => 'Wyoming' - ], - "width" => 2 - ], - [ - "label" => "ZIP/Postal Code", - "icon" => "fas fa-mail-bulk", - "name" => "zip", - "maxlength" => 10, - "width" => 3, - "value" => $zip, - "pattern" => "[0-9]{5}(-?[0-9]{4})?", - "error" => "Enter a valid 5 or 9 digit ZIP code." - ], - [ - "label" => "Phone Number", - "icon" => "fas fa-phone", - "name" => "phone", - "type" => "tel", - "maxlength" => 20, - "value" => $phone, - "pattern" => "[0-9]{10}", - "error" => "Enter a 10-digit phone number (numbers only)." - ], - [ - "label" => "Email", - "icon" => "fas fa-at", - "name" => "email", - "maxlength" => 255, - "type" => "email", - "value" => $email, - "error" => "Enter your email address." - ], - [ - "label" => "Newsletter Preference", - "icon" => "fas fa-newspaper", - "name" => "newsletter_method", - "type" => "select", - "value" => $newsletter_method, - "options" => [ - "1" => "Email ($25)", - "2" => "Paper ($35)", - "3" => "Email and Paper ($35)" - ], - "error" => "Choose a newsletter option." - ] - ]; - - foreach ($textboxes as $item) { - ?> - -
"> -
- -
-
- -
- - " - name="" - class="form-control" - placeholder="" - aria-label="" - maxlength="" - - pattern="" - - - value="" - required /> - - - -
- -
-
-
-
- - + 0) { + foreach ($campers as $personid) { + include __DIR__ . "/template_person.php"; } - ?> - -
- -
-

- The membership fees (determined by your newsletter - preference) cover costs of the following: - phone; website; postage; distribution of newsletters and - directories; publication of materials; library; and other - HACHE related activities. Dues are reduced as of March 1st. - HACHE will not restrict membership based on inability to - pay. HACHE does not mandate curriculum choices or the - manner in which curriculum is administered. We do encourage - all members to follow and adhere to MT laws governing home - schooling. -

+ } else { + include __DIR__ . "/template_person.php"; + } + ?>
-
-
-
-

Children

-
-
-

- Please list your children's first names and birth dates. This - information will appear in our members’ directory. Members - agree that they will NOT make this information public. - -

- 0) { - foreach ($children as $childid) { - include __DIR__ . "/template_child_entry.php"; - } - } else { - include __DIR__ . "/template_child_entry.php"; - } - ?> -
- -
- Add another -
- +
+ Add another
+ +
-
-

Consent

+
+

Adult Volunteers

+
+
+ 0) { + foreach ($adults as $personid) { + include __DIR__ . "/template_person.php"; + } + } else { + include __DIR__ . "/template_person.php"; + } + ?>
-
- -
-

HACHE members occasionally take pictures of students during - home school functions and activities. These photos may be - used in HACHE displays, brochures, website, etc. -

I give permission for my photos to be included in such displays: - - - - - - - - -

-
- - +
+
+ Add another
-
-
+ +
-
-

- - - - - Activities -

+
+

Youth Volunteers

- -
- -
-

HACHE is an all-volunteer organization. Listed below are events - and activities that may occur throughout the year. If you are - interested in helping with one or more of these events please - select any and all events of interest so we can get you in touch - with the member in charge of said event. Please feel free to - contact Steering Committee members or the newsletter editor with - ideas for field trips and or other activities that may be - enjoyed by all. (Not all of these events are specifically - HACHE events, but rather events HACHE supported events our - members have participated in and enjoyed in past years.) -

- +
select('events', ['eventid (id)', 'event (name)']); - - $eventcount = count($events); - - $cola = []; - $colb = []; - - for ($i = 0; $i < $eventcount; $i++) { - if ($i % 2 === 0) { - $cola[] = $events[$i]; - } else { - $colb[] = $events[$i]; + $persontype = "youth"; + if (count($youth) > 0) { + foreach ($youth as $personid) { + include __DIR__ . "/template_person.php"; } + } else { + include __DIR__ . "/template_person.php"; } ?> +
-
- -
-
    - -
  • -
    - - -
    -
  • - -
-
- -
-
    - -
  • -
    - - -
    -
  • - -
-
+
+
+ Add another
-
+ +
-
+

Pay and Submit

+

Total: $0

+
We can't see your card info; it's sent directly and securely from your computer to our payment processor.
@@ -478,9 +157,9 @@ if (isset($_SESSION['familyid']) && $database->has('families', ['familyid' => $_
-
- -
-
-
-
-
\ No newline at end of file diff --git a/public/static/fontawesome-all.min.js b/public/static/fontawesome-all.min.js deleted file mode 100644 index b08e9a6..0000000 --- a/public/static/fontawesome-all.min.js +++ /dev/null @@ -1,5 +0,0 @@ -/*! - * Font Awesome Free 5.3.1 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - */ -!function(){"use strict";var c={};try{"undefined"!=typeof window&&(c=window)}catch(c){}var l=(c.navigator||{}).userAgent,h=void 0===l?"":l,z=c,v=(~h.indexOf("MSIE")||h.indexOf("Trident/"),"___FONT_AWESOME___"),m=function(){try{return!0}catch(c){return!1}}(),s=[1,2,3,4,5,6,7,8,9,10],e=s.concat([11,12,13,14,15,16,17,18,19,20]);["xs","sm","lg","fw","ul","li","border","pull-left","pull-right","spin","pulse","rotate-90","rotate-180","rotate-270","flip-horizontal","flip-vertical","stack","stack-1x","stack-2x","inverse","layers","layers-text","layers-counter"].concat(s.map(function(c){return c+"x"})).concat(e.map(function(c){return"w-"+c}));var a=z||{};a[v]||(a[v]={}),a[v].styles||(a[v].styles={}),a[v].hooks||(a[v].hooks={}),a[v].shims||(a[v].shims=[]);var t=a[v],M=Object.assign||function(c){for(var l=1;l>>0;h--;)l[h]=c[h];return l}function U(c){return c.classList?X(c.classList):(c.getAttribute("class")||"").split(" ").filter(function(c){return c})}function K(c,l){var h,z=l.split("-"),v=z[0],m=z.slice(1).join("-");return v!==c||""===m||(h=m,~w.indexOf(h))?null:m}function G(c){return(""+c).replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")}function J(h){return Object.keys(h||{}).reduce(function(c,l){return c+(l+": ")+h[l]+";"},"")}function Q(c){return c.size!==W.size||c.x!==W.x||c.y!==W.y||c.rotate!==W.rotate||c.flipX||c.flipY}function Z(c){var l=c.transform,h=c.containerWidth,z=c.iconWidth;return{outer:{transform:"translate("+h/2+" 256)"},inner:{transform:"translate("+32*l.x+", "+32*l.y+") "+" "+("scale("+l.size/16*(l.flipX?-1:1)+", "+l.size/16*(l.flipY?-1:1)+") ")+" "+("rotate("+l.rotate+" 0 0)")},path:{transform:"translate("+z/2*-1+" -256)"}}}var $={x:0,y:0,width:"100%",height:"100%"},cc=function(c){var l=c.children,h=c.attributes,z=c.main,v=c.mask,m=c.transform,s=z.width,e=z.icon,a=v.width,t=v.icon,M=Z({transform:m,containerWidth:a,iconWidth:s}),f={tag:"rect",attributes:A({},$,{fill:"white"})},r={tag:"g",attributes:A({},M.inner),children:[{tag:"path",attributes:A({},e.attributes,M.path,{fill:"black"})}]},H={tag:"g",attributes:A({},M.outer),children:[r]},i="mask-"+D(),n="clip-"+D(),V={tag:"defs",children:[{tag:"clipPath",attributes:{id:n},children:[t]},{tag:"mask",attributes:A({},$,{id:i,maskUnits:"userSpaceOnUse",maskContentUnits:"userSpaceOnUse"}),children:[f,H]}]};return l.push(V,{tag:"rect",attributes:A({fill:"currentColor","clip-path":"url(#"+n+")",mask:"url(#"+i+")"},$)}),{children:l,attributes:h}},lc=function(c){var l=c.children,h=c.attributes,z=c.main,v=c.transform,m=J(c.styles);if(0"+s.map(bc).join("")+""}var gc=function(){};function Sc(c){return"string"==typeof(c.getAttribute?c.getAttribute(g):null)}var yc={replace:function(c){var l=c[0],h=c[1].map(function(c){return bc(c)}).join("\n");if(l.parentNode&&l.outerHTML)l.outerHTML=h+(E.keepOriginalSource&&"svg"!==l.tagName.toLowerCase()?"\x3c!-- "+l.outerHTML+" --\x3e":"");else if(l.parentNode){var z=document.createElement("span");l.parentNode.replaceChild(z,l),z.outerHTML=h}},nest:function(c){var l=c[0],h=c[1];if(~U(l).indexOf(E.replacementClass))return yc.replace(c);var z=new RegExp(E.familyPrefix+"-.*");delete h[0].attributes.style;var v=h[0].attributes.class.split(" ").reduce(function(c,l){return l===E.replacementClass||l.match(z)?c.toSvg.push(l):c.toNode.push(l),c},{toNode:[],toSvg:[]});h[0].attributes.class=v.toSvg.join(" ");var m=h.map(function(c){return bc(c)}).join("\n");l.setAttribute("class",v.toNode.join(" ")),l.setAttribute(g,""),l.innerHTML=m}};function wc(h,c){var z="function"==typeof c?c:gc;0===h.length?z():(r.requestAnimationFrame||function(c){return c()})(function(){var c=!0===E.autoReplaceSvg?yc.replace:yc[E.autoReplaceSvg]||yc.replace,l=Mc.begin("mutate");h.map(c),l(),z()})}var kc=!1;var xc=null;function Ac(c){if(e&&E.observeMutations){var v=c.treeCallback,m=c.nodeCallback,s=c.pseudoElementsCallback,l=c.observeMutationsRoot,h=void 0===l?H.body:l;xc=new e(function(c){kc||X(c).forEach(function(c){if("childList"===c.type&&0li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-webkit-transform:scale(1,-1);transform:scale(1,-1)}.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1,-1);transform:scale(-1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;position:relative;width:2em}.fa-stack-1x,.fa-stack-2x{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.svg-inline--fa.fa-stack-1x{height:1em;width:1em}.svg-inline--fa.fa-stack-2x{height:2em;width:2em}.fa-inverse{color:#fff}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}";if("fa"!==l||h!==c){var v=new RegExp("\\.fa\\-","g"),m=new RegExp("\\."+c,"g");z=z.replace(v,"."+l+"-").replace(m,"."+h)}return z};function zl(c){return{found:!0,width:c[0],height:c[1],icon:{tag:"path",attributes:{fill:"currentColor",d:c.slice(4)[0]}}}}function vl(){E.autoAddCss&&!tl&&(Y(hl()),tl=!0)}function ml(l,c){return Object.defineProperty(l,"abstract",{get:c}),Object.defineProperty(l,"html",{get:function(){return l.abstract.map(function(c){return bc(c)})}}),Object.defineProperty(l,"node",{get:function(){if(M){var c=H.createElement("div");return c.innerHTML=l.html,c.children}}}),l}function sl(c){var l=c.prefix,h=void 0===l?"fa":l,z=c.iconName;if(z)return pc(al.definitions,h,z)||pc(T.styles,h,z)}var el,al=new(function(){function c(){k(this,c),this.definitions={}}return x(c,[{key:"add",value:function(){for(var l=this,c=arguments.length,h=Array(c),z=0;z>>0;n--;)e[n]=t[n];return e}function kt(t){return t.classList?xt(t.classList):(t.getAttribute("class")||"").split(" ").filter(function(t){return t})}function At(t,e){var n,a=e.split("-"),r=a[0],i=a.slice(1).join("-");return r!==t||""===i||(n=i,~H.indexOf(n))?null:i}function Ct(t){return"".concat(t).replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")}function Nt(n){return Object.keys(n||{}).reduce(function(t,e){return t+"".concat(e,": ").concat(n[e],";")},"")}function St(t){return t.size!==vt.size||t.x!==vt.x||t.y!==vt.y||t.rotate!==vt.rotate||t.flipX||t.flipY}function zt(t){var e=t.transform,n=t.containerWidth,a=t.iconWidth,r={transform:"translate(".concat(n/2," 256)")},i="translate(".concat(32*e.x,", ").concat(32*e.y,") "),o="scale(".concat(e.size/16*(e.flipX?-1:1),", ").concat(e.size/16*(e.flipY?-1:1),") "),c="rotate(".concat(e.rotate," 0 0)");return{outer:r,inner:{transform:"".concat(i," ").concat(o," ").concat(c)},path:{transform:"translate(".concat(a/2*-1," -256)")}}}var Mt={x:0,y:0,width:"100%",height:"100%"};function Ot(t){var e=t.icons,n=e.main,a=e.mask,r=t.prefix,i=t.iconName,o=t.transform,c=t.symbol,s=t.title,l=t.extra,f=t.watchable,u=void 0!==f&&f,d=a.found?a:n,m=d.width,h=d.height,p="fa-w-".concat(Math.ceil(m/h*16)),g=[V.replacementClass,i?"".concat(V.familyPrefix,"-").concat(i):"",p].filter(function(t){return-1===l.classes.indexOf(t)}).concat(l.classes).join(" "),v={children:[],attributes:B({},l.attributes,{"data-prefix":r,"data-icon":i,class:g,role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 ".concat(m," ").concat(h)})};u&&(v.attributes[U]=""),s&&v.children.push({tag:"title",attributes:{id:v.attributes["aria-labelledby"]||"title-".concat(wt())},children:[s]});var b,y,w,x,k,A,C,N,S,z,M,O,E,j,P,L,_,T,R,H,I,F,Y,D=B({},v,{prefix:r,iconName:i,main:n,mask:a,transform:o,symbol:c,styles:l.styles}),q=a.found&&n.found?(y=(b=D).children,w=b.attributes,x=b.main,k=b.mask,A=b.transform,C=x.width,N=x.icon,S=k.width,z=k.icon,M=zt({transform:A,containerWidth:S,iconWidth:C}),O={tag:"rect",attributes:B({},Mt,{fill:"white"})},E={tag:"g",attributes:B({},M.inner),children:[{tag:"path",attributes:B({},N.attributes,M.path,{fill:"black"})}]},j={tag:"g",attributes:B({},M.outer),children:[E]},P="mask-".concat(wt()),L="clip-".concat(wt()),_={tag:"defs",children:[{tag:"clipPath",attributes:{id:L},children:[z]},{tag:"mask",attributes:B({},Mt,{id:P,maskUnits:"userSpaceOnUse",maskContentUnits:"userSpaceOnUse"}),children:[O,j]}]},y.push(_,{tag:"rect",attributes:B({fill:"currentColor","clip-path":"url(#".concat(L,")"),mask:"url(#".concat(P,")")},Mt)}),{children:y,attributes:w}):function(t){var e=t.children,n=t.attributes,a=t.main,r=t.transform,i=Nt(t.styles);if(0").concat(o.map(Kt).join(""),"")}var Gt=function(){};function Jt(t){return"string"==typeof(t.getAttribute?t.getAttribute(U):null)}var Qt={replace:function(t){var e=t[0],n=t[1].map(function(t){return Kt(t)}).join("\n");if(e.parentNode&&e.outerHTML)e.outerHTML=n+(V.keepOriginalSource&&"svg"!==e.tagName.toLowerCase()?"\x3c!-- ".concat(e.outerHTML," --\x3e"):"");else if(e.parentNode){var a=document.createElement("span");e.parentNode.replaceChild(a,e),a.outerHTML=n}},nest:function(t){var e=t[0],n=t[1];if(~kt(e).indexOf(V.replacementClass))return Qt.replace(t);var a=new RegExp("".concat(V.familyPrefix,"-.*"));delete n[0].attributes.style;var r=n[0].attributes.class.split(" ").reduce(function(t,e){return e===V.replacementClass||e.match(a)?t.toSvg.push(e):t.toNode.push(e),t},{toNode:[],toSvg:[]});n[0].attributes.class=r.toSvg.join(" ");var i=n.map(function(t){return Kt(t)}).join("\n");e.setAttribute("class",r.toNode.join(" ")),e.setAttribute(U,""),e.innerHTML=i}};function Zt(n,t){var a="function"==typeof t?t:Gt;0===n.length?a():(h.requestAnimationFrame||function(t){return t()})(function(){var t=!0===V.autoReplaceSvg?Qt.replace:Qt[V.autoReplaceSvg]||Qt.replace,e=Tt.begin("mutate");n.map(t),e(),a()})}var $t=!1;function te(){$t=!1}var ee=null;function ne(t){if(l&&V.observeMutations){var r=t.treeCallback,i=t.nodeCallback,o=t.pseudoElementsCallback,e=t.observeMutationsRoot,n=void 0===e?p:e;ee=new l(function(t){$t||xt(t).forEach(function(t){if("childList"===t.type&&0 - diff --git a/public/static/material-color.min.css b/public/static/material-color.min.css new file mode 100644 index 0000000..f39722b --- /dev/null +++ b/public/static/material-color.min.css @@ -0,0 +1,7 @@ +/* Material-Color.css + * Copyright (c) 2018 Netsyms Technologies + * MIT License + * https://source.netsyms.com/Netsyms/Material-Color + */ +.alert-red{background-color:#f44336;color:#fff!important}.alert-pink{background-color:#e91e63;color:#fff!important}.alert-purple{background-color:#9c27b0;color:#fff!important}.alert-deep-purple{background-color:#673ab7;color:#fff!important}.alert-indigo{background-color:#3f51b5;color:#fff!important}.alert-blue{background-color:#2196f3;color:#fff!important}.alert-light-blue{background-color:#03a9f4;color:#000!important}.alert-cyan{background-color:#00bcd4;color:#000!important}.alert-teal{background-color:#009688;color:#fff!important}.alert-green{background-color:#4caf50;color:#fff!important}.alert-light-green{background-color:#8bc34a;color:#000!important}.alert-lime{background-color:#cddc39;color:#000!important}.alert-yellow{background-color:#ffeb3b;color:#000!important}.alert-amber{background-color:#ffc107;color:#000!important}.alert-orange{background-color:#ff9800;color:#000!important}.alert-deep-orange{background-color:#ff5722;color:#fff!important}.alert-brown{background-color:#795548;color:#fff!important}.alert-grey{background-color:#9e9e9e;color:#000!important}.alert-blue-grey{background-color:#607d8b;color:#fff!important}.alert-red .alert-link{color:#fff!important}.alert-pink .alert-link{color:#fff!important}.alert-purple .alert-link{color:#fff!important}.alert-deep-purple .alert-link{color:#fff!important}.alert-indigo .alert-link{color:#fff!important}.alert-blue .alert-link{color:#fff!important}.alert-light-blue .alert-link{color:#000!important}.alert-cyan .alert-link{color:#000!important}.alert-teal .alert-link{color:#fff!important}.alert-green .alert-link{color:#fff!important}.alert-light-green .alert-link{color:#000!important}.alert-lime .alert-link{color:#000!important}.alert-yellow .alert-link{color:#000!important}.alert-amber .alert-link{color:#000!important}.alert-orange .alert-link{color:#000!important}.alert-deep-orange .alert-link{color:#fff!important}.alert-brown .alert-link{color:#fff!important}.alert-grey .alert-link{color:#000!important}.alert-blue-grey .alert-link{color:#fff!important}.alert-red .alert-heading{color:#fff!important}.alert-pink .alert-heading{color:#fff!important}.alert-purple .alert-heading{color:#fff!important}.alert-deep-purple .alert-heading{color:#fff!important}.alert-indigo .alert-heading{color:#fff!important}.alert-blue .alert-heading{color:#fff!important}.alert-light-blue .alert-heading{color:#000!important}.alert-cyan .alert-heading{color:#000!important}.alert-teal .alert-heading{color:#fff!important}.alert-green .alert-heading{color:#fff!important}.alert-light-green .alert-heading{color:#000!important}.alert-lime .alert-heading{color:#000!important}.alert-yellow .alert-heading{color:#000!important}.alert-amber .alert-heading{color:#000!important}.alert-orange .alert-heading{color:#000!important}.alert-deep-orange .alert-heading{color:#fff!important}.alert-brown .alert-heading{color:#fff!important}.alert-grey .alert-heading{color:#000!important}.alert-blue-grey .alert-heading{color:#fff!important}.badge-red{background-color:#f44336;color:#fff}.badge-pink{background-color:#e91e63;color:#fff}.badge-purple{background-color:#9c27b0;color:#fff}.badge-deep-purple{background-color:#673ab7;color:#fff}.badge-indigo{background-color:#3f51b5;color:#fff}.badge-blue{background-color:#2196f3;color:#fff}.badge-light-blue{background-color:#03a9f4;color:#000}.badge-cyan{background-color:#00bcd4;color:#000}.badge-teal{background-color:#009688;color:#fff}.badge-green{background-color:#4caf50;color:#fff}.badge-light-green{background-color:#8bc34a;color:#000}.badge-lime{background-color:#cddc39;color:#000}.badge-yellow{background-color:#ffeb3b;color:#000}.badge-amber{background-color:#ffc107;color:#000}.badge-orange{background-color:#ff9800;color:#000}.badge-deep-orange{background-color:#ff5722;color:#fff}.badge-brown{background-color:#795548;color:#fff}.badge-grey{background-color:#9e9e9e;color:#000}.badge-blue-grey{background-color:#607d8b;color:#fff}.btn-red{background-color:#f44336;color:#fff}.btn-pink{background-color:#e91e63;color:#fff}.btn-purple{background-color:#9c27b0;color:#fff}.btn-deep-purple{background-color:#673ab7;color:#fff}.btn-indigo{background-color:#3f51b5;color:#fff}.btn-blue{background-color:#2196f3;color:#fff}.btn-light-blue{background-color:#03a9f4;color:#000}.btn-cyan{background-color:#00bcd4;color:#000}.btn-teal{background-color:#009688;color:#fff}.btn-green{background-color:#4caf50;color:#fff}.btn-light-green{background-color:#8bc34a;color:#000}.btn-lime{background-color:#cddc39;color:#000}.btn-yellow{background-color:#ffeb3b;color:#000}.btn-amber{background-color:#ffc107;color:#000}.btn-orange{background-color:#ff9800;color:#000}.btn-deep-orange{background-color:#ff5722;color:#fff}.btn-brown{background-color:#795548;color:#fff}.btn-grey{background-color:#9e9e9e;color:#000}.btn-blue-grey{background-color:#607d8b;color:#fff}.bg-red{background-color:#f44336}.bg-pink{background-color:#e91e63}.bg-purple{background-color:#9c27b0}.bg-deep-purple{background-color:#673ab7}.bg-indigo{background-color:#3f51b5}.bg-blue{background-color:#2196f3}.bg-light-blue{background-color:#03a9f4}.bg-cyan{background-color:#00bcd4}.bg-teal{background-color:#009688}.bg-green{background-color:#4caf50}.bg-light-green{background-color:#8bc34a}.bg-lime{background-color:#cddc39}.bg-yellow{background-color:#ffeb3b}.bg-amber{background-color:#ffc107}.bg-orange{background-color:#ff9800}.bg-deep-orange{background-color:#ff5722}.bg-brown{background-color:#795548}.bg-grey{background-color:#9e9e9e}.bg-blue-grey{background-color:#607d8b}.list-group-item-red{background-color:#f44336;color:#fff}.list-group-item-pink{background-color:#e91e63;color:#fff}.list-group-item-purple{background-color:#9c27b0;color:#fff}.list-group-item-deep-purple{background-color:#673ab7;color:#fff}.list-group-item-indigo{background-color:#3f51b5;color:#fff}.list-group-item-blue{background-color:#2196f3;color:#fff}.list-group-item-light-blue{background-color:#03a9f4;color:#000}.list-group-item-cyan{background-color:#00bcd4;color:#000}.list-group-item-teal{background-color:#009688;color:#fff}.list-group-item-green{background-color:#4caf50;color:#fff}.list-group-item-light-green{background-color:#8bc34a;color:#000}.list-group-item-lime{background-color:#cddc39;color:#000}.list-group-item-yellow{background-color:#ffeb3b;color:#000}.list-group-item-amber{background-color:#ffc107;color:#000}.list-group-item-orange{background-color:#ff9800;color:#000}.list-group-item-deep-orange{background-color:#ff5722;color:#fff}.list-group-item-brown{background-color:#795548;color:#fff}.list-group-item-grey{background-color:#9e9e9e;color:#000}.list-group-item-blue-grey{background-color:#607d8b;color:#fff}.border-red{border-color:#f44336;border-width:1px}.border-pink{border-color:#e91e63;border-width:1px}.border-purple{border-color:#9c27b0;border-width:1px}.border-deep-purple{border-color:#673ab7;border-width:1px}.border-indigo{border-color:#3f51b5;border-width:1px}.border-blue{border-color:#2196f3;border-width:1px}.border-light-blue{border-color:#03a9f4;border-width:1px}.border-cyan{border-color:#00bcd4;border-width:1px}.border-teal{border-color:#009688;border-width:1px}.border-green{border-color:#4caf50;border-width:1px}.border-light-green{border-color:#8bc34a;border-width:1px}.border-lime{border-color:#cddc39;border-width:1px}.border-yellow{border-color:#ffeb3b;border-width:1px}.border-amber{border-color:#ffc107;border-width:1px}.border-orange{border-color:#ff9800;border-width:1px}.border-deep-orange{border-color:#ff5722;border-width:1px}.border-brown{border-color:#795548;border-width:1px}.border-grey{border-color:#9e9e9e;border-width:1px}.border-blue-grey{border-color:#607d8b;border-width:1px}.text-red{color:#f44336}.text-pink{color:#e91e63}.text-purple{color:#9c27b0}.text-deep-purple{color:#673ab7}.text-indigo{color:#3f51b5}.text-blue{color:#2196f3}.text-light-blue{color:#03a9f4}.text-cyan{color:#00bcd4}.text-teal{color:#009688}.text-green{color:#4caf50}.text-light-green{color:#8bc34a}.text-lime{color:#cddc39}.text-yellow{color:#ffeb3b}.text-amber{color:#ffc107}.text-orange{color:#ff9800}.text-deep-orange{color:#ff5722}.text-brown{color:#795548}.text-grey{color:#9e9e9e}.text-blue-grey{color:#607d8b} + diff --git a/public/static/signup.js b/public/static/signup.js index 50ca076..937bb6f 100644 --- a/public/static/signup.js +++ b/public/static/signup.js @@ -4,13 +4,68 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +$("#add_camper").click(function () { + var copyfrom = $("#camper_list .person-list-item").first(); + $.get("parts/template_person.php", { + type: "camper", + lastname: $("input[name=lastname]", copyfrom).val(), + parentname: $("input[name=parentname]", copyfrom).val(), + address: $("input[name=address]", copyfrom).val(), + zip: $("input[name=zip]", copyfrom).val(), + phone1: $("input[name=phone1]", copyfrom).val(), + phone2: $("input[name=phone2]", copyfrom).val(), + email: $("input[name=email]", copyfrom).val(), + unit: $("input[name=unit]", copyfrom).val() + }, function (resp) { + $("#camper_list").append(resp); + updateTotal(); + }); +}); + +$("#add_adult").click(function () { + var copyfrom = $("#adult_list .person-list-item").first(); + $.get("parts/template_person.php", { + type: "adult", + lastname: $("input[name=lastname]", copyfrom).val(), + address: $("input[name=address]", copyfrom).val(), + zip: $("input[name=zip]", copyfrom).val(), + phone1: $("input[name=phone1]", copyfrom).val(), + phone2: $("input[name=phone2]", copyfrom).val(), + email: $("input[name=email]", copyfrom).val() + }, function (resp) { + $("#adult_list").append(resp); + updateTotal(); + }); +}); -$("#add_child_row").click(function () { - $.get("parts/template_child_entry.php", {}, function (resp) { - $("#child_list").append(resp); +$("#add_youth").click(function () { + var copyfrom = $("#youth_list .person-list-item").first(); + $.get("parts/template_person.php", { + type: "youth", + lastname: $("input[name=lastname]", copyfrom).val(), + address: $("input[name=address]", copyfrom).val(), + zip: $("input[name=zip]", copyfrom).val(), + parentname: $("input[name=parentname]", copyfrom).val(), + phone2: $("input[name=phone2]", copyfrom).val(), + email: $("input[name=email]", copyfrom).val() + }, function (resp) { + $("#youth_list").append(resp); + updateTotal(); }); }); +$("#camper_list").on("change", "input[name=firstname]", function () { + updateTotal(); +}); + +function updateTotal() { + totalcharge = $(".person-list-item[data-persontype=camper] input[name=firstname]").filter(function () { + return $(this).val() != ''; + }).length * 50.0; + + $("#total").text(totalcharge); +} + // Create a Stripe client. var stripe = Stripe(stripe_pubkey); @@ -34,18 +89,22 @@ card.addEventListener('change', function (event) { }); $("#savebutton").click(function (event) { - var form = $("#membershipform"); + var form = $("#registrationform"); + console.log("Validating..."); if (form[0].checkValidity() === false) { + console.log("Invalid!"); event.preventDefault() event.stopPropagation() } form.addClass('was-validated'); }); -$("#membershipform").on("submit", function (event) { + +$("#registrationform").on("submit", function (event) { event.preventDefault(); + // prevent multiple clicks since Stripe can take a few seconds $("#savebutton").prop("disabled", true); $("#savebutton-text").addClass("d-none"); diff --git a/public/static/solid.min.js b/public/static/solid.min.js new file mode 100644 index 0000000..89b8a5f --- /dev/null +++ b/public/static/solid.min.js @@ -0,0 +1 @@ +!function(){"use strict";var c={},h={};try{"undefined"!=typeof window&&(c=window),"undefined"!=typeof document&&(h=document)}catch(c){}var l=(c.navigator||{}).userAgent,v=void 0===l?"":l,z=c,s=h,M=(z.document,!!s.documentElement&&!!s.head&&"function"==typeof s.addEventListener&&s.createElement,~v.indexOf("MSIE")||v.indexOf("Trident/"),"___FONT_AWESOME___"),m=function(){try{return!0}catch(c){return!1}}();var H=z||{};H[M]||(H[M]={}),H[M].styles||(H[M].styles={}),H[M].hooks||(H[M].hooks={}),H[M].shims||(H[M].shims=[]);var a=H[M];function V(c,v){var h=(2 [ "type" => "mysql", - "name" => "hachemembers", + "name" => "campportal", "server" => "localhost", "user" => "", "password" => "", "charset" => "utf8" ], // Name of the app. - "site_title" => "Membership Portal", + "site_title" => "Camp Portal", "stripe" => [ "pubkey" => "", "seckey" => ""