1168 lines
36 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* Класс работы с галереями
*
* @package AVE.cms
* @subpackage module_Gallery
* @filesource
*/
class Gallery
{
/**
* СВОЙСТВА
*/
/**
* Количество галерей в списке
*
* @var int
*/
var $_limit_galleries = 10;
/**
* Количество изображений при просмотре в админке
*
* @var int
*/
var $_admin_limit_images = 15;
/**
* Количество изображений по умолчанию при выводе галереи в публичной части
*
* @var int
*/
var $_default_limit_images = 15;
/**
* Разрешенные типы файлов
*
* @var array
*/
var $_allowed_type = array('.jpg','.jpeg','.jpe','.gif','.png','.avi','.mov','.wmv','.wmf','.mp4');
/**
* Размер и тип формирования миниатюр
*
* @var string
*/
var $_size = '%1$s%2$ux%3$u';
/**
* Размер и тип формирования миниатюр в админке
*
* @var string
*/
var $admin_size = 'c100x100';
/**
* ВНЕШНИЕ МЕТОДЫ
*/
/**
* ФУНКЦИИ ПУБЛИЧНОЙ ЧАСТИ
*/
/**
* Вывод галереи
*
* @param string $tpl_dir - путь к папке с шаблонами модуля
* @param int $gallery_id - идентификатор галереи
* @param int $lim - количество изображений на странице
* @param int $ext - признак вывода всех изображений галереи
*/
function galleryShow($tpl_dir, $gallery_id, $lim, $ext = 0)
{
global $AVE_DB, $AVE_Template, $AVE_Core;
$sql = $AVE_DB->Query("
SELECT *
FROM " . PREFIX . "_module_gallery
WHERE id = '" . $gallery_id . "'
");
$row_gs = $sql->FetchRow();
$limit = ($row_gs->gallery_image_on_page > 0)
? $row_gs->gallery_image_on_page
: $this->_default_limit_images;
$limit = empty($lim) ? $limit : $lim;
$limit = ($ext != 1) ? $limit : 10000;
$start = get_current_page() * $limit - $limit;
switch ($row_gs->gallery_orderby)
{
case 'position': $order_by = "image_position ASC"; break;
case 'titleasc': $order_by = "image_title ASC"; break;
case 'titledesc': $order_by = "image_title DESC"; break;
case 'dateasc': $order_by = "image_date ASC"; break;
default: $order_by = "image_date DESC"; break;
}
$sql = $AVE_DB->Query("
SELECT COUNT(*)
FROM " . PREFIX . "_module_gallery_images
WHERE gallery_id = '" . $gallery_id . "' AND image_status = '1'
");
$num = $sql->GetCell();
$sql = $AVE_DB->Query("
SELECT *
FROM " . PREFIX . "_module_gallery_images
WHERE gallery_id = '" . $gallery_id . "' AND image_status = '1'
ORDER BY " . $order_by . "
LIMIT " . $start . "," . $limit . "
");
$folder = trim(UPLOAD_GALLERY_DIR . '/' . $row_gs->gallery_folder, '/');
$size = sprintf($this->_size, $row_gs->gallery_thumb_method, $row_gs->gallery_thumb_width, $row_gs->gallery_thumb_height);
$search = array('[tag:gal:id]', '[tag:gal:folder]', '[tag:path]','[tag:gal:title]','[tag:gal:description]');
$replace = array($row_gs->id, ABS_PATH . $folder . '/', ABS_PATH,$row_gs->gallery_title,$row_gs->gallery_description);
$main_template = str_replace($search, $replace, $row_gs->gallery_script);
// Постраничная навигация
if ($num > $limit)
{
$page_nav = '<a class="page_nav" href="index.php?id=' . $AVE_Core->curentdoc->Id
. '&amp;doc=' . (empty($AVE_Core->curentdoc->document_alias) ? prepare_url($AVE_Core->curentdoc->document_title) : $AVE_Core->curentdoc->document_alias)
. ((isset($_REQUEST['artpage']) && is_numeric($_REQUEST['artpage'])) ? '&amp;artpage=' . $_REQUEST['artpage'] : '')
. ((isset($_REQUEST['apage']) && is_numeric($_REQUEST['apage'])) ? '&amp;apage=' . $_REQUEST['apage'] : '')
. '&amp;page={s}">{t}</a> ';
$page_nav = get_pagination(ceil($num / $limit), 'page', $page_nav, get_settings('navi_box'));
$page_nav = rewrite_link($page_nav);
$GLOBALS['page_id'][$_REQUEST['id']]['page']=($GLOBALS['page_id'][$_REQUEST['id']]['page']>ceil($num / $limit) ? $GLOBALS['page_id'][$_REQUEST['id']]['page'] : ceil($num / $limit));
}
else
{
$page_nav = '';
}
$rows = array();
while ($row = $sql->FetchRow())
{
$row->image_filename = rawurlencode($row->image_filename);
$row->image_size = round(filesize(BASE_DIR . '/' . $folder . '/' . $row->image_filename) / 1024, 0);
array_push($rows, $row);
}
$images = '';
$i = 0;
$items_count = count($rows);
//
foreach ($rows as $row)
{
$i++;
$last_item = ($i==$items_count ? true : false);
$item_num = $i;
$search = array(
'[tag:img:id]',
'[tag:img:original]',
'[tag:img:thumbnail]',
'[tag:img:title]',
'[tag:img:description]',
'[tag:img:size]',
'[tag:gal:id]',
'[tag:gal:folder]',
'[tag:path]',
'[tag:link]',
'[tag:gal:title]'
);
$replace = array(
$row->id,
ABS_PATH . $folder . '/' . $row->image_filename,
make_thumbnail(array('link' => ABS_PATH . $folder . '/' . $row->image_filename, 'size' => $size)),
htmlspecialchars(empty($row->image_title) ? $AVE_Template->get_config_vars('NoTitle') : $row->image_title, ENT_QUOTES),
htmlspecialchars(empty($row->image_description) ? $AVE_Template->get_config_vars('NoDescr') : $row->image_description, ENT_QUOTES),
$row->image_size,
$row_gs->id,
ABS_PATH . $folder . '/',
ABS_PATH,
str_ireplace('"//"','"/"', str_ireplace('///', '/', rewrite_link($row->image_link))),
$row_gs->gallery_title
);
$image = str_replace($search, $replace, $row_gs->gallery_image_template);
$image = '<'.'?php $item_num='.var_export($item_num,1).'; $last_item='.var_export($last_item,1).'?'.'>'.$image;
$image = str_replace('[tag:if_first]', '<'.'?php if(isset($item_num) && ($item_num)===1) { ?'.'>', $image);
$image = str_replace('[tag:if_not_first]', '<'.'?php if(isset($item_num) && $item_num!==1) { ?'.'>', $image);
$image = str_replace('[tag:if_last]', '<'.'?php if(isset($last_item) && $last_item) { ?'.'>', $image);
$image = str_replace('[tag:if_not_last]', '<'.'?php if(isset($item_num) && !$last_item) { ?'.'>', $image);
$image = preg_replace('/\[tag:if_every:([0-9-]+)\]/u', '<'.'?php if(isset($item_num) && !('.$i.' % $1)){ '.'?'.'>', $image);
$image = preg_replace('/\[tag:if_not_every:([0-9-]+)\]/u', '<'.'?php if(isset($item_num) && ('.$i.' % $1)){ '.'?'.'>', $image);
$image = str_replace('[tag:/if]', '<'.'?php } ?'.'>', $image);
$image = str_replace('[tag:if:else]', '<'.'?php } else { ?'.'>', $image);
$images .= eval2var('?>' . $image . '<?');
}
$main_template = str_replace('[tag:gal:pages]', $page_nav, $main_template);
$return = str_replace('[tag:gal:content]', $images, $main_template);
$return = str_replace('[tag:path]', ABS_PATH, $return);
$return = str_replace('[tag:mediapath]', ABS_PATH . 'templates/' . ((defined('THEME_FOLDER') === false) ? DEFAULT_THEME_FOLDER : THEME_FOLDER) . '/', $return);
echo $return;
}
/**
* Вывод одиночного изображения
*
* @param string $tpl_dir - путь к папке с шаблонами модуля
* @param int $image_id - идентификатор изображения
*/
function galleryImageShow($tpl_dir, $image_id)
{
global $AVE_DB, $AVE_Template;
$sql = $AVE_DB->Query("
SELECT
image_filename,
image_file_ext,
image_title,
gallery_folder
FROM
" . PREFIX . "_module_gallery_images AS img
LEFT JOIN
" . PREFIX . "_module_gallery AS gal
ON gal.id = gallery_id
WHERE
img.id = '" . $image_id . "'
");
$row = $sql->FetchRow();
$folder = trim(UPLOAD_GALLERY_DIR . '/' . $row->gallery_folder, '/');
// $thumb_dir = trim(THUMBNAIL_DIR . '/' . sprintf($this->_size, $row->gallery_thumb_width), '/');
$source = ABS_PATH . $folder . '/' . rawurlencode($row->image_filename);
switch ($this->_galleryFileTypeGet($row->image_file_ext))
{
case 'gif':
case 'jpg':
case 'jpeg':
case 'png':
list($width, $height) = getimagesize(BASE_DIR . '/' . $folder . '/' . $row->image_filename);
$AVE_Template->assign('w', ($width < 350 ? 350 : ($width > 950 ? 950 : $width+8)));
$AVE_Template->assign('h', ($height < 350 ? 350 : ($height > 700 ? 700 : $height+85)));
$AVE_Template->assign('scrollbars', ($width > 950 || $height > 700 ? 1 : '') );
$AVE_Template->assign('source', $source);
$AVE_Template->assign('image_title', $row->image_title);
break;
case 'video':
$AVE_Template->assign('w', 350);
$AVE_Template->assign('notresizable', 1);
$AVE_Template->assign('h', 400);
$AVE_Template->assign('source', $source);
$AVE_Template->assign('mediatype', $this->_galleryMediaTypeGet($row->image_file_ext));
break;
}
$AVE_Template->display($tpl_dir . 'image.tpl');
}
/**
* ФУНКЦИИ АДМИНИСТРАТИВНОЙ ЧАСТИ
*/
/**
* Просмотр изображений галереи в админке
*
* @param string $tpl_dir - путь к папке с шаблонами модуля
* @param int $gallery_id - идентификатор галереи
*/
function galleryImageListShow($tpl_dir, $gallery_id)
{
global $AVE_DB, $AVE_Template;
$sql = $AVE_DB->Query("
SELECT
gallery_thumb_width,
gallery_thumb_height,
gallery_thumb_method,
gallery_title,
gallery_folder
FROM " . PREFIX . "_module_gallery
WHERE id = '" . $gallery_id . "'
");
$row_gs = $sql->FetchRow();
$folder = trim(UPLOAD_GALLERY_DIR . '/' . $row_gs->gallery_folder, '/');
$size = sprintf($this->_size, $row_gs->gallery_thumb_method, $row_gs->gallery_thumb_width, $row_gs->gallery_thumb_height);
if (isset($_REQUEST['sub']) && $_REQUEST['sub'] == 'save')
{
if (isset($_POST['del']) && sizeof($_POST['del']) > 0)
{
while (list($image_id) = each($_POST['del']))
{
$file = BASE_DIR . '/' . $folder . '/' . $_POST['datei'][$image_id];
@unlink($file);
@unlink(make_thumbnail(array('link' => $file, 'size' => $size)));
$AVE_DB->Query("
DELETE
FROM " . PREFIX . "_module_gallery_images
WHERE id = '" . (int)$image_id . "'
");
}
}
foreach ($_POST['gimg'] as $image_id)
{
$AVE_DB->Query("
UPDATE " . PREFIX . "_module_gallery_images
SET
image_title = '" . $_POST['image_title'][$image_id] . "',
image_description = '" . $_POST['image_description'][$image_id] . "',
image_position = '" . intval($_POST['image_position'][$image_id]) . "',
image_link = '" . $_POST['image_link'][$image_id] . "',
image_status = '" . ((empty($_POST['image_status'][$image_id]) || empty($_POST['image_status'][$image_id])) ? 0 : 1) . "'
WHERE
id = '" . (int)$image_id . "'
AND
gallery_id = '" . $gallery_id . "'
");
}
header('Location:' . get_redirect_link('sub'));
exit;
}
$limit = $this->_admin_limit_images;
$start = get_current_page() * $limit - $limit;
$sql = $AVE_DB->Query("
SELECT SQL_CALC_FOUND_ROWS *
FROM " . PREFIX . "_module_gallery_images
WHERE gallery_id = '" . $gallery_id . "'
ORDER BY id DESC
LIMIT " . $start . "," . $limit . "
");
$sql_num = $AVE_DB->Query("SELECT FOUND_ROWS()");
$num = $sql_num->GetCell();
if (!$num)
{
header('Location:index.php?do=modules&action=modedit&mod=gallery&moduleaction=1');
exit;
}
$images = array();
while ($row = $sql->FetchAssocArray())
{
$row['image_type'] = $this->_galleryFileTypeGet($row['image_file_ext']);
$row['image_author'] = get_username_by_id($row['image_author_id']);
$row['image_size'] = @filesize(BASE_DIR . '/' . $folder . '/' . $row['image_filename']);
$row['image_size'] = @round($row['image_size'] / 1024, 2);
$row['image_filename'] = rawurlencode($row['image_filename']);
$row['original'] = ABS_PATH . $folder . '/' . $row['image_filename'];
$row['thumbnail'] = make_thumbnail(array('link' => $row['original'], 'size' => $size));
array_push($images, $row);
}
if ($num > $limit)
{
$page_nav = ' <a class="pnav" href="index.php?do=modules&action=modedit&mod=gallery&moduleaction=showimages&id=' . $gallery_id . '&page={s}">{t}</a> ';
$page_nav = get_pagination(ceil($num / $limit), 'page', $page_nav);
}
else
{
$page_nav = '';
}
$AVE_Template->assign('page_nav', $page_nav);
$AVE_Template->assign('gallery_title', $row_gs->gallery_title);
$AVE_Template->assign('gallery_thumb_width', $row_gs->gallery_thumb_width);
$AVE_Template->assign('images', $images);
$AVE_Template->assign('content', $AVE_Template->fetch($tpl_dir . 'admin_gallery_image.tpl'));
}
/**
* Загрузка изображений в галерею
*
* @param string $tpl_dir - путь к папке с шаблонами модуля
* @param int $gallery_id - идентификатор галереи
*/
function galleryImageUploadForm($tpl_dir, $gallery_id)
{
global $AVE_DB, $AVE_Template;
$sql = $AVE_DB->Query("
SELECT
gallery_watermark,
gallery_thumb_width,
gallery_title,
gallery_folder
FROM " . PREFIX . "_module_gallery
WHERE id = '" . $gallery_id . "'
");
$row = $sql->FetchRow();
$dst_dir = BASE_DIR . '/' . trim(UPLOAD_GALLERY_DIR . '/' . $row->gallery_folder, '/');
if (isset($_REQUEST['sub']) && $_REQUEST['sub'] == 'save')
{
$images = array();
$path = ABS_PATH . trim(UPLOAD_GALLERY_DIR . '/' . $row->gallery_folder, '/');
@$size = sprintf($this->_size, $row_gs->gallery_thumb_method, $row_gs->gallery_thumb_width, $row_gs->gallery_thumb_height);
@$admin_size = sprintf($this->admin_size, $row_gs->gallery_thumb_method, $row_gs->gallery_thumb_width, $row_gs->gallery_thumb_height);
if (!empty($_REQUEST['fromfolder']) && $_REQUEST['fromfolder'] == 1)
{
$src_dir = BASE_DIR . '/' . trim(UPLOAD_GALLERY_DIR, '/') . '/.temp/';
if (! file_exists($src_dir) && ! mkdir($src_dir, 0777, true))
{
header('Location:index.php?do=modules&action=modedit&mod=gallery&moduleaction=1');
exit;
}
$htaccess_file = $src_dir . '/' . '.htaccess';
if (!file_exists($htaccess_file))
{
$fp = @fopen($htaccess_file, 'w+');
if ($fp)
{
fputs($fp, 'Deny from all');
fclose($fp);
}
}
if ($handle = opendir($src_dir . '/'))
{
while (false !== ($file = readdir($handle)))
{
if ($file != '.' && $file != '..')
{
$image_title = mb_substr($file, 0, mb_strrpos($file, '.'));
$upload_file_ext = strtolower(mb_substr($file, mb_strrpos($file, '.') + 0));
$upload_filename = prepare_fname($image_title) . $upload_file_ext;
while (file_exists($dst_dir . '/' . $upload_filename))
{
$upload_filename = $this->_galleryImageRename($upload_filename);
}
if (!empty($upload_filename) && in_array($upload_file_ext, $this->_allowed_type))
{
@copy($src_dir . '/' . $file, $dst_dir . '/' . $upload_filename);
@unlink($src_dir . '/' . $file);
$oldumask = umask(0);
@chmod($dst_dir . '/' . $upload_filename, 0777);
umask($oldumask);
if ($upload_file_ext != 'video')
{
$this->_galleryImageRebuild($dst_dir, $upload_filename, $row->gallery_watermark);
}
$images[] = make_thumbnail(array('link' => $path . '/' . $upload_filename, 'size' => $size));
$AVE_DB->Query("
INSERT
INTO " . PREFIX . "_module_gallery_images
SET
id = '',
gallery_id = '" . $gallery_id . "',
image_filename = '" . addslashes($upload_filename) . "',
image_author_id = '" . (int)$_SESSION['user_id'] . "',
image_title = '" . addslashes($image_title) . "',
image_file_ext = '" . addslashes($upload_file_ext) . "',
image_description = '',
image_date = '" . time() . "'
");
}
}
}
closedir($handle);
}
}
else if (!empty($_REQUEST['fromuploader']) && $_REQUEST['fromuploader'] == 1)
{
$src_dir = BASE_DIR . '/' . UPLOAD_GALLERY_DIR . '/.uploader/' . $_SESSION['user_id'];
if (! file_exists($src_dir . '/') && ! mkdir($src_dir . '/', 0777, true))
{
header('Location:index.php?do=modules&action=modedit&mod=gallery&moduleaction=1');
exit;
}
$htaccess_file = $src_dir . '/' . '.htaccess';
if (!file_exists($htaccess_file))
{
$fp = @fopen($htaccess_file, 'w+');
if ($fp)
{
fputs($fp, 'Deny from all');
fclose($fp);
}
}
if ($handle = opendir($src_dir . '/'))
{
while (false !== ($file = readdir($handle)))
{
if ($file != '.' && $file != '..')
{
$image_title = mb_substr($file, 0, mb_strrpos($file, '.'));
$upload_file_ext = strtolower(mb_substr($file, mb_strrpos($file, '.') + 0));
$upload_filename = prepare_fname($image_title) . $upload_file_ext;
while (file_exists($dst_dir . '/' . $upload_filename))
{
$upload_filename = $this->_galleryImageRename($upload_filename);
}
if (!empty($upload_filename) && in_array($upload_file_ext, $this->_allowed_type))
{
@copy($src_dir . '/' . $file, $dst_dir . '/' . $upload_filename);
@unlink($src_dir . '/' . $file);
$oldumask = umask(0);
@chmod($dst_dir . '/' . $upload_filename, 0777);
umask($oldumask);
if ($upload_file_ext != 'video')
{
$this->_galleryImageRebuild($dst_dir, $upload_filename, $row->gallery_watermark);
}
//$images[] = make_thumbnail(array('link' => $path . '/' . $upload_filename, 'size' => $_size));
$images[] = make_thumbnail(array('size' => $admin_size, 'link' => $path . '/' . $upload_filename));
$AVE_DB->Query("
INSERT
INTO " . PREFIX . "_module_gallery_images
SET
id = '',
gallery_id = '" . $gallery_id . "',
image_filename = '" . addslashes($upload_filename) . "',
image_author_id = '" . (int)$_SESSION['user_id'] . "',
image_title = '" . addslashes($image_title) . "',
image_file_ext = '" . addslashes($upload_file_ext) . "',
image_description = '',
image_date = '" . time() . "'
");
}
}
}
closedir($handle);
}
}
$count_files = sizeof(@$_FILES['file']['tmp_name']);
for ($i=0;$i<$count_files;$i++)
{
//$upload_file_ext = strtolower(substr($_FILES['file']['name'][$i], -4));
$upload_file_ext = strtolower(mb_substr($_FILES['file']['name'][$i], mb_strrpos($_FILES['file']['name'][$i], '.') + 0));
//$upload_filename = prepare_fname(substr($_FILES['file']['name'][$i], 0, -4)) . $upload_file_ext;
$upload_filename = prepare_fname(mb_substr($_FILES['file']['name'][$i], 0, mb_strrpos($_FILES['file']['name'][$i], '.'))) . $upload_file_ext;
if (!empty($upload_filename))
{
while (file_exists($dst_dir . '/' . $upload_filename))
{
$upload_filename = $this->_galleryImageRename($upload_filename);
}
if (in_array($upload_file_ext, $this->_allowed_type) )
{
move_uploaded_file($_FILES['file']['tmp_name'][$i], $dst_dir . '/' . $upload_filename);
$oldumask = umask(0);
@chmod($dst_dir . '/' . $upload_filename, 0777);
umask($oldumask);
if ($upload_file_ext != 'video')
{
$this->_galleryImageRebuild($dst_dir, $upload_filename, $row->gallery_watermark);
}
//$images[] = make_thumbnail(array('link' => $path . '/' . $upload_filename, 'size' => $size));
$images[] = make_thumbnail(array('size' => $admin_size, 'link' => $path . '/' . $upload_filename));
$AVE_DB->Query("
INSERT
INTO " . PREFIX . "_module_gallery_images
SET
id = '',
gallery_id = '" . $gallery_id . "',
image_filename = '" . addslashes($upload_filename) . "',
image_author_id = '" . (int)$_SESSION['user_id'] . "',
image_title = '" . (isset($_POST['image_title'][$i]) ? $_POST['image_title'][$i] : '') . "',
image_file_ext = '" . addslashes($upload_file_ext) . "',
image_description = '" . (isset($_POST['image_description'][$i]) ? $_POST['image_description'][$i] : '') . "',
image_date = '" . time() . "'
");
}
}
}
$AVE_Template->assign('gallery_title', $row->gallery_title);
$AVE_Template->assign('images', $images);
$AVE_Template->assign('content', $AVE_Template->fetch($tpl_dir . 'admin_gallery_upload_form_finish.tpl'));
}
else
{
if (!is_writable($dst_dir . '/'))
{
$AVE_Template->assign('not_writeable', 1);
$AVE_Template->assign('upload_dir', '/' . trim(UPLOAD_GALLERY_DIR . '/' . $row->gallery_folder, '/') . '/');
}
$AVE_Template->assign('gallery_title', $row->gallery_title);
$AVE_Template->assign('allowed', $this->_allowed_type);
$AVE_Template->assign('formaction', 'index.php?do=modules&action=modedit&mod=gallery&moduleaction=add&sub=save&id=' . $gallery_id);
$AVE_Template->assign('content', $AVE_Template->fetch($tpl_dir . 'admin_gallery_upload_form.tpl'));
}
}
/**
* Вывод списка галерей
*
* @param string $tpl_dir - путь к папке с шаблонами модуля
*/
function galleryListShow($tpl_dir)
{
global $AVE_DB, $AVE_Template;
if (!empty($_POST['create']))
{
foreach ($_POST['create'] as $gallery_id)
{
$this->_galleryImageMove((int)$gallery_id);
}
}
$limit = $this->_limit_galleries;
$start = get_current_page() * $limit - $limit;
$galleries = array();
$sql = $AVE_DB->Query("
SELECT SQL_CALC_FOUND_ROWS
gal.*,
COUNT(img.id) AS image_count
FROM
" . PREFIX . "_module_gallery AS gal
LEFT JOIN
" . PREFIX . "_module_gallery_images AS img
ON img.gallery_id = gal.id
GROUP BY gal.id
ORDER BY gal.gallery_created DESC
LIMIT " . $start . "," . $limit . "
");
$sql_num = $AVE_DB->Query("SELECT FOUND_ROWS()");
$num = $sql_num->GetCell();
while($row = $sql->FetchAssocArray())
{
$row['username'] = get_username_by_id($row['gallery_author_id']);
array_push($galleries, $row);
}
if ($num > $limit)
{
$page_nav = "<li><a href=\"index.php?do=modules&action=modedit&mod=gallery&moduleaction=1&page={s}\">{t}</a></li>";
$page_nav = get_pagination(ceil($num / $limit), 'page', $page_nav);
}
else
{
$page_nav = '';
}
$AVE_Template->assign('page_nav', $page_nav);
if (!empty($_REQUEST['alert']))
{
$AVE_Template->assign('alert', htmlspecialchars(stripslashes($_REQUEST['alert'])));
}
$AVE_Template->assign('galleries', $galleries);
$AVE_Template->assign('formaction', 'index.php?do=modules&action=modedit&mod=gallery&moduleaction=new&sub=save');
$AVE_Template->assign('content', $AVE_Template->fetch($tpl_dir . 'admin_gallery_list.tpl'));
}
/**
* Создание галереи
*
*/
function galleryNew()
{
if (isset($_REQUEST['sub']) && $_REQUEST['sub'] == 'save')
{
global $AVE_DB;
$cont = true;
$alert = '';
if (empty($_POST['gallery_title']))
{
$alert = '&alert=empty_gallery_title';
$cont = false;
}
else
{
$gallery_folder = prepare_fname(stripslashes($_POST['gallery_folder']));
if (!empty($gallery_folder))
{
$sql = $AVE_DB->Query("
SELECT 1
FROM " . PREFIX . "_module_gallery
WHERE gallery_folder = '" . $gallery_folder . "'
");
$folder_exists = $sql->GetCell();
if ($folder_exists)
{
$alert = '&alert=folder_exists';
$cont = false;
}
}
}
if ($cont)
{
$AVE_DB->Query("
INSERT
INTO " . PREFIX . "_module_gallery
SET
id = '',
gallery_folder = '" . $gallery_folder . "',
gallery_title = '" . $_POST['gallery_title'] . "',
gallery_description = '" . $_POST['gallery_description'] . "',
gallery_author_id = '" . (int)$_SESSION['user_id'] . "',
gallery_created = '" . time() . "'
");
if (!empty($gallery_folder))
{
$oldumask = umask(0);
@mkdir(BASE_DIR . '/' . UPLOAD_GALLERY_DIR . '/' . $gallery_folder . '/', 0777);
umask($oldumask);
}
}
header('Location:index.php?do=modules&action=modedit&mod=gallery&moduleaction=1' . $alert);
exit;
}
}
/**
* Редактирование галереи
*
* @param string $tpl_dir - путь к папке с шаблонами модуля
* @param int $gallery_id - идентификатор галереи
*/
function galleryEdit($tpl_dir, $gallery_id)
{
global $AVE_DB, $AVE_Template;
if (isset($_REQUEST['sub']) && $_REQUEST['sub'] == 'save')
{
$old_dir = prepare_fname(stripslashes($_REQUEST['gallery_folder_old']));
$new_dir = prepare_fname(stripslashes($_REQUEST['gallery_folder']));
if ($_REQUEST['gallery_title'] == '')
{ // не указано имя галереи
$AVE_Template->assign('empty_gallery_title', 1);
$_REQUEST['gallery_title'] = $_REQUEST['gallery_title_old'];
}
if ($_REQUEST['thumb_width_old'] != $_REQUEST['gallery_thumb_width'])
{ // изменён размер миниатюр - удаляем миниатюры
$folder = BASE_DIR . '/' . trim(UPLOAD_GALLERY_DIR . '/' . $old_dir, '/');
if ($old_dir != '')
{
rrmdir($folder . '/' . THUMBNAIL_DIR);
}
else
{
$sql = $AVE_DB->Query("
SELECT gallery_thumb_width,gallery_thumb_method,gallery_thumb_height
FROM " . PREFIX . "_module_gallery
WHERE id = '" . $gallery_id . "'
");
$row_gs = $sql->FetchRow();
$size = sprintf($this->_size, $row_gs->gallery_thumb_method, $row_gs->gallery_thumb_width, $row_gs->gallery_thumb_height);
$sql = $AVE_DB->Query("
SELECT image_filename
FROM " . PREFIX . "_module_gallery_images
WHERE gallery_id = '" . $gallery_id . "'
");
while ($row = $sql->FetchRow())
{
@unlink(make_thumbnail(array('link' => $folder . '/' . $row->image_filename, 'size' => $size)));
}
@rmdir($folder . '/' . THUMBNAIL_DIR);
}
}
if ($old_dir != $new_dir)
{ // изменен путь к файлам галереи - перемещаем в новое место
$this->_galleryImageMove($gallery_id, $old_dir, $new_dir);
}
$AVE_DB->Query("
UPDATE " . PREFIX . "_module_gallery
SET
gallery_title = '" . $_REQUEST['gallery_title'] . "',
gallery_description = '" . $_REQUEST['gallery_description'] . "',
gallery_thumb_width = '" . (int)$_REQUEST['gallery_thumb_width'] . "',
gallery_thumb_height = '" . (int)$_REQUEST['gallery_thumb_height'] . "',
gallery_thumb_method = '" . $_REQUEST['gallery_thumb_method'] . "',
gallery_image_on_line = '" . (int)$_REQUEST['gallery_image_on_line'] . "',
gallery_image_on_page = '" . (int)$_REQUEST['gallery_image_on_page'] . "',
gallery_watermark = '" . $_REQUEST['gallery_watermark'] . "',
gallery_folder = '" . $new_dir . "',
gallery_orderby = '" . $_REQUEST['gallery_orderby'] . "',
gallery_script = '" . $_REQUEST['gallery_script'] . "',
gallery_image_template = '" . $_REQUEST['gallery_image_template'] . "'
WHERE
id = '" . $gallery_id . "'
");
// header('Location:index.php?do=modules&action=modedit&mod=gallery&moduleaction=editgallery&id=' . $gallery_id);
header('Location:' . get_redirect_link('sub'));
exit;
}
$sql = $AVE_DB->Query("
SELECT *
FROM " . PREFIX . "_module_gallery
WHERE id = '" . $gallery_id . "'
");
$row = $sql->FetchAssocArray();
$blanc = 'templates/images/blanc.gif';
$AVE_Template->assign('blank', $blanc);
$AVE_Template->assign('gallery', $row);
$AVE_Template->assign('content', $AVE_Template->fetch($tpl_dir . 'admin_gallery_edit.tpl'));
}
/**
* Удаление галереи
*
* @param int $gallery_id - идентификатор галереи
*/
function galleryDelete($gallery_id)
{
global $AVE_DB;
$sql = $AVE_DB->Query("
SELECT
gallery_folder,
gallery_thumb_width
FROM " . PREFIX . "_module_gallery
WHERE id = '" . $gallery_id . "'
");
$row = $sql->fetchRow();
if ($row == false) return;
if (! empty($row->gallery_folder))
{
rrmdir(BASE_DIR . '/' . UPLOAD_GALLERY_DIR . '/' . $row->gallery_folder . '/');
}
else
{
$size = sprintf($this->_size, $row->gallery_thumb_method, $row->gallery_thumb_width, $row->gallery_thumb_height);
$sql = $AVE_DB->Query("
SELECT *
FROM " . PREFIX . "_module_gallery_images
WHERE gallery_id = '" . $gallery_id . "'
");
while ($row = $sql->FetchRow())
{
$file = BASE_DIR . '/' . UPLOAD_GALLERY_DIR . '/' . $row->image_filename;
@unlink($file);
@unlink(make_thumbnail(array('link' => $file, 'size' => $size)));
}
}
$AVE_DB->Query("DELETE FROM " . PREFIX . "_module_gallery WHERE id = '" . $gallery_id . "'");
$AVE_DB->Query("DELETE FROM " . PREFIX . "_module_gallery_images WHERE gallery_id = '" . $gallery_id . "'");
header('Location:index.php?do=modules&action=modedit&mod=gallery&moduleaction=1');
exit;
}
/**
* ВНУТРЕННИЕ МЕТОДЫ
*/
/**
* тип видео-файла по расширению
*
* @param string $ext
* @return string
*/
function _galleryMediaTypeGet($ext)
{
switch($ext)
{
case '.avi':
case '.wmv':
case '.wmf':
case '.mpg': $type = 'avi'; break;
case '.mov': $type = 'mov'; break;
}
return $type;
}
/**
* тип файла по расширению
*
* @param string $ext
* @return string
*/
function _galleryFileTypeGet($ext)
{
switch($ext)
{
case '.avi':
case '.mov':
case '.wmv':
case '.wmf':
case '.mpg': $type = 'video'; break;
case '.jpg':
case '.jpeg':
case '.jpe': $type = 'jpg'; break;
case '.png': $type = 'png'; break;
case '.gif': $type = 'gif'; break;
}
return $type;
}
/**
* Формирование уникального имени файла
*
* @param string $file_name - имя файла
* @return string
*/
function _galleryImageRename($file_name)
{
mt_rand();
$pref = rand(1, 999);
return $pref . '_' . $file_name;
}
/**
* Изменение размеров и наложение водяного знака при загрузке изображений
*
* @param string $dst_dir - путь к папке для загрузки
* @param string $upload_filename - имя загружаемого файла
* @param string $watermark - водяной знак
*/
function _galleryImageRebuild($dst_dir, $upload_filename, $watermark = '')
{
global $Image_Toolbox;
if (!list($width, $height) = @getimagesize($dst_dir . '/' . $upload_filename)) return;
$need_resize = false;
$need_save = false;
if (isset($_REQUEST['shrink']) && is_numeric($_REQUEST['shrink']) && $_REQUEST['shrink'] < 100)
{
$width = round($width * $_REQUEST['shrink'] / 100);
$height = round($height * $_REQUEST['shrink'] / 100);
$need_resize = true;
}
if (isset($_REQUEST['maxsize']) && is_numeric($_REQUEST['maxsize']) && $_REQUEST['maxsize'] > 10
&& max(array($width, $height)) > $_REQUEST['maxsize'])
{
$width = ($width > $height) ? round($_REQUEST['maxsize']) : 0;
$height = ($width > $height) ? 0 : round($_REQUEST['maxsize']);
$need_resize = true;
}
$Image_Toolbox->newImage($dst_dir . '/' . $upload_filename);
// Изменяем размер
if ($need_resize)
{
$Image_Toolbox->newOutputSize((int)$width, (int)$height);
$need_save = true;
}
// Добавляем водяной знак
if (!empty($watermark))
{
if (is_file(BASE_DIR . '/' . $watermark))
{
$Image_Toolbox->addImage(BASE_DIR . '/' . $watermark);
$Image_Toolbox->blend('right -10', 'bottom -10', IMAGE_TOOLBOX_BLEND_COPY, 100);
}
else
{
$Image_Toolbox->addText($watermark, BASE_DIR . '/inc/fonts/ft16.ttf', 16, '#709536', 'right -10', 'bottom -10');
}
$need_save = true;
}
if ($need_save) $Image_Toolbox->save($dst_dir . '/' . $upload_filename);
$oldumask = umask(0);
chmod($dst_dir . '/' . $upload_filename, 0777);
umask($oldumask);
}
/**
* Перемещение изображений галереи
*
* @param int $gallery_id - идентификатор галереи
* @param string $src_dir - директория источник
* @param string $dst_dir - директория назначения
*/
function _galleryImageMove($gallery_id, $src_dir = '', $dst_dir = '')
{
global $AVE_DB;
$sql = $AVE_DB->Query("
SELECT
gallery_title,
gallery_folder,
gallery_thumb_method,
gallery_thumb_width,
gallery_thumb_height
FROM " . PREFIX . "_module_gallery
WHERE id = '" . $gallery_id . "'
");
$row = $sql->FetchRow();
if ($row == false) return;
$size = sprintf($this->_size, $row->gallery_thumb_method, $row->gallery_thumb_width, $row->gallery_thumb_height);
if (empty($src_dir) && empty($dst_dir))
{
$src_dir = prepare_fname($row->gallery_folder);
$dst_dir = $row->gallery_title == '' ? 'gal_' . $gallery_id : prepare_fname($row->gallery_title);
}
$src_path = rtrim(BASE_DIR . '/' . trim(UPLOAD_GALLERY_DIR . '/' . $src_dir, '/')) . '/';
if (! file_exists($src_path . '/')) return;
$dst_path = rtrim(BASE_DIR . '/' . trim(UPLOAD_GALLERY_DIR . '/' . $dst_dir, '/')) . '/';
if ($src_dir != '')
{
if (rename($src_path, $dst_path))
{
$AVE_DB->Query("
UPDATE " . PREFIX . "_module_gallery
SET gallery_folder = '" . addslashes($dst_dir) . "'
WHERE id = '" . $gallery_id . "'
");
return;
}
}
if (! file_exists($dst_path . '/') && ! mkdir($dst_path . '/', 0777)) return;
if (! is_writable($dst_path . '/')) return;
$AVE_DB->Query("
UPDATE " . PREFIX . "_module_gallery
SET gallery_folder = '" . addslashes($dst_dir) . "'
WHERE id = '" . $gallery_id . "'
");
$sql = $AVE_DB->Query("
SELECT image_filename
FROM " . PREFIX . "_module_gallery_images
WHERE gallery_id = '" . $gallery_id . "'
");
while ($row = $sql->FetchRow())
{
$file = $src_path . '/' . $row->image_filename;
@copy($file, $dst_path . '/' . $row->image_filename);
$oldumask = umask(0);
chmod($dst_path . '/' . $row->image_filename, 0777);
umask($oldumask);
@unlink($file);
@unlink(make_thumbnail(array('link' => $file, 'size' => $size)));
}
@rmdir($src_path . '/' . THUMBNAIL_DIR);
}
/**
* Метод, предназначенный для создания копии Галереи
*
* @param int $gallery_id идентификатор Галереи
*/
function galleryCopy($gallery_id)
{
global $AVE_DB, $AVE_Template;
// Выполняем запрос к БД на получение информации о копиремой галереи
$sql = $AVE_DB->Query("
SELECT *
FROM " . PREFIX . "_module_gallery
WHERE id = '" . $gallery_id . "'
");
$row = $sql->fetchRow();
if ($row === false) return;
$gallery_title = (empty($_REQUEST['gallery_title'])) ? '' . addslashes($row->gallery_title) . '' : $_REQUEST['gallery_title'];
// Выполняем запрос к БД на добавление новой галереи на основании полученных ранее данных
$AVE_DB->Query("
INSERT " . PREFIX . "_module_gallery
SET
gallery_title = '" . $gallery_title . "',
gallery_description = '" . $row->gallery_description . "',
gallery_author_id = '" . (int)$_SESSION['user_id'] . "',
gallery_created = '" . time() . "',
gallery_thumb_width = '" . $row->gallery_thumb_width . "',
gallery_thumb_height = '" . $row->gallery_thumb_height . "',
gallery_thumb_method = '" . $row->gallery_thumb_method . "',
gallery_image_on_line = '" . $row->gallery_image_on_line . "',
gallery_image_on_page = '" . $row->gallery_image_on_page . "',
gallery_watermark = '" . $row->gallery_watermark . "',
gallery_folder = '',
gallery_orderby = '" . addslashes($row->gallery_orderby) . "',
gallery_script = '" . addslashes($row->gallery_script) . "',
gallery_image_template = '" . addslashes($row->gallery_image_template) . "'
");
// Сохраняем системное сообщение в журнал
reportLog($AVE_Template->get_config_vars('GalleryReportCopy') . ' (' . $row->gallery_title . ')');
// Выполянем переход к списку галерей
header('Location:index.php?do=modules&action=modedit&mod=gallery&moduleaction=1&cp=' . SESSION);
exit;
}
}
?>