Adding reset password token field to db
authorSteve Sutton <steve@gaslightmedia.com>
Fri, 16 Nov 2018 21:06:08 +0000 (16:06 -0500)
committerSteve Sutton <steve@gaslightmedia.com>
Fri, 16 Nov 2018 21:06:08 +0000 (16:06 -0500)
For the forgot password feature.

index.php
models/front/itinerary/list.php
setup/databaseScripts/create_database_V0.0.2.sql [deleted file]
setup/databaseScripts/create_database_V0.0.3.sql [new file with mode: 0644]
setup/databaseScripts/dbVersions.php
setup/databaseScripts/update_database_V0.0.3.sql [new file with mode: 0644]
views/front/itinerary/create.html
views/front/itinerary/forgot.html [new file with mode: 0644]
views/front/itinerary/list.html

index c18d816..0f2b44f 100644 (file)
--- a/index.php
+++ b/index.php
@@ -44,7 +44,7 @@ if (!defined('ABSPATH')) {
  *  version from this plugin.
  */
 define('GLM_MEMBERS_ITINERARY_PLUGIN_VERSION', '0.0.1');
-define('GLM_MEMBERS_ITINERARY_PLUGIN_DB_VERSION', '0.0.2');
+define('GLM_MEMBERS_ITINERARY_PLUGIN_DB_VERSION', '0.0.3');
 
 // This is the minimum version of the GLM Members DB plugin require for this plugin.
 define('GLM_MEMBERS_ITINERARY_PLUGIN_MIN_MEMBERS_REQUIRED_VERSION', '2.8.0');
index 28999ce..e4f11f9 100755 (executable)
@@ -67,14 +67,16 @@ class GlmMembersFront_itinerary_list // extends GlmMembersFront_events_baseActio
     {
         $status            = true;
         $view              = 'list.html';
-        $members           = array();
         $option            = 'list';
-        $form_contents     = '';
+        $formContents      = '';
         $userLoggedIn      = false;
+        $createSuccess     = false;
+        $members           =
         $membersWithEmails =
         $memberEmails      =
         $states            =
-        $membersNoEmails   = array();
+        $membersNoEmails   =
+        $formErrors        = array();
 
         if ( isset( $_SESSION['travel-list'] ) ) {
             foreach ( $_SESSION['travel-list'] as $item ) {
@@ -94,35 +96,75 @@ class GlmMembersFront_itinerary_list // extends GlmMembersFront_events_baseActio
 
         switch ( $option ) {
         case 'addAccount':
-            // Add the account
-            // Unless email already exists
-            // echo '<pre>$_REQUEST: ' . print_r( $_REQUEST, true ) . '</pre>';
-            $password = md5( filter_var( $_REQUEST['password'], FILTER_SANITIZE_STRING ) );
-            $this->wpdb->insert(
-                GLM_MEMBERS_ITINERARY_PLUGIN_DB_PREFIX . 'user',
-                array(
-                    'fname'    => filter_var( $_REQUEST['fname'], FILTER_SANITIZE_STRING ),
-                    'lname'    => filter_var( $_REQUEST['lname'], FILTER_SANITIZE_STRING ),
-                    'addr1'    => filter_var( $_REQUEST['addr1'], FILTER_SANITIZE_STRING ),
-                    'addr2'    => filter_var( $_REQUEST['addr2'], FILTER_SANITIZE_STRING ),
-                    'city'     => filter_var( $_REQUEST['city'], FILTER_SANITIZE_STRING ),
-                    'state'    => filter_var( $_REQUEST['state'], FILTER_SANITIZE_STRING ),
-                    'zip'      => filter_var( $_REQUEST['zip'], FILTER_SANITIZE_STRING ),
-                    'email'    => filter_var( $_REQUEST['email'], FILTER_VALIDATE_EMAIL ),
-                    'password' => $password,
-                ),
-                array(
-                    '%s', // fname
-                    '%s', // lname
-                    '%s', // addr1
-                    '%s', // addr2
-                    '%s', // city
-                    '%s', // state
-                    '%s', // zip
-                    '%s', // email
-                    '%s', // password
+
+            // Check that the email and verify email matches.
+            $email       = filter_var( $_REQUEST['email'], FILTER_SANITIZE_STRING );
+            $verifyEmail = filter_var( $_REQUEST['verify_email'], FILTER_SANITIZE_STRING );
+            if ( $email != $verifyEmail ) {
+                $formErrors['verify_email'] = true;
+                $createSuccess = false;
+            }
+            $password       = filter_var( $_REQUEST['password'], FILTER_SANITIZE_STRING );
+            $verifyPassword = filter_var( $_REQUEST['verify_password'], FILTER_SANITIZE_STRING );
+            if ( $password != $verifyPassword ) {
+                $formErrors['verify_password'] = true;
+                $createSuccess = false;
+            }
+            // Check if the email already exists.
+            $currentEmailUsed = $this->wpdb->get_var(
+                $this->wpdb->prepare(
+                    "SELECT id
+                       FROM " . GLM_MEMBERS_ITINERARY_PLUGIN_DB_PREFIX . "user
+                      WHERE email = %s",
+                    $email
                 )
             );
+            if ( $currentEmailUsed ) {
+                $formErrors['email'] = true;
+            }
+
+            if ( !$formErrors ) {
+                // Add the account
+                // Unless email already exists
+                // echo '<pre>$_REQUEST: ' . print_r( $_REQUEST, true ) . '</pre>';
+                $password = md5( filter_var( $_REQUEST['password'], FILTER_SANITIZE_STRING ) );
+                $this->wpdb->insert(
+                    GLM_MEMBERS_ITINERARY_PLUGIN_DB_PREFIX . 'user',
+                    array(
+                        'fname'    => filter_var( $_REQUEST['fname'], FILTER_SANITIZE_STRING ),
+                        'lname'    => filter_var( $_REQUEST['lname'], FILTER_SANITIZE_STRING ),
+                        'addr1'    => filter_var( $_REQUEST['addr1'], FILTER_SANITIZE_STRING ),
+                        'addr2'    => filter_var( $_REQUEST['addr2'], FILTER_SANITIZE_STRING ),
+                        'city'     => filter_var( $_REQUEST['city'], FILTER_SANITIZE_STRING ),
+                        'state'    => filter_var( $_REQUEST['state'], FILTER_SANITIZE_STRING ),
+                        'zip'      => filter_var( $_REQUEST['zip'], FILTER_SANITIZE_STRING ),
+                        'email'    => filter_var( $_REQUEST['email'], FILTER_VALIDATE_EMAIL ),
+                        'password' => $password,
+                    ),
+                    array(
+                        '%s', // fname
+                        '%s', // lname
+                        '%s', // addr1
+                        '%s', // addr2
+                        '%s', // city
+                        '%s', // state
+                        '%s', // zip
+                        '%s', // email
+                        '%s', // password
+                    )
+                );
+                $authUserId    = $this->wpdb->insert_id;
+                if ( $authUserId ) {
+                    $createSuccess = true;
+
+                    // Now add the session.
+                    $_SESSION['itinerary-auth'] = $authUserId;
+                } else {
+                    // Form error no account added.
+                }
+            } else {
+                $states = $this->config['states'];
+            }
             $view = 'create.html';
             break;
         case 'create':
@@ -179,6 +221,29 @@ class GlmMembersFront_itinerary_list // extends GlmMembersFront_events_baseActio
         case 'forgot':
             $view = 'forgot.html';
             break;
+        case 'reset':
+            // Search for the email.
+            // If not found then say something about not finding the account and link to the new account form.
+            // If found then send the email reset.
+            $email      = filter_var( $_REQUEST['username'], FILTER_VALIDATE_EMAIL );
+            if ( $email ) {
+                $emailFound = $this->wpdb->get_var(
+                    $this->wpdb->prepare(
+                        "SELECT id
+                           FROM " . GLM_MEMBERS_ITINERARY_PLUGIN_DB_PREFIX . "user
+                          WHERE email = %s",
+                        $email
+                    )
+                );
+                if ( $emailFound ) {
+                    // Setup the email message.
+                    // Create the md5 reset token.
+                    // Send email.
+                }
+            } else {
+                // No email given
+            }
+            break;
         case 'moreinfo':
             // Need to create two list one with emails and one without.
             foreach ( $members as $member ) {
@@ -198,10 +263,10 @@ class GlmMembersFront_itinerary_list // extends GlmMembersFront_events_baseActio
                 $_GET['member_emails'] = implode( ',', $memberEmwails );
                 $form_id = $this->config['settings']['send_itinerary_form_id'];
                 if ( isset( $form_id ) && filter_var( $form_id, FILTER_VALIDATE_INT ) ) {
-                    $form_contents = do_shortcode( '[gravityform id="' . $form_id . '" title="false" description="false"]' );
+                    $formContents = do_shortcode( '[gravityform id="' . $form_id . '" title="false" description="false"]' );
                 }
             } else {
-                $form_contents = '';
+                $formContents = '';
             }
             break;
         case 'list':
@@ -215,9 +280,11 @@ class GlmMembersFront_itinerary_list // extends GlmMembersFront_events_baseActio
             'members'           => $members,
             'membersWithEmails' => $membersWithEmails,
             'membersNoEmails'   => $membersNoEmails,
-            'formContents'      => $form_contents,
+            'formContents'      => $formContents,
             'states'            => $states,
             'userLoggedIn'      => $userLoggedIn,
+            'formErrors'        => $formErrors,
+            'createSuccess'     => $createSuccess,
         );
 
         error_reporting(E_ALL ^ E_NOTICE);
diff --git a/setup/databaseScripts/create_database_V0.0.2.sql b/setup/databaseScripts/create_database_V0.0.2.sql
deleted file mode 100644 (file)
index e0d170d..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
--- Gaslight Media Staff Add On
--- File Created: 2018-10-24
--- Database Version: 0.0.1
--- Database Creation Script
---
--- To permit each query below to be executed separately,
--- all queries must be separated by a line with four dashes
-
--- Itinerary Session
-CREATE TABLE {prefix}session (
-  id INT NOT NULL AUTO_INCREMENT,
-  ref_type INT NOT NULL,            -- Reference Type (see plugin.ini for ref_types)
-  ref_dest INT NOT NULL,            -- Id from the Reference
-  contact_type INT NOT NULL,        -- Contact Type (see plugin.ini for contact_types)
-  contact_dest INT NOT NULL,        -- Id of the Contact Type
-  page_url TEXT NOT NULL,           -- Page url when this was added.
-  PRIMARY KEY (id),
-  INDEX(ref_dest),
-  INDEX(contact_dest)
-);
-
-----
-
--- Itinerary User
-CREATE TABLE {prefix}user (
-  id INT NOT NULL AUTO_INCREMENT,
-  fname TINYTEXT NULL,
-  lname TINYTEXT NULL,
-  addr1 TINYTEXT NULL,
-  addr2 TINYTEXT NULL,
-  city TINYTEXT NULL,
-  state TINYTEXT NULL,
-  zip TINYTEXT NULL,
-  email TINYTEXT NULL,
-  phone TINYTEXT NULL,
-  fax TINYTEXT NULL,
-  password TINYTEXT NULL,
-  PRIMARY KEY (id),
-  INDEX(email(20))
-);
-
-----
-
--- Management
-CREATE TABLE {prefix}management (
-  id INT NOT NULL AUTO_INCREMENT,
-  send_itinerary_form_id INT NULL,
-  itinerary_page INT NULL,
-  itinerary_page_content TEXT NULL,
-  add_label TINYTEXT NULL,
-  view_label TINYTEXT NULL,
-  PRIMARY KEY (id)
-);
-
-----
-
--- Add record to management table
-INSERT INTO {prefix}management (id, add_label, view_label) VALUES (1, 'Add to Trip Planner', 'View Trip Planner');
diff --git a/setup/databaseScripts/create_database_V0.0.3.sql b/setup/databaseScripts/create_database_V0.0.3.sql
new file mode 100644 (file)
index 0000000..c658dc4
--- /dev/null
@@ -0,0 +1,59 @@
+-- Gaslight Media Staff Add On
+-- File Created: 2018-10-24
+-- Database Version: 0.0.1
+-- Database Creation Script
+--
+-- To permit each query below to be executed separately,
+-- all queries must be separated by a line with four dashes
+
+-- Itinerary Session
+CREATE TABLE {prefix}session (
+  id INT NOT NULL AUTO_INCREMENT,
+  ref_type INT NOT NULL,            -- Reference Type (see plugin.ini for ref_types)
+  ref_dest INT NOT NULL,            -- Id from the Reference
+  contact_type INT NOT NULL,        -- Contact Type (see plugin.ini for contact_types)
+  contact_dest INT NOT NULL,        -- Id of the Contact Type
+  page_url TEXT NOT NULL,           -- Page url when this was added.
+  PRIMARY KEY (id),
+  INDEX(ref_dest),
+  INDEX(contact_dest)
+);
+
+----
+
+-- Itinerary User
+CREATE TABLE {prefix}user (
+  id INT NOT NULL AUTO_INCREMENT,
+  fname TINYTEXT NULL,
+  lname TINYTEXT NULL,
+  addr1 TINYTEXT NULL,
+  addr2 TINYTEXT NULL,
+  city TINYTEXT NULL,
+  state TINYTEXT NULL,
+  zip TINYTEXT NULL,
+  email TINYTEXT NULL,
+  phone TINYTEXT NULL,
+  fax TINYTEXT NULL,
+  password TINYTEXT NULL,
+  reset_token TINYTEXT NULL,
+  PRIMARY KEY (id),
+  INDEX(email(20))
+);
+
+----
+
+-- Management
+CREATE TABLE {prefix}management (
+  id INT NOT NULL AUTO_INCREMENT,
+  send_itinerary_form_id INT NULL,
+  itinerary_page INT NULL,
+  itinerary_page_content TEXT NULL,
+  add_label TINYTEXT NULL,
+  view_label TINYTEXT NULL,
+  PRIMARY KEY (id)
+);
+
+----
+
+-- Add record to management table
+INSERT INTO {prefix}management (id, add_label, view_label) VALUES (1, 'Add to Trip Planner', 'View Trip Planner');
index 4ecc20c..7eb30bf 100644 (file)
@@ -16,5 +16,6 @@
 $glmMembersItineraryDbVersions = array(
     '0.0.1'  => array('version' => '0.0.1', 'tables'  => 3, 'date' => '10/31/2018'),
     '0.0.2'  => array('version' => '0.0.2', 'tables'  => 3, 'date' => '11/13/2018'),
+    '0.0.3'  => array('version' => '0.0.3', 'tables'  => 3, 'date' => '11/16/2018'),
 );
 
diff --git a/setup/databaseScripts/update_database_V0.0.3.sql b/setup/databaseScripts/update_database_V0.0.3.sql
new file mode 100644 (file)
index 0000000..a1eef91
--- /dev/null
@@ -0,0 +1,12 @@
+-- Gaslight Media Members Database  - Itinerary Add-On
+-- File Created: 2018-11-13
+-- Database Version: 0.0.2
+-- Database Update From Previous Version Script
+--
+-- To permit each query below to be executed separately,
+-- all queries must be separated by a line with four dashses
+
+
+-- Add Form Id for Itinerary
+ALTER TABLE {prefix}user ADD COLUMN reset_token TINYTEXT NULL;
+
index 095e1dc..5f35dfa 100644 (file)
@@ -1,86 +1,94 @@
 {* Create Account Form *}
 
-<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
+<h2>Create an Account to Save your Trip Planner</h2>
 
-<!-- Compiled and minified CSS -->
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
+{if !$createSuccess}
+    {if $formErrors}<div class="glm-required">Form was not submitted. Please check form for any errors!</div>{/if}
+    <div class="glm-row">
+        <form class="glm-columns glm-medium-12" action="{$hisUrl}" method="post">
+            <input type="hidden" name="option" value="addAccount" />
 
-<!-- Compiled and minified JavaScript -->
-<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
-
-
-<h1>Create an Account to Save your Trip Planner</h1>
-
-<div class="row">
-    <form class="col s12" action="{$hisUrl}" method="post">
-        <input type="hidden" name="option" value="addAccount" />
-
-        <div class="row">
-            <div class="input-field col s6">
-                <input id="fname" name="fname" type="text" />
-                <label for="fname">First Name </label>
+            <div class="glm-row">
+                <div class="input-field glm-columns glm-small-12 glm-medium-6">
+                    <label for="fname">First Name </label>
+                    <input id="fname" name="fname" type="text" value="{$smarty.request.fname|escape}" />
+                </div>
+                <div class="input-field glm-columns glm-small-12 glm-medium-6">
+                    <label for="lname">Last Name </label>
+                    <input id="lname" name="lname" type="text" value="{$smarty.request.lname|escape}" />
+                </div>
             </div>
-            <div class="input-field col s6">
-                <input id="lname" name="lname" type="text" />
-                <label for="lname">Last Name </label>
-            </div>
-        </div>
 
-        <div class="row">
-            <div class="input-field col s6">
-                <input id="addr1" name="addr1" type="text" />
-                <label for="addr1">Address 1 </label>
-            </div>
-            <div class="input-field col s6">
-                <input id="addr2" name="addr2" type="text" />
-                <label for="addr2">Address 2 </label>
+            <div class="glm-row">
+                <div class="input-field glm-columns glm-small-12 glm-medium-6">
+                    <label for="addr1">Address 1 </label>
+                    <input id="addr1" name="addr1" type="text" value="{$smarty.request.addr1|escape}" />
+                </div>
+                <div class="input-field glm-columns glm-small-12 glm-medium-6">
+                    <label for="addr2">Address 2 </label>
+                    <input id="addr2" name="addr2" type="text" value="{$smarty.request.addr2|escape}" />
+                </div>
             </div>
-        </div>
 
-        <div class="row">
-            <div class="input-field col s4">
-                <input id="city" name="city" type="text" />
-                <label for="city">City </label>
-            </div>
-            <div class="input-field col s4">
-                <select id="state" name="state">
-                    <option value="">Select a State</option>
-                    {foreach $states as $state_abbr => $state_name}
-                    <option value="{$state_abbr}">{$state_name}</option>
-                    {/foreach}
-                </select>
-                <label for="state">State </label>
-            </div>
-            <div class="input-field col s4">
-                <input id="vip" name="zip" type="text" />
-                <label for="zip">Zip </label>
+            <div class="glm-row">
+                <div class="input-field glm-columns glm-small-12 glm-medium-4">
+                    <label for="city">City </label>
+                    <input id="city" name="city" type="text" value="{$smarty.request.city|escape}" />
+                </div>
+                <div class="input-field glm-columns glm-small-12 glm-medium-4">
+                    <label for="state">State </label>
+                    <select id="state" name="state">
+                        <option value="">Select a State</option>
+                        {foreach $states as $state_abbr => $state_name}
+                        <option value="{$state_abbr}"{if $smarty.request.state == $state_abbr} selected{/if}>{$state_name}</option>
+                        {/foreach}
+                    </select>
+                </div>
+                <div class="input-field glm-columns glm-small-12 glm-medium-4">
+                    <label for="zip">Zip </label>
+                    <input id="vip" name="zip" type="text" value="{$smarty.request.zip|escape}" />
+                </div>
             </div>
-        </div>
-        <div class="row">
-            <div class="input-field col s6">
-                <input id="email" type="email" name="email" required class="validate" />
-                <label for="email">Email </label>
-                <span class="helper-text" data-error="Not a valid email address!" data-success="Valid Email"></span>
+            <div class="glm-row">
+                <div class="input-field glm-columns glm-small-12 glm-medium-6">
+                    <label for="email" class="glm-required">Email </label>
+                    <input id="email" type="email" name="email" value="{$smarty.request.email|escape}" required />
+                    {if $formErrors.email}<small class="glm-required">There's already an account with that email!</small>{/if}
+                </div>
+                <div class="input-field glm-columns glm-small-12 glm-medium-6">
+                    <label for="email" class="glm-required">Verify Email </label>
+                    <input id="email" type="email" name="verify_email" value="{$smarty.request.verify_email|escape}" required />
+                    {if $formErrors.verify_email}<small class="glm-required">Does not match!</small>{/if}
+                </div>
             </div>
-            <div class="input-field col s6">
-                <input id="password" type="password" name="password" required class="validate" />
-                <label for="password">Password </label>
+            <div class="glm-row">
+                <div class="input-field glm-columns glm-small-12 glm-medium-6">
+                    <label for="password" class="glm-required">Password </label>
+                    <input id="password" type="password" name="password" value="{$smarty.request.password|escape}" required />
+                </div>
+                <div class="input-field glm-columns glm-small-12 glm-medium-6">
+                    <label for="password" class="glm-required">Verify Password </label>
+                    <input id="password" type="password" name="verify_password" value="{$smarty.request.verify_password|escape}" required />
+                    {if $formErrors.verify_password}<small class="glm-required">Does not match!</small>{/if}
+                </div>
             </div>
-        </div>
 
-        <div class="row">
-            <div class="input-field col s12">
-                <button class="btn waves-effect waves-light" type="submit" name="action"> Create Account
-                    <i class="material-icons right">send</i>
-                </button>
+            <div class="glm-row">
+                <div class="input-field glm-columns glm-medium-12">
+                    <button class="button" type="submit" name="action"> Create Account
+                    </button>
+                </div>
             </div>
-        </div>
 
-    </form>
-</div>
+        </form>
+    </div>
+{else}
+    Success message here...
+    <p><a href="{$thisUrl}">Go to Trip Planner</a></p>
+{/if}
 
 <script>
 jQuery(document).ready(function($){
-    $('#state').formSelect();
+    // $('#state').formSelect();
 });
 </script>
diff --git a/views/front/itinerary/forgot.html b/views/front/itinerary/forgot.html
new file mode 100644 (file)
index 0000000..33c8cb8
--- /dev/null
@@ -0,0 +1,15 @@
+<h2>Password Recovery</h2>
+
+<div class="glm_row">
+
+    <form action="{$thisUrl}" method="post">
+        <p>Enter your email address.</p>
+        <input type="hidden" name="option" value="reset" />
+        <div class="glm-columns glm-small-12 glm-medium-4">
+            <label for="email" class="glm-required"> Email </label>
+            <input type="email" id="email" name="email"  />
+            <input type="submit" value="Password Recovery" class="button" />
+        </div>
+    </form>
+
+</div>
index 8fc5294..de7b24b 100644 (file)
 <p>{$settings.itinerary_page_content}</p>
 
 
-<div style="width: 100%; padding: 20px;">
+<div class="glm_row">
 
     {if !$userLoggedIn}
     <form action="{$thisUrl}" method="post">
         <input type="hidden" name="option" value="login" />
-        <div style="width: 30%; float: left; padding: 5px;">
+        <div class="glm-columns glm-small-12 glm-medium-4">
             <h2>Sign In:</h2>
-            <input type="text" name="username" />
-            <input type="password" name="password" />
+            <label for="username" class="glm-required"> Email </label>
+            <input type="text" id="username" name="username" />
+            <label for="password" class="glm-required"> Password </label>
+            <input type="password" id="password" name="password"  />
             <input type="submit" value="Log in" class="button" />
 
             <a href="{$thisUrl}?option=forgot">Forgot your Password?</a>
         </div>
     </form>
 
-    <div style="width: 30%; float: left; padding: 5px;">
+    <div class="glm-columns glm-small-12 glm-medium-4">
         <h2>If you do not have an account</h2>
         <a href="{$thisUrl}?option=create"> Create Account </a><br>
         By creating an account, you'll be able to save your list for later.
     {/if}
 
     {if $members}
-    <div style="width: 30%; float: left; padding: 5px;">
+    <div class="glm-columns glm-small-12 glm-medium-4">
         <ul>
             <li> <a href="{$thisUrl}?option=moreinfo">Get more info</a> </li>
             <li> <a href="#" class="list-print" data-areaToPrint="PrintArea">Print this list</a> </li>
-            <li> <a href="#">View Map</a> </li>
+            <!-- <li> <a href="#">View Map</a> </li> -->
             <li> <a href="#">Help</a> </li>
         </ul>
     </div>
     {/if}
 
 </div>
+<div class="glm_row">
+    <div class="glm-columns glm-small-12" style="text-align: right;">
+        <button id="toggle-map-view">Hide Map</button>
+    </div>
+</div>
 <br clear="all">
 
 {if $members}
@@ -81,7 +88,7 @@
             </div>
         {/foreach}
     </div>
-<script src="{$jsUrl}/PrintArea/jquery.PrintArea.js" type="text/JavaScript" language="javascript"></script>
+<script src="{$jsUrl}/PrintArea/jquery.PrintArea.js"></script>
 <script>
     jQuery(document).ready(function($){
         $(".list-print").click(function(){
             });
         });
 
+        $('#toggle-map-view').on('click', function(){
+            $('#glm-locationMap-container').toggleClass('glm-hidden');
+        });
+
         /*
          *  Leaflet Map
          *  API reference: https://leafletjs.com/reference-1.3.2.html