Добавление фото в объявление гостевой
velootpusk
28 марта 2009 г.
Здравствуйте. Подскажите пожалуйста не совсем всё понимающему человеку каким образом реализовать возможность добавления записи с изображением на базе типовой "инфосистемы для гостевой книги, вопросов-ответов". Заранее спасибо
веломагазин и велотуры: http://www.velootpusk.ru
natalya
30 марта 2009 г.
velootpusk, для начала вам нужно будет добавить поле в форму, которое будет предназначено для загрузки файла. Т.к. код формы добавления записи формируется в коде XSL-шаблона "СписокЗаписейГостевойКниги", то и добавлять соответствующее поле нужно именно там. Обработку этого поля нужно производить в коде типовой динамической страницы "Информационная система для Вопросы-ответы, Гостевая книга и т.п." внутри условия:
Для загрузки изображения на сервер и записи информации о нем в базу данных(для его привязки к добавляемому инфоэлементу) используйте код(немного его изменив) из типовой динамической страницы "Импорт RSS-каналов" после комментария "// КОД ДЛЯ ЗАГРУЗКИ ИЗОБРАЖЕНИЙ".
if (isset($_POST['submit_question']))
Для загрузки изображения на сервер и записи информации о нем в базу данных(для его привязки к добавляемому инфоэлементу) используйте код(немного его изменив) из типовой динамической страницы "Импорт RSS-каналов" после комментария "// КОД ДЛЯ ЗАГРУЗКИ ИЗОБРАЖЕНИЙ".
kos
27 августа 2009 г.
подскажите пожалуйста кто нибудь, как реализовать это на примере
даже денежкой отблагодарю
вот код динамической страницы:
<?php
/* ID Информационной системы */
$InformationSystem_id = to_int($GLOBALS['LA']['InformationSystemID']);
// Получаем информацию о текущем пользователе
if (class_exists('SiteUsers'))
{
$SiteUsers = & singleton('SiteUsers');
$site_user_id = $SiteUsers->GetCurrentSiteUser();
}
else
{
$site_user_id = 0;
}
/* Массив внешних параметров, передаваемых в XML */
$external_propertys = array();
/* Добавление комментария */
// ShowAddComment == 1 - только авторизированные
// ShowAddComment == 2 - все
if (isset($_POST['add_comment'])
&& (($GLOBALS['LA']['ShowAddComment'] == 1 && $site_user_id > 0) || $GLOBALS['LA']['ShowAddComment'] == 2))
{
$param['information_items_id'] = to_int($GLOBALS['InformationResult']['item_id']);
/* XSL шаблон для отправки уведомления администратору о добавлении комментария */
$param['admin_email_xsl'] = to_str($GLOBALS['LA']['xsl_admin_email']);
$xsl_add_comment = to_str($GLOBALS['LA']['xsl_add_comment']);
/* Режим добавления комментария:
1 - публиковать сразу,
0 - публиковать после проверки.*/
if (to_bool($GLOBALS['LA']['TypeAddComment'])/* || $site_user_id > 0*/)
{
$param['status'] = 1;
}
else
{
$param['status'] = 0;
}
// Текст комментария
$_POST['comment_text'] = nl2br(to_str($_POST['comment_text']));
// Типографируем текст, если доступен модуль типографирования
if (class_exists('typograph'))
{
$typograph = new typograph();
$_POST['comment_text'] = $typograph->ProcessTypographic($_POST['comment_text']);
}
$param['comment_mail_type'] = to_int($GLOBALS['LA']['comment_mail_type']);
// ID родительского комментария
$param['comment_parent_id'] = to_int($_POST['comment_parent_id']);
$param['comment_autor'] = htmlspecialchars(to_str($_POST['comment_autor']));
$param['comment_email'] = htmlspecialchars(to_str($_POST['comment_email']));
$param['comment_subject'] = htmlspecialchars(to_str($_POST['comment_subject']));
$param['comment_text'] = htmlspecialchars(to_str($_POST['comment_text']));
$param['comment_grade'] = to_int($_POST['comment_grade']);
$param['allowable_tags'] = '<b><strong><i><u><strike><ul><ol><li>';
ob_start();
$GLOBALS['LA_InformationSystem']->ShowAddComment('УведомлениеДобавлениеКомментария', $param);
$external_propertys['message'] = ob_get_clean();
}
if ($GLOBALS['INFSYS_result'] != false)
{
/* XSL шаблон для отображения списка элементов информационной системы */
$xsl_list = to_str($GLOBALS['LA']['xsl_information_system_list']);
/* XSL шаблон для отображения элемента информационной системы */
$xsl_item = to_str($GLOBALS['LA']['xsl_information_item']);
$InformationResult = $GLOBALS['InformationResult'];
/* Массив внешних параметров, передаваемых в XML */
$external_propertys['ОтображатьСсылкуНаАрхив'] = 0;
$external_propertys['ОтображатьСсылкиНаСледующиеСтраницы'] = 1;
/* Массив дополнительных параметров */
$property = array();
/* Число элементов на страницу */
if (isset($InformationResult['items_on_page']))
{
if ($InformationResult['items_on_page'] !== true)
{
$InformationResult['items_on_page'] = to_int($InformationResult['items_on_page']);
}
}
else
{
$InformationResult['items_on_page'] = 10;
}
/* Номер, с которого начинается показ */
if (isset($InformationResult['items_begin']))
{
$InformationResult['items_begin'] = to_int($InformationResult['items_begin']);
}
else
{
$InformationResult['items_begin'] = 0;
}
/* Вывод списка */
if ($GLOBALS['INFSYS_result']['item'] == false)
{
// Если передано имя тэга - фильтруем
if (isset($GLOBALS['INFSYS_result']['tag_name']))
{
if (class_exists('Tag'))
{
$oTag = & singleton('Tag');
$tag_row = $oTag->GetTagByName($GLOBALS['INFSYS_result']['tag_name']);
$property['tags'] = array($tag_row['tag_id']);
// При выводе тэгов вывод элементов ведется из всех групп
$GLOBALS['INFSYS_result']['group'] = false;
}
}
// $property['xml_show_group_type'] = 'all';
// Разрешаем передачу в XML свойств групп
$property['xml_show_group_property'] = true;
// Капча
$Captcha = new Captcha();
$external_propertys['captcha_key'] = $Captcha->GetCaptchaID();
/* Обработка вставки информационного элемента */
if (isset($_POST['submit_question']))
{
// Проверяем правильноть указания капчи
// Для авторизированных пользователей капчу не проверяем
if ($site_user_id > 0
|| $Captcha->ValidCaptcha(to_str($_POST['captcha_key']), to_str($_POST['captcha_keystring'])))
{
if ($GLOBALS['LA_InformationSystem']->confirm_information_item(date('U'), $_SERVER['REMOTE_ADDR']) == 1)
{
$date= date('Y-m-d H:i:s');
/* Определяем группу (если задана)
Принимает в качестве параметра ID информационной системы*/
$group_id = to_int($GLOBALS['INFSYS_result']['group']);
// Статус вновь добавленного элемента
// 0 - не активен (необходимо вручную проверить и включить)
// 1 - активен, виден сразу после публикации
$item_status = to_int($GLOBALS['LA']['ItemStatus']);
// Текст сообщения
$text = nl2br(htmlspecialchars(strip_tags(to_str($_POST['text_item']))));
// Типографируем текст, если доступен модуль типографирования
if (class_exists('typograph'))
{
$typograph = new typograph();
$text = $typograph->ProcessTypographic($text);
}
$param = array();
$param['site_users_id'] = $site_user_id;
// Вставляем запись
$question_id = $GLOBALS['LA_InformationSystem']->InsertInformationItems(0, 0,
$InformationSystem_id, $group_id, $date, htmlspecialchars(strip_tags(to_str($_POST['subject']))), '',
$item_status, $text, '', 0, to_str($_SERVER['REMOTE_ADDR']), '', 1, '', '', '', '', $param);
$row = $GLOBALS['LA_InformationSystem']->GetInformationSystemItems($question_id);
// Вставляем в дополнительные свойства автора, его email и id
$GLOBALS['LA_InformationSystem']->InsertInformationPropertysItems(0, 0, to_int($GLOBALS['LA']['autor_property_id']), $question_id, htmlspecialchars(strip_tags(to_str($_POST['autor']))));
$GLOBALS['LA_InformationSystem']->InsertInformationPropertysItems(0, 0, to_int($GLOBALS['LA']['email_property_id']), $question_id, htmlspecialchars(strip_tags(to_str($_POST['email']))));
// Если пользователь зерегистрирован, получаем информацию
if (class_exists('SiteUsers') && !empty($site_user_id))
{
$row_site_user = $SiteUsers->GetSiteUser($site_user_id);
if(!empty($row_site_user['site_users_name']) && !empty($row_site_user['site_users_surname']))
{
$site_user_name = $row_site_user['site_users_name'].' '.$row_site_user['site_users_surname'];
}
else
{
$site_user_name = $row_site_user['site_users_login'];
}
$site_user_email = $row_site_user['site_users_email'];
}
else
{
$site_user_name = htmlspecialchars(strip_tags(to_str($_POST['autor'])));
$site_user_email = htmlspecialchars(strip_tags(to_str($_POST['email'])));
}
ob_start();
if ($item_status == 0)
{
?>
<p>Благодарим Вас, <?php echo $site_user_name?>!
<br />Ваша запись принята. После проверки Администратором она станет доступной!
</p>
<?php
}
else
{
?>
<p>Благодарим Вас, <?php echo $site_user_name?>!
<br />Ваша запись принята и опубликована!
</p>
<?php
}
$external_propertys['message'] = ob_get_clean();
// Отправка письма администратору
$message = "Доброе время суток, уважаемый Администратор!\n\nНа сайт, поддерживаемый системой управления сайтом HostCMS, была добавлена запись:\n";
$message .= "Автор: ".$site_user_name."\n";
$message .= "E-mail: ".$site_user_email."\n";
$message .= "Тема: ".htmlspecialchars(strip_tags(to_str($_POST['subject'])))."\n";
$message .= "Информационная система: ".$row['information_systems_name']."\n";
$message .= "Информационный элемент: ".$row['information_items_name']."\n";
$message .= "Редактировать: http://".to_str($_SERVER['HTTP_HOST'])."/admin/InformationSystems/InformationSystems.php?admin_forms_id=12&operation=edit_group_item&check_1_{$question_id}=1&information_system_id={$InformationSystem_id}\n";
$DateClass = & singleton('DateClass');
$message .= "Дата: ".$DateClass->datetime_format($date)."\n";
$message .= "IP-адрес: ".to_str($_SERVER['REMOTE_ADDR'])."\n";
$message .= "Вопрос: ".htmlspecialchars(strip_tags(to_str($_POST['text_item'])));
$subject = 'Добавление вопроса';
$kernel = & singleton('kernel');
$kernel->SendMailWithFile(EMAIL_TO, EMAIL_TO, $subject, $message, array(), 'text/plain');
}
else // нельзя добавлить объявление - прошло мало времени
{
$external_propertys['error'] = 'Запись не может быть добавлена, т.к. прошло мало времени с момента Вашего последнего добавления вопроса!';
}
}
// Ошибка добавления записи
else
{
$external_propertys['error'] = 'Вы неверно ввели число подтверждения отправки формы!';
$external_propertys['fio'] = htmlspecialchars(strip_tags(to_str($_POST['autor'])));
$external_propertys['email'] = htmlspecialchars(strip_tags(to_str($_POST['email'])));
$external_propertys['subject'] = htmlspecialchars(strip_tags(to_str($_POST['subject'])));
$external_propertys['text_item'] = htmlspecialchars(strip_tags(to_str($_POST['text_item'])));
}
}
/* Отображаем информационную систему */
$GLOBALS['LA_InformationSystem']->ShowInformationSystem($InformationSystem_id, $GLOBALS['INFSYS_result']['group'], $xsl_list, $InformationResult['items_on_page'], $InformationResult['items_begin'], $external_propertys, $property);
}
else
{
/* Определяем идентификатор информационного элемента */
$item_id = $GLOBALS['LA_InformationSystem']->GetIdInformationItem($GLOBALS['INFSYS_result']['item'], $GLOBALS['INFSYS_result']['group'], $InformationSystem_id);
$property['part'] = $GLOBALS['part_ii'];
// Запрещаем передачу в XML свойств групп
$property['xml_show_group_property'] = false;
/* Выводим элемент информационной системы */
$GLOBALS['LA_InformationSystem']->ShowInformationSystemItem($item_id, $xsl_item, $external_propertys);
}
}
?>
а вот код из для вставки изображений из rss
if (!empty($title))
{
// КОД ДЛЯ ЗАГРУЗКИ ИЗОБРАЖЕНИЙ
$information_item_small_image = '';
$information_item_image = '';
if (isset($result['items'][$i]['enclosure']['url']))
{
$img = to_str($result['items'][$i]['enclosure']['url']);
$temp_file = tempnam(TMP_DIR, "TMP_");
if (@copy($img, $temp_file))
{
chmod($temp_file, CHMOD_FILE);
$param_img = array();
/* ---------------------------------- */
// Определяем расширение файла
$exp = strtolower($kernel->GetExtension($img));
$name = 'information_items_' . time() . $count_import_item . '.' . $exp;
$information_item_image = CMS_FOLDER . UPLOADDIR . $name;
$information_item_small_image = CMS_FOLDER . UPLOADDIR . 'small_' . $name;
// Путь к файлу-источнику большого изображения;
$param['path_source_big_image'] = $temp_file;
// Путь к файлу-источнику малого изображения;
$param['path_source_small_image'] = $temp_file;
//Оригинальное имя файла большого изображения
$param['original_file_name_big_image'] = '';
// Путь к создаваемому файлу большого изображения
$param['path_target_big_image'] = $information_item_image;
// Путь к создаваемому файлу малого изображения;
$param['path_target_small_image'] = $information_item_small_image;
// Оригинальное имя файла малого изображения
$param['original_file_name_small_image'] = $name;
// Использовать большое изображение для создания малого (true - использовать (по умолчанию), false - не использовать)
$param['use_big_image'] = true;
// Значение максимальной ширины большого изображения
$param['max_width_big_image'] = $infsys_row['information_systems_image_big_max_width'];
// Значение максимальной высоты большого изображения
$param['max_height_big_image'] = $infsys_row['information_systems_image_big_max_height'];
// Значение максимальной ширины малого изображения;
$param['max_width_small_image'] = $infsys_row['information_systems_image_small_max_width'];
// Значение максимальной высоты малого изображения;
$param['max_height_small_image'] = $infsys_row['information_systems_image_small_max_height'];
// Путь к файлу с "водяным знаком"
$param['watermark_file_path'] = '';
$result_img = $kernel->AdminLoadFiles($param);
if ($result_img['big_image'])
{
$information_item_image = basename($param['path_target_big_image']);
}
if ($result_img['small_image'])
{
$information_item_small_image = basename($param['path_target_small_image']);
}
@unlink($temp_file);
}
}
// Вставка элемента
$InformationSystem->InsertInformationItems(0, 0, $infsys_id,
$infgroup_id, $date, $title, $desc, 1, $text, $information_item_image, 0,
$_SERVER['REMOTE_ADDR'], '', 1, '', '', '', -1, array('information_items_small_image' =>
$information_item_small_image));
$count_import_item++;
}
что куда вписать и что прописать в xsl шаблоне для добавления пользователями фотографий... и как сделать что бы пользователь смог создавать свои альбомы, т.е. группы ИС и туда добавлять фото, причем доступ к созданным группам только у него.
даже денежкой отблагодарю
вот код динамической страницы:
<?php
/* ID Информационной системы */
$InformationSystem_id = to_int($GLOBALS['LA']['InformationSystemID']);
// Получаем информацию о текущем пользователе
if (class_exists('SiteUsers'))
{
$SiteUsers = & singleton('SiteUsers');
$site_user_id = $SiteUsers->GetCurrentSiteUser();
}
else
{
$site_user_id = 0;
}
/* Массив внешних параметров, передаваемых в XML */
$external_propertys = array();
/* Добавление комментария */
// ShowAddComment == 1 - только авторизированные
// ShowAddComment == 2 - все
if (isset($_POST['add_comment'])
&& (($GLOBALS['LA']['ShowAddComment'] == 1 && $site_user_id > 0) || $GLOBALS['LA']['ShowAddComment'] == 2))
{
$param['information_items_id'] = to_int($GLOBALS['InformationResult']['item_id']);
/* XSL шаблон для отправки уведомления администратору о добавлении комментария */
$param['admin_email_xsl'] = to_str($GLOBALS['LA']['xsl_admin_email']);
$xsl_add_comment = to_str($GLOBALS['LA']['xsl_add_comment']);
/* Режим добавления комментария:
1 - публиковать сразу,
0 - публиковать после проверки.*/
if (to_bool($GLOBALS['LA']['TypeAddComment'])/* || $site_user_id > 0*/)
{
$param['status'] = 1;
}
else
{
$param['status'] = 0;
}
// Текст комментария
$_POST['comment_text'] = nl2br(to_str($_POST['comment_text']));
// Типографируем текст, если доступен модуль типографирования
if (class_exists('typograph'))
{
$typograph = new typograph();
$_POST['comment_text'] = $typograph->ProcessTypographic($_POST['comment_text']);
}
$param['comment_mail_type'] = to_int($GLOBALS['LA']['comment_mail_type']);
// ID родительского комментария
$param['comment_parent_id'] = to_int($_POST['comment_parent_id']);
$param['comment_autor'] = htmlspecialchars(to_str($_POST['comment_autor']));
$param['comment_email'] = htmlspecialchars(to_str($_POST['comment_email']));
$param['comment_subject'] = htmlspecialchars(to_str($_POST['comment_subject']));
$param['comment_text'] = htmlspecialchars(to_str($_POST['comment_text']));
$param['comment_grade'] = to_int($_POST['comment_grade']);
$param['allowable_tags'] = '<b><strong><i><u><strike><ul><ol><li>';
ob_start();
$GLOBALS['LA_InformationSystem']->ShowAddComment('УведомлениеДобавлениеКомментария', $param);
$external_propertys['message'] = ob_get_clean();
}
if ($GLOBALS['INFSYS_result'] != false)
{
/* XSL шаблон для отображения списка элементов информационной системы */
$xsl_list = to_str($GLOBALS['LA']['xsl_information_system_list']);
/* XSL шаблон для отображения элемента информационной системы */
$xsl_item = to_str($GLOBALS['LA']['xsl_information_item']);
$InformationResult = $GLOBALS['InformationResult'];
/* Массив внешних параметров, передаваемых в XML */
$external_propertys['ОтображатьСсылкуНаАрхив'] = 0;
$external_propertys['ОтображатьСсылкиНаСледующиеСтраницы'] = 1;
/* Массив дополнительных параметров */
$property = array();
/* Число элементов на страницу */
if (isset($InformationResult['items_on_page']))
{
if ($InformationResult['items_on_page'] !== true)
{
$InformationResult['items_on_page'] = to_int($InformationResult['items_on_page']);
}
}
else
{
$InformationResult['items_on_page'] = 10;
}
/* Номер, с которого начинается показ */
if (isset($InformationResult['items_begin']))
{
$InformationResult['items_begin'] = to_int($InformationResult['items_begin']);
}
else
{
$InformationResult['items_begin'] = 0;
}
/* Вывод списка */
if ($GLOBALS['INFSYS_result']['item'] == false)
{
// Если передано имя тэга - фильтруем
if (isset($GLOBALS['INFSYS_result']['tag_name']))
{
if (class_exists('Tag'))
{
$oTag = & singleton('Tag');
$tag_row = $oTag->GetTagByName($GLOBALS['INFSYS_result']['tag_name']);
$property['tags'] = array($tag_row['tag_id']);
// При выводе тэгов вывод элементов ведется из всех групп
$GLOBALS['INFSYS_result']['group'] = false;
}
}
// $property['xml_show_group_type'] = 'all';
// Разрешаем передачу в XML свойств групп
$property['xml_show_group_property'] = true;
// Капча
$Captcha = new Captcha();
$external_propertys['captcha_key'] = $Captcha->GetCaptchaID();
/* Обработка вставки информационного элемента */
if (isset($_POST['submit_question']))
{
// Проверяем правильноть указания капчи
// Для авторизированных пользователей капчу не проверяем
if ($site_user_id > 0
|| $Captcha->ValidCaptcha(to_str($_POST['captcha_key']), to_str($_POST['captcha_keystring'])))
{
if ($GLOBALS['LA_InformationSystem']->confirm_information_item(date('U'), $_SERVER['REMOTE_ADDR']) == 1)
{
$date= date('Y-m-d H:i:s');
/* Определяем группу (если задана)
Принимает в качестве параметра ID информационной системы*/
$group_id = to_int($GLOBALS['INFSYS_result']['group']);
// Статус вновь добавленного элемента
// 0 - не активен (необходимо вручную проверить и включить)
// 1 - активен, виден сразу после публикации
$item_status = to_int($GLOBALS['LA']['ItemStatus']);
// Текст сообщения
$text = nl2br(htmlspecialchars(strip_tags(to_str($_POST['text_item']))));
// Типографируем текст, если доступен модуль типографирования
if (class_exists('typograph'))
{
$typograph = new typograph();
$text = $typograph->ProcessTypographic($text);
}
$param = array();
$param['site_users_id'] = $site_user_id;
// Вставляем запись
$question_id = $GLOBALS['LA_InformationSystem']->InsertInformationItems(0, 0,
$InformationSystem_id, $group_id, $date, htmlspecialchars(strip_tags(to_str($_POST['subject']))), '',
$item_status, $text, '', 0, to_str($_SERVER['REMOTE_ADDR']), '', 1, '', '', '', '', $param);
$row = $GLOBALS['LA_InformationSystem']->GetInformationSystemItems($question_id);
// Вставляем в дополнительные свойства автора, его email и id
$GLOBALS['LA_InformationSystem']->InsertInformationPropertysItems(0, 0, to_int($GLOBALS['LA']['autor_property_id']), $question_id, htmlspecialchars(strip_tags(to_str($_POST['autor']))));
$GLOBALS['LA_InformationSystem']->InsertInformationPropertysItems(0, 0, to_int($GLOBALS['LA']['email_property_id']), $question_id, htmlspecialchars(strip_tags(to_str($_POST['email']))));
// Если пользователь зерегистрирован, получаем информацию
if (class_exists('SiteUsers') && !empty($site_user_id))
{
$row_site_user = $SiteUsers->GetSiteUser($site_user_id);
if(!empty($row_site_user['site_users_name']) && !empty($row_site_user['site_users_surname']))
{
$site_user_name = $row_site_user['site_users_name'].' '.$row_site_user['site_users_surname'];
}
else
{
$site_user_name = $row_site_user['site_users_login'];
}
$site_user_email = $row_site_user['site_users_email'];
}
else
{
$site_user_name = htmlspecialchars(strip_tags(to_str($_POST['autor'])));
$site_user_email = htmlspecialchars(strip_tags(to_str($_POST['email'])));
}
ob_start();
if ($item_status == 0)
{
?>
<p>Благодарим Вас, <?php echo $site_user_name?>!
<br />Ваша запись принята. После проверки Администратором она станет доступной!
</p>
<?php
}
else
{
?>
<p>Благодарим Вас, <?php echo $site_user_name?>!
<br />Ваша запись принята и опубликована!
</p>
<?php
}
$external_propertys['message'] = ob_get_clean();
// Отправка письма администратору
$message = "Доброе время суток, уважаемый Администратор!\n\nНа сайт, поддерживаемый системой управления сайтом HostCMS, была добавлена запись:\n";
$message .= "Автор: ".$site_user_name."\n";
$message .= "E-mail: ".$site_user_email."\n";
$message .= "Тема: ".htmlspecialchars(strip_tags(to_str($_POST['subject'])))."\n";
$message .= "Информационная система: ".$row['information_systems_name']."\n";
$message .= "Информационный элемент: ".$row['information_items_name']."\n";
$message .= "Редактировать: http://".to_str($_SERVER['HTTP_HOST'])."/admin/InformationSystems/InformationSystems.php?admin_forms_id=12&operation=edit_group_item&check_1_{$question_id}=1&information_system_id={$InformationSystem_id}\n";
$DateClass = & singleton('DateClass');
$message .= "Дата: ".$DateClass->datetime_format($date)."\n";
$message .= "IP-адрес: ".to_str($_SERVER['REMOTE_ADDR'])."\n";
$message .= "Вопрос: ".htmlspecialchars(strip_tags(to_str($_POST['text_item'])));
$subject = 'Добавление вопроса';
$kernel = & singleton('kernel');
$kernel->SendMailWithFile(EMAIL_TO, EMAIL_TO, $subject, $message, array(), 'text/plain');
}
else // нельзя добавлить объявление - прошло мало времени
{
$external_propertys['error'] = 'Запись не может быть добавлена, т.к. прошло мало времени с момента Вашего последнего добавления вопроса!';
}
}
// Ошибка добавления записи
else
{
$external_propertys['error'] = 'Вы неверно ввели число подтверждения отправки формы!';
$external_propertys['fio'] = htmlspecialchars(strip_tags(to_str($_POST['autor'])));
$external_propertys['email'] = htmlspecialchars(strip_tags(to_str($_POST['email'])));
$external_propertys['subject'] = htmlspecialchars(strip_tags(to_str($_POST['subject'])));
$external_propertys['text_item'] = htmlspecialchars(strip_tags(to_str($_POST['text_item'])));
}
}
/* Отображаем информационную систему */
$GLOBALS['LA_InformationSystem']->ShowInformationSystem($InformationSystem_id, $GLOBALS['INFSYS_result']['group'], $xsl_list, $InformationResult['items_on_page'], $InformationResult['items_begin'], $external_propertys, $property);
}
else
{
/* Определяем идентификатор информационного элемента */
$item_id = $GLOBALS['LA_InformationSystem']->GetIdInformationItem($GLOBALS['INFSYS_result']['item'], $GLOBALS['INFSYS_result']['group'], $InformationSystem_id);
$property['part'] = $GLOBALS['part_ii'];
// Запрещаем передачу в XML свойств групп
$property['xml_show_group_property'] = false;
/* Выводим элемент информационной системы */
$GLOBALS['LA_InformationSystem']->ShowInformationSystemItem($item_id, $xsl_item, $external_propertys);
}
}
?>
а вот код из для вставки изображений из rss
if (!empty($title))
{
// КОД ДЛЯ ЗАГРУЗКИ ИЗОБРАЖЕНИЙ
$information_item_small_image = '';
$information_item_image = '';
if (isset($result['items'][$i]['enclosure']['url']))
{
$img = to_str($result['items'][$i]['enclosure']['url']);
$temp_file = tempnam(TMP_DIR, "TMP_");
if (@copy($img, $temp_file))
{
chmod($temp_file, CHMOD_FILE);
$param_img = array();
/* ---------------------------------- */
// Определяем расширение файла
$exp = strtolower($kernel->GetExtension($img));
$name = 'information_items_' . time() . $count_import_item . '.' . $exp;
$information_item_image = CMS_FOLDER . UPLOADDIR . $name;
$information_item_small_image = CMS_FOLDER . UPLOADDIR . 'small_' . $name;
// Путь к файлу-источнику большого изображения;
$param['path_source_big_image'] = $temp_file;
// Путь к файлу-источнику малого изображения;
$param['path_source_small_image'] = $temp_file;
//Оригинальное имя файла большого изображения
$param['original_file_name_big_image'] = '';
// Путь к создаваемому файлу большого изображения
$param['path_target_big_image'] = $information_item_image;
// Путь к создаваемому файлу малого изображения;
$param['path_target_small_image'] = $information_item_small_image;
// Оригинальное имя файла малого изображения
$param['original_file_name_small_image'] = $name;
// Использовать большое изображение для создания малого (true - использовать (по умолчанию), false - не использовать)
$param['use_big_image'] = true;
// Значение максимальной ширины большого изображения
$param['max_width_big_image'] = $infsys_row['information_systems_image_big_max_width'];
// Значение максимальной высоты большого изображения
$param['max_height_big_image'] = $infsys_row['information_systems_image_big_max_height'];
// Значение максимальной ширины малого изображения;
$param['max_width_small_image'] = $infsys_row['information_systems_image_small_max_width'];
// Значение максимальной высоты малого изображения;
$param['max_height_small_image'] = $infsys_row['information_systems_image_small_max_height'];
// Путь к файлу с "водяным знаком"
$param['watermark_file_path'] = '';
$result_img = $kernel->AdminLoadFiles($param);
if ($result_img['big_image'])
{
$information_item_image = basename($param['path_target_big_image']);
}
if ($result_img['small_image'])
{
$information_item_small_image = basename($param['path_target_small_image']);
}
@unlink($temp_file);
}
}
// Вставка элемента
$InformationSystem->InsertInformationItems(0, 0, $infsys_id,
$infgroup_id, $date, $title, $desc, 1, $text, $information_item_image, 0,
$_SERVER['REMOTE_ADDR'], '', 1, '', '', '', -1, array('information_items_small_image' =>
$information_item_small_image));
$count_import_item++;
}
что куда вписать и что прописать в xsl шаблоне для добавления пользователями фотографий... и как сделать что бы пользователь смог создавать свои альбомы, т.е. группы ИС и туда добавлять фото, причем доступ к созданным группам только у него.
Ivanov
Модератор
28 августа 2009 г.
kos, для добавления изображения в типовой динамической странице после кода
// Вставляем запись
$question_id = $GLOBALS['LA_InformationSystem']->InsertInformationItems(0, 0,
$InformationSystem_id, $group_id, $date, htmlspecialchars(strip_tags(to_str($_POST['subject']))), '',
$item_status, $text, '', 0, to_str($_SERVER['REMOTE_ADDR']), '', 1, '', '', '', '', $param);
необходимо добавить следующий код
// ВНИМАНИЕ!!! В данном примере предполагается, что поле загрузки файла в форме называется item_image
// Передан файл
if (isset($_FILES['item_image']['tmp_name']) && $_FILES['item_image']['size'])
{
$kernel = & singleton('kernel');
$information_item_small_image = '';
$information_item_image = '';
// Формируем путь к папке информационного элемента по идентификатору информационного элемента
$item_dir = $information_system->GetInformationItemDir($question_id);
$uploaddir = CMS_FOLDER . $item_dir;
// Получаем данные о информационной системе
$infsys_row = $GLOBALS['LA_InformationSystem']->GetInformationSystem($InformationSystem_id);
// Создаем папку для информационного элемента
$kernel->PathMkdir($item_dir);
$file_name = $file->PathCorrection($_FILES['item_image']['name']);
// Не преобразовываем название загружаемого файла
if ($infsys_row['information_systems_file_name_conversion'] == 0)
{
$information_item_image = $uploaddir . $file_name;
$information_item_small_image = $uploaddir . 'small_' . $file_name;
}
else // Преобразовываем название загружаемого файла
{
// Определяем расширение файла
$exp = strtolower($kernel->GetExtension($file_name));
$information_item_image = $uploaddir . 'information_items_' . $question_id . '.' . $exp;
$information_item_small_image = $uploaddir . 'small_information_items_' . $question_id . '.' . $exp;
}
$temp_file = $_FILES['item_image']['tmp_name'];
$param_img = array();
// Путь к файлу-источнику большого изображения;
$param_img['path_source_big_image'] = $temp_file;
// Путь к файлу-источнику малого изображения;
$param_img['path_source_small_image'] = $temp_file;
//Оригинальное имя файла большого изображения
$param_img['original_file_name_big_image'] = '';
// Путь к создаваемому файлу большого изображения
$param_img['path_target_big_image'] = $information_item_image;
// Путь к создаваемому файлу малого изображения;
$param_img['path_target_small_image'] = $information_item_small_image;
// Оригинальное имя файла малого изображения
$param_img['original_file_name_small_image'] = $name;
// Использовать большое изображение для создания малого (true - использовать (по умолчанию), false - не использовать)
$param['use_big_image'] = true;
// Значение максимальной ширины большого изображения
$param['max_width_big_image'] = $infsys_row['information_systems_image_big_max_width'];
// Значение максимальной высоты большого изображения
$param_img['max_height_big_image'] = $infsys_row['information_systems_image_big_max_height'];
// Значение максимальной ширины малого изображения;
$param_img['max_width_small_image'] = $infsys_row['information_systems_image_small_max_width'];
// Значение максимальной высоты малого изображения;
$param_img['max_height_small_image'] = $infsys_row['information_systems_image_small_max_height'];
// Путь к файлу с "водяным знаком"
$param_img['watermark_file_path'] = '';
$result_img = $kernel->AdminLoadFiles($param_img);
if ($result_img['big_image'])
{
$information_item_image = basename($param_img['path_target_big_image']);
}
if ($result_img['small_image'])
{
$information_item_small_image = basename($param_img['path_target_small_image']);
}
$param = array();
$param['information_items_id'] = $question_id;
$param['information_items_image'] = $information_item_image;
$param['information_items_small_image'] = $information_item_small_image;
// Обновляем информацию о добавленном ранее информационном элементе
$GLOBALS['LA_InformationSystem']->InsertInformationItem($param);
}
// Вставляем запись
$question_id = $GLOBALS['LA_InformationSystem']->InsertInformationItems(0, 0,
$InformationSystem_id, $group_id, $date, htmlspecialchars(strip_tags(to_str($_POST['subject']))), '',
$item_status, $text, '', 0, to_str($_SERVER['REMOTE_ADDR']), '', 1, '', '', '', '', $param);
необходимо добавить следующий код
// ВНИМАНИЕ!!! В данном примере предполагается, что поле загрузки файла в форме называется item_image
// Передан файл
if (isset($_FILES['item_image']['tmp_name']) && $_FILES['item_image']['size'])
{
$kernel = & singleton('kernel');
$information_item_small_image = '';
$information_item_image = '';
// Формируем путь к папке информационного элемента по идентификатору информационного элемента
$item_dir = $information_system->GetInformationItemDir($question_id);
$uploaddir = CMS_FOLDER . $item_dir;
// Получаем данные о информационной системе
$infsys_row = $GLOBALS['LA_InformationSystem']->GetInformationSystem($InformationSystem_id);
// Создаем папку для информационного элемента
$kernel->PathMkdir($item_dir);
$file_name = $file->PathCorrection($_FILES['item_image']['name']);
// Не преобразовываем название загружаемого файла
if ($infsys_row['information_systems_file_name_conversion'] == 0)
{
$information_item_image = $uploaddir . $file_name;
$information_item_small_image = $uploaddir . 'small_' . $file_name;
}
else // Преобразовываем название загружаемого файла
{
// Определяем расширение файла
$exp = strtolower($kernel->GetExtension($file_name));
$information_item_image = $uploaddir . 'information_items_' . $question_id . '.' . $exp;
$information_item_small_image = $uploaddir . 'small_information_items_' . $question_id . '.' . $exp;
}
$temp_file = $_FILES['item_image']['tmp_name'];
$param_img = array();
// Путь к файлу-источнику большого изображения;
$param_img['path_source_big_image'] = $temp_file;
// Путь к файлу-источнику малого изображения;
$param_img['path_source_small_image'] = $temp_file;
//Оригинальное имя файла большого изображения
$param_img['original_file_name_big_image'] = '';
// Путь к создаваемому файлу большого изображения
$param_img['path_target_big_image'] = $information_item_image;
// Путь к создаваемому файлу малого изображения;
$param_img['path_target_small_image'] = $information_item_small_image;
// Оригинальное имя файла малого изображения
$param_img['original_file_name_small_image'] = $name;
// Использовать большое изображение для создания малого (true - использовать (по умолчанию), false - не использовать)
$param['use_big_image'] = true;
// Значение максимальной ширины большого изображения
$param['max_width_big_image'] = $infsys_row['information_systems_image_big_max_width'];
// Значение максимальной высоты большого изображения
$param_img['max_height_big_image'] = $infsys_row['information_systems_image_big_max_height'];
// Значение максимальной ширины малого изображения;
$param_img['max_width_small_image'] = $infsys_row['information_systems_image_small_max_width'];
// Значение максимальной высоты малого изображения;
$param_img['max_height_small_image'] = $infsys_row['information_systems_image_small_max_height'];
// Путь к файлу с "водяным знаком"
$param_img['watermark_file_path'] = '';
$result_img = $kernel->AdminLoadFiles($param_img);
if ($result_img['big_image'])
{
$information_item_image = basename($param_img['path_target_big_image']);
}
if ($result_img['small_image'])
{
$information_item_small_image = basename($param_img['path_target_small_image']);
}
$param = array();
$param['information_items_id'] = $question_id;
$param['information_items_image'] = $information_item_image;
$param['information_items_small_image'] = $information_item_small_image;
// Обновляем информацию о добавленном ранее информационном элементе
$GLOBALS['LA_InformationSystem']->InsertInformationItem($param);
}
e_admin
10 ноября 2009 г.
Спасибо большое за приведённый код, но еще один маааленький вопрос - что то догнать не могу, а явно мелочь какая то. Вот вставили код, приведённый выше в соответствующую типовую динамическую страницу. Дальше добавили в XSL в форму строку
Файл: <br/><input type="file" name="item_image" size="30" /><br/><br/>
Дальше возникает вопрос: а как выводить эту картинку потом? я пробовал делать так же как выводится в XSL-шаблоне для СписокЭлементовИнфосистемы:
<xsl:if test="item_small_image!=''">
<a href="{item_path}">
<img src="{item_small_image}" alt="" align="left"/></a>
</xsl:if>
И добавлял этот код в XSL гостевой после
<xsl:if test="item_name != ''">
<b><xsl:value-of select="item_name"/></b><br/>
</xsl:if>
Но так не выходит. Подскажите пожалуйста, господа.
Файл: <br/><input type="file" name="item_image" size="30" /><br/><br/>
Дальше возникает вопрос: а как выводить эту картинку потом? я пробовал делать так же как выводится в XSL-шаблоне для СписокЭлементовИнфосистемы:
<xsl:if test="item_small_image!=''">
<a href="{item_path}">
<img src="{item_small_image}" alt="" align="left"/></a>
</xsl:if>
И добавлял этот код в XSL гостевой после
<xsl:if test="item_name != ''">
<b><xsl:value-of select="item_name"/></b><br/>
</xsl:if>
Но так не выходит. Подскажите пожалуйста, господа.
e_admin
10 ноября 2009 г.
Я разбирался и похоже, что в это условие не выполнено:
if (isset($_FILES['item_image']['tmp_name']) && $_FILES['item_image']['size'])
и соответственно код после него не выполняется.
if (isset($_FILES['item_image']['tmp_name']) && $_FILES['item_image']['size'])
и соответственно код после него не выполняется.
Qualis
13 февраля 2010 г.
Нет, не пишет картинку в инфоэлемент. Всю голову уже сломал
Ivanov
Модератор
17 февраля 2010 г.
1. Код измененной типовой динамической страницы "Информационная система для Вопросы-ответы, Гостевая книга и т.п."
<?php
/* ID Информационной системы */
$InformationSystem_id = to_int($GLOBALS['LA']['InformationSystemID']);
// Получаем информацию о текущем пользователе
if (class_exists('SiteUsers'))
{
$SiteUsers = & singleton('SiteUsers');
$site_user_id = $SiteUsers->GetCurrentSiteUser();
}
else
{
$site_user_id = 0;
}
/* Массив внешних параметров, передаваемых в XML */
$external_propertys = array();
/* Добавление комментария */
// ShowAddComment == 1 - только авторизированные
// ShowAddComment == 2 - все
if (isset($_POST['add_comment'])
&& (($GLOBALS['LA']['ShowAddComment'] == 1 && $site_user_id > 0) || $GLOBALS['LA']['ShowAddComment'] == 2))
{
$param['information_items_id'] = to_int($GLOBALS['InformationResult']['item_id']);
/* XSL шаблон для отправки уведомления администратору о добавлении комментария */
$param['admin_email_xsl'] = to_str($GLOBALS['LA']['xsl_admin_email']);
$xsl_add_comment = to_str($GLOBALS['LA']['xsl_add_comment']);
/* Режим добавления комментария:
1 - публиковать сразу,
0 - публиковать после проверки.*/
if (to_bool($GLOBALS['LA']['TypeAddComment'])/* || $site_user_id > 0*/)
{
$param['status'] = 1;
}
else
{
$param['status'] = 0;
}
// Текст комментария
$_POST['comment_text'] = nl2br(to_str($_POST['comment_text']));
// Типографируем текст, если доступен модуль типографирования
if (class_exists('typograph'))
{
$typograph = new typograph();
$_POST['comment_text'] = $typograph->ProcessTypographic($_POST['comment_text']);
}
$param['comment_mail_type'] = to_int($GLOBALS['LA']['comment_mail_type']);
// ID родительского комментария
$param['comment_parent_id'] = to_int($_POST['comment_parent_id']);
$param['comment_autor'] = htmlspecialchars(to_str($_POST['comment_autor']));
$param['comment_email'] = htmlspecialchars(to_str($_POST['comment_email']));
$param['comment_subject'] = htmlspecialchars(to_str($_POST['comment_subject']));
$param['comment_text'] = htmlspecialchars(to_str($_POST['comment_text']));
$param['comment_grade'] = to_int($_POST['comment_grade']);
$param['allowable_tags'] = '<b><strong><i><u><strike><ul><ol><li>';
ob_start();
$GLOBALS['LA_InformationSystem']->ShowAddComment('УведомлениеДобавлениеКомментария', $param);
$external_propertys['message'] = ob_get_clean();
}
if ($GLOBALS['INFSYS_result'] != false)
{
/* XSL шаблон для отображения списка элементов информационной системы */
$xsl_list = to_str($GLOBALS['LA']['xsl_information_system_list']);
/* XSL шаблон для отображения элемента информационной системы */
$xsl_item = to_str($GLOBALS['LA']['xsl_information_item']);
$InformationResult = $GLOBALS['InformationResult'];
/* Массив внешних параметров, передаваемых в XML */
$external_propertys['ОтображатьСсылкуНаАрхив'] = 0;
$external_propertys['ОтображатьСсылкиНаСледующиеСтраницы'] = 1;
/* Массив дополнительных параметров */
$property = array();
/* Число элементов на страницу */
if (isset($InformationResult['items_on_page']))
{
if ($InformationResult['items_on_page'] !== true)
{
$InformationResult['items_on_page'] = to_int($InformationResult['items_on_page']);
}
}
else
{
$InformationResult['items_on_page'] = 10;
}
/* Номер, с которого начинается показ */
if (isset($InformationResult['items_begin']))
{
$InformationResult['items_begin'] = to_int($InformationResult['items_begin']);
}
else
{
$InformationResult['items_begin'] = 0;
}
/* Вывод списка */
if ($GLOBALS['INFSYS_result']['item'] == false)
{
// Если передано имя тэга - фильтруем
if (isset($GLOBALS['INFSYS_result']['tag_name']))
{
if (class_exists('Tag'))
{
$oTag = & singleton('Tag');
$tag_row = $oTag->GetTagByName($GLOBALS['INFSYS_result']['tag_name']);
$property['tags'] = array($tag_row['tag_id']);
// При выводе тэгов вывод элементов ведется из всех групп
$GLOBALS['INFSYS_result']['group'] = false;
}
}
// $property['xml_show_group_type'] = 'all';
// Разрешаем передачу в XML свойств групп
$property['xml_show_group_property'] = true;
// Капча
$Captcha = new Captcha();
$file = & singleton('File');
$external_propertys['captcha_key'] = $Captcha->GetCaptchaID();
/* Обработка вставки информационного элемента */
if (isset($_POST['submit_question']))
{
// Проверяем правильноть указания капчи
// Для авторизированных пользователей капчу не проверяем
if ($site_user_id > 0
|| $Captcha->ValidCaptcha(to_str($_POST['captcha_key']), to_str($_POST['captcha_keystring'])))
{
if ($GLOBALS['LA_InformationSystem']->confirm_information_item(date('U'), $_SERVER['REMOTE_ADDR']) == 1)
{
$date= date('Y-m-d H:i:s');
/* Определяем группу (если задана)
Принимает в качестве параметра ID информационной системы*/
$group_id = to_int($GLOBALS['INFSYS_result']['group']);
// Статус вновь добавленного элемента
// 0 - не активен (необходимо вручную проверить и включить)
// 1 - активен, виден сразу после публикации
$item_status = to_int($GLOBALS['LA']['ItemStatus']);
// Текст сообщения
$text = nl2br(htmlspecialchars(strip_tags(to_str($_POST['text_item']))));
// Типографируем текст, если доступен модуль типографирования
if (class_exists('typograph'))
{
$typograph = new typograph();
$text = $typograph->ProcessTypographic($text);
}
$param = array();
$param['site_users_id'] = $site_user_id;
// Вставляем запись
$question_id = $GLOBALS['LA_InformationSystem']->InsertInformationItems(0, 0,
$InformationSystem_id, $group_id, $date, htmlspecialchars(strip_tags(to_str($_POST['subject']))), '',
$item_status, $text, '', 0, to_str($_SERVER['REMOTE_ADDR']), '', 1, '', '', '', '', $param);
// Передан файл
if (isset($_FILES['item_image']['tmp_name']) && $_FILES['item_image']['size'])
{
$kernel = & singleton('kernel');
$information_item_small_image = '';
$information_item_image = '';
// Формируем путь к папке информационного элемента по идентификатору информационного элемента
$item_dir = $GLOBALS['LA_InformationSystem']->GetInformationItemDir($question_id);
$uploaddir = CMS_FOLDER . $item_dir;
// Получаем данные о информационной системе
$infsys_row = $GLOBALS['LA_InformationSystem']->GetInformationSystem($InformationSystem_id);
// Создаем папку для информационного элемента
$kernel->PathMkdir($item_dir);
$file_name = $file->PathCorrection($_FILES['item_image']['name']);
// Не преобразовываем название загружаемого файла
if ($infsys_row['information_systems_file_name_conversion'] == 0)
{
$information_item_image = $uploaddir . $file_name;
$information_item_small_image = $uploaddir . 'small_' . $file_name;
}
else // Преобразовываем название загружаемого файла
{
// Определяем расширение файла
$exp = strtolower($kernel->GetExtension($file_name));
$information_item_image = $uploaddir . 'information_items_' . $question_id . '.' . $exp;
$information_item_small_image = $uploaddir . 'small_information_items_' . $question_id . '.' . $exp;
}
$temp_file = $_FILES['item_image']['tmp_name'];
$param_img = array();
// Путь к файлу-источнику большого изображения;
$param_img['path_source_big_image'] = $temp_file;
// Путь к файлу-источнику малого изображения;
$param_img['path_source_small_image'] = '';
//Оригинальное имя файла большого изображения
$param_img['original_file_name_big_image'] = $file_name;
// Путь к создаваемому файлу большого изображения
$param_img['path_target_big_image'] = $information_item_image;
// Путь к создаваемому файлу малого изображения;
$param_img['path_target_small_image'] = $information_item_small_image;
// Оригинальное имя файла малого изображения
$param_img['original_file_name_small_image'] = '';
// Использовать большое изображение для создания малого (true - использовать (по умолчанию), false - не использовать)
$param_img['use_big_image'] = true;
// Значение максимальной ширины большого изображения
$param_img['max_width_big_image'] = $infsys_row['information_systems_image_big_max_width'];
// Значение максимальной высоты большого изображения
$param_img['max_height_big_image'] = $infsys_row['information_systems_image_big_max_height'];
// Значение максимальной ширины малого изображения;
$param_img['max_width_small_image'] = $infsys_row['information_systems_image_small_max_width'];
// Значение максимальной высоты малого изображения;
$param_img['max_height_small_image'] = $infsys_row['information_systems_image_small_max_height'];
// Путь к файлу с "водяным знаком"
$param_img['watermark_file_path'] = '';
$result_img = $kernel->AdminLoadFiles($param_img);
if ($result_img['big_image'])
{
$information_item_image = basename($param_img['path_target_big_image']);
}
if ($result_img['small_image'])
{
$information_item_small_image = basename($param_img['path_target_small_image']);
}
$param = array();
$param['information_items_id'] = $question_id;
$param['information_items_image'] = $information_item_image;
$param['information_items_small_image'] = $information_item_small_image;
// Обновляем информацию о добавленном ранее информационном элементе
$GLOBALS['LA_InformationSystem']->InsertInformationItem($param);
}
$row = $GLOBALS['LA_InformationSystem']->GetInformationSystemItems($question_id);
// Вставляем в дополнительные свойства автора, его email и id
$GLOBALS['LA_InformationSystem']->InsertInformationPropertysItems(0, 0, to_int($GLOBALS['LA']['autor_property_id']), $question_id, htmlspecialchars(strip_tags(to_str($_POST['autor']))));
$GLOBALS['LA_InformationSystem']->InsertInformationPropertysItems(0, 0, to_int($GLOBALS['LA']['email_property_id']), $question_id, htmlspecialchars(strip_tags(to_str($_POST['email']))));
// Если пользователь зерегистрирован, получаем информацию
if (class_exists('SiteUsers') && !empty($site_user_id))
{
$row_site_user = $SiteUsers->GetSiteUser($site_user_id);
if(!empty($row_site_user['site_users_name']) && !empty($row_site_user['site_users_surname']))
{
$site_user_name = $row_site_user['site_users_name'].' '.$row_site_user['site_users_surname'];
}
else
{
$site_user_name = $row_site_user['site_users_login'];
}
$site_user_email = $row_site_user['site_users_email'];
}
else
{
$site_user_name = htmlspecialchars(strip_tags(to_str($_POST['autor'])));
$site_user_email = htmlspecialchars(strip_tags(to_str($_POST['email'])));
}
ob_start();
if ($item_status == 0)
{
?>
<p>Благодарим Вас, <?php echo $site_user_name?>!
<br />Ваша запись принята. После проверки Администратором она станет доступной!
</p>
<?php
}
else
{
?>
<p>Благодарим Вас, <?php echo $site_user_name?>!
<br />Ваша запись принята и опубликована!
</p>
<?php
}
$external_propertys['message'] = ob_get_clean();
// Отправка письма администратору
$message = "Доброе время суток, уважаемый Администратор!\n\nНа сайт, поддерживаемый системой управления сайтом HostCMS, была добавлена запись:\n";
$message .= "Автор: ".$site_user_name."\n";
$message .= "E-mail: ".$site_user_email."\n";
$message .= "Тема: ".htmlspecialchars(strip_tags(to_str($_POST['subject'])))."\n";
$message .= "Информационная система: ".$row['information_systems_name']."\n";
$message .= "Информационный элемент: ".$row['information_items_name']."\n";
$message .= "Редактировать: http://".to_str($_SERVER['HTTP_HOST'])."/admin/InformationSystems/InformationSystems.php?admin_forms_id=12&operation=edit_group_item&check_1_{$question_id}=1&information_system_id={$InformationSystem_id}\n";
$DateClass = & singleton('DateClass');
$message .= "Дата: ".$DateClass->datetime_format($date)."\n";
$message .= "IP-адрес: ".to_str($_SERVER['REMOTE_ADDR'])."\n";
$message .= "Вопрос: ".htmlspecialchars(strip_tags(to_str($_POST['text_item'])));
$subject = 'Добавление вопроса';
$kernel = & singleton('kernel');
$kernel->SendMailWithFile(EMAIL_TO, EMAIL_TO, $subject, $message, array(), 'text/plain');
}
else // нельзя добавлить объявление - прошло мало времени
{
$external_propertys['error'] = 'Запись не может быть добавлена, т.к. прошло мало времени с момента Вашего последнего добавления вопроса!';
}
}
// Ошибка добавления записи
else
{
$external_propertys['error'] = 'Вы неверно ввели число подтверждения отправки формы!';
$external_propertys['fio'] = htmlspecialchars(strip_tags(to_str($_POST['autor'])));
$external_propertys['email'] = htmlspecialchars(strip_tags(to_str($_POST['email'])));
$external_propertys['subject'] = htmlspecialchars(strip_tags(to_str($_POST['subject'])));
$external_propertys['text_item'] = htmlspecialchars(strip_tags(to_str($_POST['text_item'])));
}
}
/* Отображаем информационную систему */
$GLOBALS['LA_InformationSystem']->ShowInformationSystem($InformationSystem_id, $GLOBALS['INFSYS_result']['group'], $xsl_list, $InformationResult['items_on_page'], $InformationResult['items_begin'], $external_propertys, $property);
}
else
{
/* Определяем идентификатор информационного элемента */
$item_id = $GLOBALS['LA_InformationSystem']->GetIdInformationItem($GLOBALS['INFSYS_result']['item'], $GLOBALS['INFSYS_result']['group'], $InformationSystem_id);
$property['part'] = $GLOBALS['part_ii'];
// Запрещаем передачу в XML свойств групп
$property['xml_show_group_property'] = false;
/* Выводим элемент информационной системы */
$GLOBALS['LA_InformationSystem']->ShowInformationSystemItem($item_id, $xsl_item, $external_propertys);
}
}
?>
2. Код XSL-шаблона "СписокЗаписейГостевойКниги", используемого для отображения списка записей и формы добавления записи
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<xsl:template match="/document">
<!-- СписокЗаписейГостевойКниги -->
<h1>
<xsl:value-of disable-output-escaping="yes" select="blocks/name"/>
</h1>
<xsl:value-of disable-output-escaping="yes" select="blocks/description"/>
<!-- Выводим сообщение -->
<xsl:if test="message/node()">
<div id="message">
<xsl:value-of disable-output-escaping="yes" select="message"/>
</div>
</xsl:if>
<!-- Выводим ошибку (error), если она была передана через внешний параметр -->
<xsl:if test="error/node()">
<div id="error">
<xsl:value-of select="error"/>
</div>
</xsl:if>
<!-- Получаем ID родительской группы и записываем в переменную $parent_group_id -->
<xsl:variable name="parent_group_id" select="blocks/parent_group_id"/>
<!-- Отображение подгрупп данной группы -->
<ul>
<xsl:apply-templates select=".//group[@parent_id=$parent_group_id]" mode="goups"/>
</ul>
<div id="ShowAddComment">
<a href="javascript:void(0)" onclick="javascript:cr('AddRecord')">Добавить запись</a>
</div>
<div id="AddRecord" style="display: none">
<div class="comment">
<div class="tl"></div>
<div class="tr"></div>
<div class="bl"></div>
<div class="br"></div>
<!--Отображение формы добавления комментария-->
<form action="./" method="post" enctype="multipart/form-data">
<xsl:if test="/document/site_user_id = 0">
ФИО: <br/><input type="text" name="autor" size="50" value="{/document/autor}"/><br/><br/>
E-mail: <br/><input type="text" name="email" size="50" value="{/document/email}"/><br/><br/>
</xsl:if>
Тема: <br/><input type="text" name="subject" size="50" value="{/document/subject}"/><br/><br/>
Текст сообщения:<br/>
<textarea type="text" name="text_item" cols="38" rows="10">
<xsl:value-of select="/document/text_item"/>
</textarea><br/><br/>
Изображение:<br/><input type="file" name="item_image" size="30" /><br/><br/>
<!-- Обработка CAPTCHA -->
<xsl:if test="/document/captcha_key != 0 and /document/site_user_id = 0">
Контрольные цифры
<sup>
<font color="red">*</font>
</sup><br/>
<div style="float: left">
<img style="border: 1px solid #000000" src="/captcha.php?get_captcha={/document/captcha_key}&height=30&width=100" title="Код подтверждения" name="captcha"/>
</div>
<div id="captcha" style="clear:both;">
<img style="border: 0px" src="/hostcmsfiles/images/refresh.gif" /> <a href="javascript:void(0);" onclick="ReNewCaptcha({/document/captcha_key}, 30);return false;">Показать другое число</a>
</div>
<div style="float: left; margin-top: 5px">
<input type="hidden" name="captcha_key" value="{/document/captcha_key}"/>
<input type="text" name="captcha_keystring" size="15"/>
</div>
<div id="captcha" style="clear:both;margin-bottom:10px;">
Введите число, которое указано выше.
</div>
</xsl:if>
<input type="submit" name="submit_question" value="Добавить запись"/>
</form>
</div>
</div>
<!-- Отображение записи информационной системы -->
<xsl:apply-templates select="blocks/items/item[item_status=1]"/>
<p>
<!-- Строка ссылок на другие страницы информационной системы -->
<xsl:if test="ОтображатьСсылкиНаСледующиеСтраницы=1">
<xsl:if test="blocks/items/count_items > blocks/items/items_on_page">
<p>
<xsl:call-template name="for">
<xsl:with-param name="n" select="blocks/items/count_items div blocks/items/items_on_page"/>
<xsl:with-param name="current_page" select="blocks/items/current_page"/>
</xsl:call-template>
<div style="clear: both"></div>
</p>
</xsl:if>
</xsl:if>
</p>
</xsl:template>
<xsl:template match="blocks/items/item">
<div class="comment">
<div class="tl"></div>
<div class="tr"></div>
<div class="bl"></div>
<div class="br"></div>
<xsl:if test="item_name != ''">
<b><xsl:value-of select="item_name"/></b><br/>
</xsl:if>
<xsl:value-of disable-output-escaping="yes" select="item_text"/>
</div>
<div style="margin: -5px 0px 20px 20px">
<!-- Если сообщение от авторизованного пользователя -->
<xsl:choose>
<xsl:when test="site_user">
<img src="/hostcmsfiles/images/user.gif" style="margin: 0px 5px -4px 0px" />
<span style="font-weight: bold;"><a href="/users/info/{site_user/site_user_login}/"><xsl:value-of select="site_user/site_user_login"/></a></span>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="item_propertys/item_property[@xml_name='email']/value != ''">
<span><a href="mailto:{item_propertys/item_property[@xml_name='email']/value}"><xsl:value-of select="item_propertys/item_property[@xml_name='autor']/value"/></a></span>
</xsl:when>
<xsl:otherwise>
<span><xsl:value-of select="item_propertys/item_property[@xml_name='autor']/value"/></span>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
 · <xsl:value-of select="item_date"/>
</div>
<!-- Отображение комментариев -->
<xsl:if test="count(item_comments/comment) > 0">
<div style="margin-left: 50px">
<xsl:apply-templates select="item_comments/comment"/>
</div>
</xsl:if>
</xsl:template>
<!-- Отображение комментариев -->
<xsl:template match="comment">
<!-- Отображаем комментарий, если задан текст или тема комментария -->
<xsl:if test="comment_text != '' or comment_subject != ''">
<a name="comment{comment_id}"></a>
<div class="comment" id="comment{comment_id}">
<div class="tl"></div>
<div class="tr"></div>
<div class="bl"></div>
<div class="br"></div>
<xsl:if test="comment_subject != ''">
<div>
<strong>
<xsl:value-of select="comment_subject"/>
</strong>
</div>
</xsl:if>
<xsl:value-of select="comment_text" disable-output-escaping="yes"/>
<!-- Оценка комментария -->
<xsl:if test="comment_grade != 0">
<div>Оценка:
<xsl:call-template name="show_average_grade">
<xsl:with-param name="grade" select="comment_grade"/>
<xsl:with-param name="const_grade" select="5"/>
</xsl:call-template>
</div>
</xsl:if>
</div>
<div class="comment_desc">
<xsl:choose>
<!-- Комментарий добавил авторизированный пользователь -->
<xsl:when test="site_user_login/node()">
<a href="/users/info/{site_user_login}/" class="c_u_l">
<xsl:value-of select="site_user_login"/>
</a>
</xsl:when>
<!-- Комментарй добавил неавторизированный пользователь -->
<xsl:otherwise>
<xsl:value-of select="comment_fio"/></xsl:otherwise>
</xsl:choose> · <xsl:value-of select="comment_datetime"/> · <xsl:if
test="/document/show_add_comments/node()
and ((/document/show_add_comments = 1 and /document/site_user_id > 0)
or /document/show_add_comments = 2)"><a href="javascript:cr('cr_{comment_id}');">ответить</a> · </xsl:if><a href="{/document/item/item_path}#comment{comment_id}" title="ссылка">#</a>
</div>
<!-- Отображаем только авторизированным пользователям -->
<xsl:if test="/document/show_add_comments/node() and ((/document/show_add_comments = 1 and /document/site_user_id > 0) or /document/show_add_comments = 2)">
<div class="cr" id="cr_{comment_id}">
<xsl:call-template name="AddCommentForm">
<xsl:with-param name="comment_id" select="comment_id"/>
</xsl:call-template>
</div>
</xsl:if>
<!-- Выбираем дочерние комментарии -->
<xsl:if test="count(comment) > 0">
<div class="csd">
<xsl:apply-templates select="comment"/>
</div>
</xsl:if>
</xsl:if>
</xsl:template>
<!-- ======================================================== -->
<!-- Шаблон выводит ссылки подгурппы инф. элемента -->
<!-- ======================================================== -->
<xsl:template match="group" mode="goups">
<xsl:variable name="parent_id" select="@parent_id"/>
<li>
<xsl:if test="small_image!=''">
<a href="{/document/blocks/url}{fullpath}" target="_blank">
<img src="{small_image}"/>
</a> </xsl:if>
<a href="{/document/blocks/url}{fullpath}">
<b>
<xsl:value-of disable-output-escaping="yes" select="name"/>
</b>
</a>
</li>
</xsl:template>
<!-- Вывод рейтинга -->
<xsl:template name="show_average_grade">
<xsl:param name="grade" select="0"/>
<xsl:param name="const_grade" select="0"/>
<!-- Чтобы избежать зацикливания -->
<xsl:variable name="current_grade" select="$grade * 1"/>
<xsl:choose>
<!-- Если число целое -->
<xsl:when test="floor($current_grade) = $current_grade and not($const_grade > ceiling($current_grade))">
<xsl:if test="$current_grade - 1 > 0">
<xsl:call-template name="show_average_grade">
<xsl:with-param name="grade" select="$current_grade - 1"/>
<xsl:with-param name="const_grade" select="$const_grade - 1"/>
</xsl:call-template>
</xsl:if>
<xsl:if test="$current_grade != 0">
<img src="/hostcmsfiles/images/stars_single.gif"/>
</xsl:if>
</xsl:when>
<xsl:when test="$current_grade != 0 and not($const_grade > ceiling($current_grade))">
<xsl:if test="$current_grade - 0.5 > 0">
<xsl:call-template name="show_average_grade">
<xsl:with-param name="grade" select="$current_grade - 0.5"/>
<xsl:with-param name="const_grade" select="$const_grade - 1"/>
</xsl:call-template>
</xsl:if>
<img src="/hostcmsfiles/images/stars_half.gif"/>
</xsl:when>
<!-- Выводим серые звездочки, пока текущая позиция не дойдет то значения, увеличенного до целого -->
<xsl:otherwise>
<xsl:call-template name="show_average_grade">
<xsl:with-param name="grade" select="$current_grade"/>
<xsl:with-param name="const_grade" select="$const_grade - 1"/>
</xsl:call-template>
<img src="/hostcmsfiles/images/stars_gray.gif"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- Цикл для вывода строк ссылок -->
<xsl:template name="for">
<xsl:param name="i" select="0"/>
<xsl:param name="n"/>
<xsl:param name="current_page"/>
<xsl:if test="$n > $i">
<!-- Ставим ссылку на страницу-->
<xsl:if test="$i != $current_page">
<!-- Заносим в переменную $parent_group_id идентификатор текущей группы -->
<xsl:variable name="parent_group_id" select="/document/blocks/parent_group_id"/>
<!-- Определяем группу для формирования адреса ссылки -->
<xsl:variable name="group_link">
<xsl:choose>
<!-- Если группа не корневая (!=0) -->
<xsl:when test="$parent_group_id != 0">
<xsl:value-of select="/document/blocks//group[@id=$parent_group_id]/fullpath"/>
</xsl:when>
<!-- Иначе если нулевой уровень - просто ссылка на страницу со списком элементов -->
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- Определяем адрес ссылки -->
<xsl:variable name="number_link">
<xsl:choose>
<!-- Если не нулевой уровень -->
<xsl:when test="$i != 0">page-<xsl:value-of select="$i+1"/>/</xsl:when>
<!-- Иначе если нулевой уровень - просто ссылка на страницу со списком элементов -->
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<a href="{/document/blocks/url}{$group_link}{$number_link}" class="page_link">
<xsl:value-of select="$i+1"/>
</a>
</xsl:if>
<!-- Не ставим ссылку на страницу-->
<xsl:if test="$i = $current_page">
<span class="current">
<xsl:value-of select="$i + 1"/>
</span>
</xsl:if>
<!-- Рекурсивный вызов шаблона. НЕОБХОДИМО ПЕРЕДАВАТЬ ВСЕ НЕОБХОДИМЫЕ ПАРАМЕТРЫ! -->
<xsl:call-template name="for">
<xsl:with-param name="i" select="$i + 1"/>
<xsl:with-param name="n" select="$n"/>
<xsl:with-param name="current_page" select="$current_page"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
<?php
/* ID Информационной системы */
$InformationSystem_id = to_int($GLOBALS['LA']['InformationSystemID']);
// Получаем информацию о текущем пользователе
if (class_exists('SiteUsers'))
{
$SiteUsers = & singleton('SiteUsers');
$site_user_id = $SiteUsers->GetCurrentSiteUser();
}
else
{
$site_user_id = 0;
}
/* Массив внешних параметров, передаваемых в XML */
$external_propertys = array();
/* Добавление комментария */
// ShowAddComment == 1 - только авторизированные
// ShowAddComment == 2 - все
if (isset($_POST['add_comment'])
&& (($GLOBALS['LA']['ShowAddComment'] == 1 && $site_user_id > 0) || $GLOBALS['LA']['ShowAddComment'] == 2))
{
$param['information_items_id'] = to_int($GLOBALS['InformationResult']['item_id']);
/* XSL шаблон для отправки уведомления администратору о добавлении комментария */
$param['admin_email_xsl'] = to_str($GLOBALS['LA']['xsl_admin_email']);
$xsl_add_comment = to_str($GLOBALS['LA']['xsl_add_comment']);
/* Режим добавления комментария:
1 - публиковать сразу,
0 - публиковать после проверки.*/
if (to_bool($GLOBALS['LA']['TypeAddComment'])/* || $site_user_id > 0*/)
{
$param['status'] = 1;
}
else
{
$param['status'] = 0;
}
// Текст комментария
$_POST['comment_text'] = nl2br(to_str($_POST['comment_text']));
// Типографируем текст, если доступен модуль типографирования
if (class_exists('typograph'))
{
$typograph = new typograph();
$_POST['comment_text'] = $typograph->ProcessTypographic($_POST['comment_text']);
}
$param['comment_mail_type'] = to_int($GLOBALS['LA']['comment_mail_type']);
// ID родительского комментария
$param['comment_parent_id'] = to_int($_POST['comment_parent_id']);
$param['comment_autor'] = htmlspecialchars(to_str($_POST['comment_autor']));
$param['comment_email'] = htmlspecialchars(to_str($_POST['comment_email']));
$param['comment_subject'] = htmlspecialchars(to_str($_POST['comment_subject']));
$param['comment_text'] = htmlspecialchars(to_str($_POST['comment_text']));
$param['comment_grade'] = to_int($_POST['comment_grade']);
$param['allowable_tags'] = '<b><strong><i><u><strike><ul><ol><li>';
ob_start();
$GLOBALS['LA_InformationSystem']->ShowAddComment('УведомлениеДобавлениеКомментария', $param);
$external_propertys['message'] = ob_get_clean();
}
if ($GLOBALS['INFSYS_result'] != false)
{
/* XSL шаблон для отображения списка элементов информационной системы */
$xsl_list = to_str($GLOBALS['LA']['xsl_information_system_list']);
/* XSL шаблон для отображения элемента информационной системы */
$xsl_item = to_str($GLOBALS['LA']['xsl_information_item']);
$InformationResult = $GLOBALS['InformationResult'];
/* Массив внешних параметров, передаваемых в XML */
$external_propertys['ОтображатьСсылкуНаАрхив'] = 0;
$external_propertys['ОтображатьСсылкиНаСледующиеСтраницы'] = 1;
/* Массив дополнительных параметров */
$property = array();
/* Число элементов на страницу */
if (isset($InformationResult['items_on_page']))
{
if ($InformationResult['items_on_page'] !== true)
{
$InformationResult['items_on_page'] = to_int($InformationResult['items_on_page']);
}
}
else
{
$InformationResult['items_on_page'] = 10;
}
/* Номер, с которого начинается показ */
if (isset($InformationResult['items_begin']))
{
$InformationResult['items_begin'] = to_int($InformationResult['items_begin']);
}
else
{
$InformationResult['items_begin'] = 0;
}
/* Вывод списка */
if ($GLOBALS['INFSYS_result']['item'] == false)
{
// Если передано имя тэга - фильтруем
if (isset($GLOBALS['INFSYS_result']['tag_name']))
{
if (class_exists('Tag'))
{
$oTag = & singleton('Tag');
$tag_row = $oTag->GetTagByName($GLOBALS['INFSYS_result']['tag_name']);
$property['tags'] = array($tag_row['tag_id']);
// При выводе тэгов вывод элементов ведется из всех групп
$GLOBALS['INFSYS_result']['group'] = false;
}
}
// $property['xml_show_group_type'] = 'all';
// Разрешаем передачу в XML свойств групп
$property['xml_show_group_property'] = true;
// Капча
$Captcha = new Captcha();
$file = & singleton('File');
$external_propertys['captcha_key'] = $Captcha->GetCaptchaID();
/* Обработка вставки информационного элемента */
if (isset($_POST['submit_question']))
{
// Проверяем правильноть указания капчи
// Для авторизированных пользователей капчу не проверяем
if ($site_user_id > 0
|| $Captcha->ValidCaptcha(to_str($_POST['captcha_key']), to_str($_POST['captcha_keystring'])))
{
if ($GLOBALS['LA_InformationSystem']->confirm_information_item(date('U'), $_SERVER['REMOTE_ADDR']) == 1)
{
$date= date('Y-m-d H:i:s');
/* Определяем группу (если задана)
Принимает в качестве параметра ID информационной системы*/
$group_id = to_int($GLOBALS['INFSYS_result']['group']);
// Статус вновь добавленного элемента
// 0 - не активен (необходимо вручную проверить и включить)
// 1 - активен, виден сразу после публикации
$item_status = to_int($GLOBALS['LA']['ItemStatus']);
// Текст сообщения
$text = nl2br(htmlspecialchars(strip_tags(to_str($_POST['text_item']))));
// Типографируем текст, если доступен модуль типографирования
if (class_exists('typograph'))
{
$typograph = new typograph();
$text = $typograph->ProcessTypographic($text);
}
$param = array();
$param['site_users_id'] = $site_user_id;
// Вставляем запись
$question_id = $GLOBALS['LA_InformationSystem']->InsertInformationItems(0, 0,
$InformationSystem_id, $group_id, $date, htmlspecialchars(strip_tags(to_str($_POST['subject']))), '',
$item_status, $text, '', 0, to_str($_SERVER['REMOTE_ADDR']), '', 1, '', '', '', '', $param);
// Передан файл
if (isset($_FILES['item_image']['tmp_name']) && $_FILES['item_image']['size'])
{
$kernel = & singleton('kernel');
$information_item_small_image = '';
$information_item_image = '';
// Формируем путь к папке информационного элемента по идентификатору информационного элемента
$item_dir = $GLOBALS['LA_InformationSystem']->GetInformationItemDir($question_id);
$uploaddir = CMS_FOLDER . $item_dir;
// Получаем данные о информационной системе
$infsys_row = $GLOBALS['LA_InformationSystem']->GetInformationSystem($InformationSystem_id);
// Создаем папку для информационного элемента
$kernel->PathMkdir($item_dir);
$file_name = $file->PathCorrection($_FILES['item_image']['name']);
// Не преобразовываем название загружаемого файла
if ($infsys_row['information_systems_file_name_conversion'] == 0)
{
$information_item_image = $uploaddir . $file_name;
$information_item_small_image = $uploaddir . 'small_' . $file_name;
}
else // Преобразовываем название загружаемого файла
{
// Определяем расширение файла
$exp = strtolower($kernel->GetExtension($file_name));
$information_item_image = $uploaddir . 'information_items_' . $question_id . '.' . $exp;
$information_item_small_image = $uploaddir . 'small_information_items_' . $question_id . '.' . $exp;
}
$temp_file = $_FILES['item_image']['tmp_name'];
$param_img = array();
// Путь к файлу-источнику большого изображения;
$param_img['path_source_big_image'] = $temp_file;
// Путь к файлу-источнику малого изображения;
$param_img['path_source_small_image'] = '';
//Оригинальное имя файла большого изображения
$param_img['original_file_name_big_image'] = $file_name;
// Путь к создаваемому файлу большого изображения
$param_img['path_target_big_image'] = $information_item_image;
// Путь к создаваемому файлу малого изображения;
$param_img['path_target_small_image'] = $information_item_small_image;
// Оригинальное имя файла малого изображения
$param_img['original_file_name_small_image'] = '';
// Использовать большое изображение для создания малого (true - использовать (по умолчанию), false - не использовать)
$param_img['use_big_image'] = true;
// Значение максимальной ширины большого изображения
$param_img['max_width_big_image'] = $infsys_row['information_systems_image_big_max_width'];
// Значение максимальной высоты большого изображения
$param_img['max_height_big_image'] = $infsys_row['information_systems_image_big_max_height'];
// Значение максимальной ширины малого изображения;
$param_img['max_width_small_image'] = $infsys_row['information_systems_image_small_max_width'];
// Значение максимальной высоты малого изображения;
$param_img['max_height_small_image'] = $infsys_row['information_systems_image_small_max_height'];
// Путь к файлу с "водяным знаком"
$param_img['watermark_file_path'] = '';
$result_img = $kernel->AdminLoadFiles($param_img);
if ($result_img['big_image'])
{
$information_item_image = basename($param_img['path_target_big_image']);
}
if ($result_img['small_image'])
{
$information_item_small_image = basename($param_img['path_target_small_image']);
}
$param = array();
$param['information_items_id'] = $question_id;
$param['information_items_image'] = $information_item_image;
$param['information_items_small_image'] = $information_item_small_image;
// Обновляем информацию о добавленном ранее информационном элементе
$GLOBALS['LA_InformationSystem']->InsertInformationItem($param);
}
$row = $GLOBALS['LA_InformationSystem']->GetInformationSystemItems($question_id);
// Вставляем в дополнительные свойства автора, его email и id
$GLOBALS['LA_InformationSystem']->InsertInformationPropertysItems(0, 0, to_int($GLOBALS['LA']['autor_property_id']), $question_id, htmlspecialchars(strip_tags(to_str($_POST['autor']))));
$GLOBALS['LA_InformationSystem']->InsertInformationPropertysItems(0, 0, to_int($GLOBALS['LA']['email_property_id']), $question_id, htmlspecialchars(strip_tags(to_str($_POST['email']))));
// Если пользователь зерегистрирован, получаем информацию
if (class_exists('SiteUsers') && !empty($site_user_id))
{
$row_site_user = $SiteUsers->GetSiteUser($site_user_id);
if(!empty($row_site_user['site_users_name']) && !empty($row_site_user['site_users_surname']))
{
$site_user_name = $row_site_user['site_users_name'].' '.$row_site_user['site_users_surname'];
}
else
{
$site_user_name = $row_site_user['site_users_login'];
}
$site_user_email = $row_site_user['site_users_email'];
}
else
{
$site_user_name = htmlspecialchars(strip_tags(to_str($_POST['autor'])));
$site_user_email = htmlspecialchars(strip_tags(to_str($_POST['email'])));
}
ob_start();
if ($item_status == 0)
{
?>
<p>Благодарим Вас, <?php echo $site_user_name?>!
<br />Ваша запись принята. После проверки Администратором она станет доступной!
</p>
<?php
}
else
{
?>
<p>Благодарим Вас, <?php echo $site_user_name?>!
<br />Ваша запись принята и опубликована!
</p>
<?php
}
$external_propertys['message'] = ob_get_clean();
// Отправка письма администратору
$message = "Доброе время суток, уважаемый Администратор!\n\nНа сайт, поддерживаемый системой управления сайтом HostCMS, была добавлена запись:\n";
$message .= "Автор: ".$site_user_name."\n";
$message .= "E-mail: ".$site_user_email."\n";
$message .= "Тема: ".htmlspecialchars(strip_tags(to_str($_POST['subject'])))."\n";
$message .= "Информационная система: ".$row['information_systems_name']."\n";
$message .= "Информационный элемент: ".$row['information_items_name']."\n";
$message .= "Редактировать: http://".to_str($_SERVER['HTTP_HOST'])."/admin/InformationSystems/InformationSystems.php?admin_forms_id=12&operation=edit_group_item&check_1_{$question_id}=1&information_system_id={$InformationSystem_id}\n";
$DateClass = & singleton('DateClass');
$message .= "Дата: ".$DateClass->datetime_format($date)."\n";
$message .= "IP-адрес: ".to_str($_SERVER['REMOTE_ADDR'])."\n";
$message .= "Вопрос: ".htmlspecialchars(strip_tags(to_str($_POST['text_item'])));
$subject = 'Добавление вопроса';
$kernel = & singleton('kernel');
$kernel->SendMailWithFile(EMAIL_TO, EMAIL_TO, $subject, $message, array(), 'text/plain');
}
else // нельзя добавлить объявление - прошло мало времени
{
$external_propertys['error'] = 'Запись не может быть добавлена, т.к. прошло мало времени с момента Вашего последнего добавления вопроса!';
}
}
// Ошибка добавления записи
else
{
$external_propertys['error'] = 'Вы неверно ввели число подтверждения отправки формы!';
$external_propertys['fio'] = htmlspecialchars(strip_tags(to_str($_POST['autor'])));
$external_propertys['email'] = htmlspecialchars(strip_tags(to_str($_POST['email'])));
$external_propertys['subject'] = htmlspecialchars(strip_tags(to_str($_POST['subject'])));
$external_propertys['text_item'] = htmlspecialchars(strip_tags(to_str($_POST['text_item'])));
}
}
/* Отображаем информационную систему */
$GLOBALS['LA_InformationSystem']->ShowInformationSystem($InformationSystem_id, $GLOBALS['INFSYS_result']['group'], $xsl_list, $InformationResult['items_on_page'], $InformationResult['items_begin'], $external_propertys, $property);
}
else
{
/* Определяем идентификатор информационного элемента */
$item_id = $GLOBALS['LA_InformationSystem']->GetIdInformationItem($GLOBALS['INFSYS_result']['item'], $GLOBALS['INFSYS_result']['group'], $InformationSystem_id);
$property['part'] = $GLOBALS['part_ii'];
// Запрещаем передачу в XML свойств групп
$property['xml_show_group_property'] = false;
/* Выводим элемент информационной системы */
$GLOBALS['LA_InformationSystem']->ShowInformationSystemItem($item_id, $xsl_item, $external_propertys);
}
}
?>
2. Код XSL-шаблона "СписокЗаписейГостевойКниги", используемого для отображения списка записей и формы добавления записи
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<xsl:template match="/document">
<!-- СписокЗаписейГостевойКниги -->
<h1>
<xsl:value-of disable-output-escaping="yes" select="blocks/name"/>
</h1>
<xsl:value-of disable-output-escaping="yes" select="blocks/description"/>
<!-- Выводим сообщение -->
<xsl:if test="message/node()">
<div id="message">
<xsl:value-of disable-output-escaping="yes" select="message"/>
</div>
</xsl:if>
<!-- Выводим ошибку (error), если она была передана через внешний параметр -->
<xsl:if test="error/node()">
<div id="error">
<xsl:value-of select="error"/>
</div>
</xsl:if>
<!-- Получаем ID родительской группы и записываем в переменную $parent_group_id -->
<xsl:variable name="parent_group_id" select="blocks/parent_group_id"/>
<!-- Отображение подгрупп данной группы -->
<ul>
<xsl:apply-templates select=".//group[@parent_id=$parent_group_id]" mode="goups"/>
</ul>
<div id="ShowAddComment">
<a href="javascript:void(0)" onclick="javascript:cr('AddRecord')">Добавить запись</a>
</div>
<div id="AddRecord" style="display: none">
<div class="comment">
<div class="tl"></div>
<div class="tr"></div>
<div class="bl"></div>
<div class="br"></div>
<!--Отображение формы добавления комментария-->
<form action="./" method="post" enctype="multipart/form-data">
<xsl:if test="/document/site_user_id = 0">
ФИО: <br/><input type="text" name="autor" size="50" value="{/document/autor}"/><br/><br/>
E-mail: <br/><input type="text" name="email" size="50" value="{/document/email}"/><br/><br/>
</xsl:if>
Тема: <br/><input type="text" name="subject" size="50" value="{/document/subject}"/><br/><br/>
Текст сообщения:<br/>
<textarea type="text" name="text_item" cols="38" rows="10">
<xsl:value-of select="/document/text_item"/>
</textarea><br/><br/>
Изображение:<br/><input type="file" name="item_image" size="30" /><br/><br/>
<!-- Обработка CAPTCHA -->
<xsl:if test="/document/captcha_key != 0 and /document/site_user_id = 0">
Контрольные цифры
<sup>
<font color="red">*</font>
</sup><br/>
<div style="float: left">
<img style="border: 1px solid #000000" src="/captcha.php?get_captcha={/document/captcha_key}&height=30&width=100" title="Код подтверждения" name="captcha"/>
</div>
<div id="captcha" style="clear:both;">
<img style="border: 0px" src="/hostcmsfiles/images/refresh.gif" /> <a href="javascript:void(0);" onclick="ReNewCaptcha({/document/captcha_key}, 30);return false;">Показать другое число</a>
</div>
<div style="float: left; margin-top: 5px">
<input type="hidden" name="captcha_key" value="{/document/captcha_key}"/>
<input type="text" name="captcha_keystring" size="15"/>
</div>
<div id="captcha" style="clear:both;margin-bottom:10px;">
Введите число, которое указано выше.
</div>
</xsl:if>
<input type="submit" name="submit_question" value="Добавить запись"/>
</form>
</div>
</div>
<!-- Отображение записи информационной системы -->
<xsl:apply-templates select="blocks/items/item[item_status=1]"/>
<p>
<!-- Строка ссылок на другие страницы информационной системы -->
<xsl:if test="ОтображатьСсылкиНаСледующиеСтраницы=1">
<xsl:if test="blocks/items/count_items > blocks/items/items_on_page">
<p>
<xsl:call-template name="for">
<xsl:with-param name="n" select="blocks/items/count_items div blocks/items/items_on_page"/>
<xsl:with-param name="current_page" select="blocks/items/current_page"/>
</xsl:call-template>
<div style="clear: both"></div>
</p>
</xsl:if>
</xsl:if>
</p>
</xsl:template>
<xsl:template match="blocks/items/item">
<div class="comment">
<div class="tl"></div>
<div class="tr"></div>
<div class="bl"></div>
<div class="br"></div>
<xsl:if test="item_name != ''">
<b><xsl:value-of select="item_name"/></b><br/>
</xsl:if>
<xsl:value-of disable-output-escaping="yes" select="item_text"/>
</div>
<div style="margin: -5px 0px 20px 20px">
<!-- Если сообщение от авторизованного пользователя -->
<xsl:choose>
<xsl:when test="site_user">
<img src="/hostcmsfiles/images/user.gif" style="margin: 0px 5px -4px 0px" />
<span style="font-weight: bold;"><a href="/users/info/{site_user/site_user_login}/"><xsl:value-of select="site_user/site_user_login"/></a></span>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="item_propertys/item_property[@xml_name='email']/value != ''">
<span><a href="mailto:{item_propertys/item_property[@xml_name='email']/value}"><xsl:value-of select="item_propertys/item_property[@xml_name='autor']/value"/></a></span>
</xsl:when>
<xsl:otherwise>
<span><xsl:value-of select="item_propertys/item_property[@xml_name='autor']/value"/></span>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
 · <xsl:value-of select="item_date"/>
</div>
<!-- Отображение комментариев -->
<xsl:if test="count(item_comments/comment) > 0">
<div style="margin-left: 50px">
<xsl:apply-templates select="item_comments/comment"/>
</div>
</xsl:if>
</xsl:template>
<!-- Отображение комментариев -->
<xsl:template match="comment">
<!-- Отображаем комментарий, если задан текст или тема комментария -->
<xsl:if test="comment_text != '' or comment_subject != ''">
<a name="comment{comment_id}"></a>
<div class="comment" id="comment{comment_id}">
<div class="tl"></div>
<div class="tr"></div>
<div class="bl"></div>
<div class="br"></div>
<xsl:if test="comment_subject != ''">
<div>
<strong>
<xsl:value-of select="comment_subject"/>
</strong>
</div>
</xsl:if>
<xsl:value-of select="comment_text" disable-output-escaping="yes"/>
<!-- Оценка комментария -->
<xsl:if test="comment_grade != 0">
<div>Оценка:
<xsl:call-template name="show_average_grade">
<xsl:with-param name="grade" select="comment_grade"/>
<xsl:with-param name="const_grade" select="5"/>
</xsl:call-template>
</div>
</xsl:if>
</div>
<div class="comment_desc">
<xsl:choose>
<!-- Комментарий добавил авторизированный пользователь -->
<xsl:when test="site_user_login/node()">
<a href="/users/info/{site_user_login}/" class="c_u_l">
<xsl:value-of select="site_user_login"/>
</a>
</xsl:when>
<!-- Комментарй добавил неавторизированный пользователь -->
<xsl:otherwise>
<xsl:value-of select="comment_fio"/></xsl:otherwise>
</xsl:choose> · <xsl:value-of select="comment_datetime"/> · <xsl:if
test="/document/show_add_comments/node()
and ((/document/show_add_comments = 1 and /document/site_user_id > 0)
or /document/show_add_comments = 2)"><a href="javascript:cr('cr_{comment_id}');">ответить</a> · </xsl:if><a href="{/document/item/item_path}#comment{comment_id}" title="ссылка">#</a>
</div>
<!-- Отображаем только авторизированным пользователям -->
<xsl:if test="/document/show_add_comments/node() and ((/document/show_add_comments = 1 and /document/site_user_id > 0) or /document/show_add_comments = 2)">
<div class="cr" id="cr_{comment_id}">
<xsl:call-template name="AddCommentForm">
<xsl:with-param name="comment_id" select="comment_id"/>
</xsl:call-template>
</div>
</xsl:if>
<!-- Выбираем дочерние комментарии -->
<xsl:if test="count(comment) > 0">
<div class="csd">
<xsl:apply-templates select="comment"/>
</div>
</xsl:if>
</xsl:if>
</xsl:template>
<!-- ======================================================== -->
<!-- Шаблон выводит ссылки подгурппы инф. элемента -->
<!-- ======================================================== -->
<xsl:template match="group" mode="goups">
<xsl:variable name="parent_id" select="@parent_id"/>
<li>
<xsl:if test="small_image!=''">
<a href="{/document/blocks/url}{fullpath}" target="_blank">
<img src="{small_image}"/>
</a> </xsl:if>
<a href="{/document/blocks/url}{fullpath}">
<b>
<xsl:value-of disable-output-escaping="yes" select="name"/>
</b>
</a>
</li>
</xsl:template>
<!-- Вывод рейтинга -->
<xsl:template name="show_average_grade">
<xsl:param name="grade" select="0"/>
<xsl:param name="const_grade" select="0"/>
<!-- Чтобы избежать зацикливания -->
<xsl:variable name="current_grade" select="$grade * 1"/>
<xsl:choose>
<!-- Если число целое -->
<xsl:when test="floor($current_grade) = $current_grade and not($const_grade > ceiling($current_grade))">
<xsl:if test="$current_grade - 1 > 0">
<xsl:call-template name="show_average_grade">
<xsl:with-param name="grade" select="$current_grade - 1"/>
<xsl:with-param name="const_grade" select="$const_grade - 1"/>
</xsl:call-template>
</xsl:if>
<xsl:if test="$current_grade != 0">
<img src="/hostcmsfiles/images/stars_single.gif"/>
</xsl:if>
</xsl:when>
<xsl:when test="$current_grade != 0 and not($const_grade > ceiling($current_grade))">
<xsl:if test="$current_grade - 0.5 > 0">
<xsl:call-template name="show_average_grade">
<xsl:with-param name="grade" select="$current_grade - 0.5"/>
<xsl:with-param name="const_grade" select="$const_grade - 1"/>
</xsl:call-template>
</xsl:if>
<img src="/hostcmsfiles/images/stars_half.gif"/>
</xsl:when>
<!-- Выводим серые звездочки, пока текущая позиция не дойдет то значения, увеличенного до целого -->
<xsl:otherwise>
<xsl:call-template name="show_average_grade">
<xsl:with-param name="grade" select="$current_grade"/>
<xsl:with-param name="const_grade" select="$const_grade - 1"/>
</xsl:call-template>
<img src="/hostcmsfiles/images/stars_gray.gif"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- Цикл для вывода строк ссылок -->
<xsl:template name="for">
<xsl:param name="i" select="0"/>
<xsl:param name="n"/>
<xsl:param name="current_page"/>
<xsl:if test="$n > $i">
<!-- Ставим ссылку на страницу-->
<xsl:if test="$i != $current_page">
<!-- Заносим в переменную $parent_group_id идентификатор текущей группы -->
<xsl:variable name="parent_group_id" select="/document/blocks/parent_group_id"/>
<!-- Определяем группу для формирования адреса ссылки -->
<xsl:variable name="group_link">
<xsl:choose>
<!-- Если группа не корневая (!=0) -->
<xsl:when test="$parent_group_id != 0">
<xsl:value-of select="/document/blocks//group[@id=$parent_group_id]/fullpath"/>
</xsl:when>
<!-- Иначе если нулевой уровень - просто ссылка на страницу со списком элементов -->
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- Определяем адрес ссылки -->
<xsl:variable name="number_link">
<xsl:choose>
<!-- Если не нулевой уровень -->
<xsl:when test="$i != 0">page-<xsl:value-of select="$i+1"/>/</xsl:when>
<!-- Иначе если нулевой уровень - просто ссылка на страницу со списком элементов -->
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<a href="{/document/blocks/url}{$group_link}{$number_link}" class="page_link">
<xsl:value-of select="$i+1"/>
</a>
</xsl:if>
<!-- Не ставим ссылку на страницу-->
<xsl:if test="$i = $current_page">
<span class="current">
<xsl:value-of select="$i + 1"/>
</span>
</xsl:if>
<!-- Рекурсивный вызов шаблона. НЕОБХОДИМО ПЕРЕДАВАТЬ ВСЕ НЕОБХОДИМЫЕ ПАРАМЕТРЫ! -->
<xsl:call-template name="for">
<xsl:with-param name="i" select="$i + 1"/>
<xsl:with-param name="n" select="$n"/>
<xsl:with-param name="current_page" select="$current_page"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
nik_rzn
7 апреля 2014 г.
Кто нибудь пробовал приведенный код уважаемым Ivanov, так как у меня не работает, и можно объяснить чайнику, почему
// Передан файл
if (isset($_FILES['item_image']['tmp_name']) && $_FILES['item_image']['size'])
такое условие, это что получается файл уже на сервере, и как он там оказался ?
Условие не работает у меня, работает если if (isset($_POST['item_image']['tmp_name']) && $_POST['item_image']['size'])
но тогда ошибка в 198 строке $item_dir = $information_system->GetInformationItemDir($question_id);
Если не затруднит плз куда копать и на правильном ли пути я ))
// Передан файл
if (isset($_FILES['item_image']['tmp_name']) && $_FILES['item_image']['size'])
такое условие, это что получается файл уже на сервере, и как он там оказался ?
Условие не работает у меня, работает если if (isset($_POST['item_image']['tmp_name']) && $_POST['item_image']['size'])
но тогда ошибка в 198 строке $item_dir = $information_system->GetInformationItemDir($question_id);
Если не затруднит плз куда копать и на правильном ли пути я ))
nik_rzn
7 апреля 2014 г.
почему же у меня файл не передается и как сделать что бы заработало это условие if (isset($_FILES['item_image']['tmp_name']) && $_FILES['item_image']['size'])
Авторизация