Example #1
0
    /**
     * Validate that the "migrate_all_users" method correctly deletes legacy
     * @uses $CFG, $DB
     * numeric user directories
     */
    public function test_migrate_all_users_handles_deleted_users() {
        $this->resetAfterTest(true);
        $this->setup_test_data_xml();

        global $CFG, $DB;

        $repo = repository_factory::factory('elisfiles');

        // Our test username
        $username = '******';

        // Set up the user in Alfresco
        $elisfiles = new ELIS_files();
        $elisfiles->migrate_user($username);

        // Validate that the user exists and that their home directory was set up
        // (for sanity reasons only)
        $userexists = elis_files_request('/api/people/'.$username);
        $this->assertNotEquals(false, $userexists);

        $initialuserhome = elis_files_get_home_directory($username);
        $this->assertNotEquals(false, $initialuserhome);

        // Change the node name to the "old" style
        $test = elis_files_node_rename($initialuserhome, '100');

        // Run the migration method
        $usr = new stdClass();
        $usr->id = 100;
        $usr->deleted = 1;
        $DB->update_record('user', $usr);

        $elisfiles->migrate_all_users();

        // Validate cleanup for the legacy folder
        $legacyuuid = false;
        $dir = elis_files_read_dir($elisfiles->uhomesuid, true);
        foreach ($dir->folders as $folder) {
            if ($folder->title == '100') {
                $legacyuuid = $folder->uuid;
            }
        }

        // Clean up the non-legacy data before final validation
        $elisfiles->delete_user($username);

        $this->assertEquals(false, $legacyuuid);
    }
Example #2
0
/**
 * Delete an Alfresco user account, optionally
 *
 * @param string $username      The Alfresco account username to delete.
 * @param bool   $deletehomedir Set to true to delete the user's home directory.
 * @return bool True on success, False otherwise.
 */
function elis_files_delete_user($username, $deletehomedir = false) {
    global $CFG;

    $status = true;

    $username = elis_files_transform_username($username);

    if ($deletehomedir) {
        $uuid = elis_files_get_home_directory($username);
    }

    $status = (elis_files_send('/api/people/' . $username, array(), 'DELETE') !== false);

    // Actually go through with deleting the home directory if it was requested and we found the UUID.
    if (!empty($uuid)) {
        $status = $status && elis_files_delete($uuid, true);
    }

    return $status;
}
Example #3
0
    /**
     * Add Plugin settings input to Moodle form
     * @param object $mform
     */
    public static function type_config_form($mform, $classname = 'repository') {
        global $DB, $CFG, $SESSION, $OUTPUT;

        parent::type_config_form($mform, $classname);

        $mform->addElement('text', 'server_host', get_string('serverurl', 'repository_elisfiles'), array('size' => '40'));
        $mform->setDefault('server_host', 'http://localhost');
        $mform->setType('server_host', PARAM_TEXT);
        $mform->addElement('static', 'server_host_default', '', get_string('elis_files_default_server_host', 'repository_elisfiles'));
        $mform->addElement('static', 'server_host_intro', '', get_string('elis_files_server_host', 'repository_elisfiles'));
        $mform->addRule('server_host', get_string('required'), 'required', null, 'client');

        $mform->addElement('text', 'server_port', get_string('serverport', 'repository_elisfiles'), array('size' => '30'));
        $mform->addElement('static', 'server_port_default', '', get_string('elis_files_default_server_port', 'repository_elisfiles'));
        $mform->addElement('static', 'server_port_intro', '', get_string('elis_files_server_port', 'repository_elisfiles'));

        $mform->addRule('server_port', get_string('required'), 'required', null, 'client');
        $mform->setDefault('server_port', '8080');
        $mform->setType('server_port', PARAM_INT);

        $mform->addElement('text', 'server_username', get_string('serverusername', 'repository_elisfiles'), array('size' => '30'));
        $mform->addElement('static', 'server_username_default', '', get_string('elis_files_default_server_username', 'repository_elisfiles'));
        $mform->addElement('static', 'server_username_intro', '', get_string('elis_files_server_username', 'repository_elisfiles'));
        $mform->addRule('server_username', get_string('required'), 'required', null, 'client');
        $mform->setType('server_username', PARAM_TEXT);

        $mform->addElement('passwordunmask', 'server_password', get_string('serverpassword', 'repository_elisfiles'), array('size' => '30'));
        $mform->addElement('static', 'server_password_intro', '', get_string('elis_files_server_password', 'repository_elisfiles'));
        $mform->addRule('server_password', get_string('required'), 'required', null, 'client');
        $mform->setType('server_password', PARAM_TEXT);

        $options = array(
            ELIS_FILES_XFER_WS  => get_string('webservices', 'repository_elisfiles'),
            ELIS_FILES_XFER_FTP => get_string('ftp', 'repository_elisfiles')
        );

        $mform->addElement('select', 'file_transfer_method', get_string('filetransfermethod', 'repository_elisfiles'), $options);
        $mform->setDefault('file_transfer_method', ELIS_FILES_XFER_FTP);
        $mform->addElement('static', 'file_transfer_method_default', '', get_string('filetransfermethoddefault', 'repository_elisfiles'));
        $mform->addElement('static', 'file_transfer_method_desc', '', get_string('filetransfermethoddesc', 'repository_elisfiles'));

        // Add a green checkmark if FTP connection works, red X on failure
        // (only if transfer method is set to ftp)
        $ftp_indicator = self::get_ftp_config_indicator();
        $mform->addElement('text', 'ftp_port', get_string('ftpport', 'repository_elisfiles'), array('size' => '30'));
        $mform->setDefault('ftp_port', '21');
        $mform->setType('ftp_port', PARAM_INT);
        $mform->addElement('static', 'ftp_port_default', '', $ftp_indicator.'&nbsp'.get_string('ftpportdefault', 'repository_elisfiles'));
        $mform->addElement('static', 'ftp_port_desc', '', get_string('ftpportdesc', 'repository_elisfiles'));

        $mform->addElement('text', 'connect_timeout', get_string('connecttimeout', 'repository_elisfiles'), array('size' => '10'));
        $mform->setType('connect_timeout', PARAM_INT);
        $mform->setDefault('connect_timeout', ELIS_FILES_CURL_CONNECT_TIMEOUT);
        $mform->addElement('static', 'connect_timeout_default', '', get_string('connecttimeoutdefault', 'repository_elisfiles', ELIS_FILES_CURL_CONNECT_TIMEOUT));
        $mform->addElement('static', 'connect_timeout_desc', '', get_string('connecttimeoutdesc', 'repository_elisfiles'));

        $mform->addElement('text', 'response_timeout', get_string('responsetimeout', 'repository_elisfiles'), array('size' => '10'));
        $mform->setType('response_timeout', PARAM_INT);
        $mform->setDefault('response_timeout', ELIS_FILES_CURL_RESPONSE_TIMEOUT);
        $mform->addElement('static', 'response_timeout_default', '', get_string('responsetimeoutdefault', 'repository_elisfiles', ELIS_FILES_CURL_RESPONSE_TIMEOUT));
        $mform->addElement('static', 'response_timeout_desc', '', get_string('responsetimeoutdesc', 'repository_elisfiles'));

        // Check for installed categories table or display 'plugin not yet installed'
        if ($DB->get_manager()->table_exists('repository_elisfiles_cats')) {
        // Need to check for settings to be saved
            $popup_settings ="height=400,width=500,top=0,left=0,menubar=0,location=0,scrollbars,resizable,toolbar,status,directories=0,fullscreen=0,dependent";
            $url = $CFG->wwwroot .'/repository/elisfiles/config-categories.php';
            $jsondata = array('url'=>$url,'name'=>'config_categories','options'=>$popup_settings);
            $jsondata = json_encode($jsondata);
            $title = get_string('configurecategoryfilter', 'repository_elisfiles');

            $button = "<input type='button' value='".$title."' alt='".$title."' title='".$title."' onclick='return openpopup(null,$jsondata);'>";
            $mform->addElement('static', 'category_filter', get_string('categoryfilter', 'repository_elisfiles'), $button);
            $mform->addElement('static', 'category_filter_intro', '', get_string('elis_files_category_filter', 'repository_elisfiles'));
        } else {
            $mform->addElement('static', 'category_filter_intro', get_string('categoryfilter', 'repository_elisfiles'), get_string('elisfilesnotinstalled', 'repository_elisfiles'));
        }

        $popup_settings = "height=480,width=640,top=0,left=0,menubar=0,location=0,scrollbars,resizable,toolbar,status,directories=0,fullscreen=0,dependent";

        $root_folder = get_config('elisfiles', 'root_folder');
        $button = self::output_root_folder_html($root_folder);

        $rootfolderarray=array();
        $rootfolderarray[] = $mform->createElement('text', 'root_folder', get_string('rootfolder', 'repository_elisfiles'), array('size' => '30'));
        $rootfolderarray[] = $mform->createElement('button', 'root_folder_popup', get_string('chooserootfolder', 'repository_elisfiles'), $button);

        $mform->addGroup($rootfolderarray, 'rootfolderar', get_string('rootfolder', 'repository_elisfiles'), array(' '), false);
        $mform->setDefault('root_folder', '/moodle');
        $mform->setType('root_folder', PARAM_TEXT);

        // Add checkmark if get root folder works, or whatever...
        $valid = self::root_folder_is_valid($root_folder);
        $mform->addElement('static', 'root_folder_default', '', $valid.'&nbsp;'.get_string('elis_files_default_root_folder', 'repository_elisfiles'));
        $mform->addElement('static', 'root_folder_intro', '', get_string('elis_files_root_folder', 'repository_elisfiles'));

        // Cache time is retrieved from the common cache time and displayed here
        $mform->addElement('text', 'cache_time', get_string('cachetime', 'repository_elisfiles'), array('size' => '10'));
        $mform->addElement('static', 'cache_time_default', '', get_string('elis_files_default_cache_time', 'repository_elisfiles'));
        $mform->setDefault('cache_time', $CFG->repositorycacheexpire);
        $mform->setType('cache_time', PARAM_INT);
        $mform->freeze('cache_time');

        // Generate the list of options for choosing a quota limit size.
        $bytes_1mb = 1048576;

        $sizelist = array(
            -1,
            '',
            $bytes_1mb * 10,
            $bytes_1mb * 20,
            $bytes_1mb * 30,
            $bytes_1mb * 40,
            $bytes_1mb * 50,
            $bytes_1mb * 100,
            $bytes_1mb * 200,
            $bytes_1mb * 500
        );

        foreach ($sizelist as $sizebytes) {
            if ($sizebytes == '') {
                $filesize[$sizebytes] = get_string('quotanotset', 'repository_elisfiles');;
            } else if ($sizebytes == -1 ) {
                $filesize[$sizebytes] = get_string('quotaunlimited', 'repository_elisfiles');
            } else {
                $filesize[$sizebytes] = display_size($sizebytes);
            }
        }

        krsort($filesize, SORT_NUMERIC);

        $mform->addElement('select', 'user_quota', get_string('userquota', 'repository_elisfiles'), $filesize);
        $mform->setDefault('user_quota', '');
        $mform->addElement('static', 'user_quota_default', '', get_string('elis_files_default_user_quota', 'repository_elisfiles'));
        $mform->addElement('static', 'user_quota_intro', '', get_string('configuserquota', 'repository_elisfiles'));

        // Add a toggle to control whether we will delete a user's home directory in Alfresco when their account is deleted.
        $options = array(1 => get_string('yes'), '' => get_string('no'));

        $mform->addElement('select', 'deleteuserdir', get_string('deleteuserdir', 'repository_elisfiles'), $options);
        $mform->setDefault('deleteuserdir', '');
        $mform->addElement('static', 'deleteuserdir_default', '', get_string('elis_files_default_deleteuserdir', 'repository_elisfiles'));
        $mform->addElement('static', 'deleteuserdir_intro', '', get_string('configdeleteuserdir', 'repository_elisfiles'));

        // Menu setting about choosing the default location where users will end up if they don't have a previous file
        // browsing location saved.
        $options = array(
            ELIS_FILES_BROWSE_SITE_FILES   => get_string('repositorysitefiles', 'repository_elisfiles'),
            ELIS_FILES_BROWSE_COURSE_FILES => get_string('repositorycoursefiles', 'repository_elisfiles'),
            ELIS_FILES_BROWSE_USER_FILES   => get_string('repositoryuserfiles', 'repository_elisfiles'),
            ELIS_FILES_BROWSE_SHARED_FILES => get_string('repositorysharedfiles', 'repository_elisfiles')
        );

        $mform->addElement('select', 'default_browse', get_string('defaultfilebrowsinglocation', 'repository_elisfiles'), $options);
        $mform->setDefault('default_browse', ELIS_FILES_BROWSE_USER_FILES);
        $mform->addElement('static', 'default_browse_default', '', get_string('elis_files_default_default_browse', 'repository_elisfiles'));
        $mform->addElement('static', 'default_browse_intro', '', get_string('configdefaultfilebrowsinglocation', 'repository_elisfiles'));

        // Display menu option about overriding the Moodle 'admin' account when creating an Alfresco user account.

        // Check for the existence of a user that will conflict with the default Alfresco administrator account.
        $hasadmin = $DB->record_exists('user', array('username'   => 'admin',
                                                     'mnethostid' => $CFG->mnet_localhost_id));

        $admin_username = trim(get_config('elisfiles', 'admin_username'));
        if (empty($admin_username)) {
            $adminusername = '******';
            set_config('admin_username', $adminusername, 'elisfiles');
        } else {
            $adminusername = $admin_username;
        }

        // Only proceed here if the Alfresco plug-in is actually enabled.
        if (self::is_repo_visible('elisfiles')) {
            if ($repo = repository_factory::factory()) {
                if (elis_files_get_home_directory($adminusername) == false) {
                    $mform->addElement('text', 'admin_username', get_string('adminusername', 'repository_elisfiles'), array('size' => '30'));
                    $mform->setType('admin_username', PARAM_TEXT);
                    $mform->addElement('static', 'admin_username_default', '', get_string('elis_files_default_admin_username', 'repository_elisfiles'));
                    $mform->addElement('static', 'admin_username_intro', '', get_string('configadminusername', 'repository_elisfiles'));
                } else {
                    // Added to prevent an empty value from being stored in the database on form submit
                    $mform->addElement('hidden', 'admin_username', $adminusername);
                    $mform->setType('admin_username', PARAM_TEXT);

                    // An Alfresco account with the specified username has been created, check if a Moodle account exists with that
                    // username and display a warning if that is the case.
                    if (($userid = $DB->get_field('user', 'id', array('username'=> $adminusername, 'mnethostid'=> $CFG->mnet_localhost_id))) !== false) {
                        $a = new stdClass;
                        $a->username = $adminusername;
                        $a->url      = $CFG->wwwroot . '/user/editadvanced.php?id=' . $userid . '&amp;course=' . SITEID;

                        $mform->addElement('static', 'admin_username_intro', get_string('adminusername', 'repository_elisfiles'),
                                           get_string('configadminusernameconflict', 'repository_elisfiles', $a));
                    } else {
                        $mform->addElement('static', 'admin_username_intro', get_string('adminusername', 'repository_elisfiles'),
                                           get_string('configadminusernameset', 'repository_elisfiles', $adminusername));
                    }
                }
            }

            // Attmept to detect users in the system that are authenticated with a plug-in that does not use passwords and display
            // a message indicating the script that can be run to do a bulk synchronise of these users.
            $auths = elis_files_nopasswd_auths();

            if (!empty($auths) && count($auths) > 0) {
                $select = '';
                $params = array();

                if (count($auths) == 1) {
                    $select          = 'auth = :auth1';
                    $params['auth1'] = current($auths);
                } else {
                    $selects = array();

                    for ($i = 1; $i <= count($auths); $i++) {
                        $selects[]        .= ':auth'.$i;
                        $params['auth'.$i] = $auths[$i - 1];
                    }

                    $select = 'auth IN ('.implode(', ', $selects).')';
                }

                $select       .= ' AND deleted = :del';
                $params['del'] = 0;

                if ($DB->record_exists_select('user', $select, $params)) {
                    $mform->addElement('html', '<br />');
                    $mform->addElement('html', '<dl class="healthissues notice"><dt>'.get_string('passwordlessusersync', 'repository_elisfiles').
                                    '</dt> <dd>'.get_string('configpasswordlessusersync', 'repository_elisfiles').'</dd></dl>');
                }
            }
        }

        return true;
    }
Example #4
0
/**
 * Get an Alfresco user's home directory UUID.
 *
 * @param string $username The Alfresco user's username.
 * @return string|bool The UUID of the home directory or, False.
 */
    function elis_files_userdir($username) {
        if (ELIS_FILES_DEBUG_TRACE) mtrace('elis_files_userdir(' . $username . ')');

        if (($uuid = elis_files_get_home_directory($username)) === false) {
            //error_log("ELIS_files::elis_files_userdir({$username}): elis_files_get_home_directory() === false!");
            return false;
        }
        //error_log("ELIS_files::elis_files_userdir({$username}): elis_files_get_home_directory() => {$uuid}");

        return $uuid;
    }