123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378 |
- <?php
- /* vim: set expandtab sw=4 ts=4 sts=4: */
- /**
- * Abstract class for the export plugins
- *
- * @package PhpMyAdmin
- */
- namespace PhpMyAdmin\Plugins;
- use PhpMyAdmin\Properties\Plugins\ExportPluginProperties;
- use PhpMyAdmin\Relation;
- /**
- * Provides a common interface that will have to be implemented by all of the
- * export plugins. Some of the plugins will also implement other public
- * methods, but those are not declared here, because they are not implemented
- * by all export plugins.
- *
- * @package PhpMyAdmin
- */
- abstract class ExportPlugin
- {
- /**
- * PhpMyAdmin\Properties\Plugins\ExportPluginProperties object containing
- * the specific export plugin type properties
- *
- * @var \PhpMyAdmin\Properties\Plugins\ExportPluginProperties
- */
- protected $properties;
- /**
- * @var Relation $relation
- */
- protected $relation;
- /**
- * Constructor
- */
- public function __construct()
- {
- $this->relation = new Relation();
- }
- /**
- * Outputs export header
- *
- * @return bool Whether it succeeded
- */
- abstract public function exportHeader();
- /**
- * Outputs export footer
- *
- * @return bool Whether it succeeded
- */
- abstract public function exportFooter();
- /**
- * Outputs database header
- *
- * @param string $db Database name
- * @param string $db_alias Aliases of db
- *
- * @return bool Whether it succeeded
- */
- abstract public function exportDBHeader($db, $db_alias = '');
- /**
- * Outputs database footer
- *
- * @param string $db Database name
- *
- * @return bool Whether it succeeded
- */
- abstract public function exportDBFooter($db);
- /**
- * Outputs CREATE DATABASE statement
- *
- * @param string $db Database name
- * @param string $export_type 'server', 'database', 'table'
- * @param string $db_alias Aliases of db
- *
- * @return bool Whether it succeeded
- */
- abstract public function exportDBCreate($db, $export_type, $db_alias = '');
- /**
- * Outputs the content of a table
- *
- * @param string $db database name
- * @param string $table table name
- * @param string $crlf the end of line sequence
- * @param string $error_url the url to go back in case of error
- * @param string $sql_query SQL query for obtaining data
- * @param array $aliases Aliases of db/table/columns
- *
- * @return bool Whether it succeeded
- */
- abstract public function exportData(
- $db,
- $table,
- $crlf,
- $error_url,
- $sql_query,
- array $aliases = array()
- );
- /**
- * The following methods are used in export.php or in db_operations.php,
- * but they are not implemented by all export plugins
- */
- /**
- * Exports routines (procedures and functions)
- *
- * @param string $db Database
- * @param array $aliases Aliases of db/table/columns
- *
- * @return bool Whether it succeeded
- */
- public function exportRoutines($db, array $aliases = array())
- {
- ;
- }
- /**
- * Exports events
- *
- * @param string $db Database
- *
- * @return bool Whether it succeeded
- */
- public function exportEvents($db)
- {
- ;
- }
- /**
- * Outputs table's structure
- *
- * @param string $db database name
- * @param string $table table name
- * @param string $crlf the end of line sequence
- * @param string $error_url the url to go back in case of error
- * @param string $export_mode 'create_table','triggers','create_view',
- * 'stand_in'
- * @param string $export_type 'server', 'database', 'table'
- * @param bool $relation whether to include relation comments
- * @param bool $comments whether to include the pmadb-style column comments
- * as comments in the structure; this is deprecated
- * but the parameter is left here because export.php
- * calls exportStructure() also for other export
- * types which use this parameter
- * @param bool $mime whether to include mime comments
- * @param bool $dates whether to include creation/update/check dates
- * @param array $aliases Aliases of db/table/columns
- *
- * @return bool Whether it succeeded
- */
- public function exportStructure(
- $db,
- $table,
- $crlf,
- $error_url,
- $export_mode,
- $export_type,
- $relation = false,
- $comments = false,
- $mime = false,
- $dates = false,
- array $aliases = array()
- ) {
- ;
- }
- /**
- * Exports metadata from Configuration Storage
- *
- * @param string $db database being exported
- * @param string|array $tables table(s) being exported
- * @param array $metadataTypes types of metadata to export
- *
- * @return bool Whether it succeeded
- */
- public function exportMetadata(
- $db,
- $tables,
- array $metadataTypes
- ) {
- ;
- }
- /**
- * Returns a stand-in CREATE definition to resolve view dependencies
- *
- * @param string $db the database name
- * @param string $view the view name
- * @param string $crlf the end of line sequence
- * @param array $aliases Aliases of db/table/columns
- *
- * @return string resulting definition
- */
- public function getTableDefStandIn($db, $view, $crlf, $aliases = array())
- {
- ;
- }
- /**
- * Outputs triggers
- *
- * @param string $db database name
- * @param string $table table name
- *
- * @return string Formatted triggers list
- */
- protected function getTriggers($db, $table)
- {
- ;
- }
- /**
- * Initialize the specific variables for each export plugin
- *
- * @return void
- */
- protected function initSpecificVariables()
- {
- ;
- }
- /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */
- /**
- * Gets the export specific format plugin properties
- *
- * @return ExportPluginProperties
- */
- public function getProperties()
- {
- return $this->properties;
- }
- /**
- * Sets the export plugins properties and is implemented by each export
- * plugin
- *
- * @return void
- */
- abstract protected function setProperties();
- /**
- * The following methods are implemented here so that they
- * can be used by all export plugin without overriding it.
- * Note: If you are creating a export plugin then don't include
- * below methods unless you want to override them.
- */
- /**
- * Initialize aliases
- *
- * @param array $aliases Alias information for db/table/column
- * @param string &$db the database
- * @param string &$table the table
- *
- * @return void
- */
- public function initAlias($aliases, &$db, &$table = null)
- {
- if (!empty($aliases[$db]['tables'][$table]['alias'])) {
- $table = $aliases[$db]['tables'][$table]['alias'];
- }
- if (!empty($aliases[$db]['alias'])) {
- $db = $aliases[$db]['alias'];
- }
- }
- /**
- * Search for alias of a identifier.
- *
- * @param array $aliases Alias information for db/table/column
- * @param string $id the identifier to be searched
- * @param string $type db/tbl/col or any combination of them
- * representing what to be searched
- * @param string $db the database in which search is to be done
- * @param string $tbl the table in which search is to be done
- *
- * @return string alias of the identifier if found or ''
- */
- public function getAlias(array $aliases, $id, $type = 'dbtblcol', $db = '', $tbl = '')
- {
- if (!empty($db) && isset($aliases[$db])) {
- $aliases = array(
- $db => $aliases[$db],
- );
- }
- // search each database
- foreach ($aliases as $db_key => $db) {
- // check if id is database and has alias
- if (stristr($type, 'db') !== false
- && $db_key === $id
- && !empty($db['alias'])
- ) {
- return $db['alias'];
- }
- if (empty($db['tables'])) {
- continue;
- }
- if (!empty($tbl) && isset($db['tables'][$tbl])) {
- $db['tables'] = array(
- $tbl => $db['tables'][$tbl],
- );
- }
- // search each of its tables
- foreach ($db['tables'] as $table_key => $table) {
- // check if id is table and has alias
- if (stristr($type, 'tbl') !== false
- && $table_key === $id
- && !empty($table['alias'])
- ) {
- return $table['alias'];
- }
- if (empty($table['columns'])) {
- continue;
- }
- // search each of its columns
- foreach ($table['columns'] as $col_key => $col) {
- // check if id is column
- if (stristr($type, 'col') !== false
- && $col_key === $id
- && !empty($col)
- ) {
- return $col;
- }
- }
- }
- }
- return '';
- }
- /**
- * Gives the relation string and
- * also substitutes with alias if required
- * in this format:
- * [Foreign Table] ([Foreign Field])
- *
- * @param array $res_rel the foreigners array
- * @param string $field_name the field name
- * @param string $db the field name
- * @param array $aliases Alias information for db/table/column
- *
- * @return string the Relation string
- */
- public function getRelationString(
- array $res_rel,
- $field_name,
- $db,
- array $aliases = array()
- ) {
- $relation = '';
- $foreigner = $this->relation->searchColumnInForeigners($res_rel, $field_name);
- if ($foreigner) {
- $ftable = $foreigner['foreign_table'];
- $ffield = $foreigner['foreign_field'];
- if (!empty($aliases[$db]['tables'][$ftable]['columns'][$ffield])) {
- $ffield = $aliases[$db]['tables'][$ftable]['columns'][$ffield];
- }
- if (!empty($aliases[$db]['tables'][$ftable]['alias'])) {
- $ftable = $aliases[$db]['tables'][$ftable]['alias'];
- }
- $relation = $ftable . ' (' . $ffield . ')';
- }
- return $relation;
- }
- }
|