Plugin Directory

Changeset 2239384


Ignore:
Timestamp:
02/06/2020 12:29:23 AM (6 years ago)
Author:
mintunmedia
Message:

v2.0.3

Location:
groups-for-membermouse
Files:
47 added
3 edited

Legend:

Unmodified
Added
Removed
  • groups-for-membermouse/trunk/README.MD

    r2224540 r2239384  
    8787
    8888## Changelog
     892.0.3 Added group member upgrade/downgrade functionality.
     90
    89912.0.2 Fixed pagination issues on Admin Group Dashboard and Group Leader Dashboard.
    9092
  • groups-for-membermouse/trunk/groups-for-membermouse.php

    r2224540 r2239384  
    44 * Plugin Name: Groups for MemberMouse
    55 * Description: Adds group support to MemberMouse. You can define different types of groups allowing a single customer to pay for multiple seats and members to join existing groups for free or for a price based on how you configure the group type. <strong>Requires MemberMouse to activate and use.</strong>
    6  * Version: 2.0.2
     6 * Version: 2.0.3
    77 * Author: Mintun Media
    88 * Plugin URI:  https://www.powerpackmm.com/groups-for-membermouse-plugin/
     
    6969                add_action('mm_member_add', array(&$this, 'MemberMouseGroupMemberAdded'));
    7070                add_action('mm_member_status_change', array(&$this, 'MemberMouseGroupLeaderStatus'));
     71                add_action('mm_member_membership_change', array( $this, 'membership_changed_handler'));
    7172                add_action('admin_head', array(&$this, 'MemberMouseGroupOptionUpdate'));
    7273                add_shortcode('MM_Group_SignUp_Link', array(&$this, 'MemberMouseGroupPurchaseLinkShortcode'));
     
    249250        }
    250251
     252        /**
     253         * Shortcode output for Purchase Link
     254         * [MM_Group_SignUp_Link]
     255         */
    251256        public function MemberMouseGroupPurchaseLinkShortcode() {
    252257            global $wpdb, $current_user;
    253             if (is_user_logged_in() && in_array('Group Leader', $current_user->roles)) :
     258
     259            if (is_user_logged_in() && in_array('Group Leader', $current_user->roles)) {
    254260                $leaderSql = "SELECT id,group_template_id,group_name FROM " . $wpdb->prefix . "group_sets WHERE group_leader = '" . $current_user->ID . "'";
    255             $leaderResult = $wpdb->get_row($leaderSql);
    256             if (count($leaderResult) > 0) :
    257                 $group_id = $leaderResult->id;
    258             $template_id = $leaderResult->group_template_id;
    259             $groupName = $leaderResult->group_name;
    260             $itemSql = "SELECT member_memlevel,group_member_cost FROM " . $wpdb->prefix . "group_items WHERE id = '" . $template_id . "'";
    261             $itemResult = $wpdb->get_row($itemSql);
    262 
    263             if (!empty($itemResult->group_member_cost)) :
    264                 $itemCost = $itemResult->group_member_cost;
    265             $purchaseUrl = MM_CorePageEngine::getCheckoutPageStaticLink($itemCost);
    266             else :
    267                 $itemCost = $itemResult->member_memlevel;
    268             $purchaseUrl = MM_CorePageEngine::getCheckoutPageStaticLink($itemCost, true);
    269             endif;
    270             $custom_field = get_option("mm_custom_field_group_id");
    271             $purchaseUrl .= '&cf_' . $custom_field . '=g' . $group_id;
    272             return $purchaseUrl;
    273             endif;
    274             endif;
     261                $leaderResult = $wpdb->get_row($leaderSql);
     262
     263                if ( is_array($leaderResult) || is_object($leaderResult) ) {
     264                    $group_id       = $leaderResult->id;
     265                    $template_id    = $leaderResult->group_template_id;
     266                    $groupName      = $leaderResult->group_name;
     267                    $itemSql            = "SELECT member_memlevel,group_member_cost FROM " . $wpdb->prefix . "group_items WHERE id = '" . $template_id . "'";
     268                    $itemResult     = $wpdb->get_row($itemSql);
     269
     270                    if (!empty($itemResult->group_member_cost)) {
     271                        $itemCost       = $itemResult->group_member_cost;
     272                        $purchaseUrl    = MM_CorePageEngine::getCheckoutPageStaticLink($itemCost);
     273                    } else {
     274                        $itemCost       = $itemResult->member_memlevel;
     275                        $purchaseUrl    = MM_CorePageEngine::getCheckoutPageStaticLink($itemCost, true);
     276                    }
     277                    $custom_field = get_option("mm_custom_field_group_id");
     278                    $purchaseUrl .= '&cf_' . $custom_field . '=g' . $group_id;
     279                    return $purchaseUrl;
     280                }
     281            }
    275282            return '';
    276283        }
     
    611618        }
    612619
    613         // hook over mm_member_add
     620        /**
     621         * Member Added to MemberMouse - Check if it's a group purchase and add to Groups table
     622         */
    614623        public function MemberMouseGroupMemberAdded($data) {
    615624            include_once( WP_PLUGIN_DIR . "/membermouse/includes/mm-constants.php" );
    616625            include_once( WP_PLUGIN_DIR . "/membermouse/includes/init.php" );
     626
    617627            global $wpdb;
     628
    618629            $groupId = get_option("mm_custom_field_group_id");
    619             if (isset($data["cf_" . $groupId]) && !empty($data["cf_" . $groupId])) :
    620                 $cf = $data["cf_" . $groupId];
    621             $memberId = $data["member_id"];
    622             $groupName = (!empty($data["cf_4"])) ? $data["cf_4"] : 'Group';
    623             if (is_numeric($cf)) :
    624                 $templateSql = "SELECT id,group_size FROM " . $wpdb->prefix . "group_items WHERE id = '" . $cf . "'";
    625             $templateResult = $wpdb->get_row($templateSql);
    626             if (count($templateResult) > 0) :
    627                 $template_id = $templateResult->id;
    628             $groupSize = $templateResult->group_size;
    629             $sql = "INSERT INTO " . $wpdb->prefix . "group_sets (id,group_template_id,group_name,group_size,group_leader,group_status,createdDate,modifiedDate)VALUES('','" . $template_id . "','" . $groupName . "','" . $groupSize . "','" . $memberId . "','1',now(),now())";
    630             $query = $wpdb->query($sql);
    631             $updateUser = wp_update_user(array('ID' => $memberId, 'role' => 'Group Leader'));
    632             endif;
    633             else :
    634                         //  $gID    = substr($cf, -1);
    635             $gID = substr($cf, 1);
    636             $sql = "SELECT * FROM " . $wpdb->prefix . "group_sets WHERE id = '" . $gID . "'";
    637             $result = $wpdb->get_row($sql);
    638             if (count($result) > 0) :
    639                 $groupSize = $result->group_size;
    640             $groupId = $result->id;
    641             $sSql = "SELECT COUNT(id) AS count FROM " . $wpdb->prefix . "group_sets_members WHERE group_id = '" . $gID . "'";
    642             $sRes = $wpdb->get_row($sSql);
    643             $gCount = $sRes->count;
    644             if ($gCount < $groupSize) :
    645                 $sql = "INSERT INTO " . $wpdb->prefix . "group_sets_members (id,group_id,member_id,createdDate,modifiedDate)VALUES('','" . $groupId . "','" . $memberId . "',now(),now())";
    646             $query = $wpdb->query($sql);
    647             else :
    648                 $groupSql = "SELECT group_leader FROM " . $wpdb->prefix . "group_sets WHERE id = '" . $groupId . "'";
    649             $groupResult = $wpdb->get_row($groupSql);
    650             $group_leader = $groupResult->group_leader;
    651 
    652             $adminSql = "INSERT INTO " . $wpdb->prefix . "group_notices (id,group_id,user_id,leader_id,msg_type,createdDate,modifiedDate)VALUES('','" . $groupId . "','" . $memberId . "','" . $group_leader . "','0',now(),now())";
    653             $adminQuery = $wpdb->query($adminSql);
    654 
    655             $leaderSql = "INSERT INTO " . $wpdb->prefix . "group_notices (id,group_id,user_id,leader_id,msg_type,createdDate,modifiedDate)VALUES('','" . $groupId . "','" . $memberId . "','" . $group_leader . "','1',now(),now())";
    656             $leaderQuery = $wpdb->query($leaderSql);
    657 
    658             $user = new MM_User($memberId);
    659             $userStatus = MM_AccessControlEngine::changeMembershipStatus($user, MM_Status::$CANCELED);
    660             endif;
    661             endif;
    662             endif;
    663             endif;
    664         }
    665 
     630
     631            // Check if Purchase is for a group (custom field will be filled in)
     632            if (isset($data["cf_" . $groupId]) && !empty($data["cf_" . $groupId])) {
     633                $cf              = $data["cf_" . $groupId];
     634                $memberId  = $data["member_id"];
     635
     636                if (is_numeric($cf)) {
     637                    // Group Leader. Custom Field contains Group Type ID
     638
     639                    $templateSql        = "SELECT id,group_size FROM " . $wpdb->prefix . "group_items WHERE id = '" . $cf . "'";
     640                    $templateResult = $wpdb->get_row($templateSql);
     641
     642                    if (count($templateResult) > 0) {
     643                        $template_id    = $templateResult->id;
     644                        $groupSize      = $templateResult->group_size;
     645                        $groupName      = $templateResult->name;
     646                        $sql                    = "INSERT INTO " . $wpdb->prefix . "group_sets (id,group_template_id,group_name,group_size,group_leader,group_status,createdDate,modifiedDate)VALUES('','" . $template_id . "','" . $groupName . "','" . $groupSize . "','" . $memberId . "','1',now(),now())";
     647                        $query              = $wpdb->query($sql);
     648                        $updateUser     = wp_update_user(array('ID' => $memberId, 'role' => 'Group Leader'));
     649                    }
     650                } else {
     651                    // Group Member. Custom Field contains group ID (g##)
     652
     653                    $gID        = substr($cf, 1);
     654                    $sql        = "SELECT * FROM " . $wpdb->prefix . "group_sets WHERE id = '" . $gID . "'";
     655                    $result = $wpdb->get_row($sql);
     656
     657                    if (count($result) > 0) {
     658                        $groupSize  = $result->group_size;
     659                        $groupId        = $result->id;
     660                        $sSql           = "SELECT COUNT(id) AS count FROM " . $wpdb->prefix . "group_sets_members WHERE group_id = '" . $gID . "'";
     661                        $sRes           = $wpdb->get_row($sSql);
     662                        $gCount         = $sRes->count;
     663
     664                        if ($gCount < $groupSize) {
     665                            $sql        = "INSERT INTO " . $wpdb->prefix . "group_sets_members (id,group_id,member_id,createdDate,modifiedDate)VALUES('','" . $groupId . "','" . $memberId . "',now(),now())";
     666                            $query  = $wpdb->query($sql);
     667                        } else {
     668                            // Reached Group Capacity. Do not add member
     669                            $groupSql       = "SELECT group_leader FROM " . $wpdb->prefix . "group_sets WHERE id = '" . $groupId . "'";
     670                            $groupResult    = $wpdb->get_row($groupSql);
     671                            $group_leader = $groupResult->group_leader;
     672
     673                            // Add notices to DB
     674                            $adminSql       = "INSERT INTO " . $wpdb->prefix . "group_notices (id,group_id,user_id,leader_id,msg_type,createdDate,modifiedDate)VALUES('','" . $groupId . "','" . $memberId . "','" . $group_leader . "','0',now(),now())";
     675                            $adminQuery     = $wpdb->query($adminSql);
     676
     677                            $leaderSql      = "INSERT INTO " . $wpdb->prefix . "group_notices (id,group_id,user_id,leader_id,msg_type,createdDate,modifiedDate)VALUES('','" . $groupId . "','" . $memberId . "','" . $group_leader . "','1',now(),now())";
     678                            $leaderQuery    = $wpdb->query($leaderSql);
     679
     680                            // Cancel member's access.
     681                            $user = new MM_User($memberId);
     682                            $userStatus = MM_AccessControlEngine::changeMembershipStatus($user, MM_Status::$CANCELED);
     683                        }
     684                    }
     685                }
     686            }
     687        }
     688
     689        /**
     690         * Group Leader Member Status Changed. If status = cancelled, cancel all group member access as well
     691         */
    666692        public function MemberMouseGroupLeaderStatus($data) {
    667693            include_once( WP_PLUGIN_DIR . "/membermouse/includes/mm-constants.php" );
    668694            include_once( WP_PLUGIN_DIR . "/membermouse/includes/init.php" );
    669695            global $wpdb;
    670             $memberId = $data["member_id"];
    671             $status = $data["status"];
    672             $leaderSql = "SELECT id FROM " . $wpdb->prefix . "group_sets WHERE group_leader = '" . $memberId . "'";
     696
     697            $memberId       = $data["member_id"];
     698            $status             = $data["status"];
     699            $leaderSql      = "SELECT id FROM " . $wpdb->prefix . "group_sets WHERE group_leader = '" . $memberId . "'";
    673700            $leaderResult = $wpdb->get_row($leaderSql);
    674             if (count($leaderResult) > 0) :
     701
     702            // Check if current member is a Group Leader
     703            if (count($leaderResult) > 0) {
    675704                $groupId = $leaderResult->id;
    676             else :
    677                 $groupId = 0;
    678             endif;
    679 
    680             if (($status == 2) && !empty($groupId)) :
    681                 $sql = "SELECT member_id FROM " . $wpdb->prefix . "group_sets_members WHERE group_id = '" . $groupId . "'";
    682             $results = $wpdb->get_results($sql);
    683             if (count($results) > 0) :
    684                 foreach ($results as $result) :
    685                 $user = new MM_User($result->member_id);
    686             $userStatus = MM_AccessControlEngine::changeMembershipStatus($user, MM_Status::$CANCELED);
    687             endforeach;
    688             endif;
    689             endif;
    690         }
    691     }
    692 }
     705            } else {
     706                // Exit
     707                return;
     708            }
     709
     710            // Check if User is Cancelled and in a group. Cancels all members in the group.
     711            if ( ($status == 2) && !empty($groupId) ) {
     712                $sql            = "SELECT member_id FROM " . $wpdb->prefix . "group_sets_members WHERE group_id = '" . $groupId . "'";
     713                $results    = $wpdb->get_results($sql);
     714                if (count($results) > 0) {
     715                    foreach ($results as $result) {
     716                        $user = new MM_User($result->member_id);
     717                        $userStatus = MM_AccessControlEngine::changeMembershipStatus($user, MM_Status::$CANCELED);
     718                    }
     719                }
     720            }
     721        }
     722
     723        /**
     724         * Membership Level Changed Handler
     725         * Handles group leader upgrade and downgrade.
     726         *
     727         * If Group Leader Upgrades or Downgrades > Update group template and number allowed in group in database.
     728         *
     729         * TODO - if user has more accounts than are allowed in group changed to - they'll still have that number of members in database.
     730         */
     731        public function membership_changed_handler($data) {
     732            global $wpdb;
     733
     734            $groupId = get_option("mm_custom_field_group_id");
     735
     736            // Check if Purchase is for a group leader (custom field will be filled in).
     737            // If group is numeric - it means they are a group leader
     738            if (isset($data["cf_" . $groupId]) && !empty($data["cf_" . $groupId]) && is_numeric($data["cf_" . $groupId]) ) {
     739                $cf              = $data["cf_" . $groupId];
     740                $memberId  = $data["member_id"];
     741
     742                // Get Group Type data based on Group Type ID. Gives us group name and size
     743                $templateSql        = "SELECT id,group_size FROM " . $wpdb->prefix . "group_items WHERE id = '" . $cf . "'";
     744                $templateResult = $wpdb->get_row($templateSql);
     745
     746                if ( is_object($templateResult) ) {
     747                    // Capture Group Type Information for later
     748                    $template_id    = $templateResult->id;
     749                    $groupSize      = $templateResult->group_size;
     750
     751                    // Check if Leader already has a group
     752                    $group = $this->get_group_from_leader_id($memberId);
     753
     754                    if ( $group ) {
     755                        // Update Group Template ID and group size
     756                        $wpdb->update( $wpdb->prefix ."group_sets", array('group_template_id' => $template_id, 'group_size' => $groupSize), array('id' => $group->id) );
     757                    } else {
     758                        // Create Group
     759                        $sql                = "INSERT INTO " . $wpdb->prefix . "group_sets (id,group_template_id,group_name,group_size,group_leader,group_status,createdDate,modifiedDate)VALUES('','" . $template_id . "','" . $groupName . "','" . $groupSize . "','" . $memberId . "','1',now(),now())";
     760                        $query          = $wpdb->query($sql);
     761                        $updateUser = wp_update_user(array('ID' => $memberId, 'role' => 'Group Leader'));
     762                    }
     763                }
     764            }
     765        }
     766
     767        /**
     768         * Get Group ID with Member ID
     769         * @return array | bool - If Group is found, returns row from database. If not, returns false
     770         */
     771        public function get_group_from_leader_id($memberId) {
     772            global $wpdb;
     773
     774            $sql = "SELECT * FROM " . $wpdb->prefix ."group_sets WHERE group_leader='". $memberId ."'";
     775            $result = $wpdb->get_row($sql);
     776
     777            if ( $result > 0 ) {
     778                // Found group
     779                return $result;
     780            } else {
     781                return false;
     782            }
     783        }
     784
     785    } // End Class
     786} // End if class exists
     787
    693788if (class_exists('MemberMouseGroupAddon')) :
    694789    global $MemberMouseGroupAddon;
  • groups-for-membermouse/trunk/readme.txt

    r2224540 r2239384  
    7070
    7171== Changelog ==
     722.0.3 Added group member upgrade/downgrade functionality.
     73
    72742.0.2 Fixed pagination issues on Admin Group Dashboard and Group Leader Dashboard.
    7375
Note: See TracChangeset for help on using the changeset viewer.