/tools/old-patches/2007-02-25/migrateDmlrModels.php

https://github.com/costash/DEXonline · PHP · 100 lines · 87 code · 10 blank · 3 comment · 15 complexity · e5857ee8b1c9bdb6bcc903ed08ca20d5 MD5 · raw file

  1. <?php
  2. require_once("../../phplib/util.php");
  3. assert_options(ASSERT_BAIL, 1);
  4. debug_off();
  5. $migrateAll = false;
  6. for ($i = 1; $i < count($argv); $i++) {
  7. $arg = $argv[$i];
  8. if ($arg == "-a") {
  9. $migrateAll = true;
  10. } else {
  11. OS::errorAndExit("Unknown flag: $arg");
  12. }
  13. }
  14. if ($migrateAll) {
  15. mysql_query("delete from transforms where transf_from != ''" .
  16. "or transf_to != ''");
  17. }
  18. $query = $migrateAll
  19. ? "select * from models where model_type not in ('I', 'T')"
  20. : "select models.* from models left outer join model_description " .
  21. "on model_id = md_model where md_model is null";
  22. $dbResult = logged_query($query);
  23. $numModels = 0;
  24. while ($dbRow = mysql_fetch_assoc($dbResult)) {
  25. $model = new Model();
  26. $model->populateFromDbRow($dbRow);
  27. //print "{$model->modelType} {$model->number}\n";
  28. // Load all the DMLR model records
  29. mysql_query("delete from model_description where md_model = {$model->id}");
  30. $query = "select form, infl_id, variant, is_baseform from dmlr_models " .
  31. "where model_type = '{$model->modelType}' " .
  32. "and model_no = '" . addslashes($model->number) . "' order by infl_id";
  33. $dmlrDbResult = logged_query($query);
  34. $results = db_getArray($dmlrDbResult);
  35. $baseForm = null;
  36. foreach ($results as $row) {
  37. $form = $row['form'];
  38. $variant = $row['variant'];
  39. $inflId = $row['infl_id'];
  40. $isBaseForm = $row['is_baseform'];
  41. if ($baseForm && $isBaseForm) {
  42. die("Incorrect baseform for {$model->modelType}{$model->number}\n");
  43. }
  44. if (!$baseForm) {
  45. $baseForm = $form;
  46. }
  47. if (text_contains($baseForm, "'") ^ text_contains($form, "'")) {
  48. print "Incomplete accents for $baseForm => $form\n";
  49. }
  50. //print "$baseForm=>$form\n";
  51. if (!text_validateAlphabet($form, "aăâbcdefghiîjklmnopqrsștțuvwxyz'")) {
  52. die("Illegal characters in form $form\n");
  53. }
  54. $transforms = text_extractTransforms($baseForm, $form,
  55. $model->modelType == 'P');
  56. assert(count($transforms) >= 2);
  57. // Split off the last transform: it indicates the accent shift
  58. $accentShift = array_pop($transforms);
  59. if ($accentShift != UNKNOWN_ACCENT_SHIFT &&
  60. $accentShift != NO_ACCENT_SHIFT) {
  61. $accentedVowel = array_pop($transforms);
  62. } else {
  63. $accentedVowel = '';
  64. }
  65. //foreach ($transforms as $t) {
  66. // print $t->toString() . ' ';
  67. //}
  68. //print "$accentShift\n";
  69. // Reverse the transforms array. At the same time, save the transforms.
  70. $newT = array();
  71. for ($i = count($transforms) - 1; $i >= 0; $i--) {
  72. $t = $transforms[$i];
  73. $newT[] = Transform::createOrLoad($t->from, $t->to);
  74. }
  75. $transforms = $newT;
  76. foreach ($transforms as $i => $t) {
  77. $md = ModelDescription::create($model->id, $inflId, $variant,
  78. $i, $t->id, $accentShift, $accentedVowel);
  79. $md->save();
  80. }
  81. }
  82. $numModels++;
  83. }
  84. print "$numModels models migrated from dmlr_models.\n";
  85. ?>