Plugin Directory

Changeset 3354131


Ignore:
Timestamp:
09/01/2025 04:36:53 PM (7 months ago)
Author:
expresstechsoftware
Message:

Tagging version 1.1.3

Location:
expresstechsoftwares-memberpress-discord-add-on
Files:
178 added
5 edited

Legend:

Unmodified
Added
Removed
  • expresstechsoftwares-memberpress-discord-add-on/trunk/CHANGELOG.txt

    r3238134 r3354131  
     1= 1.1.3 =
     2- Add RUN API implementation for Pro version to bulk insert membership events into wp_ets_mepr_events_log.
     3
    14= 1.1.2 =
    25- Reverting Schedule disconnect and delete member to previous instant delete.
     
    47- Improved logging and now capture more events like cancel, expire.
    58- Testing with WP 6.7.1
     9- Fix Maximum Call Stack Overflow Due to Exponential DOM Element Duplication GH#161
    610
    711= 1.1.1 =
  • expresstechsoftwares-memberpress-discord-add-on/trunk/admin/class-memberpress-discord-admin.php

    r3238134 r3354131  
    10081008
    10091009    /**
     1010     * Run API function that will handle call if PRO version is active.
     1011     * @param NONE
     1012     * @param NONE
     1013    */
     1014    public function ets_memberspress_discord_run_api_pro() {
     1015        if ( ! defined( 'ABSPATH' ) ) { exit; }
     1016
     1017        global $wpdb;
     1018        // Get and validate user_id
     1019        $user_id = isset( $_POST['user_id'] ) ? absint( $_POST['user_id'] ) : 0;
     1020        if ( ! $user_id ) {
     1021            return new WP_Error( 'invalid_user_id', 'Invalid user_id.' );
     1022        }       
     1023
     1024        $mepr_members_table = $wpdb->prefix . 'mepr_members';
     1025        $events_log_table   = $wpdb->prefix . 'ets_mepr_events_log';
     1026
     1027        // Fetch memberships string e.g. "(9,11)"
     1028        $memberships_raw = $wpdb->get_var(
     1029            $wpdb->prepare(
     1030                "SELECT memberships FROM {$mepr_members_table} WHERE user_id = %d LIMIT 1",
     1031                $user_id
     1032            )
     1033        );
     1034
     1035        if ( is_null( $memberships_raw ) ) {
     1036            return new WP_Error( 'not_found', 'No mepr_members row found for this user_id.' );
     1037        }
     1038
     1039        // Normalize: strip parentheses/spaces, split by comma
     1040        $clean = trim( $memberships_raw );
     1041        $clean = preg_replace( '/^\((.*)\)$/', '$1', $clean ); // remove outer ( )
     1042        $parts = array_filter( array_map( 'trim', explode( ',', $clean ) ) );
     1043
     1044        // Keep only positive integers, unique
     1045        $membership_ids = array_values( array_unique( array_map( 'absint', $parts ) ) );
     1046        $membership_ids = array_filter( $membership_ids, function( $v ){ return $v > 0; } );
     1047
     1048        if ( empty( $membership_ids ) ) {
     1049            return new WP_Error( 'no_memberships', 'No valid membership IDs found for this user.' );
     1050        }
     1051
     1052        // Prepare multi-row INSERT
     1053        $now_mysql   = current_time( 'mysql' );        // site-local time; switch to current_time('mysql', true) if you want GMT
     1054        $event_name  = 'RUN_API';
     1055        $status      = 'pending';
     1056        $args_json   = '{}';
     1057        $endpoint    = 'DISCORD_API_GUILD_MEMBER_ROLE';
     1058        $retry_count = 0;
     1059
     1060        // Columns we’ll insert (exclude id & last_updated which is auto)
     1061        // event_key, event_name, event_time, status_of_api, user_id, membership_id, args_from_event, processed_time, retry_count, error_message, endpoint_url
     1062        $placeholders_row = "(%s,%s,%s,%s,%d,%d,%s,NULL,%d,NULL,%s)";
     1063        // If you truly need "processed_time = '0000-00-00 00:00:00'", replace NULL above with %s and pass '0000-00-00 00:00:00' in the args,
     1064        // and ensure your MySQL SQL_MODE allows it.
     1065
     1066        $placeholders = [];
     1067        $values       = [];
     1068
     1069        foreach ( $membership_ids as $mid ) {
     1070            $placeholders[] = $placeholders_row;
     1071            $values[] = wp_generate_uuid4(); // event_key
     1072            $values[] = $event_name;
     1073            $values[] = $now_mysql;
     1074            $values[] = $status;
     1075            $values[] = $user_id;
     1076            $values[] = $mid;
     1077            $values[] = $args_json;
     1078            // processed_time is NULL literal in SQL
     1079            $values[] = $retry_count;
     1080            // error_message is NULL literal in SQL
     1081            $values[] = $endpoint;
     1082        }
     1083
     1084        $sql = "
     1085        INSERT INTO {$events_log_table}
     1086            (event_key, event_name, event_time, status_of_api, user_id, membership_id, args_from_event, processed_time, retry_count, error_message, endpoint_url)
     1087        VALUES " . implode( ",", $placeholders );
     1088
     1089        $prepared = $wpdb->prepare( $sql, $values );
     1090
     1091        $rows = $wpdb->query( $prepared );
     1092        if ( false === $rows ) {
     1093            return new WP_Error( 'db_error', 'Insert failed: ' . $wpdb->last_error );
     1094        }
     1095
     1096        // Optionally return a structured result; for AJAX you can wp_send_json_success()
     1097        // return array(
     1098        //  'inserted_rows'   => $rows,
     1099        //  'user_id'         => $user_id,
     1100        //  'membership_ids'  => $membership_ids,
     1101        //  'status'          => 'ok',
     1102        // );
     1103       
     1104        $event_res = array(
     1105            'status'  => 1,
     1106            'message' => __( 'success', 'connect-memberpress-discord-add-on' ),
     1107        );
     1108        return wp_send_json( $event_res );
     1109    }
     1110
     1111    /**
    10101112     * Manage user roles api calls
    10111113     *
     
    10241126                wp_send_json_error( 'You do not have sufficient rights', 403 );
    10251127                exit();
     1128        }
     1129
     1130        // Check the filter before executing the method
     1131        if ( apply_filters( 'disable_as_for_roles_management', true ) ) {
     1132            $this->ets_memberspress_discord_run_api_pro();
     1133            return;
    10261134        }
    10271135
  • expresstechsoftwares-memberpress-discord-add-on/trunk/admin/js/memberpress-discord-admin.js

    r3187243 r3354131  
    6363                        $.each(JSON.parse(mapjson), function (key, val) {
    6464                            var arrayofkey = key.split('id_');
    65                             var preclone = $('*[data-role_id="' + val + '"]').clone();
    66                             if(preclone.length>1){
     65                           
     66                            // 1. Clone ONLY original elements (exclude those with data-level_id)
     67                            var preclone = $('[data-role_id="' + val + '"]:not([data-level_id])').clone();
     68                           
     69                            if (preclone.length > 1) {
    6770                                preclone.slice(1).hide();
    6871                            }
    69                             if (jQuery('*[data-level_id="' + arrayofkey[1] + '"]').find('*[data-role_id="' + val + '"]').length == 0) {
    70                                 $('*[data-level_id="' + arrayofkey[1] + '"]').append(preclone).attr('data-drop-role_id', val).find('span').css({ 'order': '2' });
    71                             }
    72                             if ($('*[data-level_id="' + arrayofkey[1] + '"]').find('.makeMeDraggable').length >= 1) {
    73                                 $('*[data-level_id="' + arrayofkey[1] + '"]').droppable("destroy");
    74                             }
    75                             preclone.css({ 'width': '100%', 'left': '0', 'top': '0', 'margin-bottom': '0px', 'order': '1' }).attr('data-level_id', arrayofkey[1]);
     72                           
     73                            // 2. Check if the target level container needs the element
     74                            var $targetLevel = $('[data-level_id="' + arrayofkey[1] + '"]');
     75                            if ($targetLevel.find('[data-role_id="' + val + '"]').length === 0) {
     76                                // 3. Append the clone and mark it with data-level_id
     77                                preclone
     78                                    .attr('data-level_id', arrayofkey[1])
     79                                    .css({ 'width': '100%', 'left': '0', 'top': '0', 'margin-bottom': '0px', 'order': '1' });
     80                               
     81                                $targetLevel
     82                                    .append(preclone)
     83                                    .attr('data-drop-role_id', val)
     84                                    .find('span')
     85                                    .css({ 'order': '2' });
     86                            }
     87                           
     88                            // 4. Conditionally destroy droppable
     89                            if ($targetLevel.find('.makeMeDraggable').length >= 1) {
     90                                $targetLevel.droppable("destroy");
     91                            }
     92                           
     93                            // 5. Initialize dragging AFTER appending
    7694                            makeDrag(preclone);
    77                            
    7895                        });
    7996                    }
  • expresstechsoftwares-memberpress-discord-add-on/trunk/admin/js/memberpress-discord-admin.min.js

    r3187243 r3354131  
    1 (function($){'use strict';$(document).ready(function(){if(etsMemberpressParams.is_admin){if(window.location.href.indexOf("mepr_")==-1&&jQuery("#skeletabsTab1").data('identity')=='mepr_settings'){jQuery("#skeletabsTab1").trigger("click")}
    2 $.ajax({type:"POST",dataType:"JSON",url:etsMemberpressParams.admin_ajax,data:{'action':'memberpress_load_discord_roles','ets_memberpress_discord_nonce':etsMemberpressParams.ets_memberpress_discord_nonce,},beforeSend:function(){$(".discord-roles .spinner").addClass("is-active");$(".initialtab.spinner").addClass("is-active")},success:function(response){if(response!=null&&response.hasOwnProperty('code')&&response.code==50001&&response.message=='Missing Access'){$(".btn-connect-to-bot").show()}else if(response.code===10004&&response.message=='Unknown Guild'){$(".btn-connect-to-bot").show().after('<p><b>The server ID is wrong or you did not connect the Bot.</b></p>')}else if(response.code===0&&response.message=='401: Unauthorized'){$("#connect-discord-bot").show().html("Error: Unauthorized - The Bot Token is wrong").addClass('error-bk')}else if(response==null||response.message=='401: Unauthorized'||response.hasOwnProperty('code')||response==0){$("#connect-discord-bot").show().html("Error: Please check all details are correct").addClass('error-bk')}else{if($('.ets-tabs button[data-identity="level-mapping"]').length){$('.ets-tabs button[data-identity="level-mapping"]').show()}
    3 $("#connect-discord-bot").show().html("Bot Connected "+etsMemberpressParams.discord_icon).addClass('not-active');var activeTab=localStorage.getItem('activeTab');if($('.ets-tabs button[data-identity="level-mapping"]').length==0&&activeTab=='level-mapping'){$('.ets-tabs button[data-identity="mepr_settings"]').trigger('click')}
    4 $.each(response,function(key,val){var isbot=!1;if(val.hasOwnProperty('tags')){if(val.tags.hasOwnProperty('bot_id')){isbot=!0}}
    5 if(key!='previous_mapping'&&isbot==!1&&val.name!='@everyone'){$('.discord-roles').append('<div class="makeMeDraggable" style="background-color:#'+val.color.toString(16)+'" data-role_id="'+val.id+'" >'+val.name+'</div>');$('#defaultRole').append('<option value="'+val.id+'" >'+val.name+'</option>');makeDrag($('.makeMeDraggable'))}});var defaultRole=$('#selected_default_role').val();if(defaultRole){$('#defaultRole option[value='+defaultRole+']').prop('selected',!0)}
    6 if(response.previous_mapping){var mapjson=response.previous_mapping}else{var mapjson=localStorage.getItem('MemberPressMappingjson')}
    7 $("#maaping_json_val").html(mapjson);$.each(JSON.parse(mapjson),function(key,val){var arrayofkey=key.split('id_');var preclone=$('*[data-role_id="'+val+'"]').clone();if(preclone.length>1){preclone.slice(1).hide()}
    8 if(jQuery('*[data-level_id="'+arrayofkey[1]+'"]').find('*[data-role_id="'+val+'"]').length==0){$('*[data-level_id="'+arrayofkey[1]+'"]').append(preclone).attr('data-drop-role_id',val).find('span').css({'order':'2'})}
    9 if($('*[data-level_id="'+arrayofkey[1]+'"]').find('.makeMeDraggable').length>=1){$('*[data-level_id="'+arrayofkey[1]+'"]').droppable("destroy")}
    10 preclone.css({'width':'100%','left':'0','top':'0','margin-bottom':'0px','order':'1'}).attr('data-level_id',arrayofkey[1]);makeDrag(preclone)})}},error:function(response){$("#connect-discord-bot").show().html("Error: Please check all details are correct").addClass('error-bk');console.error(response)},complete:function(){$(".discord-roles .spinner").removeClass("is-active").css({"float":"right"});$("#skeletabsTab1 .spinner").removeClass("is-active").css({"float":"right","display":"none"})}});$('#clrbtn').click(function(e){e.preventDefault();$.ajax({url:etsMemberpressParams.admin_ajax,type:"POST",data:{'action':'memberpress_discord_clear_logs','ets_memberpress_discord_nonce':etsMemberpressParams.ets_memberpress_discord_nonce,},beforeSend:function(){$(".clr-log.spinner").addClass("is-active").show()},success:function(data){if(data.error){alert(data.error.msg)}else{$('.error-log').html("Clear logs Sucesssfully !")}},error:function(response){console.error(response)},complete:function(){$(".clr-log.spinner").removeClass("is-active").hide()}})});$('.ets-memberpress-run-api').on('click',function(e){e.preventDefault();var userId=$(this).data('uid');$.ajax({type:"POST",dataType:"JSON",url:etsMemberpressParams.admin_ajax,data:{'action':'memberpress_discord_member_table_run_api','user_id':userId,'ets_memberpress_discord_nonce':etsMemberpressParams.ets_memberpress_discord_nonce,},beforeSend:function(){$("."+userId+".spinner").addClass("is-active").show()},success:function(response){if(response.status==1){$("."+userId+".ets-save-success").show()}},error:function(response){console.error(response)},complete:function(){$("."+userId+".spinner").removeClass("is-active").hide()}})});$("#MemberPressRevertMapping").click(function(){localStorage.removeItem('MemberPressMapArray');localStorage.removeItem('MemberPressMappingjson')});function init(){$('.makeMeDroppable').droppable({drop:handleDropEvent,hoverClass:'hoverActive',});$('.discord-roles-col').droppable({drop:handlePreviousDropEvent,hoverClass:'hoverActive',})}
    11 $(init);function makeDrag(el){el.draggable({revert:"invalid",helper:'clone',start:function(e,ui){ui.helper.css({"width":"45%"})}})}
    12 function handlePreviousDropEvent(event,ui){var draggable=ui.draggable;if(draggable.data('level_id')){$(ui.draggable).remove().hide()}
    13 $(this).append(draggable);$('*[data-drop-role_id="'+draggable.data('role_id')+'"]').droppable({drop:handleDropEvent,hoverClass:'hoverActive',});$('*[data-drop-role_id="'+draggable.data('role_id')+'"]').attr('data-drop-role_id','');var oldItems=JSON.parse(localStorage.getItem('MemberPressMapArray'))||[];$.each(oldItems,function(key,val){if(val){var arrayofval=val.split(',');if(arrayofval[0]=='level_id_'+draggable.data('level_id')&&arrayofval[1]==draggable.data('role_id')){delete oldItems[key]}}});var jsonStart="{";$.each(oldItems,function(key,val){if(val){var arrayofval=val.split(',');if(arrayofval[0]!='level_id_'+draggable.data('level_id')||arrayofval[1]!=draggable.data('role_id')){jsonStart=jsonStart+'"'+arrayofval[0]+'":'+'"'+arrayofval[1]+'",'}}});localStorage.setItem('MemberPressMapArray',JSON.stringify(oldItems));var lastChar=jsonStart.slice(-1);if(lastChar==','){jsonStart=jsonStart.slice(0,-1)}
    14 var MemberPressMappingjson=jsonStart+'}';$("#maaping_json_val").html(MemberPressMappingjson);localStorage.setItem('MemberPressMappingjson',MemberPressMappingjson);draggable.css({'width':'100%','left':'0','top':'0','margin-bottom':'10px'})}
    15 function handleDropEvent(event,ui){var draggable=ui.draggable;var newItem=[];var newClone=$(ui.helper).clone();if($(this).find(".makeMeDraggable").length>=1){return!1}
    16 $('*[data-drop-role_id="'+newClone.data('role_id')+'"]').droppable({drop:handleDropEvent,hoverClass:'hoverActive',});$('*[data-drop-role_id="'+newClone.data('role_id')+'"]').attr('data-drop-role_id','');if($(this).data('drop-role_id')!=newClone.data('role_id')){var oldItems=JSON.parse(localStorage.getItem('MemberPressMapArray'))||[];$(this).attr('data-drop-role_id',newClone.data('role_id'));newClone.attr('data-level_id',$(this).data('level_id'));$.each(oldItems,function(key,val){if(val){var arrayofval=val.split(',');if(arrayofval[0]=='level_id_'+$(this).data('level_id')){delete oldItems[key]}}});var newkey='level_id_'+$(this).data('level_id');oldItems.push(newkey+','+newClone.data('role_id'));var jsonStart="{";$.each(oldItems,function(key,val){if(val){var arrayofval=val.split(',');if(arrayofval[0]=='level_id_'+$(this).data('level_id')||arrayofval[1]!=newClone.data('role_id')&&arrayofval[0]!='level_id_'+$(this).data('level_id')||arrayofval[1]==newClone.data('role_id')){jsonStart=jsonStart+'"'+arrayofval[0]+'":'+'"'+arrayofval[1]+'",'}}});localStorage.setItem('MemberPressMapArray',JSON.stringify(oldItems));var lastChar=jsonStart.slice(-1);if(lastChar==','){jsonStart=jsonStart.slice(0,-1)}
    17 var MemberPressMappingjson=jsonStart+'}';localStorage.setItem('MemberPressMappingjson',MemberPressMappingjson);$("#maaping_json_val").html(MemberPressMappingjson)}
    18 $(this).append(newClone);$(this).find('span').css({'order':'2'});if(jQuery(this).find('.makeMeDraggable').length>=1){$(this).droppable("destroy")}
    19 makeDrag($('.makeMeDraggable'));newClone.css({'width':'100%','margin-bottom':'0px','left':'0','position':'unset','order':'1'})}}
    20 $('#ets_memberpress_btn_color').wpColorPicker();$('#ets_memberpress_discord_btn_disconnect_color').wpColorPicker();$(' .ets-memberpress-discord-review-notice > button.notice-dismiss').on('click',function(){$.ajax({type:"POST",dataType:"JSON",url:etsMemberpressParams.admin_ajax,data:{'action':'ets_memberpress_discord_notice_dismiss','ets_memberpress_discord_nonce':etsMemberpressParams.ets_memberpress_discord_nonce},beforeSend:function(){console.log('sending...')},success:function(response){console.log(response)},error:function(response){console.error(response)},complete:function(){}})})});$.skeletabs.setDefaults({keyboard:!1,})})(jQuery)
     1!function(e){"use strict";e(document).ready(function(){if(etsMemberpressParams.is_admin){function r(e){e.draggable({revert:"invalid",helper:"clone",start:function(e,r){r.helper.css({width:"45%"})}})}function a(r,a){var s=a.draggable;s.data("level_id")&&e(a.draggable).remove().hide(),e(this).append(s),e('*[data-drop-role_id="'+s.data("role_id")+'"]').droppable({drop:t,hoverClass:"hoverActive"}),e('*[data-drop-role_id="'+s.data("role_id")+'"]').attr("data-drop-role_id","");var o=JSON.parse(localStorage.getItem("MemberPressMapArray"))||[];e.each(o,function(e,r){if(r){var a=r.split(",");a[0]=="level_id_"+s.data("level_id")&&a[1]==s.data("role_id")&&delete o[e]}});var i="{";e.each(o,function(e,r){if(r){var a=r.split(",");(a[0]!="level_id_"+s.data("level_id")||a[1]!=s.data("role_id"))&&(i=i+'"'+a[0]+'":"'+a[1]+'",')}}),localStorage.setItem("MemberPressMapArray",JSON.stringify(o)),","==i.slice(-1)&&(i=i.slice(0,-1));var d=i+"}";e("#maaping_json_val").html(d),localStorage.setItem("MemberPressMappingjson",d),s.css({width:"100%",left:"0",top:"0","margin-bottom":"10px"})}function t(a,s){s.draggable;var o=e(s.helper).clone();if(e(this).find(".makeMeDraggable").length>=1)return!1;if(e('*[data-drop-role_id="'+o.data("role_id")+'"]').droppable({drop:t,hoverClass:"hoverActive"}),e('*[data-drop-role_id="'+o.data("role_id")+'"]').attr("data-drop-role_id",""),e(this).data("drop-role_id")!=o.data("role_id")){var i=JSON.parse(localStorage.getItem("MemberPressMapArray"))||[];e(this).attr("data-drop-role_id",o.data("role_id")),o.attr("data-level_id",e(this).data("level_id")),e.each(i,function(r,a){a&&a.split(",")[0]=="level_id_"+e(this).data("level_id")&&delete i[r]});var d="level_id_"+e(this).data("level_id");i.push(d+","+o.data("role_id"));var n="{";e.each(i,function(r,a){if(a){var t=a.split(",");(t[0]=="level_id_"+e(this).data("level_id")||t[1]!=o.data("role_id")&&t[0]!="level_id_"+e(this).data("level_id")||t[1]==o.data("role_id"))&&(n=n+'"'+t[0]+'":"'+t[1]+'",')}}),localStorage.setItem("MemberPressMapArray",JSON.stringify(i)),","==n.slice(-1)&&(n=n.slice(0,-1));var l=n+"}";localStorage.setItem("MemberPressMappingjson",l),e("#maaping_json_val").html(l)}e(this).append(o),e(this).find("span").css({order:"2"}),jQuery(this).find(".makeMeDraggable").length>=1&&e(this).droppable("destroy"),r(e(".makeMeDraggable")),o.css({width:"100%","margin-bottom":"0px",left:"0",position:"unset",order:"1"})}-1==window.location.href.indexOf("mepr_")&&"mepr_settings"==jQuery("#skeletabsTab1").data("identity")&&jQuery("#skeletabsTab1").trigger("click"),e.ajax({type:"POST",dataType:"JSON",url:etsMemberpressParams.admin_ajax,data:{action:"memberpress_load_discord_roles",ets_memberpress_discord_nonce:etsMemberpressParams.ets_memberpress_discord_nonce},beforeSend:function(){e(".discord-roles .spinner").addClass("is-active"),e(".initialtab.spinner").addClass("is-active")},success:function(a){if(null!=a&&a.hasOwnProperty("code")&&50001==a.code&&"Missing Access"==a.message)e(".btn-connect-to-bot").show();else if(10004===a.code&&"Unknown Guild"==a.message)e(".btn-connect-to-bot").show().after("<p><b>The server ID is wrong or you did not connect the Bot.</b></p>");else if(0===a.code&&"401: Unauthorized"==a.message)e("#connect-discord-bot").show().html("Error: Unauthorized - The Bot Token is wrong").addClass("error-bk");else if(null==a||"401: Unauthorized"==a.message||a.hasOwnProperty("code")||0==a)e("#connect-discord-bot").show().html("Error: Please check all details are correct").addClass("error-bk");else{e('.ets-tabs button[data-identity="level-mapping"]').length&&e('.ets-tabs button[data-identity="level-mapping"]').show(),e("#connect-discord-bot").show().html("Bot Connected "+etsMemberpressParams.discord_icon).addClass("not-active");var t=localStorage.getItem("activeTab");0==e('.ets-tabs button[data-identity="level-mapping"]').length&&"level-mapping"==t&&e('.ets-tabs button[data-identity="mepr_settings"]').trigger("click"),e.each(a,function(a,t){var s=!1;t.hasOwnProperty("tags")&&t.tags.hasOwnProperty("bot_id")&&(s=!0),"previous_mapping"!=a&&!1==s&&"@everyone"!=t.name&&(e(".discord-roles").append('<div class="makeMeDraggable" style="background-color:#'+t.color.toString(16)+'" data-role_id="'+t.id+'" >'+t.name+"</div>"),e("#defaultRole").append('<option value="'+t.id+'" >'+t.name+"</option>"),r(e(".makeMeDraggable")))});var s=e("#selected_default_role").val();if(s&&e("#defaultRole option[value="+s+"]").prop("selected",!0),a.previous_mapping)var o=a.previous_mapping;else var o=localStorage.getItem("MemberPressMappingjson");e("#maaping_json_val").html(o),e.each(JSON.parse(o),function(a,t){var s=a.split("id_"),o=e('[data-role_id="'+t+'"]:not([data-level_id])').clone();o.length>1&&o.slice(1).hide();var i=e('[data-level_id="'+s[1]+'"]');0===i.find('[data-role_id="'+t+'"]').length&&(o.attr("data-level_id",s[1]).css({width:"100%",left:"0",top:"0","margin-bottom":"0px",order:"1"}),i.append(o).attr("data-drop-role_id",t).find("span").css({order:"2"})),i.find(".makeMeDraggable").length>=1&&i.droppable("destroy"),r(o)})}},error:function(r){e("#connect-discord-bot").show().html("Error: Please check all details are correct").addClass("error-bk"),console.error(r)},complete:function(){e(".discord-roles .spinner").removeClass("is-active").css({float:"right"}),e("#skeletabsTab1 .spinner").removeClass("is-active").css({float:"right",display:"none"})}}),e("#clrbtn").click(function(r){r.preventDefault(),e.ajax({url:etsMemberpressParams.admin_ajax,type:"POST",data:{action:"memberpress_discord_clear_logs",ets_memberpress_discord_nonce:etsMemberpressParams.ets_memberpress_discord_nonce},beforeSend:function(){e(".clr-log.spinner").addClass("is-active").show()},success:function(r){r.error?alert(r.error.msg):e(".error-log").html("Clear logs Sucesssfully !")},error:function(e){console.error(e)},complete:function(){e(".clr-log.spinner").removeClass("is-active").hide()}})}),e(".ets-memberpress-run-api").on("click",function(r){r.preventDefault();var a=e(this).data("uid");e.ajax({type:"POST",dataType:"JSON",url:etsMemberpressParams.admin_ajax,data:{action:"memberpress_discord_member_table_run_api",user_id:a,ets_memberpress_discord_nonce:etsMemberpressParams.ets_memberpress_discord_nonce},beforeSend:function(){e("."+a+".spinner").addClass("is-active").show()},success:function(r){1==r.status&&e("."+a+".ets-save-success").show()},error:function(e){console.error(e)},complete:function(){e("."+a+".spinner").removeClass("is-active").hide()}})}),e("#MemberPressRevertMapping").click(function(){localStorage.removeItem("MemberPressMapArray"),localStorage.removeItem("MemberPressMappingjson")}),e(function r(){e(".makeMeDroppable").droppable({drop:t,hoverClass:"hoverActive"}),e(".discord-roles-col").droppable({drop:a,hoverClass:"hoverActive"})})}e("#ets_memberpress_btn_color").wpColorPicker(),e("#ets_memberpress_discord_btn_disconnect_color").wpColorPicker(),e(" .ets-memberpress-discord-review-notice > button.notice-dismiss").on("click",function(){e.ajax({type:"POST",dataType:"JSON",url:etsMemberpressParams.admin_ajax,data:{action:"ets_memberpress_discord_notice_dismiss",ets_memberpress_discord_nonce:etsMemberpressParams.ets_memberpress_discord_nonce},beforeSend:function(){console.log("sending...")},success:function(e){console.log(e)},error:function(e){console.error(e)},complete:function(){}})})}),e.skeletabs.setDefaults({keyboard:!1})}(jQuery);
  • expresstechsoftwares-memberpress-discord-add-on/trunk/memberpress-discord.php

    r3238134 r3354131  
    1313 * Plugin URI:        https://www.expresstechsoftwares.com/memberpress-discord-add-on/
    1414 * Description:       Allow memberpress users to connect their site to discord and allow them to be part of your discord community, site admin can allow discord roles based on the membership a member have and can sell private content in role specific discord channels.
    15  * Version:           1.1.2
     15 * Version:           1.1.3
    1616 * Author:            ExpressTech Softwares Solutions Pvt Ltd
    1717 * Author URI:        https://www.expresstechsoftwares.com
     
    3030 * Currently plugin version.
    3131 */
    32 define( 'ETS_MEMBERPRESS_DISCORD_VERSION', '1.0.26' );
     32define( 'ETS_MEMBERPRESS_DISCORD_VERSION', '1.1.3' );
    3333
    3434/**
Note: See TracChangeset for help on using the changeset viewer.