<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
 * Contains Table_Stats_Dia class
 *
 * @package PhpMyAdmin
 */
if (! defined('PHPMYADMIN')) {
	exit;
}

require_once 'libraries/plugins/schema/TableStats.class.php';

/**
 * Table preferences/statistics
 *
 * This class preserves the table co-ordinates,fields
 * and helps in drawing/generating the Tables in dia XML document.
 *
 * @package PhpMyAdmin
 * @name	Table_Stats_Dia
 * @see		PMA_DIA
 */
class Table_Stats_Dia extends TableStats
{
	public $tableId;
	public $tableColor;

	/**
	 * The "Table_Stats_Dia" constructor
	 *
	 * @param string  $tableName  The table name
	 * @param integer $pageNumber The current page number (from the
	 *							  $cfg['Servers'][$i]['table_coords'] table)
	 * @param boolean $showKeys	  Whether to display ONLY keys or not
	 * @param boolean $offline	  Whether the coordinates are sent from the browser
	 *
	 * @global object $dia		   The current dia document
	 *
	 * @see PMA_DIA
	 */
	function __construct(
		$tableName, $pageNumber, $showKeys = false, $offline = false
	) {
		global $dia;
		parent::__construct(
			$dia, $GLOBALS['db'], $pageNumber, $tableName, $showKeys, false, $offline
		);

		/**
		 * Every object in Dia document needs an ID to identify
		 * so, we used a static variable to keep the things unique
		*/
		PMA_Dia_Relation_Schema::$objectId += 1;
		$this->tableId = PMA_Dia_Relation_Schema::$objectId;
	}

	/**
	 * Displays an error when the table cannot be found.
	 *
	 * @return void
	 */
	protected function showMissingTableError()
	{
		PMA_Export_Relation_Schema::dieSchema(
			$this->pageNumber,
			"DIA",
			sprintf(__('The %s table doesn\'t exist!'), $this->tableName)
		);
	}

	/**
	 * Displays an error on missing coordinates
	 *
	 * @return void
	 */
	protected function showMissingCoordinatesError()
	{
		PMA_Export_Relation_Schema::dieSchema(
			$this->pageNumber,
			"DIA",
			sprintf(
				__('Please configure the coordinates for table %s'),
				$this->tableName
			)
		);
	}


	/**
	 * Do draw the table
	 *
	 * Tables are generated using object type Database - Table
	 * primary fields are underlined in tables. Dia object
	 * is used to generate the XML of Dia Document. Database Table
	 * Object and their attributes are involved in the combination
	 * of displaing Database - Table on Dia Document.
	 *
	 * @param boolean $showColor Whether to show color for tables text or not
	 * if showColor is true then an array of $listOfColors will be used to choose
	 * the random colors for tables text we can change/add more colors to this array
	 *
	 * @return void
	 *
	 * @global object $dia The current Dia document
	 *
	 * @access public
	 * @see PMA_DIA
	 */
	public function tableDraw($showColor)
	{
		global $dia;

		if ($showColor) {
			$listOfColors = array(
				'FF0000',
				'000099',
				'00FF00'
			);
			shuffle($listOfColors);
			$this->tableColor =	 '#' . $listOfColors[0] . '';
		} else {
			$this->tableColor = '#000000';
		}

		$factor = 0.1;

		$dia->startElement('dia:object');
		$dia->writeAttribute('type', 'Database - Table');
		$dia->writeAttribute('version', '0');
		$dia->writeAttribute('id', '' . $this->tableId . '');
		$dia->writeRaw(
			'<dia:attribute name="obj_pos">
				<dia:point val="'
			. ($this->x * $factor) . ',' . ($this->y * $factor) . '"/>
			</dia:attribute>
			<dia:attribute name="obj_bb">
				<dia:rectangle val="'
			. ($this->x * $factor) . ',' . ($this->y * $factor) . ';9.97,9.2"/>
			</dia:attribute>
			<dia:attribute name="meta">
				<dia:composite type="dict"/>
			</dia:attribute>
			<dia:attribute name="elem_corner">
				<dia:point val="'
			. ($this->x * $factor) . ',' . ($this->y * $factor) . '"/>
			</dia:attribute>
			<dia:attribute name="elem_width">
				<dia:real val="5.9199999999999999"/>
			</dia:attribute>
			<dia:attribute name="elem_height">
				<dia:real val="3.5"/>
			</dia:attribute>
			<dia:attribute name="text_colour">
				<dia:color val="' . $this->tableColor . '"/>
			</dia:attribute>
			<dia:attribute name="line_colour">
				<dia:color val="#000000"/>
			</dia:attribute>
			<dia:attribute name="fill_colour">
				<dia:color val="#ffffff"/>
			</dia:attribute>
			<dia:attribute name="line_width">
				<dia:real val="0.10000000000000001"/>
			</dia:attribute>
			<dia:attribute name="name">
				<dia:string>#' . $this->tableName . '#</dia:string>
			</dia:attribute>
			<dia:attribute name="comment">
				<dia:string>##</dia:string>
			</dia:attribute>
			<dia:attribute name="visible_comment">
				<dia:boolean val="false"/>
			</dia:attribute>
			<dia:attribute name="tagging_comment">
				<dia:boolean val="false"/>
			</dia:attribute>
			<dia:attribute name="underline_primary_key">
				<dia:boolean val="true"/>
			</dia:attribute>
			<dia:attribute name="bold_primary_keys">
				<dia:boolean val="true"/>
			</dia:attribute>
			<dia:attribute name="normal_font">
				<dia:font family="monospace" style="0" name="Courier"/>
			</dia:attribute>
			<dia:attribute name="name_font">
				<dia:font family="sans" style="80" name="Helvetica-Bold"/>
			</dia:attribute>
			<dia:attribute name="comment_font">
				<dia:font family="sans" style="0" name="Helvetica"/>
			</dia:attribute>
			<dia:attribute name="normal_font_height">
				<dia:real val="0.80000000000000004"/>
			</dia:attribute>
			<dia:attribute name="name_font_height">
				<dia:real val="0.69999999999999996"/>
			</dia:attribute>
			<dia:attribute name="comment_font_height">
				<dia:real val="0.69999999999999996"/>
			</dia:attribute>'
		);

		$dia->startElement('dia:attribute');
		$dia->writeAttribute('name', 'attributes');

		foreach ($this->fields as $field) {
			$dia->writeRaw(
				'<dia:composite type="table_attribute">
					<dia:attribute name="name">
				<dia:string>#' . $field . '#</dia:string>
				</dia:attribute>
				<dia:attribute name="type">
					<dia:string>##</dia:string>
				</dia:attribute>
					<dia:attribute name="comment">
				<dia:string>##</dia:string>
				</dia:attribute>'
			);
			unset($pm);
			$pm = 'false';
			if (in_array($field, $this->primary)) {
				$pm = 'true';
			}
			if ($field == $this->displayfield) {
				$pm = 'false';
			}
			$dia->writeRaw(
				'<dia:attribute name="primary_key">
					<dia:boolean val="' . $pm . '"/>
				</dia:attribute>
				<dia:attribute name="nullable">
					<dia:boolean val="false"/>
				</dia:attribute>
				<dia:attribute name="unique">
					<dia:boolean val="' . $pm . '"/>
				</dia:attribute>
				</dia:composite>'
			);
		}
		$dia->endElement();
		$dia->endElement();
	}
}
?>