DownPage 7.1 для DLE 11.1

Решил я тут заморочиться с этим говномодом и доработать до новой версии DLE 11.1

запрос в базу

ALTER TABLE `ВАШПРЕФИКС_files` ADD `size` BIGINT NOT NULL AFTER `onserver`;
ALTER TABLE `ВАШПРЕФИКС_static_files` ADD `size` BIGINT NOT NULL AFTER `onserver`;
ALTER TABLE `ВАШПРЕФИКС_usergroups` ADD dp_timer VARCHAR(10) NOT NULL DEFAULT '0';

в корне создаем файл dpi.php и запускаем

<?PHP

error_reporting(7);
ini_set('display_errors', true);
ini_set('html_errors', false);

define('DATALIFEENGINE', true);
define('ROOT_DIR', dirname(__FILE__));
define('ENGINE_DIR', ROOT_DIR . '/engine');

include ('engine/api/api.class.php');
require_once(ENGINE_DIR . '/classes/mysql.php');
require_once(ENGINE_DIR . '/data/dbconfig.php');

$config['charset'] = "utf-8";
$db_charset = "utf8";
$db_collate = "utf8_general_ci";

$dle_api->install_admin_module('downpage', 'DownPage Ultimate 7.1', 'DownPage Ultimate for DLE 11', 'dp_icon.jpg', '1');

echo<<<HTML
<div style="padding:40px; text-align:center;">Выполнение SQL запросов было успешно завершено.<br />Удалите файл 
HTML;
echo __FILE__;
?>

в файл .htaccess после RewriteEngine ON вставляем

#Downpage Mod
RewriteRule ^save_file-([0-9]+)+$ /engine/downpage.php?get=$1 [L]
RewriteRule ^save_staticfile-([0-9]+)+$ /engine/downpage.php?get=$1&area=static [L]

в файле functions.php меняем

$tpl->set( '{link}', $config['http_home_url']."engine/download.php?id=".$row['id'].$area );

на

$st_p_hpu=($area) ? 'static' : '';
$tpl->set( '{link}', $config['http_home_url']."save_".$st_p_hpu."file-".$row['id'].$area );

в этом же файле находим

$row['name'] = explode( "/", $row['name'] );

выше вставляем

		if (!empty($row['size']) AND $row['size']>0) {
			$size = formatsize($row['size']);
		}
		else{
			$binsize = (@filesize(ROOT_DIR . '/uploads/files/' . $row['onserver']));
			
			$size_arr[$row['id']]=$binsize;

			//$db->query( "UPDATE " . PREFIX . "_files SET size='{$size}' WHERE onserver = '{$row['onserver']}'" );
			
			$size = formatsize($binsize);
		}

в этом же файле находим

return $story;	

выше вставляем

	$static_prefix=($static) ? '_static' : '';
	
	if(is_array($size_arr) && count($size_arr)){
		foreach($size_arr as $key=>$value) {
			$query = 'UPDATE ' . PREFIX . $static_prefix.'_files SET ';
			$query .= "`size` = '".$value."'";
			$query .= ' WHERE `id` = \''.$key.'\';';
			$db->query($query);
		}
	}

в паке engine создаем файл downpage.php

<?php
/*
=====================================================
DownPage Ultimate for DLE
-----------------------------------------------------
iGrock. Yeti. Simon. Dr.Soft. HAMMER. fix for 9.6 kiua
-----------------------------------------------------
Данный код защищен авторскими правами
=====================================================
*/
error_reporting(E_ALL ^ E_NOTICE);
define('DATALIFEENGINE', true);
define('ROOT_DIR', '..');
define('ENGINE_DIR', dirname (__FILE__));
# >>> Для того что бы не появились лишние запросы, подключаем всё по отдельности а не одним файлом через /init.php
require_once ENGINE_DIR. '/data/config.php';
require_once ENGINE_DIR. '/data/dp_conf.php';
require_once ENGINE_DIR. '/classes/mysql.php';
require_once ENGINE_DIR. '/data/dbconfig.php';
require_once ENGINE_DIR. '/modules/functions.php';
require_once ENGINE_DIR. '/modules/sitelogin.php';
require_once ENGINE_DIR . '/data/dp_conf.php';
if ($config['allow_gzip'] == "1")
{
//require_once ENGINE_DIR. '/modules/gzip.php';
}
require_once ENGINE_DIR. '/classes/templates.class.php';
require_once ROOT_DIR.   '/language/'.$config['langs'].'/downpage.lng';
# <<< Конец
$tpl = new dle_template;
$tpl->dir = ROOT_DIR.'/templates/'.$config['skin'];
define('TEMPLATE_DIR', $tpl->dir);
if ($config['allow_gzip'] == "1")
{
//$Timer = new microTimer;
//$Timer->start();
}
switch ($_REQUEST['action'])
{
default:
if ($config['http_home_url'] == ""){
$config['http_home_url'] = "http://{$_SERVER['HTTP_HOST']}";
}
if ($config['files_antileech']){
function reset_url($url){
$value = str_replace("http://", "", $url);
$value = str_replace("www.", "", $value);
$value = explode("/", $value);
$value = reset($value);
return $value;
}
$_SERVER['HTTP_REFERER'] = reset_url($_SERVER['HTTP_REFERER']);
$_SERVER['HTTP_HOST'] = reset_url($_SERVER['HTTP_HOST']);
//vd($_SERVER['HTTP_REFERER']);
//vd($_SERVER['HTTP_HOST'],1);
//die();
if ($_SERVER['HTTP_HOST'] != $_SERVER['HTTP_REFERER']){
header("Location: {$config['http_home_url']}");
}
}
$tpl->load_template('downpage.tpl');
$file_id = intval($_REQUEST['get']);
if ($_REQUEST['area'] == "static") {
$db->query("SELECT id, name, onserver, author, dcount, size FROM ".PREFIX."_static_files WHERE id = '$file_id'");
} else {
$db->query("SELECT id, name, onserver, author, dcount, size FROM ".PREFIX."_files WHERE id = '$file_id'");
}
while($row = $db->get_row()){
if ($file_id == $row['id']){
if ($dp_conf['log_save'] == 1) {
$log_date = date ("Y-m-d H:i:s");
$log_ip = $_SERVER['REMOTE_ADDR'];
$dp_func_log=fopen("../engine/data/dp_log.txt","a");
if (!$is_logged) {$member_id['name'] = $dplang[info_guest_name];}
fwrite($dp_func_log,$member_id['name']."|".$log_date."|".$log_ip."|".$row['name']."\n");
fclose ($dp_func_log);
}
$type = $dplang[info_file_notype];
# >>> Определение типа файла. По такой же схеме можно добавлять свои типы
if(strpos($row['name'], ".zip")  !== false) $type = 'ZIP архив (*.zip)';
if(strpos($row['name'], ".jar")  !== false) $type = 'JAVA архив (*.jar)';
if(strpos($row['name'], ".rar")  !== false) $type = 'RAR архив (*.rar)';
if(strpos($row['name'], ".7z")   !== false) $type = '7Z архив (*.7z)';
if(strpos($row['name'], ".swf")  !== false) $type = 'Flash анимация (*.swf)';
if(strpos($row['name'], ".flv")  !== false) $type = 'Flash видео (*.flv)';
if(strpos($row['name'], ".txt")  !== false) $type = 'Текстовый файл (*.txt)';
if(strpos($row['name'], ".mp3")  !== false) $type = 'Аудио файл (*.mp3)';
if(strpos($row['name'], ".exe")  !== false) $type = 'Исполняемый файл Windows (*.exe)';
if(strpos($row['name'], ".doc")  !== false) $type = 'Документ MS Office (*.doc, *.docx)';
if(strpos($row['name'], ".pdf")  !== false) $type = 'Документ Adobe Reader (*.pdf)';
# <<< Конец
$size = formatsize(@filesize(ROOT_DIR."/uploads/files/".$row['onserver']));
if($config['files_count'] == "1"){
$sdownload = $row['dcount'];
}
$tpl->set('{THEME}', ROOT_DIR.'/templates/'.$config['skin']);
$tpl->set('{filecount}', $sdownload);
$tpl->set('{filename}', $row['name']);
$tpl->set('{filetype}', $type);
$tpl->set('{filesize}', $size);
$tpl->set('{fileuploader}', $row['author']);
$tpl->set('{sha256}', @hash_file('sha256', ROOT_DIR . '/uploads/files/' . $row['onserver'] ) );
$tpl->set( '{md5}', @md5_file( ROOT_DIR . '/uploads/files/' . $row['onserver'] ) );
}
$user_group = array ();
$db->query("SELECT * FROM " . USERPREFIX . "_usergroups ORDER BY id ASC");
while($row = $db->get_row()){
$user_group[$row['id']] = array();
foreach ($row as $key => $value){
$user_group[$row['id']][$key] = $value;
}
}
set_vars ("usergroup", $user_group);
if (!$is_logged) {$member_id['user_group'] = 5;}
//var_dump($member_id['user_group']);
$dp_timer = isset($user_group[$member_id['user_group']]['dp_timer'])?$user_group[$member_id['user_group']]['dp_timer']:5;
if ($dp_conf['allow_download'] == "1") {
$js_timer = <<<HTML
\n
\n<div id="save-btn">
<form name="download" method="GET" action="../engine/download.php">
<input type="hidden" name="id" value="{$file_id}"><input type="hidden" name="area" value="{$_REQUEST['area']}">
<button id="btnn" type="submit" disabled class="btn btn-default">{$dplang['info_download_file']}</button>
</form>
</div>
<script type="text/javascript">
function timer()
{
if(c>0)
{
$('#btnn').text('{$dplang['info_download_timer']}: '+c+' {$dplang['info_secs']}');
c=c-1;
setTimeout("timer()", 1000);
}
else
{
$('#btnn').text('{$dplang['info_download_file']}');	
$('#btnn').removeAttr('disabled');
//document.getElementById("res").innerHTML = '<center><form name="download" method="GET" action="../engine/download.php"><input type="hidden" name="id" value="{$file_id}"><input type="hidden" name="area" value="{$_REQUEST['area']}"><input type="submit" class="btn btn-default" value="{$dplang['info_download_file']}" class="button"></form></center>';
}
}
var c={$dp_timer};
timer();
</script>
<noscript><font face="Verdana"><b style="color: red;">{$dplang['info_no_javascript']}<br /></b></font></noscript>
HTML;
} else {
$js_timer = <<<HTML
\n<p><b style="color: red;">{$dplang['info_offline_download']}<br /></b></p>
HTML;
}
$complaint_link = <<<HTML
<a href="#complaint" onClick="window.open('/engine/downpage.php?get={$file_id}&action=complaint', '_blank', 'Toolbar=0, Scrollbars=0, Resizable=0, Width=320, resize=no, Height=450');">{$dplang['info_complaint_button']}</a>
HTML;
if ($dp_conf['complaint_online'] == "1"){
$tpl->set('{complaint}', $complaint_link);
if ($_REQUEST['area'] == "static") $tpl->set('{complaint}', "");
} else {
$tpl->set('{complaint}', '');
}
$tpl->set('{timer}', $js_timer);
$tpl->compile('downpage');
echo $tpl->result['downpage'];
$tpl->global_clear();
}
$db->free();
break;
case "complaint":
$file_id = intval($_REQUEST['get']);
$db->query("SELECT id, name, onserver, author FROM ".PREFIX."_files WHERE id = '$file_id'");
while($row = $db->get_row()){
echo <<<HTML
<html>
<head>
<link href="{THEME}/css/front.css" rel="stylesheet" type="text/css" />
<title>{$dplang['info_complaint_button']}</title>
</head>
<body>
<b>{$dplang['cmpl_file_info']}</b><br /><br />
{$dplang['cmpl_ids']}: {$file_id}<br />
{$dplang['cmpl_filename']}: {$row['name']}<br />
{$dplang['cmpl_uploader']}: {$row['author']}<br /><br />
<form action="" name="complaint" method="post">
<input type="hidden" name="action" value="sendcomplaint">
<input type="hidden" name="get" value="{$file_id}">
<b>{$dplang['info_complaint_button']}</b><br /><br />
{$dplang['cmpl_reasontype']}: <select name="reason">
<option value=""></option>
<option value="{$dplang['cmpl_reason_1']}">{$dplang['cmpl_reason_1']}</option>
<option value="{$dplang['cmpl_reason_2']}">{$dplang['cmpl_reason_2']}</option>
<option value="{$dplang['cmpl_reason_3']}">{$dplang['cmpl_reason_3']}</option>
</select><br /><br />
{$dplang['cmpl_comment']}: <br /><br /><textarea name="comment">{$dplang['cmpl_commenttext']}</textarea>
<br /><br /><input type="submit" style="width:155px;" value="{$dplang['cmpl_complaint_send']}" class="button">
</form>
{$dplang['cmpl_global_info']}
</body>
</html>
HTML;
}
$db->free();
break;
case "sendcomplaint":
$file_id = $_REQUEST['get'];
$time = time()+($config['date_adjust']*60);
$db->query("SELECT id, name, onserver, author FROM ".PREFIX."_files WHERE id = '$file_id'");
while($row = $db->get_row()){
$filename = $row['name'];
$fileuploader = $row['author'];
}
$complaint_message = "<b>".$dplang['info_complaint_button']."</b><br /><br /><b>".$dplang['cmpl_ids'].":</b> {$file_id}<br /><b>".$dplang['cmpl_filename'].":</b> {$filename}<br /><b>".$dplang['cmpl_uploader'].":</b> {$fileuploader}<br /><br /><b>".$dplang['cmpl_send_reason'].":</b> ".$_POST['reason']."<br /><b>".$dplang['cmpl_send_comm'].":</b> ".$_POST['comment'];
$db->query("INSERT INTO ".USERPREFIX."_pm (subj, text, user, user_from, date, pm_read, folder) 
VALUES (
'".$dplang['info_complaint_button']. "ID-".$file_id."', 
'".$complaint_message."', 
'".$dp_conf['complaint_adm_id']."', 
'".$member_id['name']."', 
'".$time."', 
'".$dp_conf['complaint_messread']."', 
'inbox'
)");
if ($dp_conf['complaint_messread'] == "1"){$dp_conf['complaint_messread'] = "0";} else {$dp_conf['complaint_messread'] = "1";}
$db->query("UPDATE ".USERPREFIX."_users set pm_all=pm_all+1, pm_unread=pm_unread+".$dp_conf['complaint_messread']." where user_id='".$dp_conf['complaint_adm_id']."'");
echo <<<HTML
<html>
<head>
<style type="text/css">
html, body {font-family: verdana; font-size: 12px; color: #000000;}
</style>
<title>{$dplang['info_complaint_button']}</title>
</head>
<body>
<b>{$dplang['info_complaint_button']} {$row['name']} {$dplang['cmpl_send_ok']}</b><br><br>
{$dplang['cmpl_adm_text']}:<br><br><hr>{$complaint_message}<hr>
<br />{$dplang['cmpl_global_2info']}
</body>
</html>
HTML;
$db->free();
break;
}
$db->close();
//if ($config['allow_gzip'] == "1") GzipOut();
?>

в папке data создаем файл dp_conf.php

<?php
$dp_conf = array(
'online' => "1",
'allow_download' => "1",
'allow_hpu' => "1",
'log_save' => "1",
'complaint_online' => "1",
'complaint_messread' => "no",
'complaint_adm_id' => "1",
'ftp_function' => "1",
'users' => "0",
'ftp_login' => "",
'ftp_pass' => "",
'vers' => "Ultimate",
);
?>

в папке шаблона создаем downpage.tpl

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="robots" content="noindex, nofollow" />
<title>Скачивание файла {filename}</title>
<link href="{THEME}/css/front.css" rel="stylesheet" type="text/css" />
<link href="{THEME}/css/dwn.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="/engine/classes/min/index.php?charset=utf-8&amp;g=general&amp;18"></script>
</head>
<body>
<div class="wrp">
<div class="container lines-bg">
<div class="white-bg">
<div class="block-head">
<h1 class="dwn-title h3">Скачивание файла {filename}</h1><hr />
</div>
<div class="block-body">
<p><b>Имя:</b> {filename}</p>
<p><b>Тип:</b> {filetype}</p>
<p><b>Размер:</b> {filesize}</p>
<p><b>Проверено на вирусы:</b> <a target="_blank" href="https://www.virustotal.com/ru/file/{sha256}/analysis/" rel="noopener noreferrer">Virustotal</a></p>
<p><b>MD5:</b> {md5}</p>
<p><b>Скачиваний:</b> {filecount}</p>
<p><b>Загрузил:</b> <a href="/user/{fileuploader}" target="_blank" rel="noopener noreferrer">
{fileuploader}</a></p>
<p>{timer}</p>
</div>
<div class="block-foot">
<p class="gray">Чтобы сократить время ожидания <a href="/reg.html">зарегистрируйтесь</a> на сайте</p>
<p>[group=1,2,3,4,5]{complaint} &middot; [/group][group=5]<a href="/reg.html" target="_blank" rel="noopener noreferrer"><b>Надоело ждать?</b></a> &middot; [/group] <a href="/">Главная</a> &middot; <a href="/mods/">Моды</a> &middot; <a href="/maps/">Карты</a> &middot; <a href="/resource-packs/">Ресурспаки</a></p>
</div>
</div>	
</div>
<script>
jQuery(function($){
$.get("/view/minecraft/images/sprite.svg", function(data) {
var div = document.createElement("div");
div.innerHTML = new XMLSerializer().serializeToString(data.documentElement);
document.body.insertBefore(div, document.body.childNodes[0]);
});
});
</script>
{include file="modules/foot.tpl"}	
</div>	
</body>
</html>

в папку Russian файл downpage.lng

<?php
$dplang_adm = array (
'global_opt'	 =>	"Общие настройки",
'global_opt_i' =>	"Настройки модуля, управление некоторыми функциями",
'ultimate'	 =>	"Настройка модуля на внешние файлы",
'log_opt' => "Лог файл скачиваний",
'log_opt_i' => "Лог файл скачиваний файлов с вашего сервера",
'mod_online' => "Модуль включен",
'mod_offline' => "Модуль выключен",
'mod_name' => "Название",
'mod_vers' => "Версия",
'mod_starus' => "Режим",
'mod_author' => "Авторы модификаций",
'other' => "Дополнительно",
'opt_group' => "Настройка групп пользователей",
'opt_complaint' => "Настройка системы жалоб на файлы",
'opt_exit' => "Выйти в главное меню",
'mkopt_on' => "Включен",
'mkopt_off' => "Отключен",
'mkopt_on2' => "Включена",
'mkopt_off2' => "Отключена",
'mkopt_yes' => "Да",
'mkopt_no' => "Нет",
'global_opt_1_online' => "Режим работы модуля",
'global_opt_1_online_i' => "Если 'Отключен' - будет использоватся обычное скачивание файла",
'global_opt_1_allowdown' => "Пользователи могут скачивать файлы",
'global_opt_1_allowdown_i' => "Если 'Нет' - то у всех пользователей вместо таймера с ожиданием времени будет надпись мол "Скачивание файлов с сервера временно не возможно, повторите свой запрос через некоторое время..."",
'global_opt_1_hpu' => "ЧПУ для модуля",
'global_opt_1_hpu_i' => "Eсли 'Да', то ссылки на файлы будут форсироваться в виде псевдо URL, которые улучшают визуальное восприятие ссылки. Например http://yoursite.ru/savefile-ID",
'global_opt_1_savelog' => "Ведение лога скачиваний файлов",
'global_opt_1_savelog_i' => "Включение / Отключение ведения лог файла скачиваний файлов с вашего сервера. Включение данной опции увеличивает нагрузку на процессор сервера",
'global_opt_3_allowcomplaint' => "Система жалоб на файлы",
'global_opt_3_allowcomplaint_i' => "Если 'Включена' то у пользователей будет возможность использовать систему жалоб на файлы",
'global_opt_3_complmessread' => "Сообщение с жалобой прочитано",
'global_opt_3_complmessread_i' => "Если 'Да' то окно об новом входящем сообщение всплывать не будет",
'global_opt_3_adminid' => "Индендификатор администратора",
'global_opt_3_adminid_i' => "Введите индендификатор того администратора которому необходимо отправлять сообщения содержащие жалобы на файлы. Пример: Если вы устанавливали DLE на сервер, вам был присвоен интенфикатор '1'",
'fftp_size' => "Использовать функцию ftp_size () для определения размера файла.",
'fftp_size_i' => "Может некорректно определять если размер файла превышает 2 гб. Если выбрано Нет используется функция которую писал Simon под свой фтп. Работоспособность на вашем сервере не гарантируется.",
'ftp_on2' => "Да",
'ftp_off2' => "Нет",
'users' => "Подсчёт скачиваний",
'users_i' => "Подсчет кликов по ссылке или количество зарегистрированных пользователей скачавших файл.",
'users_y' => "Клики",
'users_n' => "Пользователи",
'ftp_login' => "FTP логин",
'ftp_login_i' => "Если поле пустое логин = anonymous",
'ftp_pass' => "FTP пароль",
'ftp_pass_i' => "Если поле пустое пароль = anonymous",
'opt_allsave' => "Сохранить и применить настройки",
'log_0' => "Лог файл пуст...",
'log_sort_login' => "Логин",
'log_sort_date' => "Дата - Время",
'log_sort_ip' => "IP-адресс",
'log_sort_file' => "Имя файла",
'log_clear' => "Лог файл был успешно очишен!",
'opt_back' => "Вернутся назад",
'opt_allsave_ok' => "Настройки успешно сохранены!",
'mod_log_addon' => "Плагин",
'mod_log_help' => "&nbsp;Вы также можите просмотреть данный файл с помощью FTP клиента, путь: <b>/engine/data/dp_log.txt</b><br>&nbsp;Синтакис его будет таков: <b>Логин_скачавшего|Дата_время|IP_адресс|Имя_файла</b><br><br>&nbsp;Выполнять очистку лог файла рекомендуется как минимум 1 раз в неделю, т.к. данный файл может стать больших размеров",
'opt_log_clear' => "Очистить лог файл",
'global_linktoback' => "вернуться назад",
'global_modhome' => "Главная страница",
'mod_install_check' => "<b>Внимание!</b><br>После установки модуля на сервер Вы не удалили файл <b>dp_install.php</b> - это делает Ваш сайт уязвимым. Прежде чем продолжить работу, удалите данный файл с Вашего сервера!",
);
$dplang = array (
'info_sdownloads' => "Скачиваний",
'info_noperms' => "У вас не достаточно прав для скачивания файлов.",
'info_download_timer' => "Ожидайте",
'info_secs' => "секунд(ы)",
'info_download_file' => "Скачать файл",
'info_no_javascript' => "Включите у браузера поддержку JavaScript!",
'info_offline_download' => "Скачивание файлов с сервера временно не возможно, повторите свой запрос через некоторое время...",
'info_complaint_button' => "Битый файл?",
'cmpl_file_info' => "Данные об файле",
'cmpl_ids' => "ID файла",
'cmpl_filename' => "Имя файла",
'cmpl_uploader' => "Загрузил",
'cmpl_reasontype' => "Тип жалобы",
'cmpl_comment' => "Комментарий к жалобе",
'cmpl_commenttext' => "Текст вашей жалобы...",
'cmpl_complaint_send' => "Отправить жалобу",
'cmpl_global_info' => "* - Все поля обязательны к заполнению.<br /><br /><b>Внимание:</b> За ложную отправку жалобы - вы получите бан.",
'cmpl_reason_1' => "В файле вирус",
'cmpl_reason_2' => "Битый архив",
'cmpl_reason_3' => "Укажу ниже...",
'cmpl_send_comm' => "Комментарий",
'cmpl_send_reason' => "Причина",
'cmpl_send_ok' => "отправлена.",
'cmpl_adm_text' => "Ниже приведён текст который был отправлен администратору",
'cmpl_global_2info' => "<b>Внимание:</b> За ложную отправку жалобы - вы получите бан.",
'info_guest_name' => "Гость",
'info_file_notype' => "Неопределенно...",
);
?>

Открываем /engine/inc/usergroup.php и ищем:

$max_pm_value = $user_group[$id]['max_pm'];

Меняем на код:

$max_pm_value = $user_group[$id]['max_pm']; $dp_timer = $user_group[$id]['dp_timer'];

Снова ищем в этом файле:

$max_files = intval( $_REQUEST['max_files'] );

Изменяем:

$max_files = intval( $_REQUEST['max_files'] ); $dp_timer = intval($_REQUEST['dp_timer']);

Снова ищем:

$db->query( "UPDATE " . USERPREFIX . "_usergroups SET group_name='$group_name',

Изменяем на:

$db->query("UPDATE " . USERPREFIX . "_usergroups SET group_name='$group_name', dp_timer='$dp_timer',

ищем

<tr>
<td><h6>{$lang['group_mpm']}</h6><span class="note large">{$lang['hint_gmpm']}</span></td>
<td><input type="text" size="20" name="max_pm" value="{$max_pm_value}"></td>
</tr>

выше вставляем

<tr>
<td><b>Ожидание перед скачиванием файла</b><br />
<span class="small">Вы можете указать количичество секунд которые необходимо ждать пользователю перед тем как начнётся скачивание файла. Если установить значение в "0" - Выводится сразу ссылка на загрузку файла. Если оставить пустым будет выведенно сообщение мол "Вы не можите скачивать файлы"</span></td>
<td><input class="edit" type="text" size="10" name="dp_timer" value="{$dp_timer}">
</td>
</tr>

создаем файл в папке engine/inc/downpage.php

<?php
/*
=====================================================
DownPage Ultimate for DLE версия от Yeti
-----------------------------------------------------
(c) 2012 iGrock. Yeti. Simon. Dr.Soft. HAMMER fix kiua
-----------------------------------------------------
Данный код защищен авторскими правами
=====================================================
*/
if (!defined('DATALIFEENGINE')) {
die("Hacking attempt!");
}
if ($member_id['user_group'] != 1) {
msg("error", $lang_p['opt_denied'], $lang_p['opt_denied']);
}
require_once (ENGINE_DIR . '/data/dp_conf.php');
include_once (ROOT_DIR . '/language/' . $config['langs'] . '/downpage.lng');
function dp_cp_styles()
{
echo <<< HTML
<style>
.opacity{opacity:0.60; -moz-opacity:0.60; filter:alpha(opacity=60);}
.opacity:hover {opacity:1.0; -moz-opacity:1.0; filter:alpha(opacity=100);}
</style>
HTML;
}
function open_table()
{
echo <<< HTML
<table width="100%">
<tr>
<td style="padding:5px;" bgcolor="#FFFFFF">
HTML;
}
function close_table()
{
echo <<< HTML
</td>
</tr>
</table>
HTML;
}
function unterline()
{
echo "<div class="unterline"></div>";
}
function tableheader($header_name, $link_to_back)
{
global $dplang_adm;
if ($link_to_back == 1) {
$link_to_back = " [ <a href="$PHP_SELF?mod=downpage">" . $dplang_adm['global_linktoback'] .
"</a> ]";
} else {
$link_to_back = "";
}
echo <<< HTML
<table width="100%">
<tr>
<td bgcolor="#EFEFEF" height="29" style="padding-left:10px;"><div class="navigation">DownPage Ultimate for DLE {$header_name}{$link_to_back}</div></td>
</tr>
</table>
HTML;
unterline();
}
function navig()
{
global $dplang_adm;
open_table();
tableheader("-> {$dplang_adm['global_modhome']}", 0);
echo <<< HTML
<table width="100%">
<tr>
</tr>
<tr>
<td width="50%"><div class="quick"><a href="$PHP_SELF?mod=downpage&amp;action=options"><h3>{$dplang_adm['global_opt']}</h3>{$dplang_adm['global_opt_i']}</a></div></td>
<td width="50%"><div class="quick"><a href="$PHP_SELF?mod=downpage&amp;action=log"><h3>{$dplang_adm['log_opt']}</h3>{$dplang_adm['log_opt_i']}</a></div></td>
</tr>
</table>
HTML;
close_table();
}
if ($_REQUEST['action'] == "") {
echoheader("", "");
navig();
open_table();
dp_cp_styles();
if ($dp_conf['online'] == "1") {
$dp_onl_info = $dplang_adm['mod_online'];
} else {
$dp_onl_info = "<font color=red>{$dplang_adm[mod_offline]}</font>";
}
;
echo <<< HTML
<table>
<tr>
<td class="navigation" style="padding: 1px;">&nbsp;&nbsp;&nbsp;&nbsp;</td>
<td class="navigation" style="padding: 1px;">
<b>{$dplang_adm['mod_name']}</b>: DownPage Ultimate for DLE 11 версия от ZeroT01erance<br />
<b>{$dplang_adm['mod_vers']}</b>: {$dp_conf['vers']} от 07.09.2016<br />
<b>{$dplang_adm['mod_starus']}</b>: {$dp_onl_info}<br />
<b>{$dplang_adm['mod_author']}</b>: iGrock. Yeti. Simon. Dr. Soft. HAMMER. fix for 9.6 kiua<br /><br />
</td>
</tr>
</table>
HTML;
if (@file_exists("dp_ultimate_install.php")) {
echo "<br><table width="100%" align=center><tr><td style='padding:3px; border:1px dashed red; background-color:lightyellow;' class=main>" .
$dplang_adm['mod_install_check'] . "</td></tr></table>";
}
close_table();
echofooter();
}
if ($_REQUEST['action'] == "options") {
echoheader("", "");
open_table();
tableheader("-> {$dplang_adm['global_opt']}", 1);
function showRow($title = "", $description = "", $field = "")
{
echo "<tr>
<td style="padding:4px" class="option">
<b>$title</b><br /><span class=small>$description</span>
<td width=394 align=middle >
$field
</tr><tr><td background="engine/skins/images/mline.gif" height=1 colspan=2></td></tr>";
$bg = "";
$i++;
}
function makeDropDown($options, $name, $selected)
{
$output = "<select name="$name">\r\n";
foreach ($options as $value => $description) {
$output .= "<option value="$value"";
if ($selected == $value) {
$output .= " selected ";
}
$output .= ">$description</option>\n";
}
$output .= "</select>";
return $output;
}
foreach ($user_group as $group)
$sys_group_arr[$group['id']] = $group['group_name'];
echo <<< HTML
<script language='JavaScript' type="text/javascript">
function ChangeOption(selectedOption)
{
document.getElementById('global').style.display = "none";
document.getElementById('ultimate').style.display = "none";
document.getElementById('complaint').style.display = "none";
if(selectedOption == 'global') {document.getElementById('global').style.display = "";}
if(selectedOption == 'ultimate') {document.getElementById('ultimate').style.display = "";}
if(selectedOption == 'complaint') {document.getElementById('complaint').style.display = "";}
}
</script>
<div style="padding-top:5px;padding-bottom:2px;">
<table width="100%">
<tr>
<td style="padding:2px;">
<table style="text-align:center;" width="100%" height="35px">
<tr style="vertical-align:middle;" >
<td class=tableborder><a href="javascript:ChangeOption('global');"><h5>{$dplang_adm['global_opt']}</h5></a></td>
<td class=tableborder><a href="javascript:ChangeOption('ultimate');"><h5>{$dplang_adm['ultimate']}</h5></a></td>
<td class=tableborder><a href="javascript:ChangeOption('complaint');"><h5>{$dplang_adm['opt_complaint']}</h5></a></td>
<td class=tableborder><a href="$PHP_SELF?mod=downpage"><h5>{$dplang_adm['opt_exit']}</h5></a></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
HTML;
echo <<< HTML
<div class="container padded-right">
<form action="" method="post">
<div style="padding-top:5px;padding-bottom:2px;">
<table width="100%">
<tr>
</tr>
<tr>
<td style="padding:5px;" bgcolor="#FFFFFF">
<table width="100%">
<tr style='' id="global"><td>
<table width="100%">
HTML;
echo <<< HTML
<tr>
<td bgcolor="#EFEFEF" height="29" style="padding-left:10px;"><div class="navigation">{$dplang_adm['global_opt']}:</div></td>
</tr>
</table>
<div class="unterline"></div><table width="100%">
HTML;
showRow("{$dplang_adm['global_opt_1_online']}", "{$dplang_adm['global_opt_1_online_i']}",
makeDropDown(array("1" => "{$dplang_adm['mkopt_on']}", "0" => "{$dplang_adm['mkopt_off']}"),
"save_con[online]", "{$dp_conf['online']}"));
showRow("{$dplang_adm['global_opt_1_allowdown']}", "{$dplang_adm['global_opt_1_allowdown_i']}",
makeDropDown(array("1" => "{$dplang_adm['mkopt_yes']}", "0" => "{$dplang_adm['mkopt_no']}"),
"save_con[allow_download]", "{$dp_conf['allow_download']}"));
showRow("{$dplang_adm['global_opt_1_hpu']}", "{$dplang_adm['global_opt_1_hpu_i']}",
makeDropDown(array("1" => "{$dplang_adm['mkopt_yes']}", "0" => "{$dplang_adm['mkopt_no']}"),
"save_con[allow_hpu]", "{$dp_conf['allow_hpu']}"));
showRow("{$dplang_adm['global_opt_1_savelog']}", "{$dplang_adm['global_opt_1_savelog_i']}",
makeDropDown(array("1" => "{$dplang_adm['mkopt_yes']}", "0" => "{$dplang_adm['mkopt_no']}"),
"save_con[log_save]", "{$dp_conf['log_save']}"));
echo "</table></td></tr>";
echo <<< HTML
<tr style='display:none' id="ultimate"><td>
<table width="100%">
<tr>
<td bgcolor="#EFEFEF" height="29" style="padding-left:10px;"><div class="navigation">{$dplang_adm['ultimate']}:</div></td>
</tr>
</table>
<div class="unterline"></div><table width="100%">
HTML;
showRow("{$dplang_adm['fftp_size']}", "{$dplang_adm['fftp_size_i']}",
makeDropDown(array("on" => "{$dplang_adm['ftp_on2']}", "off" => "{$dplang_adm['ftp_off2']}"),
"save_con[ftp_function]", "{$dp_conf['ftp_function']}"));
showRow("{$dplang_adm['users']}", "{$dplang_adm['users_i']}", makeDropDown(array
("on" => "{$dplang_adm['users_y']}", "off" => "{$dplang_adm['users_n']}"),
"save_con[users]", "{$dp_conf['users']}"));
showRow("{$dplang_adm['ftp_login']}", "{$dplang_adm['ftp_login_i']}",
"<input type=text style='text-align: center;' size=10 class=edit name='save_con[ftp_login]' value='{$dp_conf['ftp_login']}'>",
"");
showRow("{$dplang_adm['ftp_pass']}", "{$dplang_adm['ftp_pass_i']}",
"<input type=text style='text-align: center;' size=10 class=edit name='save_con[ftp_pass]' value='{$dp_conf['ftp_pass']}'>",
"");
echo "</table></td></tr>";
echo <<< HTML
<tr style='display:none' id="complaint"><td>
<table width="100%">
<tr>
<td bgcolor="#EFEFEF" height="29" style="padding-left:10px;"><div class="navigation">{$dplang_adm['opt_complaint']}:</div></td>
</tr>
</table>
<div class="unterline"></div><table width="100%">
HTML;
showRow("{$dplang_adm['global_opt_3_allowcomplaint']}", "{$dplang_adm['global_opt_3_allowcomplaint_i']}",
makeDropDown(array("1" => "{$dplang_adm['mkopt_on2']}", "0" => "{$dplang_adm['mkopt_off2']}"),
"save_con[complaint_online]", "{$dp_conf['complaint_online']}"));
showRow("{$dplang_adm['global_opt_3_complmessread']}", "{$dplang_adm['global_opt_3_complmessread_i']}",
makeDropDown(array("yes" => "{$dplang_adm['mkopt_yes']}", "no" => "{$dplang_adm['mkopt_no']}"),
"save_con[complaint_messread]", "{$dp_conf['complaint_messread']}"));
showRow("{$dplang_adm['global_opt_3_adminid']}", "{$dplang_adm['global_opt_3_adminid_i']}",
"<input type=text style='text-align: center;' size=10 class=edit name='save_con[complaint_adm_id]' value='{$dp_conf['complaint_adm_id']}'>",
"");
echo "</table></td></tr>";
echo <<< HTML
<tr>
<td style="padding-top:10px; padding-bottom:10px;padding-right:10px;"><input type=hidden name=mod value=downpage>
<input type=hidden name=action value=save><input type="submit" class="buttons" value="  {$dplang_adm['opt_allsave']}  "></td>
</tr>
</table>
</form>
</div>
HTML;
close_table();
echofooter();
}
if ($_REQUEST['action'] == "log") {
echoheader("", "");
dp_cp_styles();
echo <<< HTML
<style>table.bt1,table.bt1 td {border:1px solid #f4f4f4;border-collapse:collapse;padding:3;}</style>
<script>function bg1(t){t.style.background="#FFF9E0";}function bg(t){t.style.background="";}</script>
HTML;
open_table();
tableheader("-> {$dplang_adm['log_opt']}", 1);
$mass = file(ENGINE_DIR . '/data/dp_log.txt');
if ($mass == "" or $mass[0] == "") {
$dp_log_mass = "
<table width=100% class=bt1>
<tr onmouseover='bg1(this)' onmouseout='bg(this)'>
<td style="padding-left:5px;">{$dplang_adm['log_0']}</td>
</tr></table>";
} else {
$dp_log_mass .= <<< HTML
<table width="100%" class=bt1>
<tr onmouseover='bg1(this)' onmouseout='bg(this)'>
<td width="200"><b>{$dplang_adm['log_sort_login']}</b></td>
<td width="300"><b>{$dplang_adm['log_sort_file']}</b></td>
<td width="200"><b>{$dplang_adm['log_sort_date']}</b></td>
<td><b>{$dplang_adm['log_sort_ip']}</b></td>
</tr>
HTML;
for ($x = 0; $x < count($mass); $x++) {
list($user_login, $datetime, $ip, $file) = explode("|", trim($mass[$x]));
$dp_log_mass .= <<< HTML
<tr onmouseover='bg1(this)' onmouseout='bg(this)'>
<td>{$user_login}</td>
<td>{$file}</td>
<td>{$datetime}</td>
<td>{$ip}</td>
</tr>
HTML;
}
}
echo "$dp_log_mass";
if ($dp_conf[log_save] == "1") {
$dp_log_save_info = "{$dplang_adm['mkopt_on']}";
} else {
$dp_log_save_info = "{$dplang_adm['mkopt_off']}";
}
;
echo <<< HTML
<table>
<tr><br><td background="engine/skins/images/mline.gif" height=1 colspan=2></td></tr>
<tr>
<td class="navigation" style="padding: 1px;">&nbsp;&nbsp;&nbsp;&nbsp;</td>
<td class="navigation" style="padding: 1px;">
<br>&nbsp;{$dplang_adm['mod_log_addon']}: {$dp_log_save_info}<br>
<br>&nbsp;{$dplang_adm['other']}:<br><br>
{$dplang_adm['mod_log_help']}<br><br>
<form action="" method=""><input type=hidden name=mod value=downpage><input type=hidden name=action value=clearlog>&nbsp;<input type="submit" class="buttons" value="  {$dplang_adm['opt_log_clear']}  "></form><br>
<form action="" method=""><input type=hidden name=mod value=downpage>&nbsp;<input type="submit" class="buttons" value="    {$dplang_adm['opt_back']}    "><br><br></td></form>
</td>
</tr>
<tr><td background="engine/skins/images/mline.gif" height=1 colspan=2></td></tr>
</table>
HTML;
close_table();
echofooter();
}
if ($_REQUEST['action'] == "clearlog") {
$f = fopen(ENGINE_DIR . '/data/dp_log.txt', "w");
fclose($f);
msg("info", "DownPage Ultimate for DLE", "{$dplang_adm['log_clear']}<br /><br /><a href=$PHP_SELF?mod=downpage>{$dplang_adm['opt_back']}</a>");
die();
}
//var_dump($_POST);
//die();
if ($_POST['action'] == "save") {
$find[] = "'\r'";
$replace[] = "";
$find[] = "'\n'";
$replace[] = "";
$save_con['vers'] = "Ultimate";
$save_con = array_merge ($save_con, $_POST["save_con"]);
$handler = fopen(ENGINE_DIR . '/data/dp_conf.php', "w");
fwrite($handler, "<?php\n\$dp_conf = array(\n");
foreach ($save_con as $name => $value) {
$value = trim(stripslashes($value));
$value = htmlspecialchars($value, ENT_QUOTES);
$value = preg_replace($find, $replace, $value);
fwrite($handler, "'{$name}' => "{$value}",\n");
}
fwrite($handler, ");\n?>");
fclose($handler);
clear_cache();
msg("info", "DownPage Ultimate for DLE", "{$dplang_adm['opt_allsave_ok']}<br /><br /><a href=$PHP_SELF?mod=downpage>{$dplang_adm['opt_back']}</a>");
}
;
?>
Обновлено: 30/09/2020 — 14:52

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *