MigrationMoodle: Add task for SCORM items - refs BT#15992

pull/3127/head
Angel Fernando Quiroz Campos 6 years ago
parent 6ff0eb305c
commit 572b54d20a
  1. 3
      plugin/migrationmoodle/admin.php
  2. 1
      plugin/migrationmoodle/lang/english.php
  3. 56
      plugin/migrationmoodle/src/Extractor/ScormExtractor.php
  4. 47
      plugin/migrationmoodle/src/Loader/ScormScoLoader.php
  5. 2
      plugin/migrationmoodle/src/Task/CourseModulesScormTask.php
  6. 71
      plugin/migrationmoodle/src/Task/ScormScoesTask.php
  7. 22
      plugin/migrationmoodle/src/Transformer/Property/LoadedScormLookup.php
  8. 43
      plugin/migrationmoodle/src/Transformer/Property/ScormScoParentLookup.php

@ -70,6 +70,9 @@ $menu = [
'question_multi_choice_multiple',
'questions_true_false',
],
'course_modules_scorm' => [
'scorm_scoes',
],
];
Display::display_header($plugin->get_title());

@ -38,3 +38,4 @@ $strings['QuestionMultiChoiceSingleTask'] = 'Answers for multichoice questions (
$strings['QuestionMultiChoiceMultipleTask'] = 'Answers for multichoice questions (multiple)';
$strings['QuestionsTrueFalseTask'] = 'Answers for truefalse questions';
$strings['CourseModulesScormTask'] = 'Course Scorms';
$strings['ScormScoesTask'] = 'Scorms items';

@ -0,0 +1,56 @@
<?php
/* For licensing terms, see /license.txt */
namespace Chamilo\PluginBundle\MigrationMoodle\Extractor;
use Chamilo\PluginBundle\MigrationMoodle\Task\CourseModulesScormTask;
use Chamilo\PluginBundle\MigrationMoodle\Traits\MapTrait\MapTrait;
/**
* Class ScormExtractor.
*
* @package Chamilo\PluginBundle\MigrationMoodle\Extractor
*/
class ScormExtractor extends BaseExtractor
{
use MapTrait;
/**
* ScormExtractor constructor.
*
* @param array $configuration
*/
public function __construct(array $configuration)
{
parent::__construct($configuration);
$this->calledClass = CourseModulesScormTask::class;
}
/**
* Filter to avoid scorms not yet migrated.
*
* @param array $sourceData
*
* @return bool
*/
public function filter(array $sourceData)
{
$scormId = $sourceData['scorm'];
$taskName = $this->getTaskName();
$result = \Database::select(
'COUNT(1) AS c',
'plugin_migrationmoodle_item i INNER JOIN plugin_migrationmoodle_task t ON i.task_id = t.id',
[
'where' => [
't.name = ? AND i.extracted_id = ?' => [$taskName, $scormId]
],
],
'first'
);
return $result['c'] == 0;
}
}

@ -0,0 +1,47 @@
<?php
/* For licensing terms, see /license.txt */
namespace Chamilo\PluginBundle\MigrationMoodle\Loader;
use Chamilo\PluginBundle\MigrationMoodle\Interfaces\LoaderInterface;
/**
* Class ScormScoLoader.
*
* @package Chamilo\PluginBundle\MigrationMoodle\Loader
*/
class ScormScoLoader implements LoaderInterface
{
/**
* @inheritDoc
*/
public function load(array $incomingData)
{
$em = \Database::getManager();
$scorm = new \scorm(
$incomingData['c_code'],
$incomingData['lp_id'],
api_get_user_id()
);
$itemId = $scorm->add_item(
$incomingData['parent_item_id'],
0,
$incomingData['item_type'],
0,
$incomingData['title'],
''
);
$item = $em->find('ChamiloCourseBundle:CLpItem', $itemId);
$item
->setPath($incomingData['path'])
->setRef($incomingData['ref']);
$em->persist($item);
$em->flush();
return $item->getId();
}
}

@ -26,7 +26,7 @@ class CourseModulesScormTask extends BaseTask
return [
'class' => CourseExtractor::class,
'query' => "SELECT
cm.id,
sco.id,
sco.course,
sco.name,
sco.reference,

@ -0,0 +1,71 @@
<?php
/* For licensing terms, see /license.txt */
namespace Chamilo\PluginBundle\MigrationMoodle\Task;
use Chamilo\PluginBundle\MigrationMoodle\Extractor\ScormExtractor;
use Chamilo\PluginBundle\MigrationMoodle\Loader\ScormScoLoader;
use Chamilo\PluginBundle\MigrationMoodle\Transformer\BaseTransformer;
use Chamilo\PluginBundle\MigrationMoodle\Transformer\Property\LoadedCourseCodeLookup;
use Chamilo\PluginBundle\MigrationMoodle\Transformer\Property\LoadedScormLookup;
use Chamilo\PluginBundle\MigrationMoodle\Transformer\Property\ScormScoParentLookup;
/**
* Class ScormScoesTask.
*
* @package Chamilo\PluginBundle\MigrationMoodle\Task
*/
class ScormScoesTask extends BaseTask
{
/**
* @inheritDoc
*/
public function getExtractConfiguration()
{
return [
'class' => ScormExtractor::class,
'query' => "SELECT i.id, i.title, i.scormtype, i.launch, i.identifier, i.scorm, i.parent, s.course
FROM mdl_scorm_scoes i
INNER JOIN mdl_scorm s ON i.scorm = s.id
WHERE i.parent != '/' ORDER BY s.id, i.sortorder",
];
}
/**
* @inheritDoc
*/
public function getTransformConfiguration()
{
return [
'class' => BaseTransformer::class,
'map' => [
'title' => 'title',
'item_type' => 'scormtype',
'path' => 'launch',
'ref' => 'identifier',
'lp_id' => [
'class' => LoadedScormLookup::class,
'properties' => ['scorm'],
],
'parent_item_id' => [
'class' => ScormScoParentLookup::class,
'properties' => ['parent', 'scorm'],
],
'c_code' => [
'class' => LoadedCourseCodeLookup::class,
'properties' => ['course'],
],
],
];
}
/**
* @inheritDoc
*/
public function getLoadConfiguration()
{
return [
'class' => ScormScoLoader::class,
];
}
}

@ -0,0 +1,22 @@
<?php
/* For licensing terms, see /license.txt */
namespace Chamilo\PluginBundle\MigrationMoodle\Transformer\Property;
use Chamilo\PluginBundle\MigrationMoodle\Task\CourseModulesScormTask;
/**
* Class LoadedScormLookup.
*
* @package Chamilo\PluginBundle\MigrationMoodle\Transformer\Property
*/
class LoadedScormLookup extends LoadedKeyLookup
{
/**
* LoadedScormLookup constructor.
*/
public function __construct()
{
$this->calledClass = CourseModulesScormTask::class;
}
}

@ -0,0 +1,43 @@
<?php
/* For licensing terms, see /license.txt */
namespace Chamilo\PluginBundle\MigrationMoodle\Transformer\Property;
use Chamilo\PluginBundle\MigrationMoodle\Interfaces\TransformPropertyInterface;
/**
* Class ScormScoParentLookup.
*
* @package Chamilo\PluginBundle\MigrationMoodle\Transformer\Property
*/
class ScormScoParentLookup extends LoadedScormLookup
{
/**
* @inheritDoc
*/
public function transform(array $data)
{
$lpId = parent::transform([$data['scorm']]);
if (empty($lpId)) {
throw new \Exception("Learning path SCORM ({$data['scorm']}) not found searching item {$data['parent']}");
}
$lpItem = \Database::select(
'iid',
\Database::get_course_table(TABLE_LP_ITEM),
[
'where' => [
'lp_id = ? AND ref = ?' => [$lpId, $data['parent']],
],
],
'first'
);
if (!empty($lpItem)) {
return $lpItem['iid'];
}
return 0;
}
}
Loading…
Cancel
Save