从PHP和设置权限在phpBB3中创建论坛
发布时间:2020-12-13 16:15:00 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试在现有论坛上创建一个新论坛.我可以非常轻松地创建新论坛,并从管理控制台查看它.问题是我需要它出现在前端以及用户.这是通过权限完成的. 我试图做的是将父论坛(公共)的权限复制到我创建的论坛.然而,论坛仍然没有出现在公众面前. 这是我的代码(请注
我正在尝试在现有论坛上创建一个新论坛.我可以非常轻松地创建新论坛,并从管理控制台查看它.问题是我需要它出现在前端以及用户.这是通过权限完成的.
我试图做的是将父论坛(公共)的权限复制到我创建的论坛.然而,论坛仍然没有出现在公众面前. 这是我的代码(请注意先前已经加载了phpBB包含文件): // $forum_name = name of the new forum // $parent_id = the forum which this is a child of function create_forum($forum_name,$parent_id) { global $phpbb_root_path,$phpEx,$user,$auth,$cache,$db,$config,$template,$table_prefix; $response = array(); $data = array( 'forum_name' => $forum_name,); // Forum info $sql = 'SELECT forum_id FROM ' . FORUMS_TABLE . ' WHERE ' . $db->sql_build_array('SELECT',$data); $result = $db->sql_query($sql); $forum_id = (int) $db->sql_fetchfield('forum_id'); $db->sql_freeresult($result); if ($forum_id) { $response['error'] = TRUE; $response['error_msg'] = 'FORUM_EXISTS'; $response['forum_id'] = $forum_id; } else { $forum_data = array( 'parent_id' => $parent_id,'left_id' => 0,'right_id' => 0,'forum_parents' => '','forum_name' => $data['forum_name'],'forum_desc' => '','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' => 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,); $sql = 'SELECT MAX(right_id) AS right_id FROM ' . FORUMS_TABLE; $result = $db->sql_query($sql); $row = $db->sql_fetchrow($result); $db->sql_freeresult($result); $forum_data['left_id'] = $row['right_id'] + 1; $forum_data['right_id'] = $row['right_id'] + 2; // And as last,a insert query $sql = 'INSERT INTO ' . FORUMS_TABLE . ' ' . $db->sql_build_array('INSERT',$forum_data); $db->sql_query($sql); $forum_data['forum_id'] = $db->sql_nextid(); // successful result $response['error'] = FALSE; $response['error_msg'] = ''; $response['forum_id'] = $forum_data['forum_id']; /* PERMISSIONS ----------------------------------------------- */ // copy permissions from parent forum $forum_perm_from = $parent_id; /////////////////////////// // COPY USER PERMISSIONS // /////////////////////////// // Copy permisisons from/to the acl users table (only forum_id gets changed) $sql = 'SELECT user_id,auth_option_id,auth_role_id,auth_setting FROM ' . ACL_USERS_TABLE . ' WHERE forum_id = ' . $forum_perm_from; $result = $db->sql_query($sql); $users_sql_ary = array(); while ($row = $db->sql_fetchrow($result)) { $users_sql_ary[] = array( 'user_id' => (int) $row['user_id'],'forum_id' => $forum_data['forum_id'],'auth_option_id' => (int) $row['auth_option_id'],'auth_role_id' => (int) $row['auth_role_id'],'auth_setting' => (int) $row['auth_setting'] ); } $db->sql_freeresult($result); //////////////////////////// // COPY GROUP PERMISSIONS // //////////////////////////// // Copy permisisons from/to the acl groups table (only forum_id gets changed) $sql = 'SELECT group_id,auth_setting FROM ' . ACL_GROUPS_TABLE . ' WHERE forum_id = ' . $forum_perm_from; $result = $db->sql_query($sql); $groups_sql_ary = array(); while ($row = $db->sql_fetchrow($result)) { $groups_sql_ary[] = array( 'group_id' => (int) $row['group_id'],'auth_setting' => (int) $row['auth_setting'] ); } $db->sql_freeresult($result); ////////////////////////////////// // INSERT NEW FORUM PERMISSIONS // ////////////////////////////////// $db->sql_multi_insert(ACL_USERS_TABLE,$users_sql_ary); $db->sql_multi_insert(ACL_GROUPS_TABLE,$groups_sql_ary); $auth->acl_clear_prefetch(); return $response; } } 解决方法function create_forum($forum_name,); /** /*Changed the code from here /*Pulled straight from acl_forums.php from line 973 to line 1002 /*Removed lines 980 -> 989 /*Changed $forum_data_sql['parent_id']; line 975 to $parent_id /*Changed $forum_data_sql on lines 1001,1002 to $forum_data **/ $sql = 'SELECT left_id,right_id,forum_type FROM ' . FORUMS_TABLE . ' WHERE forum_id = ' . $parent_id; $result = $db->sql_query($sql); $row = $db->sql_fetchrow($result); $db->sql_freeresult($result); $sql = 'UPDATE ' . FORUMS_TABLE . ' SET left_id = left_id + 2,right_id = right_id + 2 WHERE left_id > ' . $row['right_id']; $db->sql_query($sql); $sql = 'UPDATE ' . FORUMS_TABLE . ' SET right_id = right_id + 2 WHERE ' . $row['left_id'] . ' BETWEEN left_id AND right_id'; $db->sql_query($sql); $forum_data['left_id'] = $row['right_id']; $forum_data['right_id'] = $row['right_id'] + 1; // And as last,$groups_sql_ary); $auth->acl_clear_prefetch(); print_r($response); return $response; } } phpbbphpbb3phpbb3.0.10php (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |