Внимание!
Не все расширения для phpBB 3.2 совместимы с phpBB 3.3, главным образом из-за неверного синтаксиса в определениях сервисов (отсутствия обрамляющих кавычек - '...').
Перед обновлением необходимо убедиться в совместимости всех расширений.
Рекомендуется предварительно тестировать обновление на копии конференции (локально или на сервере).

[RC] User FAQ (Пользовательский FAQ)

Здесь авторы могут постить бета-версии своих модификаций для phpBB 3.0.x. Внимание! Не устанавливайте бета-версии модов на работающие форумы!
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
Garret_Dark
phpBB 2.0.16
Сообщения: 1091
Зарегистрирован: 11.01.2009 15:18
Откуда: root/world/russia/
Благодарил (а): 126 раз
Поблагодарили: 204 раза

[RC] User FAQ (Пользовательский FAQ)

Сообщение Garret_Dark »

Актуальная версия: 1.0.3
Изменения в версии 1.0.3 
  • Добавлена возможность подписки на ответы к вопросам для всех зарегистрированных пользователей
  • Список вопросов теперь в постраничном виде
  • Заголовки колонок в списке вопросов теперь кликабельны для сортировки
  • Добавлен поиск по просматриваемому разделу
  • Добавлен поиск популярных вопросов и вопросов без ответов
Изменения в версии 1.0.2 
  • Добавлена возможность указания иконки разделов по аналогии с иконками форумов.
  • Добавлено отображение смайлов в форме ответа/создании и редактировании вопроса
  • Кликабельные аватары
  • Показаны права доступа на страницах вопросов и ответов
  • Немного оптимизирован код
Изменения в версии 1.0.1 
  • Добавлен переключатель в форму добавления вопроса: уведомлять об ответах
  • Скрыты ссылки для голосования от тех кто уже голосовал за вопрос/ответ
  • Добавлена прямая ссылка на ответы. Она отправляется в уведомлении об ответе
Описание:
Добавляет страницу вопросов и ответов. Похожее по принципу на проект "Ответы.mail.ru"
Кто может спрашивать, а кто может отвечать настраивается глобальными правами доступа пользователя/группы.

Можно организовать удобное наполнение FAQ форума или использовать как тикет-систему для поддержки пользователей.
Принцип похож на "ответы.мыло.ру": Пользователи могут задавать вопросы в соответствующем разделе, а пользователи наделенные правами отвечать на вопросы, отвечают на них.
Каждый вопрос имеет рейтинг, изменить его могут все зарегистрированные пользователи путем нажатия "Меня тоже интересует этот вопрос" - тем самым создается список самых интересующих вопросов.

У ответов тоже есть рейтинг - "Этот ответ мне помог". Ответы сортируются по рейтингу начиная с наивысшего.

Модерировать вопросы и ответы могут модераторы имеющие право "Отвечать на вопросы".

Поддерживаемые стили: prosilver, subsilver2
Поддерживаемые языки: ru, en
Сложность установки: Простая

Скрины:
Вложение Screenshot_0.png больше недоступно
Screenshot_0.png
(5.4 КБ) 0 скачиваний
Screenshot_1.png
(7.22 КБ) 0 скачиваний
Screenshot_2.png
Скачать:
Users_FAQ_1_0_3.zip
(152.76 КБ) 369 скачиваний
Вложения
Screenshot_3.png
(10 КБ) 0 скачиваний
Последний раз редактировалось Garret_Dark 21.08.2012 11:59, всего редактировалось 18 раз.

Аватара пользователя
TyMaH
phpBB 2.0.3
Сообщения: 389
Зарегистрирован: 18.06.2011 15:27
Благодарил (а): 182 раза
Поблагодарили: 18 раз

Re: [RC] User FAQ (Пользовательский FAQ)

Сообщение TyMaH »

Поставлю себе, посмотрим))
Изображение

Аватара пользователя
evrus01
Former team member
Сообщения: 1274
Зарегистрирован: 24.03.2011 13:59
Откуда: Москва
Благодарил (а): 107 раз
Поблагодарили: 234 раза

Re: [RC] User FAQ (Пользовательский FAQ)

Сообщение evrus01 »

Garret_Dark, джва года ждал эту модификацию — Q&A mod phpbb
Спасибо!

Аватара пользователя
Strigops
phpBB 2.0.0
Сообщения: 203
Зарегистрирован: 18.04.2012 19:23
Благодарил (а): 27 раз
Поблагодарили: 3 раза

Re: [RC] User FAQ (Пользовательский FAQ)

Сообщение Strigops »

Тоже пошел ставить.

Аватара пользователя
TyMaH
phpBB 2.0.3
Сообщения: 389
Зарегистрирован: 18.06.2011 15:27
Благодарил (а): 182 раза
Поблагодарили: 18 раз

Re: [RC] User FAQ (Пользовательский FAQ)

Сообщение TyMaH »

Написал ВОПРОС, ответил тест юзером, тест юзер может нажать - Меня тоже заинтересовал этот вопрос, и на его ответе та же надпись, а через мой акк нет на его ответе надписи чтоб нажать, никакой.
Демо: http://daggame.ru/forum/u_faq.php?mode=q&id=1
login: test
pass: 123456
Изображение

Аватара пользователя
Garret_Dark
phpBB 2.0.16
Сообщения: 1091
Зарегистрирован: 11.01.2009 15:18
Откуда: root/world/russia/
Благодарил (а): 126 раз
Поблагодарили: 204 раза

Re: [RC] User FAQ (Пользовательский FAQ)

Сообщение Garret_Dark »

TyMaH, спасибо.
Пропустил момент когда делал шаблон для просильвера.
Архив, чтобы поправить по быстрому без перезаливки файлов

Открыть:
\styles\prosilver\template\ufaq_body.html
Найти

Код: Выделить всё

			<!-- IF U_RATE --><div class="signature">{L_UFAQ_RATE}: <a href="{U_RATE}"><b>{L_UFAQ_RATE_Q}</b></a></div><!-- ENDIF -->
Заменить на

Код: Выделить всё

			<!-- IF answers.U_RATE --><div class="signature">{L_UFAQ_RATE}: <a href="{answers.U_RATE}"><b>{L_UFAQ_RATE_A}</b></a></div><!-- ENDIF -->
Либо просто заменить этот файл из нового архива
Последний раз редактировалось Garret_Dark 30.06.2012 22:01, всего редактировалось 2 раза.

Аватара пользователя
Strigops
phpBB 2.0.0
Сообщения: 203
Зарегистрирован: 18.04.2012 19:23
Благодарил (а): 27 раз
Поблагодарили: 3 раза

Re: [RC] User FAQ (Пользовательский FAQ)

Сообщение Strigops »

У меня вылезает вот такая ошибка при попытке захода по ссылке Вопросы и ответы - Parse error: syntax error, unexpected T_ELSE in /home/u900234599/public_html/u_faq.php on line 619 Как это исправить? Стиль субсильвер.

Аватара пользователя
Garret_Dark
phpBB 2.0.16
Сообщения: 1091
Зарегистрирован: 11.01.2009 15:18
Откуда: root/world/russia/
Благодарил (а): 126 раз
Поблагодарили: 204 раза

Re: [RC] User FAQ (Пользовательский FAQ)

Сообщение Garret_Dark »

Strigops, попробуйте перезалить этот файл, нечему там давать такую ошибку.
P.S. Проверял работу мода со включенными дебагами - ошибки отсутствовали.

Аватара пользователя
TyMaH
phpBB 2.0.3
Сообщения: 389
Зарегистрирован: 18.06.2011 15:27
Благодарил (а): 182 раза
Поблагодарили: 18 раз

Re: [RC] User FAQ (Пользовательский FAQ)

Сообщение TyMaH »

Garret_Dark а еще можешь с кнопками ченить сделать,как то они не смотрятся в просильвере))
Изображение

Аватара пользователя
Strigops
phpBB 2.0.0
Сообщения: 203
Зарегистрирован: 18.04.2012 19:23
Благодарил (а): 27 раз
Поблагодарили: 3 раза

Re: [RC] User FAQ (Пользовательский FAQ)

Сообщение Strigops »

Garret_Dark писал(а):Strigops, попробуйте перезалить этот файл, нечему там давать такую ошибку.
P.S. Проверял работу мода со включенными дебагами - ошибки отсутствовали.
Перезалил, не помогло. Помогите)

Аватара пользователя
Garret_Dark
phpBB 2.0.16
Сообщения: 1091
Зарегистрирован: 11.01.2009 15:18
Откуда: root/world/russia/
Благодарил (а): 126 раз
Поблагодарили: 204 раза

Re: [RC] User FAQ (Пользовательский FAQ)

Сообщение Garret_Dark »

TyMaH, честно говоря лень было рисовать новые кнопки, как-нибудь сподвижусь на этот шаг :)

Strigops, телепатически? )) Хоть ссылку на форум дайте...
А вообще приведите кусок файла +/- 5 строк от 619 строки, разумеется с сервера.

Аватара пользователя
TyMaH
phpBB 2.0.3
Сообщения: 389
Зарегистрирован: 18.06.2011 15:27
Благодарил (а): 182 раза
Поблагодарили: 18 раз

Re: [RC] User FAQ (Пользовательский FAQ)

Сообщение TyMaH »

Garret_Dark да мод хороший, вот с визуальным оформлением еще поработать надо, но с этим я сам уж справлюсь))

Добавлено спустя 3 минуты 2 секунды:
Конечно помимо "+" можно еще и минус было сделать, всякий бред бывают люди могут написать, тем более если форум с хорошим онлайном.. чем больше плюсов тем ярче фон (зеленый невырвиглазный фон), соответственно с минусами текст менее заметен типа такого
Изображение

Аватара пользователя
Garret_Dark
phpBB 2.0.16
Сообщения: 1091
Зарегистрирован: 11.01.2009 15:18
Откуда: root/world/russia/
Благодарил (а): 126 раз
Поблагодарили: 204 раза

Re: [RC] User FAQ (Пользовательский FAQ)

Сообщение Garret_Dark »

TyMaH, да какое там визуальное оформление? Я вообще изначально хотел сделать текстовую версию, т.е. без представления в виде сообщений, а так как представлен стандартный FAQ, но ведь его можно использовать намного шире, потому он имеет такой вид, который имеет - ничего лишнего, но в тоже время аналогичный стандартному форумному виду.

"-" здесь врядли уместен, вопросы и ответы с рейтингом "0" так и так уйдут вниз на фоне положительных.

Аватара пользователя
evrus01
Former team member
Сообщения: 1274
Зарегистрирован: 24.03.2011 13:59
Откуда: Москва
Благодарил (а): 107 раз
Поблагодарили: 234 раза

Re: [RC] User FAQ (Пользовательский FAQ)

Сообщение evrus01 »

TyMaH, держите кнопку.
button_question_new.png
button_question_new.png (5.14 КБ) 2959 просмотров
P.s. У меня нет Гельветики, поэтому я использовал Ариал (исходник прикладываю — шрифт поменяете при желании).
button_question_new.zip
Исходник
(22.58 КБ) 262 скачивания

Аватара пользователя
Strigops
phpBB 2.0.0
Сообщения: 203
Зарегистрирован: 18.04.2012 19:23
Благодарил (а): 27 раз
Поблагодарили: 3 раза

Re: [RC] User FAQ (Пользовательский FAQ)

Сообщение Strigops »

Garret_Dark писал(а):Strigops, телепатически? )) Хоть ссылку на форум дайте...
А вообще приведите кусок файла +/- 5 строк от 619 строки, разумеется с сервера.
Форум - http://siniy-popugay.ru/
Я не знаю как считать линии в коде, поэтому выкладываю все содержимое файла u_faq.php с сервера, посмотрите пожалуйста, что там может быть.

Код: Выделить всё

<?php
/**
*
* @package phpBB Shop Lite
* @version $Id: u_faq.php,v 1.0.0 2012/06/29 03:44:00 Garret_Dark Exp $
* @copyright (c) 2012 Axel aka Garret_Dark ( http://www.phpbbstyle.ru/ )
* @license http://www.opensource.org/licenses/rpl1.5.txt Reciprocal Public License 1.5
*
*/

/**
* @ignore
*/
define('IN_PHPBB', true);
$phpbb_root_path = './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
include($phpbb_root_path . 'includes/message_parser.' . $phpEx);

// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup('mods/info_acp_ufaq');

$mode = request_var('mode', '');
$id = (int) request_var('id', 0);
$user_id = $user->data['user_id'];

if ($user->data['user_id'] == ANONYMOUS && $mode && ($mode != 'cat' || $mode != 'q'))
{
	login_box('', $user->lang['LOGIN']);
}

// Хлебные крошки
$template->assign_block_vars('navlinks',array(
	'FORUM_NAME'		=> $user->lang['UFAQ'],
	'U_VIEW_FORUM'		=> append_sid("{$phpbb_root_path}u_faq.$phpEx"),
)
);

if(!$mode)
{

	$sql = 'SELECT *
			FROM ' . Q_CATS_TABLE . '
			ORDER BY cat_name ASC, cat_id ASC';
			$result = $db->sql_query($sql);

			while($row = $db->sql_fetchrow($result))
			{
				$template->assign_block_vars('cats',array(
					'TITLE'		=> $row['cat_name'],
					'COUNT'		=> $row['cat_count'],
					'LAST_Q'	=> $row['last_question_name'],
					'U_LAST_Q'	=> append_sid("{$phpbb_root_path}u_faq.$phpEx", 'mode=q&id='.$row['last_question_id']),
					'U_CAT'		=> append_sid("{$phpbb_root_path}u_faq.$phpEx", 'mode=cat&id='.$row['cat_id']),
				)
				);
			}
			$db->sql_freeresult($result);

	$template->assign_vars(array(
	'S_INDEX'	=> true,
	)
	);

	// Output page
	page_header($user->lang['UFAQ']);

	$template->set_filenames(array(
	   'body' => 'ufaq_body.html')
	);

}
elseif($mode == 'cat' && $id)
{	$sql = 'SELECT cat_name
			FROM ' . Q_CATS_TABLE . '
			WHERE cat_id = '.$id;
			$result = $db->sql_query($sql);
			$row = $db->sql_fetchrow($result);
			$db->sql_freeresult($result);

	if(!$row['cat_name'])
	{		trigger_error($user->lang['UFAQ_NO_CAT']);	}
    $cat_name = $row['cat_name'];
	// Хлебные крошки
	$template->assign_block_vars('navlinks',array(
		'FORUM_NAME'		=> $cat_name,
		'U_VIEW_FORUM'		=> append_sid("{$phpbb_root_path}u_faq.$phpEx", 'mode=cat&id='.$id),
	)
	);

	$template->assign_vars(array(
	'S_LIST_Q'	=> true,
	'PARENT'	=> $row['cat_name'],
	'INFO_IMG' 			=> $user->img('icon_post_info', 'UFAQ_ADD_QUEST'),
	'U_ADD_QUEST'		=> append_sid("{$phpbb_root_path}u_faq.$phpEx", 'mode=add_q&id='.$id),
	)
	);

    $sql = 'SELECT u.username, u.user_colour, q.*
			FROM ' . USERS_TABLE . ' u, ' . Q_QUESTION_TABLE . " q
			WHERE q.q_parent = $id
			AND q.q_type = 1
			AND u.user_id = q.q_user_id
			ORDER BY q.q_rating DESC, q.q_time DESC";
			$result = $db->sql_query($sql);

			while($row = $db->sql_fetchrow($result))
			{
				$template->assign_block_vars('q',array(
					'SUBJ'		=> $row['q_subj'],
					'ANSWERS'	=> $row['q_answers'],
					'RATING'	=> $row['q_rating'],
					'VIEWS'		=> $row['q_views'],
					'TIME'		=> $user->format_date($row['q_time']),
					'QUESTOR'	=> get_username_string('full', $row['q_user_id'], $row['username'], $row['user_colour']),
					'U_QUESTION'	=> append_sid("{$phpbb_root_path}u_faq.$phpEx", 'mode=q&id='.$row['q_id']),
				)
				);
			}
			$db->sql_freeresult($result);

	// Output page
	page_header($cat_name);

	$template->set_filenames(array(
	   'body' => 'ufaq_body.html')
	);}
elseif($mode == 'q' && $id)
{    $q = '';

    $sql = 'SELECT u.username, u.user_colour, u.user_avatar, u.user_avatar_type, u.user_avatar_width, u.user_avatar_height, q.*
			FROM ' . USERS_TABLE . ' u, ' . Q_QUESTION_TABLE . " q
			WHERE (q.q_parent_q = $id
			OR q.q_id = $id)
			AND u.user_id = q.q_user_id
			ORDER BY q.q_type DESC, q.q_rating DESC, q.q_time DESC";
			$result = $db->sql_query($sql);
			while($row = $db->sql_fetchrow($result))
			{
				if($row['q_type'] == '1')
				{					$q = $row;				}
				else
				{					$template->assign_block_vars('answers',array(
						'AVATAR'	=> ($user->optionget('viewavatars')) ? get_user_avatar($row['user_avatar'], $row['user_avatar_type'], $row['user_avatar_width'], $row['user_avatar_height']) : '',
						'RATING'	=> $row['q_rating'],
						'TEXT'	=> generate_text_for_display($row['q_text'], $row['bbcode_uid'], $row['bbcode_bitfield'], 7),
						'TIME'		=> $user->format_date($row['q_time']),
						'USER'	=> get_username_string('full', $row['q_user_id'], $row['username'], $row['user_colour']),
						'U_QUESTION'	=> append_sid("{$phpbb_root_path}u_faq.$phpEx", 'mode=q&id='.$row['q_id']),
						'U_EDIT'	=> ($auth->acl_get('u_add_answers') && $user->data['user_id'] == $row['q_user_id']) || ($auth->acl_get('m_') && $auth->acl_get('u_add_answers')) ? append_sid("{$phpbb_root_path}u_faq.$phpEx", 'mode=edit&id='.$row['q_id']) : '',
						'U_DEL'	=> ($auth->acl_get('u_add_answers') && $user->data['user_id'] == $row['q_user_id'] && !$row['q_answers']) || ($auth->acl_get('m_') && $auth->acl_get('u_add_answers')) ? append_sid("{$phpbb_root_path}u_faq.$phpEx", 'mode=del&id='.$row['q_id']) : '',
						'U_RATE'	=> $user_id != $row['q_user_id'] ? append_sid("{$phpbb_root_path}u_faq.$phpEx", 'mode=rate&id='.$row['q_id']) : '',
					)
					);				}
			}
			$db->sql_freeresult($result);

	if(!$q)
	{
		trigger_error($user->lang['UFAQ_NO_QUEST']);
	}
	$user->setup('posting');
	$sql = 'SELECT cat_id, cat_name
			FROM ' . Q_CATS_TABLE . '
			WHERE cat_id = '.$q['q_parent'];
			$result = $db->sql_query($sql);
			$row = $db->sql_fetchrow($result);
			$db->sql_freeresult($result);

	if(!$row['cat_name'])
	{
		trigger_error($user->lang['UFAQ_NO_CAT']);
	}

	// Хлебные крошки
	$template->assign_block_vars('navlinks',array(
		'FORUM_NAME'		=> $row['cat_name'],
		'U_VIEW_FORUM'		=> append_sid("{$phpbb_root_path}u_faq.$phpEx", 'mode=cat&id='.$row['cat_id']),
	)
	);

	$template->assign_vars(array(
	'QUEST'	=> $q['q_subj'],
	'AVATAR'	=> ($user->optionget('viewavatars')) ? get_user_avatar($q['user_avatar'], $q['user_avatar_type'], $q['user_avatar_width'], $q['user_avatar_height']) : '',
	'RATING'	=> $q['q_rating'],
	'Q_TEXT'	=> generate_text_for_display($q['q_text'], $q['bbcode_uid'], $q['bbcode_bitfield'], 7),
	'S_BBCODE_ALLOWED'	=> true,
	'S_BBCODE_QUOTE'	=> true,
	'S_BBCODE_IMG'	=> true,
	'EDIT_IMG' 			=> $user->img('icon_post_edit', 'UFAQ_EDIT'),
	'DELETE_IMG' 		=> $user->img('icon_post_delete', 'DELETE'),
	'TIME'		=> $user->format_date($q['q_time']),
	'USER'		=> get_username_string('full', $q['q_user_id'], $q['username'], $q['user_colour']),
	'U_LINK'		=> append_sid("{$phpbb_root_path}u_faq.$phpEx", 'mode=q&id='.$q['q_id']),
	'S_ADD_A_ACTION'		=> append_sid("{$phpbb_root_path}u_faq.$phpEx", 'mode=add_a&id='.$q['q_id']),
	'REPLY'		=> $user->data['user_id'] == ANONYMOUS || $user->data['is_bot'] || !$auth->acl_get('u_add_answers') ? '' : $user->img('button_topic_reply', 'UFAQ_ADD_ANSWER'),
	'U_EDIT'	=> ($auth->acl_get('u_add_question') && $user->data['user_id'] == $q['q_user_id']) || ($auth->acl_get('m_') && $auth->acl_get('u_add_answers')) ? append_sid("{$phpbb_root_path}u_faq.$phpEx", 'mode=edit&id='.$q['q_id']) : '',
	'U_DEL'	=> ($auth->acl_get('u_add_answers') && $user->data['user_id'] == $q['q_user_id']) || ($auth->acl_get('m_') && $auth->acl_get('u_add_answers')) ? append_sid("{$phpbb_root_path}u_faq.$phpEx", 'mode=del&id='.$q['q_id']) : '',
	'U_RATE'	=> $user_id != $q['q_user_id'] ? append_sid("{$phpbb_root_path}u_faq.$phpEx", 'mode=rate&id='.$q['q_id']) : '',
	)
	);

	// +1 к просмотрам
	if (isset($user->data['session_page']) && !$user->data['is_bot'] && (strpos($user->data['session_page'], 'mode=q&id=' . $id) === false || isset($user->data['session_created'])))
	{
		$sql = 'UPDATE ' . Q_QUESTION_TABLE . '
			SET q_views = q_views + 1
			WHERE q_id ='.$id;
		$db->sql_query($sql);
	}

	display_custom_bbcodes();

	// Output page
	page_header($q['q_subj']);

	$template->set_filenames(array(
	   'body' => 'ufaq_body.html')
	);}
elseif($mode == 'add_q' && $id && !$user->data['is_bot'])
{	if(!$auth->acl_get('u_add_question'))
	{
		trigger_error($user->lang['UFAQ_NO_PERMISSION']);
	}

	$user->setup('posting');
	$sql = 'SELECT cat_name, cat_count
			FROM ' . Q_CATS_TABLE . '
			WHERE cat_id = '.$id;
			$result = $db->sql_query($sql);
			$row = $db->sql_fetchrow($result);
			$db->sql_freeresult($result);

	if(!$row)
	{
		trigger_error($user->lang['UFAQ_NO_CAT']);
	}

	$template->assign_vars(array(
	'ADD_QUEST'	=> true,
	'S_BBCODE_ALLOWED'	=> true,
	'S_BBCODE_QUOTE'	=> true,
	'S_BBCODE_IMG'	=> true,
	'S_ADD_A_ACTION'	=> append_sid("{$phpbb_root_path}u_faq.$phpEx", 'mode=save_q&id='.$id),
	)
	);

	// Хлебные крошки
	$template->assign_block_vars('navlinks',array(
		'FORUM_NAME'		=> $row['cat_name'],
		'U_VIEW_FORUM'		=> append_sid("{$phpbb_root_path}u_faq.$phpEx", 'mode=cat&id='.$id),
	)
	);

	display_custom_bbcodes();

	// Output page
	page_header($user->lang['UFAQ_ADD_QUEST'].' &bull; '.$row['cat_name']);

	$template->set_filenames(array(
	   'body' => 'ufaq_body.html')
	);}
elseif($mode == 'add_a' && $id && !$user->data['is_bot'])
{	if(!$auth->acl_get('u_add_answers'))
	{
		trigger_error($user->lang['UFAQ_NO_PERMISSION']);
	}

	$text = utf8_normalize_nfc(request_var('message', '', true));

	if(!$text)
	{		trigger_error($user->lang['UFAQ_NO_ANSWER']);	}
	// Проверяем есть ли такой вопрос
	$sql = 'SELECT q_id
		FROM ' . Q_QUESTION_TABLE . '
		WHERE q_type = 1
		AND q_id = '.$id;
		$result = $db->sql_query($sql);
		$row = $db->sql_fetchrow($result);
		if(!$row)
		{
			trigger_error($user->lang['UFAQ_NO_QUEST']);
		}
		$db->sql_freeresult($result);

	$uid = $bitfield = $options = '';
	$allow_bbcode = $allow_urls = $allow_smilies = true;
	generate_text_for_storage($text, $uid, $bitfield, $options, $allow_bbcode, $allow_urls, $allow_smilies);

	$sql_ary = array(
		'q_parent_q'			=> $id,
		'q_time'				=> time(),
		'q_text'				=> $text,
		'bbcode_uid'			=> $uid,
		'bbcode_bitfield'			=> $bitfield,
		'q_user_id'			=> $user->data['user_id'],
		'q_raters'	=> 0,
	);

	$sql = 'INSERT INTO ' . Q_QUESTION_TABLE . $db->sql_build_array('INSERT', $sql_ary);
	$db->sql_query($sql);

	// +1 к ответам
	$sql = 'UPDATE ' . Q_QUESTION_TABLE . '
		SET q_answers = q_answers + 1
		WHERE q_id ='.$id;
	$db->sql_query($sql);

	$meta_url = append_sid("{$phpbb_root_path}u_faq.$phpEx", 'mode=q&id='.$id);
	$index_u = append_sid("{$phpbb_root_path}index.$phpEx");
	meta_refresh(5, $meta_url);
	trigger_error(sprintf($user->lang['UFAQ_ANSWER_ADDED'], $meta_url, $index_u));
}
elseif($mode == 'save_q' && $id && !$user->data['is_bot'])
{
	if(!$auth->acl_get('u_add_question'))
	{
		trigger_error($user->lang['UFAQ_NO_PERMISSION']);
	}

	// Проверяем есть ли такой раздел
	$sql = 'SELECT cat_count
		FROM ' . Q_CATS_TABLE . '
		WHERE cat_id = '.$id;
		$result = $db->sql_query($sql);
		$row = $db->sql_fetchrow($result);
		if(!$row)
		{
			trigger_error($user->lang['UFAQ_NO_QUEST']);
		}
		$db->sql_freeresult($result);

	$subj = utf8_normalize_nfc(request_var('subj', '', true));
	$text = utf8_normalize_nfc(request_var('message', '', true));

	if(!$subj)
	{
		trigger_error($user->lang['UFAQ_NO_SUBJ']);
	}
	if(!$text)
	{
		trigger_error($user->lang['UFAQ_NO_QUESTION']);
	}

	$uid = $bitfield = $options = '';
	$allow_bbcode = $allow_urls = $allow_smilies = true;
	generate_text_for_storage($text, $uid, $bitfield, $options, $allow_bbcode, $allow_urls, $allow_smilies);
    $time = time();

	$sql_ary = array(
		'q_parent'			=> $id,
		'q_type'			=> 1,
		'q_time'				=> $time,
		'q_subj'				=> $subj,
		'q_text'				=> $text,
		'bbcode_uid'			=> $uid,
		'bbcode_bitfield'			=> $bitfield,
		'q_user_id'			=> $user->data['user_id'],
		'q_raters'	=> 0,
	);

	$sql = 'INSERT INTO ' . Q_QUESTION_TABLE . $db->sql_build_array('INSERT', $sql_ary);
	$db->sql_query($sql);

	$sql = 'SELECT q_id
		FROM ' . Q_QUESTION_TABLE . '
		WHERE q_user_id = '.$user_id.'
		ORDER BY q_id DESC';
		$result = $db->sql_query($sql);
		$qwestion = $db->sql_fetchrow($result);

	$sql_arr = array(
	    'cat_count' => $row['cat_count'] + 1,
	    'last_question_id' => $qwestion['q_id'],
	    'last_question_name' => $subj,
	    'last_question_time' => $time,
	);

	$sql = 'UPDATE ' . Q_CATS_TABLE . '
			SET ' . $db->sql_build_array('UPDATE', $sql_arr) . "
			WHERE cat_id = $id";
	$db->sql_query($sql);

	$meta_url = append_sid("{$phpbb_root_path}u_faq.$phpEx", 'mode=q&id='.$qwestion['q_id']);
	$index_u = append_sid("{$phpbb_root_path}index.$phpEx");
	meta_refresh(5, $meta_url);
	trigger_error(sprintf($user->lang['UFAQ_QUESTION_ADDED'], $meta_url, $index_u));

}
elseif($mode == 'del' && $id && !$user->data['is_bot'])
{	$m_perm = $auth->acl_get('m_') && $auth->acl_get('u_add_answers') ? true : false;

	$sql = 'SELECT q_parent, q_parent_q, q_type, q_user_id
			FROM ' . Q_QUESTION_TABLE . '
			WHERE q_id = '.$id;
			$result = $db->sql_query($sql);
			$row = $db->sql_fetchrow($result);
			$db->sql_freeresult($result);
	// Проверяем права
	if(!$row)
	{
		trigger_error($user->lang['UFAQ_NO_QUEST']);
	}
    if($row['q_type'] && ($row['q_user_id'] != $user->data['user_id'] || !$m_perm || !$auth->acl_get('u_add_question')))
	{
		trigger_error($user->lang['UFAQ_NO_PERMISSION']);
	}
	elseif(!$row['q_type'] && ($row['q_user_id'] != $user->data['user_id'] || !$m_perm || !$auth->acl_get('u_add_answers')))
	{		trigger_error($user->lang['UFAQ_NO_PERMISSION']);	}

	$where = $row['q_type'] ? ' OR q_parent_q = '.$id : '';
	$sql = 'DELETE FROM ' . Q_QUESTION_TABLE . "
			WHERE q_id = $id
			$where";
	$db->sql_query($sql);

	// Если удаляется вопрос, то проверяем инфу в ее категории и при необходимости обновляем
	if($row['q_type'])
	{
		$sql = 'SELECT cat_id, cat_count, last_question_id
			FROM ' . Q_CATS_TABLE . '
			WHERE cat_id = '.$row['q_parent'];
			$result = $db->sql_query($sql);
			$cat = $db->sql_fetchrow($result);
			$db->sql_freeresult($result);

		if($cat['last_question_id'] == $id)
		{			$sql = 'SELECT q_id, q_subj, q_time
					FROM ' . Q_QUESTION_TABLE . '
					WHERE q_parent = '.$cat['cat_id'].'
					ORDER BY q_id DESC';
					$result = $db->sql_query($sql);
					$new_row = $db->sql_fetchrow($result);
					$db->sql_freeresult($result);

			$sql_arr = array(
			    'cat_count' => $cat['cat_count'] - 1,
			    'last_question_id' => $new_row['q_id'],
			    'last_question_name' => $new_row['q_subj'],
			    'last_question_time' => $new_row['q_time'],
			);
		}
		else
		{			$sql_arr = array(
			    'cat_count' => $cat['cat_count'] - 1,
			);		}
        $cat_id = $cat['cat_id'];
		$sql = 'UPDATE ' . Q_CATS_TABLE . '
				SET ' . $db->sql_build_array('UPDATE', $sql_arr) . "
				WHERE cat_id = $cat_id";
		$db->sql_query($sql);

		$meta_url = append_sid("{$phpbb_root_path}u_faq.$phpEx", 'mode=cat&id='.$cat_id);
		$index_u = append_sid("{$phpbb_root_path}index.$phpEx");
		meta_refresh(5, $meta_url);
		trigger_error(sprintf($user->lang['UFAQ_QUESTION_DELETED'], $meta_url, $index_u));
	}
	else
	{		// -1 к ответам
		$sql = 'UPDATE ' . Q_QUESTION_TABLE . '
			SET q_answers = q_answers - 1
			WHERE q_id ='.$row['q_parent_q'];
		$db->sql_query($sql);

		$meta_url = append_sid("{$phpbb_root_path}u_faq.$phpEx", 'mode=q&id='.$row['q_parent_q']);
		$index_u = append_sid("{$phpbb_root_path}index.$phpEx");
		meta_refresh(5, $meta_url);
		trigger_error(sprintf($user->lang['UFAQ_ANSWER_DELETED'], $meta_url, $index_u));	}
}
elseif($mode == 'edit' && $id && !$user->data['is_bot'])
{	$m_perm = $auth->acl_get('m_') && $auth->acl_get('u_add_answers') ? true : false;

	$sql = 'SELECT q_type, q_subj, q_text, bbcode_uid, bbcode_bitfield, q_user_id
			FROM ' . Q_QUESTION_TABLE . '
			WHERE q_id = '.$id;
			$result = $db->sql_query($sql);
			$row = $db->sql_fetchrow($result);
			$db->sql_freeresult($result);
	// Проверяем права
	if(!$row)
	{
		trigger_error($user->lang['UFAQ_NO_QUEST']);
	}
    if($row['q_type'] && ($row['q_user_id'] != $user->data['user_id'] || !$m_perm || !$auth->acl_get('u_add_question')))
	{
		trigger_error($user->lang['UFAQ_NO_PERMISSION']);
	}
	elseif(!$row['q_type'] && ($row['q_user_id'] != $user->data['user_id'] || !$m_perm || !$auth->acl_get('u_add_answers')))
	{
		trigger_error($user->lang['UFAQ_NO_PERMISSION']);
	}
    $user->setup('posting');
    decode_message($row['q_text'], $row['bbcode_uid']);

	$template->assign_vars(array(
	'ADD_QUEST'	=> true,
	'REPLY'	=> $row['q_type'] ? false : true,
	'Q_SUBJ'	=> $row['q_subj'],
	'TEXT'	=> $row['q_text'],
	'S_BBCODE_ALLOWED'	=> true,
	'S_BBCODE_QUOTE'	=> true,
	'S_BBCODE_IMG'	=> true,
	'S_ADD_A_ACTION'	=> append_sid("{$phpbb_root_path}u_faq.$phpEx", 'mode=save_edit&id='.$id),
	)
	);

	display_custom_bbcodes();

	// Output page
	page_header($user->lang['UFAQ_EDIT']);

	$template->set_filenames(array(
	   'body' => 'ufaq_body.html')
	);}
elseif($mode == 'save_edit' && $id && !$user->data['is_bot'])
{	$m_perm = $auth->acl_get('m_') && $auth->acl_get('u_add_answers') ? true : false;

	$sql = 'SELECT q_type, q_parent, q_parent_q, q_user_id
			FROM ' . Q_QUESTION_TABLE . '
			WHERE q_id = '.$id;
			$result = $db->sql_query($sql);
			$row = $db->sql_fetchrow($result);
			$db->sql_freeresult($result);
	// Проверяем права
	if(!$row)
	{
		trigger_error($user->lang['UFAQ_NO_QUEST']);
	}
    if($row['q_type'] && ($row['q_user_id'] != $user->data['user_id'] || !$m_perm || !$auth->acl_get('u_add_question')))
	{
		trigger_error($user->lang['UFAQ_NO_PERMISSION']);
	}
	elseif(!$row['q_type'] && ($row['q_user_id'] != $user->data['user_id'] || !$m_perm || !$auth->acl_get('u_add_answers')))
	{
		trigger_error($user->lang['UFAQ_NO_PERMISSION']);
	}

	$text = utf8_normalize_nfc(request_var('message', '', true));
	if(!$text)
	{
		trigger_error($user->lang['UFAQ_NO_ANSWER']);
	}

	$uid = $bitfield = $options = '';
	$allow_bbcode = $allow_urls = $allow_smilies = true;
	generate_text_for_storage($text, $uid, $bitfield, $options, $allow_bbcode, $allow_urls, $allow_smilies);

	if($row['q_type'])
	{
		$subj = utf8_normalize_nfc(request_var('subj', '', true));
		$redirect_id = $id;
		$q_parent = $row['q_parent'];

		if(!$subj)
		{
			trigger_error($user->lang['UFAQ_NO_SUBJ']);
		}

        // Обновляем данные в категории, если редактируемый вопрос в ней последний
		$sql_parent = array(
		    'last_question_name' => $subj,
		);

		$sql = 'UPDATE ' . Q_CATS_TABLE . '
				SET ' . $db->sql_build_array('UPDATE', $sql_parent) . "
				WHERE cat_id = $q_parent
				AND last_question_id = $id";
		$db->sql_query($sql);

		$sql_arr = array(
		    'q_subj' => $subj,
		    'q_text' => $text,
		    'bbcode_uid'			=> $uid,
			'bbcode_bitfield'		=> $bitfield,
		);
	}
	else
	{		$redirect_id = $row['q_parent_q'];
		$sql_arr = array(
		    'q_text' => $text,
		    'bbcode_uid'			=> $uid,
			'bbcode_bitfield'		=> $bitfield,
		);	}

	$sql = 'UPDATE ' . Q_QUESTION_TABLE . '
			SET ' . $db->sql_build_array('UPDATE', $sql_arr) . "
			WHERE q_id = $id";
	$db->sql_query($sql);

	$meta_url = append_sid("{$phpbb_root_path}u_faq.$phpEx", 'mode=q&id='.$redirect_id);
	$index_u = append_sid("{$phpbb_root_path}index.$phpEx");
	meta_refresh(5, $meta_url);
	trigger_error(sprintf($user->lang['UFAQ_QUESTION_EDITED'], $meta_url, $index_u));}
elseif($mode == 'rate' && $id && !$user->data['is_bot'])
{	$sql = 'SELECT q_parent_q, q_user_id, q_rating, q_raters
		FROM ' . Q_QUESTION_TABLE . '
		WHERE q_id = '.$id;
		$result = $db->sql_query($sql);
		$row = $db->sql_fetchrow($result);
		$db->sql_freeresult($result);

	if($row)
	{		$raters = '';
        $redirect = $row['q_parent_q'] ? $row['q_parent_q'] : $id;
		if($row['q_user_id'] == $user_id)
		{			trigger_error($user->lang['UFAQ_RATE_SELF']);		}

		if(!$row['q_raters'])
		{			$raters = $user_id;		}
		else
		{			$raters = explode(",",$row['q_raters']);
			//echo $raters;			if(in_array($user_id, $raters))
			{
				trigger_error($user->lang['UFAQ_ALREDY_RATED']);
			}
			else
			{				$raters[] = $user_id;
				$raters = implode(",",$raters);			}
		}

		$sql_arr = array(
		    'q_rating' => $row['q_rating'] + 1,
		    'q_raters' => $raters,
		);

		$sql = 'UPDATE ' . Q_QUESTION_TABLE . '
				SET ' . $db->sql_build_array('UPDATE', $sql_arr) . "
				WHERE q_id = $id";
		$db->sql_query($sql);

		$meta_url = append_sid("{$phpbb_root_path}u_faq.$phpEx", 'mode=q&id='.$redirect);
		$index_u = append_sid("{$phpbb_root_path}index.$phpEx");
		meta_refresh(3, $meta_url);
		trigger_error(sprintf($user->lang['UFAQ_RATED'], $meta_url, $index_u));	}
	else
	{		trigger_error($user->lang['NO_MODE']);	}}
else
{	trigger_error($user->lang['NO_MODE']);}

page_footer();

?>

Вернуться в «Бета-версии модов для phpBB 3.0.x»