Delete Member
authorSteve Sutton <steve@gaslightmedia.com>
Tue, 1 Oct 2019 13:08:52 +0000 (09:08 -0400)
committerSteve Sutton <steve@gaslightmedia.com>
Fri, 25 Oct 2019 14:01:34 +0000 (10:01 -0400)
Start of Delete member work.
TODO: delete images and files.

models/admin/members/list.php
setup/adminHooks.php
views/admin/member/index.html

index aebede6..4a22d78 100755 (executable)
@@ -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;
index 0b50445..240af7f 100755 (executable)
@@ -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
 
index a49bf39..c842631 100644 (file)
                     </div>
                     {if apply_filters('glm_members_menu_members', true)}
                         <div class="glm-small-4 glm-right">
+                            {* Delete Button *}
+                            <a
+                                id="deleteMemberInfoButton"
+                                href="{$thisUrl}?page={$thisPage}&glm_action=memberEdit&member={$memberID}"
+                                class="button button-primary glm-button glm-right">Delete {$terms.term_member_cap}</a>
                             <a href="{$thisUrl}?page={$thisPage}&glm_action=memberEdit&member={$memberID}" class="button button-primary glm-button glm-right">Edit {$terms.term_member_cap} Name and Status</a>
                         </div>
+                        <div id="deleteMemberDialog">
+                             <center>
+                                <p><a id="deleteMemberCancel" class="button button-primary">Cancel</a></p>
+                                <p><input id="deleteMemberSubmit" type="submit" value="Delete this {$terms.term_member_cap}"></p>
+                            </center>
+                            <div class="glm-item-container">
+                                <p><center><span class="glm-error">WARNING:</span></center></p>
+                                <p>
+                                    <span class="glm-warning">Clicking the "Delete this {$terms.term_member_cap}" button above will
+                                    delete all of the data.</span>
+                                </p>
+                                <p>
+                                    <span class="glm-error">Once deleted, this information will no longer be available and cannot be retrieved!</span>
+                                </p>
+                            </div>
+                        </div>
                     {/if}
                 </div>
             {else}
             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);