Пример #1
0
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;
    }
}