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

ImportAjax.php « Display « classes « libraries - github.com/phpmyadmin/phpmyadmin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: afaee5aea2e7601ca7b8f9d9fb73942b98aaddc7 (plain)
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
<?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)
        );
    }
}