From dd3c44359190c130bf56609a0d01b97204743264 Mon Sep 17 00:00:00 2001 From: Jo Michael Date: Tue, 3 Apr 2012 03:13:06 +0200 Subject: [PATCH] rfe #3507804 Session upload progress (PHP 5.4) --- ChangeLog | 1 + libraries/display_import_ajax.lib.php | 15 ++++++ libraries/import/upload/session.php | 76 +++++++++++++++++++++++++++ 3 files changed, 92 insertions(+) create mode 100644 libraries/import/upload/session.php diff --git a/ChangeLog b/ChangeLog index 77ff6a7e73..8b9485682d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -15,6 +15,7 @@ phpMyAdmin - ChangeLog + Patch #3510656 Contest-1: Ignoring foreign keys while dropping tables - Bug #3509686 Reverting sort on joined column does not work + New transformation: append string ++ rfe #3507804 Session upload progress (PHP 5.4) 3.5.1.0 (not yet released) - bug #3510784 [edit] Limit clause ignored when sort order is remembered diff --git a/libraries/display_import_ajax.lib.php b/libraries/display_import_ajax.lib.php index a0a4f7a7eb..347c7ffb27 100644 --- a/libraries/display_import_ajax.lib.php +++ b/libraries/display_import_ajax.lib.php @@ -27,6 +27,7 @@ $upload_id = uniqid(""); * list of available plugins */ $plugins = array( + "session", "uploadprogress", "apc", "noplugin" @@ -68,6 +69,20 @@ function PMA_import_uploadprogressCheck() } return true; } + +/** + * Checks if PHP 5.4 session upload-progress feature is available. + * + * @return true if PHP 5.4 session upload-progress is available, false if it is not + */ +function PMA_import_sessionCheck() +{ + if (PMA_PHP_INT_VERSION < 50400 || ! ini_get('session.upload_progress.enabled')) { + return false; + } + return true; +} + /** * Default plugin for handling import. If no other plugin is available, noplugin is used. * diff --git a/libraries/import/upload/session.php b/libraries/import/upload/session.php new file mode 100644 index 0000000000..50e2cf6dcf --- /dev/null +++ b/libraries/import/upload/session.php @@ -0,0 +1,76 @@ + $id, + 'finished' => false, + 'percent' => 0, + 'total' => 0, + 'complete' => 0, + 'plugin' => $ID_KEY + ); + } + $ret = $_SESSION[$SESSION_KEY][$id]; + + if (! PMA_import_sessionCheck() || $ret['finished']) { + return $ret; + } + + $status = false; + $sessionkey = ini_get('session.upload_progress.prefix') . $id; + + if (isset($_SESSION[$sessionkey])) { + $status = $_SESSION[$sessionkey]; + } + + if ($status) { + $ret['finished'] = $status['done']; + $ret['total'] = $status['content_length']; + $ret['complete'] = $status['bytes_processed']; + + if ($ret['total'] > 0) { + $ret['percent'] = $ret['complete'] / $ret['total'] * 100; + } + } else { + $ret = array( + 'id' => $id, + 'finished' => true, + 'percent' => 100, + 'total' => $ret['total'], + 'complete' => $ret['total'], + 'plugin' => $ID_KEY + ); + } + + $_SESSION[$SESSION_KEY][$id] = $ret; + + return $ret; +} +?>