Fix migrations + adding sync_db_with_schema.php UI file (to sync current db with schema)

added in configuration.php "sync_db_with_schema"
pull/2487/head
jmontoyaa 9 years ago
parent 301fab72ff
commit def3633aa9
  1. 6
      app/Migrations/Schema/V110/Version110.php
  2. 11
      app/Migrations/Schema/V111/Version20161028123400.php
  3. 64
      main/admin/sync_db_with_schema.php
  4. 4
      main/install/configuration.dist.php
  5. 9
      src/Chamilo/CoreBundle/Entity/AccessUrlRelUser.php
  6. 3
      src/Chamilo/CoreBundle/Entity/PersonalAgenda.php

@ -154,15 +154,13 @@ class Version110 extends AbstractMigrationChamilo
$this->addSql("ALTER TABLE course_rel_user ADD COLUMN c_id int default NULL");
$this->addSql("ALTER TABLE course_field_values ADD COLUMN c_id int default NULL");
$this->addSql("ALTER TABLE session_rel_course_rel_user ADD COLUMN c_id int default NULL");
$this->addSql("ALTER TABLE session_rel_course_rel_user ADD COLUMN c_id int NOT NULL");
$this->addSql("ALTER TABLE session_rel_course_rel_user CHANGE id_session session_id int");
$this->addSql("ALTER TABLE session_rel_course_rel_user CHANGE id_user user_id int");
$this->addSql("ALTER TABLE access_url_rel_course ADD COLUMN c_id int");
$this->addSql("ALTER TABLE session_rel_course ADD COLUMN position int NOT NULL default 0");
$this->addSql("ALTER TABLE session_rel_course ADD COLUMN category varchar(255) default ''");
$this->addSql("ALTER TABLE session_rel_course ADD COLUMN c_id int unsigned");
$this->addSql("ALTER TABLE session_rel_course ADD COLUMN c_id int unsigned NOT NULL");
$this->addSql("ALTER TABLE session_rel_course CHANGE id_session session_id int");
$this->addSql('DELETE FROM session_rel_course WHERE session_id NOT IN (SELECT id FROM session)');

@ -25,6 +25,17 @@ class Version20161028123400 extends AbstractMigrationChamilo
if (!$iidColumn->getAutoincrement()) {
$iidColumn->setAutoincrement(true);
}
// Deleting users that don't exist anymore
$sql = 'DELETE FROM access_url_rel_user WHERE user_id NOT IN (SELECT user_id from user)';
$this->addSql($sql);
$table = $schema->getTable('personal_agenda');
if ($table->hasIndex('id')) {
$this->addSql('ALTER TABLE personal_agenda modify id int not null');
$this->addSql('ALTER TABLE personal_agenda DROP index id');
$this->addSql('ALTER TABLE personal_agenda CHANGE id id INT AUTO_INCREMENT NOT NULL PRIMARY KEY;');
}
}
/**

@ -0,0 +1,64 @@
<?php
/* For licensing terms, see /license.txt */
$cidReset = true;
require_once '../inc/global.inc.php';
// Access restrictions
api_protect_admin_script(true);
if (api_get_configuration_value('sync_db_with_schema') != true) {
api_not_allowed(true);
}
$em = Database::getManager();
$connection = Database::getManager()->getConnection();
$sm = $connection->getSchemaManager();
$fromSchema = $sm->createSchema();
$tool = new \Doctrine\ORM\Tools\SchemaTool(Database::getManager());
$metadatas = $em->getMetadataFactory()->getAllMetadata();
$toSchema = $tool->getSchemaFromMetadata($metadatas);
$comparator = new \Doctrine\DBAL\Schema\Comparator();
$schemaDiff = $comparator->compare($fromSchema, $toSchema);
$sqlList = $schemaDiff->toSaveSql($connection->getDatabasePlatform());
$content = '';
if (!empty($sqlList)) {
$form = new FormValidator('update');
$form->addHtml(
Display::return_message('If you click in update database. The SQL queries below will be executed in the database. Consider creating a DB dump before doing this.')
);
$form->addButtonSave(get_lang('Update database'));
$content = $form->returnForm();
if ($form->validate()) {
error_log('---- Sync DB with schema ---');
foreach ($sqlList as $sql) {
Database::query($sql);
error_log($sql);
}
error_log('---- End sync ---');
Display::addFlash(
Display::return_message(
get_lang(count($sqlList).' queries were executed. Check your error.log'),
'success'
)
);
header('Location: '.api_get_self());
exit;
}
$content .= '<pre>';
foreach ($sqlList as $sql) {
$content .= ($sql).'; <br />';
}
$content .= '</pre>';
} else {
Display::addFlash(Display::return_message(get_lang('Nothing else to update')));
}
Display::display_header(get_lang('SyncDatabaseWithSchema'));
echo $content ;
Display::display_footer();

@ -254,4 +254,6 @@ $_configuration['system_stable'] = NEW_VERSION_STABLE;
// Send only quiz answer notifications to course coaches and not general coach
//$_configuration['block_quiz_mail_notification_general_coach'] = false;
// Security: block direct access from logged in users to contents in OPEN (but not public) courses. Set to true to block
//$_configuration['block_registered_users_access_to_open_course_contents'] = false;
//$_configuration['block_registered_users_access_to_open_course_contents'] = false;
// Allows syncing the database with the current entity schema
//$_configuration['sync_db_with_schema'] = false;

@ -8,7 +8,14 @@ use Doctrine\ORM\Mapping as ORM;
/**
* AccessUrlRelUser
*
* @ORM\Table(name="access_url_rel_user", indexes={@ORM\Index(name="idx_access_url_rel_user_user", columns={"user_id"}), @ORM\Index(name="idx_access_url_rel_user_access_url", columns={"access_url_id"}), @ORM\Index(name="idx_access_url_rel_user_access_url_user", columns={"user_id", "access_url_id"})})
* @ORM\Table(
* name="access_url_rel_user",
* indexes={
* @ORM\Index(name="idx_access_url_rel_user_user", columns={"user_id"}),
* @ORM\Index(name="idx_access_url_rel_user_access_url", columns={"access_url_id"}),
* @ORM\Index(name="idx_access_url_rel_user_access_url_user", columns={"user_id", "access_url_id"})
* }
* )
* @ORM\Entity
*/
class AccessUrlRelUser

@ -8,7 +8,8 @@ use Doctrine\ORM\Mapping as ORM;
/**
* PersonalAgenda
*
* @ORM\Table(name="personal_agenda", indexes={@ORM\Index(name="idx_personal_agenda_user", columns={"user"}), @ORM\Index(name="idx_personal_agenda_parent", columns={"parent_event_id"})})
* @ORM\Table(name="personal_agenda", indexes={@ORM\Index(name="idx_personal_agenda_user", columns={"user"}),
* @ORM\Index(name="idx_personal_agenda_parent", columns={"parent_event_id"})})
* @ORM\Entity
*/
class PersonalAgenda

Loading…
Cancel
Save