Fix upgrade from 1.9.x

1.10.x
Julio Montoya 10 years ago
parent 19a2a70227
commit d2a5c9f695
  1. 10
      main/install/index.php
  2. 28
      main/install/install.lib.php
  3. 1
      src/Chamilo/CoreBundle/Migrations/AbstractMigrationChamilo.php
  4. 116
      src/Chamilo/CoreBundle/Migrations/Schema/V110/Version20150505132304.php
  5. 139
      src/Chamilo/CoreBundle/Migrations/Schema/V110/Version20150505132305.php

@ -118,6 +118,12 @@ if (!empty($_POST['old_version'])) {
require_once __DIR__.'/version.php';
// Try to delete old symfony folder (generates conflicts with composer)
$oldSymfonyFolder = '../inc/lib/symfony';
if (is_dir($oldSymfonyFolder)) {
@rmdir($oldSymfonyFolder);
}
// A protection measure for already installed systems.
if (isAlreadyInstalledSystem()) {
@ -663,10 +669,6 @@ if (@$_POST['step2']) {
// src/Chamilo/CoreBundle/Migrations/Schema/V110
migrate(
110,
$dbNameForm,
$dbUsernameForm,
$dbPassForm,
$dbHostForm,
$manager
);

@ -1885,27 +1885,15 @@ function installSettings(
* @param string $dbUsernameForm
* @param string $dbPassForm
* @param string $dbHostForm
* @param $manager
* @param EntityManager $manager
* @throws \Doctrine\DBAL\DBALException
*/
function migrate($chamiloVersion, $dbNameForm, $dbUsernameForm, $dbPassForm, $dbHostForm, $manager)
function migrate($chamiloVersion, EntityManager $manager)
{
$debug = true;
$connection = $manager->getConnection();
// Config doctrine migrations
$db = \Doctrine\DBAL\DriverManager::getConnection(array(
'dbname' => $dbNameForm,
'user' => $dbUsernameForm,
'password' => $dbPassForm,
'host' => $dbHostForm,
'driver' => 'pdo_mysql',
'charset' => 'utf8',
'driverOptions' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
)
));
$config = new \Doctrine\DBAL\Migrations\Configuration\Configuration($db);
$config = new \Doctrine\DBAL\Migrations\Configuration\Configuration($connection);
// Table name that will store migrations log (will be created automatically,
// default name is: doctrine_migration_versions)
@ -1918,11 +1906,11 @@ function migrate($chamiloVersion, $dbNameForm, $dbUsernameForm, $dbPassForm, $db
$config->registerMigrationsFromDirectory($config->getMigrationsDirectory());
$migration = new \Doctrine\DBAL\Migrations\Migration($config);
$migrations = $config->getMigrations();
$versions = $config->getMigrations();
/** @var Doctrine\DBAL\Migrations\Version $migration */
foreach ($migrations as $migrationItem) {
$migrationItem->getMigration()->setEntityManager($manager);
/** @var Doctrine\DBAL\Migrations\Version $migrationItem */
foreach ($versions as $version) {
$version->getMigration()->setEntityManager($manager);
}
$to = null;

@ -10,6 +10,7 @@ use Doctrine\ORM\EntityManager;
/**
* Class AbstractMigrationChamilo
*
* @package Chamilo\CoreBundle\Migrations
*/
abstract class AbstractMigrationChamilo extends AbstractMigration

@ -3,15 +3,11 @@
namespace Chamilo\CoreBundle\Migrations\Schema\V110;
use Chamilo\CoreBundle\Entity\ExtraField;
use Chamilo\CoreBundle\Entity\ExtraFieldOptions;
use Chamilo\CoreBundle\Entity\ExtraFieldValues;
use Chamilo\CoreBundle\Migrations\AbstractMigrationChamilo;
use Database;
use Doctrine\DBAL\Schema\Schema;
/**
* Moves course, session, user extra field into one table.
* Extra fields changes
*/
class Version20150505132304 extends AbstractMigrationChamilo
{
@ -39,116 +35,6 @@ class Version20150505132304 extends AbstractMigrationChamilo
*/
}
/**
* @param Schema $schema
*/
public function postUp(Schema $schema)
{
// Extra fields
$extraFieldTables = [
ExtraField::USER_FIELD_TYPE => Database::get_main_table(TABLE_MAIN_USER_FIELD),
ExtraField::COURSE_FIELD_TYPE => Database::get_main_table(TABLE_MAIN_COURSE_FIELD),
//ExtraField::LP_FIELD_TYPE => Database::get_main_table(TABLE_MAIN_LP_FIELD),
ExtraField::SESSION_FIELD_TYPE => Database::get_main_table(TABLE_MAIN_SESSION_FIELD),
//ExtraField::CALENDAR_FIELD_TYPE => Database::get_main_table(TABLE_MAIN_CALENDAR_EVENT_FIELD),
//ExtraField::QUESTION_FIELD_TYPE => Database::get_main_table(TABLE_MAIN_CALENDAR_EVENT_FIELD),
//ExtraField::USER_FIELD_TYPE => //Database::get_main_table(TABLE_MAIN_SPECIFIC_FIELD),
];
$em = $this->getEntityManager();
$connection = $this->getEntityManager()->getConnection();
foreach ($extraFieldTables as $type => $table) {
//continue;
$sql = "SELECT * FROM $table ";
$result = $connection->query($sql);
$fields = $result->fetchAll();
foreach ($fields as $field) {
$originalId = $field['id'];
$extraField = new ExtraField();
$extraField
->setExtraFieldType($type)
->setVariable($field['field_variable'])
->setFieldType($field['field_type'])
->setDisplayText($field['field_display_text'])
->setDefaultValue($field['field_default_value'])
->setFieldOrder($field['field_order'])
->setVisible($field['field_visible'])
->setChangeable($field['field_changeable'])
->setFilter($field['field_filter']);
$em->persist($extraField);
$em->flush();
$values = array();
switch ($type) {
case ExtraField::USER_FIELD_TYPE:
$optionTable = Database::get_main_table(
TABLE_MAIN_USER_FIELD_OPTIONS
);
$valueTable = Database::get_main_table(
TABLE_MAIN_USER_FIELD_VALUES
);
$handlerId = 'user_id';
break;
case ExtraField::COURSE_FIELD_TYPE:
$optionTable = Database::get_main_table(
TABLE_MAIN_COURSE_FIELD_OPTIONS
);
$valueTable = Database::get_main_table(
TABLE_MAIN_COURSE_FIELD_VALUES
);
$handlerId = 'c_id';
break;
case ExtraField::SESSION_FIELD_TYPE:
$optionTable = Database::get_main_table(
TABLE_MAIN_SESSION_FIELD_OPTIONS
);
$valueTable = Database::get_main_table(
TABLE_MAIN_SESSION_FIELD_VALUES
);
$handlerId = 'session_id';
break;
}
if (!empty($optionTable)) {
$sql = "SELECT * FROM $optionTable WHERE field_id = $originalId ";
$result = $connection->query($sql);
$options = $result->fetchAll();
foreach ($options as $option) {
$extraFieldOption = new ExtraFieldOptions();
$extraFieldOption
->setDisplayText($option['option_display_text'])
->setField($extraField)
->setOptionOrder($option['option_order'])
->setValue($option['option_value']);
$em->persist($extraFieldOption);
$em->flush();
}
$sql = "SELECT * FROM $valueTable WHERE field_id = $originalId ";
$result = $connection->query($sql);
$values = $result->fetchAll();
}
if (!empty($values)) {
foreach ($values as $value) {
$extraFieldValue = new ExtraFieldValues();
$extraFieldValue
->setValue($value['field_value'])
->setField($extraField)
->setItemId($value[$handlerId]);
$em->persist($extraFieldValue);
$em->flush();
}
}
}
}
}
/**
* @param Schema $schema
*/

@ -0,0 +1,139 @@
<?php
/* For licensing terms, see /license.txt */
namespace Chamilo\CoreBundle\Migrations\Schema\V110;
use Chamilo\CoreBundle\Entity\ExtraField;
use Chamilo\CoreBundle\Entity\ExtraFieldOptions;
use Chamilo\CoreBundle\Entity\ExtraFieldValues;
use Chamilo\CoreBundle\Migrations\AbstractMigrationChamilo;
use Database;
use Doctrine\DBAL\Schema\Schema;
/**
* Moves course, session, user extra field into one table.
*/
class Version20150505132305 extends AbstractMigrationChamilo
{
/**
* @param Schema $schema
*/
public function up(Schema $schema)
{
// Extra fields
$extraFieldTables = [
ExtraField::USER_FIELD_TYPE => Database::get_main_table(TABLE_MAIN_USER_FIELD),
ExtraField::COURSE_FIELD_TYPE => Database::get_main_table(TABLE_MAIN_COURSE_FIELD),
//ExtraField::LP_FIELD_TYPE => Database::get_main_table(TABLE_MAIN_LP_FIELD),
ExtraField::SESSION_FIELD_TYPE => Database::get_main_table(TABLE_MAIN_SESSION_FIELD),
//ExtraField::CALENDAR_FIELD_TYPE => Database::get_main_table(TABLE_MAIN_CALENDAR_EVENT_FIELD),
//ExtraField::QUESTION_FIELD_TYPE => Database::get_main_table(TABLE_MAIN_CALENDAR_EVENT_FIELD),
//ExtraField::USER_FIELD_TYPE => //Database::get_main_table(TABLE_MAIN_SPECIFIC_FIELD),
];
$em = $this->getEntityManager();
$connection = $em->getConnection();
foreach ($extraFieldTables as $type => $table) {
//continue;
$sql = "SELECT * FROM $table ";
$result = $connection->query($sql);
$fields = $result->fetchAll();
foreach ($fields as $field) {
$originalId = $field['id'];
$extraField = new ExtraField();
$extraField
->setExtraFieldType($type)
->setVariable($field['field_variable'])
->setFieldType($field['field_type'])
->setDisplayText($field['field_display_text'])
->setDefaultValue($field['field_default_value'])
->setFieldOrder($field['field_order'])
->setVisible($field['field_visible'])
->setChangeable($field['field_changeable'])
->setFilter($field['field_filter']);
$em->persist($extraField);
$em->flush();
$values = array();
switch ($type) {
case ExtraField::USER_FIELD_TYPE:
$optionTable = Database::get_main_table(
TABLE_MAIN_USER_FIELD_OPTIONS
);
$valueTable = Database::get_main_table(
TABLE_MAIN_USER_FIELD_VALUES
);
$handlerId = 'user_id';
break;
case ExtraField::COURSE_FIELD_TYPE:
$optionTable = Database::get_main_table(
TABLE_MAIN_COURSE_FIELD_OPTIONS
);
$valueTable = Database::get_main_table(
TABLE_MAIN_COURSE_FIELD_VALUES
);
$handlerId = 'c_id';
break;
case ExtraField::SESSION_FIELD_TYPE:
$optionTable = Database::get_main_table(
TABLE_MAIN_SESSION_FIELD_OPTIONS
);
$valueTable = Database::get_main_table(
TABLE_MAIN_SESSION_FIELD_VALUES
);
$handlerId = 'session_id';
break;
}
if (!empty($optionTable)) {
$sql = "SELECT * FROM $optionTable WHERE field_id = $originalId ";
$result = $connection->query($sql);
$options = $result->fetchAll();
foreach ($options as $option) {
$extraFieldOption = new ExtraFieldOptions();
$extraFieldOption
->setDisplayText($option['option_display_text'])
->setField($extraField)
->setOptionOrder($option['option_order'])
->setValue($option['option_value']);
$em->persist($extraFieldOption);
$em->flush();
}
$sql = "SELECT * FROM $valueTable WHERE field_id = $originalId ";
$result = $connection->query($sql);
$values = $result->fetchAll();
}
if (!empty($values)) {
foreach ($values as $value) {
$extraFieldValue = new ExtraFieldValues();
$extraFieldValue
->setValue($value['field_value'])
->setField($extraField)
->setItemId($value[$handlerId]);
$em->persist($extraFieldValue);
$em->flush();
}
}
}
}
}
/**
* @param Schema $schema
*/
public function down(Schema $schema)
{
$this->addSql('ALTER TABLE extra_field_options DROP FOREIGN KEY FK_A572E3AE443707B0');
$this->addSql('DROP TABLE extra_field_option_rel_field_option');
$this->addSql('DROP TABLE extra_field_options');
$this->addSql('DROP TABLE extra_field');
$this->addSql('DROP TABLE extra_field_values');
}
}
Loading…
Cancel
Save