pmd_pdf.php 4.8 KB

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