www.gusucode.com > Carbon Forum PHP轻论坛系统 v3.6.5源码程序 > Carbon-Forum-3.6.5/manage.php

    <?php
require(__DIR__ . '/common.php');
require(__DIR__ . '/language/' . ForumLanguage . '/manage.php');
SetStyle('api', 'API');

$ID     = intval(Request('Post', 'ID', 0));
$Type   = intval(Request('Post', 'Type', 0)); //1:Topic,2:Post,3:User
$Action = Request('Post', 'Action', false);

switch ($Type) {
	//Topic
	case 1:
		$TopicInfo = $DB->row("SELECT * FROM " . $Prefix . "topics force index(PRI) Where ID=:ID", array(
			"ID" => $ID
		));
		if (!$TopicInfo) {
			AlertMsg('Topic Not Found', 'Topic Not Found');
		}
		switch ($Action) {
			//将主题移动至回收站
			case 'Delete':
				Auth(4);
				if ($TopicInfo['IsDel'] == 0) {
					$DB->query("UPDATE " . $Prefix . "topics SET IsDel = 1 Where ID=:ID", array(
						"ID" => $ID
					));
					//更新全站统计数据
					$NewConfig = array(
						"NumTopics" => $Config["NumTopics"] - 1
					);
					UpdateConfig($NewConfig);
					//更新用户自身统计数据
					$DB->query("UPDATE `" . $Prefix . "users` SET Topics=Topics-1 WHERE `ID`=?", array(
						$TopicInfo['UserID']
					));
					//更新标签统计
					if ($TopicInfo['Tags']) {
						$DB->query("UPDATE `" . $Prefix . "tags` SET TotalPosts=TotalPosts-1 WHERE `Name` in (?)", explode('|', $TopicInfo['Tags']));
					}
					$Message = $Lang['Deleted'];
				} else {
					AlertMsg('Bad Request', $Lang['Deleted']);
				}
				break;
			//从回收站恢复主题
			case 'Recover':
				Auth(4);
				if ($TopicInfo['IsDel'] == 1) {
					$DB->query("UPDATE " . $Prefix . "topics SET IsDel = 0 Where ID=:ID", array(
						"ID" => $ID
					));
					//更新全站统计数据
					$NewConfig = array(
						"NumTopics" => $Config["NumTopics"] + 1
					);
					UpdateConfig($NewConfig);
					//更新用户自身统计数据
					$DB->query("UPDATE `" . $Prefix . "users` SET Topics=Topics+1 WHERE `ID`=?", array(
						$TopicInfo['UserID']
					));
					//更新标签统计
					if ($TopicInfo['Tags']) {
						$DB->query("UPDATE `" . $Prefix . "tags` SET TotalPosts=TotalPosts+1 WHERE `Name` in (?)", explode('|', $TopicInfo['Tags']));
					}
					$Message = $Lang['Recovered'];
				} else {
					AlertMsg('Bad Request', $Lang['Failure_Recovery']);
				}
				break;
			//永久删除主题(需要先将主题移动至回收站)
			case 'PermanentlyDelete':
				Auth(5);
				if ($TopicInfo['IsDel'] == 1) {
					$DB->query('DELETE FROM `' . $Prefix . 'posttags` WHERE TopicID=?', array(
						$ID
					));
					$DB->query('DELETE FROM `' . $Prefix . 'posts` WHERE TopicID=?', array(
						$ID
					));
					$DB->query('DELETE FROM `' . $Prefix . 'topics` WHERE ID=?', array(
						$ID
					));
					$DB->query('DELETE FROM `' . $Prefix . 'notifications` WHERE TopicID=?', array(
						$ID
					));
					$Message = $Lang['Permanently_Deleted'];
				} else {
					AlertMsg('Bad Request', $Lang['Failure_Permanent_Deletion']);
				}
				break;
			//主题下沉(LastTime-7*86400)
			case 'Sink':
				Auth(4);
				$DB->query("UPDATE " . $Prefix . "topics SET LastTime = LastTime-604800 Where ID=:ID", array(
					"ID" => $ID
				));
				$Message = $Lang['Sunk'];
				break;
			//主题上浮(LastTime+7*86400)
			case 'Rise':
				Auth(4);
				$DB->query("UPDATE " . $Prefix . "topics SET LastTime = LastTime+604800 Where ID=:ID", array(
					"ID" => $ID
				));
				$Message = $Lang['Risen'];
				break;
			//主题锁定
			case 'Lock':
				Auth(4);
				$DB->query("UPDATE " . $Prefix . "topics SET IsLocked = :IsLocked Where ID=:ID", array(
					"ID" => $ID,
					"IsLocked" => $TopicInfo['IsLocked'] ? 0 : 1
				));
				$Message = $TopicInfo['IsLocked'] ? $Lang['Lock'] : $Lang['Unlock'];
				break;
			//删除标签
			case 'DeleteTag':
				Auth(4, $TopicInfo['UserID'], true);
				$TagName = Request('Post', 'TagName');
				if ((count(explode('|', $TopicInfo['Tags'])) - 1) >= 1 && $DB->query("DELETE FROM `" . $Prefix . "posttags` 
					WHERE TopicID = ? AND TagID = (SELECT ID FROM `" . $Prefix . "tags` WHERE Name = ?)", array(
					$ID,
					$TagName
				))) {
					// 更新标签统计数据
					$DB->query("UPDATE `" . $Prefix . "tags` SET TotalPosts=TotalPosts-1 WHERE `Name`=?", array(
						$TagName
					));
					// 更新Topics表里的Tags缓存
					$DB->query("UPDATE `" . $Prefix . "topics` SET Tags=? WHERE `ID`=?", array(
						implode('|', TagsDiff(explode('|', $TopicInfo['Tags']), array(
							$TagName
						))),
						$ID
					));
					$Message = 'Success';
				} else {
					AlertMsg('Bad Request', 'Bad Request');
				}
				break;
			//添加标签
			case 'AddTag':
				Auth(4, $TopicInfo['UserID'], true);
				$TagName = TagsDiff(array(
					Request('Post', 'TagName')
				), array());
				if ($TagName && !in_array($TagName[0], explode('|', $TopicInfo['Tags'])) && (count(explode('|', $TopicInfo['Tags'])) + 1) <= $Config["MaxTagsNum"]) {
					$TagName   = $TagName[0];
					$TagsExist = $DB->row("SELECT ID,Name FROM `" . $Prefix . "tags` WHERE `Name` = ?", array(
						$TagName
					));
					if (!$TagsExist) {
						$DB->query("INSERT INTO `" . $Prefix . "tags` 
							(`ID`, `Name`,`Followers`,`Icon`,`Description`, `IsEnabled`, `TotalPosts`, `MostRecentPostTime`, `DateCreated`) 
							VALUES (?,?,?,?,?,?,?,?,?)", array(
							null,
							htmlspecialchars(trim($TagName)),
							0,
							0,
							null,
							1,
							1,
							$TimeStamp,
							$TimeStamp
						));
						$TagID = $DB->lastInsertId();
						if ($TagID) {
							$DB->query("INSERT INTO `" . $Prefix . "posttags` 
								(`TagID`, `TopicID`, `PostID`) 
								VALUES (" . $TagID . ", " . $ID . ", (SELECT ID FROM `" . $Prefix . "posts` WHERE TopicID = " . $ID . " AND IsTopic = 1 LIMIT 1))");
							//更新全站统计数据
							$NewConfig = array(
								"NumTags" => $Config["NumTags"] + 1
							);
							UpdateConfig($NewConfig);
						}
					} else {
						if ($DB->query("INSERT INTO `" . $Prefix . "posttags` 
							(`TagID`, `TopicID`, `PostID`) 
							VALUES (" . $TagsExist['ID'] . ", " . $ID . ", (SELECT ID FROM `" . $Prefix . "posts` WHERE TopicID = " . $ID . " AND IsTopic = 1 LIMIT 1))")) {
							// 更新标签统计数据
							$DB->query("UPDATE `" . $Prefix . "tags` SET TotalPosts=TotalPosts+1 WHERE `Name`=?", array(
								$TagName
							));
						}
					}
					$DB->query("UPDATE `" . $Prefix . "topics` SET Tags=? WHERE `ID`=?", array(
						implode('|', $TopicInfo['Tags'] ? array_merge(explode('|', $TopicInfo['Tags']), array(
							$TagName
						)) : array(
							$TagName
						)),
						$ID
					));
					$Message = 'Success';
				} else {
					AlertMsg('Bad Request', 'Bad Request');
				}
				break;
			default:
				AlertMsg('Bad Request', 'Bad Request');
				break;
		}
		if ($MCache) {
			//清理首页内存缓存
			$MCache->delete(MemCachePrefix . 'Homepage');
			//清理主题缓存
			$MCache->delete(MemCachePrefix . 'Topic_' . $ID);
		}
		break;
	
	//Post
	case 2:
		$PostInfo = $DB->row("SELECT * FROM " . $Prefix . "posts force index(PRI) Where ID=:ID", array(
			"ID" => $ID
		));
		if (!$PostInfo) {
			AlertMsg('Post Not Found', 'Post Not Found');
		}
		switch ($Action) {
			case 'Delete':
				Auth(4);
				$DB->query('DELETE FROM `' . $Prefix . 'posts` WHERE ID=?', array(
					$ID
				));
				$DB->query('DELETE FROM `' . $Prefix . 'notifications` WHERE PostID=?', array(
					$ID
				));
				//更新全站统计数据
				$NewConfig = array(
					"NumPosts" => $Config["NumPosts"] - 1
				);
				UpdateConfig($NewConfig);
				//更新主题统计数据
				$DB->query("UPDATE `" . $Prefix . "topics` SET Replies=Replies-1 WHERE `ID`=?", array(
					$PostInfo['TopicID']
				));
				//更新用户自身统计数据
				$DB->query("UPDATE `" . $Prefix . "users` SET Replies=Replies-1 WHERE `ID`=?", array(
					$PostInfo['UserID']
				));
				$Message = $Lang['Permanently_Deleted'];
				break;
			//编辑帖子
			case 'Edit':
				//Auth(4, $PostInfo['UserID'], true);
				Auth(4);
				$Content = XssEscape(Request('Post', 'Content', $PostInfo['Content']));
				if ($Content == $PostInfo['Content'])
					AlertMsg($Lang['Do_Not_Modify'], $Lang['Do_Not_Modify']);
				if ($DB->query("UPDATE " . $Prefix . "posts SET Content = :Content Where ID=:ID", array(
					'ID' => $ID,
					'Content' => $Content
				))) {
					//标记附件所对应的帖子标签
					$DB->query("UPDATE `" . $Prefix . "upload` SET PostID=? WHERE `PostID`=0 and `UserName`=?", array(
						$ID,
						$CurUserName
					));
					$Message = $Lang['Edited'];
				} else {
					AlertMsg($Lang['Failure_Edit'], $Lang['Failure_Edit']);
				}
				break;
			default:
				AlertMsg('Bad Request', 'Bad Request');
				break;
		}
		break;
	
	//User
	case 3:
		$UserInfo = $DB->row("SELECT * FROM " . $Prefix . "users force index(PRI) Where ID=:ID", array(
			"ID" => $ID
		));
		switch ($Action) {
			case 'Delete':
				Auth(4);
				# code...
				break;
			//屏蔽用户
			case 'Block':
				Auth(4);
				$NewUserAccountStatus = $UserInfo['UserAccountStatus'] ? 0 : 1;
				if (UpdateUserInfo(array(
					'UserAccountStatus' => $NewUserAccountStatus
				), $ID)) {
					$Message = $NewUserAccountStatus ? $Lang['Block_User'] : $Lang['Unblock_User'];
				}
				break;
			//重置头像
			case 'ResetAvatar':
				Auth(4, $ID);
				if (extension_loaded('gd')) {
					require(__DIR__ . "/includes/MaterialDesign.Avatars.class.php");
					$Avatar = new MDAvtars(mb_substr($UserInfo['UserName'], 0, 1, "UTF-8"), 256);
					$Avatar->Save('upload/avatar/large/' . $ID . '.png', 256);
					$Avatar->Save('upload/avatar/middle/' . $ID . '.png', 48);
					$Avatar->Save('upload/avatar/small/' . $ID . '.png', 24);
					$Avatar->Free();
					$Message = $Lang['Reset_Avatar_Successfully'];
				} else {
					$Message = $Lang['Reset_Avatar_Successfully']; //Failure
				}
				
				break;
			default:
				AlertMsg('Bad Request', 'Bad Request');
				break;
		}
		break;
	//Follow or Favorite
	case 4:
		Auth(1);
		$Action      = intval($Action);
		//检查主题/标签/用户/帖子是否存在
		$IsFavorite  = $DB->single("SELECT ID FROM " . $Prefix . "favorites Where UserID=:UserID and Type=:Type and FavoriteID=:FavoriteID", array(
			'UserID' => $CurUserID,
			'Type' => $Action,
			'FavoriteID' => $ID
		)); //添加索引
		$MessageType = false; //false表示收藏,true表示关注
		$SQLAction   = intval($IsFavorite) ? '-1' : '+1';
		switch ($Action) {
			//1:Topic 2:Tag 3:User 4:Post 5:Blog
			case 1: //Topic
				$Title = $DB->single("SELECT Topic FROM " . $Prefix . "topics Where ID=:FavoriteID", array(
					'FavoriteID' => $ID
				));
				break;
			case 2: //Tag
				$Title       = $DB->single("SELECT Name FROM " . $Prefix . "tags Where ID=:FavoriteID", array(
					'FavoriteID' => $ID
				));
				$MessageType = true;
				break;
			case 3: //User
				$Title       = $DB->single("SELECT UserName FROM " . $Prefix . "users Where ID=:FavoriteID", array(
					'FavoriteID' => $ID
				));
				$MessageType = true;
				break;
			case 4: //Post
				$Title = $DB->single("SELECT Subject FROM " . $Prefix . "posts Where ID=:FavoriteID", array(
					'FavoriteID' => $ID
				));
				break;
			case 5: //Blog
				$Title = $DB->single("SELECT Subject FROM " . $Prefix . "blogs Where ID=:FavoriteID and ParentID=0", array(
					'FavoriteID' => $ID
				));
				break;
			default:
				AlertMsg('Bad Request', 'Bad Request');
				break;
		}
		if ($Title) {
			if (!$IsFavorite) {
				if (!$DB->query('INSERT INTO `' . $Prefix . 'favorites`(`ID`, `UserID`, `Category`, `Title`, `Type`, `FavoriteID`, `DateCreated`, `Description`) VALUES (?,?,?,?,?,?,?,?)', array(
					null,
					$CurUserID,
					'',
					$Title,
					$Action,
					$ID,
					$TimeStamp,
					''
				)))
					AlertMsg('Unknown Error', 'Unknown Error');
			} else {
				$DB->query('DELETE FROM `' . $Prefix . 'favorites` WHERE `UserID`=? and `Type`=? and `FavoriteID`=?', array(
					$CurUserID,
					$Action,
					$ID
				));
			}
			switch ($Action) {
				//1:Topic 2:Tag 3:User 4:Post 5:Blog
				case 1: //Topic
					$DB->query('UPDATE ' . $Prefix . 'topics SET Favorites = Favorites' . $SQLAction . ' Where ID=:FavoriteID', array(
						'FavoriteID' => $ID
					));
					$DB->query('UPDATE `' . $Prefix . 'users` SET NumFavTopics=NumFavTopics' . $SQLAction . ' WHERE `ID`=?', array(
						$CurUserID
					));
					break;
				case 2: //Tag
					$DB->query('UPDATE ' . $Prefix . 'tags SET Followers = Followers' . $SQLAction . ' Where ID=:FavoriteID', array(
						'FavoriteID' => $ID
					));
					$DB->query('UPDATE `' . $Prefix . 'users` SET NumFavTags=NumFavTags' . $SQLAction . ' WHERE `ID`=?', array(
						$CurUserID
					));
					break;
				case 3: //User
					$DB->query('UPDATE ' . $Prefix . 'users SET Followers = Followers' . $SQLAction . ' Where ID=:FavoriteID', array(
						'FavoriteID' => $ID
					));
					$DB->query('UPDATE `' . $Prefix . 'users` SET NumFavUsers=NumFavUsers' . $SQLAction . ' WHERE `ID`=?', array(
						$CurUserID
					));
					break;
				case 4: //Post
					break;
				case 5: //Blog
					break;
				default:
					AlertMsg('Bad Request', 'Bad Request');
					break;
			}
			//清理内存缓存
			if ($MCache) {
				$MCache->delete(MemCachePrefix . 'UserInfo_' . $CurUserID);
			}
			$Message = $IsFavorite ? ($MessageType ? $Lang['Follow'] : $Lang['Collect']) : ($MessageType ? $Lang['Unfollow'] : $Lang['Unsubscribe']);
			//$FavoriteID = $DB->lastInsertId();
		} else {
			AlertMsg('404 Not Found', '404 Not Found');
		}
		break;
	//Tag
	case 5:
		$TagInfo = $DB->row("SELECT * FROM " . $Prefix . "tags Where ID=:ID", array(
			"ID" => $ID
		));
		if (!$TagInfo) {
			AlertMsg('Tag Not Found', 'Tag Not Found');
		}
		switch ($Action) {
			// 修改标签描述
			case 'EditDescription':
				Auth(3);
				$Content = CharCV(Request('Post', 'Content', $TagInfo['Description']));
				if ($Content == $TagInfo['Description'])
					AlertMsg($Lang['Do_Not_Modify'], $Lang['Do_Not_Modify']);
				if($DB->query('UPDATE ' . $Prefix . 'tags SET Description = :Content WHERE ID=:TagID', 
					array(
						'TagID' => $ID,
						'Content' => $Content
					)
				)) {
					$Message = $Lang['Edited'];
				} else {
					AlertMsg($Lang['Failure_Edit'], $Lang['Failure_Edit']);
				}
				break;
			// 修改标签图标
			case 'UploadIcon':
				Auth(3);
				if ($_FILES['TagIcon']['size'] && $_FILES['TagIcon']['size'] < 1048576) {
					require(__DIR__ . "/includes/ImageResize.class.php");
					$UploadIcon  = new ImageResize('PostField', 'TagIcon');
					$LUploadResult = $UploadIcon->Resize(256, 'upload/tag/large/' . $ID . '.png', 80);
					$MUploadResult = $UploadIcon->Resize(48, 'upload/tag/middle/' . $ID . '.png', 90);
					$SUploadResult = $UploadIcon->Resize(24, 'upload/tag/small/' . $ID . '.png', 90);
					
					if ($LUploadResult && $MUploadResult && $SUploadResult) {
						$SetTagIconStatus = $TagInfo['Icon'] === 0?
						$DB->query('UPDATE ' . $Prefix . 'tags SET Icon = 1 Where ID=:TagID', 
							array('TagID' => $ID))
						:true;
						$Message = $SetTagIconStatus ? $Lang['Icon_Upload_Success'] : $Lang['Icon_Upload_Failure'];
					} else {
						$Message = $Lang['Icon_Upload_Failure'];
					}
				} else {
					$Message = $Lang['Icon_Is_Oversize'];
				}
				break;
			// 禁用/启用该标签
			case 'SwitchStatus':
				Auth(4);
				if($DB->query('UPDATE ' . $Prefix . 'tags SET IsEnabled = :IsEnabled WHERE ID=:TagID', 
					array(
						'TagID' => $ID,
						'IsEnabled' => $TagInfo['IsEnabled']?0:1 //Bool -> Int
					)
				)){
					$Message = $TagInfo['IsEnabled']?$Lang['Enable_Tag']:$Lang['Disable_Tag'];
				}else {
					AlertMsg('Bad Request', 'Bad Request');
				}
				break;
			default:
				AlertMsg('Bad Request', 'Bad Request');
				break;

		}
		break;
	//Error
	default:
		AlertMsg('Bad Request', 'Bad Request');
		break;
}
$PageTitle   = 'Manage';
$ContentFile = $TemplatePath . 'manage.php';
include($TemplatePath . 'layout.php');