/** * 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); }
/** * 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; }
/** * 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.' '.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.' '.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 . '&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; }
/** * 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; }