Migration from 1.9.x/1.10.x - Add fix LP.id to LP.iid see BT#13954

Based in script tests/fix_lp_id_to_iid.php
pull/2467/head
jmontoyaa 8 years ago
parent 1f57321064
commit 1ebd8ae596
  1. 194
      main/install/install.lib.php

@ -1641,6 +1641,8 @@ function panel($content = null, $title = null, $id = null, $style = null)
* @param string $formFieldName
* @param string $parameterValue
* @param string $displayWhenUpdate
*
* @return string
*/
function display_configuration_parameter(
$installType,
@ -2785,6 +2787,195 @@ function fixIds(EntityManager $em)
}
}
/**
* @param \Doctrine\DBAL\Connection $connection
* @param $debug
*
* @throws \Doctrine\DBAL\DBALException
*/
function fixLpId($connection, $debug)
{
if ($debug) {
error_log('Fix lp.id lp.iids');
}
$sql = "SELECT id, title, code FROM course";
$result = $connection->query($sql);
$courses = $result->fetchAll();
$sql = "SELECT id FROM session";
$result = $connection->query($sql);
$sessions = $result->fetchAll();
$tblCLp = Database::get_course_table(TABLE_LP_MAIN);
$tblCLpItem = Database::get_course_table(TABLE_LP_ITEM);
$toolTable = Database::get_course_table(TABLE_TOOL_LIST);
if (!empty($sessions)) {
$sessions = array_column($sessions, 'id');
} else {
$sessions = [0];
}
foreach ($courses as $course) {
$courseId = $course['id'];
$sql = "SELECT * FROM $tblCLp WHERE c_id = $courseId AND iid <> id";
$result = $connection->query($sql);
if ($debug) {
error_log('-------------');
error_log("Entering Lps in course #$courseId");
error_log($sql);
}
$lpList = $result->fetchAll();
if (!empty($lpList)) {
foreach ($lpList as $lpInfo) {
$lpIid = $lpInfo['iid'];
$oldId = $lpInfo['id'];
if ($lpIid == $oldId) {
// Do nothing
continue;
}
$sql = "SELECT * FROM $tblCLpItem WHERE c_id = $courseId AND lp_id = $oldId";
$result = $connection->query($sql);
$items = $result->fetchAll();
$itemList = [];
foreach ($items as $subItem) {
$itemList[$subItem['id']] = $subItem['iid'];
}
$variablesToFix = [
'parent_item_id',
'next_item_id',
'prerequisite',
'previous_item_id'
];
foreach ($sessions as $sessionId) {
$correctLink = "lp/lp_controller.php?action=view&lp_id=$lpIid&id_session=$sessionId";
$link = "newscorm/lp_controller.php?action=view&lp_id=$oldId&id_session=$sessionId";
$secondLink = "lp/lp_controller.php?action=view&lp_id=$oldId&id_session=$sessionId";
$sql = "UPDATE $toolTable
SET link = '$correctLink'
WHERE c_id = $courseId AND (link = '$link' OR link ='$secondLink')";
$connection->query($sql);
if ($debug) {
error_log("Fix wrong c_tool links");
error_log($sql);
}
}
foreach ($items as $item) {
$itemIid = $item['iid'];
$itemId = $item['id'];
foreach ($variablesToFix as $variable) {
if (!empty($item[$variable]) && isset($itemList[$item[$variable]])) {
$newId = $itemList[$item[$variable]];
$sql = "UPDATE $tblCLpItem SET $variable = $newId
WHERE iid = $itemIid AND c_id = $courseId AND lp_id = $oldId";
$connection->query($sql);
if ($debug) {
error_log($sql);
}
}
}
if ($item['item_type'] == 'document' && !empty($item['path'])) {
$oldDocumentId = $item['path'];
$sql = "SELECT * FROM c_document WHERE c_id = $courseId AND id = $oldDocumentId";
$result = $connection->query($sql);
$document = $result->fetch();
if (!empty($document)) {
$newDocumentId = $document['iid'];
if (!empty($newDocumentId)) {
$sql = "UPDATE $tblCLpItem SET path = $newDocumentId
WHERE iid = $itemIid AND c_id = $courseId";
$connection->query($sql);
if ($debug) {
error_log("Fix document: ");
error_log($sql);
}
}
}
}
// c_lp_view
$sql = "UPDATE c_lp_view SET last_item = $itemIid
WHERE c_id = $courseId AND last_item = $itemId AND lp_id = $oldId";
$connection->query($sql);
// c_lp_item_view
$sql = "UPDATE c_lp_item_view SET lp_item_id = $itemIid
WHERE c_id = $courseId AND lp_item_id = $itemId";
$connection->query($sql);
// Update track_exercises
$sql = "UPDATE track_e_exercises SET orig_lp_item_id = $itemIid
WHERE c_id = $courseId AND orig_lp_id = $oldId AND orig_lp_item_id = $itemId";
$connection->query($sql);
// c_forum_thread
$sql = "UPDATE c_forum_thread SET lp_item_id = $itemIid
WHERE c_id = $courseId AND lp_item_id = $itemId";
$connection->query($sql);
// orig_lp_item_view_id
$sql = "SELECT * FROM c_lp_view
WHERE c_id = $courseId AND lp_id = $oldId";
$itemViewList = Database::store_result(Database::query($sql),'ASSOC');
if ($itemViewList) {
foreach ($itemViewList as $itemView) {
$userId = $itemView['user_id'];
$oldItemViewId = $itemView['id'];
$newItemView = $itemView['iid'];
if (empty($oldItemViewId)) {
continue;
}
$sql = "UPDATE track_e_exercises
SET orig_lp_item_view_id = $newItemView
WHERE
c_id = $courseId AND
orig_lp_id = $oldId AND
orig_lp_item_id = $itemIid AND
orig_lp_item_view_id = $oldItemViewId AND
exe_user_id = $userId
";
$connection->query($sql);
}
}
$sql = "UPDATE $tblCLpItem SET lp_id = $lpIid
WHERE iid = $itemIid AND c_id = $courseId AND lp_id = $oldId";
$connection->query($sql);
$sql = "UPDATE $tblCLpItem SET id = iid
WHERE c_id = $courseId AND lp_id = $oldId";
$connection->query($sql);
}
$sql = "UPDATE $tblCLp SET id = iid WHERE c_id = $courseId AND iid = $lpIid";
$connection->query($sql);
$sql = "UPDATE c_lp_view SET lp_id = $lpIid WHERE c_id = $courseId AND lp_id = $oldId";
$connection->query($sql);
$sql = "UPDATE c_forum_forum SET lp_id = $lpIid WHERE c_id = $courseId AND lp_id = $oldId";
$connection->query($sql);
// Update track_exercises
$sql = "UPDATE track_e_exercises SET orig_lp_id = $lpIid
WHERE c_id = $courseId AND orig_lp_id = $oldId";
$connection->query($sql);
}
}
}
if ($debug) {
error_log('----- END - fixIds');
}
}
/**
* After the schema was created (table creation), the function adds
* admin/platform information.
@ -3220,6 +3411,7 @@ function migrateSwitch($fromVersion, $manager, $processFiles = true)
if ($result) {
error_log('Migrations files were executed ('.date('Y-m-d H:i:s').')');
fixIds($manager);
fixLpId($manager->getConnection(), true);
error_log('fixIds finished ('.date('Y-m-d H:i:s').')');
$connection->executeQuery("UPDATE settings_current SET selected_value = '1.10.0' WHERE variable = 'chamilo_database_version'");
@ -3272,6 +3464,8 @@ function migrateSwitch($fromVersion, $manager, $processFiles = true)
);
if ($result) {
fixLpId($connection, true);
error_log('Migrations files were executed ('.date('Y-m-d H:i:s').')');
fixPostGroupIds($connection);

Loading…
Cancel
Save