+
+ static public function beforeSchemaUpdate()
+ {
+ $table = strtolower(get_called_class());
+ $schema = Schema::get();
+ $schemadef = $schema->getTableDef($table);
+
+ // 2015-09-04 We move Notice location data to Notice_location
+ // First we see if we have to do this at all
+ if (!isset($schemadef['fields']['lat'])
+ && !isset($schemadef['fields']['lon'])
+ && !isset($schemadef['fields']['location_id'])
+ && !isset($schemadef['fields']['location_ns'])) {
+ // We have already removed the location fields, so no need to migrate.
+ return;
+ }
+ // Then we make sure the Notice_location table is created!
+ $schema->ensureTable('notice_location', Notice_location::schemaDef());
+
+ // Then we continue on our road to migration!
+ echo "\nFound old $table table, moving location data to 'notice_location' table... (this will probably take a LONG time, but can be aborted and continued)";
+
+ $notice = new Notice();
+ $notice->query(sprintf('SELECT id, lat, lon, location_id, location_ns FROM %1$s ' .
+ 'WHERE lat IS NOT NULL ' .
+ 'OR lon IS NOT NULL ' .
+ 'OR location_id IS NOT NULL ' .
+ 'OR location_ns IS NOT NULL',
+ $schema->quoteIdentifier($table)));
+ print "\nFound {$notice->N} notices with location data, inserting";
+ while ($notice->fetch()) {
+ $notloc = Notice_location::getKV('notice_id', $notice->id);
+ if ($notloc instanceof Notice_location) {
+ print "-";
+ continue;
+ }
+ $notloc = new Notice_location();
+ $notloc->notice_id = $notice->id;
+ $notloc->lat= $notice->lat;
+ $notloc->lon= $notice->lon;
+ $notloc->location_id= $notice->location_id;
+ $notloc->location_ns= $notice->location_ns;
+ $notloc->insert();
+ print ".";
+ }
+ print "\n";
+ }