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 = [ $menu = [
'_' => [ '_' => [
//'users',
'course_categories', 'course_categories',
//'courses', 'courses',
'efc_courses',
//'role_assignments', //'role_assignments',
'efc_users', 'users',
], ],
'efc_courses' => [ 'courses' => [
'course_introductions', 'course_introductions',
'course_sections', 'course_sections',
'course_modules_scorm', 'course_modules_scorm',
@ -89,8 +87,10 @@ $menu = [
'course_modules_url' => [ 'course_modules_url' => [
'urls', 'urls',
], ],
'efc_users' => [ 'users' => [
'efc_user_sessions', 'user_sessions',
],
'user_sessions' => [
'users_learn_paths', 'users_learn_paths',
'users_scorms_view', 'users_scorms_view',
], ],

@ -12,13 +12,14 @@ $strings['db_host'] = 'Moodle DB host';
$strings['db_user'] = 'Moodle DB user'; $strings['db_user'] = 'Moodle DB user';
$strings['db_password'] = 'Moodle DB password'; $strings['db_password'] = 'Moodle DB password';
$strings['db_name'] = 'Moodle DB name'; $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 // Tasks
$strings['UsersTask'] = 'Users'; $strings['UsersTask'] = 'Users';
$strings['EfcUsersTask'] = 'Users (filtered with username efc*)';
$strings['CourseCategoriesTask'] = 'Course categories'; $strings['CourseCategoriesTask'] = 'Course categories';
$strings['CoursesTask'] = 'Courses'; $strings['CoursesTask'] = 'Courses';
$strings['EfcCoursesTask'] = 'Courses (filtered for efc* users)';
$strings['CourseSectionsTask'] = 'Course sections'; $strings['CourseSectionsTask'] = 'Course sections';
$strings['CourseModulesLessonTask'] = 'Course modules: Lessons'; $strings['CourseModulesLessonTask'] = 'Course modules: Lessons';
$strings['LessonPagesTask'] = 'Lesson pages'; $strings['LessonPagesTask'] = 'Lesson pages';
@ -47,7 +48,7 @@ $strings['QuestionShortAnswerTask'] = 'Answers for shortanswers questions';
$strings['CourseModulesScormTask'] = 'Course Scorms'; $strings['CourseModulesScormTask'] = 'Course Scorms';
$strings['ScormScoesTask'] = 'Scorms items'; $strings['ScormScoesTask'] = 'Scorms items';
$strings['FilesForScormScoesTask'] = 'Files for Scorm 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['CourseIntroductionsTask'] = 'Course introductions';
$strings['FilesForCourseIntroductionsTask'] = 'Files for course introductions'; $strings['FilesForCourseIntroductionsTask'] = 'Files for course introductions';
$strings['FilesForCourseSectionsTask'] = 'Files for course sections'; $strings['FilesForCourseSectionsTask'] = 'Files for course sections';

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

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

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

@ -10,6 +10,8 @@ use Doctrine\DBAL\DriverManager;
*/ */
class MigrationMoodlePlugin extends Plugin implements HookPluginInterface class MigrationMoodlePlugin extends Plugin implements HookPluginInterface
{ {
const SETTING_USER_FILTER = 'user_filter';
public $isAdminPlugin = true; public $isAdminPlugin = true;
/** /**
@ -25,6 +27,7 @@ class MigrationMoodlePlugin extends Plugin implements HookPluginInterface
'db_user' => 'text', 'db_user' => 'text',
'db_password' => 'text', 'db_password' => 'text',
'db_name' => 'text', 'db_name' => 'text',
self::SETTING_USER_FILTER => 'text',
]; ];
parent::__construct($version, $author, $settings); parent::__construct($version, $author, $settings);
@ -107,4 +110,14 @@ class MigrationMoodlePlugin extends Plugin implements HookPluginInterface
CheckLoginCredentialsHook::create()->detach($hookObserver); 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; protected $loader;
/**
* @var \MigrationMoodlePlugin
*/
protected $plugin;
/** /**
* BaseTask constructor. * BaseTask constructor.
*/ */
public function __construct() public function __construct()
{ {
$this->plugin = \MigrationMoodlePlugin::create();
$this->extractor = $this->getExtractor(); $this->extractor = $this->getExtractor();
$this->transformer = $this->getTransformer(); $this->transformer = $this->getTransformer();

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

@ -22,9 +22,17 @@ class UsersLearnPathsTask extends BaseTask
*/ */
public function getExtractConfiguration() public function getExtractConfiguration()
{ {
$userFilter = $this->plugin->getUserFilterSetting();
$userFilterCondition = '';
if (!empty($userFilter)) {
$userFilterCondition = "WHERE username LIKE '$userFilter%'";
}
return [ return [
'class' => LoadedUsersFilterExtractor::class, '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 * @package Chamilo\PluginBundle\MigrationMoodle\Task
*/ */
class UsersScormsProgressTask extends EfcUsersTask class UsersScormsProgressTask extends BaseTask
{ {
/** /**
* @inheritDoc * @inheritDoc

@ -25,9 +25,17 @@ class UsersTask extends BaseTask
*/ */
public function getExtractConfiguration() 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 [ return [
'class' => BaseExtractor::class, '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; namespace Chamilo\PluginBundle\MigrationMoodle\Transformer\Property;
use Chamilo\PluginBundle\MigrationMoodle\Task\EfcCoursesTask; use Chamilo\PluginBundle\MigrationMoodle\Task\CoursesTask;
/** /**
* Class LoadedCourseCodeLookup. * Class LoadedCourseCodeLookup.
@ -16,7 +16,7 @@ class LoadedCourseCodeLookup extends LoadedKeyLookup
*/ */
public function __construct() public function __construct()
{ {
$this->calledClass = EfcCoursesTask::class; $this->calledClass = CoursesTask::class;
} }
/** /**

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

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

Loading…
Cancel
Save