feh1ks
12/20/2016 - 8:15 AM

Fix to upload extensions

Fix to upload extensions

1. Go to - admin/controller/extension/installer.php

2. Ctrl+F - public function unzip() {

3. Paste this code before previous line

public function localcopy() {
    $this->load->language('extension/installer');

    $json = array();

    if (!$this->user->hasPermission('modify', 'extension/installer')) {
        $json['error'] = $this->language->get('error_permission');
    }

    $directory = DIR_DOWNLOAD . str_replace(array('../', '..\\', '..'), '', $this->request->post['path']) . '/upload/';

    if (!is_dir($directory)) {
        $json['error'] = $this->language->get('error_directory');
    }

    if (!$json) {
        // Get a list of files ready to upload
        $files = array();

        $path = array($directory . '*');

        while (count($path) != 0) {
            $next = array_shift($path);

            foreach (glob($next) as $file) {
                if (is_dir($file)) {
                    $path[] = $file . '/*';
                }

                $files[] = $file;
            }
        }

        $root = dirname(DIR_APPLICATION).'/';

        foreach ($files as $file) {
            // Upload everything in the upload directory
            $destination = $root.substr($file, strlen($directory));

            if (is_dir($file)) {
                $list = glob(rtrim($destination, '/').'/*');

                if (!file_exists($destination)) {
                    if (!mkdir($destination)) {
                        $json['error'] = sprintf($this->language->get('error_ftp_directory'), $destination);
                    }
                }
            }

            if (is_file($file)) {
                if (!copy($file, $destination)) {
                    $json['error'] = sprintf($this->language->get('error_ftp_file'), $file);
                }
            }
        }
    }

    $this->response->addHeader('Content-Type: application/json');
    $this->response->setOutput(json_encode($json));
}

4. Ctrl+F - 'url' => str_replace('&', '&', $this->url->link('extension/installer/ftp', 'token=' . $this->session->data['token'], 'SSL')),

5. Change it with - 'url' => str_replace('&', '&', $this->url->link('extension/installer/localcopy', 'token=' . $this->session->data['token'], 'SSL')),