function lti_sync_enrolments() { global $wpdb, $blog_id; // Load class require_once 'LTI_User_List_Table.php'; // Load Membership Library functions require_once 'MembershipLibrary.php'; // Create $_SESSION variables if not present if (empty($_SESSION[LTI_SESSION_PREFIX . 'all'])) { $_SESSION[LTI_SESSION_PREFIX . 'all'] = array(); } if (empty($_SESSION[LTI_SESSION_PREFIX . 'provision'])) { $_SESSION[LTI_SESSION_PREFIX . 'provision'] = array(); } if (empty($_SESSION[LTI_SESSION_PREFIX . 'new_to_blog'])) { $_SESSION[LTI_SESSION_PREFIX . 'new_to_blog'] = array(); } if (empty($_SESSION[LTI_SESSION_PREFIX . 'newadmins'])) { $_SESSION[LTI_SESSION_PREFIX . 'newadmins'] = array(); } if (empty($_SESSION[LTI_SESSION_PREFIX . 'changed'])) { $_SESSION[LTI_SESSION_PREFIX . 'changed'] = array(); } if (empty($_SESSION[LTI_SESSION_PREFIX . 'role_changed'])) { $_SESSION[LTI_SESSION_PREFIX . 'role_changed'] = array(); } if (empty($_SESSION[LTI_SESSION_PREFIX . 'remove'])) { $_SESSION[LTI_SESSION_PREFIX . 'remove'] = array(); } if (empty($_SESSION[LTI_SESSION_PREFIX . 'nochanges'])) { $_SESSION[LTI_SESSION_PREFIX . 'nochanges'] = 0; } // Set up help tab $screen = get_current_screen(); $screen->add_help_tab(array('id' => 'my_help_tab', 'title' => __('My Help Tab', 'lti-text'), 'content' => '<p>' . __('Descriptive content that will show in My Help Tab-body goes here.', 'lti-text') . '</p>')); // Get instance of LTI_User_List_Table and get the current action $ltiuser = new LTI_User_List_Table(); $choice = $ltiuser->current_action(); $consumer = new LTI_Tool_Consumer($_SESSION[LTI_SESSION_PREFIX . 'userkey'], array($wpdb->base_prefix)); $resource_link = new LTI_Resource_Link($consumer, $_SESSION[LTI_SESSION_PREFIX . 'userresourcelink']); if (!$resource_link->hasMembershipsService()) { echo '<h2>' . __('No memberships service', 'lti-text') . '</h2>'; return; } // Deal with current action switch ($choice) { case 'continue': // Get the users from the resource link $lti_users = $resource_link->doMembershipsService(); if (!$lti_users) { echo '<h2>' . __('Error on Synchronisation', 'lti-text') . '</h2>'; echo '<p>' . sprintf(__('Error returned from consumer (%s)', 'lti-text'), $consumer->name) . '</p>'; echo '<p>' . sprintf(__('Request to consumer: %s', 'lti-text'), '<br />' . urldecode(str_replace('&', '<br />', $resource_link->ext_request))) . '</p>'; echo '<p>' . sprintf(__('Response from consumer: %s', 'lti-text'), '<br />' . $resource_link->ext_response) . '</p>'; return; } // Get straight-forward list to work with in WordPress $membership_consumer = lti_create_user_list($lti_users); // Get current membership of this blog $wp_user_search = new WP_User_Query($blog_id); $current_members = $wp_user_search->get_results(); // Create the various lists $membership_consumer = lti_create_membership_lists($membership_consumer); // Assign list to $_SESSION variables $_SESSION[LTI_SESSION_PREFIX . 'all'] = serialize($membership_consumer); $_SESSION[LTI_SESSION_PREFIX . 'provision'] = serialize(lti_get_members($_SESSION[LTI_SESSION_PREFIX . 'all'], 'provision')); $_SESSION[LTI_SESSION_PREFIX . 'new_to_blog'] = serialize(lti_get_members($_SESSION[LTI_SESSION_PREFIX . 'all'], 'new_to_blog')); $_SESSION[LTI_SESSION_PREFIX . 'newadmins'] = serialize(lti_get_members($_SESSION[LTI_SESSION_PREFIX . 'all'], 'newadmins')); $_SESSION[LTI_SESSION_PREFIX . 'changed'] = serialize(lti_get_members($_SESSION[LTI_SESSION_PREFIX . 'all'], 'changed')); $_SESSION[LTI_SESSION_PREFIX . 'role_changed'] = serialize(lti_get_members($_SESSION[LTI_SESSION_PREFIX . 'all'], 'rchanged')); // Blog members for removal need to be handled differently $_SESSION[LTI_SESSION_PREFIX . 'remove'] = serialize(lti_deleted_members($membership_consumer, $current_members)); case 'all': // Not currently used // Display all the members from the consumer lti_display($_SESSION[LTI_SESSION_PREFIX . 'all'], $ltiuser); break; case 'provision': // Not currently used echo "<h2>" . __('Membership Synchronisation - New Members', 'lti-text') . "</h2>"; if (!empty($_SESSION[LTI_SESSION_PREFIX . 'provision'])) { lti_display($_SESSION[LTI_SESSION_PREFIX . 'provision'], $ltiuser); } break; // Display the various lists // Display the various lists case 'new_to_blog': // Not currently used echo "<h2>" . __('Membership Synchronisation - New Blog Members', 'lti-text') . "</h2>"; if (!empty($_SESSION[LTI_SESSION_PREFIX . 'new_to_blog'])) { lti_display($_SESSION[LTI_SESSION_PREFIX . 'new_to_blog'], $ltiuser); } break; case 'newadmins': echo "<h2>" . __('Membership Synchronisation - New Administrators to Blog', 'lti-text') . "</h2>"; if (!empty($_SESSION[LTI_SESSION_PREFIX . 'newadmins'])) { lti_display($_SESSION[LTI_SESSION_PREFIX . 'newadmins'], $ltiuser); } break; case 'changed': // Not currently used echo "<h2>" . __('Membership Synchronisation - Changed Members', 'lti-text') . "</h2>"; if (!empty($_SESSION[LTI_SESSION_PREFIX . 'changed'])) { lti_display($_SESSION[LTI_SESSION_PREFIX . 'changed'], $ltiuser); } break; case 'rchanged': echo "<h2>" . __('Membership Synchronisation - Role Changed', 'lti-text') . "</h2>"; if (!empty($_SESSION[LTI_SESSION_PREFIX . 'role_changed'])) { lti_display($_SESSION[LTI_SESSION_PREFIX . 'role_changed'], $ltiuser); } break; case 'remove': echo "<h2>" . __('Membership Synchronisation - Members for Removal from Blog', 'lti-text') . "</h2>"; if (!empty($_SESSION[LTI_SESSION_PREFIX . 'remove'])) { lti_display($_SESSION[LTI_SESSION_PREFIX . 'remove'], $ltiuser); } break; case 'error': echo "<h2>" . __('Synchronisation Errors', 'lti-text') . "</h2>"; echo "<p>" . $_SESSION[LTI_SESSION_PREFIX . 'error'] . "</p>"; echo "<p>" . __('Remaining users from consumer added', 'lti-text') . "</p>"; $_SESSION[LTI_SESSION_PREFIX . 'error'] = ''; break; default: // If consumer has setting service then get date/time of last synchronisation $last_sync = ''; if ($resource_link->hasSettingService()) { $last_sync = $resource_link->doSettingService(LTI_Resource_Link::EXT_READ, NULL); } // Simply produce descriptive text when page first encountered. ?> <h2><?php _e('Membership Synchronisation', 'lti-text'); ?> </h2> <p><?php _e('This page allows you to update this group with any changes to the enrolments in the course which is the source for this group. These updates may include:', 'lti-text'); ?> </p> <ul style="list-style-type: disc; margin-left: 15px; padding-left: 15px;"> <li><?php _e('new members', 'lti-text'); ?> </li> <li><?php _e('changes to the names of existing members', 'lti-text'); ?> </li> <li><?php _e('changes to the type (instructor or student) of an existing member', 'lti-text'); ?> </li> <li><?php _e('deletion of members which no longer exist in the course', 'lti-text'); ?> </li> </ul> <p><?php _e('Click on the <i>Continue</i> to obtain a list of the changes to be processed. The updates will not be made until you confirm them.', 'lti-text'); ?> </p> <?php if (!empty($last_sync)) { echo '<p>' . sprintf(__('Last Synchronisation: %s', 'lti-text'), $last_sync) . '</p>'; } ?> <form method="post" action="<?php get_admin_url(); ?> users.php?page=lti_sync_enrolments"> <input type="hidden" name="action" value="continue" /> <p class="submit"> <input id="membership" class="button-primary" type="submit" value="<?php _e('Continue', 'lti-text'); ?> " name="membership"> </p> </form> <?php // Set sessions changes to 0 $_SESSION[LTI_SESSION_PREFIX . 'nochanges'] = 0; } }