123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263 |
- <?php
- /* vim: set expandtab sw=4 ts=4 sts=4: */
- /**
- * Holds the PhpMyAdmin\Controllers\Server\ServerBinlogController
- *
- * @package PhpMyAdmin\Controllers
- */
- namespace PhpMyAdmin\Controllers\Server;
- use PhpMyAdmin\Controllers\Controller;
- use PhpMyAdmin\DatabaseInterface;
- use PhpMyAdmin\Message;
- use PhpMyAdmin\Server\Common;
- use PhpMyAdmin\Template;
- use PhpMyAdmin\Url;
- use PhpMyAdmin\Util;
- /**
- * Handles viewing binary logs
- *
- * @package PhpMyAdmin\Controllers
- */
- class ServerBinlogController extends Controller
- {
- /**
- * array binary log files
- */
- protected $binary_logs;
- /**
- * Constructs ServerBinlogController
- */
- public function __construct($response, $dbi)
- {
- parent::__construct($response, $dbi);
- $this->binary_logs = $this->dbi->fetchResult(
- 'SHOW MASTER LOGS',
- 'Log_name',
- null,
- DatabaseInterface::CONNECT_USER,
- DatabaseInterface::QUERY_STORE
- );
- }
- /**
- * Index action
- *
- * @return void
- */
- public function indexAction()
- {
- /**
- * Does the common work
- */
- include_once 'libraries/server_common.inc.php';
- $url_params = array();
- if (! isset($_POST['log'])
- || ! array_key_exists($_POST['log'], $this->binary_logs)
- ) {
- $_POST['log'] = '';
- } else {
- $url_params['log'] = $_POST['log'];
- }
- if (!empty($_POST['dontlimitchars'])) {
- $url_params['dontlimitchars'] = 1;
- }
- $this->response->addHTML(
- Template::get('server/sub_page_header')->render([
- 'type' => 'binlog',
- ])
- );
- $this->response->addHTML($this->_getLogSelector($url_params));
- $this->response->addHTML($this->_getLogInfo($url_params));
- }
- /**
- * Returns the html for log selector.
- *
- * @param array $url_params links parameters
- *
- * @return string
- */
- private function _getLogSelector(array $url_params)
- {
- return Template::get('server/binlog/log_selector')->render(
- array(
- 'url_params' => $url_params,
- 'binary_logs' => $this->binary_logs,
- 'log' => $_POST['log'],
- )
- );
- }
- /**
- * Returns the html for binary log information.
- *
- * @param array $url_params links parameters
- *
- * @return string
- */
- private function _getLogInfo(array $url_params)
- {
- /**
- * Need to find the real end of rows?
- */
- if (! isset($_POST['pos'])) {
- $pos = 0;
- } else {
- /* We need this to be a integer */
- $pos = (int) $_POST['pos'];
- }
- $sql_query = 'SHOW BINLOG EVENTS';
- if (! empty($_POST['log'])) {
- $sql_query .= ' IN \'' . $_POST['log'] . '\'';
- }
- $sql_query .= ' LIMIT ' . $pos . ', ' . intval($GLOBALS['cfg']['MaxRows']);
- /**
- * Sends the query
- */
- $result = $this->dbi->query($sql_query);
- /**
- * prepare some vars for displaying the result table
- */
- // Gets the list of fields properties
- if (isset($result) && $result) {
- $num_rows = $this->dbi->numRows($result);
- } else {
- $num_rows = 0;
- }
- if (empty($_POST['dontlimitchars'])) {
- $dontlimitchars = false;
- } else {
- $dontlimitchars = true;
- $url_params['dontlimitchars'] = 1;
- }
- //html output
- $html = Util::getMessage(Message::success(), $sql_query);
- $html .= '<table id="binlogTable">'
- . '<thead>'
- . '<tr>'
- . '<td colspan="6" class="center">';
- $html .= $this->_getNavigationRow($url_params, $pos, $num_rows, $dontlimitchars);
- $html .= '</td>'
- . '</tr>'
- . '<tr>'
- . '<th>' . __('Log name') . '</th>'
- . '<th>' . __('Position') . '</th>'
- . '<th>' . __('Event type') . '</th>'
- . '<th>' . __('Server ID') . '</th>'
- . '<th>' . __('Original position') . '</th>'
- . '<th>' . __('Information') . '</th>'
- . '</tr>'
- . '</thead>'
- . '<tbody>';
- $html .= $this->_getAllLogItemInfo($result, $dontlimitchars);
- $html .= '</tbody>'
- . '</table>';
- return $html;
- }
- /**
- * Returns the html for Navigation Row.
- *
- * @param array $url_params Links parameters
- * @param int $pos Position to display
- * @param int $num_rows Number of results row
- * @param bool $dontlimitchars Whether limit chars
- *
- * @return string
- */
- private function _getNavigationRow(array $url_params, $pos, $num_rows, $dontlimitchars)
- {
- $html = "";
- // we do not know how much rows are in the binlog
- // so we can just force 'NEXT' button
- if ($pos > 0) {
- $this_url_params = $url_params;
- if ($pos > $GLOBALS['cfg']['MaxRows']) {
- $this_url_params['pos'] = $pos - $GLOBALS['cfg']['MaxRows'];
- }
- $html .= '<a href="server_binlog.php" data-post="'
- . Url::getCommon($this_url_params, '', false) . '"';
- if (Util::showIcons('TableNavigationLinksMode')) {
- $html .= ' title="' . _pgettext('Previous page', 'Previous') . '">';
- } else {
- $html .= '>' . _pgettext('Previous page', 'Previous');
- } // end if... else...
- $html .= ' < </a> - ';
- }
- $this_url_params = $url_params;
- if ($pos > 0) {
- $this_url_params['pos'] = $pos;
- }
- if ($dontlimitchars) {
- unset($this_url_params['dontlimitchars']);
- $tempTitle = __('Truncate Shown Queries');
- $tempImgMode = 'partial';
- } else {
- $this_url_params['dontlimitchars'] = 1;
- $tempTitle = __('Show Full Queries');
- $tempImgMode = 'full';
- }
- $html .= '<a href="server_binlog.php" data-post="' . Url::getCommon($this_url_params, '', false)
- . '" title="' . $tempTitle . '">'
- . '<img src="' . $GLOBALS['pmaThemeImage'] . 's_' . $tempImgMode
- . 'text.png" alt="' . $tempTitle . '" /></a>';
- // we do not now how much rows are in the binlog
- // so we can just force 'NEXT' button
- if ($num_rows >= $GLOBALS['cfg']['MaxRows']) {
- $this_url_params = $url_params;
- $this_url_params['pos'] = $pos + $GLOBALS['cfg']['MaxRows'];
- $html .= ' - <a href="server_binlog.php" data-post="'
- . Url::getCommon($this_url_params, '', false)
- . '"';
- if (Util::showIcons('TableNavigationLinksMode')) {
- $html .= ' title="' . _pgettext('Next page', 'Next') . '">';
- } else {
- $html .= '>' . _pgettext('Next page', 'Next');
- } // end if... else...
- $html .= ' > </a>';
- }
- return $html;
- }
- /**
- * Returns the html for all binary log items.
- *
- * @param resource $result MySQL Query result
- * @param bool $dontlimitchars Whether limit chars
- *
- * @return string
- */
- private function _getAllLogItemInfo($result, $dontlimitchars)
- {
- $html = "";
- while ($value = $this->dbi->fetchAssoc($result)) {
- $html .= Template::get('server/binlog/log_row')->render(
- array(
- 'value' => $value,
- 'dontlimitchars' => $dontlimitchars,
- )
- );
- }
- return $html;
- }
- }
|