Changeset 3354131
- Timestamp:
- 09/01/2025 04:36:53 PM (7 months ago)
- Location:
- expresstechsoftwares-memberpress-discord-add-on
- Files:
-
- 178 added
- 5 edited
-
tags/1.1.3 (added)
-
tags/1.1.3/CHANGELOG.txt (added)
-
tags/1.1.3/LICENSE.txt (added)
-
tags/1.1.3/README.md (added)
-
tags/1.1.3/README.txt (added)
-
tags/1.1.3/admin (added)
-
tags/1.1.3/admin/class-memberpress-discord-admin.php (added)
-
tags/1.1.3/admin/css (added)
-
tags/1.1.3/admin/css/memberpress-discord-admin.css (added)
-
tags/1.1.3/admin/css/memberpress-discord-admin.min.css (added)
-
tags/1.1.3/admin/css/skeletabs.css (added)
-
tags/1.1.3/admin/images (added)
-
tags/1.1.3/admin/images/ets-logo.png (added)
-
tags/1.1.3/admin/images/icon.png (added)
-
tags/1.1.3/admin/images/ravisoni.png (added)
-
tags/1.1.3/admin/index.php (added)
-
tags/1.1.3/admin/js (added)
-
tags/1.1.3/admin/js/memberpress-discord-admin.js (added)
-
tags/1.1.3/admin/js/memberpress-discord-admin.min.js (added)
-
tags/1.1.3/admin/js/memberpress-discord-search.js (added)
-
tags/1.1.3/admin/js/memberpress-discord-search.min.js (added)
-
tags/1.1.3/admin/js/skeletabs.js (added)
-
tags/1.1.3/admin/partials (added)
-
tags/1.1.3/admin/partials/memberpress-discord-admin-display.php (added)
-
tags/1.1.3/admin/partials/pages (added)
-
tags/1.1.3/admin/partials/pages/memberpress-discord-advance.php (added)
-
tags/1.1.3/admin/partials/pages/memberpress-discord-appearance.php (added)
-
tags/1.1.3/admin/partials/pages/memberpress-discord-documentation.php (added)
-
tags/1.1.3/admin/partials/pages/memberpress-discord-error-log.php (added)
-
tags/1.1.3/admin/partials/pages/memberpress-discord-get-support.php (added)
-
tags/1.1.3/admin/partials/pages/memberpress-discord-role-level-map.php (added)
-
tags/1.1.3/admin/partials/pages/memberpress-discord-settings.php (added)
-
tags/1.1.3/includes (added)
-
tags/1.1.3/includes/class-memberpress-discord-activator.php (added)
-
tags/1.1.3/includes/class-memberpress-discord-admin-notices.php (added)
-
tags/1.1.3/includes/class-memberpress-discord-deactivator.php (added)
-
tags/1.1.3/includes/class-memberpress-discord-i18n.php (added)
-
tags/1.1.3/includes/class-memberpress-discord-loader.php (added)
-
tags/1.1.3/includes/class-memberpress-discord.php (added)
-
tags/1.1.3/includes/functions.php (added)
-
tags/1.1.3/includes/index.php (added)
-
tags/1.1.3/includes/libraries (added)
-
tags/1.1.3/includes/libraries/action-scheduler (added)
-
tags/1.1.3/includes/libraries/action-scheduler/README.md (added)
-
tags/1.1.3/includes/libraries/action-scheduler/action-scheduler.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/changelog.txt (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/ActionScheduler_ActionClaim.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/ActionScheduler_ActionFactory.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/ActionScheduler_AdminView.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/ActionScheduler_AsyncRequest_QueueRunner.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/ActionScheduler_Compatibility.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/ActionScheduler_DataController.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/ActionScheduler_DateTime.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/ActionScheduler_Exception.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/ActionScheduler_FatalErrorMonitor.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/ActionScheduler_InvalidActionException.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/ActionScheduler_ListTable.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/ActionScheduler_LogEntry.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/ActionScheduler_NullLogEntry.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/ActionScheduler_OptionLock.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/ActionScheduler_QueueCleaner.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/ActionScheduler_QueueRunner.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/ActionScheduler_Versions.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/ActionScheduler_WPCommentCleaner.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/ActionScheduler_wcSystemStatus.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/WP_CLI (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_Clean_Command.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_QueueRunner.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_Scheduler_command.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/WP_CLI/Migration_Command.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/WP_CLI/ProgressBar.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/abstracts (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/abstracts/ActionScheduler.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/abstracts/ActionScheduler_Abstract_ListTable.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/abstracts/ActionScheduler_Abstract_QueueRunner.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/abstracts/ActionScheduler_Abstract_RecurringSchedule.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/abstracts/ActionScheduler_Abstract_Schedule.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/abstracts/ActionScheduler_Abstract_Schema.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/abstracts/ActionScheduler_Lock.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/abstracts/ActionScheduler_Logger.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/abstracts/ActionScheduler_Store.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/abstracts/ActionScheduler_TimezoneHelper.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/actions (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/actions/ActionScheduler_Action.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/actions/ActionScheduler_CanceledAction.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/actions/ActionScheduler_FinishedAction.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/actions/ActionScheduler_NullAction.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/data-stores (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/data-stores/ActionScheduler_DBLogger.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/data-stores/ActionScheduler_DBStore.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/data-stores/ActionScheduler_HybridStore.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/data-stores/ActionScheduler_wpCommentLogger.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore_PostStatusRegistrar.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore_PostTypeRegistrar.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore_TaxonomyRegistrar.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/migration (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/migration/ActionMigrator.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/migration/ActionScheduler_DBStoreMigrator.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/migration/BatchFetcher.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/migration/Config.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/migration/Controller.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/migration/DryRun_ActionMigrator.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/migration/DryRun_LogMigrator.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/migration/LogMigrator.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/migration/Runner.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/migration/Scheduler.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/schedules (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/schedules/ActionScheduler_CanceledSchedule.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/schedules/ActionScheduler_CronSchedule.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/schedules/ActionScheduler_IntervalSchedule.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/schedules/ActionScheduler_NullSchedule.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/schedules/ActionScheduler_Schedule.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/schedules/ActionScheduler_SimpleSchedule.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/schema (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/schema/ActionScheduler_LoggerSchema.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/classes/schema/ActionScheduler_StoreSchema.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/deprecated (added)
-
tags/1.1.3/includes/libraries/action-scheduler/deprecated/ActionScheduler_Abstract_QueueRunner_Deprecated.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/deprecated/ActionScheduler_AdminView_Deprecated.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/deprecated/ActionScheduler_Schedule_Deprecated.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/deprecated/ActionScheduler_Store_Deprecated.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/deprecated/functions.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/functions.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/lib (added)
-
tags/1.1.3/includes/libraries/action-scheduler/lib/WP_Async_Request.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/lib/cron-expression (added)
-
tags/1.1.3/includes/libraries/action-scheduler/lib/cron-expression/CronExpression.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/lib/cron-expression/CronExpression_AbstractField.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/lib/cron-expression/CronExpression_DayOfMonthField.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/lib/cron-expression/CronExpression_DayOfWeekField.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/lib/cron-expression/CronExpression_FieldFactory.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/lib/cron-expression/CronExpression_FieldInterface.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/lib/cron-expression/CronExpression_HoursField.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/lib/cron-expression/CronExpression_MinutesField.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/lib/cron-expression/CronExpression_MonthField.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/lib/cron-expression/CronExpression_YearField.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/lib/cron-expression/LICENSE (added)
-
tags/1.1.3/includes/libraries/action-scheduler/lib/cron-expression/README.md (added)
-
tags/1.1.3/includes/libraries/action-scheduler/license.txt (added)
-
tags/1.1.3/includes/libraries/action-scheduler/readme.txt (added)
-
tags/1.1.3/includes/libraries/action-scheduler/vendor (added)
-
tags/1.1.3/includes/libraries/action-scheduler/vendor/autoload.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/vendor/composer (added)
-
tags/1.1.3/includes/libraries/action-scheduler/vendor/composer/ClassLoader.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/vendor/composer/InstalledVersions.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/vendor/composer/LICENSE (added)
-
tags/1.1.3/includes/libraries/action-scheduler/vendor/composer/autoload_classmap.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/vendor/composer/autoload_namespaces.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/vendor/composer/autoload_psr4.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/vendor/composer/autoload_real.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/vendor/composer/autoload_static.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/vendor/composer/installed.json (added)
-
tags/1.1.3/includes/libraries/action-scheduler/vendor/composer/installed.php (added)
-
tags/1.1.3/includes/libraries/action-scheduler/vendor/composer/platform_check.php (added)
-
tags/1.1.3/includes/template (added)
-
tags/1.1.3/includes/template/notification (added)
-
tags/1.1.3/includes/template/notification/review (added)
-
tags/1.1.3/includes/template/notification/review/review.php (added)
-
tags/1.1.3/index.php (added)
-
tags/1.1.3/languages (added)
-
tags/1.1.3/languages/expresstechsoftwares-memberpress-discord-add-on.pot (added)
-
tags/1.1.3/memberpress-discord.php (added)
-
tags/1.1.3/public (added)
-
tags/1.1.3/public/class-memberpress-discord-public.php (added)
-
tags/1.1.3/public/css (added)
-
tags/1.1.3/public/css/memberpress-discord-public.css (added)
-
tags/1.1.3/public/css/memberpress-discord-public.min.css (added)
-
tags/1.1.3/public/images (added)
-
tags/1.1.3/public/images/discord-logo-white.svg (added)
-
tags/1.1.3/public/index.php (added)
-
tags/1.1.3/public/js (added)
-
tags/1.1.3/public/js/memberpress-discord-public.js (added)
-
tags/1.1.3/public/js/memberpress-discord-public.min.js (added)
-
tags/1.1.3/public/partials (added)
-
tags/1.1.3/public/partials/memberpress-discord-public-display.php (added)
-
tags/1.1.3/uninstall.php (added)
-
trunk/CHANGELOG.txt (modified) (2 diffs)
-
trunk/admin/class-memberpress-discord-admin.php (modified) (2 diffs)
-
trunk/admin/js/memberpress-discord-admin.js (modified) (1 diff)
-
trunk/admin/js/memberpress-discord-admin.min.js (modified) (1 diff)
-
trunk/memberpress-discord.php (modified) (2 diffs)
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 1 4 = 1.1.2 = 2 5 - Reverting Schedule disconnect and delete member to previous instant delete. … … 4 7 - Improved logging and now capture more events like cancel, expire. 5 8 - Testing with WP 6.7.1 9 - Fix Maximum Call Stack Overflow Due to Exponential DOM Element Duplication GH#161 6 10 7 11 = 1.1.1 = -
expresstechsoftwares-memberpress-discord-add-on/trunk/admin/class-memberpress-discord-admin.php
r3238134 r3354131 1008 1008 1009 1009 /** 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 /** 1010 1112 * Manage user roles api calls 1011 1113 * … … 1024 1126 wp_send_json_error( 'You do not have sufficient rights', 403 ); 1025 1127 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; 1026 1134 } 1027 1135 -
expresstechsoftwares-memberpress-discord-add-on/trunk/admin/js/memberpress-discord-admin.js
r3187243 r3354131 63 63 $.each(JSON.parse(mapjson), function (key, val) { 64 64 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) { 67 70 preclone.slice(1).hide(); 68 71 } 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 76 94 makeDrag(preclone); 77 78 95 }); 79 96 } -
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 13 13 * Plugin URI: https://www.expresstechsoftwares.com/memberpress-discord-add-on/ 14 14 * 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. 215 * Version: 1.1.3 16 16 * Author: ExpressTech Softwares Solutions Pvt Ltd 17 17 * Author URI: https://www.expresstechsoftwares.com … … 30 30 * Currently plugin version. 31 31 */ 32 define( 'ETS_MEMBERPRESS_DISCORD_VERSION', '1. 0.26' );32 define( 'ETS_MEMBERPRESS_DISCORD_VERSION', '1.1.3' ); 33 33 34 34 /**
Note: See TracChangeset
for help on using the changeset viewer.