pmd_pdf.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. <?php
  2. /* vim: set expandtab sw=4 ts=4 sts=4: */
  3. /**
  4. * PDF export for PMD
  5. *
  6. * @package PhpMyAdmin-Designer
  7. */
  8. require_once './libraries/common.inc.php';
  9. require_once 'libraries/pmd_common.php';
  10. /**
  11. * Validate vulnerable POST parameters
  12. */
  13. if (isset($_POST['scale']) && ! PMA_isValid($_POST['scale'], 'numeric')) {
  14. die('Attack stopped');
  15. }
  16. /**
  17. * Sets globals from $_POST
  18. */
  19. $post_params = array(
  20. 'db'
  21. );
  22. foreach ($post_params as $one_post_param) {
  23. if (isset($_POST[$one_post_param])) {
  24. $GLOBALS[$one_post_param] = $_POST[$one_post_param];
  25. }
  26. }
  27. /**
  28. * If called directly from the designer, first save the positions
  29. */
  30. if (! isset($_POST['scale'])) {
  31. include_once 'pmd_save_pos.php';
  32. }
  33. if (isset($_POST['mode'])) {
  34. if ('create_export' != $_POST['mode'] && empty($_POST['pdf_page_number'])) {
  35. die("<script>alert('Pages not found!');history.go(-2);</script>");
  36. }
  37. $pmd_table = PMA_Util::backquote($GLOBALS['cfgRelation']['db']) . '.'
  38. . PMA_Util::backquote($GLOBALS['cfgRelation']['designer_coords']);
  39. $pma_table = PMA_Util::backquote($GLOBALS['cfgRelation']['db']) . '.'
  40. . PMA_Util::backquote($cfgRelation['table_coords']);
  41. $scale_q = PMA_Util::sqlAddSlashes($_POST['scale']);
  42. if ('create_export' == $_POST['mode']) {
  43. $pdf_page_number = PMA_REL_createPage($_POST['newpage'], $cfgRelation, $db);
  44. if ($pdf_page_number > 0) {
  45. $message = PMA_Message::success(__('Page has been created.'));
  46. $_POST['mode'] = 'export';
  47. } else {
  48. $message = PMA_Message::error(__('Page creation has failed!'));
  49. }
  50. } else {
  51. $pdf_page_number = $_POST['pdf_page_number'];
  52. }
  53. $pdf_page_number_q = PMA_Util::sqlAddSlashes($pdf_page_number);
  54. if ('export' == $_POST['mode']) {
  55. $sql = "REPLACE INTO " . $pma_table
  56. . " (db_name, table_name, pdf_page_number, x, y)"
  57. . " SELECT db_name, table_name, " . $pdf_page_number_q . ","
  58. . " ROUND(x/" . $scale_q . ") , ROUND(y/" . $scale_q . ") y"
  59. . " FROM " . $pmd_table
  60. . " WHERE db_name = '" . PMA_Util::sqlAddSlashes($db) . "'";
  61. PMA_queryAsControlUser($sql, true, PMA_DatabaseInterface::QUERY_STORE);
  62. }
  63. if ('import' == $_POST['mode']) {
  64. PMA_queryAsControlUser(
  65. 'UPDATE ' . $pma_table . ',' . $pmd_table .
  66. ' SET ' . $pmd_table . '.`x`= ' . $pma_table . '.`x` * ' . $scale_q . ',
  67. ' . $pmd_table . '.`y`= ' . $pma_table . '.`y` * ' . $scale_q . '
  68. WHERE
  69. ' . $pmd_table . '.`db_name`=' . $pma_table . '.`db_name`
  70. AND
  71. ' . $pmd_table . '.`table_name` = ' . $pma_table . '.`table_name`
  72. AND
  73. ' . $pmd_table . '.`db_name`=\'' . PMA_Util::sqlAddSlashes($db) . '\'
  74. AND pdf_page_number = ' . $pdf_page_number_q . ';',
  75. true, PMA_DatabaseInterface::QUERY_STORE
  76. );
  77. }
  78. }
  79. $response = PMA_Response::getInstance();
  80. $response->getFooter()->setMinimal();
  81. echo '<br/>';
  82. echo '<div>';
  83. if (! empty($message)) {
  84. $message->display();
  85. }
  86. echo '<form name="form1" method="post" action="pmd_pdf.php">';
  87. echo PMA_URL_getHiddenInputs($db);
  88. echo '<div>';
  89. echo '<fieldset><legend>' . __('Import/Export coordinates for relational schema') . '</legend>';
  90. $choices = array();
  91. $table_info_result = PMA_queryAsControlUser(
  92. 'SELECT * FROM ' . PMA_Util::backquote($GLOBALS['cfgRelation']['db'])
  93. . '.' . PMA_Util::backquote($cfgRelation['pdf_pages'])
  94. . ' WHERE db_name = \'' . PMA_Util::sqlAddSlashes($db) . '\''
  95. );
  96. if ($GLOBALS['dbi']->numRows($table_info_result) > 0) {
  97. echo '<p>' . __('Page:');
  98. echo '<select name="pdf_page_number">';
  99. while ($page = $GLOBALS['dbi']->fetchAssoc($table_info_result)) {
  100. echo '<option value="' . $page['page_nr'] . '">';
  101. echo htmlspecialchars($page['page_descr']);
  102. echo '</option>';
  103. }
  104. echo '</select>';
  105. echo '</p>';
  106. $choices['import'] = __('Import from selected page.');
  107. $choices['export'] = __('Export to selected page.');
  108. }
  109. $choices['create_export'] = __('Create a page and export to it.');
  110. if (1 == count($choices)) {
  111. echo $choices['create_export'];
  112. echo '<input type="hidden" name="mode" value="create_export" />';
  113. } else {
  114. echo PMA_Util::getRadioFields(
  115. 'mode', $choices, $checked_choice = '', $line_break = true,
  116. $escape_label = false, $class = ''
  117. );
  118. }
  119. echo '<br />';
  120. echo '<label for="newpage">' . __('New page name: ') . '</label>';
  121. echo '<input id="newpage" type="text" name="newpage" />';
  122. echo '<p>' . __('Export/Import to scale:');
  123. echo '<select name="scale">';
  124. echo '<option value="1">1:1</option>';
  125. echo '<option value="2">1:2</option>';
  126. echo '<option value="3" selected="selected">1:3 ('
  127. . __('recommended') . ')</option>';
  128. echo '<option value="4">1:4</option>';
  129. echo '<option value="5">1:5</option>';
  130. echo '</select>';
  131. echo '</p>';
  132. echo '<input type="submit" value="' . __('Go') . '"/>';
  133. echo '</fieldset>';
  134. echo '</div>';
  135. echo '</form>';
  136. echo '</div>';
  137. ?>