Templating Console.php, Issue#12007
This commit is contained in:
Atul Pratap Singh 2016-02-29 12:50:59 +05:30
commit 027d5d963a
5 changed files with 303 additions and 266 deletions

View File

@ -6,6 +6,7 @@
* @package PhpMyAdmin
*/
namespace PMA\libraries;
use PMA\libraries\Template;
if (! defined('PHPMYADMIN')) {
exit;
@ -77,25 +78,12 @@ class Console
*/
public static function getBookmarkContent()
{
$output = '';
$cfgBookmark = PMA_Bookmark_getParams();
if ($cfgBookmark) {
$tpl_bookmark_actions
= '<span class="action collapse">' . __('Collapse') . '</span> '
. '<span class="action expand">' . __('Expand') . '</span> '
. '<span class="action requery">' . __('Requery') . '</span> '
. '<span class="action edit_bookmark">' . __('Edit') . '</span> '
. '<span class="action delete_bookmark">' . __('Delete')
. '</span> '
. '<span class="text targetdb">' . __('Database')
. ': <span>%s</span></span>';
$bookmarks = PMA_Bookmark_getList();
$output .= '<div class="message welcome"><span>';
$count_bookmarks = count($bookmarks);
if ($count_bookmarks > 0) {
$output .= sprintf(
$welcomeMessage = sprintf(
_ngettext(
'Showing %1$d bookmark (both private and shared)',
'Showing %1$d bookmarks (both private and shared)',
@ -104,24 +92,18 @@ class Console
$count_bookmarks
);
} else {
$output .= __('No bookmarks');
$welcomeMessage = __('No bookmarks');
}
unset($count_bookmarks, $private_message, $shared_message);
$output .= '</span></div>';
foreach ($bookmarks as $val) {
$output .= '<div class="message collapsed bookmark" bookmarkid="'
. $val['id'] . '" targetdb="' . htmlspecialchars($val['db'])
. '"><div class="action_content">'
. sprintf($tpl_bookmark_actions, htmlspecialchars($val['db']))
. '</div><span class="bookmark_label '
. ($val['shared'] ? 'shared' : '') . '">'
. htmlspecialchars($val['label'])
. '</span> <span class="query">'
. htmlspecialchars($val['query'])
. '</span></div>';
}
return Template::get('console/bookmark_content')
->render(
array(
'welcomeMessage' => $welcomeMessage,
'bookmarks' => $bookmarks,
)
);
}
return $output;
return '';
}
/**
@ -134,48 +116,6 @@ class Console
return array('console.js');
}
/**
* Gets the history
*
* @param string $tpl_query_actions the template for query actions
*
* @return string $output the generated HTML for history
*
* @access private
*
*/
private function _getHistory($tpl_query_actions)
{
$output = '';
$_sql_history = PMA_getHistory($GLOBALS['cfg']['Server']['user']);
if (! empty($_sql_history)) {
foreach (array_reverse($_sql_history) as $record) {
$isSelect = preg_match(
'@^SELECT[[:space:]]+@i', $record['sqlquery']
);
$output .= '<div class="message history collapsed hide'
. ($isSelect ? ' select' : '')
. '" targetdb="'
. htmlspecialchars($record['db'])
. '" targettable="' . htmlspecialchars($record['table'])
. '"><div class="action_content">'
. sprintf(
$tpl_query_actions,
htmlspecialchars($record['db']),
(isset($record['timevalue'])
? $record['timevalue']
: __('During current session')
)
)
. '</div><span class="query">'
. htmlspecialchars($record['sqlquery'])
. '</span></div>';
}
}
return $output;
}
/**
* Renders the console
*
@ -184,206 +124,24 @@ class Console
*/
public function getDisplay()
{
$output = '';
if ((! $this->_isAjax) && $this->_isEnabled) {
$cfgBookmark = PMA_Bookmark_getParams();
$output .= '<div id="pma_console_container"><div id="pma_console">';
// The templates, use sprintf() to output them
// There're white space at the end of every <span>,
// for double-click selection
$tpl_query_actions = '<span class="action collapse">' . __('Collapse')
. '</span> '
. '<span class="action expand">' . __('Expand') . '</span> '
. '<span class="action requery">' . __('Requery') . '</span> '
. '<span class="action edit">' . __('Edit') . '</span> '
. '<span class="action explain">' . __('Explain') . '</span> '
. '<span class="action profiling">' . __('Profiling') . '</span> '
. ($cfgBookmark ? '<span class="action bookmark">'
. __('Bookmark') . '</span> ' : '')
. '<span class="text failed">' . __('Query failed') . '</span> '
. '<span class="text targetdb">' . __('Database')
. ': <span>%s</span></span> '
. '<span class="text query_time">' . __(
'Queried time'
) . ': <span>%s</span></span> ';
$image = Util::getImage('console.png', __('SQL Query Console'));
$_sql_history = PMA_getHistory($GLOBALS['cfg']['Server']['user']);
$bookmarkContent = static::getBookmarkContent();
// Console toolbar
$output .= '<div class="toolbar collapsed">';
$output .= '<div class="switch_button console_switch">';
$output .= Util::getImage('console.png', __('SQL Query Console'));
$output .= '<span>' . __('Console') . '</span></div>';
$output .= '<div class="button clear"><span>'
. __('Clear') . '</span></div>';
$output .= '<div class="button history"><span>'
. __('History') . '</span></div>';
$output .= '<div class="button options"><span>'
. __('Options') . '</span></div>';
if ($cfgBookmark) {
$output .= '<div class="button bookmarks"><span>'
. __('Bookmarks') . '</span></div>';
}
$output .= '<div class="button debug hide"><span>'
. __('Debug SQL') . '</span></div>';
$output .= '</div>'; // Toolbar end
// Console messages
$output .= '<div class="content">';
$output .= '<div class="console_message_container">'
. '<div class="message welcome"><span>'
. '<span id="instructions-0">'
. __('Press Ctrl+Enter to execute query') . '</span>'
. '<span class="hide" id="instructions-1">'
. __('Press Enter to execute query') . '</span>'
. '</span></div>';
$output .= $this->_getHistory($tpl_query_actions);
$output .= '</div>'; // .console_message_container
$output .= '<div class="query_input">'
. '<span class="console_query_input"></span>'
. '</div>';
$output .= '</div>'; // Messages end
// Dark the console while other cards cover it
$output .= '<div class="mid_layer"></div>';
// Debug SQL card
$output .= '<div class="card" id="debug_console">';
$output .= '<div class="toolbar">'
. '<div class="button order order_asc">'
. '<span>' . __('ascending') . '</span>'
. '</div>'
. '<div class="button order order_desc">'
. '<span>' . __('descending') . '</span>'
. '</div>'
. '<div class="text">'
. '<span>' . __('Order:') . '</span>'
. '</div>'
. '<div class="switch_button">'
. '<span>' . __('Debug SQL') . '</span>'
. '</div>'
. '<div class="button order_by sort_count">'
. '<span>' . __('Count') . '</span>'
. '</div>'
. '<div class="button order_by sort_exec">'
. '<span>' . __('Execution order') . '</span>'
. '</div>'
. '<div class="button order_by sort_time">'
. '<span>' . __('Time taken') . '</span>'
. '</div>'
. '<div class="text">'
. '<span>' . __('Order by:') . '</span>'
. '</div>'
. '<div class="button group_queries">'
. '<span>' . __('Group queries') . '</span>'
. '</div>'
. '<div class="button ungroup_queries">'
. '<span>' . __('Ungroup queries') . '</span>'
. '</div>'
. '</div>'; // Toolbar
$output .= '<div class="content debug">';
$output .= '<div class="message welcome"></div>';
$output .= '<div class="debugLog"></div>';
$output .= '</div>'; // Content
$output .= '<div class="templates">'
. '<div class="debug_query action_content">'
. '<span class="action collapse">' . __('Collapse') . '</span> '
. '<span class="action expand">' . __('Expand') . '</span> '
. '<span class="action dbg_show_trace">' . __('Show trace')
. '</span> '
. '<span class="action dbg_hide_trace">' . __('Hide trace')
. '</span> '
. '<span class="text count hide">' . __('Count:')
. ' <span></span></span>'
. '<span class="text time">' . __('Time taken:')
. ' <span></span></span>'
. '</div>'
. '</div>'; // Template
$output .= '</div>'; // Debug SQL card
// Bookmarks card:
if ($cfgBookmark) {
$output .= '<div class="card" id="pma_bookmarks">';
$output .= '<div class="toolbar">'
. '<div class="switch_button"><span>' . __('Bookmarks')
. '</span></div>';
$output .= '<div class="button refresh"><span>'
. __('Refresh') . '</span></div>';
$output .= '<div class="button add"><span>'
. __('Add') . '</span></div>';
$output .= '</div><div class="content bookmark">';
$output .= static::getBookmarkContent();
$output .= '</div>';
$output .= '<div class="mid_layer"></div>';
$output .= '<div class="card add">';
$output .= '<div class="toolbar">'
. '<div class="switch_button"><span>'
. __('Add bookmark')
. '</span></div>';
$output .= '</div><div class="content add_bookmark">'
. '<div class="options">'
. '<label>' . __('Label')
. ': <input type="text" name="label"></label> '
. '<label>' . __('Target database')
. ': <input type="text" name="targetdb"></label> '
. '<label><input type="checkbox" name="shared">'
. __('Share this bookmark') . '</label>'
. '<button type="submit" name="submit">Ok</button>'
. '</div>' // .options
. '<div class="query_input">'
. '<span class="bookmark_add_input"></span></div>';
$output .= '</div>';
$output .= '</div>'; // Add bookmark card
$output .= '</div>'; // Bookmarks card
}
// Options card:
$output .= '<div class="card" id="pma_console_options">';
$output .= '<div class="toolbar">'
. '<div class="switch_button"><span>' . __('Options')
. '</span></div>';
$output .= '<div class="button default"><span>'
. __('Set default') . '</span></div>';
$output .= '</div><div class="content">'
. '<label><input type="checkbox" name="always_expand">'
. __('Always expand query messages') . '</label><br>'
. '<label><input type="checkbox" name="start_history">'
. __('Show query history at start') . '</label><br>'
. '<label><input type="checkbox" name="current_query">'
. __('Show current browsing query') . '</label><br>'
. '<label><input type="checkbox" name="enter_executes">'
. __(
'Execute queries on Enter and insert new line with Shift + '
. 'Enter. To make this permanent, view settings.'
) . '</label><br>'
. '<label><input type="checkbox" name="dark_theme">'
. __('Switch to dark theme') . '</label><br>'
. '</div>';
$output .= '</div>'; // Options card
$output .= '<div class="templates">'
// Templates for console message actions
. '<div class="query_actions">'
. sprintf($tpl_query_actions, '', '')
. '</div>'
. '</div>';
$output .= '</div></div>'; // #console and #pma_console_container ends
return Template::get('console/display')
->render(
array(
'cfgBookmark' => $cfgBookmark,
'image' => $image,
'_sql_history' => $_sql_history,
'bookmarkContent' => $bookmarkContent,
)
);
}
return $output;
return '';
}
}

View File

@ -0,0 +1,30 @@
<div class="message welcome">
<span> <?= $welcomeMessage ; ?> </span>
</div>
<?php
foreach ($bookmarks as $val): ?>
<div class="message collapsed bookmark" bookmarkid="<?= $val['id']; ?>"
targetdb="<?= htmlspecialchars($val['db']) ?>">
<?= PMA\libraries\Template::get('console/query_action')
->render(
array(
'parentDivClasses' => 'action_content',
'contentArray' => [
['action collapse', __('Collapse')],
['action expand', __('Expand')],
['action requery', __('Requery')],
['action edit_bookmark', __('Edit')],
['action delete_bookmark', __('Delete')],
['text targetdb', __('Database'), 'extraSpan' => htmlspecialchars($val['db'])],
]
)
);
?>
<span class="bookmark_label <?= ($val['shared'] ? 'shared' : ''); ?>">
<?= htmlspecialchars($val['label']) ; ?>
</span>
<span class="query">
<?= htmlspecialchars($val['query']) ; ?>
</span>
</div>
<?php endforeach; ?>

View File

@ -0,0 +1,227 @@
<div id="pma_console_container">
<div id="pma_console">
<!-- Console toolbar -->
<?= PMA\libraries\Template::get('console/toolbar')
->render(
array(
'parentDivClasses' => 'collapsed',
'contentArray' => [
['switch_button console_switch', __('Console'),'image'=> $image],
['button clear', __('Clear')],
['button history', __('History')],
['button options', __('Options')],
isset($cfgBookmark)
? ['button bookmarks', __('Bookmarks')] : null,
['button debug hide', __('Debug SQL')],
],
)
);
?>
<!-- Toolbar end -->
<!-- Console messages -->
<div class="content">
<div class="console_message_container">
<div class="message welcome">
<span id="instructions-0">
<?= __('Press Ctrl+Enter to execute query') ; ?>
</span>
<span class="hide" id="instructions-1">
<?= __('Press Enter to execute query') ; ?>
</span>
</div>
<?php if (! empty($_sql_history)):
foreach (array_reverse($_sql_history) as $record):
$isSelect = preg_match(
'@^SELECT[[:space:]]+@i', $record['sqlquery']
);
$queriedTime = isset($record['timevalue'])
? $record['timevalue']
: __('During current session');
?>
<div class="message history collapsed hide <?= ($isSelect ? 'select' : '') ; ?>"
targetdb="<?= htmlspecialchars($record['db']) ; ?>" targettable="<?= htmlspecialchars($record['table']) ; ?>">
<?= PMA\libraries\Template::get('console/query_action')
->render(
array(
'parentDivClasses' => 'action_content',
'contentArray' => [
['action collapse', __('Collapse')],
['action expand', __('Expand')],
['action requery', __('Requery')],
['action edit', __('Edit')],
['action explain', __('Explain')],
['action profiling', __('Profiling')],
isset($cfgBookmark)
? ['action bookmark', __('Bookmark')] : null,
['text failed', __('Query failed')],
['text targetdb', __('Database'), 'extraSpan' => htmlspecialchars($record['db'])],
['text query_time', __('Queried time'), 'extraSpan' => $queriedTime],
],
)
);
?>
<span class="query"> <?= htmlspecialchars($record['sqlquery']) ; ?> </span>
</div>
<?php endforeach ;
endif ; ?>
</div> <!-- console_message_container -->
<div class="query_input">
<span class="console_query_input"></span>
</div>
</div> <!-- message end -->
<!-- Drak the console with other cards over it -->
<div class="mid_layer"></div>
<!-- Debug SQL card -->
<div class="card" id="debug_console">
<?= PMA\libraries\Template::get('console/toolbar')
->render(
array(
'parentDivClasses' => '',
'contentArray' => [
['button order order_asc', __('ascending')],
['button order order_desc', __('descending')],
['text', __('Order:')],
['switch_button', __('Debug SQL')],
['button order_by sort_count', __('Count')],
['button order_by sort_exec', __('Execution order')],
['button order_by sort_time', __('Time taken')],
['text', __('Order by:')],
['button group_queries', __('Group queries')],
['button ungroup_queries', __('Ungroup queries')],
]
)
);
?>
<div class="content debug">
<div class="message welcome"></div>
<div class="debugLog"></div>
</div> <!-- Content -->
<div class="templates">
<?= PMA\libraries\Template::get('console/query_action')
->render(
array(
'parentDivClasses' => 'debug_query action_content',
'contentArray' => [
['action collapse', __('Collapse')],
['action expand', __('Expand')],
['action dbg_show_trace', __('Show trace')],
['action dbg_hide_trace', __('Hide trace')],
['text count hide', __('Count'), 'extraSpan' => ''],
['text time', __('Time taken'), 'extraSpan' => ''],
]
)
);
?>
</div> <!-- Template -->
</div> <!-- Debug SQL card -->
<?php if ($cfgBookmark): ?>
<div class="card" id="pma_bookmarks">
<?= PMA\libraries\Template::get('console/toolbar')
->render(
array(
'parentDivClasses' => '',
'contentArray' => [
['switch_button', __('Bookmarks')],
['button refresh', __('Refresh')],
['button add', __('Add')],
]
)
);
?>
<div class="content bookmark">
<?= $bookmarkContent ; ?>
</div>
<div class="mid_layer"></div>
<div class="card add">
<?= PMA\libraries\Template::get('console/toolbar')
->render(
array(
'parentDivClasses' => '',
'contentArray' => [
['switch_button', __('Add bookmark')]
]
)
);
?>
<div class="content add_bookmark">
<div class="options">
<label>
<?= __('Label') ; ?>: <input type="text" name="label">
</label>
<label>
<?= __('Target database') ; ?>: <input type="text" name="targetdb">
</label>
<label>
<input type="checkbox" name="shared"> <?= __('Share this bookmark') ; ?>
</label>
<button type="submit" name="submit">OK</button>
</div> <!-- options -->
<div class="query_input">
<span class="bookmark_add_input"></span>
</div>
</div>
</div> <!-- Add bookmark card -->
</div> <!-- Bookmarks card -->
<?php endif ; ?>
<!-- Options card: -->
<div class="card" id="pma_console_options">
<?= PMA\libraries\Template::get('console/toolbar')
->render(
array(
'parentDivClasses' => '',
'contentArray' => [
['switch_button', __('Options')],
['button default', __('Set default')]
]
)
);
?>
<div class="content">
<label>
<input type="checkbox" name="always_expand"><?= __('Always expand query messages') ; ?>
</label>
<br>
<label>
<input type="checkbox" name="start_history"><?= __('Show query history at start') ; ?>
</label>
<br>
<label>
<input type="checkbox" name="current_query"><?= __('Sow current browsing query') ; ?>
</label>
<br>
<label>
<input type="checkbox" name="enter_executes">
<?= __('Execute queries on Enter and insert new line with Shift + Enter. To make this permanent, view settings.') ; ?>
</label>
<br>
<label>
<input type="checkbox" name="dark_theme"><?= __('Switch to dark theme') ; ?>
</label>
<br>
</div>
</div> <!-- Options card -->
<div class="templates">
<!-- Templates for console message actions -->
<?= PMA\libraries\Template::get('console/query_action')
->render(
array(
'parentDivClasses' => 'query_actions',
'contentArray' => [
['action collapse', __('Collapse')],
['action expand', __('Expand')],
['action requery', __('Requery')],
['action edit', __('Edit')],
['action explain', __('Explain')],
['action profiling', __('Profiling')],
isset($cfgBookmark)
? ['action bookmark', __('Bookmark')] : null,
['text failed', __('Query failed')],
['text targetdb', __('Database'), 'extraSpan' => ''],
['text query_time', __('Queried time'), 'extraSpan' => ''],
],
)
);
?>
</div>
</div> <!-- #console end -->
</div> <!-- #console_container end -->

View File

@ -0,0 +1,12 @@
<div class="<?= $parentDivClasses ; ?>">
<?php foreach ($contentArray as $content):
if (isset($content)): ?>
<span class="<?= $content[0] ?>">
<?= $content[1] ; ?>
<?php if(isset($content['extraSpan'])): ?>
: <span> <?= $content['extraSpan'] ?> </span>
<?php endif ; ?>
</span>
<?php endif ;
endforeach ; ?>
</div>

View File

@ -0,0 +1,10 @@
<div class="toolbar <?= $parentDivClasses ?>">
<?php foreach ($contentArray as $content) :
if (isset($content)): ?>
<div class="<?= $content[0] ?>">
<?= isset($content['image']) ? $content['image'] : '' ?>
<span> <?= $content[1] ?> </span>
</div>
<?php endif ;
endforeach ; ?>
</div>