Вход Регистрация
Файл: modules/forum/includes/addfile.php
Строк: 91
<?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);

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

/**
 * @var array $config
 * @var PDO $db
 * @var JohncmsSystemLegacyTools $tools
 * @var JohncmsSystemUsersUser $user
 */

if (! $id || ! $user->isValid()) {
    
http_response_code(403);
    echo 
$view->render(
        
'system::pages/result',
        [
            
'title'         => __('Access forbidden'),
            
'type'          => 'alert-danger',
            
'message'       => __('Access forbidden'),
            
'back_url'      => '/forum/',
            
'back_url_name' => __('Back'),
        ]
    );
    exit;
}

// Проверяем, тот ли юзер заливает файл и в нужное ли место
$res $db->query("SELECT * FROM `forum_messages` WHERE `id` = '${id}'")->fetch();

if (empty(
$res) || $res['user_id'] != $user->id) {
    echo 
$view->render(
        
'system::pages/result',
        [
            
'title'         => __('Wrong data'),
            
'type'          => 'alert-danger',
            
'message'       => __('Wrong data'),
            
'back_url'      => '/forum/',
            
'back_url_name' => __('Back'),
        ]
    );
    exit;
}

// Проверяем лимит времени, отведенный для выгрузки файла
if ($res['date'] < (time() - 3600)) {
    echo 
$view->render(
        
'system::pages/result',
        [
            
'title'         => __('Add file'),
            
'type'          => 'alert-danger',
            
'message'       => __('The time allotted for the file upload has expired'),
            
'back_url'      => '/forum/?&typ=topic&id=' $res['topic_id'] . '&amp;page=' $page,
            
'back_url_name' => __('Back'),
        ]
    );
    exit;
}

if (isset(
$_POST['submit'])) {
    
// Проверка, был ли выгружен файл и с какого браузера
    
$do_file false;
    
$file '';

    if (
$_FILES['fail']['size'] > 0) {
        
// Проверка загрузки с обычного браузера
        
$do_file true;
        
$file $tools->rusLat($_FILES['fail']['name']);
        
$fsize $_FILES['fail']['size'];
    }

    
// Обработка файла (если есть), проверка на ошибки
    
if ($do_file) {
        
// Список допустимых расширений файлов.
        
$al_ext array_merge($ext_win$ext_java$ext_sis$ext_doc$ext_pic$ext_arch$ext_video$ext_audio$ext_other);
        
$ext pathinfo($filePATHINFO_EXTENSION);
        
$name pathinfo($filePATHINFO_FILENAME);
        
$error = [];

        
// Check file size
        
if ($fsize 1024 $config['flsz']) {
            
$error[] = __('File size exceed') . ' ' $config['flsz'] . 'kb.';
        }

        
// Check allowed extensions
        
if (! in_array($ext$al_ext)) {
            
$error[] = __('The forbidden file format.<br>You can upload files of the following extension') . ':<br>' implode(', '$al_ext);
        }

        
// Replace invalid symbols
        
$name preg_replace('~[^-a-zA-Z0-9_]+~u''_'$name);
        
$name trim($name'_');
        
// Delete repeated replacement
        
$name preg_replace('/-{2,}/''_'$name);
        
$fname mb_substr($name070) . '.' $ext;

        
// Проверка наличия файла с таким же именем
        
if (file_exists(UPLOAD_PATH 'forum/attach/' $fname)) {
            
$fname time() . $fname;
        }

        
// Окончательная обработка
        
if (! $error && $do_file) {
            
// Для обычного браузера
            
if ((move_uploaded_file($_FILES['fail']['tmp_name'], UPLOAD_PATH 'forum/attach/' $fname)) == true) {
                @
chmod("${fname}"0777);
                @
chmod(UPLOAD_PATH 'forum/attach/' $fname0777);
            } else {
                
$error[] = __('Error uploading file');
            }
        }

        if (! 
$error) {
            
// Определяем тип файла
            
$ext strtolower($ext);
            if (
in_array($ext$ext_win)) {
                
$type 1;
            } elseif (
in_array($ext$ext_java)) {
                
$type 2;
            } elseif (
in_array($ext$ext_sis)) {
                
$type 3;
            } elseif (
in_array($ext$ext_doc)) {
                
$type 4;
            } elseif (
in_array($ext$ext_pic)) {
                
$type 5;
            } elseif (
in_array($ext$ext_arch)) {
                
$type 6;
            } elseif (
in_array($ext$ext_video)) {
                
$type 7;
            } elseif (
in_array($ext$ext_audio)) {
                
$type 8;
            } else {
                
$type 9;
            }

            
// Определяем ID субкатегории и категории
            
$res2 $db->query("SELECT * FROM `forum_topic` WHERE `id` = '" $res['topic_id'] . "'")->fetch();
            
$res3 $db->query("SELECT * FROM `forum_sections` WHERE `id` = '" $res2['section_id'] . "'")->fetch();

            
// Заносим данные в базу
            
$db->exec(
                
"
              INSERT INTO `cms_forum_files` SET
              `cat` = '" 
$res3['parent'] . "',
              `subcat` = '" 
$res2['section_id'] . "',
              `topic` = '" 
$res['topic_id'] . "',
              `post` = '
${id}',
              `time` = '" 
$res['date'] . "',
              `filename` = " 
$db->quote($fname) . ",
              `filetype` = '
${type}'
            "
            
);
        } else {
            echo 
$view->render(
                
'system::pages/result',
                [
                    
'title'         => __('Add file'),
                    
'page_title'    => __('Error uploading file'),
                    
'type'          => 'alert-danger',
                    
'message'       => $error,
                    
'back_url'      => '/forum/?act=addfile&id=' $id,
                    
'back_url_name' => __('Repeat'),
                ]
            );
            exit;
        }
    } else {
        echo 
$view->render(
            
'system::pages/result',
            [
                
'title'         => __('Add file'),
                
'page_title'    => __('Add file'),
                
'type'          => 'alert-danger',
                
'message'       => __('Error uploading file'),
                
'back_url'      => '/forum/?act=addfile&id=' $id,
                
'back_url_name' => __('Repeat'),
            ]
        );
        exit;
    }
    
$pa2 $db->query("SELECT `id` FROM `forum_messages` WHERE `topic_id` = '" $res['topic_id'] . "'")->rowCount();
    
$page ceil($pa2 $user->config->kmess);
    
$file_attached true;
}

echo 
$view->render(
    
'forum::add_file',
    [
        
'title'         => __('Add File'),
        
'page_title'    => __('Add File'),
        
'id'            => $id,
        
'file_attached' => $file_attached ?? false,
        
'topic_id'      => $res['topic_id'],
        
'back_url'      => '?type=topic&id=' $res['topic_id'] . '&amp;page=' $page,
    ]
);
Онлайн: 0
Реклама