function lti_update($choice) { global $blog_id, $wpdb; // Add users $add_users = unserialize($_SESSION[LTI_SESSION_PREFIX . 'provision']); foreach ($add_users as $new_u) { $result = wp_insert_user(array('user_login' => $new_u->username, 'user_nicename' => $new_u->username, 'first_name' => $new_u->firstname, 'last_name' => $new_u->lastname, 'user_url' => 'http://', 'display_name' => $new_u->fullname)); if (is_wp_error($result)) { $_SESSION[LTI_SESSION_PREFIX . 'error'] .= $new_u->username . ":" . $result->get_error_message() . "<br />"; continue; } // Sort out role in blog $role = 'author'; if ($new_u->staff === TRUE) { $role = 'administrator'; } // Add newly created users to blog and set role add_user_to_blog($blog_id, $result, $role); if (is_wp_error($result)) { $_SESSION[LTI_SESSION_PREFIX . 'error'] .= $new_u->username . ":" . $result->get_error_message() . "<br />"; } } // Existing users that require adding to blog $add_to_blog = unserialize($_SESSION[LTI_SESSION_PREFIX . 'new_to_blog']); foreach ($add_to_blog as $new_u) { $role = 'author'; if ($new_u->staff === TRUE) { $role = 'administrator'; } add_user_to_blog($blog_id, $new_u->id, $role); if (is_wp_error($result)) { $_SESSION[LTI_SESSION_PREFIX . 'error'] .= $new_u->username . ":" . $result->get_error_message() . "<br />"; } } // Changed name $changed = unserialize($_SESSION[LTI_SESSION_PREFIX . 'changed']); foreach ($changed as $change) { wp_update_user(array('ID' => $change->id, 'first_name' => $change->firstname, 'last_name' => $change->lastname, 'display_name' => $change->fullname)); } // Changed role (most probably administrator -> author, author -> administrator) $changed_role = unserialize($_SESSION[LTI_SESSION_PREFIX . 'role_changed']); foreach ($changed_role as $changed) { $user = new WP_User($changed->id, '', $blog_id); $user->add_role($changed->role_changed); if ($changed->role_changed == 'administrator') { $user->remove_role('author'); $user->remove_role('subscriber'); } if ($changed->role_changed == 'author') { $user->remove_role('administrator'); $user->remove_role('subscriber'); } if ($changed->role_changed == 'subscriber') { $user->remove_role('administrator'); $user->remove_role('author'); } } // Remove users from blog but not WP as could be members of // other blogs. Could check and handle? if ($choice == 'delete') { $delete = unserialize($_SESSION[LTI_SESSION_PREFIX . 'remove']); foreach ($delete as $del) { $user = get_user_by('login', $del->username); remove_user_from_blog($user->ID, $blog_id); if (is_wp_error($result)) { $_SESSION[LTI_SESSION_PREFIX . 'error'] .= $new_u->username . ":" . $result->get_error_message() . "<br />"; } } } global $wpdb; // Get the consumer $consumer = new LTI_Tool_Consumer($_SESSION[LTI_SESSION_PREFIX . 'key'], array($wpdb->base_prefix)); $resource = new LTI_Resource_Link($consumer, $_SESSION[LTI_SESSION_PREFIX . 'resourceid']); if ($resource->hasSettingService()) { $resource->doSettingService(LTI_Resource_Link::EXT_WRITE, date('d-M-Y H:i')); } }
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; } }