⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 acp_forums.php

📁 这些都是我以前学习是用到的源码
💻 PHP
📖 第 1 页 / 共 4 页
字号:
		{			// no forum_id means we're creating a new forum			unset($forum_data_sql['type_action']);			if ($forum_data_sql['parent_id'])			{				$sql = 'SELECT left_id, right_id					FROM ' . FORUMS_TABLE . '					WHERE forum_id = ' . $forum_data_sql['parent_id'];				$result = $db->sql_query($sql);				$row = $db->sql_fetchrow($result);				$db->sql_freeresult($result);				if (!$row)				{					trigger_error($user->lang['PARENT_NOT_EXIST'] . adm_back_link($this->u_action . '&amp;' . $this->parent_id), E_USER_WARNING);				}				$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_sql['left_id'] = $row['right_id'];				$forum_data_sql['right_id'] = $row['right_id'] + 1;			}			else			{				$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_sql['left_id'] = $row['right_id'] + 1;				$forum_data_sql['right_id'] = $row['right_id'] + 2;			}			$sql = 'INSERT INTO ' . FORUMS_TABLE . ' ' . $db->sql_build_array('INSERT', $forum_data_sql);			$db->sql_query($sql);			$forum_data['forum_id'] = $db->sql_nextid();			add_log('admin', 'LOG_FORUM_ADD', $forum_data['forum_name']);		}		else		{			$row = $this->get_forum_info($forum_data_sql['forum_id']);			if ($row['forum_type'] == FORUM_POST && $row['forum_type'] != $forum_data_sql['forum_type'])			{				// we're turning a postable forum into a non-postable forum				if ($forum_data_sql['type_action'] == 'move')				{					$to_forum_id = request_var('to_forum_id', 0);					if ($to_forum_id)					{						$errors = $this->move_forum_content($forum_data_sql['forum_id'], $to_forum_id);					}					else					{						return array($user->lang['NO_DESTINATION_FORUM']);					}				}				else if ($forum_data_sql['type_action'] == 'delete')				{					$errors = $this->delete_forum_content($forum_data_sql['forum_id']);				}				else				{					return array($user->lang['NO_FORUM_ACTION']);				}				$forum_data_sql['forum_posts'] = $forum_data_sql['forum_topics'] = $forum_data_sql['forum_topics_real'] = $forum_data_sql['forum_last_post_id'] = $forum_data_sql['forum_last_poster_id'] = $forum_data_sql['forum_last_post_time'] = 0;				$forum_data_sql['forum_last_poster_name'] = $forum_data_sql['forum_last_poster_colour'] = '';			}			else if ($row['forum_type'] == FORUM_CAT && $forum_data_sql['forum_type'] == FORUM_LINK)			{				// Has subforums?				if ($row['right_id'] - $row['left_id'] > 1)				{					// We are turning a category into a link - but need to decide what to do with the subforums.					$action_subforums = request_var('action_subforums', '');					$subforums_to_id = request_var('subforums_to_id', 0);					if ($action_subforums == 'delete')					{						$log_action_forums = 'FORUMS';						$rows = get_forum_branch($row['forum_id'], 'children', 'descending', false);						foreach ($rows as $_row)						{							// Do not remove the forum id we are about to change. ;)							if ($_row['forum_id'] == $row['forum_id'])							{								continue;							}							$forum_ids[] = $_row['forum_id'];							$errors = array_merge($errors, $this->delete_forum_content($_row['forum_id']));						}						if (sizeof($errors))						{							return $errors;						}						if (sizeof($forum_ids))						{							$sql = 'DELETE FROM ' . FORUMS_TABLE . '								WHERE ' . $db->sql_in_set('forum_id', $forum_ids);							$db->sql_query($sql);							$sql = 'DELETE FROM ' . ACL_GROUPS_TABLE . '								WHERE ' . $db->sql_in_set('forum_id', $forum_ids);							$db->sql_query($sql);							$sql = 'DELETE FROM ' . ACL_USERS_TABLE . '								WHERE ' . $db->sql_in_set('forum_id', $forum_ids);							$db->sql_query($sql);							// Delete forum ids from extension groups table							$sql = 'SELECT group_id, allowed_forums 								FROM ' . EXTENSION_GROUPS_TABLE;							$result = $db->sql_query($sql);							while ($_row = $db->sql_fetchrow($result))							{								if (!$_row['allowed_forums'])								{									continue;								}								$allowed_forums = unserialize(trim($_row['allowed_forums']));								$allowed_forums = array_diff($allowed_forums, $forum_ids);								$sql = 'UPDATE ' . EXTENSION_GROUPS_TABLE . " 									SET allowed_forums = '" . ((sizeof($allowed_forums)) ? serialize($allowed_forums) : '') . "'									WHERE group_id = {$_row['group_id']}";								$db->sql_query($sql);							}							$db->sql_freeresult($result);							$cache->destroy('_extensions');						}					}					else if ($action_subforums == 'move')					{						if (!$subforums_to_id)						{							return array($user->lang['NO_DESTINATION_FORUM']);						}						$log_action_forums = 'MOVE_FORUMS';						$sql = 'SELECT forum_name 							FROM ' . FORUMS_TABLE . '							WHERE forum_id = ' . $subforums_to_id;						$result = $db->sql_query($sql);						$_row = $db->sql_fetchrow($result);						$db->sql_freeresult($result);						if (!$_row)						{							return array($user->lang['NO_FORUM']);						}						$subforums_to_name = $_row['forum_name'];						$sql = 'SELECT forum_id							FROM ' . FORUMS_TABLE . "							WHERE parent_id = {$row['forum_id']}";						$result = $db->sql_query($sql);						while ($_row = $db->sql_fetchrow($result))						{							$this->move_forum($_row['forum_id'], $subforums_to_id);						}						$db->sql_freeresult($result);						$sql = 'UPDATE ' . FORUMS_TABLE . "							SET parent_id = $subforums_to_id							WHERE parent_id = {$row['forum_id']}";						$db->sql_query($sql);					}					// Adjust the left/right id					$sql = 'UPDATE ' . FORUMS_TABLE . '						SET right_id = left_id + 1						WHERE forum_id = ' . $row['forum_id'];					$db->sql_query($sql);				}			}			if (sizeof($errors))			{				return $errors;			}			if ($row['parent_id'] != $forum_data_sql['parent_id'])			{				$errors = $this->move_forum($forum_data_sql['forum_id'], $forum_data_sql['parent_id']);			}			if (sizeof($errors))			{				return $errors;			}			unset($forum_data_sql['type_action']);			if ($row['forum_name'] != $forum_data_sql['forum_name'])			{				// the forum name has changed, clear the parents list of child forums				$sql = 'UPDATE ' . FORUMS_TABLE . "					SET forum_parents = ''					WHERE left_id > " . $row['left_id'] . '						AND right_id < ' . $row['right_id'];				$db->sql_query($sql);			}			// Setting the forum id to the forum id is not really received well by some dbs. ;)			$forum_id = $forum_data_sql['forum_id'];			unset($forum_data_sql['forum_id']);			$sql = 'UPDATE ' . FORUMS_TABLE . '				SET ' . $db->sql_build_array('UPDATE', $forum_data_sql) . '				WHERE forum_id = ' . $forum_id;			$db->sql_query($sql);			// Add it back			$forum_data['forum_id'] = $forum_id;			add_log('admin', 'LOG_FORUM_EDIT', $forum_data['forum_name']);		}		return $errors;	}	/**	* Move forum	*/	function move_forum($from_id, $to_id)	{		global $db;		$moved_forums = get_forum_branch($from_id, 'children', 'descending');		$from_data = $moved_forums[0];		$diff = sizeof($moved_forums) * 2;		$moved_ids = array();		for ($i = 0; $i < sizeof($moved_forums); ++$i)		{			$moved_ids[] = $moved_forums[$i]['forum_id'];		}		// Resync parents		$sql = 'UPDATE ' . FORUMS_TABLE . "			SET right_id = right_id - $diff, forum_parents = ''			WHERE left_id < " . $from_data['right_id'] . "				AND right_id > " . $from_data['right_id'];		$db->sql_query($sql);		// Resync righthand side of tree		$sql = 'UPDATE ' . FORUMS_TABLE . "			SET left_id = left_id - $diff, right_id = right_id - $diff, forum_parents = ''			WHERE left_id > " . $from_data['right_id'];		$db->sql_query($sql);		if ($to_id > 0)		{			$to_data = $this->get_forum_info($to_id);			// Resync new parents			$sql = 'UPDATE ' . FORUMS_TABLE . "				SET right_id = right_id + $diff, forum_parents = ''				WHERE " . $to_data['right_id'] . ' BETWEEN left_id AND right_id					AND ' . $db->sql_in_set('forum_id', $moved_ids, true);			$db->sql_query($sql);			// Resync the righthand side of the tree			$sql = 'UPDATE ' . FORUMS_TABLE . "				SET left_id = left_id + $diff, right_id = right_id + $diff, forum_parents = ''				WHERE left_id > " . $to_data['right_id'] . '					AND ' . $db->sql_in_set('forum_id', $moved_ids, true);			$db->sql_query($sql);			// Resync moved branch			$to_data['right_id'] += $diff;			if ($to_data['right_id'] > $from_data['right_id'])			{				$diff = '+ ' . ($to_data['right_id'] - $from_data['right_id'] - 1);			}			else			{				$diff = '- ' . abs($to_data['right_id'] - $from_data['right_id'] - 1);			}		}		else		{			$sql = 'SELECT MAX(right_id) AS right_id				FROM ' . FORUMS_TABLE . '				WHERE ' . $db->sql_in_set('forum_id', $moved_ids, true);			$result = $db->sql_query($sql);			$row = $db->sql_fetchrow($result);			$db->sql_freeresult($result);			$diff = '+ ' . ($row['right_id'] - $from_data['left_id'] + 1);		}		$sql = 'UPDATE ' . FORUMS_TABLE . "			SET left_id = left_id $diff, right_id = right_id $diff, forum_parents = ''			WHERE " . $db->sql_in_set('forum_id', $moved_ids);		$db->sql_query($sql);	}	/**	* Move forum content from one to another forum	*/	function move_forum_content($from_id, $to_id, $sync = true)	{		global $db;		$table_ary = array(LOG_TABLE, POSTS_TABLE, TOPICS_TABLE, DRAFTS_TABLE, TOPICS_TRACK_TABLE);		foreach ($table_ary as $table)		{			$sql = "UPDATE $table				SET forum_id = $to_id				WHERE forum_id = $from_id";			$db->sql_query($sql);		}		unset($table_ary);		$table_ary = array(FORUMS_ACCESS_TABLE, FORUMS_TRACK_TABLE, FORUMS_WATCH_TABLE, MODERATOR_CACHE_TABLE);		foreach ($table_ary as $table)		{			$sql = "DELETE FROM $table				WHERE forum_id = $from_id";			$db->sql_query($sql);		}		if ($sync)		{			// Delete ghost topics that link back to the same forum then resync counters			sync('topic_moved');			sync('forum', 'forum_id', $to_id);		}		return array();	}	/**	* Remove complete forum	*/	function delete_forum($forum_id, $action_posts = 'delete', $action_subforums = 'delete', $posts_to_id = 0, $subforums_to_id = 0)	{		global $db, $user, $cache;		$forum_data = $this->get_forum_info($forum_id);		$errors = array();		$log_action_posts = $log_action_forums = $posts_to_name = $subforums_to_name = '';		$forum_ids = array($forum_id);		if ($action_posts == 'delete')		{			$log_action_posts = 'POSTS';			$errors = array_merge($errors, $this->delete_forum_content($forum_id));		}		else if ($action_posts == 'move')		{			if (!$posts_to_id)			{				$errors[] = $user->lang['NO_DESTINATION_FORUM'];			}			else			{				$log_action_posts = 'MOVE_POSTS';				$sql = 'SELECT forum_name 					FROM ' . FORUMS_TABLE . '					WHERE forum_id = ' . $posts_to_id;				$result = $db->sql_query($sql);				$row = $db->sql_fetchrow($result);				$db->sql_freeresult($result);				if (!$row)				{					$errors[] = $user->lang['NO_FORUM'];				}				else				{					$posts_to_name = $row['forum_name'];					$errors = array_merge($errors, $this->move_forum_content($forum_id, $posts_to_id));				}			}		}		if (sizeof($errors))		{			return $errors;		}		if ($action_subforums == 'delete')		{			$log_action_forums = 'FORUMS';			$rows = get_forum_branch($forum_id, 'children', 'descending', false);			foreach ($rows as $row)			{				$forum_ids[] = $row['forum_id'];				$errors = array_merge($errors, $this->delete_forum_content($row['forum_id']));			}			if (sizeof($errors))			{				return $errors;			}			$diff = sizeof($forum_ids) * 2;			$sql = 'DELETE FROM ' . FORUMS_TABLE . '				WHERE ' . $db->sql_in_set('forum_id', $forum_ids);			$db->sql_query($sql);			$sql = 'DELETE FROM ' . ACL_GROUPS_TABLE . '				WHERE ' . $db->sql_in_set('forum_id', $forum_ids);			$db->sql_query($sql);			$sql = 'DELETE FROM ' . ACL_USERS_TABLE . '				WHERE ' . $db->sql_in_set('forum_id', $forum_ids);			$db->sql_query($sql);		}		else if ($action_subforums == 'move')		{			if (!$subforums_to_id)			{				$errors[] = $user->lang['NO_DESTINATION_FORUM'];			}			else

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -