Вход Регистрация
Файл: modules/downloads/includes/files_import.php
Строк: 161
<?php

/**
 * This file is part of JohnCMS Content Management System.
 *
 * @copyright JohnCMS Community
 * @license   https://opensource.org/licenses/GPL-3.0 GPL-3.0
 * @link      https://johncms.com JohnCMS Project
 */

declare(strict_types=1);

use 
InterventionImageImageManager;
use 
PsrHttpMessageServerRequestInterface;

defined('_IN_JOHNCMS') || die('Error: restricted access');

/**
 * @var PDO $db
 * @var JohncmsSystemUsersUser $user
 * @var ServerRequestInterface $request
 */

$request di(ServerRequestInterface::class);
$get $request->getQueryParams();
$post $request->getParsedBody();

$req $db->query('SELECT * FROM `download__category` WHERE `id` = ' $id);
$res $req->fetch();

if (! 
$req->rowCount() || ! is_dir($res['dir'])) {
    
http_response_code(404);
    echo 
$view->render(
        
'system::pages/result',
        [
            
'title'         => __('Error'),
            
'type'          => 'alert-danger',
            
'message'       => __('The directory does not exist'),
            
'back_url'      => $urls['downloads'],
            
'back_url_name' => __('Downloads'),
        ]
    );
    exit;
}

$al_ext $res['field'] ? explode(', '$res['text']) : $defaultExt;

if (
$request->getMethod() === 'POST') {
    
$load_cat $res['dir'];
    
$error = [];
    
$url = isset($post['fail']) ? str_replace('./''_'trim($post['fail'])) : null;

    if (
$url) {
        if (
mb_strpos($url'http://') !== 0) {
            
$error[] = __('Invalid Link');
        } else {
            
$url str_replace('http://'''$url);
        }
    }

    if (
$url && ! $error) {
        
$fname basename($url);
        
$new_file = isset($post['new_file']) ? trim($post['new_file']) : null;
        
$name = isset($post['text']) ? trim($post['text']) : null;
        
$name_link = isset($post['name_link']) ? htmlspecialchars(mb_substr($post['name_link'], 0200)) : null;
        
$text = isset($post['opis']) ? trim($post['opis']) : null;
        
$ext explode('.'$fname);

        if (! empty(
$new_file)) {
            
$fname strtolower($new_file '.' $ext[1]);
            
$ext explode('.'$fname);
        }

        if (empty(
$name)) {
            
$name $fname;
        }

        if (empty(
$name_link)) {
            
$error[] = __('The required fields are not filled');
        }

        if (! 
in_array($ext[(count($ext) - 1)], $al_exttrue)) {
            
$error[] = __('Prohibited file type!<br>To upload allowed files that have the following extensions') . ': ' implode(', '$al_ext);
        }

        if (
strlen($fname) > 100) {
            
$error[] = __('The file name length must not exceed 100 characters');
        }

        if (
preg_match("/[^da-zA-Z_-.]+/"$fname)) {
            
$error[] = __('The file name contains invalid characters');
        }
    } elseif (! 
$url) {
        
$error[] = __('Invalid Link');
    }

    if (
$error) {
        echo 
$view->render(
            
'system::pages/result',
            [
                
'title'         => __('File import'),
                
'type'          => 'alert-danger',
                
'message'       => $error,
                
'back_url'      => '?act=import&amp;id=' $id,
                
'back_url_name' => __('Repeat'),
            ]
        );
    } else {
        if (
file_exists("${load_cat}/${fname}")) {
            
$fname time() . $fname;
        }

        if (
copy('http://' $url"${load_cat}/${fname}")) {
            
$stmt $db->prepare(
                
"
                    INSERT INTO `download__files`
                    (`refid`, `dir`, `time`, `name`, `text`, `rus_name`, `type`, `user_id`, `about`, `desc`)
                    VALUES (?, ?, ?, ?, ?, ?, 2, ?, ?, '')
                "
            
);

            
$stmt->execute(
                [
                    
$id,
                    
$load_cat,
                    
time(),
                    
$fname,
                    
$name_link,
                    
mb_substr($name0200),
                    
$user->id,
                    
$text,
                ]
            );
            
$file_id $db->lastInsertId();

            
$files $request->getUploadedFiles();

            
/** @var GuzzleHttpPsr7UploadedFile $screen */
            
$screen $files['screen'] ?? null;
            if (empty(
$screen->getError())) {
                
$screens_dir DOWNLOADS_SCR $file_id;
                
// Save screenshot
                
if (mkdir($screens_dir0777) || is_dir($screens_dir)) {
                    try {
                        
/** @var ImageManager $image_manager */
                        
$image_manager di(ImageManager::class);
                        
$img $image_manager->make($screen->getStream());

                        if (
$set_down['screen_resize']) {
                            
$img->resize(
                                
1920,
                                
1080,
                                static function (
$constraint) {
                                    
/** @var $constraint InterventionImageConstraint */
                                    
$constraint->aspectRatio();
                                    
$constraint->upsize();
                                }
                            );
                        }
                        
$img->save($screens_dir '/' $file_id '.png'100'png');
                        
$screen_attached true;
                    } catch (
Exception $exception) {
                        
$screen_attached false;
                        
$screen_attached_error $exception->getMessage();
                    }
                }
            }

            
$urls['view_file_url'] = '?act=view&amp;id=' $file_id;
            
$dirid $id;
            
$sql '';
            
$i 0;

            while (
$dirid != '0' && $dirid != '') {
                
$res_down $db->query("SELECT `refid` FROM `download__category` WHERE `id` = '${dirid}' LIMIT 1")->fetch();
                if (
$i) {
                    
$sql .= ' OR ';
                }
                
$sql .= '`id` = '' . $dirid . ''';
                
$dirid $res_down['refid'];
                ++
$i;
            }

            
$db->exec("UPDATE `download__category` SET `total` = (`total`+1) WHERE ${sql}");

            echo 
$view->render(
                
'downloads::file_import_result',
                [
                    
'title'                 => __('File import'),
                    
'page_title'            => __('File import'),
                    
'id'                    => $id,
                    
'urls'                  => $urls,
                    
'moderation'            => $moderation ?? null,
                    
'screen_attached'       => $screen_attached ?? null,
                    
'screen_attached_error' => $screen_attached_error ?? null,
                ]
            );
        } else {
            echo 
$view->render(
                
'system::pages/result',
                [
                    
'title'         => __('File import'),
                    
'type'          => 'alert-danger',
                    
'message'       => __('File not attached'),
                    
'back_url'      => '?act=import&amp;id=' $id,
                    
'back_url_name' => __('Repeat'),
                ]
            );
        }
    }
} else {
    echo 
$view->render(
        
'downloads::import',
        [
            
'title'      => __('File import'),
            
'page_title' => __('File import'),
            
'id'         => $id,
            
'urls'       => $urls,
            
'action_url' => '?act=import&amp;id=' $id,
            
'extensions' => implode(', '$al_ext),
            
'bbcode'     => di(JohncmsSystemLegacyBbcode::class)->buttons('file_import_form''desc'),
        ]
    );
}
Онлайн: 1
Реклама