Merge pull request #14471 from laps15/refactor_tables

Refactor tables' tamplates
This commit is contained in:
Maurício Meneghini Fauth 2018-07-10 20:23:25 -03:00 committed by GitHub
commit ce66ab27ea
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 277 additions and 455 deletions

View File

@ -101,7 +101,7 @@ class Tracking
array $selected,
$type = 'both'
) {
return $this->template->render('table/tracking/create_version', [
return $this->template->render('create_tracking_version', [
'url_query' => $urlQuery,
'last_version' => $lastVersion,
'db' => $db,
@ -156,129 +156,62 @@ class Tracking
}
/**
* Function to get html for displaying last version number
* Function to get html for main page parts that do not use $_REQUEST
*
* @param array $sql_result sql result
* @param int $last_version last version
* @param array $url_params url parameters
* @param string $url_query url query
* @param string $urlQuery url query
* @param array $urlParams url parameters
* @param string $pmaThemeImage path to theme's image folder
* @param string $text_dir text direction
* @param string $textDir text direction
* @param int $lastVersion last tracking version
*
* @return string
*/
public function getHtmlForTableVersionDetails(
$sql_result,
$last_version,
array $url_params,
$url_query,
public function getHtmlForMainPage(
$urlQuery,
$urlParams,
$pmaThemeImage,
$text_dir
$textDir,
$lastVersion = null
) {
$tracking_active = false;
$html = '<form method="post" action="tbl_tracking.php" name="versionsForm"'
. ' id="versionsForm" class="ajax">';
$html .= Url::getHiddenInputs($GLOBALS['db'], $GLOBALS['table']);
$html .= '<table id="versions" class="data">';
$html .= '<thead>';
$html .= '<tr>';
$html .= '<th></th>';
$html .= '<th>' . __('Version') . '</th>';
$html .= '<th>' . __('Created') . '</th>';
$html .= '<th>' . __('Updated') . '</th>';
$html .= '<th>' . __('Status') . '</th>';
$html .= '<th>' . __('Action') . '</th>';
$html .= '<th>' . __('Show') . '</th>';
$html .= '</tr>';
$html .= '</thead>';
$html .= '<tbody>';
$GLOBALS['dbi']->dataSeek($sql_result, 0);
$delete = Util::getIcon('b_drop', __('Delete version'));
$report = Util::getIcon('b_report', __('Tracking report'));
$structure = Util::getIcon('b_props', __('Structure snapshot'));
while ($version = $GLOBALS['dbi']->fetchArray($sql_result)) {
if ($version['version'] == $last_version) {
if ($version['tracking_active'] == 1) {
$tracking_active = true;
} else {
$tracking_active = false;
}
}
$delete_link = 'tbl_tracking.php' . $url_query . '&amp;version='
. htmlspecialchars($version['version'])
. '&amp;submit_delete_version=true';
$checkbox_id = 'selected_versions_' . htmlspecialchars($version['version']);
$html .= '<tr>';
$html .= '<td class="center">';
$html .= '<input type="checkbox" name="selected_versions[]"'
. ' class="checkall" id="' . $checkbox_id . '"'
. ' value="' . htmlspecialchars($version['version']) . '"/>';
$html .= '</td>';
$html .= '<th class="floatright">';
$html .= '<label for="' . $checkbox_id . '">'
. htmlspecialchars($version['version']) . '</label>';
$html .= '</th>';
$html .= '<td>' . htmlspecialchars($version['date_created']) . '</td>';
$html .= '<td>' . htmlspecialchars($version['date_updated']) . '</td>';
$html .= '<td>' . $this->getVersionStatus($version) . '</td>';
$html .= '<td><a class="delete_version_anchor ajax"'
. ' href="' . $delete_link . '" >' . $delete . '</a></td>';
$html .= '<td><a href="tbl_tracking.php';
$html .= Url::getCommon(
$url_params + [
'report' => 'true', 'version' => $version['version']
]
$selectableTablesSqlResult = $this->getSqlResultForSelectableTables();
$selectableTablesEntries = array();
while (($entry = $GLOBALS['dbi']->fetchArray($selectableTablesSqlResult))) {
$entry['is_tracked'] = Tracker::isTracked(
$entry['db_name'],
$entry['table_name']
);
$html .= '">' . $report . '</a>';
$html .= '&nbsp;&nbsp;';
$html .= '<a href="tbl_tracking.php';
$html .= Url::getCommon(
$url_params + [
'snapshot' => 'true', 'version' => $version['version']
]
);
$html .= '">' . $structure . '</a>';
$html .= '</td>';
$html .= '</tr>';
$selectableTablesEntries[] = $entry;
}
$selectableTablesNumRows = $GLOBALS['dbi']->numRows($selectableTablesSqlResult);
$versionSqlResult = $this->getListOfVersionsOfTable();
if ($lastVersion === null) {
$lastVersion = $this->getTableLastVersionNumber($versionSqlResult);
}
$GLOBALS['dbi']->dataSeek($versionSqlResult, 0);
$versions = array();
while ($version = $GLOBALS['dbi']->fetchArray($versionSqlResult)) {
$versions[] = $version;
}
$html .= '</tbody>';
$html .= '</table>';
$type = $GLOBALS['dbi']->getTable($GLOBALS['db'], $GLOBALS['table'])
->isView() ? 'view' : 'table';
$html .= $this->template->render('select_all', [
'pma_theme_image' => $pmaThemeImage,
'text_dir' => $text_dir,
'form_name' => 'versionsForm',
return $this->template->render('table/tracking/main', [
'url_query' => $urlQuery,
'url_params' => $urlParams,
'db' => $GLOBALS['db'],
'table' => $GLOBALS['table'],
'selectable_tables_num_rows' => $selectableTablesNumRows,
'selectable_tables_entries' => $selectableTablesEntries,
'selected_table' => isset($_REQUEST['table']) ? $_REQUEST['table'] : null,
'last_version' => $lastVersion,
'versions' => $versions,
'type' => $type,
'default_statements' => $GLOBALS['cfg']['Server']['tracking_default_statements'],
'pmaThemeImage' => $pmaThemeImage,
'text_dir' => $textDir
]);
$html .= Util::getButtonOrImage(
'submit_mult',
'mult_submit',
__('Delete version'),
'b_drop',
'delete_version'
);
$html .= '</form>';
if ($tracking_active) {
$html .= $this->getHtmlForActivateDeactivateTracking(
'deactivate',
$url_query,
$last_version
);
} else {
$html .= $this->getHtmlForActivateDeactivateTracking(
'activate',
$url_query,
$last_version
);
}
return $html;
}
/**
@ -314,36 +247,6 @@ class Tracking
return $relation->queryAsControlUser($sql_query);
}
/**
* Function to get html for selectable table rows
*
* @param array $selectableTablesSqlResult sql results for selectable rows
* @param string $urlQuery url query
*
* @return string
*/
public function getHtmlForSelectableTables(
$selectableTablesSqlResult,
$urlQuery
) {
$entries = [];
while ($entry = $GLOBALS['dbi']->fetchArray($selectableTablesSqlResult)) {
$entry['is_tracked'] = Tracker::isTracked(
$entry['db_name'],
$entry['table_name']
);
$entries[] = $entry;
}
return $this->template->render('table/tracking/selectable_tables', [
'url_query' => $urlQuery,
'db' => $GLOBALS['db'],
'table' => $GLOBALS['table'],
'entries' => $entries,
'selected_table' => isset($_REQUEST['table']) ? $_REQUEST['table'] : null,
]);
}
/**
* Function to get html for tracking report and tracking report export
*

View File

@ -94,7 +94,7 @@ if (isset($_REQUEST['report_export'])
$tracking->exportAsFileDownload($entries);
}
$html = '<br />';
$html = '<br/>';
/**
* Actions
@ -184,42 +184,14 @@ if (isset($_REQUEST['report']) || isset($_REQUEST['report_export'])) {
/*
* List selectable tables
* Main page
*/
$selectable_tables_sql_result = $tracking->getSqlResultForSelectableTables();
if ($GLOBALS['dbi']->numRows($selectable_tables_sql_result) > 0) {
$html .= $tracking->getHtmlForSelectableTables(
$selectable_tables_sql_result,
$url_query
);
}
$html .= '<br />';
/*
* List versions of current table
*/
$sql_result = $tracking->getListOfVersionsOfTable();
$last_version = $tracking->getTableLastVersionNumber($sql_result);
if ($last_version > 0) {
$html .= $tracking->getHtmlForTableVersionDetails(
$sql_result,
$last_version,
$url_params,
$url_query,
$pmaThemeImage,
$text_dir
);
}
$type = $GLOBALS['dbi']->getTable($GLOBALS['db'], $GLOBALS['table'])
->isView() ? 'view' : 'table';
$html .= $tracking->getHtmlForDataDefinitionAndManipulationStatements(
'tbl_tracking.php' . $url_query,
$last_version,
$GLOBALS['db'],
[$GLOBALS['table']],
$type
);
$html .= $tracking->getHtmlForMainPage(
$url_query,
$url_params,
$pmaThemeImage,
$text_dir
);
$html .= '<br class="clearfloat"/>';

View File

@ -1,27 +0,0 @@
<div>
<form method="post" action="tbl_tracking.php{{ url_query|raw }}">
{{ Url_getHiddenInputs(db, table) }}
<fieldset>
<legend>
{% if action == 'activate' %}
{% set legend = 'Activate tracking for %s'|trans %}
{% set value = 'activate_now' %}
{% set button = 'Activate now'|trans %}
{% elseif action == 'deactivate' %}
{% set legend = 'Deactivate tracking for %s'|trans %}
{% set value = 'deactivate_now' %}
{% set button = 'Deactivate now'|trans %}
{% else %}
{% set legend = '' %}
{% set value = '' %}
{% set button = '' %}
{% endif %}
{{ legend|format(db ~ '.' ~ table) }}
</legend>
<input type="hidden" name="version" value="{{ last_version }}" />
<input type="hidden" name="toggle_activation" value="{{ value }}" />
<input type="submit" value="{{ button }}" />
</fieldset>
</form>
</div>

View File

@ -0,0 +1,128 @@
{% if selectable_tables_num_rows > 0 %}
<form method="post" action="tbl_tracking.php{{ url_query|raw }}">
{{ Url_getHiddenInputs(db, table) }}
<select name="table" class="autosubmit">
{% for entry in selectable_tables_entries %}
<option value="{{ entry.table_name }}"
{{- entry.table_name == selected_table ? ' selected' }}>
{{ entry.db_name }}.{{ entry.table_name }}
{% if entry.is_tracked %}
({% trans 'active' %})
{% else %}
({% trans 'not active' %})
{% endif %}
</option>
{% endfor %}
</select>
<input type="hidden" name="show_versions_submit" value="1">
</form>
{% endif %}
<br/>
{% if last_version > 0 %}
<form method="post" action="tbl_tracking.php" name="versionsForm" id="versionsForm" class="ajax">
{{ Url_getHiddenInputs(db, table) }}
<table id="versions" class="data">
<thead>
<tr>
<th></th>
<th>{% trans 'Version' %}</th>
<th>{% trans 'Created' %}</th>
<th>{% trans 'Updated' %}</th>
<th>{% trans 'Status' %}</th>
<th>{% trans 'Action' %}</th>
<th>{% trans 'Show' %}</th>
</tr>
</thead>
<tbody>
{% for version in versions %}
<tr>
<td class="center">
<input type="checkbox" name="selected_versions[]"
class="checkall" id="selected_versions_{{- version['version']|escape }}"
value="{{- version['version']|escape }}"/>
</td>
<td class="floatright">
<label for="selected_versions_{{- version['version']|escape }}">
<b>{{ version['version']|escape }}</b>
</label>
</td>
<td>{{ version['date_created']|escape }}</td>
<td>{{ version['date_updated']|escape }}</td>
{% if version['tracking_active'] == 1 %}
{% set last_version_status = 1 %}
<td>{% trans 'active' %}</td>
{% else %}
{% set last_version_status = 0 %}
<td>{% trans 'not active' %}</td>
{% endif %}
<td>
<a class="delete_version_anchor ajax" href="tbl_tracking.php{{- url_query|raw -}}&version=
{{- version['version']|escape -}}&submit_delete_version=true">
{{ Util_getIcon('b_drop', 'Delete version'|trans) }}
</a>
</td>
<td>
<a href="tbl_tracking.php
{{- Url_getCommon(
url_params|merge({'report': 'true', 'version': version['version']})
) -}}">
{{ Util_getIcon('b_report', 'Tracking report'|trans) }}
</a>
&nbsp;&nbsp;
<a href="tbl_tracking.php
{{- Url_getCommon(
url_params|merge({'snapshot': 'true', 'version': version['version']})
) -}}">
{{ Util_getIcon('b_props', 'Structure snapshot'|trans) }}
</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% include 'select_all.twig' with {
'pma_theme_image': pmaThemeImage,
'text_dir': text_dir,
'form_name': 'versionsForm',
} only %}
{{ Util_getButtonOrImage(
'submit_mult',
'mult_submit',
'Delete version'|trans,
'b_drop',
'delete_version'
) }}
</form>
{% set last_version_element = versions|first %}
<div>
<form method="post" action="tbl_tracking.php{{ url_query|raw }}">
{{ Url_getHiddenInputs(db, table) }}
<fieldset>
<legend>
{% if last_version_element['tracking_active'] == 0 %}
{% set legend = 'Activate tracking for %s'|trans %}
{% set value = 'activate_now' %}
{% set button = 'Activate now'|trans %}
{% else %}
{% set legend = 'Deactivate tracking for %s'|trans %}
{% set value = 'deactivate_now' %}
{% set button = 'Deactivate now'|trans %}
{% endif %}
{{ legend|format(db ~ '.' ~ table) }}
</legend>
<input type="hidden" name="version" value="{{ last_version }}" />
<input type="hidden" name="toggle_activation" value="{{ value }}" />
<input type="submit" value="{{ button }}" />
</fieldset>
</form>
</div>
{% endif %}
{% include 'create_tracking_version.twig' with {
'url_query': url_query,
'last_version': last_version,
'db': db,
'selected': [table],
'type': type,
'default_statements': default_statements,
} only %}

View File

@ -1,17 +0,0 @@
<form method="post" action="tbl_tracking.php{{ url_query|raw }}">
{{ Url_getHiddenInputs(db, table) }}
<select name="table" class="autosubmit">
{% for entry in entries %}
<option value="{{ entry.table_name }}"
{{- entry.table_name == selected_table ? ' selected' }}>
{{ entry.db_name }} . {{ entry.table_name }}
{% if entry.is_tracked %}
({% trans 'active' %})
{% else %}
({% trans 'not active' %})
{% endif %}
</option>
{% endfor %}
</select>
<input type="hidden" name="show_versions_submit" value="1">
</form>

View File

@ -163,17 +163,84 @@ class TrackingTest extends TestCase
* @return void
* @test
*/
public function testGetHtmlForDataDefinitionAndManipulationStatements()
public function testGetHtmlForMain()
{
$url_query = "url_query";
$last_version = 10;
$html = $this->tracking->getHtmlForDataDefinitionAndManipulationStatements(
$sql_result = true;
$last_version = 3;
$url_params = [];
$url_query = "select * from PMA";
$pmaThemeImage = "themePath/img";
$text_dir = "ltr";
// Mock dbi
$dbi_old = $GLOBALS['dbi'];
$dbi = $this->getMockBuilder('PhpMyAdmin\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$fetchArray = [
'tracking_active' => 1,
'version' => 1,
'db_name' => 'db_name',
'table_name' => 'table_name',
'date_created' => 'date_created',
'date_updated' => 'date_updated'
];
// return fetchArray for selectable entries
for ($i = 2; $i < 6; $i++) {
$dbi->expects($this->at($i))
->method('fetchArray')
->will($this->returnValue($fetchArray));
}
$dbi->expects($this->at(6))
->method('fetchArray')
->will($this->returnValue(false));
// return fetchArray for Activate/Deactivate tracking
for ($i = 7; $i < 13; $i++) {
$dbi->expects($this->at($i))
->method('fetchArray')
->will($this->returnValue($fetchArray));
}
$dbi->expects($this->at(13))
->method('fetchArray')
->will($this->returnValue(false));
$dbi->method('numRows')
->will($this->returnValue(1));
$GLOBALS['dbi'] = $dbi;
$html = $this->tracking->getHtmlForMainPage(
$url_query,
$last_version,
$GLOBALS['db'],
[$GLOBALS['table']]
$url_params,
$pmaThemeImage,
$text_dir,
$last_version
);
/*
* test selectables panel
*/
$this->assertContains(
htmlspecialchars($fetchArray['db_name']) . '.' . htmlspecialchars($fetchArray['table_name']),
$html
);
/*
* test versions table
*/
$this->assertContains(
"<td>date_created</td>",
$html
);
$this->assertContains(
__('Delete version'),
$html
);
/*
* test create panel
*/
$this->assertContains(
'<div id="div_create_version">',
$html
@ -210,77 +277,33 @@ class TrackingTest extends TestCase
__('Create version'),
$html
);
}
/**
* Tests for getHtmlForActivateDeactivateTracking() method.
*
* @return void
* @test
*/
public function testGetHtmlForActivateDeactivateTracking()
{
$url_query = "url_query";
$last_version = "10";
$html = $this->tracking->getHtmlForActivateDeactivateTracking(
'activate',
/*
* test deactivate/activate panel
*/
$this->assertContains(
'Deactivate now',
$html
);
$fetchArray['tracking_active'] = 0;
$dbi->expects($this->at(9))
->method('fetchArray')
->will($this->returnValue($fetchArray));
$GLOBALS['dbi'] = $dbi;
$html = $this->tracking->getHtmlForMainPage(
$url_query,
$url_params,
$pmaThemeImage,
$text_dir,
$last_version
);
$this->assertContains(
'Activate now',
$html
);
$this->assertContains(
$url_query,
$html
);
$item = sprintf(
__('Activate tracking for %s'),
htmlspecialchars($GLOBALS['db'] . '.' . $GLOBALS['table'])
);
$this->assertContains(
$item,
$html
);
$this->assertContains(
$last_version,
$html
);
$this->assertContains(
__('Activate now'),
$html
);
$html = $this->tracking->getHtmlForActivateDeactivateTracking(
'deactivate',
$url_query,
$last_version
);
$this->assertContains(
$url_query,
$html
);
$item = sprintf(
__('Deactivate tracking for %s'),
htmlspecialchars($GLOBALS['db'] . '.' . $GLOBALS['table'])
);
$this->assertContains(
$item,
$html
);
$this->assertContains(
$last_version,
$html
);
$this->assertContains(
__('Deactivate now'),
$html
);
//restore DBI
$GLOBALS['dbi'] = $dbi_old;
}
/**
@ -431,166 +454,6 @@ class TrackingTest extends TestCase
);
}
/**
* Tests for getHtmlForTableVersionDetails() method.
*
* @return void
* @test
*/
public function testGetHtmlForTableVersionDetails()
{
$sql_result = true;
$last_version = "10";
$url_params = [];
$url_query = "select * from PMA";
$pmaThemeImage = "themePath/img";
$text_dir = "ltr";
$dbi_old = $GLOBALS['dbi'];
$dbi = $this->getMockBuilder('PhpMyAdmin\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$fetchArray = [
'tracking_active' => 1,
'version' => "10",
'db_name' => 'db_name',
'table_name' => 'table_name',
'date_created' => 'date_created',
'date_updated' => 'date_updated'
];
$dbi->expects($this->at(0))
->method('fetchArray')
->will($this->returnValue($fetchArray));
$dbi->expects($this->at(1))
->method('fetchArray')
->will($this->returnValue($fetchArray));
$dbi->expects($this->at(2))
->method('fetchArray')
->will($this->returnValue(false));
$GLOBALS['dbi'] = $dbi;
$ret = $this->tracking->getHtmlForTableVersionDetails(
$sql_result,
$last_version,
$url_params,
$url_query,
$pmaThemeImage,
$text_dir
);
$this->assertContains(
__('Version'),
$ret
);
$this->assertContains(
__('Created'),
$ret
);
$this->assertContains(
__('Updated'),
$ret
);
$this->assertContains(
__('Status'),
$ret
);
$this->assertContains(
__('Action'),
$ret
);
$this->assertContains(
__('Show'),
$ret
);
$this->assertContains(
$fetchArray['version'],
$ret
);
$this->assertContains(
$fetchArray['date_created'],
$ret
);
$this->assertContains(
$fetchArray['date_updated'],
$ret
);
$this->assertContains(
__('Tracking report'),
$ret
);
$this->assertContains(
__('Structure snapshot'),
$ret
);
$html = sprintf(
__('Deactivate tracking for %s'),
htmlspecialchars($GLOBALS['db'] . '.' . $GLOBALS['table'])
);
$this->assertContains(
$html,
$ret
);
//restore DBI
$GLOBALS['dbi'] = $dbi_old;
}
/**
* Tests for getHtmlForSelectableTables() method.
*
* @return void
* @test
*/
public function testGetHtmlForSelectableTables()
{
$selectable_tables_sql_result = true;
$url_query = "select * from PMA";
$dbi_old = $GLOBALS['dbi'];
$dbi = $this->getMockBuilder('PhpMyAdmin\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$fetchArray = [
'tracking_active' => 1,
'version' => "10",
'db_name' => 'db_name',
'table_name' => 'table_name',
'date_created' => 'date_created',
'date_updated' => 'date_updated'
];
$dbi->expects($this->at(0))
->method('fetchArray')
->will($this->returnValue($fetchArray));
$dbi->expects($this->at(1))
->method('fetchArray')
->will($this->returnValue($fetchArray));
$dbi->expects($this->at(2))
->method('fetchArray')
->will($this->returnValue(false));
$GLOBALS['dbi'] = $dbi;
$ret = $this->tracking->getHtmlForSelectableTables(
$selectable_tables_sql_result,
$url_query
);
$this->assertContains(
htmlspecialchars($fetchArray['table_name']),
$ret
);
$this->assertContains(
htmlspecialchars($fetchArray['db_name']),
$ret
);
//restore DBI
$GLOBALS['dbi'] = $dbi_old;
}
/**
* Tests for getHtmlForTrackingReport() method.
*