From 9db6899f295661cedb0376f44ff364e75d0bb8ac Mon Sep 17 00:00:00 2001 From: Steve Sutton Date: Tue, 1 Oct 2019 09:08:52 -0400 Subject: [PATCH] Delete Member Start of Delete member work. TODO: delete images and files. --- models/admin/members/list.php | 6 +++ setup/adminHooks.php | 98 +++++++++++++++++++++++++++++++++++ views/admin/member/index.html | 43 +++++++++++++++ 3 files changed, 147 insertions(+) diff --git a/models/admin/members/list.php b/models/admin/members/list.php index aebede67..4a22d785 100755 --- a/models/admin/members/list.php +++ b/models/admin/members/list.php @@ -131,6 +131,12 @@ class GlmMembersAdmin_members_list extends GlmDataMembers // GlmScriptRegistry::selectScript( GlmScriptType::Style, 'Select2CSS' ); // GlmScriptRegistry::selectScript( GlmScriptType::Script, 'Select2JS' ); + // Option to delete Member Record. + if ( isset( $_REQUEST['option'] ) && $_REQUEST['option'] == 'delete' && $deleteMemberId = filter_var( $_REQUEST['member'], FILTER_VALIDATE_INT ) ) { + // Cal do_action on delete member. + do_action( 'glm-member-db-delete-member', $deleteMemberId ); + } + // Save all query parameters if ( isset( $_REQUEST['glm_action'] ) && $_REQUEST['glm_action'] == 'list' ) { $_SESSION['member_saved_search'] = $_REQUEST; diff --git a/setup/adminHooks.php b/setup/adminHooks.php index 0b504455..240af7fb 100755 --- a/setup/adminHooks.php +++ b/setup/adminHooks.php @@ -328,6 +328,104 @@ function glm_import_add_page() { add_action( 'load-'.$glm_import_sub_page, 'glm_admin_import_help_tab' ); } +/** + * Setup action for delete of member. + */ +add_action( 'glm-member-db-delete-member', function( $memberId ){ + // Call to delete a member record. + trigger_error( 'Delete for member with id:' . $memberId, E_USER_NOTICE ); + + // Delete Member Info Records. + // Get all member Info Records (for url's) + $memberInfoRecords = $this->wpdb->get_results( + $this->wpdb->prepare( + "SELECT MI.id, M.member_slug + FROM " . GLM_MEMBERS_PLUGIN_DB_PREFIX . "member_info MI, + " . GLM_MEMBERS_PLUGIN_DB_PREFIX . "members M + WHERE MI.member = %d + AND MI.member = M.id", + $memberId + ), + ARRAY_A + ); + if ( $memberInfoRecords ) { + foreach ( $memberInfoRecords as $info ) { + // Remove the url from the Open Search Engine. + $url = GLM_MEMBERS_SITE_BASE_URL . $this->config['settings']['canonical_member_page'] . '/' . $info['member_slug'] . '/'; + apply_filters( 'glm_member_db_common_search_removeurl', $url ); + + // TODO: Delete files. + // Get all files for deletion. + $files = $this->wpdb->get_results( + $this->wpdb->prepare( + "SELECT id,file_name + FROM " . GLM_MEMBERS_PLUGIN_DB_PREFIX . "files + WHERE ref_type = 20 + AND ref_dest = %d", + $info['id'] + ) + ); + if ( $files ) { + foreach ( $files as $file ) { + // Remove this file. + unlink( GLM_MEMBERS_PLUGIN_FILES_PATH . '/' . $file ); + } + } + $this->wpdb->delete( GLM_MEMBERS_PLUGIN_DB_PREFIX . 'files', array( 'ref_type' => 20, 'ref_dest' => $info['id'] ), array( '%d', '%d' ) ); + + // TODO: Delete images. + // Get logo from member to delete. + // Get all images for deletion. + $images = $this->wpdb->get_results( + $this->wpdb->prepare( + "SELECT id,file_name + FROM " . GLM_MEMBERS_PLUGIN_DB_PREFIX . "images + WHERE ref_type = 20 + AND ref_dest = %d", + $info['id'] + ) + ); + if ( $images ) { + foreach ( $images as $image ) { + // Remove this file. + foreach ( $this->config['imageSizes'] as $k => $v ) { + unlink( GLM_MEMBERS_PLUGIN_FILES_PATH . '/' . $k . '/' . $image ); + } + } + } + $this->wpdb->delete( GLM_MEMBERS_PLUGIN_DB_PREFIX . 'images', array( 'ref_type' => 20, 'ref_dest' => $info['id'] ), array( '%d', '%d' ) ); + + // Delete category_member_info. + $this->wpdb->delete( GLM_MEMBERS_PLUGIN_DB_PREFIX . 'category_member_info', array( 'member_info' => $info['id'] ), array( '%d' ) ); + + // Delete amenity_ref + $this->wpdb->delete( GLM_MEMBERS_PLUGIN_DB_PREFIX . 'amenity_ref', array( 'ref_type' => 20, 'ref_dest' => $info['id'] ), array( '%d', '%d' ) ); + + // Delete accommodations. + $this->wpdb->delete( GLM_MEMBERS_PLUGIN_DB_PREFIX . 'accommodations', array( 'ref_type' => 20, 'ref_dest' => $info['id'] ), array( '%d', '%d' ) ); + + // Delete golf. + $this->wpdb->delete( GLM_MEMBERS_PLUGIN_DB_PREFIX . 'golf', array( 'ref_type' => 20, 'ref_dest' => $info['id'] ), array( '%d', '%d' ) ); + + // Delete restaurants. + $this->wpdb->delete( GLM_MEMBERS_PLUGIN_DB_PREFIX . 'restaurants', array( 'ref_type' => 20, 'ref_dest' => $info['id'] ), array( '%d', '%d' ) ); + + // Delete member_info. + $this->wpdb->delete( GLM_MEMBERS_PLUGIN_DB_PREFIX . 'member_info', array( 'id' => $info['id'] ), array( '%d' ) ); + } + } + + // Delete member_detail_stats. + $this->wpdb->delete( GLM_MEMBERS_PLUGIN_DB_PREFIX . 'member_detail_stats', array( 'member' => $memberId ), array( '%d' ) ); + + // Delete clickthrough_stats. + $this->wpdb->delete( GLM_MEMBERS_PLUGIN_DB_PREFIX . 'clickthrough_stats', array( 'member' => $memberId ), array( '%d' ) ); + + // Delete Member. + $this->wpdb->delete( GLM_MEMBERS_PLUGIN_DB_PREFIX . 'members', array( 'id' => $memberId ), array( '%d' ) ); + +}, 10, 1 ); + /** * glm_admin_import_help_tab diff --git a/views/admin/member/index.html b/views/admin/member/index.html index a49bf399..c8426313 100644 --- a/views/admin/member/index.html +++ b/views/admin/member/index.html @@ -93,8 +93,29 @@ {if apply_filters('glm_members_menu_members', true)}
+ {* Delete Button *} + Delete {$terms.term_member_cap} Edit {$terms.term_member_cap} Name and Status
+
+
+

Cancel

+

+
+
+

WARNING:

+

+ Clicking the "Delete this {$terms.term_member_cap}" button above will + delete all of the data. +

+

+ Once deleted, this information will no longer be available and cannot be retrieved! +

+
+
{/if} {else} @@ -302,6 +323,28 @@ alert(notice.replace(/-br-/g, "\n")); }); + {if apply_filters('glm_members_menu_members', true)} + // Delete Member Dialog + $("#deleteMemberDialog").dialog({ + autoOpen: false, + minWidth: 4, + dialogClass: "glm-dialog-no-close" + }); + $('#deleteMemberInfoButton').click( function(e) { + e.preventDefault(); + $('#deleteMemberDialog').dialog('open'); + }); + $('#deleteMemberCancel').click( function() { + console.log( 'Cancel Delete member action called' ); + $("#deleteMemberDialog").dialog("close"); + }); + $('#deleteMemberSubmit').click( function() { + console.log( 'Delete member action called' ); + console.log( 'Member Id:', {$memberID} ); + window.location.replace("{$thisUrl}?page=glm-members-admin-menu-members-list&glm_action=list&option=delete&member={$memberID}"); + }); + {/if} + // Flash certain elements for a short time after display $(".glm-flash-updated").fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500); -- 2.17.1