gl-website-deployer/admin/phpMyAdmin/libraries/classes/Plugins/Schema/ExportRelationSchema.php
2025-03-24 09:27:39 +01:00

315 lines
6.9 KiB
PHP

<?php
/**
* Contains PhpMyAdmin\Plugins\Schema\ExportRelationSchema class which is
* inherited by all schema classes.
*/
declare(strict_types=1);
namespace PhpMyAdmin\Plugins\Schema;
use PhpMyAdmin\Relation;
use PhpMyAdmin\Url;
use PhpMyAdmin\Util;
use function htmlspecialchars;
use function rawurldecode;
/**
* This class is inherited by all schema classes
* It contains those methods which are common in them
* it works like factory pattern
*/
class ExportRelationSchema
{
/** @var string */
protected $db;
/** @var Dia\Dia|Eps\Eps|Pdf\Pdf|Svg\Svg|null */
protected $diagram;
/** @var bool */
protected $showColor;
/** @var bool */
protected $tableDimension;
/** @var bool */
protected $sameWide;
/** @var bool */
protected $showKeys;
/** @var string */
protected $orientation;
/** @var string */
protected $paper;
/** @var int */
protected $pageNumber;
/** @var bool */
protected $offline;
/** @var Relation */
protected $relation;
/**
* @param string $db database name
* @param Pdf\Pdf|Svg\Svg|Eps\Eps|Dia\Dia|Pdf\Pdf|null $diagram schema diagram
*/
public function __construct($db, $diagram)
{
global $dbi;
$this->db = $db;
$this->diagram = $diagram;
$this->setPageNumber((int) $_REQUEST['page_number']);
$this->setOffline(isset($_REQUEST['offline_export']));
$this->relation = new Relation($dbi);
}
/**
* Set Page Number
*
* @param int $value Page Number of the document to be created
*/
public function setPageNumber(int $value): void
{
$this->pageNumber = $value;
}
/**
* Returns the schema page number
*
* @return int schema page number
*/
public function getPageNumber()
{
return $this->pageNumber;
}
/**
* Sets showColor
*
* @param bool $value whether to show colors
*/
public function setShowColor(bool $value): void
{
$this->showColor = $value;
}
/**
* Returns whether to show colors
*
* @return bool whether to show colors
*/
public function isShowColor()
{
return $this->showColor;
}
/**
* Set Table Dimension
*
* @param bool $value show table co-ordinates or not
*/
public function setTableDimension(bool $value): void
{
$this->tableDimension = $value;
}
/**
* Returns whether to show table dimensions
*
* @return bool whether to show table dimensions
*/
public function isTableDimension()
{
return $this->tableDimension;
}
/**
* Set same width of All Tables
*
* @param bool $value set same width of all tables or not
*/
public function setAllTablesSameWidth(bool $value): void
{
$this->sameWide = $value;
}
/**
* Returns whether to use same width for all tables or not
*
* @return bool whether to use same width for all tables or not
*/
public function isAllTableSameWidth()
{
return $this->sameWide;
}
/**
* Set Show only keys
*
* @param bool $value show only keys or not
*
* @access public
*/
public function setShowKeys(bool $value): void
{
$this->showKeys = $value;
}
/**
* Returns whether to show keys
*
* @return bool whether to show keys
*/
public function isShowKeys()
{
return $this->showKeys;
}
/**
* Set Orientation
*
* @param string $value Orientation will be portrait or landscape
*
* @access public
*/
public function setOrientation(string $value): void
{
$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
*
* @access public
*/
public function setPaper(string $value): void
{
$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 bool $value offline or not
*
* @access public
*/
public function setOffline(bool $value): void
{
$this->offline = $value;
}
/**
* Returns whether the client side database is used
*
* @return bool
*
* @access public
*/
public function isOffline()
{
return $this->offline;
}
/**
* Get the table names from the request
*
* @return string[] an array of table names
*/
protected function getTablesFromRequest(): array
{
$tables = [];
if (isset($_POST['t_tbl'])) {
foreach ($_POST['t_tbl'] as $table) {
$tables[] = rawurldecode($table);
}
}
return $tables;
}
/**
* Returns the file name
*
* @param string $extension file extension
*
* @return string file name
*/
protected function getFileName($extension): string
{
global $dbi;
$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 '
. Util::backquote($GLOBALS['cfgRelation']['db']) . '.'
. Util::backquote($GLOBALS['cfgRelation']['pdf_pages'])
. ' WHERE page_nr = ' . $this->pageNumber;
$_name_rs = $this->relation->queryAsControlUser($_name_sql);
$_name_row = $dbi->fetchRow($_name_rs);
$filename = $_name_row[0] . $extension;
}
return $filename;
}
/**
* Displays an error message
*
* @param int $pageNumber ID of the chosen page
* @param string $type Schema Type
* @param string $error_message The error message
*
* @return void
*
* @access public
*/
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="';
echo Url::getFromRoute('/database/designer', [
'db' => $GLOBALS['db'],
'server' => $GLOBALS['server'],
'page' => $pageNumber,
]);
echo '">' . __('Back') . '</a>';
echo "\n";
exit;
}
}