function up() { $db = DbManager::get(); $db->exec("ALTER TABLE `datafields` CHANGE `type` `type` ENUM('bool','textline','textarea','selectbox','date','time','email','phone','radio','combo','link','selectboxmultiple') NOT NULL DEFAULT 'textline'"); $db->exec("ALTER TABLE `datafields` ADD `is_userfilter` TINYINT UNSIGNED NOT NULL DEFAULT '0' AFTER `is_required`"); SimpleORMap::expireTableScheme(); }
function tearDown() { SimpleORMap::expireTableScheme(); Config::set(null); StudipCacheFactory::setConfig(null); $GLOBALS['CACHING_ENABLE'] = false; }
function up() { $db = DBManager::get(); $db->exec("ALTER TABLE `resources_requests` ADD `metadate_id` VARCHAR( 32 ) NOT NULL DEFAULT '' AFTER `termin_id`"); $db->exec("ALTER TABLE `resources_requests` DROP INDEX `closed` , ADD INDEX `closed` ( `closed` , `request_id`, `resource_id` )"); $db->exec("ALTER TABLE `resources_requests` ADD INDEX ( `metadate_id` )"); SimpleORMap::expireTableScheme(); }
public function up() { DBManager::get()->exec("\n ALTER TABLE `pluginmarket_plugins`\n ADD `rating` DOUBLE NULL AFTER `language` ;\n "); SimpleORMap::expireTableScheme(); foreach (MarketPlugin::findBySQL("1=1") as $plugin) { $plugin['rating'] = $plugin->calculateRating(); $plugin->store(); } }
public function down() { $query = "ALTER TABLE `seminare`\n DROP COLUMN `is_complete`"; DBManager::get()->exec($query); SimpleORMap::expireTableScheme(); $query = "DELETE FROM `config` WHERE `field` = :field"; $statement = DBManager::get()->prepare($query); $statement->bindValue(':field', 'ADMIN_COURSES_SHOW_COMPLETE'); $statement->execute(); }
function down() { $db = DBManager::get(); $db->exec("ALTER TABLE `lock_rules` CHANGE `permission` `permission` ENUM( 'tutor', 'dozent', 'admin', 'root' ) NOT NULL DEFAULT 'dozent'"); $db->exec("ALTER TABLE `lock_rules` DROP `object_type`"); $db->exec("ALTER TABLE `lock_rules` DROP `user_id`"); $db->exec("ALTER TABLE `user_info` DROP `lock_rule`"); $db->exec("ALTER TABLE `Institute` DROP `lock_rule`"); SimpleORMap::expireTableScheme(); }
public function down() { $db = DBManager::get(); $db->exec("ALTER TABLE scm CHANGE tab_name tab_name varchar(20) NOT NULL DEFAULT 'Info',\n CHANGE content content text"); $db->exec("ALTER TABLE user_info CHANGE lebenslauf lebenslauf text,\n CHANGE publi publi text NOT NULL"); $db->exec("ALTER TABLE wiki CHANGE keyword keyword varchar(128) BINARY NOT NULL DEFAULT '',\n CHANGE body body text"); $db->exec("ALTER TABLE wiki_links CHANGE from_keyword from_keyword char(128) BINARY NOT NULL DEFAULT '',\n CHANGE to_keyword to_keyword char(128) BINARY NOT NULL DEFAULT ''"); $db->exec("ALTER TABLE wiki_locks CHANGE keyword keyword varchar(128) BINARY NOT NULL DEFAULT ''"); SimpleORMap::expireTableScheme(); }
function up() { $db = DBManager::get(); $db->exec("ALTER TABLE `auth_user_md5` CHANGE `password` `password` VARBINARY( 64 ) NOT NULL DEFAULT ''"); $hasher = UserManagement::getPwdHasher(); $pwd_up = $db->prepare("UPDATE auth_user_md5 SET password=? WHERE user_id=?"); foreach($db->query("SELECT user_id,password FROM auth_user_md5 WHERE auth_plugin='standard' AND password <> ''") as $row) { $new_pwd = $hasher->HashPassword($row['password']); $pwd_up->execute(array($new_pwd, $row['user_id'])); } SimpleORMap::expireTableScheme(); }
function up() { $this->tryExecute("ALTER TABLE personal_notifications ADD INDEX (html_id)"); $this->tryExecute("ALTER TABLE personal_notifications ADD INDEX (url(256))"); $this->tryExecute("ALTER TABLE admission_seminar_user CHANGE status status ENUM('awaiting','accepted') NOT NULL"); $this->tryExecute("ALTER TABLE ex_termine DROP INDEX autor_id"); $this->tryExecute("ALTER TABLE ex_termine ADD INDEX (date)"); $this->tryExecute("ALTER TABLE termine ADD INDEX (date)"); $this->tryExecute("ALTER TABLE termin_related_groups DROP INDEX `unique`"); $this->tryExecute("ALTER TABLE termin_related_groups DROP INDEX termin_id"); $this->tryExecute("ALTER TABLE termin_related_groups DROP INDEX statusgruppe_id"); $this->tryExecute("ALTER TABLE termin_related_groups CHANGE statusgruppe_id statusgruppe_id VARCHAR(32) NOT NULL"); $this->tryExecute("ALTER TABLE termin_related_groups ADD PRIMARY KEY( termin_id, statusgruppe_id)"); SimpleORMap::expireTableScheme(); }
function up() { DBManager::get()->exec("\n\t CREATE TABLE IF NOT EXISTS `fleximport_processes` (\n `process_id` varchar(32) NOT NULL DEFAULT '',\n `name` varchar(100) NOT NULL DEFAULT '',\n `description` TEXT NULL,\n `triggered_by_cronjob` tinyint(11) DEFAULT NULL,\n `chdate` int(11) NOT NULL,\n `mkdate` int(11) NOT NULL,\n PRIMARY KEY (`process_id`)\n );\n\t "); DBManager::get()->exec("\n ALTER TABLE `fleximport_tables` ADD `process_id` VARCHAR(32) NULL AFTER `table_id`;\n "); $statement = DBManager::get()->prepare("\n SELECT COUNT(*) as number\n FROM fleximport_tables\n "); $statement->execute(); if ($statement->fetch(PDO::FETCH_COLUMN, 0) > 0) { $process = new FleximportProcess(); $process['name'] = "Import"; $process['triggered_by_cronjob'] = 1; $process->store(); $statement = DBManager::get()->prepare("\n UPDATE `fleximport_tables`\n SET process_id = :process_id\n "); $statement->execute(array('process_id' => $process->getId())); } DBManager::get()->exec("\n ALTER TABLE `fleximport_tables` CHANGE `source` \n `source` enum('csv_upload','csv_weblink','csv_studipfile','database','extern','sqlview') NOT NULL DEFAULT 'csv_upload';\n "); SimpleORMap::expireTableScheme(); }
function up() { $db = DbManager::get(); $db->exec("ALTER TABLE `message` DROP `chat_id`, DROP `readed`"); $db->exec("ALTER TABLE `message_user` DROP `confirmed_read`"); try { $db->exec("ALTER TABLE `message_user` DROP COLUMN `dont_delete`"); } catch (Exception $e) { } $db->exec("ALTER TABLE `user_info` DROP `guestbook`"); $db->exec("DROP TABLE object_rate"); $db->exec("DROP TABLE object_user"); $db->exec("DROP TABLE px_topics"); $db->exec("DROP TABLE rss_feeds"); $db->exec("DELETE FROM user_visibility_settings WHERE plugin IS NOT NULL"); $db->exec("DELETE FROM user_visibility_settings WHERE identifier = 'plugins'"); SimpleORMap::expireTableScheme(); }
public function up() { $db = DBManager::get(); // Setup new table $db->exec("\n CREATE TABLE IF NOT EXISTS `pluginmarket_plugin_usages` (\n `usage_id` varchar(32) NOT NULL,\n `plugin_id` varchar(32) NOT NULL,\n `user_id` varchar(32) NOT NULL,\n `name` varchar(128) NOT NULL,\n `approved` tinyint(4) NOT NULL DEFAULT 0,\n `chdate` int(11) NOT NULL,\n `mkdate` int(11) NOT NULL,\n PRIMARY KEY (`usage_id`),\n KEY (`plugin_id`),\n KEY (`user_id`),\n KEY (`name`)\n) ENGINE=MyISAM\n "); SimpleORMap::expireTableScheme(); $stmt = $db->query("SELECT * FROM pluginmarket_plugins"); while ($plugin = $stmt->fetch(PDO::FETCH_ASSOC)) { $hits = preg_split("/(?:\n|,|\t)/", $plugin['in_use']); $hits = array_map('trim', $hits); $hits = array_filter($hits); foreach ($hits as $hit) { MarketPluginUsage::create(array('plugin_id' => $plugin['plugin_id'], 'user_id' => $plugin['user_id'], 'name' => $hit)); } } // Modify old table $db->exec("ALTER TABLE pluginmarket_plugins DROP COLUMN in_use"); }
function up() { $query = "ALTER TABLE `scm`\n ADD COLUMN `position` INT(11) UNSIGNED NOT NULL DEFAULT 0"; DBManager::get()->exec($query); $query = "UPDATE scm\n SET position = :position\n WHERE range_id = :range_id AND scm_id = :scm_id"; $update_statement = DBManager::get()->prepare($query); $query = "SELECT range_id, scm_id FROM scm ORDER BY range_id ASC, mkdate ASC"; $statement = DBManager::get()->query($query); $last_range = null; foreach ($statement as $row) { if ($row['range_id'] != $last_range) { $position = 0; $last_range = $row['range_id']; } else { $position += 1; } $update_statement->bindValue(':position', $position, PDO::PARAM_INT); $update_statement->bindValue(':range_id', $row['range_id']); $update_statement->bindValue(':scm_id', $row['scm_id']); $update_statement->execute(); } // Expire orm cache, so the change can take effect SimpleORMap::expireTableScheme(); }
public function down() { $query = "ALTER TABLE `datafields` DROP COLUMN `system`"; DBManager::get()->exec($query); SimpleORMap::expireTableScheme(); }
public function down() { DBManager::get()->exec("DROP TABLE scm_tabs"); SimpleORMap::expireTableScheme(); }
public function up() { $db = DBManager::get(); $db->exec("ALTER TABLE `scm_tabs` DROP PRIMARY KEY, ADD PRIMARY KEY(scm_id, range_id);"); SimpleORMap::expireTableScheme(); }
function up() { $db = DBManager::get(); // assign conditions to admission rules $db->exec("CREATE TABLE IF NOT EXISTS `admission_condition` (\n `rule_id` VARCHAR(32) NOT NULL ,\n `filter_id` VARCHAR(32) NOT NULL ,\n `mkdate` INT NOT NULL DEFAULT 0,\n PRIMARY KEY (`rule_id`, `filter_id`) )\n ENGINE = MyISAM"); // "chance adjustment" in seat distribution $db->exec("CREATE TABLE IF NOT EXISTS `admissionfactor` (\n `list_id` VARCHAR(32) NOT NULL ,\n `name` VARCHAR(255) NOT NULL ,\n `factor` DECIMAL(5,2) NOT NULL DEFAULT 1,\n `owner_id` VARCHAR(32) NOT NULL ,\n `mkdate` INT NOT NULL DEFAULT 0,\n `chdate` INT NOT NULL DEFAULT 0,\n PRIMARY KEY (`list_id`) )\n ENGINE = MyISAM"); // available admission rules. $db->exec("CREATE TABLE IF NOT EXISTS `admissionrules` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `ruletype` VARCHAR(255) UNIQUE NOT NULL,\n `active` TINYINT(1) NOT NULL DEFAULT 0,\n `mkdate` INT(11) NOT NULL DEFAULT 0,\n PRIMARY KEY (`id`)\n ) ENGINE = MyISAM"); // Create entries for default admission rule types. $db->exec("INSERT IGNORE INTO `admissionrules`\n (`ruletype`, `active`, `mkdate`) VALUES\n ('ConditionalAdmission', 1, UNIX_TIMESTAMP()),\n ('LimitedAdmission', 1, UNIX_TIMESTAMP()),\n ('LockedAdmission', 1, UNIX_TIMESTAMP()),\n ('PasswordAdmission', 1, UNIX_TIMESTAMP()),\n ('TimedAdmission', 1, UNIX_TIMESTAMP()),\n ('ParticipantRestrictedAdmission', 1, UNIX_TIMESTAMP());"); // Admission rules can be available globally or only at selected institutes. $db->exec("CREATE TABLE IF NOT EXISTS `admissionrule_inst` (\n `rule_id` VARCHAR(32) NOT NULL,\n `institute_id` VARCHAR(32) NOT NULL,\n `mkdate` INT(11) NOT NULL DEFAULT 0,\n PRIMARY KEY (`rule_id`, `institute_id`)\n ) ENGINE = MyISAM"); // admission rules specifying conditions for access $db->exec("CREATE TABLE IF NOT EXISTS `conditionaladmissions` (\n `rule_id` VARCHAR(32) NOT NULL ,\n `message` TEXT NULL ,\n `start_time` INT NOT NULL DEFAULT 0,\n `end_time` INT NOT NULL DEFAULT 0,\n `mkdate` INT NOT NULL DEFAULT 0,\n `conditions_stopped` TINYINT(1) NOT NULL DEFAULT 0 ,\n `chdate` INT NOT NULL DEFAULT 0,\n PRIMARY KEY (`rule_id`) )\n ENGINE = MyISAM"); // assign course sets to factor lists $db->exec("CREATE TABLE IF NOT EXISTS `courseset_factorlist` (\n `set_id` VARCHAR(32) NOT NULL ,\n `factorlist_id` VARCHAR(32) NOT NULL ,\n `mkdate` INT NOT NULL DEFAULT 0 ,\n PRIMARY KEY (`set_id`, `factorlist_id`) )\n ENGINE = MyISAM"); // assign course sets to institutes $db->exec("CREATE TABLE IF NOT EXISTS `courseset_institute` (\n `set_id` VARCHAR(32) NOT NULL ,\n `institute_id` VARCHAR(32) NOT NULL ,\n `mkdate` INT NULL ,\n `chdate` INT NULL ,\n PRIMARY KEY (`set_id`, `institute_id`),\n INDEX `institute_id` (`institute_id`,`set_id`))\n ENGINE = MyISAM"); // assign admission rules to course sets $db->exec("CREATE TABLE IF NOT EXISTS `courseset_rule` (\n `set_id` VARCHAR(32) NOT NULL ,\n `rule_id` VARCHAR(32) NOT NULL ,\n `type` VARCHAR(255) NULL ,\n `mkdate` INT NULL ,\n PRIMARY KEY (`set_id`, `rule_id`),\n INDEX `type` (`type`,`set_id`))\n ENGINE = MyISAM"); // sets of courses with common admission rules $db->exec("CREATE TABLE IF NOT EXISTS `coursesets` (\n `set_id` VARCHAR(32) NOT NULL ,\n `user_id` VARCHAR(32) NOT NULL ,\n `name` VARCHAR(255) NOT NULL ,\n `infotext` TEXT NOT NULL ,\n `algorithm` VARCHAR(255) NOT NULL ,\n `algorithm_run` TINYINT(1) NOT NULL DEFAULT 0 ,\n `private` TINYINT(1) NOT NULL DEFAULT 0,\n `mkdate` INT NOT NULL DEFAULT 0,\n `chdate` INT NOT NULL DEFAULT 0,\n PRIMARY KEY (`set_id`) ,\n INDEX `set_user` (`user_id`, `set_id`) )\n ENGINE = MyISAM"); // admission rules with max number of courses to register for $db->exec("CREATE TABLE IF NOT EXISTS `limitedadmissions` (\n `rule_id` VARCHAR(32) NOT NULL ,\n `message` TEXT NOT NULL ,\n `start_time` INT NOT NULL DEFAULT 0,\n `end_time` INT NOT NULL DEFAULT 0,\n `maxnumber` INT NOT NULL DEFAULT 0,\n `mkdate` INT NOT NULL DEFAULT 0,\n `chdate` INT NOT NULL DEFAULT 0,\n PRIMARY KEY (`rule_id`) )\n ENGINE = MyISAM"); // admission rules that completely lock access to courses $db->exec("CREATE TABLE IF NOT EXISTS `lockedadmissions` (\n `rule_id` VARCHAR(32) NOT NULL ,\n `message` TEXT NOT NULL ,\n `mkdate` INT NOT NULL DEFAULT 0,\n `chdate` INT NOT NULL DEFAULT 0,\n PRIMARY KEY (`rule_id`) )\n ENGINE = MyISAM"); // admission rules that specify a password for course access $db->exec("CREATE TABLE IF NOT EXISTS `passwordadmissions` (\n `rule_id` VARCHAR(32) NOT NULL ,\n `message` TEXT NULL ,\n `start_time` INT NOT NULL DEFAULT 0,\n `end_time` INT NOT NULL DEFAULT 0,\n `password` VARCHAR(255) NULL ,\n `mkdate` INT NOT NULL DEFAULT 0,\n `chdate` INT NOT NULL DEFAULT 0,\n PRIMARY KEY (`rule_id`) )\n ENGINE = MyISAM"); // priorities for course assignment $db->exec("CREATE TABLE IF NOT EXISTS `priorities` (\n `user_id` VARCHAR(32) NOT NULL ,\n `set_id` VARCHAR(32) NOT NULL ,\n `seminar_id` VARCHAR(32) NOT NULL ,\n `priority` INT NOT NULL DEFAULT 0,\n `mkdate` INT NOT NULL DEFAULT 0,\n `chdate` INT NOT NULL DEFAULT 0,\n PRIMARY KEY (`user_id`, `set_id`, `seminar_id`) ,\n INDEX `user_rule_priority` (`user_id` ASC, `priority` ASC, `set_id` ASC) )\n ENGINE = MyISAM"); // assign courses to course sets $db->exec("CREATE TABLE IF NOT EXISTS `seminar_courseset` (\n `set_id` VARCHAR(32) NOT NULL ,\n `seminar_id` VARCHAR(32) NOT NULL ,\n `mkdate` INT NOT NULL DEFAULT 0 ,\n PRIMARY KEY (`set_id`, `seminar_id`),\n INDEX `seminar_id` (`seminar_id`, `set_id` ) )\n ENGINE = MyISAM"); // admission rules concerning time $db->exec("CREATE TABLE IF NOT EXISTS `timedadmissions` (\n `rule_id` VARCHAR(32) NOT NULL ,\n `message` TEXT NOT NULL ,\n `start_time` INT NOT NULL DEFAULT 0,\n `end_time` INT NOT NULL DEFAULT 0,\n `mkdate` INT NOT NULL DEFAULT 0,\n `chdate` INT NOT NULL DEFAULT 0,\n PRIMARY KEY (`rule_id`) ,\n INDEX `start_time` (`start_time` ASC) ,\n INDEX `end_time` (`end_time` ASC) ,\n INDEX `start_end` (`start_time` ASC, `end_time` ASC) )\n ENGINE = MyISAM"); $db->exec("CREATE TABLE IF NOT EXISTS `participantrestrictedadmissions` (\n `rule_id` varchar(32),\n `message` text NOT NULL,\n `distribution_time` int(11) NOT NULL DEFAULT 0,\n `mkdate` int(11) NOT NULL DEFAULT 0,\n `chdate` int(11) NOT NULL DEFAULT 0,\n PRIMARY KEY (`rule_id`)\n ) ENGINE=MyISAM"); // assign users to lists with different factor in seat distribution $db->exec("CREATE TABLE IF NOT EXISTS `user_factorlist` (\n `list_id` VARCHAR(32) NULL ,\n `user_id` VARCHAR(32) NULL ,\n `mkdate` INT NULL ,\n PRIMARY KEY (`list_id`, `user_id`) )\n ENGINE = MyISAM"); // filters for users $db->exec("CREATE TABLE IF NOT EXISTS `userfilter` (\n `filter_id` VARCHAR(32) NOT NULL ,\n `mkdate` INT NOT NULL DEFAULT 0,\n `chdate` INT NOT NULL DEFAULT 0,\n PRIMARY KEY (`filter_id`) )\n ENGINE = MyISAM"); // several fields form a user filter $db->exec("CREATE TABLE IF NOT EXISTS `userfilter_fields` (\n `field_id` VARCHAR(32) NOT NULL ,\n `filter_id` VARCHAR(32) NOT NULL ,\n `type` VARCHAR(255) NOT NULL ,\n `value` VARCHAR(255) NOT NULL ,\n `compare_op` VARCHAR(255) NOT NULL ,\n `mkdate` INT NOT NULL DEFAULT 0,\n `chdate` INT NOT NULL DEFAULT 0,\n PRIMARY KEY (`field_id`) )\n ENGINE = MyISAM"); // user defined max number of courses to register for $db->exec("CREATE TABLE IF NOT EXISTS `userlimits` (\n `rule_id` VARCHAR(32) NOT NULL ,\n `user_id` VARCHAR(32) NOT NULL ,\n `maxnumber` INT NULL ,\n `mkdate` INT NULL ,\n `chdate` INT NULL ,\n PRIMARY KEY (`rule_id`, `user_id`) )\n ENGINE = MyISAM"); $cs_insert = $db->prepare("INSERT INTO coursesets (set_id,user_id,name,infotext,algorithm,private,mkdate,chdate)\n VALUES (?,?,?,?,'',?,?,?)"); $cs_i_insert = $db->prepare("INSERT INTO courseset_institute (set_id,institute_id,mkdate,chdate) VALUES (?,?,UNIX_TIMESTAMP(),UNIX_TIMESTAMP())"); $cs_r_insert = $db->prepare("INSERT INTO courseset_rule (set_id,rule_id,type,mkdate) VALUES (?,?,?,UNIX_TIMESTAMP())"); $s_cs_insert = $db->prepare("INSERT INTO seminar_courseset (set_id,seminar_id,mkdate) VALUES (?,?,UNIX_TIMESTAMP())"); $password_insert = $db->prepare("INSERT INTO passwordadmissions (rule_id,message,password,mkdate,chdate) VALUES (?,'Das Passwort ist falsch',?,UNIX_TIMESTAMP(),UNIX_TIMESTAMP())"); $locked_insert = $db->prepare("INSERT INTO lockedadmissions (rule_id,message,mkdate,chdate) VALUES (?,'Die Anmeldung ist gesperrt',UNIX_TIMESTAMP(),UNIX_TIMESTAMP())"); $hasher = new PasswordHash(8, false); $user_id = $GLOBALS['user']->id; //mit pw wandeln $pw_admission = $db->fetchAll("SELECT seminar_id, name, passwort, institut_id, chdate FROM seminare WHERE admission_type = 0 AND Lesezugriff = 2"); foreach ($pw_admission as $course) { $new_pwd = $hasher->HashPassword($course['passwort']); $rule_id = md5(uniqid('passwordadmissions', 1)); $password_insert->execute(array($rule_id, $new_pwd)); $set_id = md5(uniqid('coursesets', 1)); $name = 'Anmeldung mit Passwort: ' . $course['name']; $info = 'Erzeugt durch Migration 128 ' . strftime('%X %x'); $cs_insert->execute(array($set_id, $user_id, $name, $info, 1, $course['chdate'], $course['chdate'])); $cs_r_insert->execute(array($set_id, $rule_id, 'PasswordAdmission')); $s_cs_insert->execute(array($set_id, $course['seminar_id'])); } //ein globales set für alle gesperrten $locked_set_id = md5(uniqid('coursesets', 1)); $name = 'Anmeldung gesperrt (global)'; $info = ''; $cs_insert->execute(array($locked_set_id, '', $name, $info, 1, time(), time())); $locked_rule_id = md5(uniqid('lockedadmissions', 1)); $locked_insert->execute(array($locked_rule_id)); $cs_r_insert->execute(array($locked_set_id, $locked_rule_id, 'LockedAdmission')); //locked wandeln $locked_admission = $db->fetchAll("SELECT seminar_id, name, institut_id FROM seminare WHERE admission_type = 3"); foreach ($locked_admission as $course) { $s_cs_insert->execute(array($locked_set_id, $course['seminar_id'])); } // Lade Daten des aktuellen Semesters. $semester = Semester::findCurrent(); $now = time(); $preserve_waitlists = array(); //gruppierte wandeln $grouped_admission = $db->fetchAll("SELECT seminar_id, seminare.name, start_time, duration_time, institut_id, admission_type, admission_starttime,\n admission_endtime, admission_endtime_sem, admission_group.name as a_name, admission_group, admission_group.chdate\n FROM seminare INNER JOIN admission_group ON group_id = admission_group\n WHERE admission_type IN (1, 2) ORDER BY admission_group, admission_starttime, VeranstaltungsNummer"); foreach ($grouped_admission as $course) { if ($group_id != $course['admission_group']) { $group_id = $course['admission_group']; $group_type = $course['admission_type']; $group_inst = array($course['institut_id']); $group_name = $course['a_name'] ?: ++$g; /* * Check, ob Anmeldeverfahren in der Vergangenheit schon * abgeschlossen wurde. Hier extra ausführlich, damit es * verständlich bleibt. */ // Veranstaltungen, die (auch implizit) im aktuellen oder kommenden Semestern liegen. if (($course['start_time'] + $course['duration_time'] >= $semester->beginn || $course['duration_time'] == -1) && ($course['admission_disable_waitlist'] == 0 || $course['admission_starttime'] > $now || $course['admission_endtime'] > $now || $course['admission_endtime_sem'] > $now || $course['admission_endtime_sem'] == -1)) { // Erzeuge ein Anmeldeset mit den vorhandenen Einstellungen der Veranstaltung. $cs = $this->buildCourseset($course, true); $cs->setName('Beschränkte Teilnehmeranzahl: Gruppe ' . $group_name)->setInfoText('Erzeugt durch Migration 128 ' . strftime('%X %x'))->addInstitute($course['institut_id'])->setPrivate(true)->setUserId($user_id)->store(); $set_id = $cs->getId(); // Losen oder Anmeldezeitraum vorbei => sperren. // Veranstaltungen in vergangenen Semestern werden einfach gesperrt. } else { $group_type = 3; $rule_id = md5(uniqid('lockedadmissions', 1)); $locked_insert->execute(array($rule_id)); $set_id = md5(uniqid('coursesets', 1)); $name = 'Anmeldung gesperrt: Gruppe ' . $group_name; $info = 'Erzeugt durch Migration 128 ' . strftime('%X %x'); $cs_insert->execute(array($set_id, $user_id, $name, $info, 1, $course['chdate'], $course['chdate'])); $cs_i_insert->execute(array($set_id, $course['institut_id'])); $cs_r_insert->execute(array($set_id, $rule_id, 'LockedAdmission')); } } // Veranstaltung mit Losverfahren if ($group_type == 1) { // Losliste übernehmen $db->execute("INSERT INTO priorities (user_id, set_id, seminar_id, priority, mkdate, chdate)\n SELECT user_id, ?, seminar_id, 1, mkdate, UNIX_TIMESTAMP()\n FROM admission_seminar_user WHERE status = 'claiming' AND seminar_id = ?", array($set_id, $course['seminar_id'])); // Chronologische Anmeldung } else { if ($group_type == 2) { $preserve_waitlists[] = $course['seminar_id']; } } // weitere Einrichtungen zuordnen if ($group_type != 3 && !in_array($course['institut_id'], $group_inst)) { $cs_i_insert->execute(array($set_id, $course['institut_id'])); $group_inst[] = $course['institut_id']; } $s_cs_insert->execute(array($set_id, $course['seminar_id'])); } $admission = $db->fetchAll("SELECT seminar_id, seminare.name, start_time, duration_time, institut_id, admission_type, admission_starttime, admission_endtime, admission_endtime_sem\n FROM seminare left join admission_group on(group_id=admission_group) WHERE admission_type in (1, 2) AND group_id is null"); foreach ($admission as $course) { /* * Check, ob Anmeldeverfahren in der Vergangenheit schon * abgeschlossen wurde. Hier extra ausführlich, damit es * verständlich bleibt. */ // Veranstaltungen, die (auch implizit) im aktuellen oder kommenden Semestern liegen. if (($course['start_time'] + $course['duration_time'] >= $semester->beginn || $course['duration_time'] == -1) && ($course['admission_disable_waitlist'] == 0 || $course['admission_starttime'] > $now || $course['admission_endtime'] > $now || $course['admission_endtime_sem'] > $now || $course['admission_endtime_sem'] == -1)) { // Erzeuge ein Anmeldeset mit den vorhandenen Einstellungen der Veranstaltung. $cs = $this->buildCourseset($course, false); $cs->setName('Beschränkte Teilnehmeranzahl: ' . $course['name'])->setInfoText('Erzeugt durch Migration 128 ' . strftime('%X %x'))->setPrivate(true)->setUserId($user_id)->store(); $set_id = $cs->getId(); // Veranstaltung mit Losverfahren if ($course['admission_type'] == 1) { // Losliste übernehmen $db->execute("INSERT INTO priorities (user_id, set_id, seminar_id, priority, mkdate, chdate)\n SELECT user_id, ?, seminar_id, 1, mkdate, UNIX_TIMESTAMP()\n FROM admission_seminar_user WHERE status = 'claiming' AND seminar_id = ?", array($set_id, $course['seminar_id'])); // Chronologische Anmeldung } else { $preserve_waitlists[] = $course['seminar_id']; } // Losen oder Anmeldezeitraum vorbei => sperren. // Veranstaltungen in vergangenen Semestern werden einfach gesperrt. } else { $set_id = $locked_set_id; } $s_cs_insert->execute(array($set_id, $course['seminar_id'])); } $db->exec("UPDATE seminare SET Lesezugriff=1,Schreibzugriff=1 WHERE Lesezugriff=3"); $db->exec("UPDATE seminare SET Lesezugriff=1,Schreibzugriff=1 WHERE Lesezugriff=2"); // Übernehme Veranstaltungen ohne Anmeldeverfahren, aber mit Anmeldezeitraum in der Zukunft. $now = time(); $admission = $db->fetchAll("SELECT `seminar_id`,`seminare`.`name`,`institut_id`,`admission_starttime`,`admission_endtime_sem`\n FROM `seminare` WHERE `admission_type`=0 AND (`admission_starttime`>:now OR `admission_endtime_sem`>:now)", array('now' => $now)); foreach ($admission as $course) { // Erzeuge ein Anmeldeset mit den vorhandenen Einstellungen der Veranstaltung. $cs = new CourseSet(); $rule = new TimedAdmission(); if ($course['admission_starttime'] != -1) { $rule->setStartTime($course['admission_starttime']); } if ($course['admission_endtime_sem'] != -1) { $rule->setEndTime($course['admission_endtime_sem']); } $cs->setName('Anmeldezeitraum: ' . $course['name'])->setInfoText('Erzeugt durch Migration 128 ' . strftime('%X %x'))->addCourse($course['seminar_id'])->addAdmissionRule($rule)->setPrivate(true)->setUserId($user_id)->store(); } //Warte und Anmeldelisten löschen $db->exec("DELETE FROM admission_seminar_user WHERE status = 'claiming'"); $db->execute("DELETE FROM admission_seminar_user WHERE status = 'awaiting' AND seminar_id NOT IN(?)", array($preserve_waitlists)); $db->exec("DROP TABLE admission_seminar_studiengang"); $db->exec("DROP TABLE admission_group"); $db->exec("ALTER TABLE `seminare` DROP `Passwort`"); $db->exec("ALTER TABLE `seminare` DROP `admission_endtime`"); $db->exec("ALTER TABLE `seminare` DROP `admission_type`"); $db->exec("ALTER TABLE `seminare` DROP `admission_selection_take_place`"); $db->exec("ALTER TABLE `seminare` DROP `admission_group`"); $db->exec("ALTER TABLE `seminare` DROP `admission_starttime`"); $db->exec("ALTER TABLE `seminare` DROP `admission_endtime_sem`"); $db->exec("ALTER TABLE `seminare` DROP `admission_enable_quota`"); $db->exec("ALTER TABLE `seminare` ADD `admission_waitlist_max` INT UNSIGNED NOT NULL DEFAULT '0'"); $db->exec("ALTER TABLE `seminare` ADD `admission_disable_waitlist_move` TINYINT UNSIGNED NOT NULL DEFAULT '0'"); $db->exec("ALTER TABLE `seminar_user` DROP `admission_studiengang_id`"); $db->exec("ALTER TABLE `admission_seminar_user` DROP `studiengang_id`"); try { $db->exec("ALTER TABLE `seminar_user` DROP INDEX `Seminar_id`"); $db->exec("ALTER TABLE `seminar_user` DROP INDEX `user_id`"); } catch (PDOException $e) { } $db->exec("ALTER TABLE `seminar_user` ADD INDEX (`user_id`, `Seminar_id`, `status`)"); SimpleORMap::expireTableScheme(); // Insert global configuration: who may edit course sets? $db->exec("INSERT IGNORE INTO `config`\n (`config_id`, `parent_id`, `field`, `value`, `is_default`,\n `type`, `range`, `section`, `position`, `mkdate`, `chdate`,\n `description`, `comment`, `message_template`)\n VALUES\n (MD5('ALLOW_DOZENT_COURSESET_ADMIN'), '',\n 'ALLOW_DOZENT_COURSESET_ADMIN', '0', '1', 'boolean', 'global',\n 'coursesets', '0', UNIX_TIMESTAMP(), UNIX_TIMESTAMP(),\n 'Sollen Lehrende einrichtungsweite Anmeldesets anlegen und bearbeiten dürfen?',\n '', '')"); // Insert global configuration: who may edit course sets? $db->exec("INSERT IGNORE INTO `config`\n (`config_id`, `parent_id`, `field`, `value`, `is_default`,\n `type`, `range`, `section`, `position`, `mkdate`, `chdate`,\n `description`, `comment`, `message_template`)\n VALUES\n (MD5('ENABLE_COURSESET_FCFS'), '',\n 'ENABLE_COURSESET_FCFS', '0', '1', 'boolean', 'global',\n 'coursesets', '0', UNIX_TIMESTAMP(), UNIX_TIMESTAMP(),\n 'Soll first-come-first-served (Windhundverfahren) bei der Anmeldung erlaubt sein?',\n '', '')"); }
public function down() { $query = "ALTER TABLE `opengraphdata`\n DROP PRIMARY KEY,\n DROP INDEX `url`,\n DROP COLUMN `opengraph_id`,\n ADD PRIMARY KEY (`url`)"; DBManager::get()->exec($query); SimpleORMap::expireTableScheme(); }
function up() { SimpleORMap::expireTableScheme(); }
function down() { DBManager::get()->exec("\n\t ALTER TABLE `fleximport_mapped_items`\n\t CHANGE `table_id` `import_type` VARCHAR(200) NOT NULL DEFAULT '0'\n\t "); SimpleORMap::expireTableScheme(); }
function down() { $db = DBManager::get(); $db->exec("DROP TABLE `webservice_access_rules` "); SimpleORMap::expireTableScheme(); }