forked from phpmyadmin/phpmyadmin
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdisplay_import_ajax.lib.php
137 lines (125 loc) · 3.14 KB
/
display_import_ajax.lib.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Handles plugins that show the upload progress
*
* @package PhpMyAdmin
*/
use PhpMyAdmin\Core;
/**
* Sets up some variables for upload progress
*
* @return array
*
*/
function PMA_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
*
* Each plugin has own checkfunction in display_import_ajax.lib.php
* and own file with functions in upload_#KEY#.php
*/
$plugins = array(
// PHP 5.4 session-based upload progress is problematic, see bug 3964
//"session",
"progress",
"apc",
"noplugin"
);
// select available plugin
foreach ($plugins as $plugin) {
$check = "PMA_Import_" . $plugin . "Check";
if ($check()) {
$upload_class = 'PhpMyAdmin\Plugins\Import\Upload\Upload' . ucwords(
$plugin
);
$_SESSION[$SESSION_KEY]["handler"] = $upload_class;
break;
}
}
return array($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
*/
function PMA_Import_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
*/
function PMA_Import_progressCheck()
{
if (! function_exists("uploadprogress_get_info")
|| ! function_exists('getallheaders')
) {
return false;
}
return true;
}
/**
* 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
*/
function PMA_Import_sessionCheck()
{
if (! ini_get('session.upload_progress.enabled')) {
return false;
}
return true;
}
/**
* Default plugin for handling import.
* If no other plugin is available, noplugin is used.
*
* @return boolean true
*/
function PMA_Import_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
* from display_import_ajax.lib.php
*
* @return void
*/
function PMA_importAjaxStatus($id)
{
Core::headerJSON();
echo json_encode(
$_SESSION[$GLOBALS['SESSION_KEY']]['handler']::getUploadStatus($id)
);
}