MigrationMoodle: Add setting to set user filter - refs BT#15992

pull/3127/head
Angel Fernando Quiroz Campos 6 years ago
parent 54b3719b58
commit 23dcf2aea7
  1. 14
      plugin/migrationmoodle/admin.php
  2. 7
      plugin/migrationmoodle/lang/english.php
  3. 4
      plugin/migrationmoodle/src/Extractor/LoadedCoursesFilterExtractor.php
  4. 4
      plugin/migrationmoodle/src/Extractor/LoadedUsersFilterExtractor.php
  5. 8
      plugin/migrationmoodle/src/Loader/UserSessionLoader.php
  6. 13
      plugin/migrationmoodle/src/MigrationMoodlePlugin.php
  7. 7
      plugin/migrationmoodle/src/Task/BaseTask.php
  8. 15
      plugin/migrationmoodle/src/Task/CoursesTask.php
  9. 30
      plugin/migrationmoodle/src/Task/EfcCoursesTask.php
  10. 27
      plugin/migrationmoodle/src/Task/EfcUsersTask.php
  11. 29
      plugin/migrationmoodle/src/Task/UserSessionsTask.php
  12. 10
      plugin/migrationmoodle/src/Task/UsersLearnPathsTask.php
  13. 2
      plugin/migrationmoodle/src/Task/UsersScormsProgressTask.php
  14. 10
      plugin/migrationmoodle/src/Task/UsersTask.php
  15. 4
      plugin/migrationmoodle/src/Transformer/Property/LoadedCourseCodeLookup.php
  16. 4
      plugin/migrationmoodle/src/Transformer/Property/LoadedCourseLookup.php
  17. 4
      plugin/migrationmoodle/src/Transformer/Property/LoadedUserLookup.php

@ -20,14 +20,12 @@ if ('true' != $plugin->get('active')) {
$menu = [
'_' => [
//'users',
'course_categories',
//'courses',
'efc_courses',
'courses',
//'role_assignments',
'efc_users',
'users',
],
'efc_courses' => [
'courses' => [
'course_introductions',
'course_sections',
'course_modules_scorm',
@ -89,8 +87,10 @@ $menu = [
'course_modules_url' => [
'urls',
],
'efc_users' => [
'efc_user_sessions',
'users' => [
'user_sessions',
],
'user_sessions' => [
'users_learn_paths',
'users_scorms_view',
],

@ -12,13 +12,14 @@ $strings['db_host'] = 'Moodle DB host';
$strings['db_user'] = 'Moodle DB user';
$strings['db_password'] = 'Moodle DB password';
$strings['db_name'] = 'Moodle DB name';
$strings['user_filter'] = 'Filter for users';
$strings['user_filter_help'] = 'Allow migrate only users who have a username prefixed with it.<br>'
.'Course migration is also affected by this configuration, it only migrates courses in which users with the username prefix are enrolled.';
// Tasks
$strings['UsersTask'] = 'Users';
$strings['EfcUsersTask'] = 'Users (filtered with username efc*)';
$strings['CourseCategoriesTask'] = 'Course categories';
$strings['CoursesTask'] = 'Courses';
$strings['EfcCoursesTask'] = 'Courses (filtered for efc* users)';
$strings['CourseSectionsTask'] = 'Course sections';
$strings['CourseModulesLessonTask'] = 'Course modules: Lessons';
$strings['LessonPagesTask'] = 'Lesson pages';
@ -47,7 +48,7 @@ $strings['QuestionShortAnswerTask'] = 'Answers for shortanswers questions';
$strings['CourseModulesScormTask'] = 'Course Scorms';
$strings['ScormScoesTask'] = 'Scorms items';
$strings['FilesForScormScoesTask'] = 'Files for Scorm items';
$strings['EfcUserSessionsTask'] = 'Course Sessions for efc* users';
$strings['UserSessionsTask'] = 'Course Sessions for users';
$strings['CourseIntroductionsTask'] = 'Course introductions';
$strings['FilesForCourseIntroductionsTask'] = 'Files for course introductions';
$strings['FilesForCourseSectionsTask'] = 'Files for course sections';

@ -3,7 +3,7 @@
namespace Chamilo\PluginBundle\MigrationMoodle\Extractor;
use Chamilo\PluginBundle\MigrationMoodle\Task\EfcCoursesTask;
use Chamilo\PluginBundle\MigrationMoodle\Task\CoursesTask;
/**
* Class LoadedCoursesFilterExtractor.
@ -23,7 +23,7 @@ class LoadedCoursesFilterExtractor extends FilterExtractor
{
parent::__construct($configuration);
$this->calledClass = EfcCoursesTask::class;
$this->calledClass = CoursesTask::class;
}
/**

@ -3,7 +3,7 @@
namespace Chamilo\PluginBundle\MigrationMoodle\Extractor;
use Chamilo\PluginBundle\MigrationMoodle\Task\EfcUsersTask;
use Chamilo\PluginBundle\MigrationMoodle\Task\UsersTask;
/**
* Class LoadedUsersFilterExtractor.
@ -21,7 +21,7 @@ class LoadedUsersFilterExtractor extends FilterExtractor
{
parent::__construct($configuration);
$this->calledClass = EfcUsersTask::class;
$this->calledClass = UsersTask::class;
}
/**

@ -4,14 +4,14 @@
namespace Chamilo\PluginBundle\MigrationMoodle\Loader;
use Chamilo\PluginBundle\MigrationMoodle\Interfaces\LoaderInterface;
use Chamilo\PluginBundle\MigrationMoodle\Task\EfcUserSessionsTask;
use Chamilo\PluginBundle\MigrationMoodle\Task\UserSessionsTask;
/**
* Class EfcUserSessionLoader.
* Class UserSessionLoader.
*
* @package Chamilo\PluginBundle\MigrationMoodle\Loader
*/
class EfcUserSessionLoader implements LoaderInterface
class UserSessionLoader implements LoaderInterface
{
/**
* @inheritDoc
@ -21,7 +21,7 @@ class EfcUserSessionLoader implements LoaderInterface
$datetime = api_get_utc_datetime();
$coachId = 1;
$courseCodes = explode(EfcUserSessionsTask::SEPARATOR_NAME, $incomingData['courses_list']);
$courseCodes = explode(UserSessionsTask::SEPARATOR_NAME, $incomingData['courses_list']);
$courseIds = [];
foreach ($courseCodes as $courseCode) {

@ -10,6 +10,8 @@ use Doctrine\DBAL\DriverManager;
*/
class MigrationMoodlePlugin extends Plugin implements HookPluginInterface
{
const SETTING_USER_FILTER = 'user_filter';
public $isAdminPlugin = true;
/**
@ -25,6 +27,7 @@ class MigrationMoodlePlugin extends Plugin implements HookPluginInterface
'db_user' => 'text',
'db_password' => 'text',
'db_name' => 'text',
self::SETTING_USER_FILTER => 'text',
];
parent::__construct($version, $author, $settings);
@ -107,4 +110,14 @@ class MigrationMoodlePlugin extends Plugin implements HookPluginInterface
CheckLoginCredentialsHook::create()->detach($hookObserver);
}
/**
* @return string
*/
public function getUserFilterSetting()
{
$userFilter = $this->get(self::SETTING_USER_FILTER);
return trim($userFilter);
}
}

@ -35,11 +35,18 @@ abstract class BaseTask
*/
protected $loader;
/**
* @var \MigrationMoodlePlugin
*/
protected $plugin;
/**
* BaseTask constructor.
*/
public function __construct()
{
$this->plugin = \MigrationMoodlePlugin::create();
$this->extractor = $this->getExtractor();
$this->transformer = $this->getTransformer();

@ -23,9 +23,22 @@ class CoursesTask extends BaseTask
*/
public function getExtractConfiguration()
{
$query = "SELECT * FROM mdl_course";
$userFilter = $this->plugin->getUserFilterSetting();
if (!empty($userFilter)) {
$query = "SELECT DISTINCT c.*
FROM mdl_course c
INNER JOIN mdl_context ctx ON c.id = ctx.instanceid
INNER JOIN mdl_role_assignments ra ON ctx.id = ra.contextid
INNER JOIN mdl_user u ON ra.userid = u.id
WHERE u.username LIKE '$userFilter%'";
}
return [
'class' => BaseExtractor::class,
'query' => 'SELECT * FROM mdl_course',
'query' => $query,
];
}

@ -1,30 +0,0 @@
<?php
/* For licensing terms, see /license.txt */
namespace Chamilo\PluginBundle\MigrationMoodle\Task;
use Chamilo\PluginBundle\MigrationMoodle\Extractor\BaseExtractor;
/**
* Class EfcCoursesTask.
*
* @package Chamilo\PluginBundle\MigrationMoodle\Task
*/
class EfcCoursesTask extends CoursesTask
{
/**
* @return array
*/
public function getExtractConfiguration()
{
return [
'class' => BaseExtractor::class,
'query' => "SELECT DISTINCT c.*
FROM mdl_course c
INNER JOIN mdl_context ctx ON c.id = ctx.instanceid
INNER JOIN mdl_role_assignments ra ON ctx.id = ra.contextid
INNER JOIN mdl_user u ON ra.userid = u.id
WHERE u.username LIKE 'efc%'",
];
}
}

@ -1,27 +0,0 @@
<?php
/* For licensing terms, see /license.txt */
namespace Chamilo\PluginBundle\MigrationMoodle\Task;
use Chamilo\PluginBundle\MigrationMoodle\Extractor\BaseExtractor;
/**
* Class EfcUsersTask.
*
* Task to convert Moodle users in Chamilo users. Filtering the users with username like "efc*".
*
* @package Chamilo\PluginBundle\MigrationMoodle\Task
*/
class EfcUsersTask extends UsersTask
{
/**
* @return array
*/
public function getExtractConfiguration()
{
return [
'class' => BaseExtractor::class,
'query' => 'SELECT * FROM mdl_user WHERE username LIKE "efc%"',
];
}
}

@ -4,17 +4,17 @@
namespace Chamilo\PluginBundle\MigrationMoodle\Task;
use Chamilo\PluginBundle\MigrationMoodle\Extractor\LoadedUsersFilterExtractor;
use Chamilo\PluginBundle\MigrationMoodle\Loader\EfcUserSessionLoader;
use Chamilo\PluginBundle\MigrationMoodle\Loader\UserSessionLoader;
use Chamilo\PluginBundle\MigrationMoodle\Transformer\BaseTransformer;
use Chamilo\PluginBundle\MigrationMoodle\Transformer\Property\LoadedUserLookup;
use Chamilo\PluginBundle\MigrationMoodle\Transformer\Property\SessionName;
/**
* Class EfcUserSessionsTask.
* Class UserSessionsTask.
*
* @package Chamilo\PluginBundle\MigrationMoodle\Task
*/
class EfcUserSessionsTask extends BaseTask
class UserSessionsTask extends BaseTask
{
const SEPARATOR_NAME = ' - ';
@ -23,19 +23,28 @@ class EfcUserSessionsTask extends BaseTask
*/
public function getExtractConfiguration()
{
$userFilterCondition = '';
$userFilter = $this->plugin->getUserFilterSetting();
if (!empty($userFilter)) {
$userFilterCondition = "AND u.username LIKE '$userFilter%'";
}
return [
'class' => LoadedUsersFilterExtractor::class,
'query' => 'SELECT
u.id, u.username,
GROUP_CONCAT(c.shortname SEPARATOR "'.self::SEPARATOR_NAME.'") session_name
'query' => "SELECT
u.id,
u.username,
GROUP_CONCAT(c.shortname SEPARATOR '".self::SEPARATOR_NAME."') session_name
FROM mdl_role_assignments ra
INNER JOIN mdl_role r ON ra.roleid = r.id
INNER JOIN mdl_context ctx ON ra.contextid = ctx.id
INNER JOIN mdl_course c ON ctx.instanceid = c.id
INNER JOIN mdl_user u ON ra.userid = u.id
WHERE ctx.contextlevel = '.RoleAssignmentsTask::CONTEXT_LEVEL_COURSE.'
AND u.username LIKE "efc%"
GROUP BY ra.userid',
WHERE ctx.contextlevel = ".RoleAssignmentsTask::CONTEXT_LEVEL_COURSE."
$userFilterCondition
GROUP BY ra.userid",
];
}
@ -66,7 +75,7 @@ class EfcUserSessionsTask extends BaseTask
public function getLoadConfiguration()
{
return [
'class' => EfcUserSessionLoader::class,
'class' => UserSessionLoader::class,
];
}
}

@ -22,9 +22,17 @@ class UsersLearnPathsTask extends BaseTask
*/
public function getExtractConfiguration()
{
$userFilter = $this->plugin->getUserFilterSetting();
$userFilterCondition = '';
if (!empty($userFilter)) {
$userFilterCondition = "WHERE username LIKE '$userFilter%'";
}
return [
'class' => LoadedUsersFilterExtractor::class,
'query' => 'SELECT id FROM mdl_user WHERE username LIKE "efc%"',
'query' => "SELECT id FROM mdl_user $userFilterCondition",
];
}

@ -13,7 +13,7 @@ use Chamilo\PluginBundle\MigrationMoodle\Transformer\Property\LoadedUserLookup;
*
* @package Chamilo\PluginBundle\MigrationMoodle\Task
*/
class UsersScormsProgressTask extends EfcUsersTask
class UsersScormsProgressTask extends BaseTask
{
/**
* @inheritDoc

@ -25,9 +25,17 @@ class UsersTask extends BaseTask
*/
public function getExtractConfiguration()
{
$query = "SELECT * FROM mdl_user WHERE username NOT IN ('admin', 'guest')";
$userFilter = $this->plugin->getUserFilterSetting();
if (!empty($userFilter)) {
$query = "SELECT * FROM mdl_user WHERE username LIKE '$userFilter%'";
}
return [
'class' => BaseExtractor::class,
'query' => "SELECT * FROM mdl_user WHERE username NOT IN ('admin', 'guest')",
'query' => $query,
];
}

@ -2,7 +2,7 @@
namespace Chamilo\PluginBundle\MigrationMoodle\Transformer\Property;
use Chamilo\PluginBundle\MigrationMoodle\Task\EfcCoursesTask;
use Chamilo\PluginBundle\MigrationMoodle\Task\CoursesTask;
/**
* Class LoadedCourseCodeLookup.
@ -16,7 +16,7 @@ class LoadedCourseCodeLookup extends LoadedKeyLookup
*/
public function __construct()
{
$this->calledClass = EfcCoursesTask::class;
$this->calledClass = CoursesTask::class;
}
/**

@ -3,7 +3,7 @@
namespace Chamilo\PluginBundle\MigrationMoodle\Transformer\Property;
use Chamilo\PluginBundle\MigrationMoodle\Task\EfcCoursesTask;
use Chamilo\PluginBundle\MigrationMoodle\Task\CoursesTask;
/**
* Class LoadedCourseLookup.
@ -17,6 +17,6 @@ class LoadedCourseLookup extends LoadedKeyLookup
*/
public function __construct()
{
$this->calledClass = EfcCoursesTask::class;
$this->calledClass = CoursesTask::class;
}
}

@ -2,7 +2,7 @@
namespace Chamilo\PluginBundle\MigrationMoodle\Transformer\Property;
use Chamilo\PluginBundle\MigrationMoodle\Task\EfcUsersTask;
use Chamilo\PluginBundle\MigrationMoodle\Task\UsersTask;
/**
* Class LoadedUserLookup.
@ -16,6 +16,6 @@ class LoadedUserLookup extends LoadedKeyLookup
*/
public function __construct()
{
$this->calledClass = EfcUsersTask::class;
$this->calledClass = UsersTask::class;
}
}

Loading…
Cancel
Save