Магазин
Правила Ответы на вопросы Конфиденциальность
Магазин
Правила Ответы на вопросы Конфиденциальность
  • Быстрые действия Ярлыки
    Общие действия
    Связаться с администрацией
    • Бот

       

Минимоды и хаки для phpBB3

  • Список форумов
  • Форумы по phpBB 3.0
  • Другие моды для phpBB 3.0
  • Минимоды и хаки для phpBB3

Создание сообщений на форуме из личных сообщений

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

1 сообщение
 • Страница 1 из 1
Просмотры: 2349 • 
  • Аватара пользователя
    PPK Сообщение 17.10.2013
    Иногда бывает так, что пользователи пишут в ЛС вопросы которые можно и нужно задавать на форуме, после чего, приходится каждому отвечать в ЛС, когда можно было-бы ответить сразу всем на форуме, после очередного "иногда" я подумал написать мод, который делал-бы из ЛС сообщение на форуме.

    1. В phpmyadmin выполнить (если префикс таблиц не phpbb_ - заменить на свой)

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

    INSERT INTO `phpbb_acl_options` (`auth_option_id`, `auth_option`, `is_global`, `is_local`, `founder_only`) VALUES (NULL, 'u_pm_createposts', '1', '0', '0');
    2. Переделать файлы

    includes/functions_privmsgs.php заменить

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

    function handle_mark_actions($user_id, $mark_action)
    {
    	global $db, $user, $phpbb_root_path, $phpEx;
    на

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

    function handle_mark_actions($user_id, $mark_action)
    {
    	global $db, $user, $phpbb_root_path, $phpEx, $template;
    после

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

    				confirm_box(false, 'DELETE_MARKED_PM', build_hidden_fields($s_hidden_fields));
    			}
    
    		break;
    добавить

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

    		case 'create_posts':
    
    			global $auth;
    
    			if (!$auth->acl_get('u_pm_createposts'))
    			{
    				trigger_error('NO_AUTH_CREATE_POSTS');
    			}
    
    			if (confirm_box(true))
    			{
    				$user_save=array(
    					'user_id' => $user->data['user_id'],
    					'user_ip' => $user->ip,
    					'username' => $user->data['username'],
    					'is_registered' => $user->data['is_registered'],
    					'user_colour' => $user->data['user_colour'],
    				);
    
    				$forum_id=request_var('forum_id', 0);
    
    				create_posts_pm($user_id, $msg_ids, $cur_folder_id, $forum_id);
    
    				$user->data['user_id']=$user_save['user_id'];
    				$user->ip=$user_save['user_ip'];
    				$user->data['username']=$user_save['username'];
    				$user->data['is_registered']=$user_save['is_registered'];
    				$user->data['user_colour']=$user_save['user_colour'];
    
    				$success_msg = (sizeof($msg_ids) == 1) ? 'MESSAGE_CREATED' : 'MESSAGES_CREATED';
    				$redirect = append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&folder=' . $cur_folder_id);
    				$redirect2 = append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id);
    
    				meta_refresh(3, $redirect);
    				trigger_error($user->lang[$success_msg]. '<br /><br />' . sprintf($user->lang['RETURN_FORUM'], '<a href="' . $redirect2 . '">', '</a>') . '<br /><br />' . sprintf($user->lang['RETURN_FOLDER'], '<a href="' . $redirect . '">', '</a>'));
    			}
    			else
    			{
    				$template->assign_vars(array(
    					'MESSAGE_TEXT_EXPLAIN'			=> select_forums('forum_id'),
    					)
    				);
    
    				$s_hidden_fields = array(
    					'cur_folder_id'	=> $cur_folder_id,
    					'mark_option'	=> 'create_posts',
    					'submit_mark'	=> true,
    					'marked_msg_id'	=> $msg_ids
    				);
    
    				confirm_box(false, 'CREATE_POSTS_PM', build_hidden_fields($s_hidden_fields));
    			}
    		break;
    после

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

    	}
    
    	return $address_list;
    }
    добавить

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

    function select_forums($key)
    {
    	global $user, $config, $config, $phpbb_root_path, $phpEx;
    
    	include_once("{$phpbb_root_path}includes/functions_admin.{$phpEx}");
    
    	$forum_list = make_forum_select(false, false, true, true, true, false, true);
    
    	// Build forum options
    	$s_forum_options = '<select id="' . $key . '" name="' . $key . '">';
    	foreach ($forum_list as $f_id => $f_row)
    	{
    		$s_forum_options .= '<option value="' . $f_id . '"' . (($f_row['disabled']) ? ' disabled="disabled" class="disabled-option"' : '') . '>' . $f_row['padding'] . $f_row['forum_name'] . '</option>';
    	}
    	$s_forum_options .= '</select>';
    
    	return $s_forum_options;
    
    }
    
    function create_posts_pm($user_id, $msg_ids, $folder_id, $forum_id)
    {
    	global $db, $user, $phpbb_root_path, $phpEx;
    
    	$user_id	= (int) $user_id;
    	$folder_id	= (int) $folder_id;
    
    	if (!$user_id)
    	{
    		return false;
    	}
    
    	if (!is_array($msg_ids))
    	{
    		if (!$msg_ids)
    		{
    			return false;
    		}
    		$msg_ids = array($msg_ids);
    	}
    
    	if (!sizeof($msg_ids))
    	{
    		return false;
    	}
    
    	$sql="SELECT forum_id, forum_name, enable_indexing FROM ".FORUMS_TABLE." WHERE forum_id='{$forum_id}'";
    	$result=$db->sql_query($sql);
    	$forum_data=$db->sql_fetchrow($result);
    	$db->sql_freeresult($result);
    
    	if(!sizeof($forum_data))
    	{
    		return false;
    	}
    
    	// Get PM Information for later deleting
    	$sql = 'SELECT msg_id
    		FROM ' . PRIVMSGS_TO_TABLE . '
    		WHERE ' . $db->sql_in_set('msg_id', array_map('intval', $msg_ids)) . "
    			AND folder_id = $folder_id
    			AND user_id = $user_id";
    	$result = $db->sql_query($sql);
    
    	$create_posts_rows = array();
    	$num_created = 0;
    	while ($row = $db->sql_fetchrow($result))
    	{
    		$create_posts_rows[$row['msg_id']] = $row['msg_id'];
    	}
    	$db->sql_freeresult($result);
    	unset($msg_ids);
    
    	if (!sizeof($create_posts_rows))
    	{
    		return false;
    	}
    
    	include_once("{$phpbb_root_path}includes/functions_posting.{$phpEx}");
    
    	$sql = 'SELECT pm.*, u.user_id, u.username, u.user_colour
    		FROM ' . PRIVMSGS_TABLE . ' pm LEFT JOIN '.USERS_TABLE.' u ON (pm.author_id=u.user_id)
    		WHERE ' . $db->sql_in_set('pm.msg_id', array_map('intval', $create_posts_rows)) . "";
    	$result = $db->sql_query($sql);
    	while($row=$db->sql_fetchrow($result))
    	{
    		$user->data['user_id']=$row['user_id'];
    		$user->ip=$row['author_ip'];
    		$user->data['username']=$row['username'];
    		$user->data['is_registered']=true;
    		$user->data['user_colour']=$row['user_colour'];
    
    		$subject=$row['message_subject'];
    		$username='';
    		$topic_type=0;
    		$poll=array();
    		$data=array(
    			'forum_name' => $forum_data['forum_name'],
    			'topic_title' => $subject,
    			'forum_id' => $forum_id,
    			'icon_id' => $row['icon_id'],
    			'topic_time_limit' => 0,
    			//'topic_attachment' => $row['message_attachment'] ? 1 : 0,
    			'attachment_data' => array(),
    			'topic_desc' => '',
    			'post_langvars' => 0,
    			//'post_attachment' => $row['message_attachment'] ? 1 : 0,
    			'enable_bbcode'		=> $row['enable_bbcode'],
    			'enable_smilies'	=> $row['enable_smilies'],
    			'enable_urls'	=> $row['enable_magic_url'],
    			'enable_sig'		=> $row['enable_sig'],
    			'bbcode_bitfield'	=> $row['bbcode_bitfield'],
    			'bbcode_uid'		=> $row['bbcode_uid'],
    			'post_edit_locked' => 0,
    			'message' => $row['message_text'],
    			'message_md5' => md5($row['message_text']),
    			'enable_indexing' => $forum_data['enable_indexing'] ? true : false,
    			'notify_set' => false,
    			'notify' => false,
    		);
    		$update_message = false;
    		$update_search_index = $forum_data['enable_indexing'] ? true : false;
    
    		submit_post('post', $subject, $username, $topic_type, $poll, $data, $update_message, $update_search_index);
    	}
    	$db->sql_freeresult($result);
    
    	/*$sql = 'DELETE
    		FROM ' . ATTACHMENTS_TABLE . '
    		WHERE ' . $db->sql_in_set('post_msg_id', array_map('intval', $create_posts_rows)) . " AND in_message='1'";
    	$result = $db->sql_query($sql);*/
    
    	/*$sql = 'UPDATE ' . ATTACHMENTS_TABLE . " SET in_message='0'
    		WHERE " . $db->sql_in_set('post_msg_id', array_map('intval', $create_posts_rows)) . " AND in_message='1'";
    	$result = $db->sql_query($sql);*/
    
    	return true;
    }
    includes/ucp/ucp_pm.php заменить

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

    				// Is moving PM triggered through mark options?
    				if (!in_array($mark_option, array('mark_important', 'delete_marked')) && $submit_mark)
    на

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

    				// Is moving PM triggered through mark options?
    				if (!in_array($mark_option, array('mark_important', 'delete_marked', 'create_posts')) && $submit_mark)
    includes/ucp/ucp_pm_viewfolder.php заменить

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

    		$icons = $cache->obtain_icons();
    
    		$color_rows = array('marked', 'replied');
    на

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

    		$icons = $cache->obtain_icons();
    
    		$color_rows = array('marked', 'replied', 'new');
    перед

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

    		// Minimise edits
    		if (!$auth->acl_get('u_pm_delete') && $key = array_search('delete_marked', $mark_options))
    добавить

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

    		$auth->acl_get('u_pm_createposts') ? $mark_options[]='create_posts' : '';
    language/ru/acp/permissions_phpbb.php после

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

    	'acl_u_viewonline'	=> array('lang' => 'Может видеть статус присутствия', 'cat' => 'misc'),
    	'acl_u_search'		=> array('lang' => 'Может использовать поиск', 'cat' => 'misc'),
    добавить

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

    	'acl_u_pm_createposts' => 	array('lang' => 'Может создавать сообщения из ЛС', 'cat' => 'pm'),
    language/ru/ucp.php после

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

    	'NO_PENDING'	=> 'Нет кандидатов в члены группы',
    	'NO_NONMEMBER'	=> 'Нет пустых групп',
    добавить

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

    	'NO_AUTH_CREATE_POSTS'		=> 'У вас нет доступа к функции создания сообщений.',
    	'CREATE_POSTS_PM'			=> 'Создать из отмеченных сообщения на форуме',
    	'CREATE_POSTS_PM_CONFIRM'			=> '<span style="color:#FF0000;">Пожалуйста убедитесь, что в указанных ЛС нет никаких личных данных</span>, выберите форум в который данные ЛС будут перемещены (вложения перемещены не будут), также необходимо учитывать права доступа авторов ЛС в выбранном форуме.',
    	'CREATE_POSTS' => 'Создать из отмеченных сообщения на форуме',
    	'MESSAGES_CREATED' => 'Сообщения успешно созданы',
    	'MESSAGE_CREATED' => 'Сообщение успешно создано',
    styles/prosilver/template/confirm_body.html после

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

    	<h2>{MESSAGE_TITLE}</h2>
    	<p>{MESSAGE_TEXT}</p>
    добавить

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

    	<!-- IF MESSAGE_TEXT_EXPLAIN --><div style="text-align:center;padding-bottom:20px;">{MESSAGE_TEXT_EXPLAIN}</div><!-- ENDIF -->
    styles/subsilver2/template/confirm_body.html заменить

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

    		<td class="row1" align="center"><br /><p class="gen">{MESSAGE_TEXT}</p><br />{S_HIDDEN_FIELDS}<input type="submit" name="confirm" value="{YES_VALUE}" class="btnmain" />&nbsp;&nbsp;<input type="submit" name="cancel" value="{L_NO}" class="btnlite" /></td>
    на

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

    		<td class="row1" align="center"><!-- IF MESSAGE_TEXT_EXPLAIN --><div style="text-align:center;padding-bottom:20px;">{MESSAGE_TEXT_EXPLAIN}</div><!-- ENDIF --><br /><p class="gen">{MESSAGE_TEXT}</p><br />{S_HIDDEN_FIELDS}<input type="submit" name="confirm" value="{YES_VALUE}" class="btnmain" />&nbsp;&nbsp;<input type="submit" name="cancel" value="{L_NO}" class="btnlite" /></td>
    3. Очистить кеш, обновить переделанные стили, назначить права.

    Скриншоты:
    Права в администраторском разделе

    Личное сообщение

    Опции для создания сообщения из ЛС




    Сообщение из ЛС на форуме


PPK
1 сообщение
 • Страница 1 из 1

Вернуться в «Минимоды и хаки для phpBB3»

Time: 0.000s | Queries: 0 | Peak Memory Usage: 0.00 МБ | GZIP: Unknown | SQL Explain
  • Список форумов
2018, made with by ThemeKita Создано на основе phpBB® Forum Software © phpBB Limited Русская поддержка phpBB (C) 2009-2026 @ PPK
  • Часовой пояс: UTC+04:00
Участники темы
Список форумов Участники темы
Перейти
Сайт ↳   Новости по сайту ↳   Новости обновлений ↳   Вопросы по сайту ↳   Non-russian speakers forum Форумы по phpBB 3.1-3.3 ↳   Расширения для phpBB 3.1-3.3 ↳   Бета-версии и расширения в разработке ↳   База расширений ↳   Поиск и запросы расширений ↳   Расширения для phpBB 3.1-3.3 для донаторов ↳   Условно-бесплатные расширения ↳   Платные расширения ↳   Расширения для подписчиков ↳   Запросы расширений, функционала и переводов для подписчиков ↳   Переводы расширений для phpBB3.1-3.3 ↳   Стили для phpBB 3.1-3.3 ↳   Вопросы по phpBB 3.1-3.3 Форумы по phpBB 3.0 ↳   Мод трекера ppkBB3cker ↳   Новости по трекеру и обновлениям ↳   Ошибки, проблемы, недочёты ↳   Предложения по новым функциям и возможностям ↳   Вопросы, ответы и примеры решений ↳   Моды и стили для трекера ↳   Готовые стили для трекера ↳   Запросы стилей для трекера ↳   Стили в разработке ↳   Готовые моды для трекера ↳   Запросы модов для трекера ↳   Моды в разработке ↳   Остальное ↳   Часто задаваемые вопросы ↳   Ваши трекеры ↳   Мод трекера xbtBB3cker ↳   Новости по трекеру и обновлениям ↳   Вопросы, ответы, ошибки и обсуждение ↳   Другие моды для phpBB 3.0 ↳   Минимоды и хаки для phpBB3 ↳   phpBB 3.0 ppkBB3cker Edition ↳   Платные услуги, моды, стили для phpBB 3.0 ↳   BB2Spoiler/BB3Spoiler ↳   BB3Topics ↳   BB3Sape ↳   BB3UserAgentInfo ↳   Вопросы по phpBB 3.0 ↳   Вне тематики форума