刚才登陆新浪围脖,突然爆出PHP源代码,以下贴出:
/**
* 微博客模型层
*
* @copyright (c) 2009, 新浪网MiniBlog All rights reserved.
* @author 王兆源 朱建鑫
* @version 1.0 - 2009-07-16
* @package Model
*/
include_once SERVER_ROOT.'model/mBase.php';
include_once SERVER_ROOT.'config/mblogConfig.php';
class mMblog extends mbase {
/**
* 将数据层取得的数据decode,供上层使用
*
* @param array $data
* @return array
*/
public function mapping($mblogList, $source='mblog', $parse=true, $isNoAddLink=false, $isParseVideo=true) {
$o_base62 = ClsFactory::Create('tools::encode::base62Parse');
$o_short = ClsFactory::Create('model::mShortUrl');
$result = array();
$func = 'renderTag';
$objAnalyzeAt = ClsFactory::Create("tools::analyze::TAnalyzeAt");
if(in_array($source,array('widget','widget_blog')))
$isTarget = true;
else
$isTarget = false;
foreach($mblogList as $v) {
if($v===false) continue;
if($source == 'myat') {
if($v["isDel"]) {
$result[$v['mid']] = $v;
continue;
}
}
$data = @unserialize($v['content']);
if($isParseVideo && $data['video'] && $data['video'][0] && !is_array($data['video'][0])){
//先做一个兼容,导完数据就不做了
$shorts = $o_short->shorts2long($data['video']);
unset($data['video']);
if(!empty($shorts)){
foreach($shorts as $sk=>$sv){
if(empty($sv['ext']['url'])){
continue;
}
$data['video'][] = array(
'url' => $sv['ext']['url'],
'title' => $sv['ext']['title'],
'pic' => $sv['ext']['pic'],
'type' => $sv['from'],
'vname' => $sk,
'ourl' => $sv['url']
);
}
}
}
$data['tag'] = $v['tag']=='' ? array() : explode(' ', $v['tag']);
$data['reason'] = $this->renderTag($data['reason'],$isTarget);
$data['pic'] = is_array($data['pic']) ? $data['pic'] : array();
if($source!='wap' && $parse && $v['appid']!=MBLOG_APP_RSS) {
$data['text'] = $this->$func($data['text'],$isTarget);
}
if($source !='wap' && !$isNoAddLink) {
//进行@功能替换
if(($v['filter']&
==
{
$objAnalyzeAt->atTOlink($data['text'],$data["atUsers"],$isTarget);
if($v['appid'] == 2) {
$objAnalyzeAt->atTOlink($data['reason'],$data["atUsers"],$isTarget);
}
}
}
$result[$v['mid']] = array(
'mid' => $v['mid'],
'mid62' => $o_base62->encode($v['mid']),
'uid' => $v['uid'],
'data' => $data,
'content' => $data['text'],
'tag' => $v['tag'],
'appid' => $v['appid'],
'ip' => $v['ip'],
'ctime' => $v['ctime'],
'status' => $v['status'],
'filter' => $v['filter'],
'isdel' => $v['isDel'],
);
if($parse) $fbmlAr[$v['mid']] = $data;
//if($parse && $source!='wap'
$fbmlAr[$v['mid']] = $data;
//echo "-------\r\n";
}
if(empty($result)) return false;
// if($parse) {
if($parse && $source!='wap'
{
// $func = $source=='wap' ? 'parseFbmlWap' : 'parseFbmlmblog';
// $fbmlAr = $this->$func($fbmlAr);
$fbmlAr = $this->parseFbmlmblog($fbmlAr);
foreach($result as $k => &$v) {
$v['data'] = $fbmlAr[$k];
}
}
elseif($source =='wap')
{
//$fbmlAr = $this->parseFbmlWap($fbmlAr);
foreach($result as $k => &$v) {
$v['data'] = $fbmlAr[$k];
}
}
return $result;
}
/**
* 普通微博客fbml解析
*
* @param array $fbmlAr
* @return array
*/
public function parseFbmlmblog($fbmlAr) {
$contents = array();
if(!empty($fbmlAr)){
foreach($fbmlAr as $k => $v) {
$contents[$k] = $v['text'];
}
}
$o_fbml = ClsFactory::Create("tools::fbml::fbmlParse");
$contents = $o_fbml->fbml_parse_array($contents);
if(!empty($fbmlAr)){
foreach($fbmlAr as $k => &$v) {
$v['text'] = $contents[$k];
}
}
return $fbmlAr;
}
/**
* wap的fbml解析
*
* @param array $fbmlAr
* @return array
*/
public function parseFbmlWap($fbmlAr) {
$o_sturl = ClsFactory::Create('model::mShortUrl');
foreach($fbmlAr as &$v) {
$text = &$v['text'];
$link = &$v['link'];
if (!is_array($link))
{
$link = array();
}
preg_match_all("/\<\s*sina\s*\:\s*([a-zA-Z1-9]+)\s+([^\>]*)\/?\>/i", $text, $out1);
if(empty($out1[0])) continue;
foreach($out1[0] as $k1 => $v1) {
if($out1[1][$k1]!='link') continue;
preg_match_all("/([a-zA-Z0-9_]+)\s*\=\s*[\'\"]?([^\'\"\s]+)[\'\"]?/", $v1, $out2);
if(empty($out2[0])) continue;
$out2[1] = array_unique($out2[1]);
foreach($out2[1] as $k2 => $v2) {
if($v2!='src') continue;
$url = strpos($out2[2][$k2], 'http://')!==false ? $out2[2][$k2] : SHORTURL_DOMAIN.$out2[2][$k2];
$link[] = $url;
$text = str_replace($v1, $url, $text);
break;
}
}
}
return $fbmlAr;
}
/**
* 获取指定ID号的微博内容
*
* @param array $mids 微博ID号数组
* @return array 微博客内容数组
*/
public function getMblogByMids($mids, $source='mblog', $parse=true, $isNoAddLink=false, $cuid="", $isParseVideo=true) {
$objMblog = ClsFactory::Create('data::dMblog');
$mblogData = $objMblog->getMblogByMids($mids);
if($mblogData===false) return false;
if($cuid) {
$mblogData = $this->filterStatus($mblogData, $cuid);
}
$mblogData = $this->mapping($mblogData, $source, $parse, $isNoAddLink, $isParseVideo);
if($mblogData===false) return false;
return $mblogData;
}
/**
* 获取指定ID号的微博内容(专针对获取单条微博,解决区分不出是不存在该条微博,还是服务异常的问题)
*
* @param array $mids 微博ID号数组
* @return array 微博客内容数组
*/
public function getMblogByMidsWap($mids, $source='mblog', $parse=true, $isNoAddLink=false, $cuid="") {
$objMblog = ClsFactory::Create('data::dMblog');
$mblogData = $objMblog->getMblogByMids($mids);
if($mblogData===false) return false;
if (empty($mblogData))
{
return array("code" => "M02001"
;
}
if($cuid) {
$mblogData = $this->filterStatus($mblogData, $cuid);
}
$mblogData = $this->mapping($mblogData, $source, $parse, $isNoAddLink);
if($mblogData===false) return false;
return $mblogData;
}
/**
* 获取某人的关注feed列表,支持page分页
*
* @param integer $ouid 用户uid
* @param integer $page 页码
* @param integer $pagesize 可选,每页显示数
* @param integer $filter 筛选器
* @param string $source 获取来源
* @return array
*/
public function getAttMblogInPageByFilter($cuid, $ouid, $page, $pagesize=MBLOG_PAGE_SIZE, $filter=MBLOG_FILTER_DEFAULT, $source='mblog') {
$filterArr = array(1=>array(1,3,5,7),
2=>array(2,3,6,7),
MBLOG_TYPE_ORI=>array(0,1,2,3), //原创
4=>array(4,5,6,7));
$filters = $filterArr[$filter];
$o_mblog = ClsFactory::Create('data::dMblog');
// 从缓存取数据
if($page==1) $result = $o_mblog->getFilterFeedByMc($ouid, $pagesize, $filter . "_page"
;
if(is_array($result)) {
$result['record'] = $this->filterStatus($result['record'], $cuid);
$result['record'] = $this->mapping($result['record'], $source, true);
return $result;
}
// 取不到的处理流程
$mids = $this->getAttMids($ouid);
if($mids===false) return false;
$mblogList = $o_mblog->getMblogByMids($mids);
$newMids = array();
foreach($mblogList as $v) {
if($cuid!=$ouid && $v['status']==STATUS_SELF) continue;
if(!in_array($v['filter'],$filters)) continue;
$record[$v['mid']] = $v;
$newMids[] = $v['mid'];
}//剩下的是有效的msg
$total = count($newMids);
$newMids = array_slice($newMids, ($page-1)*$pagesize, $pagesize);
$record = array_slice($record, ($page-1)*$pagesize, $pagesize);
if(empty($mids)) return array('total'=>0, 'record'=>array());
$result = array('total'=>$total, 'record'=>$record);
if($page==1) $o_mblog->getFilterFeedByMc($ouid, $pagesize, $filter . "_page"
;
$result['record'] = $this->filterStatus($result['record'], $cuid);
$result['record'] = $this->mapping($result['record'], $source, true);
return $result;
}
/**
* 获取某人的关注feed列表,支持page分页
*
* @param integer $ouid 用户uid
* @param integer $page 页码
* @param integer $pagesize 可选,每页显示数
* @param integer $filter 筛选器
* @param string $source 获取来源
* @return array
*/
public function getAttMblogInPage($cuid, $ouid, $page, $pagesize=MBLOG_PAGE_SIZE, $filter=MBLOG_FILTER_DEFAULT, $source='mblog') {
//是否要过滤
if($filter != MBLOG_FILTER_DEFAULT) {
return $this->getAttMblogInPageByFilter($cuid, $ouid, $page, $pagesize, $filter, $source);
}
$o_mblog = ClsFactory::Create('data::dMblog');
// 从缓存取数据
if($page==1) $result = $o_mblog->getFeedByMc($ouid, $pagesize);
if(is_array($result)) {
$result['record'] = $this->filterStatus($result['record'], $cuid);
$result['record'] = $this->mapping($result['record'], $source, true);
return $result;
}
// 取不到的处理流程
$midInfo = $this->getAttMids($ouid, $page, $pagesize);
if($midInfo===false) {
TInfoLog::addLogs("getAttmblog-mMblog-getAttMids-{$cuid}, {$ouid}", "waperr");
return false;
}
if(empty($midInfo['mids'])) return array('total'=>0, 'record'=>array());
$mids = $midInfo['mids'];
$dTotal = $midInfo['dCount'];
$mblogList = $o_mblog->getMblogByMids($mids);
if($mblogList===false) {
TInfoLog::addLogs("getAttmblog-mMblog-getMblogByMids-{$cuid}, {$ouid}", "waperr");
return false;
}
$record = array();
foreach($mblogList as $v) $record[$v['mid']] = $v;
$record = $this->filterStatus($record, $cuid);
$result = array('dTotal'=>$dTotal, 'total'=>count($record), 'record'=>$record);
if($page==1) $o_mblog->setFeedByMc($ouid, $result, $pagesize);
$result['record'] = $this->mapping($result['record'], $source, true);
if($result===false) {
TInfoLog::addLogs("getAttmblog-mMblog-mapping-{$cuid}, {$ouid}", "waperr");
return false;
}
return $result;
}
/**
* 获取某人的关注feed列表,支持endmid分页
*
* @param integer $ouid 用户uid
* @param string $endmid 可选,以这个id的下一个id开始获取,为空为从头获取
* @param integer $pagesize 可选,每页显示数
* @param integer $filter 筛选器
* @param string $source 获取来源
* @return array
*/
public function getAttMblogInEndid($cuid, $ouid, $endmid='', $pagesize=MBLOG_PAGE_SIZE, $filter=MBLOG_FILTER_DEFAULT, $source='mblog') {
//ligang1为筛选功能添加Private函数
if($filter != MBLOG_FILTER_DEFAULT)
return $this->getAttMblogInEndid2($cuid, $ouid, $endmid, $pagesize, $filter, $source);
$maxPage = 10;
$o_mblog = ClsFactory::Create('data::dMblog');
// 从缓存取数据
if($endmid=='') {
$result = $o_mblog->getFeedByMc($ouid, $pagesize);
if(is_array($result)) {
$result['record'] = $this->filterStatus($result['record'], $cuid);
$result['record'] = $this->mapping($result['record'], $source, true);
$result['isend'] = 0;
return $result;
}
}
// 取不到的处理流程
$mids = $this->getAttMids($ouid);
if($mids===false) return false;
if(empty($mids)) return array();
$total = count($mids);
if(empty($endmid)) {
$key_start = 0;
$is_end = 0;
$key_end = $pagesize - 1;
} else {
$keys = array_flip($mids);
$key_start = $keys[$endmid] + 1;
$is_end = count($keys)>($key_start+$pagesize) ? 0 : 1;
if($key_start>($maxPage-2)*$pagesize+1) $is_end = 1;
$key_end = $key_start+$pagesize>count($keys) ? count($keys)-1 : $key_start+$pagesize-1;
}
$newmids = array();
for($i=$key_start;$i<=$key_end;$i++) {
if($mids[$i]>0)
{
$newmids[] = $mids[$i];
}
}
$result = $o_mblog->getMblogByMids($newmids);
if($result===false) return false;
$record = array();
foreach($result as $v) {
$record[$v['mid']] = $v;
}
$result = array('total'=>$total, 'record'=>$record);
$result['record'] = $this->filterStatus($result['record'], $cuid);
if($endmid==''
$o_mblog->setFeedByMc($ouid, $result, $pagesize);
$result['record'] = $this->mapping($result['record'], $source, true);
$result['isend'] = $is_end;
return $result;
}
/**
* 获取某人的关注feed列表,支持endmid分页,filter不为MBLOG_FILTER_DEFAULT时的调用。
*
* @param integer $ouid 用户uid
* @param string $endmid 可选,以这个id的下一个id开始获取,为空为从头获取
* @param integer $pagesize 可选,每页显示数
* @param integer $filter 筛选器
* @param string $source 获取来源
* @return array
*/
private function getAttMblogInEndid2($cuid, $ouid, $endmid='', $pagesize=MBLOG_PAGE_SIZE, $filter, $source='mblog') {
$filterArr = array(1=>array(1,3,5,7),
2=>array(2,3,6,7),
MBLOG_TYPE_ORI=>array(0,1,2,3), //原创
4=>array(4,5,6,7));
$filters = $filterArr[$filter];
$maxPage = 10;
$o_mblog = ClsFactory::Create('data::dMblog');
// 从缓存取数据
if($endmid=='') {
//由于有了不同的filter,因此MC的key值需要更进一步的区分。
$result = $o_mblog->getFilterFeedByMc($ouid, $pagesize, $filter);
if(is_array($result)) {
$result['record'] = $this->filterStatus($result['record'], $cuid);
$result['record'] = $this->mapping($result['record'], $source, true);
$result['isend'] = 0;
return $result;
}
}
// 取不到的处理流程
//得到500条
$mids = $this->getAttMids($ouid);
if($mids===false) return false;
if(empty($mids)) return array();
//去掉无效的mid
$newmids = array();
foreach($mids as $mid) {
if($mid>0)
{
$newmids[] = $mid;
}
}
//得到内容
$result = $o_mblog->getMblogByMids($newmids);
if($result===false) return false;
//逐项过滤掉私有的和需要过滤器过滤的数据
$record = array();
$newmids2 = array();
foreach($result as $v) {
if($cuid!=$ouid && $v['status']==STATUS_SELF) continue;
if(!in_array($v['filter'],$filters)) continue;
//if($v['mid']<$key_start||$v['mid']>$key_end) continue;
$record[$v['mid']] = $v;
$newmids2[] = $v['mid'];
}//剩下的是有效的msg
$total = count($newmids2);
//从有效的msg中选择在此页中显示的条目集合
if(empty($endmid)) {
$key_start = 0;
$is_end = 0;
$key_len = $pagesize;
} else {
$keys = array_flip($newmids2);
$key_start = $keys[$endmid] + 1;
$is_end = count($keys)>($key_start+$pagesize) ? 0 : 1;
if($key_start>($maxPage-2)*$pagesize+1) $is_end = 1;
//if($key_start>($maxPage-2)*$pagesize+1) $is_end = 1;
$key_len = $key_start+$pagesize>count($keys) ? count($keys)-$key_start+1 : $pagesize;
}
$record = array_slice($record,$key_start,$key_len);
$result = array('total'=>$total, 'record'=>$record);
//同上面的getFeedByMc的调用说明
if($endmid==''
$o_mblog->setFilterFeedByMc($ouid, $result, $pagesize, $filter);
$result['record'] = $this->filterStatus($result['record'], $cuid);
$result['record'] = $this->mapping($result['record'], $source, true);
$result['isend'] = $is_end;
return $result;
}
/**
* 添加一条微博客
*
* @param integer $uid 作者uid
* @param ? $content 内容
* @param ? $pic 图片id号
* @param ? $appid 应用号
* @param ? $tag tag标签
* @param ? $ispic 是否含图片
* @param ? $isrt 是否含转发
* @param ? $islink 是否含连接
* @param string $ip 发表者ip地址
* @param string $ctime 发表时间(DateTime格式)
* @param ? $status 微博状态
* @return true
*/
public function add($uid, $content, $pic, $appid, $ip, $ctime, $status=0, $searchMcq=true, $sourceText='', $sourceLink='') {
//检查sass
$startTime1 = getmicrotime();
$mSassobj = ClsFactory::Create('model::mSass');
$issasskill = $mSassobj->checkPostBlog($uid);
$startTime2 = getmicrotime();
if($issasskill) {
$errorcode = $mSassobj->getErrmsg();
if($errorcode == SASS_COMMON_PUBLISH_REJECT_PRIMARY) {
return array("code" => "M02014"
;
} elseif($errorcode == SASS_COMMON_PUBLISH_REJECT_ADVANCED) {
return array("code" => "M02015"
;
}
return array("code" => "M00008"
;
}
$ispic = 0;
$islink = 0;
//ligang1 add
$isat = 0;
if (!empty($pic))
{
$ispic = 1;
if (!is_array($pic))
{
$pic = array($pic);
}
}
if (mb_strwidth($content, "UTF-8"
> MBLOG_CONTENT_MAX_SIZE)
{
$content = mb_strimwidth($content, 0, MBLOG_CONTENT_MAX_SIZE, "", "UTF-8");
}
$rcontent = $content; //--含有源链接的微博内容,以便检查黑网址
//入库前就做html转义
$content = htmlspecialchars($content);
//--判断内容中是否含有链接,如果有链接则替换成短url
$strinShortUrl = array();
$objAnalyzeLink = ClsFactory::Create("tools::analyze::TAnalyzeLink");
$bRet = $objAnalyzeLink->getData(array('content'=>$content,'from'=>MBLOG_ACTION_MBLOG),$strinShortUrl,$videoArr);
if ($bRet !== FALSE)
{
$islink = 1;
$content = $bRet;
}
$startTime3 = getmicrotime();
$adminObj = ClsFactory::Create("model::mAdminCheck");
$personObj = ClsFactory::Create("model::mPerson");
$userInfo = $personObj->getUserInfo($uid, true);
$startTime4 = getmicrotime();
$arr = $adminObj->checkPubMblog($userInfo, array('appid'=>$appid,'content'=>$rcontent,'ip'=>$ip,'ispic'=>$ispic,'islink'=>$islink));
$startTime5 = getmicrotime();
if($arr['kwdlevel'] == KEYWORD_FORBID) {
return array("code" => "M02005"
;
}elseif($arr['status'] == STATUS_KILL){
return array("code" => "M02005"
;
}
elseif ($arr['usergrouplevel'] == STATUS_KILL)
{
return array("code" => "M02009"
;
}
//--获取tag内容
$isTag = false;
$objAnalyzeTag = ClsFactory::Create("tools::analyze::TAnalyzeTag");
$bRet = $objAnalyzeTag->getData($content);
if ($bRet !== FALSE)
{
$tag = $bRet;
$isTag = true;
}
$startTime6 = getmicrotime();
//ligang1 add 判断msg中是否有@人名存在。
$objAtUser = ClsFactory::Create("model::mAtUser");
$atUsers = $objAtUser->getAtUsername($content);
$startTime7 = getmicrotime();
if(count($atUsers)>0){
$isat = 1;
}
$mblogContent = array();
if(!empty($videoArr)){
$mblogContent['video'] = $videoArr;
$isvideo = true;
} else {
$isvideo = false;
}
//ligang1 add end
$filterAr = array(
MBLOG_FILTER_PIC => $ispic,
MBLOG_FILTER_LINK => $islink,
//ligang1 add
MBLOG_FILTER_AT => $isat,
//ligang1 add end
MBLOG_FILTER_VIDEO => $isvideo,
);
$mblogContent['text'] = $content;
$mblogContent['pic'] = $pic;
//ligang1 add
$mblogContent['atUsers'] = $atUsers;
//ligang1 add end
$mblogContent['uid'] = $uid;
if($appid==MBLOG_APP_SHARE) {
$mblogContent['sourceText'] = $sourceText;
$mblogContent['sourceLink'] = $sourceLink;
}
$mblogContentString = serialize($mblogContent);
$bRet = $this->insertMblog($uid, $mblogContentString, $appid, $tag, $filterAr, $ip, $ctime, $arr, $searchMcq);
$startTime8 = getmicrotime();
//统计数据需要
foreach($bRet as $mid => $mInfo) {
$ssm = ClsFactory::Create('tools::log::SSM_Miniblog');
$ssm->ext_log = array();
if(is_array($strinShortUrl) && count($strinShortUrl) > 0) {
$ssm->ext_log['shortUrl'] = implode(";", $strinShortUrl);
}
if($mInfo['appid'] === MBLOG_APP_SHARE) {
$ssm->ext_log['isShare'] = "1";
$ssm->ext_log['url'] = $sourceLink;
}
if($filterAr[MBLOG_FILTER_LINK]) {
$ssm->ext_log['islink'] = "1";
}
if($filterAr[MBLOG_FILTER_PIC]) {
$ssm->ext_log['isPic'] = "1";
}
if($filterAr[MBLOG_FILTER_VIDEO]) {
$ssm->ext_log["isVideo"] = "1";
}
if($mInfo['appid'] === MBLOG_APP_TRANSMIT) {
$ssm->ext_log['isTransmit'] = "1";
}
if($mInfo['appid'] === MBLOG_APP_SHARE) {
$ssm->ext_log['isShare'] = "1";
}
if($isTag === true) {
$ssm->ext_log['isTopic'] = "1";
}
$mblogsize = mb_strwidth($content, "UTF-8");
$ssm->ext_log["size"] = $mblogsize;
if($mInfo['appid'] === MBLOG_APP_TRANSMIT) {
$ssm->ext_log['rtmid'] = $mInfo['data']["rtmid"];
$ssm->ext_log['rootuid'] = $mInfo['data']["rootuid"];
$ssm->ext_log['rootmid'] = $mInfo['data']["rootmid"];
}
//$ssm->isDebug = true;
$ssm->property['datetime'] = date('Y-m-d'
;
$ssm->property['clientip'] = $ip;
$ssm->property['operator'] = $uid;
$ssm->property['source'] = $mInfo['appid'];
if($bRet === false) {
$ssm->property['status'] = SSM_LOG_STATUS_FAIL;
} else {
$ssm->property['status'] = SSM_LOG_STATUS_SUCC;
}
$ssm->property['object'] = $mid;
if($mInfo['appid'] === MBLOG_APP_TRANSMIT) {
$ssm->property['otheruid'] = $mInfo['data']["rootuid"];
}
//$ext = implode(",",$ssm->ext_log);
//$ssm->property['extfields'] = $ext;
$ssm->log(SSM_LOG_ACTION_MBLOGPUB, SSM_LOG_ACTION_MBLOGPUB);
}
if($arr['status'] == STATUS_FIRST_CHECK){
return array("code" => "M02005"
;
}
if($arr['usergrouplevel'] == STATUS_FIRST_CHECK){
return array("code" => "M02005"
;
}
$startTime9 = getmicrotime();
$t = number_format($startTime9-$startTime1,10);
$t1 = number_format($startTime2-$startTime1,10);
$t2 = number_format($startTime3-$startTime2,10);
$t3 = number_format($startTime4-$startTime3,10);
$t4 = number_format($startTime5-$startTime4,10);
$t5 = number_format($startTime6-$startTime5,10);
$t6 = number_format($startTime7-$startTime6,10);
$t7 = number_format($startTime8-$startTime7,10);
$t8 = number_format($startTime9-$startTime8,10);
if($t>1) {
$mstr= $t.'|'.$t1.'|'.$t2.'|'.$t3.'|'.$t4.'|'.$t5.'|'.$t6.'|'.$t7.'|'.$t8."\n";
error_log($mstr,3,'/data1/www/privdata/t.sina.com.cn/logs/INFO/'.date('Y-m-d').'modeladdmblog.log');
}
return $bRet;
}
public function insertMblog($uid, $content, $appid, $tag, $filterAr, $ip, $ctime, $statusArr=array(), $searchMcq=true) {
//--合并计算过滤条件(含图片\链接)
// $arrFilter = array(MBLOG_FILTER_PIC=>$ispic,MBLOG_FILTER_LINK=>$islink);
$oSearch = ClsFactory::Create('model::mSearch');
$filterString = $oSearch->encodeFilter($filterAr);
$obj = ClsFactory::Create("model::mAdminCheck");
$arrData = unserialize($content);
$mblogText = $arrData['text'];
$duserobj = ClsFactory::Create('model::mPerson');
$userinfo=$duserobj->getUserInfo($uid, true);
if($statusArr === array()){
if( is_array($arrData) && isset($arrData['reason']))
$ckText = $arrData['reason'];
else
$ckText = $arrData['text'];
$checkarr = $obj->checkPubMblog($userinfo, array('content'=>$ckText,'appid'=>$appid,'ip'=>$ip));
}else{
$checkarr = $statusArr;
}
$usertype = $obj->getUserType($uid);
if($checkarr['status']==STATUS_KILL)
{
return false;
}
//--插入微博客数据库
$startTime = getmicrotime();
$objMblog = ClsFactory::Create('data::dMblog');
$mid = $objMblog->add($uid, $content, $appid, $tag, $filterString, $ip, $ctime, $statusArr['status']);
$act_status = $mid===false ? 0 : 1;
$message = array(SOURCE_WWW, $act_status);
record_logMon(SERVICE_ADD_MBLOG_DATA, $startTime, $message);
if($mid===false) return false;
// 更新Feed和Myfeed缓存
$mblogch = array(
'mid' => $mid,
'uid' => $uid,
'content' => $content,
'appid' => $appid,
'tag' => $tag,
'ip' => $ip,
'ctime' => $ctime,
'status' => $checkarr['status'],
'filter' => $filterString,
);
$objMblog->setNewMyfeedByMc($uid, $mblogch, 10); // wap用
$objMblog->setNewMyfeedByMc($uid, $mblogch, MBLOG_PAGE_SIZE);
$objMblog->setNewFeedByMc($uid, $mblogch, MBLOG_PAGE_SIZE);
//ligang1 add
$objMblog->setNewFilterFeedByMc($uid, $mblogch, MBLOG_PAGE_SIZE, $mblogch['filter']);
$oMscore = ClsFactory::Create('model::mScore');
$userRank = $oMscore->getRankList(array($uid));
//--插入myfeed库
$objDfeed = ClsFactory::Create('data::dFeed');
$objDfeed -> addtoMyFeed($uid, $mid);
// 获取IP信息
$o_ip = ClsFactory::Create('data::dIp');
$ips = $o_ip->getFormatInfoByIp($ip, true);
$zone = "{$ips['province']}:{$ips['city']}";
//--写入feed表
$feeddata = array();
$feeddata['uid'] = $uid;
$feeddata['content'] = $mblogText;
// $feeddata['data'] = $content;
$feeddata['tag'] = $tag;
$feeddata['ctime'] = $ctime;
$feeddata['ip'] = $ip;
$feeddata['zone'] = $zone;
$feeddata['appid'] = $appid;
$feeddata['usertype'] = $usertype;
$feeddata['mid'] = $mid;
$feeddata['islink'] = $filterAr[MBLOG_FILTER_LINK];
$feeddata['ispic'] = $filterAr[MBLOG_FILTER_PIC];
$feeddata['isat'] = $filterAr[MBLOG_FILTER_AT];
$feeddata['isrt'] = 0;
$feeddata['filter'] = $filterString;
$feeddata['status'] = $checkarr['status'];
$feeddata['kwdlevel'] = $checkarr['kwdlevel'];
$feeddata['zonelevel'] = $checkarr['zonelevel'];
$feeddata['userlevel'] = $checkarr['userlevel'];
$feeddata['rank'] = $userRank[$uid];
$feeddata['is_push_search'] = $checkarr['is_push_search'];
$feeddata['searchMcq'] = $searchMcq;
$feeddata['user_type'] = $checkarr['usertype'];
// 如果是搜索页过来的,直接推搜索而不走搜索队列
if($feeddata['is_push_search'] && !$searchMcq
&& $feeddata['rank']>=MBLOG_UPLOADPIC_USER_LEVEL
&& !in_array($feeddata['usertype'], array(BLACK_USER, DANGER_USER))) {
$searchData = array(
'mid' => $feeddata['mid'],
'uid' => $feeddata['uid'],
'data' => $content,
'content' => $feeddata['content'],
'tag' => $feeddata['tag'],
'ctime' => $feeddata['ctime'],
'ip' => $feeddata['ip'],
'zone' => $feeddata['zone'],
'appid' => $feeddata['appid'],
'filter' => $feeddata['filter'],
'usertype' => $feeddata['usertype'],
);
$oSearch->postData('add', $searchData);
}
//--增加积分,写队列
if(!isset($arrData['reason']) || $statusArr['status']==STATUS_FIRST_CHECK)
{
$mScoreObj = ClsFactory::Create("model::mScore");
$mblogRet = $mScoreObj ->collectBehavior(SCORE_SEND_MBLOG,$uid);
$dfeedobj = ClsFactory::Create("data::dFeed");
$dfeedobj->addtoMcq($uid,$feeddata['mid'],$feeddata,"add"
;
//ligang1 add for imbot.
if(in_array($feeddata['status'], array(STATUS_FIRST_CHECK,STATUS_UNCHECK,STATUS_CHECKED,STATUS_NOSEARCH))) {
$dimbotobj = ClsFactory::Create("data::dImBot");
$dimbotobj->addtoMcq(array('type'=>'0','info'=>array('uid'=>$uid,'mid'=>$feeddata['mid'])));
}
//ligang1 add end
}
//--增加计数器
if(in_array($checkarr['status'], array(STATUS_UNCHECK,STATUS_CHECKED,STATUS_NOSEARCH))) {
$o_counter = ClsFactory::Create('model::mCounter');
$o_counter->increment(COUNT_SAVE_MBLOG_MYFEED, $uid);
}
//--格式化数据返回,由JS回写到页面
$feeddata['content'] = $content;
$returnData = $this->mapping(array($feeddata['mid']=>$feeddata));
return $returnData;
}
/**
* 当用户关注某个人后,需要给被关注人发feed
*
* @param integer $starid(被关注id)
* @param integer $fansid(关注人id)
* @return false
*/
public function followSameOneFeed($starid,$fansid){
$dfeedobj = ClsFactory::Create("data::dFeed");
$re = $dfeedobj->followSameOneFeed($starid,$fansid);
return $re;
}
/**
* 删除微博客
*
* @param integer $mid
* @param integer $ownerUid
* @return unknown
*/
public function delete($mid, $ownerUid,$ip='',$isWap=false) {
$objMblog = ClsFactory::Create('data::dMblog');
$mblogInfo = $this->getMblogByMids(array($mid));
//删除缓存中的信息
$objMblog->delMyfeedByMc($ownerUid, 10); // wap用
$objMblog->delMyfeedByMc($ownerUid, MBLOG_PAGE_SIZE);
$objMblog->delFeedByMc($ownerUid, MBLOG_PAGE_SIZE);
//ligang1 add
$objMblog->delFilterFeedByMc($ownerUid, MBLOG_PAGE_SIZE);
// 删除图片
/*
$info = $this->getMblogByMids(array($mid));
if($info===false) return false;
$pids = $info[$mid]['data']['pic'];
if(!empty($pids)) {
$o_image = ClsFactory::Create('model::mImage');
$o_image->delImage($pids);
}*/
// 删除微博客主题
$bRet = $objMblog->delete($mid, $ownerUid);
//统计数据需要
$ssm = ClsFactory::Create('tools::log::SSM_Miniblog');
//$ssm->isDebug = true;
$ssm->property['datetime'] = date('Y-m-d'
;
$ssm->property['operator'] = $ownerUid;
$ssm->property['clientip'] = $ip;
if($isWap) {
$ssm->property['source'] = MBLOG_APP_WAP;
} else {
$ssm->property['source'] = MBLOG_APP_MBLOG;
}
if($bRet === false) {
$ssm->property['status'] = SSM_LOG_STATUS_FAIL;
} else {
$ssm->property['status'] = SSM_LOG_STATUS_SUCC;
}
$ssm->property['action'] = 1;
$ssm->property['object'] = $mid;
$ssm->log(SSM_LOG_ACTION_MBLOGDEL, SSM_LOG_ACTION_MBLOGDEL);
if($bRet===false) return false;
//--实时删除myfeed
$dfeedobj = ClsFactory::Create("data::dFeed");
$dfeedobj->delMyFeed($ownerUid, $mid);
//--队列删除
$dfeedobj->addtoMcq($ownerUid,$mid,array(),"del"
;
//--删除积分
$mScoreObj = ClsFactory::Create("model::mScore");
$mScoreObj->collectBehavior(SCORE_SELF_DEL_MBLOG, $ownerUid);
//--减少计数器
$o_counter = ClsFactory::Create('model::mCounter');
$o_counter->decrement(COUNT_SAVE_MBLOG_MYFEED, $ownerUid);
// 如果是转发,转发计数器减1
if($mblogInfo[$mid]['appid']==MBLOG_APP_TRANSMIT) {
$rootMid = $mblogInfo[$mid]['data']['rootmid'];
$fromMid = $mblogInfo[$mid]['data']['rtmid'];
$o_counter->decrement(COUNT_SAVE_MBLOG_RT, $rootMid);
if($fromMid!=$rootMid) {
$o_counter->decrement(COUNT_SAVE_MBLOG_RT, $fromMid);
}
}
# LOG MID TO MCQ @ 9013
$this->logMBlogDeletion($mid);
return $bRet;
}
/**
* 渲染tag显示
*
* @param string $content
* @return string
*/
public function renderTag($content, $istarget=false) {
$istarget = $istarget ? 1 : 0;
$content = str_replace("#", "#", $content);
$content = str_replace ( ''', '\'', $content );
$content = str_replace ( ''', '\'', $content );
$str = preg_replace("/#([^#]+)#/ise", "stripTag('\\1','\\0', {$istarget})", $content);
return $str;
}
public function delTag($content) {
$content = str_replace("#", "#", $content);
return preg_replace("/#([^#]+)#/is", '', $content);
}
/**
* 获取用户的微博客计数器
*
* @param integer $OwnerUid
* @return integer
*/
public function getPersonMblogCount($OwnerUid) {
$o_counter = ClsFactory::Create('model::mCounter');
$result = $o_counter->query(COUNT_SAVE_MBLOG_MYFEED, array($OwnerUid));
return $result[$OwnerUid];
}
/**
* 获取微博客转发计数器
*
* @param array $mids
* @return int
*/
public function getMblogsRtCount($mids) {
$o_counter = ClsFactory::Create('model::mCounter');
$mCountRet = $o_counter->query(COUNT_SAVE_MBLOG_RT, $mids);
return $mCountRet;
}
/**
* 获取某人的微博客列表,如果两个UID相同则会直接调用,否则会去掉不可见数据
*
* @param integer $VisitUid 访问者的uid
* @param integer $OwnerUid 资源所有者的uid
* @return unknown
*/
public function getPersonMblogList($cuid, $ouid, $filter, $page, $pageSize=MBLOG_PAGE_SIZE, $source='mblog') {
$cuid += 0;
$ouid += 0;
$filter += 0;
$page += 0;
$pageSize += 0;
if($ouid<=0 or $page<=0 or $pageSize<=0) return false;
// 从缓存取数据
$o_mblog = ClsFactory::Create('data::dMblog');
if($page==1) $mblogList = $o_mblog->getMyfeedByMc($ouid, $pageSize);
// 取不到的处理流程
if($mblogList===false or empty($mblogList) or is_null($mblogList)) {
$o_feed = ClsFactory::Create('data::dFeed');
$feedlist = $o_feed->getMyFeedList($ouid, $page, $pageSize);
if($feedlist===false) return false;
$mids = array_map(create_function('$a','return $a["mid"];'), $feedlist);
$mids = array_values(array_unique($mids));
$mblogList = $o_mblog->getMblogByMids($mids);
if($mblogList===false) return false;
// 种缓存
$mblogList = $this->filterStatus($mblogList, $cuid);
usort($mblogList, create_function('$a,$b','return strtotime($b["ctime"])-strtotime($a["ctime"]);'));
if($page==1) $o_mblog->setMyfeedByMc($ouid, $mblogList, $pageSize);
}else {
$mblogList = $this->filterStatus($mblogList, $cuid);
}
$mblogList = $this->mapping($mblogList, $source, true);
if($mblogList===false) return false;
return $mblogList;
}
/**
* 按筛选条件获取某人微博列表
*
* @param unknown_type $uid
* @param unknown_type $filteType
* @return unknown
*/
public function getMblogListByFilter($uid, $filteType) {
$objMblog = ClsFactory::Create('data::dMblog');
$bRet = $objMblog->getMblogListByFilter($uid, $filteType);
return $bRet;
}
/**
* 修改某条微博客状态,同时自动对myfeed及计数器进行操作
*
* @param integer $mids
* @param integer $status
* @return unknown
*/
public function modifyMblogStatus($mids, $status) {
if(!is_array($mids) or empty($mids)) return false;
$o_mblog = ClsFactory::Create('data::dMblog');
$mblog = $o_mblog->getMblogByMids($mids);
if($mblog===false) return false;
$bRet = $o_mblog->modifyMblogStatus($mids, $status);
if(!$bRet) return false;
$o_feed = ClsFactory::Create('data::dFeed');
$deletion = array();
foreach($mblog as $mid => $v) {//删除或新增myfeed
$v['status'] = $v['status'] + 0;
if($v['status']==$status) continue;
if(in_array($v['status'], $GLOBALS['SCOPE_STATUS'][SCOPE_STATUS_SELF]) && in_array($status, $GLOBALS['SCOPE_STATUS'][SCOPE_STATUS_NOSHOW])) {
$o_feed->delMyFeed($v['uid'],$mid);
# 记录待删除的mid
$deletion[] = $mid;
}else
if(in_array($v['status'], $GLOBALS['SCOPE_STATUS'][SCOPE_STATUS_NOSHOW]) && in_array($status, $GLOBALS['SCOPE_STATUS'][SCOPE_STATUS_SELF])) {
$o_feed->addtoMyFeed($v['uid'],$mid,$v['ctime']);
}
}
// 新计数器
$o_counter = ClsFactory::Create('model::mCounter');
foreach($mblog as $v) {
$v['status'] = $v['status'] + 0;
if($v['status']==$status) continue;
if(in_array($v['status'], $GLOBALS['SCOPE_STATUS'][SCOPE_STATUS_SELF]) && in_array($status, $GLOBALS['SCOPE_STATUS'][SCOPE_STATUS_NOSHOW])) {
$o_counter->decrement(COUNT_SAVE_MBLOG_MYFEED, $v['uid']);
}else
if(in_array($v['status'], $GLOBALS['SCOPE_STATUS'][SCOPE_STATUS_NOSHOW]) && in_array($status, $GLOBALS['SCOPE_STATUS'][SCOPE_STATUS_SELF])) {
$o_counter->increment(COUNT_SAVE_MBLOG_MYFEED, $v['uid']);
}
//删除缓存中的信息
$o_mblog->delMyfeedByMc($v['uid'], 10); //wap
$o_mblog->delMyfeedByMc($v['uid'], MBLOG_PAGE_SIZE);
$o_mblog->delFeedByMc($v['uid'], MBLOG_PAGE_SIZE);
//ligang1 add
$o_mblog->delFilterFeedByMc($v['uid'], MBLOG_PAGE_SIZE, $v['filter']);
}
# 记录删除的mid到mcq
$this->logMBlogDeletion($deletion);
unset($o_counter,$o_feed,$mblog,$o_mblog);
return true;
}
/**
* 根据mid列表批量查询转发信息
*
* @param array $mids
* @return array
*/
public function getTransmitByMids($mids) {
$o_mblog = ClsFactory::Create('data::dMblog');
$list = $o_mblog->getTransmitByMids($mids);
return $list;
}
/**
* 添加一条转发关系
*
* @param integer $uid 转发者uid
* @param integer $fromMid 来源资源id
* @param string $reason 转发理由
* @param string $ip 转发者ip地址
* @param string $ctime 转发时间(DateTime格式)
* @param integer $status 微博状态
* @param bool $iscommTran 是否评论转发
* @return array
*/
public function transmit($uid, $fromMid, $reason, $appid, $ip, $ctime, $status=0, $searchMcq=true,$isWap=false,$iscommTran=false) {
//检查sass
$mSassobj = ClsFactory::Create('model::mSass');
$issasskill = $mSassobj->checkPostBlog($uid);
if($issasskill) {
$errorcode = $mSassobj->getErrmsg();
if($errorcode == SASS_COMMON_PUBLISH_REJECT_PRIMARY) {
return array("code" => "M02014"
;
} elseif($errorcode == SASS_COMMON_PUBLISH_REJECT_ADVANCED) {
return array("code" => "M02015"
;
}
return array("code" => "M02003"
;
}
//检查sass结束
$adminObj = ClsFactory::Create("model::mAdminCheck");
$personObj = ClsFactory::Create("model::mPerson");
$userInfo = $personObj->getUserInfo($uid, true);
$arr = $adminObj->checkPubMblog($userInfo, array('content'=>$reason,'appid'=>$appid,'ip'=>$ip));
if($arr['kwdlevel'] == KEYWORD_FORBID) {
return array("code" => "M00006"
;
}
if($arr['status'] == STATUS_KILL){
return array("code" => "M00005"
;
}
elseif ($arr['usergrouplevel'] == STATUS_KILL)
{
return array("code" => "M02009"
;
}
$usertype = $adminObj->getUserType($uid);
$checkarr = $arr;
$o_mblog = ClsFactory::Create('data::dMblog');
$o_base62 = ClsFactory::Create('tools::encode::base62Parse');
//取根mblog
$bRet = $this->getMblogByMids(array($fromMid), 'mblog', false, true, '', false);
if(!$bRet) return false;
$mblog = $bRet[$fromMid];
// 获取根微博的mid
if(empty($mblog['data']['rootmid62'])) {
$traninfo = $o_mblog->getTransmitByMids($fromMid);
$rootMid = !empty($traninfo) ? $traninfo[$fromMid]['rootmid'] : $fromMid;
} else {
$rootMid = $o_base62->decode($mblog['data']['rootmid62']);
}
//检查后台是否允许转发
$fromUid = $bRet[$fromMid]['uid'];
$fromUserInfo = $personObj->getUserInfo($fromUid,true);
$ckInfo = $adminObj->checkMblogPower($fromUserInfo,$rootMid);
if($ckInfo['fwd'] == MBLOGSET_RT_FORBID){
return array("code" => "M02011"
;
}else
if($ckInfo['fwd'] == MBLOGSET_RT_CLOSE) {
$checkarr['status'] = STATUS_FIRST_CHECK;
$checkarr['is_push_search'] = false;
}
/*--检查用户自己不可以转发自己的微博客
if ($bRet[$fromMid]['uid'] == $uid)
{
return false;
}*/
if (mb_strwidth($reason, "UTF-8"
> MBLOG_CONTENT_MAX_SIZE)
{
$reason = mb_strimwidth($reason, 0, MBLOG_CONTENT_MAX_SIZE, "", "UTF-8");
}
//入库前就做html转义
$reason = htmlspecialchars($reason);
// 解析连接成短连接
$strinShortUrl = array();
$objAnalyzeLink = ClsFactory::Create("tools::analyze::TAnalyzeLink");
$bRet = $objAnalyzeLink->getData(array('content'=>$reason,'from'=>MBLOG_ACTION_FORWARD),$strinShortUrl,$videoArr);
if($bRet!==false) $reason = $bRet;
// 增加必要字段
$mblog['data']['uid'] = $uid;
$mblog['data']['fromuid'] = $mblog['uid'];
$mblog['data']['rootuid'] = $rootMid==$fromMid ? $mblog['uid'] : $mblog['data']['rootuid'];
$mblog['data']['rootmid'] = $rootMid;
$mblog['data']['rootmid62'] = $o_base62->encode($rootMid);
$mblog['data']['rtmid'] = $fromMid;
$mblog['data']['rtmid62'] = $o_base62->encode($fromMid);
$mblog['data']['reason'] = $reason;
$mblog['isat'] = 0;
$atUsers_Reason = array();
$objAtUser = ClsFactory::Create("model::mAtUser");
$atUsers = $objAtUser->getAtUsername($reason);
if(count($atUsers)>0){
foreach($atUsers as $name) {
$name = strval($name);
$mblog['data']['atUsers'][$name] = $name;
$atUsers_Reason[$name] = $name;
}
$mblog['filter'] |= 8;
$mblog['isat'] = 1;
}
//if($mblog['data']['rootuid'] != $uid) {
$rootUserInfo = $personObj->getUserInfo($mblog['data']['rootuid'], false);
if($rootUserInfo !== false) {
$rootNick = $rootUserInfo['name'];
if (!$iscommTran) {
$mblog['data']['atUsers'][$rootNick] = $rootNick;
$atUsers_Reason[$rootNick] = $rootNick;
}
}
$mblog['isat'] = 1;
//}
// 获取新的filter标识
$o_search = ClsFactory::Create('data::dSearch');
$arfilter = $o_search->decodeFilter($mblog['filter']);
$arfilter[MBLOG_FILTER_RET] = true;
if(!empty($videoArr)){
$mblog['data']['video'] = $videoArr;
$arfilter[MBLOG_FILTER_VIDEO] = true;
}
$mblog['filter'] = $o_search->encodeFilter($arfilter);
//--获取tag内容
$isTag = false;
$objAnalyzeTag = ClsFactory::Create("tools::analyze::TAnalyzeTag");
$tags = $objAnalyzeTag->getData($mblog['data']['reason']);
if ($tags !== FALSE) $isTag = true;
// 写微博客信息
$insertmbloginfo = $this->insertMblog($uid, serialize($mblog['data']),$appid, $mblog['tag'],$arfilter, $ip, $ctime, $checkarr);
if(is_array($insertmbloginfo)){
$midtmp = array_keys($insertmbloginfo);
$mid = $midtmp[0];
}
//统计数据需要
foreach($insertmbloginfo as $mid => $mInfo) {
$ssm = ClsFactory::Create('tools::log::SSM_Miniblog');
$ssm->ext_log = array();
if(is_array($strinShortUrl) && count($strinShortUrl) > 0) {
$ssm->ext_log['shortUrl'] = implode(";", $strinShortUrl);
}
if($mInfo['appid'] === MBLOG_APP_SHARE) {
$ssm->ext_log['isShare'] = "1";
}
if($filterAr[MBLOG_FILTER_LINK]) {
$ssm->ext_log['islink'] = "1";
}
if($filterAr[MBLOG_FILTER_PIC]) {
$ssm->ext_log["isPic"] = "1";
}
if($filterAr[MBLOG_FILTER_VIDEO]) {
$ssm->ext_log["isVideo"] = "1";
}
if($mInfo['appid'] === MBLOG_APP_TRANSMIT) {
$ssm->ext_log["isTransmit"] = "1";
}
if($mInfo['appid'] === MBLOG_APP_SHARE) {
$ssm->ext_log["isShare"] = "1";
}
if($isTag === true) {
$ssm->ext_log["isTopic"] = "1";
}
//得到博文字节数
$mblogsize = mb_strwidth($mblog['data']['reason'], "UTF-8");
$ssm->ext_log["size"] = $mblogsize;
if($mInfo['appid'] === MBLOG_APP_TRANSMIT) {
$ssm->ext_log['rtmid'] = $mInfo['data']["rtmid"];
$ssm->ext_log['rootuid'] = $mInfo['data']["rootuid"];
$ssm->ext_log['rootmid'] = $mInfo['data']["rootmid"];
}
//$ssm->isDebug = true;
$ssm->property['datetime'] = date('Y-m-d'
;
$ssm->property['clientip'] = $ip;
$ssm->property['operator'] = $uid;
if($isWap) {
$ssm->property['source'] = MBLOG_APP_WAP;
} else {
$ssm->property['source'] = MBLOG_APP_MBLOG;
}
if($mid === false) {
$ssm->property['status'] = SSM_LOG_STATUS_FAIL;
} else {
$ssm->property['status'] = SSM_LOG_STATUS_SUCC;
}
$ssm->property['object'] = $mid;
if($mInfo['appid'] === MBLOG_APP_TRANSMIT) {
$ssm->property['otheruid'] = $mInfo['data']["fromuid"];
}
$ext = implode(",", $ssm->ext_log);
$ssm->property['extfields'] = $ext;
$ssm->log(SSM_LOG_ACTION_MBLOGPUB, SSM_LOG_ACTION_MBLOGPUB);
}
if($mid===false) return false;
// 写转发关系
$bRet = $o_mblog->addForward($mid, $mblog['uid'], $uid, $rootMid, $fromMid);
if($bRet===false)
{
if($checkarr['status'] == STATUS_FIRST_CHECK){
return array("code" => "M02005"
;
}else
return false;
}
//增加积分
$mScoreObj = ClsFactory::Create("model::mScore");
$mScoreObj ->collectBehavior(SCORE_TRANSTER,$uid,$mblog['uid']);
// 写myfeed
$o_feed = ClsFactory::Create('data::dFeed');
//$o_feed->addtoMyFeed($uid, $mid);
$oMscore = ClsFactory::Create('model::mScore');
$userRank = $oMscore->getRankList(array($uid));
$mblog['data']['atUsers'] = $atUsers_Reason; //只分发reason里面的@用户
// 获取IP信息
$o_ip = ClsFactory::Create('data::dIp');
$ips = $o_ip->getFormatInfoByIp($ip, true);
$zone = "{$ips['province']}:{$ips['city']}";
// 队列分发
$feeddata = array(
'mid' => $mid,
'uid' => $uid,
'content' => $mblog['data']['text'],
// 'data' => serialize($mblog['data']),
'tag' => $mblog['tag'],
'ctime' => $ctime,
'ip' => $ip,
'zone' => $zone,
'appid' => $appid,
'usertype' => $usertype,
'filter' => $mblog['filter'],
'status' => $checkarr['status'],
'kwdlevel' => $checkarr['kwdlevel'],
'zonelevel' => $checkarr['zonelevel'],
'userlevel' => $checkarr['userlevel'],
'parentid' => $fromMid,
'rootid' => $rootMid,
'rank' => $userRank[$uid],
'isrt' => 1,
'is_push_search'=> $checkarr['is_push_search'],
'searchMcq' => $searchMcq,
'isat' =>$mblog['isat'],
'user_type' => $checkarr['usertype'],
);
if(!$searchMcq) {
$oSearch = ClsFactory::Create('model::mSearch');
$searchData = array(
'mid' => $feeddata['mid'],
'uid' => $feeddata['uid'],
'data' => serialize($mblog['data']),
'content' => $reason,
'tag' => $feeddata['tag'],
'ctime' => $feeddata['ctime'],
'ip' => $feeddata['ip'],
'zone' => $feeddata['zone'],
'appid' => $feeddata['appid'],
'filter' => $feeddata['filter'],
'usertype' => $feeddata['usertype'],
);
$bRet = $oSearch->postData('add', $searchData);
}
$o_feed->addtoMcq($uid,$mid,$feeddata,"add"
;
//ligang1 add for imbot.
$dimbotobj = ClsFactory::Create("data::dImBot");
$dimbotobj->addtoMcq(array('type'=>'0','info'=>array('uid'=>$uid,'mid'=>$feeddata['mid'])));
//ligang1 add end
$o_counter = ClsFactory::Create('model::mCounter');
$o_counter->increment(COUNT_SAVE_MBLOG_RT, $fromMid);
if($fromMid!=$rootMid) {
$o_counter->increment(COUNT_SAVE_MBLOG_RT, $rootMid);
}
if($checkarr['status'] == STATUS_FIRST_CHECK){
return array("code" => "M02005"
;
}
elseif($checkarr['usergrouplevel'] == STATUS_FIRST_CHECK){
return array("code" => "M02005"
;
}
return $mid;
}
/**
* 根据资源id删除转发关系
*
* @param integer $mid 资源id
* @return boolean
*/
public function delForwardByMid($mid) {
$o_mblog = ClsFactory::Create('data::dMblog');
$bRet = $o_mblog->delForwardByMid($mid);
return $bRet;
}
/**
* 从缓存获取某人的feed列表,widget专用
*
* @param integer $ouid
* @param integer $pagesize
* @return array
*/
public function getMyFeedMblogFromCache($ouid, $pagesize) {
$o_mblog = ClsFactory::Create('data::dMblog');
$mblog = $o_mblog->getMyFeedMblogFromCache($ouid);
if($mblog===false) {
$mblog = $this->getPersonMblogList(0, $ouid, MBLOG_FILTER_DEFAULT, 1, MBLOG_PAGE_SIZE, 'widget_blog'
;
if($mblog===false) return false;
$bRet = $o_mblog->saveMyFeedMblogToCache($ouid, $mblog);
if($bRet===false) return false;
$mblog = array_slice($mblog, 0, $pagesize);
}
return $mblog;
}
/**
* 从缓存获取某人的关注feed列表,widget专用
*
* @param integer $ouid
* @param integer $pagesize
* @return array
*/
public function getAttFeedMblogFromCache($ouid, $pagesize) {
$o_mblog = ClsFactory::Create('data::dMblog');
$mblog = $o_mblog->getAttFeedMblogFromCache($ouid);
if($mblog===false) {
$mblog = $this->getAttMblogInPage(0, $ouid, 1, 20, MBLOG_FILTER_DEFAULT, 'widget'
;
if($mblog===false) return false;
$bRet = $o_mblog->saveAttFeedMblogToCache($ouid, $mblog);
if($bRet===false) return false;
$mblog['record'] = array_slice($mblog['record'], 0, $pagesize);
}
return $mblog;
}
/**
* 获取某人的最新feed数
*
* @param integer $uid
* @param integer $endmid 暂时不用
* @return array
*/
public function getNewFeedNum($uid,$endmid=0) {
$o_feed = ClsFactory::Create('data::dFeed');
$num = $o_feed->getUnReadFeedCache($uid);
return $num+0;
}
/**
* 清除某人的最新feed数
*
* @param integer $uid
* @return boolean
*/
public function clearUnReadFeedCache($uid) {
$o_feed = ClsFactory::Create('data::dFeed');
$re = $o_feed->clearUnReadFeedCache($uid);
return $re;
}
/**
* 获取某人的关注feed列表
*
* @param integer $ouid
* @param integer $filter
* @param string $source
* @return array
*/
private function getAttMids($uid, $page, $pagesize) {
$o_feed = ClsFactory::Create('data::dFeed');
$list = $o_feed->getFeedList($uid, ($page-1)*$pagesize, $pagesize);
if($list===false) return false;
if(empty($list)) return array('dCount'=>0, 'mids'=>array());
$dCount = count($list);
$mids = array_map(create_function('$a','return $a["mid"];'), $list);
$mids = array_values(array_unique($mids));
$result = array('dCount'=>$dCount, 'mids'=>$mids);
return $result;
}
/**
* 记录所有删除的mid到mcq
*
* @param array $mids
* @return boolean
*/
public function logMBlogDeletion($mids)
{
$dmblog = ClsFactory::Create('data::dMblog');
return $dmblog->logMBlogDeletion($mids);
}
/**
* 修改单篇微博客
*
* @param int $mid
* @param int $ownerUid
* @param string $content
* @param string $pic
* @param bool $modifyrt
* @return true or fasle
*/
public function modifyMblog($mid,$ownerUid,$content,$pic='',$status=0,$modifyrt=false,$atUsers="")
{
$dMblogobj = ClsFactory::Create('data::dMblog');
$ominfo = $dMblogobj->getMblogByMids(array($mid));
$ispic = 0;
$islink = 0;
$isat = 0;
if (!empty($pic))
{
$ispic = 1;
if (!is_array($pic))
{
$pic = array($pic);
}
}
if (mb_strwidth($content, "UTF-8"
> MBLOG_CONTENT_MAX_SIZE)
{
$content = mb_strimwidth($content, 0, MBLOG_CONTENT_MAX_SIZE, "", "UTF-8");
}
if($status != 1) {
$content = htmlspecialchars($content);
}
$objAnalyzeLink = ClsFactory::Create("tools::analyze::TAnalyzeLink");
$bRet = $objAnalyzeLink->getData(array('content'=>$content,'from'=>MBLOG_ACTION_MBLOG));
if ($bRet !== FALSE)
{
$islink = 1;
$content = $bRet;
}
//--获取tag内容
$objAnalyzeTag = ClsFactory::Create("tools::analyze::TAnalyzeTag");
$bRet = $objAnalyzeTag->getData($content);
if ($bRet !== FALSE)
{
$tag = $bRet;
}
$filterAr = array(
MBLOG_FILTER_PIC => $ispic,
MBLOG_FILTER_LINK => $islink,
MBLOG_FILTER_AT => $isat,
);
$mblogContent = array();
$mblogContent['text'] = $content;
$mblogContent['pic'] = $pic;
$mblogContent['uid'] = $ownerUid;
if(is_array($atUsers) && count($atUsers) > 0) {
$mblogContent['atUsers'] = $atUsers;
$filterAr[MBLOG_FILTER_AT] = 1;
}
$oSearch = ClsFactory::Create('model::mSearch');
$mblogContentString = serialize($mblogContent);
$filterString = $oSearch->encodeFilter($filterAr);
if($ominfo[$mid]['appid']==MBLOG_APP_TRANSMIT)
{
$contentar = unserialize($ominfo[$mid]['content']);
$contentar['reason']= $content;
$mblogContentString = serialize($contentar);
}
$dMblogobj = ClsFactory::Create('data::dMblog');
$dMblogobj->modifyMblog($mid,$mblogContentString,$tag,$filterString);
//删除缓存中的信息
$dMblogobj->delMyfeedByMc($ownerUid, 10); // wap用
$dMblogobj->delMyfeedByMc($ownerUid, MBLOG_PAGE_SIZE);
$dMblogobj->delFeedByMc($ownerUid, MBLOG_PAGE_SIZE);
return true;
}
/**
* 过滤微博列表中不显示的微博
*
* @param array $mblogList
* @param interger $cuid
* @param interger $statusScope
* SCOPE_STATUS_PUBLIC:所有人可见
* SCOPE_STATUS_SELF:自己可见
* SCOPE_STATUS_SEARCH:搜索可见
* default: 全部
*/
public function filterStatus($mblogList, $cuid="", $statusScope=SCOPE_STATUS_SELF) {
if(!is_array($mblogList) || !isset($GLOBALS['SCOPE_STATUS'][$statusScope])) {
return $mblogList;
}
foreach($mblogList as $k => $v) {
if($v===false) continue;
if(!in_array($v['status'], $GLOBALS['SCOPE_STATUS'][$statusScope])) {
unset($mblogList[$k]);
continue;
}
if($v['status'] == STATUS_SELF && $cuid != $v['uid']) {
unset($mblogList[$k]);
}
}
return $mblogList;
}
// 后台专用清除缓存
public function delMc_Admin($ownerUid) {
$objMblog = ClsFactory::Create('data::dMblog');
$objMblog->delMyfeedByMc($ownerUid, 10); // wap用
$objMblog->delMyfeedByMc($ownerUid, MBLOG_PAGE_SIZE);
$objMblog->delFeedByMc($ownerUid, MBLOG_PAGE_SIZE);
$objMblog->delFilterFeedByMc($ownerUid, MBLOG_PAGE_SIZE);
}
/**
* 获取最后一条微博
*
* @param array $uids uid数组
* @return array|false array( uid1=>array(uid=>,ctime=>,mid=>
,
* uid2=>array(uid=>,ctime=>,mid=>
,
* ......
* )
*/
public function getLastMblog($uids){
if(!is_array($uids)) return false;
foreach($uids as $k => &$uid) {
if(!is_numeric($uid)) {
unset($uids[$k]);
continue;
}
$uid += 0;
if($uid<=0) unset($uids[$k]);
}
if(empty($uids)) return false;
$dMblogobj = ClsFactory::Create('data::dMblog');
$infos = $dMblogobj->getLastMblog($uids);
if($infos===false) return false;
return $infos;
}
public function getLastMblogContents($uids){
$o_time = ClsFactory::Create('tools::formatter::TimeFormatter');
$infos = $this->getLastMblog($uids);
if($infos === false) return false;
foreach ($infos as $v){
$mids[] = $v['mid'];
}
$tmpMblogs = $this->getMblogByMids($mids);
if($tmpMblogs === false) return false;
foreach ($tmpMblogs as $v){
$content = ($v['appid'] == MBLOG_APP_TRANSMIT) ? $v['data']['reason'] : $v['data']['text'];
$content .= "(".$o_time->timeFormat($v['ctime'])."
";
$content = "".strip_tags($content)."";
$mblogs[$v['uid']] = $content;
}
return $mblogs;
}
}
function stripTag($str, $linkWord, $istarget=false) {
if ($str == MBLOG_PUBLISH_DEFUALT_TAG)
{
return "";
}
if(preg_match("!http\:\/\/[a-zA-Z0-9\$\-\_\.\+\!\*\'\,\{\}\\\^\~\[\]\`\<\>\%\<\>\/\?\:\@\&\=]+!is", $str)) {
return $str;
}
$target = $istarget ? ' target="_blank"' : '';
$url = sprintf(SEARCH_MBLOG_URL, urlencode(urlencode(htmlspecialchars_decode($str))));
$str = ''.$linkWord.'';
return $str;
}
?>