PageRenderTime 31ms CodeModel.GetById 20ms RepoModel.GetById 1ms app.codeStats 0ms

/ext/upgrade/main.php

https://github.com/jgen/shimmie2
PHP | 135 lines | 95 code | 29 blank | 11 comment | 24 complexity | 31153fbe90e6e19d3cd01d3ab08fddc5 MD5 | raw file
  1. <?php
  2. /*
  3. * Name: Database Upgrader
  4. * Author: Shish <webmaster@shishnet.org>
  5. * Link: http://code.shishnet.org/shimmie2/
  6. * Description: Keeps things happy behind the scenes
  7. * Visibility: admin
  8. */
  9. class Upgrade extends Extension {
  10. public function onInitExt(InitExtEvent $event) {
  11. global $config, $database;
  12. if($config->get_bool("in_upgrade")) return;
  13. if(!is_numeric($config->get_string("db_version"))) {
  14. $config->set_int("db_version", 2);
  15. }
  16. if($config->get_int("db_version") < 6) {
  17. // cry :S
  18. }
  19. // v7 is convert to innodb with adodb
  20. // now done again as v9 with PDO
  21. if($config->get_int("db_version") < 8) {
  22. $config->set_bool("in_upgrade", true);
  23. $config->set_int("db_version", 8);
  24. $database->execute($database->scoreql_to_sql(
  25. "ALTER TABLE images ADD COLUMN locked SCORE_BOOL NOT NULL DEFAULT SCORE_BOOL_N"
  26. ));
  27. log_info("upgrade", "Database at version 8");
  28. $config->set_bool("in_upgrade", false);
  29. }
  30. if($config->get_int("db_version") < 9) {
  31. $config->set_bool("in_upgrade", true);
  32. $config->set_int("db_version", 9);
  33. if($database->get_driver_name() == 'mysql') {
  34. $tables = $database->get_col("SHOW TABLES");
  35. foreach($tables as $table) {
  36. log_info("upgrade", "converting $table to innodb");
  37. $database->execute("ALTER TABLE $table ENGINE=INNODB");
  38. }
  39. }
  40. log_info("upgrade", "Database at version 9");
  41. $config->set_bool("in_upgrade", false);
  42. }
  43. if($config->get_int("db_version") < 10) {
  44. $config->set_bool("in_upgrade", true);
  45. $config->set_int("db_version", 10);
  46. log_info("upgrade", "Adding foreign keys to images");
  47. $database->Execute("ALTER TABLE images ADD FOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE RESTRICT");
  48. log_info("upgrade", "Database at version 10");
  49. $config->set_bool("in_upgrade", false);
  50. }
  51. if($config->get_int("db_version") < 11) {
  52. $config->set_bool("in_upgrade", true);
  53. $config->set_int("db_version", 11);
  54. log_info("upgrade", "Converting user flags to classes");
  55. $database->execute("ALTER TABLE users ADD COLUMN class VARCHAR(32) NOT NULL default :user", array("user" => "user"));
  56. $database->execute("UPDATE users SET class = :name WHERE id=:id", array("name"=>"anonymous", "id"=>$config->get_int('anon_id')));
  57. $database->execute("UPDATE users SET class = :name WHERE admin=:admin", array("name"=>"admin", "admin"=>'Y'));
  58. log_info("upgrade", "Database at version 11");
  59. $config->set_bool("in_upgrade", false);
  60. }
  61. if($config->get_int("db_version") < 12) {
  62. $config->set_bool("in_upgrade", true);
  63. $config->set_int("db_version", 12);
  64. if($database->get_driver_name() == 'pgsql') {
  65. log_info("upgrade", "Changing ext column to VARCHAR");
  66. $database->execute("ALTER TABLE images ALTER COLUMN ext SET DATA TYPE VARCHAR(4)");
  67. }
  68. log_info("upgrade", "Lowering case of all exts");
  69. $database->execute("UPDATE images SET ext = LOWER(ext)");
  70. log_info("upgrade", "Database at version 12");
  71. $config->set_bool("in_upgrade", false);
  72. }
  73. if($config->get_int("db_version") < 13) {
  74. $config->set_bool("in_upgrade", true);
  75. $config->set_int("db_version", 13);
  76. log_info("upgrade", "Changing password column to VARCHAR(250)");
  77. if($database->get_driver_name() == 'pgsql') {
  78. $database->execute("ALTER TABLE users ALTER COLUMN pass SET DATA TYPE VARCHAR(250)");
  79. }
  80. else if($database->get_driver_name() == 'mysql') {
  81. $database->execute("ALTER TABLE users CHANGE pass pass VARCHAR(250)");
  82. }
  83. log_info("upgrade", "Database at version 13");
  84. $config->set_bool("in_upgrade", false);
  85. }
  86. if($config->get_int("db_version") < 14) {
  87. $config->set_bool("in_upgrade", true);
  88. $config->set_int("db_version", 14);
  89. log_info("upgrade", "Changing tag column to VARCHAR(255)");
  90. if($database->get_driver_name() == 'pgsql') {
  91. $database->execute('ALTER TABLE tags ALTER COLUMN tag SET DATA TYPE VARCHAR(255)');
  92. $database->execute('ALTER TABLE aliases ALTER COLUMN oldtag SET DATA TYPE VARCHAR(255)');
  93. $database->execute('ALTER TABLE aliases ALTER COLUMN newtag SET DATA TYPE VARCHAR(255)');
  94. }
  95. else if($database->get_driver_name() == 'mysql') {
  96. $database->execute('ALTER TABLE tags MODIFY COLUMN tag VARCHAR(255) NOT NULL');
  97. $database->execute('ALTER TABLE aliases MODIFY COLUMN oldtag VARCHAR(255) NOT NULL');
  98. $database->execute('ALTER TABLE aliases MODIFY COLUMN newtag VARCHAR(255) NOT NULL');
  99. }
  100. log_info("upgrade", "Database at version 14");
  101. $config->set_bool("in_upgrade", false);
  102. }
  103. }
  104. /** @return int */
  105. public function get_priority() {return 5;}
  106. }