Страница 1 из 10

[FAQ] Как программно добавить тему / пост / личное сообщение

Добавлено: 02.06.2008 15:16
crafter
Автоматическое создание темы / сообщения.
Как правильно программно создавать темы/сообщения под нужным юзером сторонним скриптом?

Добавлено: 02.06.2008 18:09
Поручик
Воспользуйтесь штатными средствами phpBB3
Inserting Posts and Private Messages

Ответы на некоторые вопросы содержатся в темах
How to create new threads, posts and private messages?
API submit_post
Create a new post
submit_post function leaves slashes in db

Re: Программно добавить тему/пост под нужным юзером

Добавлено: 04.06.2008 0:29
crafter

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

<?php

define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : '/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
require($phpbb_root_path . 'common.' . $phpEx);
require_once($phpbb_root_path . 'includes/functions_posting.' . $phpEx); 

// Start session management
$user->session_begin(false); // no update_session_page
// session_create($user_id = false, $set_admin = false, $persist_login = false, $viewonline = true)
$user->session_create( [USER_ID_HERE], false, false, false);
$auth->acl($user->data);
$user->setup();

$my_subject	= utf8_normalize_nfc(utf8_recode('subject test [русский сабж 3] text', 'windows-1251'));
$my_text	= utf8_normalize_nfc(utf8_recode('this is [русский текст 3] a text', 'windows-1251'));

// variables to hold the parameters for submit_post
$poll = $uid = $bitfield = $options = ''; 

generate_text_for_storage($my_subject, $uid, $bitfield, $options, false, false, false);
generate_text_for_storage($my_text, $uid, $bitfield, $options, true, true, true);

$data = array( 
	'forum_id'		=> [FORUM_ID_HERE],
	'icon_id'		=> false,

	'enable_bbcode'		=> true,
	'enable_smilies'	=> true,
	'enable_urls'		=> true,
	'enable_sig'		=> true,

	'message'		=> $my_text,
	'message_md5'	=> md5($my_text),
				
	'bbcode_bitfield'	=> $bitfield,
	'bbcode_uid'		=> $uid,

	'post_edit_locked'	=> 0,
	'topic_title'		=> $my_subject,
	'notify_set'		=> false,
	'notify'			=> false,
	'post_time' 		=> 0,
	'forum_name'		=> '',
	'enable_indexing'	=> true,
);

submit_post('post', $my_subject, '', POST_NORMAL, $poll, $data);

$user->session_kill();
?>

Re: [FAQ] Как программно добавить тему / пост / личное сообщение

Добавлено: 30.08.2008 2:11
Koyot

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

<?
define('IN_PHPBB', true);

// Set phpBB root folder properly. Change in according to the actual board folder
define('PHPBB_ROOT_PATH', './forum/');
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';

$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);

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

// Initialize  login result array
$login = array();

// Handle logouot button if pressed
if(isset($_POST['logout']) && $user->data['user_id'] != ANONYMOUS)
{
	$user->session_kill();
}

// Check if user has submitted login and password and try to log in
if(isset($_POST['login']) && $user->data['user_id'] == ANONYMOUS)
{
	$username = request_var('username', '', true);
	$password = request_var('password', '', true);
	$autologin	= (!empty($_POST['autologin'])) ? true : false;

	$login = $auth->login($username, $password, $autologin);
}

// Send headers


header('Cache-Control: private, no-cache="set-cookie"');
header('Expires: 0');
header('Pragma: no-cache');

// Check if user has tried to log in and greet him if login is successful
if((!empty($login) && $login['status'] == LOGIN_SUCCESS) || $user->data['user_id'] != ANONYMOUS)
{
	// Reset permissions data if user has just logged in
	
}
?>
на сайте уже есть этот код, как создать тему не создавая сессию новую? а то создавать сессию новую не хочется

Re: [FAQ] Как программно добавить тему / пост / личное сообщение

Добавлено: 30.08.2008 5:45
rxu
Koyot
Естественно, в рамках одной сессии можно использовать код для создания тем/сообщений (начинается с $my_subject = и заканчивается вызовом submit_post).

Re: [FAQ] Как программно добавить тему / пост / личное сообщение

Добавлено: 03.09.2008 18:44
RavenS
Доброго времени суток.
У меня вопрос, более сложный, чем просто программное добавление тем...
Вобщем:

В конференции есть подфорум под названием Библиотека. Администратор периодически добавляет туда новые материалы, типа статей и учебников. Допустим, есть некоторая форма с полями "Название темы", "Комментарий к материалу", "Материал". Админ заполняет поля, нажимает Отправить, и на форуме создаётся тема с "Название темы", вложенным материалом "Материал", и описанием темы "Комментарий к материалу", а также с опросом "Оцените материал по n-бальной шкале". Допустим, по пятибальной. Варианты ответов на опрос: числа от 1 до 5 соответственно...

Возможно ли такое реализовать? В каком направлении копать?

Re: [FAQ] Как программно добавить тему / пост / личное сообщение

Добавлено: 03.09.2008 19:06
rxu

Re: [FAQ] Как программно добавить тему / пост / личное сообщение

Добавлено: 09.03.2009 14:54
dixon_che
С добавлением поста понятно, а как добавить новый топик?

Re: [FAQ] Как программно добавить тему / пост / личное сообщение

Добавлено: 09.03.2009 15:13
rxu
В режиме 'post' добавляется новая тема, в режиме 'reply' добавляется ответ в существующую тему.

Re: [FAQ] Как программно добавить тему / пост / личное сообщение

Добавлено: 10.03.2009 11:02
dixon_che
Спасибо! Разобрался.

А есть ли готовый рецепт добавления поста от имени другого пользователя?
http://www.phpbb.com/community/viewtopi ... 5#p4028115 - здесь сказано что это не так просто, но больше ничего по этому поводу на этом форуме не нашел.

Re: [FAQ] Как программно добавить тему / пост / личное сообщение

Добавлено: 10.03.2009 11:24
Поручик
Как-то так, и читаем далее.
http://www.phpbb.com/community/viewtopi ... 9#p3630225
Иными словами, надо вызвать $auth->acl() для определения прав доступа другого пользователя.

Добавлено спустя 4 минуты 44 секунды:
submit_post - spoof auth?
http://www.phpbb.com/community/viewtopi ... 5#p4624845

Короче, материалов на офе полно, как ты искал, не понимаю.

Re: [FAQ] Как программно добавить тему / пост / личное сообщение

Добавлено: 10.03.2009 12:00
dixon_che
За линки спасибо - но там как-то муторно все описано...

Замечательное описание есть здесь:
http://phpbbmodders.net/articles/3.0/create_post/
И главное заработало из коробки.

Re: [FAQ] Как программно добавить тему / пост / личное сообщение

Добавлено: 10.03.2009 16:04
dixon_che
Есть проблема.
Когда в скрипте нет ничего кроме кода добавления форума - все работает замечательно.

Но если перед вызовом функции submit_post я что-то вычитываю из базы - мне светит такую ошибку:

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

General Error
SQL ERROR [ mysql4 ]
[]

BACKTRACE

FILE: includes/db/dbal.php
LINE: 264
CALL: dbal_mysql->sql_error()

FILE: includes/functions_posting.php
LINE: 1617
CALL: dbal_mysql->sql_transaction()

FILE: post_new_forum.php
LINE: 82
CALL: submit_post()
Базу открываю, читаю, результат чищу, закрываю...

Не подскажите как лечить?

Re: [FAQ] Как программно добавить тему / пост / личное сообщение

Добавлено: 10.03.2009 18:05
rxu
dixon_che
А какой ваш скрипт вызывает ошибку - нам телепатировать?

Re: [FAQ] Как программно добавить тему / пост / личное сообщение

Добавлено: 10.03.2009 19:33
dixon_che
Это все что выводится на странице при ошибке.
В sql log ничего нету по поводу этой ошибки.

Но это уже не важно. Я кажется понял в чем проблема. Нельзя в рамках одного скрипта пользоваться phpbb подключением к БД и своим собственным.

Короче перестроил свои запросы через объект $db->...

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

	$result = $db->sql_query($sql);
	$row = $db->sql_fetchrow($result);
	$db->sql_freeresult($result);
Все заработало.

Спасибо за участие!