<?php

/** 
 * Objects merge/update
 * Add New capability: mgm_home dashboard options to admin role
 */
$obj_role = new mgm_roles();
$obj_role->update_capability_role('administrator', 'mgm_home', true);
// end file
<?php

/** 
 * Objects merge/update
 * Add New capability: mgm_widget_dashboard_statistics to admin role
 */
$obj_role = new mgm_roles();
$obj_role->update_capability_role('administrator', 'mgm_widget_dashboard_statistics', true);
// end file
<?php

/** 
 * Objects merge/update
 * Update capability:  mgm_addons , mgm_post_purchases , mgm_addon_purchases , mgm_payment_history to admin role
 */
$obj_role = new mgm_roles();
$obj_role->update_capability_role('administrator', 'mgm_post_purchases', true);
$obj_role->update_capability_role('administrator', 'mgm_addons', true);
$obj_role->update_capability_role('administrator', 'mgm_addon_purchases', true);
$obj_role->update_capability_role('administrator', 'mgm_payment_history', true);
// end file
/**
 * Check secondary menu is enabled for the logged in user
 * @param string $primary_menu
 * @param string $secondary_menu
 * @return boolean
 */
function mgm_is_mgm_menu_enabled($type = 'primary', $primary_menu, $secondary_menu = null)
{
    $user_id = get_current_user_id();
    $obj_roles = new mgm_roles();
    // for the firsttime load
    if (!get_option('rolebasedmenu_init')) {
        // update administrator role with capabilities
        $custom_caps = $obj_roles->get_custom_capabilities();
        foreach ($custom_caps as $cap) {
            $obj_roles->update_capability_role('administrator', $cap, true);
        }
        // set init value
        update_option('rolebasedmenu_init', 1);
    }
    $capabilities = $obj_roles->get_loggedinuser_custom_capabilities($user_id);
    $system_obj = mgm_get_class('system');
    // common setting
    $dml = $system_obj->setting['enable_role_based_menu_loading'];
    // if dynamic menu loading is disabled/priamry and secondary menus are enabled
    return is_super_admin() && !bool_from_yn($dml) || (bool_from_yn($dml) && ($type == 'primary' && in_array($primary_menu, $capabilities)) || $type == 'secondary' && in_array($primary_menu, $capabilities) && in_array($secondary_menu, $capabilities));
    // check secondary menu capability is loaded
}
<?php

/** 
 * Objects merge/update
 * Add New System Setting: enable_role_based_menu_loading
 * Populate Custom MGM capabilities for 'administrator' role
 */
// read
$system_obj = mgm_get_class('system');
if (!isset($system_obj->setting['enable_role_based_menu_loading'])) {
    // default to 'NO'
    $system_obj->setting['enable_role_based_menu_loading'] = 'N';
    // save
    $system_obj->save();
}
//default MGM custom capabilities to true for administrator role:
$obj_role = new mgm_roles();
$custom_caps = $obj_role->get_custom_capabilities();
foreach ($custom_caps as $cap) {
    $obj_role->update_capability_role('administrator', $cap, true);
}
// end file
<?php

/** 
 * Objects merge/update
 * Add New capability: mgm_widget dashboard membership options to admin role
 */
$obj_role = new mgm_roles();
$obj_role->update_capability_role('administrator', 'mgm_widget_dashboard_membership_options', true);
// end file
 function roles_capabilities_edit()
 {
     global $wpdb, $current_user;
     if (isset($_POST['save_roles'])) {
         $objrole = new mgm_roles();
         extract($_POST);
         $status = 'error';
         $role_type = '';
         $message = array();
         if (!empty($rolename)) {
             $error = false;
             foreach ($rolename as $role => $value) {
                 //added later to consider only the edited role:
                 if ($role == $selected_role) {
                     $value = trim(mgm_escape($value));
                     if (empty($value)) {
                         $message[] = __('Role cannot be blank', 'mgm');
                         $error = true;
                     } elseif (!preg_match("/^[A-Za-z0-9_,\\s]+\$/", $value)) {
                         $message[] = __('Role cannot contain special characters.', 'mgm');
                         $error = true;
                     } elseif (!$objrole->is_role_unique($value, true, $role)) {
                         $message[] = __('Role/capability already exists.', 'mgm');
                         $error = true;
                     }
                     if (!isset($chk_capability[$role]) || isset($chk_capability[$role]) && empty($chk_capability[$role])) {
                         $message[] = __('Capability must be selected', 'mgm');
                         $error = true;
                     }
                     break;
                 }
             }
             if (!$error) {
                 //save roles:
                 foreach ($rolename as $role => $value) {
                     if ($role == $selected_role) {
                         $key = $role;
                         //save Role name:
                         if (!in_array($role, $objrole->default_roles)) {
                             //please note: this will return the edited role
                             $role = $objrole->edit_role($role, $value);
                         }
                         //remove
                         if (!empty($chk_capability[$key])) {
                             //save capabilities:
                             $arr_previous_caps = $objrole->get_capabilities($role);
                             $arr_new_caps = $chk_capability[$key];
                             $arr_to_add = array_diff($arr_new_caps, $arr_previous_caps);
                             $arr_to_remove = array_diff($arr_previous_caps, $arr_new_caps);
                             //add new capabilities:
                             if (!empty($arr_to_add)) {
                                 foreach ($arr_to_add as $cap) {
                                     $cap = mgm_escape($cap);
                                     //grant access
                                     $objrole->update_capability_role($role, $cap, true);
                                 }
                             }
                             //remove access if any capabilities unchecked
                             if (!empty($arr_to_remove)) {
                                 foreach ($arr_to_remove as $cap) {
                                     $cap = mgm_escape($cap);
                                     //remove access
                                     $objrole->update_capability_role($role, $cap, false);
                                 }
                             }
                         }
                         break;
                     }
                 }
                 $type = $role_type;
                 //from post
                 $message[] = __('Successfully saved the changes.', 'mgm');
                 $status = 'success';
             }
         }
         echo json_encode(array('status' => $status, 'message' => implode("<br/>", $message), 'type' => $type));
         exit;
     }
 }