В проекте используется форум phpBB. Он располагается в директории forum/ в корне сайта. На сайте есть структура каталог-раздел-подраздел-продукт. Соответственно на форуме автоматически создается конференция-форум-подфорум-тема, для возможности обсуждения продукта заинтересованными лицами. В отображение продукта добавляется ссылка на соответствующую тему.
Предварительное приготовление.
Правим forum/includes/session.php. В это файле находятся класс: user, который перекликается с Yii.
Код: Выделить всё
class user extends session
Код: Выделить всё
class bbuser extends session
Код: Выделить всё
function user()
{
global $phpbb_root_path;
$this->lang_path = $phpbb_root_path . 'language/';
}
Код: Выделить всё
function bbuser()
{
global $phpbb_root_path;
$this->lang_path = $phpbb_root_path . 'language/';
}
Код: Выделить всё
// Instantiate some basic classes
$user = new user();
Код: Выделить всё
// Instantiate some basic classes
$user = new bbuser();
Код: Выделить всё
$GLOBALS['user'] = $user;
$GLOBALS['auth'] = $auth;
$GLOBALS['template'] = $template;
$GLOBALS['cache'] = $cache;
$GLOBALS['db'] = $db;
Код: Выделить всё
// Grab global variables, re-cache if necessary
$config = $cache->obtain_config();
$GLOBALS['config'] = $config;
Код: Выделить всё
validate_range($range_test_ary, $errors);
Код: Выделить всё
if (!$auto)
validate_range($range_test_ary, $errors);
Скрипт добавления конференции или форума в моем случае размещается в методе beforeSave в классе модели.
Код: Выделить всё
/**
* Добавление конференции на форум, согласно вновь создаваемому каталогу
*/
public function beforeSave()
{
global $cache, $auth;
$forum_data = array(
'parent_id' => 0, // либо id форума, в который
//вы хотите вложить данный создаваемый
'left_id' => 0,
'right_id' => 0,
'forum_parents' => '',
'forum_name' => $this->title,
'forum_desc' => $this->description,
'forum_desc_bitfield' => '',
'forum_desc_options' => 7,
'forum_desc_uid' => '',
'forum_link' => '',
'forum_password' => '',
'forum_style' => 0,
'forum_image' => '',
'forum_rules' => '',
'forum_rules_link' => '',
'forum_rules_bitfield' => '',
'forum_rules_options' => 7,
'forum_rules_uid' => '',
'forum_topics_per_page'=> 0,
'forum_type' => 0, // 0 - конференция 1 - форум
'forum_status' => 0,
'forum_posts' => 0,
'forum_topics' => 0,
'forum_topics_real' => 0,
'forum_last_post_id' => 0,
'forum_last_poster_id' => 0,
'forum_last_post_subject' => '',
'forum_last_post_time' => 0,
'forum_last_poster_name' => '',
'forum_last_poster_colour' => '',
'forum_flags' => 32,
'display_on_index' => false,
'enable_indexing' => true,
'enable_icons' => false,
'enable_prune' => false,
'prune_next' => 0,
'prune_days' => 7,
'prune_viewed' => 7,
'prune_freq' => 1,
);
//разрешаем доступ к форуму из стороннего скрипта
define('IN_PHPBB', true);
// устанавливаем корень форума и расширение файлов
define('PHPBB_ROOT_PATH',
dirname(Yii::app()->basePath).'/forum/');
$phpbb_root_path = dirname(Yii::app()->basePath).'/forum/';
$GLOBALS['phpbb_root_path'] = $phpbb_root_path;
$phpEx = substr(strrchr(__FILE__, '.'), 1);
$GLOBALS['phpEx'] = $phpEx;
$GLOBALS['auto'] = true;
include($phpbb_root_path . 'common.' . $phpEx);
// подключаем функционал работы с форумом
include($phpbb_root_path . 'includes/acp/acp_forums.' . $phpEx);
//оздаем форум
$forums_admin = new acp_forums();
$forums_admin->update_forum_data($forum_data);
// добавляем права доступа к форуму
$connection=Yii::app()->db;
$sql="SELECT MAX(forum_id) FROM phpbb_forums";
$forum_idMax=$connection->createCommand($sql)->queryRow();
$forum_id = $forum_idMax["MAX(forum_id)"];
$sql = "INSERT INTO phpbb_acl_groups (group_id, forum_id,
auth_option_id, auth_role_id, auth_setting)
VALUES
(1, '$forum_id', 0, 17, 0),
(2, '$forum_id', 0, 18, 0),
(4, '$forum_id', 0, 14, 0),
(5, '$forum_id', 0, 14, 0),
(6, '$forum_id', 0, 17, 0),
(7, '$forum_id', 0, 18, 0);";
$sql_command=$connection->CreateCommand($sql);
$sql_command->execute();
// очищаем кэш
$cache->purge();
$auth->acl_clear_prefetch();
// забираем id созданной конференции(или форума)
$this->forum_id = $forum_id;
return true;
}
Код: Выделить всё
// добавление темы на форум, согласно создаваемому продукту
public function beforeSave()
{
global $user, $auth;
define('IN_PHPBB', true);
// Set phpBB root folder properly. Change in according to the actual board folder
define('PHPBB_ROOT_PATH', dirname(Yii::app()->basePath).'/forum/');
$phpbb_root_path = dirname(Yii::app()->basePath).'/forum/';
$GLOBALS['phpbb_root_path'] = $phpbb_root_path;
$phpEx = substr(strrchr(__FILE__, '.'), 1);
$GLOBALS['phpEx'] = $phpEx;
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
// Start session management
$user->session_begin(false); // no update_session_page
$user->session_create( 2, false, false, false);
$auth->acl($user->data);
$user->setup();
// variables to hold the parameters for submit_post
$poll = $uid = $bitfield = $options = '';
$data = array(
'forum_id' => $this->subpart->forum_id, // тут я ссылаюсь на форум,
//который был создан для
//подраздела, в который я
//добавляю этот продукт
'topic_id' => 0, // 0 - новая тема, или id темы куда будет помещен пост
'icon_id' => false,
'enable_bbcode' => true,
'enable_smilies' => true,
'enable_urls' => true,
'enable_sig' => true,
'message' => $this->description,
'message_md5' => md5($this->description),
'bbcode_bitfield' => $bitfield,
'bbcode_uid' => $uid,
'post_edit_locked' => 0,
'topic_title' => $this->title,
'notify_set' => false,
'notify' => false,
'post_time' => 0,
'forum_name' => '',
'enable_indexing' => true,
);
@submit_post('post', $this->title, '', POST_NORMAL, $poll, $data);
$user->session_kill();
$connection=Yii::app()->db;
$sql="SELECT MAX(post_id) FROM phpbb_posts";
$post_idMax=$connection->createCommand($sql)->queryRow();
// забираем id созданной темы, для сохранения ее в модели
$this->theme_id = $post_idMax["MAX(post_id)"];
return true;
}