<?php
if (! defined ( 'DATALIFEENGINE' )) { die ( "Hacking attempt!" ); }
@define('IMAGER_CONFIG',ENGINE_DIR.'/data/imager.php');
class CServices {
var $update = 0;
var $msg = '';
var $descr = '';
var $footer= '';
function saveConfig($cfg) {
$s = "<?php
define('IMAGER_VER','2.0.0');
define('IMAGER_DISABLED','{$cfg['disabled']}');
define('DESTINATION','{$cfg['dest']}');
define('FTP_SERVER','{$cfg['ip']}');
define('FTP_USER_NAME','{$cfg['login']}');
define('FTP_USER_PASS','{$cfg['passwd']}');
define('FTP_PATH','{$cfg['path']}');
define('ENABLE_DEBUG',0);
define('LOGS_PATH','logs');
define('WWW_DOMAIN','{$cfg['domain']}');
define('WWW_URL','{$cfg['url']}');
define('EXCLUDE_DOMAINS','{$cfg['excl_domains']}');
define('ENABLED_IMG_EXTS','{$cfg['exts']}');
define('MAX_IMAGE_WIDTH',{$cfg['max_width']});
define('MIN_IMAGE_WIDTH_FOR_WATERMARK',{$cfg['min_width']});
define('SET_WATERMARK',{$cfg['enable_wm']});
define('ITEMS_LIMIT',{$cfg['limits']});
define('START_ID',{$cfg['start_id']});
define('POST_TYPE',{$cfg['post_type']});
?>";
file_put_contents(IMAGER_CONFIG,$s);
}
function create_cfg() {
$cfg['disabled'] = IMAGER_DISABLED;
$cfg['dest'] = DESTINATION;
$cfg['ip'] = FTP_SERVER;
$cfg['login'] = FTP_USER_NAME;
$cfg['passwd'] = FTP_USER_PASS;
$cfg['path'] = FTP_PATH;
$cfg['domain'] = WWW_DOMAIN;
$cfg['url'] = WWW_URL;
$cfg['excl_domains'] = EXCLUDE_DOMAINS;
$cfg['exts'] = ENABLED_IMG_EXTS;
$cfg['max_width'] = MAX_IMAGE_WIDTH;
$cfg['min_width'] = MIN_IMAGE_WIDTH_FOR_WATERMARK;
$cfg['limits'] = ITEMS_LIMIT;
$cfg['enable_wm'] = SET_WATERMARK;
$cfg['start_id'] = START_ID;
$cfg['post_type'] = POST_TYPE;
return $cfg;
}
function getVersionInfo() {
return @file_get_contents('http://pc-ebooks.com/imager/version.php?s='.$_SERVER["SERVER_NAME"]);
}
function checkVersion() {
$s = $this->getVersionInfo();
if ($s) {
ereg('<version>([^<]*)</version>',$s,$arr);
if (IMAGER_VER<$arr[1]) {
$this->update = 1;
$this->msg = '<div class="red">Внимание! Доступна новая версия скрипта v'.$arr[1].'. <a href="http://pc-ebooks.com/imager/" target="_blank">Открыть страницу</a></div>';
ereg('<descr>([^<]*)</descr>',$s,$arr);
$this->descr = $arr[1];
}
ereg('<footer>([^<]*)</footer>',$s,$arr);
$this->footer = $arr[1];
preg_match('/<regdate>([^<]*)<\/regdate>/i',$s,$arr);
$cnt = round((time()-strtotime($arr[1]))/86400);
preg_match('/<termin>([^<]*)<\/termin>/i',$s,$arr);
$term = $arr[1];
preg_match('/<status>([^<]*)<\/status>/i',$s,$arr);
if (!$arr[1] || $cnt>$term) {
preg_match('/<message>([^<]*)<\/message>/i',$s,$arr);
$this->msg = str_replace("\n",'<br>',html_entity_decode($arr[1]));
}
}
}
function showAdminPanel() {
global $config;
include_once IMAGER_CONFIG;
$version = IMAGER_VER;
$dest = DESTINATION;
$ip = slash_quote(FTP_SERVER);
$login = slash_quote(FTP_USER_NAME);
$passwd = slash_quote(FTP_USER_PASS);
$path = slash_quote(FTP_PATH);
$url = slash_quote(WWW_URL);
$domain = slash_quote(WWW_DOMAIN);
$excl_domains = slash_quote(EXCLUDE_DOMAINS);
$limits = slash_quote(ITEMS_LIMIT);
$exts = slash_quote(ENABLED_IMG_EXTS);
$max_width = slash_quote(MAX_IMAGE_WIDTH);
$min_width = slash_quote(MIN_IMAGE_WIDTH_FOR_WATERMARK);
$enable_wm = SET_WATERMARK?0:1;
$disabled = IMAGER_DISABLED?'checked':'';
$start_id = defined('START_ID')?START_ID:0;
$post_type = defined('POST_TYPE')?POST_TYPE:0;
$this->checkVersion();
$update = $this->update?'':'hidden';
echoheader( "", "" );
$wc_state = $this->getWebconeState()?'<span class="green">включен</span>':'<span class="red">выключен</span>';
echo <<<HTML
<script src="/engine/inc/imager/jquery.js"></script>
<script src="/engine/inc/imager/functions.js"></script>
<script>
var cpadmin = "{$config['admin_path']}";
</script>
<form id="imager_form" action="?mod=imager" method="post" onsubmit="return validator()">
<div style="padding-top:5px;padding-bottom:2px;">
<table width="100%">
<tr>
<td width="4"><img src="engine/skins/images/tl_lo.gif" width="4" height="4" border="0"></td>
<td background="engine/skins/images/tl_oo.gif"><img src="engine/skins/images/tl_oo.gif" width="1" height="4" border="0"></td>
<td width="6"><img src="engine/skins/images/tl_ro.gif" width="6" height="4" border="0"></td>
</tr>
<tr>
<td background="engine/skins/images/tl_lb.gif"><img src="engine/skins/images/tl_lb.gif" width="4" height="1" border="0"></td>
<td style="padding:5px;" bgcolor="#FFFFFF">
<div style="padding: 10px">
Внимание! В настоящее время модуль DLE Imager распространяется как пробная версия сроком на 30 дней. По вопросам дальнейшего
использования обращайтесь к разработчику.
</div>
<table width="100%">
<tr bgcolor="#EFEFEF" height="29">
<td style="padding-left:10px;"><div class="navigation">Imager: перенос изображений с бесплатных хранилищ картинок на свой сайт</div></td>
<td style="padding-right:10px;" align="right"><div class="navigation">v{$version}</div></td>
</tr>
</table>
<div class="unterline"></div>
<div>
<table width="50%" align="left">
<tr>
<td style="padding-left:10px;" colspan="2"><b>Параметры переноса:</b></td>
</tr>
<tr>
<td style="padding:2px;" colspan="2"><div class="hr_line"></div></td>
</tr>
<tr>
<td class="dest_cont">
<table width="100%">
<tr title="cssbody=[dvbdy1] cssheader=[dvhdr1] header=[Куда заливать] body=[Определяет куда будут загружаться изображения. Возможные варианты: на этот же сервер (локально), на удаленный FTP, на хостинг изображений radikal.ru<br>Пример: локально]">
<td style="padding:2px;" width="120">Куда заливать:</td>
<td style="padding:2px;">
<select id="dest" name="dest" onchange="change_dest(this.options[this.selectedIndex].value)">
<option value="local">локально</option>
<option value="ftp">на FTP</option>
<option value="radikal">на Radikal</option>
</select>
<script>document.getElementById("dest").selectedIndex = $dest;</script>
</td>
</tr>
</table>
<table id="local_settings" width="100%" style="display:none">
<tr>
<td style="padding:2px; color:#4169E1">
Изображения будут заливаться в папку uploads/posts. Все изображения будут уменьшены согласно размерам, указаным в разделе "Параметры масштабирования изображений"
</td>
</tr>
</table>
<table id="radikal_settings" width="100%" style="display:none">
<tr>
<td style="padding:2px; color:#4169E1">
Изображения будут заливаться на хостинг картинок radikal.ru. Перед переносом на фотохостинг изображения будут уменьшены согласно размерам, указаным в разделе "Параметры масштабирования изображений"
</td>
</tr>
</table>
<table id="ftp_settings" width="100%" style="display:none">
<tr title="cssbody=[dvbdy1] cssheader=[dvhdr1] header=[Адрес сервера] body=[Адрес FTP сервера (домен или IP) куда будут переноситься изображения<br>Пример: ftp.site.ru]">
<td style="padding:2px;" width="120">Адрес сервера:</td>
<td style="padding:2px;"><input class="edit" style="width:250px;" type="text" id="ip" name="ip" value="{$ip}"></td>
</tr>
<tr title="header=[Логин] body=[Логин для FTP<br>Пример: pupkinv]">
<td style="padding:2px;">Логин:</td>
<td style="padding:2px;"><input class="edit" style="width:250px;" type="text" id="login" name="login" value="{$login}"></td>
</tr>
<tr title="header=[Пароль] body=[Пароль для FTP<br>Пример: qwerty]">
<td style="padding:2px;">Пароль:</td>
<td style="padding:2px;"><input class="edit" style="width:250px;" type="password" id="passwd" name="passwd" value="{$passwd}"></td>
</tr>
<tr title="cssbody=[dvbdy1] cssheader=[dvhdr1] header=[Путь] body=[Путь на FTP куда будут помещаться картинки<br>Пример: /public_html/site.ru/uploads/posts/]">
<td style="padding:2px;">Путь:</td>
<td style="padding:2px;"><input class="edit" style="width:250px;" type="text" id="path" name="path" value="{$path}"></td>
</tr>
<tr height="22">
<td> </td>
<td>
<table>
<tr>
<td style="padding:2px">
<input class="edit" type="button" value="Тест FTP-сервера" onclick="test_ftp()">
</td>
<td><DIV class="hidden" id="progress2"></div></td>
</tr>
</table>
</td>
</tr>
</table>
<script>change_dest(document.getElementById("dest").options[document.getElementById("dest").selectedIndex].value);</script>
</td>
</tr>
</table>
<table width="50%" align="left">
<tr>
<td style="padding-left:10px;" colspan="2"><b>Web параметры:</b></td>
</tr>
<tr>
<td style="padding:2px;" colspan="2"><div class="hr_line"></div></td>
</tr>
<tr title="cssbody=[dvbdy1] cssheader=[dvhdr1] header=[Домен сайта или FTP] body=[Домен с которого картинки переносится не будут. Это может быть домен Вашего сайта или FTP<br>Пример: site.ru]">
<td style="padding:2px;" width="180">Домен сайта или FTP:</td>
<td style="padding:2px;"><input class="edit" style="width:250px;" type="text" id="domain" name="domain" value="{$domain}"></td>
</tr>
<tr title="cssbody=[dvbdy1] cssheader=[dvhdr1] header=[Web URL для папки FTP] body=[URL по которому доступна Ваша папка на FTP в Интернете<br>Пример: http://site.ru/uploads/posts/]">
<td style="padding:2px;">Web URL для папки FTP:</td>
<td style="padding:2px;"><input class="edit" style="width:250px;" type="text" id="url" name="url" value="{$url}"></td>
</tr>
<tr title="cssbody=[dvbdy1] cssheader=[dvhdr1] header=[Домены-исключения] body=[Список доменов, с которых картинки переноситься не будут. Это могут быть алиасы Вашего сайта. Разделитель - символ "|", без пробелов (Внимание, это часть REGEXP!)<br>Пример: site.ru|site.info|site.net]">
<td style="padding:2px;">Домены-исключения:</td>
<td style="padding:2px;"><input class="edit" style="width:250px;" type="text" id="excl_domains" name="excl_domains" value="{$excl_domains}"></td>
</tr>
<tr title="cssbody=[dvbdy1] cssheader=[dvhdr1] header=[Лимит записей на проход] body=[Количество постов обрабатываемых за один проход скрипта. Рекомендуемое количество - 10-50 записей<br>Пример: 10]">
<td style="padding:2px;">Лимит записей на проход:</td>
<td style="padding:2px;"><input class="edit" style="width:250px;" type="text" id="limits" name="limits" value="{$limits}"></td>
</tr>
</table>
</div>
<div style="clear:both"><br></div>
<table width="50%" align="left">
<tr>
<td style="padding-left:10px;" colspan="2"><b>Параметры масштабирования изображений:</b></td>
</tr>
<tr>
<td style="padding:2px;" colspan="2"><div class="hr_line"></div></td>
</tr>
<tr class="hidden" title="cssbody=[dvbdy1] cssheader=[dvhdr1] header=[Разрешенные форматы файлов] body=[Список разрешенных расширений картинок. Разделитель - символ "|", без пробелов (Внимание, это часть REGEXP!)<br>Пример: gif|jpg|png]">
<td style="padding:2px;">Разрешенные форматы файлов:</td>
<td style="padding:2px;" nowrap><input class="edit" style="width:250px;" type="text" id="exts" name="exts" value="{$exts}"></td>
</tr>
<tr title="cssbody=[dvbdy1] cssheader=[dvhdr1] header=[Максимальная ширина] body=[Максимальная ширина получаемых картинок. Изображения большего размера автоматически масштабируются до указанного<br>Пример: 700]">
<td style="padding:2px;" width="300">Максимальная ширина:</td>
<td style="padding:2px;" nowrap><input class="edit" style="width:50px;" type="text" id="max_width" name="max_width" value="{$max_width}"> пх</td>
</tr>
<tr title="cssbody=[dvbdy1] cssheader=[dvhdr1] header=[Минимальная ширина для водяного знака] body=[Минимальная ширина картинки для наложения водяного знака. На изображения меньшего размера водяной знак накладываться не будет<br>Пример: 150]">
<td style="padding:2px;">Мин. ширина для водяного знака:</td>
<td style="padding:2px;"><input class="edit" style="width:50px;" type="text" id="min_width" name="min_width" value="{$min_width}"> пх</td>
</tr>
<tr title="cssbody=[dvbdy1] cssheader=[dvhdr1] header=[Накладывать водяной знак] body=[Разрешить автоматическое наложение водяного знака<br>Пример: Да]">
<td style="padding:2px;">Накладывать водяной знак:</td>
<td style="padding:2px;">
<select id="enable_wm" name="enable_wm">
<option value="1">Да</option>
<option value="0">Нет</option>
</select>
<script>document.getElementById("enable_wm").selectedIndex = $enable_wm</script>
</td>
</tr>
<tr>
<td style="padding:2px;" colspan="2"><div class="hr_line"></div></td>
</tr>
<table width="50%" align="left">
<tr>
<td style="padding-left:10px;" colspan="2"><b>Параметры публикаций:</b></td>
</tr>
<tr>
<td style="padding:2px;" colspan="2"><div class="hr_line"></div></td>
</tr>
<tr title="cssbody=[dvbdy1] cssheader=[dvhdr1] header=[Обрабатывать публикации] body=[Позволяет выбрать тип обрабатываемых публикаций: все публикации, опубликованные или находящиеся на модерации<br>Пример: опубликованные]">
<td style="padding:2px;" width="180">Обрабатывать только:</td>
<td style="padding:2px;">
<select id="post_type" name="post_type">
<option value="0">опубликованные</option>
<option value="1">на проверке</option>
<option value="2">все публикации</option>
</select>
<script>document.getElementById("post_type").selectedIndex = $post_type</script>
</td>
</tr>
<tr title="cssbody=[dvbdy1] cssheader=[dvhdr1] header=[Начать с публикации] body=[ID публикации с которой начнется обработка или 0 если не нужно<br>Пример: 1024]">
<td style="padding:2px;">Начать с публикации:</td>
<td><input class="edit" style="width:50px;" type="text" id="start_id" name="start_id" value="{$start_id}"></td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td style="padding:2px;" colspan="2"><div class="hr_line"></div></td>
</tr>
</table>
<div style="clear:both"></div>
<table width="100%">
<tr>
<td style="padding-left:10px;" colspan="2"><b>Другие параметры:</b></td>
</tr>
<tr>
<td style="padding:2px;" colspan="2"><div class="hr_line"></div></td>
</tr>
<tr title="cssbody=[dvbdy1] cssheader=[dvhdr1] header=[Web-cron] body=[Псевдопланировщик - на страницы Вашего сайта устанавливается код, вызывающий модуль Imager через заданный интервал (10 мин). Web-cron можно использовать для автоматизации запуска модуля при недоступности планировщика операционной системы, однако он будет эффективен только при достаточной посещаемости сайта.]">
<td style="padding:2px;" width="150">Web-cron:</td>
<td style="padding:2px;">
$wc_state
<input type="button" class="edit" value="Включить / выключить" title="cssbody=[dvbdy1] cssheader=[dvhdr1] header=[Web-cron] body=[Включит / выключить Web-cron.<br>PS: веб-сервер должен иметь права записи в щаблон main.tpl сайта]" onclick="webcron()">
</td>
</tr>
<tr title="cssbody=[dvbdy1] cssheader=[dvhdr1] header=[Выключить модуль] body=[Запрещает работу Imager через планировщик задач (cron, Web-cron)]">
<td style="padding:2px;" width="150">Выключить модуль:</td>
<td style="padding:2px;">
<input type="checkbox" id="disabled" name="disabled" $disabled value="1">
</td>
</tr>
<tr>
<td style="padding:2px;" colspan="2"><div class="hr_line"></div></td>
</tr>
</table>
<div style="clear:both"></div>
<table width="100%">
<tr>
<td id="imager_info">
<div class="$update" title="cssbody=[dvbdy1] cssheader=[dvhdr1] header=[Доступна новая версия] body=[{$this->descr}]">
{$this->msg}
</div>
</td>
<td width="20"><div id="progress" class="hidden"></div></td>
<td align="right" width="250">
<input type="button" value="Запустить Imager" class="edit" onclick="start_imager()">
<input type="submit" value="Сохранить" class="edit">
</td>
</tr>
</table>
</td>
<td background="engine/skins/images/tl_rb.gif"><img src="engine/skins/images/tl_rb.gif" width="6" height="1" border="0"></td>
</tr>
<tr>
<td><img src="engine/skins/images/tl_lu.gif" width="4" height="6" border="0"></td>
<td background="engine/skins/images/tl_ub.gif"><img src="engine/skins/images/tl_ub.gif" width="1" height="6" border="0"></td>
<td><img src="engine/skins/images/tl_ru.gif" width="6" height="6" border="0"></td>
</tr>
</table>
<center><a href="engine/inc/imager/License.txt" target="_blank">Лицензионное соглашение</a></center>
</div>
<input type="hidden" name="action" value="save" id="action">
<input type="hidden" name="mod" value="imager">
</form>
<div class="hr_line"></div>
<div class="copyright">
Copyright © by <a href="http://pc-ebooks.com" target="_blank">pc-ebooks.com</a>, 2010<br>
Официальный <a href="http://forum.all-ebooks.info/viewforum.php?f=15" target="_blank">форум</a> модуля<br>
{$this->footer}
</div>
<link rel="stylesheet" type="text/css" href="/engine/inc/imager/styles.css"/>
<script src="/engine/inc/imager/boxover.js"></script>
HTML;
echofooter();
}
function test_ftp($arr) {
$msg = 'Проверка настроек FTP прошла без ошибок (Code:0)';
$conn_id = @ftp_connect($arr['server']);
if ($conn_id!==false) {
if (!@ftp_login($conn_id, $arr['user'], $arr['pass']))
$msg = 'Неверные логин/пароль (Code:1)';
else {
ftp_pasv($conn_id, true);
$dest_file = 'indicator.white.gif';
$fp = fopen(ENGINE_DIR.'/inc/imager/'.$dest_file, 'r');
if (!@ftp_fput($conn_id, $arr['path'].'/'.$dest_file, $fp, FTP_BINARY))
$msg = "Ошибка при попытке передачи тестового файла (Code:2)";
else
ftp_delete($conn_id,$arr['path'].'/'.$dest_file);
fclose($fp);
}
ftp_close($conn_id);
} else
$msg = 'Соединение с FTP-сервером не установлено (Code:3)';
header('Content-type: text/html; charset=windows-1251');
echo $msg;
exit;
}
function getWebconeState() {
global $config;
$filename = ROOT_DIR.'/templates/'.$config['skin'].'/main.tpl';
$tpl = file_get_contents($filename);
return preg_match('/<script[^>]*imager\.js[^>]*>/i',$tpl);
}
function webcron() {
global $config;
$filename = ROOT_DIR.'/templates/'.$config['skin'].'/main.tpl';
$tpl = file_get_contents($filename);
if (preg_match('/<script[^>]*imager\.js[^>]*>/i',$tpl)) {
$tpl = preg_replace("/<script[^>]*imager\.js[^>]*><\/script>(\n|\r)*/i",'',$tpl);
} else {
$tpl = preg_replace('/(<\/body>)/i','<script language="javascript" src="/engine/inc/imager/imager.js"></script>'."\n".'\\1',$tpl);
}
@file_put_contents($filename,$tpl);
}
}
?>