Add script to fix c_student_publication.post_group_id see BT#12609

- c_student_publication.post_group_id changed from 1.9.x
by using c_group_info.iid instead of c_group_info.id
- Error appears only when upgrading using chash.
pull/2487/head
jmontoyaa 8 years ago
parent fa607644cd
commit de1b0abe21
  1. 154
      main/install/install.lib.php
  2. 14
      tests/scripts/fix_student_publication_id.php

@ -3191,80 +3191,8 @@ function migrateSwitch($fromVersion, $manager, $processFiles = true)
if ($result) {
error_log('Migrations files were executed ('.date('Y-m-d H:i:s').')');
$connection->executeQuery("ALTER TABLE course_category MODIFY COLUMN auth_course_child VARCHAR(40) DEFAULT 'TRUE'");
error_log('Fix c_student_publication.post_group_id');
// Fix post_group_id
$sql = "SELECT * FROM c_student_publication WHERE (post_group_id <> 0 AND post_group_id is not null)";
$statement = $connection->executeQuery($sql);
$result = $statement->fetchAll();
foreach ($result as $row) {
$groupId = $row['post_group_id'];
$courseId = $row['c_id'];
$workIid = $row['iid'];
$sql = "SELECT iid from c_group_info WHERE c_id = $courseId AND iid = $groupId";
$statement = $connection->executeQuery($sql);
$count = $statement->rowCount();
if ($count == 0) {
$sql = "SELECT iid from c_group_info WHERE c_id = $courseId AND id = $groupId";
$statement = $connection->executeQuery($sql);
$count = $statement->rowCount();
if ($count > 0) {
$rowGroup = $statement->fetch();
$newGroupId = $rowGroup['iid'];
if ($newGroupId) {
$sqlUpdate = "UPDATE c_student_publication
SET post_group_id = $newGroupId
WHERE
c_id = $courseId AND
iid = $workIid
";
$connection->executeQuery($sqlUpdate);
}
}
}
}
error_log('End - Fix c_student_publication.post_group_id');
// Delete c_student_publication from any session that doesn't exist anymore
$sql = "DELETE FROM c_student_publication
WHERE session_id NOT IN (SELECT id FROM session) AND (session_id <> 0 AND session_id is not null)";
$connection->executeQuery($sql);
error_log('Fix work documents');
// Fix work documents that don't have c_item_property value
$sql = "SELECT * FROM c_student_publication WHERE parent_id IS NOT NULL";
$statement = $connection->executeQuery($sql);
$result = $statement->fetchAll();
foreach ($result as $row) {
$groupId = $row['post_group_id'];
$courseId = $row['c_id'];
$sessionId = $row['session_id'];
$workId = $row['id'];
$itemInfo = api_get_item_property_info(
$courseId,
'work',
$workId,
$sessionId
);
$courseInfo = api_get_course_info_by_id($courseId);
if (empty($itemInfo)) {
api_item_property_update(
$courseInfo,
'work',
$workId,
'visible',
1,
$groupId,
null,
null,
null,
$sessionId
);
}
}
error_log('End - Fix work documents');
fixPostGroupIds($connection);
$sql = "UPDATE settings_current SET selected_value = '1.11.0' WHERE variable = 'chamilo_database_version'";
$connection->executeQuery($sql);
@ -3288,3 +3216,83 @@ function migrateSwitch($fromVersion, $manager, $processFiles = true)
return true;
}
/**
* @param \Doctrine\DBAL\Connection $connection
*/
function fixPostGroupIds($connection)
{
$connection->executeQuery("ALTER TABLE course_category MODIFY COLUMN auth_course_child VARCHAR(40) DEFAULT 'TRUE'");
error_log('Fix c_student_publication.post_group_id');
// Fix post_group_id
$sql = "SELECT * FROM c_student_publication WHERE (post_group_id <> 0 AND post_group_id is not null)";
$statement = $connection->executeQuery($sql);
$result = $statement->fetchAll();
foreach ($result as $row) {
$groupId = $row['post_group_id'];
$courseId = $row['c_id'];
$workIid = $row['iid'];
$sql = "SELECT iid from c_group_info WHERE c_id = $courseId AND iid = $groupId";
$statement = $connection->executeQuery($sql);
$count = $statement->rowCount();
if ($count == 0) {
$sql = "SELECT iid from c_group_info WHERE c_id = $courseId AND id = $groupId";
$statement = $connection->executeQuery($sql);
$count = $statement->rowCount();
if ($count > 0) {
$rowGroup = $statement->fetch();
$newGroupId = $rowGroup['iid'];
if ($newGroupId) {
$sqlUpdate = "UPDATE c_student_publication
SET post_group_id = $newGroupId
WHERE
c_id = $courseId AND
iid = $workIid
";
$connection->executeQuery($sqlUpdate);
}
}
}
}
error_log('End - Fix c_student_publication.post_group_id');
// Delete c_student_publication from any session that doesn't exist anymore
$sql = "DELETE FROM c_student_publication
WHERE session_id NOT IN (SELECT id FROM session) AND (session_id <> 0 AND session_id is not null)";
$connection->executeQuery($sql);
error_log('Fix work documents');
// Fix work documents that don't have c_item_property value
$sql = "SELECT * FROM c_student_publication WHERE parent_id IS NOT NULL";
$statement = $connection->executeQuery($sql);
$result = $statement->fetchAll();
foreach ($result as $row) {
$groupId = $row['post_group_id'];
$courseId = $row['c_id'];
$sessionId = $row['session_id'];
$workId = $row['id'];
$itemInfo = api_get_item_property_info(
$courseId,
'work',
$workId,
$sessionId
);
$courseInfo = api_get_course_info_by_id($courseId);
if (empty($itemInfo)) {
api_item_property_update(
$courseInfo,
'work',
$workId,
'visible',
1,
$groupId,
null,
null,
null,
$sessionId
);
}
}
error_log('End - Fix work documents');
}

@ -0,0 +1,14 @@
<?php
exit;
/* For license terms, see /license.txt */
if (PHP_SAPI != 'cli') {
die('This script can only be launched from the command line');
}
require_once __DIR__.'/../../main/inc/global.inc.php';
require_once api_get_path(SYS_CODE_PATH).'install/install.lib.php';
$connection = Database::getManager()->getConnection();
fixPostGroupIds($connection);
Loading…
Cancel
Save