From 2fa0af6846b9b3fdc3b48e5998c5c0fd778b0e72 Mon Sep 17 00:00:00 2001 From: Steve Sutton Date: Tue, 11 Dec 2018 13:41:22 -0500 Subject: [PATCH] Finish password reset Also get count returned for list. --- js/front.js | 31 ++--- models/admin/ajax/itineraryList.php | 1 + models/front/itinerary/list.php | 121 +++++++++++++++++- views/front/itinerary/forgot.html | 27 ++-- views/front/itinerary/list.html | 25 ++++ views/front/itinerary/passwordReset.html | 10 ++ views/front/itinerary/passwordResetEmail.html | 13 ++ views/front/itinerary/passwordResetForm.html | 18 +++ 8 files changed, 211 insertions(+), 35 deletions(-) create mode 100644 views/front/itinerary/passwordReset.html create mode 100644 views/front/itinerary/passwordResetEmail.html create mode 100644 views/front/itinerary/passwordResetForm.html diff --git a/js/front.js b/js/front.js index 6c2e403..cfba112 100644 --- a/js/front.js +++ b/js/front.js @@ -21,7 +21,8 @@ jQuery('.glm-planner-button').on('click', function(e){ ref_page: ref_page }, dataType: 'html', - success: function(){ + success: function(count){ + updateList(count); button.data('view', '1'); button.find('.trip-alt-text').removeClass('add_trip1'); button.find('.trip-alt-text').addClass('view_trip1'); @@ -34,29 +35,13 @@ jQuery('.glm-planner-button').on('click', function(e){ window.location.href = load_page; } }); - -jQuery('.glm-itinerary-delete').on('click', function(e){ - e.preventDefault(); - var member_id = jQuery(this).data('id'); - var base_url = jQuery(this).data('baseurl'); - var button = jQuery(this); - if ( member_id ) { - jQuery.ajax({ - url: base_url + '/wp-admin/admin-ajax.php', - cache: false, - data: { - action: 'glm_members_admin_ajax', - glm_action: 'itineraryList', - member_id: member_id, - del: true - }, - success: function(){ - button.parent('.glm-itinerary-list-item').remove(); - } - }); +function updateList(listCount){ + if(listCount > 0) { + $(".trip-list-count").html(listCount + " item(s) in your trip planner"); + } else { + $(".trip-list-count").html("Make the most of your getaway!"); } - return false; -}); +} jQuery('.glm-itinerary-request-delete').on('click', function(e){ e.preventDefault(); var member_id = jQuery(this).data('id'); diff --git a/models/admin/ajax/itineraryList.php b/models/admin/ajax/itineraryList.php index a41e137..432e80e 100644 --- a/models/admin/ajax/itineraryList.php +++ b/models/admin/ajax/itineraryList.php @@ -141,6 +141,7 @@ class GlmMembersAdmin_ajax_itineraryList //extends GlmDataMemberInfo } // trigger_error( print_r( $_SESSION, true ), E_USER_NOTICE ); + echo count( $_SESSION['travel-list'] ); return true; diff --git a/models/front/itinerary/list.php b/models/front/itinerary/list.php index 2af3458..e8bc9a9 100755 --- a/models/front/itinerary/list.php +++ b/models/front/itinerary/list.php @@ -72,6 +72,8 @@ class GlmMembersFront_itinerary_list // extends GlmMembersFront_events_baseActio $userLoggedIn = false; $loginFailed = false; $createSuccess = false; + $email = false; + $token = false; $members = array(); $membersWithEmails = array(); $memberEmails = array(); @@ -232,11 +234,52 @@ class GlmMembersFront_itinerary_list // extends GlmMembersFront_events_baseActio case 'forgot': $view = 'forgot.html'; break; + case 'emailReset': + $email = filter_var( $_REQUEST['email'], FILTER_VALIDATE_EMAIL ); + $token = filter_var( $_REQUEST['token'], FILTER_SANITIZE_STRING ); + if ( $email ) { + $emailFound = $this->wpdb->get_row( + $this->wpdb->prepare( + "SELECT id,reset_token + FROM " . GLM_MEMBERS_ITINERARY_PLUGIN_DB_PREFIX . "user + WHERE email = %s", + $email + ), + ARRAY_A + ); + if ( isset( $emailFound ) && isset( $emailFound['reset_token'] ) ) { + // See if the resetToken matches + if ( $emailFound['reset_token'] == $token ) { + // echo '
$token (matches): ' . print_r( $token, true ) . '
'; + $view = 'passwordResetForm.html'; + if ( isset( $_REQUEST['new_pass'] ) && $newPassword = filter_var( $_REQUEST['new_pass'], FILTER_SANITIZE_STRING ) ) { + // echo '
$_REQUEST: ' . print_r( $_REQUEST, true ) . '
'; + // empty the reset_token and update password + $this->wpdb->update( + GLM_MEMBERS_ITINERARY_PLUGIN_DB_PREFIX . 'user', + array( 'reset_token' => '', 'password' => md5( $newPassword ) ), + array( 'id' => $emailFound['id'] ), + array( '%s', '%s' ), + array( '%d' ) + ); + $createSuccess = true; + } + } else { + $formErrors['user'] = true; + // echo '
$token (NOT A MATCH): ' . print_r( $token, true ) . '
'; + $view = 'forgot.html'; + } + + } + } + // $view = 'passwordResetForm.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 ); + $email = filter_var( $_REQUEST['email'], FILTER_VALIDATE_EMAIL ); + // echo '
$email: ' . print_r( $email, true ) . '
'; if ( $email ) { $emailFound = $this->wpdb->get_var( $this->wpdb->prepare( @@ -246,14 +289,30 @@ class GlmMembersFront_itinerary_list // extends GlmMembersFront_events_baseActio $email ) ); + // echo '
$emailFound: ' . print_r( $emailFound, true ) . '
'; if ( $emailFound ) { // Setup the email message. // Create the md5 reset token. + $resetToken = md5( $email . time() ); + $this->wpdb->update( + GLM_MEMBERS_ITINERARY_PLUGIN_DB_PREFIX . 'user', + array( 'reset_token' => $resetToken ), + array( 'id' => $emailFound ), + array( '%s' ), + array( '%d' ) + ); // Send email. + // echo '
$resetToken: ' . print_r( $resetToken, true ) . '
'; + $this->sendResetEmail( $email, $resetToken ); + } else { + $formErrors['user'] = true; } } else { // No email given + $formErrors['user'] = true; } + // Show message about email. + $view = 'passwordReset.html'; break; case 'moreinfo': // Need to create two list one with emails and one without. @@ -313,6 +372,8 @@ class GlmMembersFront_itinerary_list // extends GlmMembersFront_events_baseActio 'formErrors' => $formErrors, 'createSuccess' => $createSuccess, 'userInfo' => $userInfo, + 'email' => $email, + 'token' => $token, ); error_reporting(E_ALL ^ E_NOTICE); @@ -324,4 +385,62 @@ class GlmMembersFront_itinerary_list // extends GlmMembersFront_events_baseActio 'data' => $templateData, ); } + + /** + * Send password reset link. + * + * @param string $email Email To: + * @param string $resetToken Reset token + * + * @return void + */ + public function sendResetEmail( $email, $resetToken ) + { + $subject = 'Your password reset instructions'; + $from_header = 'Test Server '; + $smarty = new smartyTemplateSupport(); + $viewPath = GLM_MEMBERS_ITINERARY_PLUGIN_PATH . '/views'; + $smarty->template->setTemplateDir( $viewPath ); + $viewFile = 'front/itinerary/passwordResetEmail.html'; + + $smarty->templateAssign( 'title', $subject ); + $smarty->templateAssign( 'email', $email ); + $smarty->templateAssign( 'resetToken', $resetToken ); + $smarty->templateAssign( 'tripPage', get_permalink( $this->config['settings']['itinerary_page'] ) ); + + // Generate output from model data and view + $htmlMessage = $smarty->template->fetch( $viewFile ); + + // change the default wordpress from name when sending mail + add_filter( + 'wp_mail_from_name', + function ( $name ) { + $siteName = get_bloginfo( 'name' ); + return $siteName; + } + ); + // Send confirmation email, set the content type to allow html by using this filter + add_filter( 'wp_mail_content_type', array( $this, 'set_content_type' ) ); + + $message = $htmlMessage; + $header[] = 'From:' . $from_header; + if ( $replyto ) { + $header[] = 'Reply-To:' . $replyto; + } + + wp_mail( $email, $subject, $message, $header ); + + // remove the filter to avoid conflicts + remove_filter( 'wp_mail_content_type', array( $this, 'set_content_type' ) ); + } + + /** + * Set content type of the email. + * + * Used as filter for the wp_mail_content_type + */ + function set_content_type() + { + return "text/html"; + } } diff --git a/views/front/itinerary/forgot.html b/views/front/itinerary/forgot.html index 33c8cb8..a16a255 100644 --- a/views/front/itinerary/forgot.html +++ b/views/front/itinerary/forgot.html @@ -1,15 +1,20 @@

Password Recovery

-
+{if isset($formErrors) && !empty($formErrors)} +

There was an error.

+

Go to Trip Planner

+{else} +
-
-

Enter your email address.

- -
- - - -
-
+
+

Enter your email address.

+ +
+ + + +
+
-
+
+{/if} diff --git a/views/front/itinerary/list.html b/views/front/itinerary/list.html index 19bfa0b..372e073 100644 --- a/views/front/itinerary/list.html +++ b/views/front/itinerary/list.html @@ -135,6 +135,31 @@