Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/phpmyadmin/phpmyadmin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Foellmann <foellmann@foe-services.de>2014-04-05 17:35:38 +0400
committerChristian Foellmann <foellmann@foe-services.de>2014-04-05 17:35:38 +0400
commit9eb27ef6ebc763ddc6f6278462b8ffeed6de0e36 (patch)
treed3b4a1c7ae68cafb05b9d60040c9c22d457cee62 /libraries/Response.class.php
parentd472216554769ba596795f23a70c1809fa8897a3 (diff)
INIT phpmyadmin 4.1.12 multilanguage
Diffstat (limited to 'libraries/Response.class.php')
-rw-r--r--libraries/Response.class.php380
1 files changed, 380 insertions, 0 deletions
diff --git a/libraries/Response.class.php b/libraries/Response.class.php
new file mode 100644
index 0000000000..10858d2dee
--- /dev/null
+++ b/libraries/Response.class.php
@@ -0,0 +1,380 @@
+<?php
+/* vim: set expandtab sw=4 ts=4 sts=4: */
+/**
+ * Manages the rendering of pages in PMA
+ *
+ * @package PhpMyAdmin
+ */
+if (! defined('PHPMYADMIN')) {
+ exit;
+}
+
+require_once 'libraries/OutputBuffering.class.php';
+require_once 'libraries/Header.class.php';
+require_once 'libraries/Footer.class.php';
+
+/**
+ * Singleton class used to manage the rendering of pages in PMA
+ *
+ * @package PhpMyAdmin
+ */
+class PMA_Response
+{
+ /**
+ * PMA_Response instance
+ *
+ * @access private
+ * @static
+ * @var object
+ */
+ private static $_instance;
+ /**
+ * PMA_Header instance
+ *
+ * @access private
+ * @var object
+ */
+ private $_header;
+ /**
+ * HTML data to be used in the response
+ *
+ * @access private
+ * @var string
+ */
+ private $_HTML;
+ /**
+ * An array of JSON key-value pairs
+ * to be sent back for ajax requests
+ *
+ * @access private
+ * @var array
+ */
+ private $_JSON;
+ /**
+ * PMA_Footer instance
+ *
+ * @access private
+ * @var object
+ */
+ private $_footer;
+ /**
+ * Whether we are servicing an ajax request.
+ * We can't simply use $GLOBALS['is_ajax_request']
+ * here since it may have not been initialised yet.
+ *
+ * @access private
+ * @var bool
+ */
+ private $_isAjax;
+ /**
+ * Whether we are servicing an ajax request for a page
+ * that was fired using the generic page handler in JS.
+ *
+ * @access private
+ * @var bool
+ */
+ private $_isAjaxPage;
+ /**
+ * Whether there were any errors druing the processing of the request
+ * Only used for ajax responses
+ *
+ * @access private
+ * @var bool
+ */
+ private $_isSuccess;
+ /**
+ * Workaround for PHP bug
+ *
+ * @access private
+ * @var bool
+ */
+ private $_CWD;
+
+ /**
+ * Creates a new class instance
+ */
+ private function __construct()
+ {
+ if (! defined('TESTSUITE')) {
+ $buffer = PMA_OutputBuffering::getInstance();
+ $buffer->start();
+ }
+ $this->_header = new PMA_Header();
+ $this->_HTML = '';
+ $this->_JSON = array();
+ $this->_footer = new PMA_Footer();
+
+ $this->_isSuccess = true;
+ $this->_isAjax = false;
+ $this->_isAjaxPage = false;
+ if (isset($_REQUEST['ajax_request']) && $_REQUEST['ajax_request'] == true) {
+ $this->_isAjax = true;
+ }
+ if (isset($_REQUEST['ajax_page_request'])
+ && $_REQUEST['ajax_page_request'] == true
+ ) {
+ $this->_isAjaxPage = true;
+ }
+ $this->_header->setAjax($this->_isAjax);
+ $this->_footer->setAjax($this->_isAjax);
+ $this->_CWD = getcwd();
+ }
+
+ /**
+ * Returns the singleton PMA_Response object
+ *
+ * @return PMA_Response object
+ */
+ public static function getInstance()
+ {
+ if (empty(self::$_instance)) {
+ self::$_instance = new PMA_Response();
+ }
+ return self::$_instance;
+ }
+
+ /**
+ * Set the status of an ajax response,
+ * whether it is a success or an error
+ *
+ * @param bool $state Whether the request was successfully processed
+ *
+ * @return void
+ */
+ public function isSuccess($state)
+ {
+ $this->_isSuccess = ($state == true);
+ }
+
+ /**
+ * Returns true or false depending on whether
+ * we are servicing an ajax request
+ *
+ * @return bool
+ */
+ public function isAjax()
+ {
+ return $this->_isAjax;
+ }
+
+ /**
+ * Returns the path to the current working directory
+ * Necessary to work around a PHP bug where the CWD is
+ * reset after the initial script exits
+ *
+ * @return string
+ */
+ public function getCWD()
+ {
+ return $this->_CWD;
+ }
+
+ /**
+ * Disables the rendering of the header
+ * and the footer in responses
+ *
+ * @return void
+ */
+ public function disable()
+ {
+ $this->_header->disable();
+ $this->_footer->disable();
+ }
+
+ /**
+ * Returns a PMA_Header object
+ *
+ * @return PMA_Header
+ */
+ public function getHeader()
+ {
+ return $this->_header;
+ }
+
+ /**
+ * Returns a PMA_Footer object
+ *
+ * @return PMA_Footer
+ */
+ public function getFooter()
+ {
+ return $this->_footer;
+ }
+
+ /**
+ * Add HTML code to the response
+ *
+ * @param string $content A string to be appended to
+ * the current output buffer
+ *
+ * @return void
+ */
+ public function addHTML($content)
+ {
+ if (is_array($content)) {
+ foreach ($content as $msg) {
+ $this->addHTML($msg);
+ }
+ } elseif ($content instanceof PMA_Message) {
+ $this->_HTML .= $content->getDisplay();
+ } else {
+ $this->_HTML .= $content;
+ }
+ }
+
+ /**
+ * Add JSON code to the response
+ *
+ * @param mixed $json Either a key (string) or an
+ * array or key-value pairs
+ * @param mixed $value Null, if passing an array in $json otherwise
+ * it's a string value to the key
+ *
+ * @return void
+ */
+ public function addJSON($json, $value = null)
+ {
+ if (is_array($json)) {
+ foreach ($json as $key => $value) {
+ $this->addJSON($key, $value);
+ }
+ } else {
+ if ($value instanceof PMA_Message) {
+ $this->_JSON[$json] = $value->getDisplay();
+ } else {
+ $this->_JSON[$json] = $value;
+ }
+ }
+
+ }
+
+ /**
+ * Renders the HTML response text
+ *
+ * @return string
+ */
+ private function _getDisplay()
+ {
+ // The header may contain nothing at all,
+ // if it's content was already rendered
+ // and, in this case, the header will be
+ // in the content part of the request
+ $retval = $this->_header->getDisplay();
+ $retval .= $this->_HTML;
+ $retval .= $this->_footer->getDisplay();
+ return $retval;
+ }
+
+ /**
+ * Sends an HTML response to the browser
+ *
+ * @return void
+ */
+ private function _htmlResponse()
+ {
+ echo $this->_getDisplay();
+ }
+
+ /**
+ * Sends a JSON response to the browser
+ *
+ * @return void
+ */
+ private function _ajaxResponse()
+ {
+ if (! isset($this->_JSON['message'])) {
+ $this->_JSON['message'] = $this->_getDisplay();
+ } else if ($this->_JSON['message'] instanceof PMA_Message) {
+ $this->_JSON['message'] = $this->_JSON['message']->getDisplay();
+ }
+
+ if ($this->_isSuccess) {
+ $this->_JSON['success'] = true;
+ } else {
+ $this->_JSON['success'] = false;
+ $this->_JSON['error'] = $this->_JSON['message'];
+ unset($this->_JSON['message']);
+ }
+
+ if ($this->_isAjaxPage && $this->_isSuccess) {
+ $this->addJSON('_title', $this->getHeader()->getTitleTag());
+
+ $menuHash = $this->getHeader()->getMenu()->getHash();
+ $this->addJSON('_menuHash', $menuHash);
+ $hashes = array();
+ if (isset($_REQUEST['menuHashes'])) {
+ $hashes = explode('-', $_REQUEST['menuHashes']);
+ }
+ if (! in_array($menuHash, $hashes)) {
+ $this->addJSON('_menu', $this->getHeader()->getMenu()->getDisplay());
+ }
+
+ $this->addJSON('_scripts', $this->getHeader()->getScripts()->getFiles());
+ $this->addJSON('_selflink', $this->getFooter()->getSelfUrl('unencoded'));
+ $this->addJSON('_displayMessage', $this->getHeader()->getMessage());
+ $errors = $this->_footer->getErrorMessages();
+ if (strlen($errors)) {
+ $this->addJSON('_errors', $errors);
+ }
+ if (empty($GLOBALS['error_message'])) {
+ // set current db, table and sql query in the querywindow
+ $query = '';
+ $maxChars = $GLOBALS['cfg']['MaxCharactersInDisplayedSQL'];
+ if (isset($GLOBALS['sql_query'])
+ && strlen($GLOBALS['sql_query']) < $maxChars
+ ) {
+ $query = PMA_escapeJsString($GLOBALS['sql_query']);
+ }
+ $this->addJSON(
+ '_reloadQuerywindow',
+ array(
+ 'db' => PMA_ifSetOr($GLOBALS['db'], ''),
+ 'table' => PMA_ifSetOr($GLOBALS['table'], ''),
+ 'sql_query' => $query
+ )
+ );
+ if (! empty($GLOBALS['focus_querywindow'])) {
+ $this->addJSON('_focusQuerywindow', $query);
+ }
+ if (! empty($GLOBALS['reload'])) {
+ $this->addJSON('_reloadNavigation', 1);
+ }
+ $this->addJSON('_params', $this->getHeader()->getJsParams());
+ }
+ }
+
+ // Set the Content-Type header to JSON so that jQuery parses the
+ // response correctly.
+ if (! defined('TESTSUITE')) {
+ header('Cache-Control: no-cache');
+ header('Content-Type: application/json');
+ }
+
+ echo json_encode($this->_JSON);
+ }
+
+ /**
+ * Sends an HTML response to the browser
+ *
+ * @static
+ * @return void
+ */
+ public static function response()
+ {
+ $response = PMA_Response::getInstance();
+ chdir($response->getCWD());
+ $buffer = PMA_OutputBuffering::getInstance();
+ if (empty($response->_HTML)) {
+ $response->_HTML = $buffer->getContents();
+ }
+ if ($response->isAjax()) {
+ $response->_ajaxResponse();
+ } else {
+ $response->_htmlResponse();
+ }
+ $buffer->flush();
+ exit;
+ }
+}
+
+?>