302 lines
6.6 KiB
PHP
302 lines
6.6 KiB
PHP
<?php
|
|
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
|
/**
|
|
* Contains PMA\libraries\plugins\schema\ExportRelationSchema class which is
|
|
* inherited by all schema classes.
|
|
*
|
|
* @package PhpMyAdmin
|
|
*/
|
|
namespace PMA\libraries\plugins\schema;
|
|
|
|
use PMA;
|
|
|
|
/**
|
|
* This class is inherited by all schema classes
|
|
* It contains those methods which are common in them
|
|
* it works like factory pattern
|
|
*
|
|
* @package PhpMyAdmin
|
|
*/
|
|
class ExportRelationSchema
|
|
{
|
|
/**
|
|
* Constructor.
|
|
*
|
|
* @param string $db database name
|
|
* @param object $diagram schema diagram
|
|
*/
|
|
public function __construct($db, $diagram)
|
|
{
|
|
$this->db = $db;
|
|
$this->diagram = $diagram;
|
|
$this->setPageNumber($_REQUEST['page_number']);
|
|
$this->setOffline(isset($_REQUEST['offline_export']));
|
|
}
|
|
|
|
protected $db;
|
|
protected $diagram;
|
|
protected $showColor;
|
|
protected $tableDimension;
|
|
protected $sameWide;
|
|
protected $showKeys;
|
|
protected $orientation;
|
|
protected $paper;
|
|
protected $pageNumber;
|
|
protected $offline;
|
|
|
|
/**
|
|
* Set Page Number
|
|
*
|
|
* @param integer $value Page Number of the document to be created
|
|
*
|
|
* @return void
|
|
*/
|
|
public function setPageNumber($value)
|
|
{
|
|
$this->pageNumber = intval($value);
|
|
}
|
|
|
|
/**
|
|
* Returns the schema page number
|
|
*
|
|
* @return integer schema page number
|
|
*/
|
|
public function getPageNumber()
|
|
{
|
|
return $this->pageNumber;
|
|
}
|
|
|
|
/**
|
|
* Sets showColor
|
|
*
|
|
* @param boolean $value whether to show colors
|
|
*
|
|
* @return void
|
|
*/
|
|
public function setShowColor($value)
|
|
{
|
|
$this->showColor = $value;
|
|
}
|
|
|
|
/**
|
|
* Returns whether to show colors
|
|
*
|
|
* @return boolean whether to show colors
|
|
*/
|
|
public function isShowColor()
|
|
{
|
|
return $this->showColor;
|
|
}
|
|
|
|
/**
|
|
* Set Table Dimension
|
|
*
|
|
* @param boolean $value show table co-ordinates or not
|
|
*
|
|
* @return void
|
|
*/
|
|
public function setTableDimension($value)
|
|
{
|
|
$this->tableDimension = $value;
|
|
}
|
|
|
|
/**
|
|
* Returns whether to show table dimensions
|
|
*
|
|
* @return boolean whether to show table dimensions
|
|
*/
|
|
public function isTableDimension()
|
|
{
|
|
return $this->tableDimension;
|
|
}
|
|
|
|
/**
|
|
* Set same width of All Tables
|
|
*
|
|
* @param boolean $value set same width of all tables or not
|
|
*
|
|
* @return void
|
|
*/
|
|
public function setAllTablesSameWidth($value)
|
|
{
|
|
$this->sameWide = $value;
|
|
}
|
|
|
|
/**
|
|
* Returns whether to use same width for all tables or not
|
|
*
|
|
* @return boolean whether to use same width for all tables or not
|
|
*/
|
|
public function isAllTableSameWidth()
|
|
{
|
|
return $this->sameWide;
|
|
}
|
|
|
|
/**
|
|
* Set Show only keys
|
|
*
|
|
* @param boolean $value show only keys or not
|
|
*
|
|
* @return void
|
|
*
|
|
* @access public
|
|
*/
|
|
public function setShowKeys($value)
|
|
{
|
|
$this->showKeys = $value;
|
|
}
|
|
|
|
/**
|
|
* Returns whether to show keys
|
|
*
|
|
* @return boolean whether to show keys
|
|
*/
|
|
public function isShowKeys()
|
|
{
|
|
return $this->showKeys;
|
|
}
|
|
|
|
/**
|
|
* Set Orientation
|
|
*
|
|
* @param string $value Orientation will be portrait or landscape
|
|
*
|
|
* @return void
|
|
*
|
|
* @access public
|
|
*/
|
|
public function setOrientation($value)
|
|
{
|
|
$this->orientation = ($value == 'P') ? 'P' : 'L';
|
|
}
|
|
|
|
/**
|
|
* Returns orientation
|
|
*
|
|
* @return string orientation
|
|
*/
|
|
public function getOrientation()
|
|
{
|
|
return $this->orientation;
|
|
}
|
|
|
|
/**
|
|
* Set type of paper
|
|
*
|
|
* @param string $value paper type can be A4 etc
|
|
*
|
|
* @return void
|
|
*
|
|
* @access public
|
|
*/
|
|
public function setPaper($value)
|
|
{
|
|
$this->paper = $value;
|
|
}
|
|
|
|
/**
|
|
* Returns the paper size
|
|
*
|
|
* @return string paper size
|
|
*/
|
|
public function getPaper()
|
|
{
|
|
return $this->paper;
|
|
}
|
|
|
|
/**
|
|
* Set whether the document is generated from client side DB
|
|
*
|
|
* @param boolean $value offline or not
|
|
*
|
|
* @return void
|
|
*
|
|
* @access public
|
|
*/
|
|
public function setOffline($value)
|
|
{
|
|
$this->offline = $value;
|
|
}
|
|
|
|
/**
|
|
* Returns whether the client side database is used
|
|
*
|
|
* @return boolean
|
|
*
|
|
* @access public
|
|
*/
|
|
public function isOffline()
|
|
{
|
|
return $this->offline;
|
|
}
|
|
|
|
/**
|
|
* Get the table names from the request
|
|
*
|
|
* @return array an array of table names
|
|
*/
|
|
protected function getTablesFromRequest()
|
|
{
|
|
$tables = array();
|
|
$dbLength = mb_strlen($this->db);
|
|
foreach ($_REQUEST['t_h'] as $key => $value) {
|
|
if ($value) {
|
|
$tables[] = mb_substr($key, $dbLength + 1);
|
|
}
|
|
}
|
|
|
|
return $tables;
|
|
}
|
|
|
|
/**
|
|
* Returns the file name
|
|
*
|
|
* @param String $extension file extension
|
|
*
|
|
* @return string file name
|
|
*/
|
|
protected function getFileName($extension)
|
|
{
|
|
$filename = $this->db . $extension;
|
|
// Get the name of this page to use as filename
|
|
if ($this->pageNumber != -1 && !$this->offline) {
|
|
$_name_sql = 'SELECT page_descr FROM '
|
|
. PMA\libraries\Util::backquote($GLOBALS['cfgRelation']['db']) . '.'
|
|
. PMA\libraries\Util::backquote($GLOBALS['cfgRelation']['pdf_pages'])
|
|
. ' WHERE page_nr = ' . $this->pageNumber;
|
|
$_name_rs = PMA_queryAsControlUser($_name_sql);
|
|
$_name_row = $GLOBALS['dbi']->fetchRow($_name_rs);
|
|
$filename = $_name_row[0] . $extension;
|
|
}
|
|
|
|
return $filename;
|
|
}
|
|
|
|
/**
|
|
* Displays an error message
|
|
*
|
|
* @param integer $pageNumber ID of the chosen page
|
|
* @param string $type Schema Type
|
|
* @param string $error_message The error message
|
|
*
|
|
* @access public
|
|
*
|
|
* @return void
|
|
*/
|
|
public static function dieSchema($pageNumber, $type = '', $error_message = '')
|
|
{
|
|
echo "<p><strong>" , __("SCHEMA ERROR: ") , $type , "</strong></p>" , "\n";
|
|
if (!empty($error_message)) {
|
|
$error_message = htmlspecialchars($error_message);
|
|
}
|
|
echo '<p>' , "\n";
|
|
echo ' ' , $error_message , "\n";
|
|
echo '</p>' , "\n";
|
|
echo '<a href="db_designer.php'
|
|
, PMA_URL_getCommon(array('db' => $GLOBALS['db']))
|
|
, '&page=' . htmlspecialchars($pageNumber) , '">' , __('Back') , '</a>';
|
|
echo "\n";
|
|
exit;
|
|
}
|
|
}
|