Вход Регистрация
Файл: concrete5.7.5.6/concrete/tools/files/importers/remote.php
Строк: 178
<?php
defined
('C5_EXECUTE') or die("Access Denied.");

use 
ConcreteCoreFileEditResponse as FileEditResponse;

$u = new User();

$cf Loader::helper('file');
$fp FilePermissions::getGlobal();
if (!
$fp->canAddFiles()) {
    die(
t("Unable to add files."));
}

$error Loader::helper('validation/error');

if (isset(
$_REQUEST['fID'])) {
    
// we are replacing a file
    
$fr File::getByID($_REQUEST['fID']);
    
$frp = new Permissions($fr);
    if (!
$frp->canEditFileContents()) {
        
$error->add(t('You do not have permission to modify this file.'));
    }
} else {
    
$fr false;
}

$r = new FileEditResponse();

$valt Loader::helper('validation/token');
$file Loader::helper('file');
Loader::helper('mime');

// load all the incoming fields into an array
$incoming_urls = array();

if (!
function_exists('iconv_get_encoding')) {
    
$error->add(t('Remote URL import requires the iconv extension enabled on your server.'));
}

if (!
$error->has()) {
    for (
$i 1$i 6$i++) {
        
$this_url trim($_REQUEST['url_upload_' .$i]);

        
// did we get anything?
        
if (!strlen($this_url))
            continue;

        
// validate URL
        
try {
            
$request = new ZendHttpRequest();
            
$request->setUri($this_url);
            
$client = new ZendHttpClient();
            
$response $client->dispatch($request);
            
$incoming_urls[] = $this_url;
        } catch (
Exception $e) {
            
$error->add($e->getMessage());
        }
    }

    if (!
$valt->validate('import_remote')) {
        $
$error->add($valt->getErrorMessage());
    }

    if (
count($incoming_urls) < 1) {
        
$error->add(t('You must specify at least one valid URL.'));
    }

}

$import_responses = array();
$files = array();

// if we haven't gotten any errors yet then try to process the form
if (!$error->has()) {
    
// itterate over each incoming URL adding if relevant
    
foreach ($incoming_urls as $this_url) {
        
// try to D/L the provided file
        
$request = new ZendHttpRequest();
        
$request->setUri($this_url);
        
$client = new ZendHttpClient();
        
$response $client->dispatch($request);
        if (
$response->isSuccess()) {
            
$headers $response->getHeaders();
            
$contentType $headers->get('ContentType')->getFieldValue();

            
$fpath $file->getTemporaryDirectory();

            
// figure out a filename based on filename, mimetype, ???
            
if (preg_match('/^.+?[\/]([-w%]+.[-w%]+)$/'$request->getUri(), $matches)) {
                
// got a filename (with extension)... use it
                
$fname $matches[1];
            } else if (
$contentType) {
                
// use mimetype from http response
                
$fextension Core::make("helper/mime")->mimeToExtension($contentType);
                if (
$fextension === false)
                    
$error->add(t('Unknown mime-type: %s'$contentType));
                else {
                    
// make sure we're coming up with a unique filename
                    
do {
                        
// make up a filename based on the current date/time, a random int, and the extension from the mime-type
                        
$fname date('Y-m-d_H-i_') . mt_rand(100999) . '.' $fextension;
                    } while (
file_exists($fpath.'/'.$fname));
                }
            } 
//else {
                // if we can't get the filename from the file itself OR from the mime-type I'm not sure there's much else we can do
            //}

            
if (strlen($fname)) {
                
// write the downloaded file to a temporary location on disk
                
$handle fopen($fpath.'/'.$fname"w");
                
fwrite($handle$response->getBody());
                
fclose($handle);

                
// import the file into concrete
                
if ($fp->canAddFileType($cf->getExtension($fname))) {
                    
$fi = new FileImporter();
                    
$resp $fi->import($fpath.'/'.$fname$fname$fr);
                    
$r->setMessage(t('File uploaded successfully.'));
                    if (
is_object($fr)) {
                        
$r->setMessage(t('File replaced successfully.'));
                    }
                } else {
                    
$resp FileImporter::E_FILE_INVALID_EXTENSION;
                }
                if (!(
$resp instanceof ConcreteCoreFileVersion)) {
                    
$error->add($fname ': ' FileImporter::getErrorMessage($resp));
                } else {
                    
$import_responses[] = $resp;

                    if (!
is_object($fr)) {
                        
// we check $fr because we don't want to set it if we are replacing an existing file
                        
$respf $resp->getFile();
                        
$respf->setOriginalPage($_POST['ocID']);
                        
$files[] = $respf;
                    } else {
                        
$respf $fr;
                    }

                }

                
// clean up the file
                
unlink($fpath.'/'.$fname);
            } else {
                
// could not figure out a file name
                
$error->add(t(/*i18n: %s is an URL*/'Could not determine the name of the file at %s'h($this_url)));
            }
        } else {
            
// warn that we couldn't download the file
            
$error->add(t(/*i18n: %s is an URL*/'There was an error downloading %s'h($this_url)));
        }
    }
}

$r->setError($error);
$r->setFiles($files);
$r->outputJSON();
Онлайн: 0
Реклама