diff --git a/htdocs/sql/pdf_pages.php b/htdocs/sql/pdf_pages.php
new file mode 100755
--- /dev/null
+++ b/htdocs/sql/pdf_pages.php
@@ -0,0 +1,571 @@
+' . "\n"
+ . '' . $strDocu . '' . "\n";
+ require_once './libraries/footer.inc.php';
+}
+
+if (!$cfgRelation['displaywork']) {
+ echo sprintf($strNotSet, 'table_info', 'config.inc.php') . '
' . "\n"
+ . '' . $strDocu . '' . "\n";
+ require_once './libraries/footer.inc.php';
+}
+
+if (!isset($cfgRelation['table_coords'])){
+ echo sprintf($strNotSet, 'table_coords', 'config.inc.php') . '
' . "\n"
+ . '' . $strDocu . '' . "\n";
+ exit();
+}
+if (!isset($cfgRelation['pdf_pages'])) {
+ echo sprintf($strNotSet, 'pdf_page', 'config.inc.php') . '
' . "\n"
+ . '' . $strDocu . '' . "\n";
+ exit();
+}
+
+if ($cfgRelation['pdfwork']) {
+ // Now is the time to work on all changes
+ if (isset($do)) {
+ switch ($do) {
+ case 'choosepage':
+ if ($action_choose=="1") {
+ $ch_query = 'DELETE FROM ' . PMA_backquote($GLOBALS['cfgRelation']['db']) . '.' . PMA_backquote($cfgRelation['table_coords'])
+ . ' WHERE db_name = \'' . PMA_sqlAddslashes($db) . '\''
+ . ' AND pdf_page_number = ' . $chpage;
+ PMA_query_as_cu($ch_query, FALSE, $query_default_option);
+
+ $ch_query = 'DELETE FROM ' . PMA_backquote($GLOBALS['cfgRelation']['db']) . '.' . PMA_backquote($cfgRelation['pdf_pages'])
+ . ' WHERE db_name = \'' . PMA_sqlAddslashes($db) . '\''
+ . ' AND page_nr = ' . $chpage;
+ PMA_query_as_cu($ch_query, FALSE, $query_default_option);
+
+ unset($chpage);
+ }
+ break;
+ case 'createpage':
+ if (!isset($newpage) || $newpage == '') {
+ $newpage = $strNoDescription;
+ }
+ $ins_query = 'INSERT INTO ' . PMA_backquote($GLOBALS['cfgRelation']['db']) . '.' . PMA_backquote($cfgRelation['pdf_pages'])
+ . ' (db_name, page_descr)'
+ . ' VALUES (\'' . PMA_sqlAddslashes($db) . '\', \'' . PMA_sqlAddslashes($newpage) . '\')';
+ PMA_query_as_cu($ins_query, FALSE, $query_default_option);
+ $pdf_page_number = PMA_DBI_insert_id(isset($controllink) ? $controllink : '');
+
+ // A u t o m a t i c l a y o u t
+ // ================================
+ if (isset($auto_layout_internal) || isset($auto_layout_innodb)) {
+ $all_tables = array();
+ }
+
+ if (isset($auto_layout_innodb)) {
+ // get the tables list
+ $tables = PMA_DBI_get_tables_full($db);
+ // find the InnoDB ones
+ $innodb_tables = array();
+ foreach($tables as $table_name => $table_properties) {
+ if ($table_properties['ENGINE'] == 'InnoDB') {
+ $innodb_tables[] = $table_name;
+ }
+ }
+ $all_tables = $innodb_tables;
+ // could be improved by finding the tables which have the
+ // most references keys and place them at the beginning
+ // of the array (so that they are all center of schema)
+ unset($tables, $innodb_tables);
+ } // endif auto_layout_innodb
+
+ if (isset($auto_layout_internal)) {
+ // get the tables that have relations, by descending
+ // number of links
+ $master_tables = 'SELECT COUNT(master_table), master_table'
+ . ' FROM ' . PMA_backquote($GLOBALS['cfgRelation']['db']) . '.' . PMA_backquote($cfgRelation['relation'])
+ . ' WHERE master_db = \'' . $db . '\''
+ . ' GROUP BY master_table'
+ . ' ORDER BY ' . PMA_backquote('COUNT(master_table)') . ' DESC ';
+ $master_tables_rs = PMA_query_as_cu($master_tables, FALSE, $query_default_option);
+ if ($master_tables_rs && PMA_DBI_num_rows($master_tables_rs) > 0) {
+ // first put all the master tables at beginning
+ // of the list, so they are near the center of
+ // the schema
+ while (list(, $master_table) = PMA_DBI_fetch_row($master_tables_rs)) {
+ $all_tables[] = $master_table;
+ }
+
+ // then for each master, add its foreigns into an array
+ // of foreign tables, if not already there
+ // (a foreign might be foreign for more than
+ // one table, and might be a master itself)
+
+ $foreign_tables = array();
+ foreach ($all_tables AS $master_table) {
+ $foreigners = PMA_getForeigners($db, $master_table);
+ foreach ($foreigners AS $foreigner) {
+ if (!in_array($foreigner['foreign_table'], $foreign_tables)) {
+ $foreign_tables[] = $foreigner['foreign_table'];
+ }
+ }
+ }
+
+ // then merge the arrays
+ foreach ($foreign_tables AS $foreign_table) {
+ if (!in_array($foreign_table, $all_tables)) {
+ $all_tables[] = $foreign_table;
+ }
+ }
+ } // endif there are master tables
+ } // endif auto_layout_internal
+
+ if (isset($auto_layout_internal) || isset($auto_layout_innodb)) {
+ // now generate the coordinates for the schema,
+ // in a clockwise spiral
+
+ $pos_x = 300;
+ $pos_y = 300;
+ $delta = 110;
+ $delta_mult = 1.10;
+ $direction = "right";
+ foreach ($all_tables AS $current_table) {
+
+ // save current table's coordinates
+ $insert_query = 'INSERT INTO ' . PMA_backquote($GLOBALS['cfgRelation']['db']) . '.' . PMA_backquote($cfgRelation['table_coords']) . ' '
+ . '(db_name, table_name, pdf_page_number, x, y) '
+ . 'VALUES (\'' . PMA_sqlAddslashes($db) . '\', \'' . PMA_sqlAddslashes($current_table) . '\',' . $pdf_page_number . ',' . $pos_x . ',' . $pos_y . ')';
+ PMA_query_as_cu($insert_query, FALSE, $query_default_option);
+
+ // compute for the next table
+ switch ($direction) {
+ case 'right':
+ $pos_x += $delta;
+ $direction = "down";
+ $delta *= $delta_mult;
+ break;
+ case 'down':
+ $pos_y += $delta;
+ $direction = "left";
+ $delta *= $delta_mult;
+ break;
+ case 'left':
+ $pos_x -= $delta;
+ $direction = "up";
+ $delta *= $delta_mult;
+ break;
+ case 'up':
+ $pos_y -= $delta;
+ $direction = "right";
+ $delta *= $delta_mult;
+ break;
+ } // end switch
+ } // end foreach
+ } // end if some auto-layout to do
+
+ $chpage = $pdf_page_number;
+
+ break;
+
+ case 'edcoord':
+ for ($i = 0; $i < $c_table_rows; $i++) {
+ $arrvalue = 'c_table_' . $i;
+ $arrvalue = $$arrvalue;
+ if (!isset($arrvalue['x']) || $arrvalue['x'] == '') {
+ $arrvalue['x'] = 0;
+ }
+ if (!isset($arrvalue['y']) || $arrvalue['y'] == '') {
+ $arrvalue['y'] = 0;
+ }
+ if (isset($arrvalue['name']) && $arrvalue['name'] != '--') {
+ $test_query = 'SELECT * FROM ' . PMA_backquote($GLOBALS['cfgRelation']['db']) . '.' . PMA_backquote($cfgRelation['table_coords'])
+ . ' WHERE db_name = \'' . PMA_sqlAddslashes($db) . '\''
+ . ' AND table_name = \'' . PMA_sqlAddslashes($arrvalue['name']) . '\''
+ . ' AND pdf_page_number = ' . $chpage;
+ $test_rs = PMA_query_as_cu($test_query, FALSE, $query_default_option);
+ if ($test_rs && PMA_DBI_num_rows($test_rs) > 0) {
+ if (isset($arrvalue['delete']) && $arrvalue['delete'] == 'y') {
+ $ch_query = 'DELETE FROM ' . PMA_backquote($GLOBALS['cfgRelation']['db']) . '.' . PMA_backquote($cfgRelation['table_coords'])
+ . ' WHERE db_name = \'' . PMA_sqlAddslashes($db) . '\''
+ . ' AND table_name = \'' . PMA_sqlAddslashes($arrvalue['name']) . '\''
+ . ' AND pdf_page_number = ' . $chpage;
+ } else {
+ $ch_query = 'UPDATE ' . PMA_backquote($GLOBALS['cfgRelation']['db']) . '.' . PMA_backquote($cfgRelation['table_coords']) . ' '
+ . 'SET x = ' . $arrvalue['x'] . ', y= ' . $arrvalue['y']
+ . ' WHERE db_name = \'' . PMA_sqlAddslashes($db) . '\''
+ . ' AND table_name = \'' . PMA_sqlAddslashes($arrvalue['name']) . '\''
+ . ' AND pdf_page_number = ' . $chpage;
+ }
+ } else {
+ $ch_query = 'INSERT INTO ' . PMA_backquote($GLOBALS['cfgRelation']['db']) . '.' . PMA_backquote($cfgRelation['table_coords']) . ' '
+ . '(db_name, table_name, pdf_page_number, x, y) '
+ . 'VALUES (\'' . PMA_sqlAddslashes($db) . '\', \'' . PMA_sqlAddslashes($arrvalue['name']) . '\',' . $chpage . ',' . $arrvalue['x'] . ',' . $arrvalue['y'] . ')';
+ }
+ PMA_query_as_cu($ch_query, FALSE, $query_default_option);
+ } // end if
+ } // end for
+ break;
+ case 'deleteCrap':
+ foreach ($delrow AS $current_row) {
+ $d_query = 'DELETE FROM ' . PMA_backquote($GLOBALS['cfgRelation']['db']) . '.' . PMA_backquote($cfgRelation['table_coords']) . ' ' . "\n"
+ . ' WHERE db_name = \'' . PMA_sqlAddslashes($db) . '\'' . "\n"
+ . ' AND table_name = \'' . PMA_sqlAddslashes($current_row) . '\'' . "\n"
+ . ' AND pdf_page_number = ' . $chpage;
+ PMA_query_as_cu($d_query, FALSE, $query_default_option);
+ }
+ break;
+ } // end switch
+ } // end if (isset($do))
+
+ // We will need an array of all tables in this db
+ $selectboxall = array('--');
+ $alltab_rs = PMA_DBI_query('SHOW TABLES FROM ' . PMA_backquote($db) . ';', null, PMA_DBI_QUERY_STORE);
+ while ($val = @PMA_DBI_fetch_row($alltab_rs)) {
+ $selectboxall[] = $val[0];
+ }
+
+ // Now first show some possibility to choose a page for the pdf
+ $page_query = 'SELECT * FROM ' . PMA_backquote($GLOBALS['cfgRelation']['db']) . '.' . PMA_backquote($cfgRelation['pdf_pages'])
+ . ' WHERE db_name = \'' . PMA_sqlAddslashes($db) . '\'';
+ $page_rs = PMA_query_as_cu($page_query, FALSE, $query_default_option);
+
+ if ($page_rs && PMA_DBI_num_rows($page_rs) > 0) {
+ ?>
+