Selaa lähdekoodia

Fix upgrade from 1.9.x

Julio Montoya 9 vuotta sitten
vanhempi
commit
d2a5c9f695

+ 6 - 4
main/install/index.php

@@ -118,6 +118,12 @@ if (!empty($_POST['old_version'])) {
 
 
 require_once __DIR__.'/version.php';
 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.
 // A protection measure for already installed systems.
 
 
 if (isAlreadyInstalledSystem()) {
 if (isAlreadyInstalledSystem()) {
@@ -663,10 +669,6 @@ if (@$_POST['step2']) {
                 // src/Chamilo/CoreBundle/Migrations/Schema/V110
                 // src/Chamilo/CoreBundle/Migrations/Schema/V110
                 migrate(
                 migrate(
                     110,
                     110,
-                    $dbNameForm,
-                    $dbUsernameForm,
-                    $dbPassForm,
-                    $dbHostForm,
                     $manager
                     $manager
                 );
                 );
 
 

+ 8 - 20
main/install/install.lib.php

@@ -1885,27 +1885,15 @@ function installSettings(
  * @param string $dbUsernameForm
  * @param string $dbUsernameForm
  * @param string $dbPassForm
  * @param string $dbPassForm
  * @param string $dbHostForm
  * @param string $dbHostForm
- * @param $manager
+ * @param EntityManager $manager
  * @throws \Doctrine\DBAL\DBALException
  * @throws \Doctrine\DBAL\DBALException
  */
  */
-function migrate($chamiloVersion, $dbNameForm, $dbUsernameForm, $dbPassForm, $dbHostForm, $manager)
+function migrate($chamiloVersion, EntityManager $manager)
 {
 {
     $debug = true;
     $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,
     // Table name that will store migrations log (will be created automatically,
     // default name is: doctrine_migration_versions)
     // default name is: doctrine_migration_versions)
@@ -1918,11 +1906,11 @@ function migrate($chamiloVersion, $dbNameForm, $dbUsernameForm, $dbPassForm, $db
     $config->registerMigrationsFromDirectory($config->getMigrationsDirectory());
     $config->registerMigrationsFromDirectory($config->getMigrationsDirectory());
 
 
     $migration = new \Doctrine\DBAL\Migrations\Migration($config);
     $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;
     $to = null;

+ 1 - 0
src/Chamilo/CoreBundle/Migrations/AbstractMigrationChamilo.php

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

+ 1 - 115
src/Chamilo/CoreBundle/Migrations/Schema/V110/Version20150505132304.php

@@ -3,15 +3,11 @@
 
 
 namespace Chamilo\CoreBundle\Migrations\Schema\V110;
 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 Chamilo\CoreBundle\Migrations\AbstractMigrationChamilo;
-use Database;
 use Doctrine\DBAL\Schema\Schema;
 use Doctrine\DBAL\Schema\Schema;
 
 
 /**
 /**
- * Moves course, session, user extra field into one table.
+ * Extra fields changes
  */
  */
 class Version20150505132304 extends AbstractMigrationChamilo
 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
      * @param Schema $schema
      */
      */

+ 139 - 0
src/Chamilo/CoreBundle/Migrations/Schema/V110/Version20150505132305.php

@@ -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');
+    }
+}