aboutsummaryrefslogtreecommitdiff
path: root/srcs/phpmyadmin/libraries/classes/Display/ImportAjax.php
diff options
context:
space:
mode:
Diffstat (limited to 'srcs/phpmyadmin/libraries/classes/Display/ImportAjax.php')
-rw-r--r--srcs/phpmyadmin/libraries/classes/Display/ImportAjax.php140
1 files changed, 140 insertions, 0 deletions
diff --git a/srcs/phpmyadmin/libraries/classes/Display/ImportAjax.php b/srcs/phpmyadmin/libraries/classes/Display/ImportAjax.php
new file mode 100644
index 0000000..97c87b9
--- /dev/null
+++ b/srcs/phpmyadmin/libraries/classes/Display/ImportAjax.php
@@ -0,0 +1,140 @@
+<?php
+/* vim: set expandtab sw=4 ts=4 sts=4: */
+/**
+ * Handles plugins that show the upload progress
+ *
+ * @package PhpMyAdmin
+ */
+declare(strict_types=1);
+
+namespace PhpMyAdmin\Display;
+
+use PhpMyAdmin\Core;
+
+/**
+ * PhpMyAdmin\Display\ImportAjax class
+ *
+ * @package PhpMyAdmin
+ */
+class ImportAjax
+{
+ /**
+ * Sets up some variables for upload progress
+ *
+ * @return array
+ */
+ public static function uploadProgressSetup()
+ {
+ /**
+ * constant for differentiating array in $_SESSION variable
+ */
+ $SESSION_KEY = '__upload_status';
+
+ /**
+ * sets default plugin for handling the import process
+ */
+ $_SESSION[$SESSION_KEY]["handler"] = "";
+
+ /**
+ * unique ID for each upload
+ */
+ $upload_id = uniqid("");
+
+ /**
+ * list of available plugins
+ */
+ $plugins = [
+ // PHP 5.4 session-based upload progress is problematic, see bug 3964
+ //"session",
+ "progress",
+ "apc",
+ "noplugin",
+ ];
+
+ // select available plugin
+ foreach ($plugins as $plugin) {
+ $check = $plugin . "Check";
+
+ if (self::$check()) {
+ $upload_class = 'PhpMyAdmin\Plugins\Import\Upload\Upload' . ucwords(
+ $plugin
+ );
+ $_SESSION[$SESSION_KEY]["handler"] = $upload_class;
+ break;
+ }
+ }
+ return [
+ $SESSION_KEY,
+ $upload_id,
+ $plugins,
+ ];
+ }
+
+ /**
+ * Checks if APC bar extension is available and configured correctly.
+ *
+ * @return boolean true if APC extension is available and if rfc1867 is enabled,
+ * false if it is not
+ */
+ public static function apcCheck()
+ {
+ if (! extension_loaded('apc')
+ || ! function_exists('apc_fetch')
+ || ! function_exists('getallheaders')
+ ) {
+ return false;
+ }
+ return (ini_get('apc.enabled') && ini_get('apc.rfc1867'));
+ }
+
+ /**
+ * Checks if PhpMyAdmin\Plugins\Import\Upload\UploadProgress bar extension is
+ * available.
+ *
+ * @return boolean true if PhpMyAdmin\Plugins\Import\Upload\UploadProgress
+ * extension is available, false if it is not
+ */
+ public static function progressCheck()
+ {
+ return function_exists("uploadprogress_get_info")
+ && function_exists('getallheaders');
+ }
+
+ /**
+ * Checks if PHP 5.4 session upload-progress feature is available.
+ *
+ * @return boolean true if PHP 5.4 session upload-progress is available,
+ * false if it is not
+ */
+ public static function sessionCheck()
+ {
+ return ini_get('session.upload_progress.enabled');
+ }
+
+ /**
+ * Default plugin for handling import.
+ * If no other plugin is available, noplugin is used.
+ *
+ * @return boolean true
+ */
+ public static function nopluginCheck()
+ {
+ return true;
+ }
+
+ /**
+ * The function outputs json encoded status of uploaded.
+ * It uses PMA_getUploadStatus, which is defined in plugin's file.
+ *
+ * @param string $id ID of transfer, usually $upload_id
+ *
+ * @return void
+ */
+ public static function status($id)
+ {
+ Core::headerJSON();
+ echo json_encode(
+ $_SESSION[$GLOBALS['SESSION_KEY']]['handler']::getUploadStatus($id)
+ );
+ }
+}