PageRenderTime 44ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/tools/Dumper.php

https://github.com/DragonFire/wowcs
PHP | 457 lines | 432 code | 2 blank | 23 comment | 19 complexity | f740c072a54b2a288ce97ba3b2b652f4 MD5 | raw file
  1. <?php
  2. /**
  3. * Copyright (C) 2010-2011 Shadez <https://github.com/Shadez>
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation; either version 2 of the License, or
  8. * (at your option) any later version.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public License
  16. * along with this program; if not, write to the Free Software
  17. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  18. **/
  19. $time_start = microtime();
  20. if(!@include('../includes/WoW_Loader.php')) {
  21. die('<b>Fatal error:</b> unable to load system files.');
  22. }
  23. if(!isset($_GET['do']) || $_GET['do'] == null) {
  24. die('<a href="?do=save">Create SQL dump</a> (it will be saved in sql/ folder) or <a href="?do=show">display SQL dump here</a>.');
  25. }
  26. // Get DB version
  27. $current_db_version = (int) DB_VERSION;
  28. $new_db_version = $current_db_version + 1;
  29. set_time_limit(0);
  30. $allowed_tables = array(
  31. array(
  32. 'name' => 'achievement',
  33. 'internalFile' => false,
  34. 'skipData' => false,
  35. 'drop' => true,
  36. 'onlyIfNotExists' => false,
  37. ),
  38. array(
  39. 'name' => 'achievement_category',
  40. 'internalFile' => false,
  41. 'skipData' => false,
  42. 'drop' => true,
  43. 'onlyIfNotExists' => false,
  44. ),
  45. array(
  46. 'name' => 'achievement_criteria',
  47. 'internalFile' => false,
  48. 'skipData' => false,
  49. 'drop' => true,
  50. 'onlyIfNotExists' => false,
  51. ),
  52. array(
  53. 'name' => 'areas',
  54. 'internalFile' => false,
  55. 'skipData' => false,
  56. 'drop' => true,
  57. 'onlyIfNotExists' => false,
  58. ),
  59. array(
  60. 'name' => 'blog_comments',
  61. 'internalFile' => false,
  62. 'skipData' => false,
  63. 'drop' => true,
  64. 'onlyIfNotExists' => false,
  65. ),
  66. array(
  67. 'name' => 'bookmarks',
  68. 'internalFile' => false,
  69. 'skipData' => true,
  70. 'drop' => false,
  71. 'onlyIfNotExists' => true,
  72. ),
  73. array(
  74. 'name' => 'carousel',
  75. 'internalFile' => false,
  76. 'skipData' => false,
  77. 'drop' => true,
  78. 'onlyIfNotExists' => false,
  79. ),
  80. array(
  81. 'name' => 'class_abilities',
  82. 'internalFile' => false,
  83. 'skipData' => false,
  84. 'drop' => true,
  85. 'onlyIfNotExists' => false,
  86. ),
  87. array(
  88. 'name' => 'classes',
  89. 'internalFile' => false,
  90. 'skipData' => false,
  91. 'drop' => true,
  92. 'onlyIfNotExists' => false,
  93. ),
  94. array(
  95. 'name' => 'db_version',
  96. 'internalFile' => false,
  97. 'skipData' => false,
  98. 'drop' => true,
  99. 'onlyIfNotExists' => false,
  100. ),
  101. array(
  102. 'name' => 'enchantment',
  103. 'internalFile' => false,
  104. 'skipData' => false,
  105. 'drop' => true,
  106. 'onlyIfNotExists' => false,
  107. ),
  108. array(
  109. 'name' => 'extended_cost',
  110. 'internalFile' => false,
  111. 'skipData' => false,
  112. 'drop' => true,
  113. 'onlyIfNotExists' => false,
  114. ),
  115. array(
  116. 'name' => 'faction',
  117. 'internalFile' => false,
  118. 'skipData' => false,
  119. 'drop' => true,
  120. 'onlyIfNotExists' => false,
  121. ),
  122. array(
  123. 'name' => 'gemproperties',
  124. 'internalFile' => false,
  125. 'skipData' => false,
  126. 'drop' => true,
  127. 'onlyIfNotExists' => false,
  128. ),
  129. array(
  130. 'name' => 'glyphproperties',
  131. 'internalFile' => false,
  132. 'skipData' => false,
  133. 'drop' => true,
  134. 'onlyIfNotExists' => false,
  135. ),
  136. array(
  137. 'name' => 'icons',
  138. 'internalFile' => false,
  139. 'skipData' => false,
  140. 'drop' => true,
  141. 'onlyIfNotExists' => false,
  142. ),
  143. array(
  144. 'name' => 'instance_data',
  145. 'internalFile' => false,
  146. 'skipData' => false,
  147. 'drop' => true,
  148. 'onlyIfNotExists' => false,
  149. ),
  150. array(
  151. 'name' => 'instances',
  152. 'internalFile' => false,
  153. 'skipData' => false,
  154. 'drop' => true,
  155. 'onlyIfNotExists' => false,
  156. ),
  157. array(
  158. 'name' => 'instances_groups',
  159. 'internalFile' => false,
  160. 'skipData' => false,
  161. 'drop' => true,
  162. 'onlyIfNotExists' => false,
  163. ),
  164. array(
  165. 'name' => 'item_equivalents',
  166. 'internalFile' => false,
  167. 'skipData' => false,
  168. 'drop' => true,
  169. 'onlyIfNotExists' => false,
  170. ),
  171. array(
  172. 'name' => 'item_sources',
  173. 'internalFile' => false,
  174. 'skipData' => false,
  175. 'drop' => true,
  176. 'onlyIfNotExists' => false,
  177. ),
  178. array(
  179. 'name' => 'item_subclass',
  180. 'internalFile' => false,
  181. 'skipData' => false,
  182. 'drop' => true,
  183. 'onlyIfNotExists' => false,
  184. ),
  185. array(
  186. 'name' => 'itemdisplayinfo',
  187. 'internalFile' => false,
  188. 'skipData' => false,
  189. 'drop' => true,
  190. 'onlyIfNotExists' => false,
  191. ),
  192. array(
  193. 'name' => 'itemsetdata',
  194. 'internalFile' => false,
  195. 'skipData' => false,
  196. 'drop' => true,
  197. 'onlyIfNotExists' => false,
  198. ),
  199. array(
  200. 'name' => 'itemsetinfo',
  201. 'internalFile' => false,
  202. 'skipData' => false,
  203. 'drop' => true,
  204. 'onlyIfNotExists' => false,
  205. ),
  206. array(
  207. 'name' => 'itemsubclass',
  208. 'internalFile' => false,
  209. 'skipData' => false,
  210. 'drop' => true,
  211. 'onlyIfNotExists' => false,
  212. ),
  213. array(
  214. 'name' => 'login_characters',
  215. 'internalFile' => false,
  216. 'skipData' => true,
  217. 'drop' => false,
  218. 'onlyIfNotExists' => true,
  219. ),
  220. array(
  221. 'name' => 'main_menu',
  222. 'internalFile' => false,
  223. 'skipData' => false,
  224. 'drop' => true,
  225. 'onlyIfNotExists' => false,
  226. ),
  227. array(
  228. 'name' => 'maps',
  229. 'internalFile' => false,
  230. 'skipData' => false,
  231. 'drop' => true,
  232. 'onlyIfNotExists' => false,
  233. ),
  234. array(
  235. 'name' => 'mounts',
  236. 'internalFile' => false,
  237. 'skipData' => false,
  238. 'drop' => true,
  239. 'onlyIfNotExists' => false,
  240. ),
  241. array(
  242. 'name' => 'news',
  243. 'internalFile' => false,
  244. 'skipData' => true,
  245. 'drop' => false,
  246. 'onlyIfNotExists' => true,
  247. ),
  248. array(
  249. 'name' => 'petcalc',
  250. 'internalFile' => false,
  251. 'skipData' => false,
  252. 'drop' => true,
  253. 'onlyIfNotExists' => false,
  254. ),
  255. array(
  256. 'name' => 'professions',
  257. 'internalFile' => false,
  258. 'skipData' => false,
  259. 'drop' => true,
  260. 'onlyIfNotExists' => false,
  261. ),
  262. array(
  263. 'name' => 'race_abilities',
  264. 'internalFile' => false,
  265. 'skipData' => false,
  266. 'drop' => true,
  267. 'onlyIfNotExists' => false,
  268. ),
  269. array(
  270. 'name' => 'races',
  271. 'internalFile' => false,
  272. 'skipData' => false,
  273. 'drop' => true,
  274. 'onlyIfNotExists' => false,
  275. ),
  276. array(
  277. 'name' => 'randomproperties',
  278. 'internalFile' => false,
  279. 'skipData' => false,
  280. 'drop' => true,
  281. 'onlyIfNotExists' => false,
  282. ),
  283. array(
  284. 'name' => 'randompropertypoints',
  285. 'internalFile' => false,
  286. 'skipData' => false,
  287. 'drop' => true,
  288. 'onlyIfNotExists' => false,
  289. ),
  290. array(
  291. 'name' => 'randomsuffix',
  292. 'internalFile' => false,
  293. 'skipData' => false,
  294. 'drop' => true,
  295. 'onlyIfNotExists' => false,
  296. ),
  297. array(
  298. 'name' => 'rating',
  299. 'internalFile' => false,
  300. 'skipData' => false,
  301. 'drop' => true,
  302. 'onlyIfNotExists' => false,
  303. ),
  304. array(
  305. 'name' => 'skills',
  306. 'internalFile' => false,
  307. 'skipData' => false,
  308. 'drop' => true,
  309. 'onlyIfNotExists' => false,
  310. ),
  311. array(
  312. 'name' => 'source',
  313. 'internalFile' => false,
  314. 'skipData' => false,
  315. 'drop' => true,
  316. 'onlyIfNotExists' => false,
  317. ),
  318. array(
  319. 'name' => 'spell',
  320. 'internalFile' => 'wowcs_spell_r' . (WOW_REVISION+1) . '.sql',
  321. 'skipData' => false,
  322. 'drop' => true,
  323. 'onlyIfNotExists' => false,
  324. ),
  325. array(
  326. 'name' => 'spell_duration',
  327. 'internalFile' => false,
  328. 'skipData' => false,
  329. 'drop' => true,
  330. 'onlyIfNotExists' => false,
  331. ),
  332. array(
  333. 'name' => 'spellenchantment',
  334. 'internalFile' => false,
  335. 'skipData' => false,
  336. 'drop' => true,
  337. 'onlyIfNotExists' => false,
  338. ),
  339. array(
  340. 'name' => 'ssd',
  341. 'internalFile' => false,
  342. 'skipData' => false,
  343. 'drop' => true,
  344. 'onlyIfNotExists' => false,
  345. ),
  346. array(
  347. 'name' => 'ssv',
  348. 'internalFile' => false,
  349. 'skipData' => false,
  350. 'drop' => true,
  351. 'onlyIfNotExists' => false,
  352. ),
  353. array(
  354. 'name' => 'talent_icons',
  355. 'internalFile' => false,
  356. 'skipData' => false,
  357. 'drop' => true,
  358. 'onlyIfNotExists' => false,
  359. ),
  360. array(
  361. 'name' => 'talents',
  362. 'internalFile' => false,
  363. 'skipData' => false,
  364. 'drop' => true,
  365. 'onlyIfNotExists' => false,
  366. ),
  367. array(
  368. 'name' => 'titles',
  369. 'internalFile' => false,
  370. 'skipData' => false,
  371. 'drop' => true,
  372. 'onlyIfNotExists' => false,
  373. ),
  374. array(
  375. 'name' => 'user_characters',
  376. 'internalFile' => false,
  377. 'skipData' => true,
  378. 'drop' => true,
  379. 'onlyIfNotExists' => false,
  380. ),
  381. array(
  382. 'name' => 'users',
  383. 'internalFile' => false,
  384. 'skipData' => true,
  385. 'drop' => true,
  386. 'onlyIfNotExists' => false,
  387. ),
  388. array(
  389. 'name' => 'zones',
  390. 'internalFile' => false,
  391. 'skipData' => true,
  392. 'drop' => true,
  393. 'onlyIfNotExists' => false,
  394. )
  395. );
  396. if($_GET['do'] == 'show') {
  397. header('Content-type: text/plain');
  398. }
  399. $sql_dump_text = sprintf("/*
  400. World of Warcraft Community Site Database
  401. https://github.com/Shadez/wowcs/
  402. Revision [%d]
  403. Dump date: %s
  404. */
  405. /*!40101 SET NAMES utf8 */;
  406. /*!40101 SET SQL_MODE=''*/;
  407. /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;", (WOW_REVISION+1), date('M-d-Y, H:i:s'));
  408. foreach($allowed_tables as $table) {
  409. $data = array();
  410. if($table['skipData'] == false && $table['internalFile'] == false) {
  411. $data = DB::Wow()->select("SELECT * FROM `DBPREFIX_%s`", $table['name']);
  412. }
  413. $create_table = DB::Wow()->selectRow("SHOW CREATE TABLE `DBPREFIX_%s`", $table['name']);
  414. $create_table_query = $create_table['Create Table'];
  415. $sql_dump_text .= "\n\n-- `" . DatabaseConfig::$wow['db_prefix'] . '_' . $table['name'] . '`';
  416. if($table['internalFile'] != false) {
  417. $sql_dump_text .= "\n-- execute from " . $table['internalFile'];
  418. continue;
  419. }
  420. if($table['drop'] == true) {
  421. $sql_dump_text .= "\nDROP TABLE IF EXISTS `" . DatabaseConfig::$wow['db_prefix'] . '_' . $table['name'] . "`;\n" . $create_table_query . ';';
  422. }
  423. elseif($table['onlyIfNotExists'] == true) {
  424. $sql_dump_text .= "\n" . str_replace('CREATE TABLE', 'CREATE TABLE IF NOT EXISTS', $create_table_query) . ';';
  425. }
  426. if($table['skipData'] == false && $table['internalFile'] == false) {
  427. $sql_dump_text .= "\n";
  428. foreach($data as $tbl_data) {
  429. $sql_dump_text .= sprintf("\nINSERT INTO `%s_%s` VALUES (", DatabaseConfig::$wow['db_prefix'], $table['name']);
  430. $count = count($tbl_data)-1;
  431. $i = 0;
  432. foreach($tbl_data as $t_value) {
  433. $sql_dump_text .= "'" . str_replace("'", "''", $t_value) . "'";
  434. if($i != $count) {
  435. $sql_dump_text .= ', ';
  436. }
  437. $i++;
  438. }
  439. $sql_dump_text .= ');';
  440. }
  441. }
  442. }
  443. $sql_dump_text .= "\n\n/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;";
  444. if($_GET['do'] == 'save') {
  445. file_put_contents('../sql/wowcs_r' . (WOW_REVISION + 1) . '.sql', $sql_dump_text);
  446. echo 'File was successfuly saved!';
  447. }
  448. elseif($_GET['do'] == 'show') {
  449. echo $sql_dump_text;
  450. }
  451. unset($sql_dump_text);
  452. $time_end = microtime();
  453. $overall = ($time_end - $time_start);
  454. echo '<br/ ><br />Time: ' . $overall;
  455. ?>