68xi

   最近想打造一个社区门户站点,所以写了这个入库接口,可以对接数据入库。

    

<?php
/*
 * Discuz x3.2 门户免登陆发布接口
 * 2018-08-10
 * Copyright 68xi.Ltd
 * Author: 68xi
 *
 * 获取栏目列表: /jiekou_portal.php?get_cat=true&password=PWD
 *
 * 发布参数: (说明: 参数前面带 "*" 的为必填参数)
 *     *uid: 发布用户ID, 可单个, 也可多个, 多个发布用户ID之间请使用逗号(,)分割 (当填写多个用户ID, 接口会随机使用其中一个, 发布用户ID必须是系统已存在的用户ID)
 *     *catid: 栏目ID
 *     *title: 标题
 *     *content: 内容
 *     dateline: 发布时间, 默认当前时间, 格式: 2013-11-15 15:30:11
 *     summary: 内容摘要, 此参数为空时, 将使用discuz内部提取正文方式来获取摘要
 *     author: 原作者
 *     from: 来源
 *     fromurl: 来源网址
 *     viewnum: 文章阅读数字, 默认1
 *     setconver: 提取内容里的第一张图片为封面, 无论是本地图片还是网络图片, 都会尝试提取
*/

header(\'Content-type:text/html;charset=UTF-8\');

//接口密码, 请保持与采集器上设置的密码一致, 为了网站安全, 强烈建议修改此值!!!
define(\'PASSWORD\', \'123456\');

//调试模式, 上线后务必设置成false!!!
define(\'DEBUG\', false);

//输出信息并退出
function showMsg($msg) {
	echo $msg;
	exit;
}

//打印变量信息 - 用于DEBUG
function dd($data, $exit = false) {
	echo \'<pre>\';
	print_r($data);
	echo \'</pre>\';
	if($exit) exit;
}

//检测接口密码
if(!isset($_GET[\'password\']) || $_GET[\'password\'] != PASSWORD) showMsg(\'接口密码不正确!\');

/******************* discuz头文件 开始 ********************/

#/portal.php
define(\'APPTYPEID\', 4);
define(\'CURSCRIPT\', \'portal\');

require \'./source/class/class_core.php\';
$discuz = C::app();

$cachelist = array(\'userapp\', \'portalcategory\', \'diytemplatenameportal\');
$discuz->cachelist = $cachelist;
$discuz->init();

require DISCUZ_ROOT.\'./source/function/function_home.php\';
require DISCUZ_ROOT.\'./source/function/function_portal.php\';

define(\'CURMODULE\', \'portalcp\');

#/souce/module/portal/portalportalcp.php
$ac = \'article\';

require_once libfile(\'function/portalcp\');

#/source/include/portalcp/portalcp_article.php

/******************* discuz头文件 结束 ********************/

$app = new App();

class App {
	protected $global; //equal $_G
	protected $uid; //发布用户ID

	//构造函数
	public function __construct() {
		global $_G;
		$this->global = &$_G;

		//当前时间
		define(\'DATE_TIME\', date(\'Y-m-d H:i:s\'));

		if(isset($_GET[\'get_cat\']) && $_GET[\'get_cat\'] == \'true\') {
			$this->get_cat(); //获取栏目
		} else {
			$this->publish_content(); //发布内容
		}
	}

	//获取栏目
	protected function get_cat() {
		$cat = $this->get_cat_list();
		if(empty($cat)) showMsg(\'当前网站栏目为空, 请添加门户栏目后再重试\');

		$catStr = \'\';
		foreach($cat as $key => $value) {
			$catStr .= \'<option value="\'. $value[\'catid\'] .\'">\'. $value[\'catname\'] .\'</option>\';
		}
		$catStr = \'<select>\'. $catStr .\'</select>\';
		showMsg($catStr);
	}

	//获取栏目列表
	protected function get_cat_list() {
		//优化提示: 如果您网站的门户栏目在发布数据期间不会变动, 可以注释下面一行代码, 来加速接口执行速度
		loadcache(\'portalcategory\');
		return $this->global[\'cache\'][\'portalcategory\'];
	}

	//设置发布用户ID
	private function set_uid() {
		if(empty($_POST[\'uid\'])) showMsg(\'发布用户ID不能为空\');
		$uidstr = str_replace(\' \', \'\', $_POST[\'uid\']);
		if(strpos($uidstr, \',\')) { //多发布用户ID
			$uid_list = explode(\',\', $uidstr);
			shuffle($uid_list);
			$uid = intval(array_shift($uid_list));
		} else { //单发布用户ID
			$uid = intval($uidstr);
		}

		if($uid == 0) showMsg(\'发布用户ID格式不正确\');

		$info = C::t(\'common_member\')->fetch($uid);
		if(empty($info)) showMsg(\'不存在该用户 (uid: \'. $uid .\')\');

		$this->uid = $uid;

		$this->global[\'uid\'] = $uid;
		$this->global[\'member\'][\'uid\'] = $uid;
		$this->global[\'username\'] = $info[\'username\'];
		$this->global[\'session\'][\'uid\'] = $uid;

		//绕过discuz权限检测
		$this->global[\'group\'][\'allowmanagearticle\'] = true;
		$this->global[\'group\'][\'allowpostarticlemod\'] = true;
	}

	//将一些POST参数赋值至GET中, 因为discuz是通过$_GET来获取这些参数
	private function post2get() {
		foreach(array(\'author\', \'url\', \'from\', \'fromurl\', \'dateline\', \'highlight_style\') as $key) {
			$_GET[$key] = isset($_POST[$key]) && $_POST[$key] ? $_POST[$key] : \'\';
		}
	}

	//发布内容前的初始化
	private function init() {
		//构造以下POST参数仅用于程序不抛错误提示
		$_POST[\'id\'] = \'\';
		$_POST[\'url\'] = \'\';
		$_POST[\'raids\'] = \'\'; //相关文章ID
		$_POST[\'tag\'] = \'\'; //聚合标签
		$_POST[\'pagetitle\'] = \'\';
		$_POST[\'htmlname\'] = \'\';
		$_POST[\'highlight_style\'] = \'\';
		$_POST[\'pagetitle\'] = \'\';
		$_POST[\'attach_ids\'] = \'\';
		$_POST[\'highlight_style\'] = array(
			\'#000\',
			0,
			0,
			0,
		);

		//设置文章阅读数
		$_POST[\'viewnum\'] = isset($_POST[\'viewnum\']) && $_POST[\'viewnum\'] ? intval($_POST[\'viewnum\']) : 1;
	}

	//处理上传图片
	private function process_attach() {
		global $_G;

		if($_G[\'uid\']) {
			$_G[\'member\'] = getuserbyuid($_G[\'uid\']);
		}
		$_G[\'groupid\'] = $_G[\'member\'][\'groupid\'];
		loadcache(\'usergroup_\'.$_G[\'member\'][\'groupid\']);
		$_G[\'group\'] = $_G[\'cache\'][\'usergroup_\'.$_G[\'member\'][\'groupid\']];

		$aid = 0;
		$catid = intval($_POST[\'catid\']);

		$msg = \'\';
		$errorcode = 0;
		require_once libfile(\'function/portalcp\');
		if($aid) {
			$article = C::t(\'portal_article_title\')->fetch($aid);
			if(!$article) {
				$errorcode = 1;
			}

			if(check_articleperm($catid, $aid, $article, false, true) !== true) {
				$errorcode = 2;
			}

		} else {
			if(0 && check_articleperm($catid, $aid, null, false, true) !== true) {
				$errorcode = 3;
			}
		}

		$upload = new discuz_upload();

		$_FILES["Filedata"][\'name\'] = addslashes(diconv(urldecode($_FILES["Filedata"][\'name\']), \'UTF-8\'));
		$upload->init($_FILES[\'Filedata\'], \'portal\');
		$attach = $upload->attach;
		if(!$upload->error()) {
			$upload->save();
		}
		if($upload->error()) {
			$errorcode = 4;
		}

		if(!$errorcode) {
			if($attach[\'isimage\'] && empty($_G[\'setting\'][\'portalarticleimgthumbclosed\'])) {
				require_once libfile(\'class/image\');
				$image = new image();
				$thumbimgwidth = $_G[\'setting\'][\'portalarticleimgthumbwidth\'] ? $_G[\'setting\'][\'portalarticleimgthumbwidth\'] : 300;
				$thumbimgheight = $_G[\'setting\'][\'portalarticleimgthumbheight\'] ? $_G[\'setting\'][\'portalarticleimgthumbheight\'] : 300;
				$attach[\'thumb\'] = $image->Thumb($attach[\'target\'], \'\', $thumbimgwidth, $thumbimgheight, 2);
				$image->Watermark($attach[\'target\'], \'\', \'portal\');
			}

			if(0 && getglobal(\'setting/ftp/on\') && ((!$_G[\'setting\'][\'ftp\'][\'allowedexts\'] && !$_G[\'setting\'][\'ftp\'][\'disallowedexts\']) || ($_G[\'setting\'][\'ftp\'][\'allowedexts\'] && in_array($attach[\'ext\'], $_G[\'setting\'][\'ftp\'][\'allowedexts\'])) || ($_G[\'setting\'][\'ftp\'][\'disallowedexts\'] && !in_array($attach[\'ext\'], $_G[\'setting\'][\'ftp\'][\'disallowedexts\']))) && (!$_G[\'setting\'][\'ftp\'][\'minsize\'] || $attach[\'size\'] >= $_G[\'setting\'][\'ftp\'][\'minsize\'] * 1024)) {
				if(ftpcmd(\'upload\', \'portal/\'.$attach[\'attachment\']) && (!$attach[\'thumb\'] || ftpcmd(\'upload\', \'portal/\'.getimgthumbname($attach[\'attachment\'])))) {
					@unlink($_G[\'setting\'][\'attachdir\'].\'/portal/\'.$attach[\'attachment\']);
					@unlink($_G[\'setting\'][\'attachdir\'].\'/portal/\'.getimgthumbname($attach[\'attachment\']));
					$attach[\'remote\'] = 1;
				} else {
					if(getglobal(\'setting/ftp/mirror\')) {
						@unlink($attach[\'target\']);
						@unlink(getimgthumbname($attach[\'target\']));
						$errorcode = 5;
					}
				}
			}

			$setarr = array(
				\'uid\' => $_G[\'uid\'],
				\'filename\' => $attach[\'name\'],
				\'attachment\' => $attach[\'attachment\'],
				\'filesize\' => $attach[\'size\'],
				\'isimage\' => $attach[\'isimage\'],
				\'thumb\' => $attach[\'thumb\'],
				\'remote\' => $attach[\'remote\'],
				\'filetype\' => $attach[\'extension\'],
				\'dateline\' => $_G[\'timestamp\'],
				\'aid\' => $aid
			);
			$setarr[\'attachid\'] = C::t(\'portal_attachment\')->insert($setarr, true);
			if($attach[\'isimage\']) {
				require_once libfile(\'function/home\');
				$smallimg = pic_get($attach[\'attachment\'], \'portal\', $attach[\'thumb\'], $attach[\'remote\']);
				$bigimg = pic_get($attach[\'attachment\'], \'portal\', 0, $attach[\'remote\']);
				$coverstr = addslashes(serialize(array(\'pic\'=>\'portal/\'.$attach[\'attachment\'], \'thumb\'=>$attach[\'thumb\'], \'remote\'=>$attach[\'remote\'])));
				$returnstr = "{\"aid\":$setarr[attachid], \"isimage\":$attach[isimage], \"smallimg\":\"$smallimg\", \"bigimg\":\"$bigimg\", \"errorcode\":$errorcode, \"cover\":\"$coverstr\"}";
				return json_decode($returnstr, true);
				exit();
			} else {
				$fileurl = \'portal.php?mod=attachment&id=\'.$attach[\'attachid\'];
				echo "{\"aid\":$setarr[attachid], \"isimage\":$attach[isimage], \"file\":\"$fileurl\", \"errorcode\":$errorcode}";
				exit();
			}
		} else {
			echo "{\"aid\":0, \"errorcode\":$errorcode}";
		}
	}

	//获取网络图片, 用于封面图片
	private function downloadremotefile($imageurl) {
		global $_G;
		$aid = 0;

		$upload = new discuz_upload();

		$attach[\'ext\'] = $upload->fileext($imageurl);
		if(!$upload->is_image_ext($attach[\'ext\'])) return;

		$content = dfsockopen($imageurl);

		if(empty($content)) continue;
		$temp = explode(\'/\', $imageurl);

		$attach[\'name\'] =  trim($temp[count($temp)-1]);
		$attach[\'thumb\'] = \'\';

		$attach[\'isimage\'] = $upload -> is_image_ext($attach[\'ext\']);
		$attach[\'extension\'] = $upload -> get_target_extension($attach[\'ext\']);
		$attach[\'attachdir\'] = $upload -> get_target_dir(\'portal\');
		$attach[\'attachment\'] = $attach[\'attachdir\'] . $upload->get_target_filename(\'portal\').\'.\'.$attach[\'extension\'];
		$attach[\'target\'] = getglobal(\'setting/attachdir\').\'./portal/\'.$attach[\'attachment\'];

		if(!@$fp = fopen($attach[\'target\'], \'wb\')) {
			return;
		} else {
			flock($fp, 2);
			fwrite($fp, $content);
			fclose($fp);
		}
		if(!$upload->get_image_info($attach[\'target\'])) {
			@unlink($attach[\'target\']);
			return;
		}
		$attach[\'size\'] = filesize($attach[\'target\']);
		$attach = daddslashes($attach);

		if(!$attach) return;

		if($attach[\'isimage\'] || empty($_G[\'setting\'][\'portalarticleimgthumbclosed\'])) {
			require_once libfile(\'class/image\');
			$image = new image();
			$thumbimgwidth = $_G[\'setting\'][\'portalarticleimgthumbwidth\'] ? $_G[\'setting\'][\'portalarticleimgthumbwidth\'] : 300;
			$thumbimgheight = $_G[\'setting\'][\'portalarticleimgthumbheight\'] ? $_G[\'setting\'][\'portalarticleimgthumbheight\'] : 300;
			$attach[\'thumb\'] = $image->Thumb($attach[\'target\'], \'\', $thumbimgwidth, $thumbimgheight, 2);
			$image->Watermark($attach[\'target\'], \'\', \'portal\');
		}

		$setarr = array(
			\'uid\' => $_G[\'uid\'],
			\'filename\' => $attach[\'name\'],
			\'attachment\' => $attach[\'attachment\'],
			\'filesize\' => $attach[\'size\'],
			\'isimage\' => $attach[\'isimage\'],
			\'thumb\' => $attach[\'thumb\'],
			\'remote\' => $attach[\'remote\'],
			\'filetype\' => $attach[\'extension\'],
			\'dateline\' => $_G[\'timestamp\'],
			\'aid\' => $aid
		);
		$setarr[\'attachid\'] = C::t(\'portal_attachment\')->insert($setarr, true);

		if($attach[\'isimage\']) {
			$errorcode = 0;
			require_once libfile(\'function/home\');
			$smallimg = pic_get($attach[\'attachment\'], \'portal\', $attach[\'thumb\'], $attach[\'remote\']);
			$bigimg = pic_get($attach[\'attachment\'], \'portal\', 0, $attach[\'remote\']);
			$coverstr = addslashes(serialize(array(\'pic\'=>\'portal/\'.$attach[\'attachment\'], \'thumb\'=>$attach[\'thumb\'], \'remote\'=>$attach[\'remote\'])));
			$returnstr = "{\"aid\":$setarr[attachid], \"isimage\":$attach[isimage], \"smallimg\":\"$smallimg\", \"bigimg\":\"$bigimg\", \"errorcode\":$errorcode, \"cover\":\"$coverstr\"}";
			$return = json_decode($returnstr, true);
			return $return;
		}
		return;
	}

	//发布内容
	protected function publish_content() {
		if(DEBUG) {
			//调试模式下显示所有级别错误提示
			error_reporting(E_ALL);
			if(0) {
				//构造发布参数, 用于页面调试
				$_POST = array(
					\'uid\' => \'1\',
					\'catid\' => \'1\',
					\'title\' => \'测试标题 - \'. DATE_TIME,
					\'content\' => \'测试内容 - \'. DATE_TIME,
					\'summary\' => \'测试摘要~ - \'. DATE_TIME,
					\'dateline\' => DATE_TIME,
					\'author\' => \'清顽于世\',
					\'from\' => \'新浪网\',
					\'fromurl\' => \'http://www.baidu.com/\',
					\'viewnum\' => \'15\',
					\'setconver\' => \'1\',
				);
			}
		}

		//图片上传
		$upload = array();
		if(!empty($_FILES) && !empty($_FILES[\'attach_0\'][\'name\'])) {
			$files = $_FILES;
			foreach ($files as $key => $value) {
				$_FILES[\'Filedata\'] = $value;
				$attach = $this->process_attach();

				//处理内容里的图片地址
				if(!empty($attach)) {
					$upload[] = $attach;
					$_POST[\'content\'] = preg_replace(\'#<img src="(\'. preg_quote($value[\'name\']) .\')" />#iUs\', \'<img src="\'. $attach[\'bigimg\'] .\'" />\', $_POST[\'content\']);
				}
			}
		}

		////提取第一张图片至封面
		if(!empty($_POST[\'setconver\'])) {
			//检测否是需要下载网络图片, 用于封面
			preg_match_all("/\<img.+src=(\'|\"|)?(.*)(\\1)([\s].*)?\>/ismUe", $_POST[\'content\'], $matches, PREG_SET_ORDER);
			if(!empty($matches) && is_array($matches)) {
				$imageurl = $matches[0][2];
				if(substr($imageurl, 0, 7) == \'http://\' || substr($imageurl, 0, 8) == \'https://\') { //内容里第一张图片是网络图片
					$data = $this->downloadremotefile($imageurl);
					if(!empty($data)) {
						$conver = $data[\'cover\'];
					} else {
						$conver = \'\';
					}
				} else { //第一张图片为本地图片
					$conver = $upload[0][\'cover\'];
				}

				$_POST[\'conver\'] = $conver;
			}
		}

		//发布内容前的初始化
		$this->init();

		//POST参数转为GET参数
		$this->post2get();

		//设置发布用户ID
		$this->set_uid();

		$catid = $_POST[\'catid\'];
		check_articleperm($catid);

		$_POST[\'title\'] = getstr(trim($_POST[\'title\']), 80);

		if(strlen($_POST[\'title\']) < 1) {
			showMsg(\'标题不能少于 2 个字符\');
		}

		$_POST[\'title\'] = censor($_POST[\'title\']);

		$_POST[\'pagetitle\'] = getstr(trim($_POST[\'pagetitle\']), 60);
		$_POST[\'pagetitle\'] = censor($_POST[\'pagetitle\']);
		$htmlname = basename(trim($_POST[\'htmlname\']));

		$highlight_style = $_GET[\'highlight_style\'];
		$style = \'\';
		$style = implode(\'|\', $highlight_style);
		if(empty($_POST[\'summary\'])) $_POST[\'summary\'] = preg_replace("/(\s|\<strong\>##########NextPage(\[title=.*?\])?##########\<\/strong\>)+/", \' \', $_POST[\'content\']);

		$summary = portalcp_get_summary($_POST[\'summary\']);
		$summary = censor($summary);

		$_GET[\'author\'] = dhtmlspecialchars($_GET[\'author\']);
		$_GET[\'url\'] = str_replace(\'&\', \'&\', dhtmlspecialchars($_GET[\'url\']));
		$_GET[\'from\'] = dhtmlspecialchars($_GET[\'from\']);
		$_GET[\'fromurl\'] = str_replace(\'&\', \'&\', dhtmlspecialchars($_GET[\'fromurl\']));
		$_GET[\'dateline\'] = !empty($_GET[\'dateline\']) ? strtotime($_GET[\'dateline\']) : TIMESTAMP;
		if(empty($_GET[\'dateline\'])) $_GET[\'dateline\'] = TIMESTAMP;
		if(substr($_GET[\'url\'], 0, 7) !== \'http://\') {
			$_GET[\'url\'] = \'\';
		}
		if(substr($_GET[\'fromurl\'], 0, 7) !== \'http://\') {
			$_GET[\'fromurl\'] = \'\';
		}

		if(0 && (censormod($_POST[\'title\']) || $_G[\'group\'][\'allowpostarticlemod\'])) { //让文章发布状态始终为true
			$article_status = 1;
		} else {
			$article_status = 0;
		}

		$setarr = array(
			\'idtype\' => \'\',
			\'title\' => $_POST[\'title\'],
			\'author\' => $_GET[\'author\'],
			\'from\' => $_GET[\'from\'],
			\'fromurl\' => $_GET[\'fromurl\'],
			\'dateline\' => intval($_GET[\'dateline\']),
			\'url\' => $_GET[\'url\'],
			\'allowcomment\' => !empty($_POST[\'forbidcomment\']) ? \'0\' : \'1\',
			\'summary\' => $summary,
			\'catid\' => intval($_POST[\'catid\']),
			\'tag\' => article_make_tag($_POST[\'tag\']),
			\'status\' => $article_status,
			\'highlight\' => $style,
			\'showinnernav\' => empty($_POST[\'showinnernav\']) ? \'0\' : \'1\',
		);

		if(empty($setarr[\'catid\'])) {
			showMsg(\'栏目不能为空\');
		}

		if(!empty($_POST[\'conver\'])) {
			$converfiles = dunserialize($_POST[\'conver\']);
			$setarr[\'pic\'] = $converfiles[\'pic\'];
			$setarr[\'thumb\'] = intval($converfiles[\'thumb\']);
			$setarr[\'remote\'] = intval($converfiles[\'remote\']);
		}

		$id = 0;
		$idtype = \'\';

		if(empty($article)) {
			$setarr[\'uid\'] = $this->global[\'uid\'];
			$setarr[\'username\'] = $this->global[\'username\'];
			$setarr[\'id\'] = intval($_POST[\'id\']);
			$setarr[\'htmlname\'] = $htmlname;
			$table = \'\';
			if(0 && $setarr[\'id\']) {
				if($_POST[\'idtype\']==\'blogid\') {
					$table = \'home_blogfield\';
					$setarr[\'idtype\'] = \'blogid\';
					$id = $setarr[\'id\'];
					$idtype = $setarr[\'idtype\'];
				} else {
					$table = \'forum_thread\';
					$setarr[\'idtype\'] = \'tid\';

					require_once libfile(\'function/discuzcode\');
					$id = C::t(\'forum_post\')->fetch_threadpost_by_tid_invisible($setarr[\'id\']);
					$id = $id[\'pid\'];
					$idtype = \'pid\';
				}
			}

			$aid = C::t(\'portal_article_title\')->insert($setarr, 1);

			if(0 && $table) {
				if($_POST[\'idtype\']==\'blogid\') {
					C::t(\'home_blogfield\')->update($setarr[\'id\'], array(\'pushedaid\' => $aid));
				} elseif($setarr[\'idtype\']==\'tid\') {
					$modarr = array(
						\'tid\' => $setarr[\'id\'],
						\'uid\' => $_G[\'uid\'],
						\'username\' => $_G[\'username\'],
						\'dateline\' => TIMESTAMP,
						\'action\' => \'PTA\',
						\'status\' => \'1\',
						\'stamp\' => \'\',
					);
					C::t(\'forum_threadmod\')->insert($modarr);

					C::t(\'forum_thread\')->update($setarr[\'id\'], array(\'moderated\' => 1, \'pushedaid\' => $aid));
				}
			}
			C::t(\'common_member_status\')->update($this->global[\'uid\'], array(\'lastpost\' => TIMESTAMP), \'UNBUFFERED\');
			C::t(\'portal_category\')->increase($setarr[\'catid\'], array(\'articles\' => 1));
			C::t(\'portal_category\')->update($setarr[\'catid\'], array(\'lastpublish\' => TIMESTAMP));
			C::t(\'portal_article_count\')->insert(array(\'aid\'=>$aid, \'catid\'=>$setarr[\'catid\'], \'viewnum\'=>$_POST[\'viewnum\']));
		} else {
			//这里面基本不可能执行到
			if($htmlname && $article[\'htmlname\'] !== $htmlname) {
				$setarr[\'htmlname\'] = $htmlname;
				$oldarticlename = $article[\'htmldir\'].$article[\'htmlname\'];
				unlink($oldarticlename.\'.\'.$_G[\'setting\'][\'makehtml\'][\'extendname\']);
				for($i = 1; $i < $article[\'contents\']; $i++) {
					unlink($oldarticlename.$i.\'.\'.$_G[\'setting\'][\'makehtml\'][\'extendname\']);
				}
			}
			C::t(\'portal_article_title\')->update($aid, $setarr);
		}

		$content = getstr($_POST[\'content\'], 0, 0, 0, 0, 1);
		$content = censor($content);
		if(0 && (censormod($content) || $this->global[\'group\'][\'allowpostarticlemod\'])) {
			$article_status = 1;
		} else {
			$article_status = 0;
		}

		$regexp = \'/(\<strong\>##########NextPage(\[title=(.*?)\])?##########\<\/strong\>)+/is\';
		preg_match_all($regexp, $content ,$arr);
		$pagetitle = !empty($arr[3]) ? $arr[3] : array();
		$pagetitle = array_map(\'trim\', $pagetitle);
		array_unshift($pagetitle, $_POST[\'pagetitle\']);
		$contents = preg_split($regexp, $content);
		$cpostcount = count($contents);

		$dbcontents = C::t(\'portal_article_content\')->fetch_all($aid);

		$pagecount = $cdbcount = count($dbcontents);
		if($cdbcount > $cpostcount) {
			$cdelete = array();
			foreach(array_splice($dbcontents, $cpostcount) as $value) {
				$cdelete[$value[\'cid\']] = $value[\'cid\'];
			}
			if(!empty($cdelete)) {
				C::t(\'portal_article_content\')->delete($cdelete);
			}
			$pagecount = $cpostcount;
		}

		foreach($dbcontents as $key => $value) {
			C::t(\'portal_article_content\')->update($value[\'cid\'], array(\'title\' => $pagetitle[$key], \'content\' => $contents[$key], \'pageorder\' => $key+1));
			unset($pagetitle[$key], $contents[$key]);
		}

		if($cdbcount < $cpostcount) {
			foreach($contents as $key => $value) {
				C::t(\'portal_article_content\')->insert(array(\'aid\' => $aid, \'id\' => $setarr[\'id\'], \'idtype\' => $setarr[\'idtype\'], \'title\' => $pagetitle[$key], \'content\' => $contents[$key], \'pageorder\' => $key+1, \'dateline\' => TIMESTAMP));
			}
			$pagecount = $cpostcount;
		}

		$updatearticle = array(\'contents\' => $pagecount);
		if($article_status == 1) {
			$updatearticle[\'status\'] = 1;
			updatemoderate(\'aid\', $aid);
			manage_addnotify(\'verifyarticle\');
		}

		$updatearticle = array_merge($updatearticle, portalcp_article_pre_next($catid, $aid));
		C::t(\'portal_article_title\')->update($aid, $updatearticle);

		$newaids = array();
		$_POST[\'attach_ids\'] = explode(\',\', $_POST[\'attach_ids\']);
		foreach ($_POST[\'attach_ids\'] as $newaid) {
			$newaid = intval($newaid);
			if($newaid) $newaids[$newaid] = $newaid;
		}
		if($newaids) {
			C::t(\'portal_attachment\')->update_to_used($newaids, $aid);
		}

		addrelatedarticle($aid, $_POST[\'raids\']);

		if(0 && $_GET[\'from_idtype\'] && $_GET[\'from_id\']) {

			$id = intval($_GET[\'from_id\']);
			$notify = array();
			switch ($_GET[\'from_idtype\']) {
				case \'blogid\':
					$blog = C::t(\'home_blog\')->fetch($id);
					if(!empty($blog)) {
						$notify = array(
							\'url\' => "home.php?mod=space&uid=$blog[uid]&do=blog&id=$id",
							\'subject\' => $blog[\'subject\']
						);
						$touid = $blog[\'uid\'];
					}
					break;
				case \'tid\':
					$thread = C::t(\'forum_thread\')->fetch($id);
					if(!empty($thread)) {
						$notify = array(
							\'url\' => "forum.php?mod=viewthread&tid=$id",
							\'subject\' => $thread[\'subject\']
						);
						$touid = $thread[\'authorid\'];
					}
					break;
			}
			if(!empty($notify)) {
				$notify[\'newurl\'] = \'portal.php?mod=view&aid=\'.$aid;
				notification_add($touid, \'pusearticle\', \'puse_article\', $notify, 1);
			}
		}

		if(trim($_GET[\'from\']) != \'\') {
			$from_cookie = \'\';
			$from_cookie_array = array();
			$from_cookie = getcookie(\'from_cookie\');
			$from_cookie_array = explode("\t", $from_cookie);
			$from_cookie_array[] = $_GET[\'from\'];
			$from_cookie_array = array_unique($from_cookie_array);
			$from_cookie_array = array_filter($from_cookie_array);
			$from_cookie_num = count($from_cookie_array);
			$from_cookie_start = $from_cookie_num - 10;
			$from_cookie_start = $from_cookie_start > 0 ? $from_cookie_start : 0;
			$from_cookie_array = array_slice($from_cookie_array, $from_cookie_start, $from_cookie_num);
			$from_cookie = implode("\t", $from_cookie_array);
			dsetcookie(\'from_cookie\', $from_cookie);
		}
		dsetcookie(\'clearUserdata\', \'home\');
		$op = \'add_success\';
		$article_add_url = \'portal.php?mod=portalcp&ac=article&catid=\'.$catid;

		$article = C::t(\'portal_article_title\')->fetch($aid);
		$viewarticleurl = $_POST[\'url\'] ? "portal.php?mod=list&catid=$_POST[catid]" : fetch_article_url($article);

		showMsg(\'发布成功\');
	}
}

//接口需要用到的函数库
function portalcp_get_summary($message) {
	$message = preg_replace(array("/\[attach\].*?\[\/attach\]/", "/\&[a-z]+\;/i", "/\<script.*?\<\/script\>/"), \'\', $message);
	$message = preg_replace("/\[.*?\]/", \'\', $message);
	$message = getstr(strip_tags($message), 200);
	return $message;
}

function portalcp_article_pre_next($catid, $aid) {
	$data = array(
		\'preaid\' => C::t(\'portal_article_title\')->fetch_preaid_by_catid_aid($catid, $aid),
		\'nextaid\' => C::t(\'portal_article_title\')->fetch_nextaid_by_catid_aid($catid, $aid),
	);
	if($data[\'preaid\']) {
		C::t(\'portal_article_title\')->update($data[\'preaid\'], array(
			\'preaid\' => C::t(\'portal_article_title\')->fetch_preaid_by_catid_aid($catid, $data[\'preaid\']),
			\'nextaid\' => C::t(\'portal_article_title\')->fetch_nextaid_by_catid_aid($catid, $data[\'preaid\']),
			)
		);
	}
	return $data;
}
?>

  

分类:

技术点:

相关文章: