'$cur_hour') OR (start_hour > end_hour AND (start_hour BETWEEN start_hour AND '$cur_hour' OR end_hour BETWEEN '$cur_hour' AND end_hour)))";
$and_category = (!empty($id) && is_numeric($id)) ? "AND category_id = '" . (int)$id . "'" : '';
$num_rows = $AVE_DB->Query("
SELECT id
FROM " . PREFIX . "_module_banners
WHERE is_active = '1'
AND (max_clicks = '0' OR (clicks < max_clicks AND max_clicks != '0'))
AND (max_views = '0' OR (views < max_views AND max_views != '0'))
" . $and_time . "
" . $and_category . "
")->NumRows();
// Ваша логика выбора порога веса
$weight_limit = ($num_rows) ? rand(1, 3) : 3;
$sql = $AVE_DB->Query("
SELECT
id,
banner_file,
target,
banner_name,
image_alt,
width,
height
FROM " . PREFIX . "_module_banners
WHERE is_active = '1'
AND (max_clicks = '0' OR (clicks < max_clicks AND max_clicks != '0'))
AND (max_views = '0' OR (views < max_views AND max_views != '0'))
" . $and_time . "
" . $and_category . "
AND weight <= '" . (int)$weight_limit . "'
");
$num = $sql->NumRows();
if ($num == 0) return;
$target_index = ($num == 1) ? 0 : rand(0, $num - 1);
$sql->DataSeek($target_index);
$banner = $sql->FetchAssocArray();
if(!empty($banner['banner_file']))
{
// Передаем переменные в Smarty
$AVE_Template->assign([
'banner' => $banner,
'mod_path' => BANNER_DIR,
'abs_path' => ABS_PATH
]);
// Выводим через шаблон (путь подставьте свой, обычно так)
$AVE_Template->display(BASE_DIR . '/modules/' . BANNER_DIR . '/templates/banner_viewer.tpl');
if(!empty($banner['id']))
{
$AVE_DB->Query("
UPDATE " . PREFIX . "_module_banners
SET views = views + 1
WHERE id = '" . (int)$banner['id'] . "'
");
}
}
}
function fetch_addclick($id) {
global $AVE_DB;
// Используем ?? '', чтобы не было Warning, если action не передан
$action = $_REQUEST['action'] ?? '';
switch($action) {
case '':
case 'addclick':
$sql = $AVE_DB->Query("
SELECT banner_url
FROM " . PREFIX . "_module_banners
WHERE id = '" . (int)$id . "'
LIMIT 1
");
$banner_url = $sql->GetCell();
if(!empty($banner_url)) {
// Сначала обновляем счетчик кликов
$AVE_DB->Query("
UPDATE " . PREFIX . "_module_banners
SET clicks = clicks + 1
WHERE id = '" . (int)$id . "'
");
// Затем перенаправляем пользователя
header('Location: ' . $banner_url);
} else {
// Если URL пустой или баннер не найден, возвращаем на главную
header('Location: index.php');
}
exit;
break;
}
}
function showBanners($tpl_dir) {
global $AVE_DB, $AVE_Template;
$limit = (int)$this->_limit;
$sql = $AVE_DB->Query("SELECT id FROM " . PREFIX . "_module_banners");
$num = $sql->NumRows();
$seiten = ceil($num / $limit);
$start = (int)(get_current_page() * $limit - $limit);
if ($start < 0) $start = 0;
$items = array();
$sql = $AVE_DB->Query("
SELECT *
FROM " . PREFIX . "_module_banners
LIMIT " . (int)$start . "," . (int)$limit . "
");
while($row = $sql->FetchRow()) {
array_push($items, $row);
}
if($num > $limit)
{
$page_nav = ' {t} ';
$page_nav = get_pagination($seiten, 'page', $page_nav);
$AVE_Template->assign('page_nav', $page_nav);
}
$AVE_Template->assign('items', $items);
$AVE_Template->assign('mod_path', BANNER_DIR);
$AVE_Template->assign('kategs', $this->_showCategories());
$AVE_Template->assign('content', $AVE_Template->fetch($tpl_dir . 'banners.tpl'));
}
function editBanner($tpl_dir,$id) {
global $AVE_DB, $AVE_Template;
$sql = $AVE_DB->Query("
SELECT *
FROM " . PREFIX . "_module_banners
WHERE id = '" . (int)$id . "'
");
$row = $sql->FetchRow();
if (stristr(($row->banner_file),'.swf') === false) $row->swf = false; else $row->swf = true;
if(@!is_writeable(BASE_DIR . '/modules/' . BANNER_DIR . '/files/')) {
$AVE_Template->assign('folder_protected', 1);
}
$AVE_Template->assign('item', $row);
$AVE_Template->assign('mod_path', BANNER_DIR);
$AVE_Template->assign('formaction', 'index.php?do=modules&action=modedit&mod=' . BANNER_DIR . '&moduleaction=quicksave&cp=' . SESSION . '&id=' . (int)$id . '&pop=1');
$AVE_Template->assign('kategs', $this->_showCategories());
$AVE_Template->assign('content', $AVE_Template->fetch($tpl_dir . 'form.tpl'));
}
function deleteBanner($id) {
global $AVE_DB;
$sql = $AVE_DB->Query("
SELECT
banner_file,
banner_name
FROM " . PREFIX . "_module_banners
WHERE id = '" . (int)$id . "'
");
$row = $sql->FetchRow();
@unlink(BASE_DIR . '/modules/' . BANNER_DIR . '/files/' . $row->banner_file);
$AVE_DB->Query("
DELETE
FROM " . PREFIX . "_module_banners
WHERE id = '" . (int)$id . "'
");
reportLog($_SESSION['user_name'] . ' - удалил баннер (' . $row->banner_name . ')', 2, 2);
header('Location:index.php?do=modules&action=modedit&mod=' . BANNER_DIR . '&moduleaction=1&cp=' . SESSION);
exit;
}
function quickSave($id) {
global $AVE_DB, $config_vars;
if(!empty($_POST['del'])) {
$sql = $AVE_DB->Query("
SELECT banner_file
FROM " . PREFIX . "_module_banners
WHERE id = '" . (int)$id . "'
");
$row = $sql->FetchRow();
$AVE_DB->Query("
UPDATE " . PREFIX . "_module_banners
SET banner_file = ''
WHERE id = '" . (int)$id . "'
");
@unlink(BASE_DIR . '/modules/' . BANNER_DIR . '/files/' . $row->banner_file);
}
if(!empty($_POST['banner_name'])) {
$d_name = strtolower($_FILES['New']['name']);
$d_name = str_replace(' ','', $d_name);
$d_tmp = $_FILES['New']['tmp_name'];
if(!empty($_FILES['New']['type'])) {
if(in_array($_FILES['New']['type'], $this->_allowed_files)) {
$d_name = preg_replace('/[^ ._a-z0-9-]/', '_', $d_name);
if(file_exists(BASE_DIR . '/modules/' . BANNER_DIR . '/files/' . $d_name)) $d_name = $this->_getRandomPrefix() . '__' . $d_name;
if(@move_uploaded_file($d_tmp, BASE_DIR . '/modules/' . BANNER_DIR . '/files/' . $d_name)) {
@chmod(BASE_DIR . '/modules/' . BANNER_DIR . '/files/' . $d_name, 0777);
echo "";
$AVE_DB->Query("
UPDATE " . PREFIX . "_module_banners
SET banner_file = '" . addslashes($d_name) . "'
WHERE id = '" . (int)$id . "'
");
reportLog($_SESSION['user_name'] . ' - заменил изображение баннера на (' . $d_name . ')', 2, 2);
} else {
echo "";
}
} else {
echo "";
}
}
$AVE_DB->Query("
UPDATE " . PREFIX . "_module_banners
SET
banner_name = '" . addslashes($_REQUEST['banner_name']) . "',
banner_url = '" . addslashes($_REQUEST['banner_url']) . "',
weight = '" . (int)$_REQUEST['weight'] . "',
views = '" . (int)$_REQUEST['views'] . "',
clicks = '" . (int)$_REQUEST['clicks'] . "',
image_alt = '" . addslashes($_REQUEST['image_alt']) . "',
category_id = '" . (int)$_REQUEST['category_id'] . "',
max_clicks = '" . (int)$_REQUEST['max_clicks'] . "',
max_views = '" . (int)$_REQUEST['max_views'] . "',
start_hour = '" . (int)$_REQUEST['start_hour'] . "',
end_hour = '" . (int)$_REQUEST['end_hour'] . "',
is_active = '" . (int)$_REQUEST['is_active'] . "',
target = '" . addslashes($_REQUEST['target']) . "',
width = '" . (int)$_REQUEST['width'] . "',
height = '" . (int)$_REQUEST['height'] . "'
WHERE
id = '" . (int)$id . "'
");
reportLog($_SESSION['user_name'] . ' - изменил параметры баннера (' . stripslashes($_REQUEST['banner_name']) . ')', 2, 2);
}
header('Location:index.php?do=modules&action=modedit&mod=' . BANNER_DIR . '&moduleaction=1&cp=' . SESSION);
exit;
}
function newBanner($tpl_dir) {
global $AVE_DB, $AVE_Template, $config_vars;
// Определяем под-действие (создание или сохранение)
$sub = $_REQUEST['sub'] ?? '';
switch($sub) {
case '':
if(!@is_writeable(BASE_DIR . '/modules/' . BANNER_DIR . '/files/')) {
$AVE_Template->assign('folder_protected', 1);
}
// Инициализируем пустой объект для Smarty, чтобы PHP 8.4 не ругался на отсутствие свойств
$item = new stdClass();
$item->id = 0;
$item->banner_name = '';
$item->category_id = 0;
$item->is_active = 1;
$item->target = '_blank';
$item->banner_file = '';
$item->banner_url = 'https://';
$item->image_alt = '';
$item->weight = 1;
$item->max_clicks = 0;
$item->max_views = 0;
$item->start_hour = 0;
$item->end_hour = 24;
$item->width = 0;
$item->height = 0;
$AVE_Template->assign('item', $item);
$AVE_Template->assign('mod_path', BANNER_DIR);
$AVE_Template->assign('kategs', $this->_showCategories());
$AVE_Template->assign('formaction', 'index.php?do=modules&action=modedit&mod=' . BANNER_DIR . '&moduleaction=newbanner&sub=save&cp=' . SESSION . '&pop=1');
// Рендерим шаблон формы
$AVE_Template->assign('content', $AVE_Template->fetch($tpl_dir . 'form.tpl'));
break;
case 'save':
if(!empty($_POST['banner_name'])) {
$file = '';
// Проверяем, был ли загружен файл
if(!empty($_FILES['New']['name']) && $_FILES['New']['error'] == UPLOAD_ERR_OK) {
$d_name = strtolower($_FILES['New']['name']);
$d_name = str_replace(' ', '', $d_name);
$d_tmp = $_FILES['New']['tmp_name'];
if(in_array($_FILES['New']['type'], $this->_allowed_files)) {
$d_name = preg_replace('/[^ ._a-z0-9-]/', '_', $d_name);
if(file_exists(BASE_DIR . '/modules/' . BANNER_DIR . '/files/' . $d_name)) {
$d_name = $this->_getRandomPrefix() . '__' . $d_name;
}
if(@move_uploaded_file($d_tmp, BASE_DIR . '/modules/' . BANNER_DIR . '/files/' . $d_name)) {
@chmod(BASE_DIR . '/modules/' . BANNER_DIR . '/files/' . $d_name, 0777);
echo "";
reportLog($_SESSION['user_name'] . ' - добавил изображение баннера (' . $d_name . ')', 2, 2);
$file = $d_name;
} else {
echo "";
}
} else {
echo "";
}
}
// Выполняем запрос к БД с очисткой данных
$AVE_DB->Query("
INSERT
INTO " . PREFIX . "_module_banners
SET
category_id = '" . (int)($_REQUEST['category_id'] ?? 0) . "',
banner_file = '" . addslashes($file) . "',
banner_url = '" . addslashes($_REQUEST['banner_url'] ?? '') . "',
weight = '" . (int)($_REQUEST['weight'] ?? 1) . "',
banner_name = '" . addslashes($_REQUEST['banner_name'] ?? '') . "',
image_alt = '" . addslashes($_REQUEST['image_alt'] ?? '') . "',
max_clicks = '" . (int)($_REQUEST['max_clicks'] ?? 0) . "',
max_views = '" . (int)($_REQUEST['max_views'] ?? 0) . "',
start_hour = '" . (int)($_REQUEST['start_hour'] ?? 0) . "',
end_hour = '" . (int)($_REQUEST['end_hour'] ?? 24) . "',
is_active = '" . (int)($_REQUEST['is_active'] ?? 1) . "',
target = '" . addslashes($_REQUEST['target'] ?? '_blank') . "',
width = '" . (int)($_REQUEST['width'] ?? 0) . "',
height = '" . (int)($_REQUEST['height'] ?? 0) . "'
");
reportLog($_SESSION['user_name'] . ' - добавил новый баннер (' . stripslashes($_REQUEST['banner_name']) . ')', 2, 2);
}
header('Location:index.php?do=modules&action=modedit&mod=' . BANNER_DIR . '&moduleaction=1&cp=' . SESSION);
exit;
}
}
function bannerCategories($tpl_dir) {
global $AVE_DB, $AVE_Template;
switch($_REQUEST['sub']) {
case '' :
$items = array();
$sql = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_module_banner_categories");
while($row = $sql->FetchRow()) {
array_push($items, $row);
}
$AVE_Template->assign('items', $items);
$AVE_Template->assign('mod_path', BANNER_DIR);
$AVE_Template->assign('kategs', $this->_showCategories());
$AVE_Template->assign('content', $AVE_Template->fetch($tpl_dir . 'kategs.tpl'));
break;
case 'save' :
if (isset($_POST['category_name'])) {
foreach($_POST['category_name'] as $id => $kateg) {
if(!empty($kateg)) {
$AVE_DB->Query("
UPDATE " . PREFIX . "_module_banner_categories
SET category_name = '" . addslashes($kateg) . "'
WHERE id = '" . (int)$id . "'
");
}
}
}
if (isset($_POST['del'])) {
foreach($_POST['del'] as $id => $kateg) {
$AVE_DB->Query("
DELETE
FROM " . PREFIX . "_module_banners
WHERE category_id = '" . (int)$id . "'
");
$AVE_DB->Query("
DELETE
FROM " . PREFIX . "_module_banner_categories
WHERE id = '" . (int)$id . "'
");
reportLog($_SESSION['user_name'] . ' - удалил категорию баннеров (' . (int)$id . ')', 2, 2);
}
}
header('Location:index.php?do=modules&action=modedit&mod=' . BANNER_DIR . '&moduleaction=kategs&cp=' . SESSION);
break;
case 'new' :
if(!empty($_REQUEST['category_name'])) {
$sql = $AVE_DB->Query("
INSERT
INTO " . PREFIX . "_module_banner_categories
SET category_name = '" . addslashes($_REQUEST['category_name']) . "'
");
reportLog($_SESSION['user_name'] . ' - добавил новую категорию (' . stripslashes($_REQUEST['category_name']) . ')', 2, 2);
}
header('Location:index.php?do=modules&action=modedit&mod=' . BANNER_DIR . '&moduleaction=kategs&cp=' . SESSION);
break;
}
}
/**
* ВНУТРЕННИЕ МЕТОДЫ
*/
function _getRandomPrefix() {
return rand(1000, 99999);
}
function _showCategories() {
global $AVE_DB;
$categories = array();
$sql = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_module_banner_categories");
while($row = $sql->FetchRow()) {
array_push($categories, $row);
}
return $categories;
}
}
?>