diff options
Diffstat (limited to 'srcs/phpmyadmin/libraries/classes/Plugins/Schema/Pdf/TableStatsPdf.php')
| -rw-r--r-- | srcs/phpmyadmin/libraries/classes/Plugins/Schema/Pdf/TableStatsPdf.php | 233 |
1 files changed, 233 insertions, 0 deletions
diff --git a/srcs/phpmyadmin/libraries/classes/Plugins/Schema/Pdf/TableStatsPdf.php b/srcs/phpmyadmin/libraries/classes/Plugins/Schema/Pdf/TableStatsPdf.php new file mode 100644 index 0000000..999894c --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Plugins/Schema/Pdf/TableStatsPdf.php @@ -0,0 +1,233 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Contains PhpMyAdmin\Plugins\Schema\Pdf\TableStatsPdf class + * + * @package PhpMyAdmin + */ +declare(strict_types=1); + +namespace PhpMyAdmin\Plugins\Schema\Pdf; + +use PhpMyAdmin\Pdf as PdfLib; +use PhpMyAdmin\Plugins\Schema\ExportRelationSchema; +use PhpMyAdmin\Plugins\Schema\TableStats; + +/** + * Table preferences/statistics + * + * This class preserves the table co-ordinates,fields + * and helps in drawing/generating the Tables in PDF document. + * + * @name Table_Stats_Pdf + * @package PhpMyAdmin + * @see PMA_Schema_PDF + */ +class TableStatsPdf extends TableStats +{ + /** + * Defines properties + */ + public $nb_fiels; + public $height; + private $_ff = PdfLib::PMA_PDF_FONT; + + /** + * The "PhpMyAdmin\Plugins\Schema\Pdf\TableStatsPdf" constructor + * + * @param object $diagram The PDF diagram + * @param string $db The database name + * @param string $tableName The table name + * @param integer $fontSize The font size + * @param integer $pageNumber The current page number (from the + * $cfg['Servers'][$i]['table_coords'] table) + * @param integer $sameWideWidth The max. width among tables + * @param boolean $showKeys Whether to display keys or not + * @param boolean $tableDimension Whether to display table position or not + * @param boolean $offline Whether the coordinates are sent + * from the browser + * + * @see PMA_Schema_PDF, Table_Stats_Pdf::Table_Stats_setWidth, + * PhpMyAdmin\Plugins\Schema\Pdf\TableStatsPdf::Table_Stats_setHeight + */ + public function __construct( + $diagram, + $db, + $tableName, + $fontSize, + $pageNumber, + &$sameWideWidth, + $showKeys = false, + $tableDimension = false, + $offline = false + ) { + parent::__construct( + $diagram, + $db, + $pageNumber, + $tableName, + $showKeys, + $tableDimension, + $offline + ); + + $this->heightCell = 6; + $this->_setHeight(); + /* + * setWidth must me after setHeight, because title + * can include table height which changes table width + */ + $this->_setWidth($fontSize); + if ($sameWideWidth < $this->width) { + $sameWideWidth = $this->width; + } + } + + /** + * Displays an error when the table cannot be found. + * + * @return void + */ + protected function showMissingTableError() + { + ExportRelationSchema::dieSchema( + $this->pageNumber, + "PDF", + sprintf(__('The %s table doesn\'t exist!'), $this->tableName) + ); + } + + /** + * Returns title of the current table, + * title can have the dimensions of the table + * + * @return string + */ + protected function getTitle() + { + $ret = ''; + if ($this->tableDimension) { + $ret = sprintf('%.0fx%0.f', $this->width, $this->height); + } + + return $ret . ' ' . $this->tableName; + } + + /** + * Sets the width of the table + * + * @param integer $fontSize The font size + * + * @access private + * + * @return void + * + * @see PMA_Schema_PDF + */ + private function _setWidth($fontSize) + { + foreach ($this->fields as $field) { + $this->width = max($this->width, $this->diagram->GetStringWidth($field)); + } + $this->width += $this->diagram->GetStringWidth(' '); + $this->diagram->SetFont($this->_ff, 'B', $fontSize); + /* + * it is unknown what value must be added, because + * table title is affected by the table width value + */ + while ($this->width < $this->diagram->GetStringWidth($this->getTitle())) { + $this->width += 5; + } + $this->diagram->SetFont($this->_ff, '', $fontSize); + } + + /** + * Sets the height of the table + * + * @return void + * + * @access private + */ + private function _setHeight() + { + $this->height = (count($this->fields) + 1) * $this->heightCell; + } + + /** + * Do draw the table + * + * @param integer $fontSize The font size + * @param boolean $withDoc Whether to include links to documentation + * @param boolean|integer $setColor Whether to display color + * + * @access public + * + * @return void + * + * @see PMA_Schema_PDF + */ + public function tableDraw($fontSize, $withDoc, $setColor = 0) + { + $this->diagram->setXyScale($this->x, $this->y); + $this->diagram->SetFont($this->_ff, 'B', $fontSize); + if ($setColor) { + $this->diagram->SetTextColor(200); + $this->diagram->SetFillColor(0, 0, 128); + } + if ($withDoc) { + $this->diagram->SetLink( + $this->diagram->PMA_links['RT'][$this->tableName]['-'], + -1 + ); + } else { + $this->diagram->PMA_links['doc'][$this->tableName]['-'] = ''; + } + + $this->diagram->cellScale( + $this->width, + $this->heightCell, + $this->getTitle(), + 1, + 1, + 'C', + $setColor, + $this->diagram->PMA_links['doc'][$this->tableName]['-'] + ); + $this->diagram->setXScale($this->x); + $this->diagram->SetFont($this->_ff, '', $fontSize); + $this->diagram->SetTextColor(0); + $this->diagram->SetFillColor(255); + + foreach ($this->fields as $field) { + if ($setColor) { + if (in_array($field, $this->primary)) { + $this->diagram->SetFillColor(215, 121, 123); + } + if ($field == $this->displayfield) { + $this->diagram->SetFillColor(142, 159, 224); + } + } + if ($withDoc) { + $this->diagram->SetLink( + $this->diagram->PMA_links['RT'][$this->tableName][$field], + -1 + ); + } else { + $this->diagram->PMA_links['doc'][$this->tableName][$field] = ''; + } + + $this->diagram->cellScale( + $this->width, + $this->heightCell, + ' ' . $field, + 1, + 1, + 'L', + $setColor, + $this->diagram->PMA_links['doc'][$this->tableName][$field] + ); + $this->diagram->setXScale($this->x); + $this->diagram->SetFillColor(255); + } + } +} |
