' AND status in (1,2,6) ', '0' => ' AND status=0', '1' => ' AND status=1', '2' => ' AND status=2', '6' => ' AND status=6', '4' => ' AND status=1 AND price>0', '9' => ' AND status=9' );
var $ordertable = array ('all' => 'AND status in (1,2,6) ORDER BY time DESC', '0' => ' AND status=0 ORDER BY time DESC', '1' => ' AND status=1 ORDER BY time DESC', '2' => ' AND status=2 ORDER BY time DESC', '6' => ' AND status=6 ORDER BY time DESC,shangjin DESC,hasvoice DESC', '4' => ' AND status=1 AND price>0 ORDER BY time DESC, price DESC', '9' => ' AND status=9 ORDER BY time DESC,shangjin DESC,hasvoice DESC' );
function __construct() {
parent::__construct ();
$this->load->database ();
if ($this->base->setting ['xunsearch_open']) {
require_once $this->base->setting ['xunsearch_sdk_file'];
$xs = new XS ( XUNSEARCH_QUESTIONFILE );
$this->search = $xs->search;
$this->index = $xs->index;
}
}
//设为已解决
function change_to_solve($qids) {
$overdue_days = intval ( $this->base->setting ['overdue_days'] );
$endtime = $this->base->time + $overdue_days * 86400;
$adoptime = $this->base->time;
$qids=explode(',', $qids);
foreach ( $qids as $qid ) {
//先判断是否已经有采纳回答
$adoptanswer = $this->db->query ( "SELECT id,qid,supports FROM " . $this->db->dbprefix . "answer WHERE qid='$qid' and adopttime>0 order by supports desc " )->row_array ();
if (!$adoptanswer) {
$answer = $this->db->query ( "SELECT id,qid,supports FROM " . $this->db->dbprefix . "answer WHERE qid='$qid' order by supports desc " )->row_array ();
if ($answer) {
$aid=$answer['id'];
$this->db->query ( "UPDATE `" . $this->db->dbprefix . "question` set status=2, `endtime`=$endtime WHERE (status=6 OR status=1 OR status=9) AND answers>0 AND `id`=$qid" );
$this->db->query ( "UPDATE `" . $this->db->dbprefix . "answer` SET `adopttime`=$adoptime WHERE `id`=$aid" );
}
}
}
}
/* 采纳指定的答案,问题状态变为2 已解决 */
function adopt($qid, $answer) {
$time = $this->base->time;
$ret = $this->db->query ( "UPDATE " . $this->db->dbprefix . "answer SET adopttime='' WHERE qid=$qid" );
$ret = $this->db->query ( "UPDATE " . $this->db->dbprefix . "answer SET adopttime='$time' WHERE id=" . $answer ['id'] . " AND qid=$qid" );
if ($ret) {
$this->db->query ( "UPDATE " . $this->db->dbprefix . "question SET status=2 ,`endtime`='$time' WHERE id=" . $qid );
$this->db->query ( "UPDATE " . $this->db->dbprefix . "user SET adopts=adopts+1 WHERE uid=" . $answer ['authorid'] );
}
return $ret;
}
//设置最佳答案
function setbestanswer($question) {
$qid = $question ['id'];
$time = time ();
$answer = $this->db->query ( "SELECT * FROM " . $this->db->dbprefix . "answer WHERE qid=$qid AND status>0 AND adopttime =0 ORDER BY supports DESC,time asc " )->row_array ();
if ($answer == null) {
$this->update_status ( $qid, 9 );
return 0;
} else {
$ret = $this->adopt ( $qid, $answer );
$touid = $answer ['authorid'];
$quid = $question ['authorid'];
$cash_fee = intval ( $question ['shangjin'] ) * 100;
$adoptmoeny = $question ['shangjin'];
//回答者获得赏金
$this->db->query ( "UPDATE " . $this->db->dbprefix . "user SET `jine`=jine+'$cash_fee' WHERE `uid`=$touid" );
//被采纳获得赏金记录
if ($adoptmoeny > 0)
$this->db->query ( "INSERT INTO " . $this->db->dbprefix . "paylog SET type='adoptqid',typeid=$qid,money=$adoptmoeny,openid='',fromuid=$quid,touid=$touid,`time`=$time" ); //增加被采纳记录
return 1;
}
}
/* 获取问题信息 */
function get($id) {
$id=intval($id);
$query = $this->db->get_where ( 'question', array (
'id' => $id
) );
$question = $query->row_array ();
if ($question) {
$question ['format_time'] = tdate ( $question ['time'] );
$question ['ip'] = formatip ( $question ['ip'] );
$question ['user'] = $this->get_by_uid ( $question ['authorid'] );
if ($question ['askuid'] > 0) {
$question ['askuser'] = $this->get_by_uid ( $question ['askuid'] );
}
$question ['author_has_vertify'] = get_vertify_info ( $question ['authorid'] ); //用户是否认证
$question ['category_name'] = $this->base->category [$question ['cid']] ['name'];
if ($question ['hidden'] == 1) {
$question ['author_avartar'] = SITE_URL . 'static/css/default/avatar.gif';
} else {
$question ['author_avartar'] = get_avatar_dir ( $question ['authorid'] );
}
$question ['title'] = checkwordsglobal ( $question ['title'] );
$imgs=getfirstimg($question['description']);
$question ['shortdescription'] =clearhtml(checkwordsglobal ( htmlspecialchars_decode($question ['description'] )),100);
if($imgs&&count($imgs)>=1){
$question['shortdescription']="[图]".$question ['shortdescription'];
}
$question ['artlen']=mb_strlen(strip_tags(checkwordsglobal ( htmlspecialchars_decode($question ['description'] ) )));
$question ['description'] = checkwordsglobal ($question ['description'] );
}
return $question;
}
function get_by_title($title) {
$title=addslashes($title);
$query = $this->db->get_where ( 'question', array (
'title' => $title
) );
$question= $query->row_array ();
return $question;
}
function get_by_uid($uid) {
$uid=intval($uid);
$query = $this->db->get_where ( 'user', array (
'uid' => $uid
) );
$user= $query->row_array ();
if($user){
$user ['avatar'] = get_avatar_dir ( $uid );
$user ['groupname']=$this->usergroup [$user['groupid']]['grouptitle'];
return $user;
}else{
return null;
}
}
function get_by_titleanddesc($title, $desc) {
$title=addslashes($title);
$desc=addslashes($desc);
$query = $this->db->get_where ( 'question', array (
'title' => $title,
'title' => $title
) );
$question= $query->row_array ();
if($question){
return $question;
}else{
return null;
}
}
function get_list($start = 0, $limit = 10) {
$questionlist = array ();
$query = $this->db->query ( "SELECT * FROM `" . $this->db->dbprefix . "question` WHERE 1=1 limit $start , $limit" );
foreach ( $query->result_array () as $question ) {
$question ['author_has_vertify'] = get_vertify_info ( $question ['authorid'] ); //用户是否认证
$question ['category_name'] = $this->base->category [$question ['cid']] ['name'];
$question ['format_time'] = tdate ( $question ['time'] );
$question ['url'] = url ( 'question/view/' . $question ['id'], $question ['url'] );
$question ['title'] = checkwordsglobal ( $question ['title'] );
$question ['description'] = checkwordsglobal ( htmlspecialchars_decode($question ['description'] ) );
if ($question ['hidden'] == 1) {
$question ['avatar'] = SITE_URL . 'static/css/default/avatar.gif';
} else {
$question ['avatar'] = get_avatar_dir ( $question ['authorid'] );
}
$questionlist [] = $question;
}
return $questionlist;
}
//根据分类获取擅长该话题的人
function getinvatebycid($cid, $start = 0, $limit = 20) {
$userlist = $this->db->select ( "m.uid,m.username,m.answers,c.name,c.id as cid" )->where ( "c.id", $cid )->from ( 'user m' )->join ( 'user_category as uc', 'uc.uid=m.uid' )->join ( 'category as c', 'c.id=uc.cid' )->order_by ( "m.answers", "desc" )->limit ( $limit, $start )->get ()->result_array ();
$this->db->distinct ();
return $userlist;
}
//根据分类获取回答过该话题的人
function getinvatebyanswer($cid, $start = 0, $limit = 20) {
$userlist = $this->db->select ( "m.uid,m.username,m.answers,c.name,c.id as cid" )->where ( "c.id", $cid )->from ( 'user m' )->join ( 'answer as a', ' a.authorid=m.uid ' )->join ( 'question as q', 'q.id=a.qid' )->join ( 'category as c', 'c.id=q.cid' )->group_by ( "uid" )->limit ( $limit, $start )->get ()->result_array ();
return $userlist;
}
/* 获取问题标签 */
function get_words($str, $spword = ' ', $strlen = 300) {
$result = '';
return $result;
}
/* 前台问题搜索 */
function list_by_condition($condition, $start = 0, $limit = 10) {
$questionlist = array ();
$query = $this->db->query ( "SELECT * FROM `" . $this->db->dbprefix . "question` WHERE $condition order by time desc limit $start , $limit" );
foreach ( $query->result_array () as $question ) {
$question ['author_has_vertify'] = get_vertify_info ( $question ['authorid'] ); //用户是否认证
$question ['category_name'] = $this->base->category [$question ['cid']] ['name'];
$question ['format_time'] = tdate ( $question ['time'] );
$question ['url'] = url ( 'question/view/' . $question ['id'], $question ['url'] );
$question ['title'] = checkwordsglobal ( $question ['title'] );
$question ['description'] = checkwordsglobal (htmlspecialchars_decode($question ['description'] ) );
if ($question ['hidden'] == 1) {
$question ['avatar'] = SITE_URL . 'static/css/default/avatar.gif';
} else {
$question ['avatar'] = get_avatar_dir ( $question ['authorid'] );
}
$questionlist [] = $question;
}
return $questionlist;
}
function get_hots($start, $limit) {
$questionlist = array ();
$timestart = $this->base->time - 7 * 24 * 3600;
$timeend = $this->base->time;
$query = $this->db->query ( "SELECT * FROM " . $this->db->dbprefix . "question WHERE status in (1,2) AND `time`>$timestart AND `time`<$timeend ORDER BY answers DESC, `time` DESC LIMIT $start,$limit" );
foreach ( $query->result_array () as $question ) {
$question ['category_name'] = $this->base->category [$question ['cid']] ['name'];
$question ['format_time'] = tdate ( $question ['time'] );
$question ['title'] = checkwordsglobal ( $question ['title'] );
$question ['description'] = checkwordsglobal ( htmlspecialchars_decode($question ['description'] ) );
$questionlist [] = $question;
}
return $questionlist;
}
//统计全部已解决问题
function getallsolvequestion(){
$num=returnarraynum ( $this->db->query ( getwheresql ( 'question', 'status IN (2,6)', $this->db->dbprefix ) )->row_array () );
return $num;
}
//统计全部待决问题
function getallnosolvequestion(){
$num=returnarraynum ( $this->db->query ( getwheresql ( 'question', 'status in (1) ', $this->db->dbprefix ) )->row_array () );
return $num;
}
/* 后台问题数目 */
function rownum_by_search($title = '', $author = '', $datestart = '', $dateend = '', $status = '', $cid = 0) {
$title=addslashes($title);
$author=addslashes($author);
$datestart=addslashes($datestart);
$dateend=addslashes($dateend);
$status=addslashes($status);
$cid=intval($cid);
$condition = " 1=1 ";
$title && ($condition .= " AND `title` like '%$title%' ");
$author && ($condition .= " AND `author`='$author'");
$datestart && ($condition .= " AND `time`>= " . strtotime ( $datestart ));
$dateend && ($condition .= " AND `time`<= " . strtotime ( $dateend ));
if ($cid) {
$category = $this->base->category [$cid];
$condition .= " AND `cid" . $category ['grade'] . "`= $cid ";
}
isset ( $this->statustable [$status] ) && $condition .= $this->statustable [$status];
$query = $this->db->query ( "select count(*) as num from " . $this->db->dbprefix . "question where $condition " );
$m = $query->row_array ();
return $m ['num'];
}
/* 后台问题搜索 */
function list_by_search($title = '', $author = '', $datestart = '', $dateend = '', $status = '', $cid = 0, $start = 0, $limit = 10) {
$title=addslashes($title);
$author=addslashes($author);
$datestart=addslashes($datestart);
$dateend=addslashes($dateend);
$status=addslashes($status);
$cid=intval($cid);
$sql = "SELECT * FROM `" . $this->db->dbprefix . "question` WHERE 1=1 ";
$title && ($sql .= " AND `title` like '%$title%' ");
$author && ($sql .= " AND `author`='$author'");
$datestart && ($sql .= " AND `time` >= " . strtotime ( $datestart ));
$dateend && ($sql .= " AND `time` <= " . strtotime ( $dateend ));
if ($cid) {
$category = $this->base->category [$cid];
$sql .= " AND `cid" . $category ['grade'] . "`= $cid ";
}
isset ( $this->statustable [$status] ) && $sql .= $this->statustable [$status];
$sql .= " ORDER BY `time` DESC LIMIT $start,$limit";
$questionlist = array ();
$query = $this->db->query ( $sql );
foreach ( $query->result_array () as $question ) {
$question ['author_has_vertify'] = get_vertify_info ( $question ['authorid'] ); //用户是否认证
$question ['category_name'] = '';
isset ( $this->base->category [$question ['cid']] ) && $question ['category_name'] = $this->base->category [$question ['cid']] ['name'];
$question ['format_time'] = tdate ( $question ['time'] );
$question ['url'] = url ( 'question/view/' . $question ['id'] );
$question ['title'] = checkwordsglobal ( $question ['title'] );
$question ['description'] = checkwordsglobal (htmlspecialchars_decode($question ['description'] ) );
if ($question ['hidden'] == 1) {
$question ['avatar'] = SITE_URL . 'static/css/default/avatar.gif';
} else {
$question ['avatar'] = get_avatar_dir ( $question ['authorid'] );
}
$questionlist [] = $question;
}
return $questionlist;
}
//通过标签获取同类问题
function list_by_tag($name, $status = '1,2,6', $start = 0, $limit = 20) {
$name=addslashes($name);
$questionlist = array ();
//echo "SELECT * FROM `" . $this->db->dbprefix . "question` AS q," . $this->db->dbprefix . "question_tag AS t WHERE q.id=t.qid AND t.name='$name' AND q.status IN ($status) ORDER BY q.answers DESC,q.time DESC LIMIT $start,$limit";exit();
$query = $this->db->query ( "SELECT * FROM `" . $this->db->dbprefix . "question` AS q WHERE q.title like '%$name%' and q.status IN ($status) ORDER BY q.answers DESC,q.time DESC LIMIT $start,$limit" );
foreach ( $query->result_array () as $question ) {
$question ['category_name'] = $this->base->category [$question ['cid']] ['name'];
$question ['format_time'] = tdate ( $question ['time'] );
$question ['avatar'] = get_avatar_dir ( $question ['authorid'] );
$question ['url'] = url ( 'question/view/' . $question ['id'], $question ['url'] );
$question ['title'] = checkwordsglobal ( $question ['title'] );
$question ['image'] = getfirstimg ( htmlspecialchars_decode($question ['description'] ) );
$question ['description'] = cutstr ( checkwordsglobal ( strip_tags ( htmlspecialchars_decode($question ['description'] ) ) ), 240, '...' );
$questionlist [] = $question;
}
return $questionlist;
}
function rownum_by_tag($name, $status = '1,2,6') {
$name=addslashes($name);
$m = $this->db->query ( "SELECT count(*) as num FROM `" . $this->db->dbprefix . "question` AS q WHERE q.title like '%$name%' and q.status IN ($status) ORDER BY q.answers DESC" )->row_array ();
return $m ['num'];
}
/* 删除问题和问题的回答 */
function remove($qids) {
//删除问题悬赏现金退回用户钱包
$this->removetuoguan ( $qids );
$this->db->query ( "DELETE FROM `" . $this->db->dbprefix . "question` WHERE `id` IN ($qids)" );
$this->db->query ( "DELETE FROM `" . $this->db->dbprefix . "question_tag` WHERE `qid` IN ($qids)" );
$this->db->query ( "DELETE FROM `" . $this->db->dbprefix . "doing` WHERE `questionid` IN ($qids) and action in (1,2,3,4,5,6,7,8)" );
$this->db->query ( "DELETE FROM `" . $this->db->dbprefix . "tag_item` WHERE `typeid` IN ($qids) and itemtype='question'" );
$this->remove_supply_by_qid ( $qids );
$this->db->query ( "DELETE FROM `" . $this->db->dbprefix . "answer_comment` WHERE `aid` IN (SELECT id FROM " . $this->db->dbprefix . "answer WHERE `qid` IN($qids))" );
$this->db->query ( "DELETE FROM `" . $this->db->dbprefix . "answer_support` WHERE `aid` IN (SELECT id FROM " . $this->db->dbprefix . "answer WHERE `qid` IN($qids))" );
$this->db->query ( "DELETE FROM `" . $this->db->dbprefix . "answer` WHERE `qid` IN ($qids)" );
$this->db->query ( "DELETE FROM `" . $this->db->dbprefix . "topdata` WHERE `typeid` IN ($qids) and type='qid' " );
if ($this->base->setting ['xunsearch_open']) {
$this->index->openBuffer ();
$this->index->del ( explode ( ",", $qids ) );
$this->index->closeBuffer ();
}
}
function removetuoguan($qids) {
$query = $this->db->query ( "SELECT * FROM `" . $this->db->dbprefix . "question` WHERE `id` IN ($qids)" );
foreach ( $query->result_array () as $question ) {
$qid = $question ['id'];
$authorid = $question ['authorid'];
//是否有提问悬赏现金托管
$model = $this->db->query ( "SELECT * FROM " . $this->db->dbprefix . "user_depositmoney WHERE type='qid' and typeid=$qid and fromuid=$authorid and state=0" )->row_array ();
if ($model) {
$fromuid = $model ['fromuid'];
$money = $model ['needpay'] * 100;
$this->db->query ( "UPDATE " . $this->db->dbprefix . "user SET `jine`=jine+'$money' WHERE `uid`=$fromuid" );
$time = time ();
$needpay = $model ['needpay'];
$this->db->query ( "INSERT INTO " . $this->db->dbprefix . "paylog SET type='thqid',typeid=$qid,money=$needpay,openid='',fromuid=0,touid=$fromuid,`time`=$time" );
$this->db->query ( "DELETE FROM `" . $this->db->dbprefix . "user_depositmoney` WHERE fromuid=$fromuid and type='qid' and typeid=$qid" );
}
//是否有对专家付费提问
$model1 = $this->db->query ( "SELECT * FROM " . $this->db->dbprefix . "user_depositmoney WHERE type='eqid' and typeid=$qid and fromuid=$authorid and state=0" )->row_array ();
if ($model1) {
$fromuid = $model1 ['fromuid'];
$money = $model1 ['needpay'] * 100;
$this->db->query ( "UPDATE " . $this->db->dbprefix . "user SET `jine`=jine+'$money' WHERE `uid`=$fromuid" );
$time = time ();
$needpay = $model1 ['needpay'];
$this->db->query ( "INSERT INTO " . $this->db->dbprefix . "paylog SET type='theqid',typeid=$qid,money=$needpay,openid='',fromuid=0,touid=$fromuid,`time`=$time" );
$this->db->query ( "DELETE FROM `" . $this->db->dbprefix . "user_depositmoney` WHERE fromuid=$fromuid and type='eqid' and typeid=$qid" );
}
}
}
/* 问题列表记录数目 */
function rownum_by_cfield_cvalue_status($cfield = 'cid1', $cvalue = 0, $status = 0, $paixu = 0) {
$paixuwhrer = '';
switch ($paixu) {
case 0 : //最新问题
$paixuwhrer = " ";
break;
case 1 : //积分悬赏
$paixuwhrer = " and price >0 ";
break;
case 2 : //现金悬赏
$status = 'all';
$paixuwhrer = " and shangjin >0 ";
break;
case 3 : //语音回答
$status = 'all';
$paixuwhrer = " and hasvoice!=0 ";
break;
case 4 : //已解决
$status = 2;
$paixuwhrer = " ";
break;
case 5: //未解决
$status = 1;
$paixuwhrer = " ";
break;
case 6 : //推荐问题
$status = 6;
$paixuwhrer = " ";
break;
default :
$paixuwhrer = " ";
break;
}
$sql = "SELECT count(*) as num FROM " . $this->db->dbprefix . "question WHERE 1=1 and cid!=0 $paixuwhrer ";
($cfield && $cvalue != 'all') && ($sql .= " AND $cfield=$cvalue ");
isset ( $this->statustable [$status] ) && $sql .= $this->statustable [$status];
$query = $this->db->query ( $sql );
$m = $query->row_array ();
return $m ['num'];
}
/* 问题列表,根据指定的分类名称,和分类id,以及status来查询 */
function list_by_cfield_cvalue_status($cfield = 'cid1', $cvalue = 0, $status = 0, $start = 0, $limit = 10, $paixu = 0) {
$questionlist = array ();
$paixuwhrer = '';
switch ($paixu) {
case 0 : //最新问题
$paixuwhrer = " ";
break;
case 1 : //积分悬赏
$paixuwhrer = " and price >0 ";
break;
case 2 : //现金悬赏
$status = 'all';
$paixuwhrer = " and shangjin >0 ";
break;
case 3 : //语音回答
$status = 'all';
$paixuwhrer = " and hasvoice!=0 ";
break;
case 4 : //已解决
$status = 2;
$paixuwhrer = " ";
break;
case 5: //未解决
$status = 1;
$paixuwhrer = " ";
break;
case 6 : //推荐问题
$status = 6;
$paixuwhrer = " ";
break;
default :
$paixuwhrer = " ";
break;
}
$sql = "SELECT * FROM " . $this->db->dbprefix . "question WHERE 1=1 and cid!=0 $paixuwhrer ";
($cfield && $cvalue != 'all') && ($sql .= " AND $cfield=$cvalue ");
isset ( $this->ordertable [$status] ) && $sql .= $this->ordertable [$status];
$sql .= " LIMIT $start,$limit";
$query = $this->db->query ( addslashes($sql) );
$qids = $questionTags = [];
foreach ( $query->result_array () as $question ) {
if ($question ['cid']) {
$question ['author_has_vertify'] = get_vertify_info ( $question ['authorid'] ); //用户是否认证
$question ['category_name'] = $this->base->category [$question ['cid']] ['name'];
$question ['sortime'] = $question ['time']; //用于排序
$question ['format_time'] = tdate ( $question ['time'] );
if ($question ['hidden'] == 1) {
$question ['avatar'] = SITE_URL . 'static/css/default/avatar.gif';
$question ['author'] ="匿名用户";
} else {
$question ['avatar'] = get_avatar_dir ( $question ['authorid'] );
}
$question ['questionid'] = $question ['id'];
$question ['url'] = url ( 'question/view/' . $question ['id'] );
$question ['title'] = checkwordsglobal ( $question ['title'] );
$question ['image'] = getfirstimg ( htmlspecialchars_decode($question ['description'] ));
$question ['images'] = getfirstimgs ( htmlspecialchars_decode($question ['description'] ) );
$question ['description'] = clearhtml ( htmlspecialchars_decode($question ['description'] ),100 );
$qids[] = $question['id'];
$question ['tags'] = [];
if ($question ['askuid'] > 0) {
$question ['askuser'] = $this->get_by_uid ( $question ['askuid'] );
}
$questionlist [] = $question;
}
}
if (!empty($qids)) {
$questionTags = $this->get_by_qid_all($qids);
}
if (!empty($questionTags)) {
foreach ($questionTags as $qv) {
foreach ($questionlist as $key => $qlv) {
if ($qlv['questionid'] == $qv['typeid']) {
$questionlist[$key]['tags'][] = $qv;
}
}
}
}
return $questionlist;
}
/* 问题列表,现金悬赏 */
function list_by_shangjin($start = 0, $limit = 10) {
$questionlist = array ();
$sql = "SELECT * FROM " . $this->db->dbprefix . "question WHERE 1=1 and shangjin>0 order by time desc";
$sql .= " LIMIT $start,$limit";
$query = $this->db->query ( $sql );
$qids = $questionTags = [];
foreach ( $query->result_array () as $question ) {
$question ['author_has_vertify'] = get_vertify_info ( $question ['authorid'] ); //用户是否认证
$question ['category_name'] = $this->base->category [$question ['cid']] ['name'];
$question ['format_time'] = tdate ( $question ['time'] );
$question ['avatar'] = get_avatar_dir ( $question ['authorid'] );
$question ['url'] = url ( 'question/view/' . $question ['id'] );
$question ['title'] = checkwordsglobal ( $question ['title'] );
$qids[] = $question['id'];
$question ['tags'] = [];
if ($question ['askuid'] > 0) {
$question ['askuser'] = $this->get_by_uid ( $question ['askuid'] );
}
$question ['description'] = checkwordsglobal ( htmlspecialchars_decode($question ['description'] ) );
$questionlist [] = $question;
}
if (!empty($qids)) {
$questionTags = $this->get_by_qid_all($qids);
}
if (!empty($questionTags)) {
foreach ($questionTags as $qv) {
foreach ($questionlist as $key => $qlv) {
if ($qlv['questionid'] == $qv['typeid']) {
$questionlist[$key]['tags'][] = $qv;
}
}
}
}
return $questionlist;
}
/* 问题列表,语音回答 */
function list_by_yuyin($start = 0, $limit = 10) {
$questionlist = array ();
$sql = "SELECT * FROM " . $this->db->dbprefix . "question WHERE 1=1 and hasvoice>0 order by time desc";
$sql .= " LIMIT $start,$limit";
$query = $this->db->query ( $sql );
$qids = $questionTags = [];
foreach ( $query->result_array () as $question ) {
$question ['author_has_vertify'] = get_vertify_info ( $question ['authorid'] ); //用户是否认证
$question ['category_name'] = $this->base->category [$question ['cid']] ['name'];
$question ['format_time'] = tdate ( $question ['time'] );
$question ['avatar'] = get_avatar_dir ( $question ['authorid'] );
$question ['url'] = url ( 'question/view/' . $question ['id'], $question ['url'] );
$question ['title'] = checkwordsglobal ( $question ['title'] );
$qids[] = $question['id'];
$question ['tags'] = [];
if ($question ['askuid'] > 0) {
$question ['askuser'] = $this->get_by_uid ( $question ['askuid'] );
}
$question ['description'] = checkwordsglobal ( htmlspecialchars_decode($question ['description'] ));
$questionlist [] = $question;
}
if (!empty($qids)) {
$questionTags = $this->get_by_qid_all($qids);
}
if (!empty($questionTags)) {
foreach ($questionTags as $qv) {
foreach ($questionlist as $key => $qlv) {
if ($qlv['questionid'] == $qv['typeid']) {
$questionlist[$key]['tags'][] = $qv;
}
}
}
}
return $questionlist;
}
/* 标签 */
function get_by_qid($qid) {
$qid=intval($qid);
$taglist = array ();
$query = $this->db->query ( "select at.id,at.tagname,at.tagalias from " . $this->db->dbprefix . "tag as at," . $this->db->dbprefix . "tag_item as ati where ati.tagid=at.id and ati.typeid=$qid and ati.itemtype='question' LIMIT 0,5" );
foreach ( $query->result_array () as $tag ) {
$taglist [] = $tag;
}
return $taglist;
}
function get_by_qid_all($qids) {
$taglist = array();
$c = [];
if (!empty($qids)) {
$query = $this->db->query("select at.id,at.tagname,at.tagalias,ati.typeid from " . $this->db->dbprefix . "tag_item as ati left join " . $this->db->dbprefix . "tag as at on ati.tagid=at.id where ati.typeid in (" . implode(',', $qids) . ") and ati.itemtype='question'");
// error_log("select at.id,at.tagname,at.tagalias,ati.typeid from " . $this->db->dbprefix . "tag_item as ati left join " . $this->db->dbprefix . "tag as at on ati.tagid=at.id where ati.typeid in (" . implode(',', $qids) . ") and ati.itemtype='question' LIMIT 0,5\n",3,'/tmp/eask.log');
foreach ($query->result_array() as $tag) {
if(!empty($c[$tag['typeid']]) && count($c[$tag['typeid']]) >=5){
continue;
}else{
$c[$tag['typeid']][] = 1;
$taglist [] = $tag;
}
}
}
return $taglist;
}
/* 我的所有提问,用户中心 */
function list_by_uid($uid, $status, $start = 0, $limit = 10) {
$uid=intval($uid);
$status=addslashes($status);
$questionlist = array ();
$where='';
if($this->user['uid']!=$uid){
$where=' hidden!=1 and ';
}
$sql = 'SELECT * FROM ' . $this->db->dbprefix . 'question WHERE'. $where. '`authorid` = ' . $uid;
$sql .= $this->statustable [$status] . " ORDER BY `time` DESC LIMIT $start , $limit";
$query = $this->db->query ( $sql );
foreach ( $query->result_array () as $question ) {
$question ['category_name'] = isset ( $this->base->category [$question ['cid']] ) && $this->base->category [$question ['cid']] ['name'];
if (intval ( $question ['endtime'] )) {
$question ['format_endtime'] = tdate ( $question ['endtime'] );
}
$question ['author_has_vertify'] = get_vertify_info ( $question ['authorid'] ); //用户是否认证
$question ['format_time'] = tdate ( $question ['time'] );
$question ['url'] = url ( 'question/view/' . $question ['id'] );
$question ['title'] = checkwordsglobal ( $question ['title'] );
$question ['image'] = getfirstimg ( htmlspecialchars_decode($question ['description'] ));
$question ['avatar'] = get_avatar_dir ( $question ['authorid'] );
$question ['description'] = cutstr ( checkwordsglobal ( strip_tags ( htmlspecialchars_decode($question ['description'] ) ) ), 240, '...' );
$questionlist [] = $question;
}
return $questionlist;
}
/* 插入问题到question表 */
function add($title, $description, $hidanswer, $price, $cid, $cid1 = 0, $cid2 = 0, $cid3 = 0, $status = 0, $shangjin = 0, $askfromuid = 0) {
$overdue_days = intval ( $this->base->setting ['overdue_days'] );
$creattime = $this->base->time;
$endtime = $this->base->time + $overdue_days * 86400;
$uid = $this->base->user ['uid'];
$username = $uid ? $this->base->user ['username'] : $this->base->user ['ip'];
//(! strip_tags ( $description, '
' )) && $description = '';
/* 分词索引 */
$data = array ('cid' => $cid, 'cid1' => $cid1, 'cid2' => $cid2, 'cid3' => $cid3, 'askuid' => $askfromuid, 'authorid' => $uid, 'shangjin' => $shangjin, 'author' => $username, 'title' => $title, 'description' => $description, 'price' => $price, 'time' => $creattime, 'endtime' => $endtime, 'hidden' => $hidanswer, 'status' => $status, 'ip' => getip () );
$this->db->insert ( 'question', $data );
//$this->db->query ( "INSERT INTO " . $this->db->dbprefix . "question SET cid='$cid',cid1='$cid1',cid2='$cid2',cid3='$cid3',askuid='$askfromuid',authorid='$uid',shangjin='$shangjin',author='$username',title='$title',description='$description',price='$price',time='$creattime',endtime='$endtime',hidden='$hidanswer',status='$status',ip='{$this->base->ip}'" );
$qid = $this->db->insert_id ();
if ($this->base->setting ['xunsearch_open'] && $qid) {
$question = array ();
$question ['id'] = $qid;
$question ['cid'] = $cid;
$question ['cid1'] = $cid1;
$question ['cid2'] = $cid2;
$question ['cid3'] = $cid3;
$question ['author'] = $username;
$question ['authorid'] = $uid;
$question ['answers'] = 0;
$question ['price'] = $price;
$question ['attentions'] = 1;
$question ['shangjin'] = $shangjin;
$question ['status'] = $status;
$question ['time'] = $creattime;
$question ['title'] = checkwordsglobal ( $title );
$question ['description'] = checkwordsglobal ( htmlspecialchars_decode($description ) );
$doc = new XSDocument ();
$doc->setFields ( $question );
$this->index->openBuffer ();
$this->index->update ( $doc )->flushIndex ();
$this->index->closeBuffer ();
}
$cid1 = intval ( $cid1 );
$cid2 = intval ( $cid2 );
$cid3 = intval ( $cid3 );
$this->db->query ( "UPDATE " . $this->db->dbprefix . "category SET questions=questions+1 WHERE id IN ($cid1,$cid2,$cid3) " );
$uid && $this->db->query ( "UPDATE " . $this->db->dbprefix . "user SET questions=questions+1 WHERE uid =$uid" );
return $qid;
}
function addapp($uid1, $username1, $title, $description, $hidanswer, $price, $cid, $devicename = '网站', $cid1 = 0, $cid2 = 0, $cid3 = 0, $status = 0) {
$overdue_days = intval ( $this->base->setting ['overdue_days'] );
$creattime = $this->base->time;
$endtime = $this->base->time + $overdue_days * 86400;
$uid = $uid1; // $this->base->user['uid'];
$username = $username1; // $uid ? $this->base->user['username'] : $this->base->user['ip'];
(! strip_tags ( $description, '
' )) && $description = '';
$inserdata=array(
'cid'=>$cid,
'devicename'=>$devicename,
'cid1'=>$cid1,
'cid2'=>$cid2,
'cid3'=>$cid3,
'authorid'=>$uid,
'author'=>$username,
'title'=>$title,
'description'=>$description,
'price'=>$price,
'time'=>$creattime,
'endtime'=>$endtime,
'hidden'=>$hidanswer,
'status'=>$status,
'ip'=>getip()
);
/* 分词索引 */
$this->db->insert('question',$inserdata);
$qid = $this->db->insert_id ();
if ($this->base->setting ['xunsearch_open'] && $qid) {
$question = array ();
$question ['id'] = $qid;
$question ['cid'] = $cid;
$question ['cid1'] = $cid1;
$question ['cid2'] = $cid2;
$question ['cid3'] = $cid3;
$question ['author'] = $username;
$question ['devicename'] = $devicename;
$question ['authorid'] = $uid;
$question ['answers'] = 0;
$question ['price'] = $price;
$question ['attentions'] = 1;
$question ['shangjin'] = 0;
$question ['status'] = $status;
$question ['time'] = $creattime;
$question ['title'] = $title;
$question ['description'] = $description;
$doc = new XSDocument ();
$doc->setFields ( $question );
$this->index->openBuffer ();
$this->index->update ( $doc )->flushIndex ();
$this->index->closeBuffer ();
}
$cid1 = intval ( $cid1 );
$cid2 = intval ( $cid2 );
$cid3 = intval ( $cid3 );
$this->db->query ( "UPDATE " . $this->db->dbprefix . "category SET questions=questions+1 WHERE id IN ($cid1,$cid2,$cid3) " );
$uid && $this->db->query ( "UPDATE " . $this->db->dbprefix . "user SET questions=questions+1 WHERE uid =$uid" );
return $qid;
}
/* 插入问题到question表 */
function add_seo($title, $uid1, $username1, $description, $hidanswer, $price, $cid, $cid1 = 0, $cid2 = 0, $cid3 = 0, $status = 0, $view = 10, $mtime = 1409637582) {
$overdue_days = intval ( $this->base->setting ['overdue_days'] );
$creattime = $mtime; //$this->base->time;
$endtime = $mtime + $overdue_days * 86400; // $this->base->time + $overdue_days * 86400;
$uid = $uid1; // $this->base->user['uid'];
$username = $uid ? $username1 :getip();
//(!strip_tags($description, '
')) && $description = '';
// echo "INSERT INTO " . $this->db->dbprefix . "question SET cid='$cid',cid1='$cid1',cid2='$cid2',cid3='$cid3',authorid='$uid',author='$username',title='$title',description='$description',price='$price',time='$creattime',endtime='$endtime',hidden='$hidanswer',views='$view',status='$status',ip='{$this->base->ip}'";
/* 分词索引 */
$dataquestion=array('views'=>$view,'cid'=>$cid,'cid1'=>$cid1,'cid2'=>$cid2,'cid3'=>$cid3,'authorid'=>$uid,'author'=>$username,'title'=>$title,'description'=>$description,'price'=>$price,'time'=>$creattime,'endtime'=>$endtime,'hidden'=>$hidanswer,'status'=>$status,'ip'=>getip());
$this->db->insert('question',$dataquestion);
$qid = $this->db->insert_id ();
if ($this->base->setting ['xunsearch_open'] && $qid) {
$question = array ();
$question ['id'] = $qid;
$question ['cid'] = $cid;
$question ['cid1'] = $cid1;
$question ['cid2'] = $cid2;
$question ['cid3'] = $cid3;
$question ['author'] = $username;
$question ['authorid'] = $uid;
$question ['answers'] = 0;
$question ['price'] = $price;
$question ['attentions'] = 1;
$question ['shangjin'] = 0;
$question ['status'] = $status;
$question ['views'] = $view;
$question ['time'] = $creattime;
$question ['title'] = $title;
$question ['description'] =htmlspecialchars_decode($description ) ;
$doc = new XSDocument ();
$doc->setFields ( $question );
$this->index->openBuffer ();
$this->index->update ( $doc )->flushIndex ();
$this->index->closeBuffer ();
}
$cid1 = intval ( $cid1 );
$cid2 = intval ( $cid2 );
$cid3 = intval ( $cid3 );
$this->db->query ( "UPDATE " . $this->db->dbprefix . "category SET questions=questions+1 WHERE id IN ($cid1,$cid2,$cid3) " );
$uid && $this->db->query ( "UPDATE " . $this->db->dbprefix . "user SET questions=questions+1 WHERE uid =$uid" );
return $qid;
}
function update($id, $title, $description, $hidanswer, $price, $status, $cid, $cid1 = 0, $cid2 = 0, $cid3 = 0, $time = 0) {
$overdue_days = intval ( $this->base->setting ['overdue_days'] );
$asktime = strtotime ( $time );
$endtime = $asktime + $overdue_days * 86400;
$updatedata=array(
'cid'=>$cid,
'cid1'=>$cid1,
'cid2'=>$cid2,
'cid3'=>$cid3,
'title'=>$title,
'description'=>$description,
'price'=>$price,
'status'=>$status,
'time'=>$asktime,
'endtime'=>$endtime,
'hidden'=>$hidanswer
);
$this->db->where(array('id'=>intval($id)))->update('question',$updatedata);
if ($this->base->setting ['xunsearch_open']) {
$question = array ();
$question ['id'] = $id;
$question ['cid'] = $cid;
$question ['cid1'] = $cid1;
$question ['cid2'] = $cid2;
$question ['cid3'] = $cid3;
$question ['status'] = $status;
$question ['price'] = $price;
$question ['title'] =$title;
$question ['description'] = htmlspecialchars_decode($description );
$doc = new XSDocument ();
$doc->setFields ( $question );
$this->index->openBuffer ();
$this->index->update ( $doc )->flushIndex ();
$this->index->closeBuffer ();
}
}
/* 更新问题状态 */
function update_status($qid, $status = 9) {
$qid=intval($qid);
$question = $this->get ( $qid );
$qid = $question ['id'];
$time = time ();
$answer = $this->db->query ( "SELECT * FROM " . $this->db->dbprefix . "answer WHERE qid=$qid AND status>0 AND adopttime =0 ORDER BY supports DESC,time asc " )->row_array ();
if ($question ['shangjin'] > 0 && $status == 9 && $question ['status'] != 9) {
if ($answer == null) {
$quid = $question ['authorid'];
$adoptmoeny = $question ['shangjin'];
$cash_fee = intval ( $question ['shangjin'] ) * 100;
//如果没有回答,删除托管记录,零钱回到用户钱包,设置问题关闭
$this->db->query ( "UPDATE " . $this->db->dbprefix . "user SET `jine`=jine+'$cash_fee' WHERE `uid`=$quid" );
//删除托管记录
$this->db->query ( "INSERT INTO " . $this->db->dbprefix . "paylog SET type='closeqid',typeid=$qid,money=$adoptmoeny,openid='',fromuid=0,touid=$quid,`time`=$time" ); //增加关闭问题记录
}
}
$this->db->query ( "UPDATE `" . $this->db->dbprefix . "question` set status=$status WHERE `id` = $qid" );
}
/* 添加问题补充 */
function add_supply($qid, $supply, $content, $status = 1) {
$qid=intval($qid);
$data=array(
'qid'=>$qid,
'content'=>$content,
'time'=>time()
);
$this->db->insert('question_supply',$data);
}
function get_supply($qid) {
$qid=intval($qid);
$supplies = array ();
$query = $this->db->query ( "SELECT * FROM " . $this->db->dbprefix . "question_supply WHERE `qid`=$qid ORDER BY `time` ASC" );
foreach ( $query->result_array () as $supply ) {
$supply ['format_time'] = tdate ( $supply ['time'] );
$supplies [] = $supply;
}
return $supplies;
}
function remove_supply_by_qid($qids) {
$this -> db ->where_in('qid',$qids)->delete('question_supply');
}
//添加查看次数
function add_views($qid) {
$qid=intval($qid);
$this->db->query ( "UPDATE `" . $this->db->dbprefix . "question` SET views=views+1 WHERE `id`=$qid" );
}
//添加查看次数
function pluginadd_views($qid, $views) {
$views = intval ( $views );
$qid = intval ( $qid );
$this->db->query ( "UPDATE `" . $this->db->dbprefix . "question` SET views=$views WHERE `id`=$qid" );
}
/* 更新问题顶 */
function update_goods($qid) {
$qid=intval($qid);
$this->db->query ( "UPDATE `" . $this->db->dbprefix . "question` set goods=goods+1 WHERE `id` =$qid" );
}
/* 追加问题悬赏 */
function update_score($qid, $score) {
$score=doubleval($score);
$qid=intval($qid);
if ($score >= 20) {
$overdue_days = intval ( $this->base->setting ['overdue_days'] );
$endtime = $this->base->time + $overdue_days * 86400;
$this->db->query ( "UPDATE `" . $this->db->dbprefix . "question` set price=price+$score ,time={$this->base->time},endtime='$endtime' WHERE `id` =$qid" );
} else {
$threeday = 24 * 3600 * 3;
$this->db->query ( "UPDATE `" . $this->db->dbprefix . "question` set price=price+$score ,endtime=endtime+$threeday WHERE `id` =$qid" );
}
}
/* 某人是否已经回答过某问题 */
function already($qid, $uid) {
$qid=intval($qid);
$uid=intval($uid);
$already = $this->db->query ( "SELECT qid,authorid FROM `" . $this->db->dbprefix . "answer` WHERE `qid` =$qid and authorid=$uid" )->row_array ();
return is_array ( $already );
}
//问题审核
function change_to_verify($qids) {
$data=array('status'=>1);
$this -> db ->where_in('id',explode(',', $qids))->where(array('status'=>0))->update('question',$data);
}
//编辑问题标题
function renametitle($qid, $title) {
$qid=intval($qid);
$title=addslashes($title);
$this->db->query ( "UPDATE `" . $this->db->dbprefix . "question` SET `title`='$title' WHERE `id`=$qid" );
$this->db->query ( "UPDATE `" . $this->db->dbprefix . "answer` SET `title`='$title' WHERE `qid`=$qid" );
if ($this->base->setting ['xunsearch_open']) {
$question = array ();
$question ['id'] = $qid;
$question ['title'] = $title;
$doc = new XSDocument ();
$doc->setFields ( $question );
$this->index->openBuffer ();
$this->index->update ( $doc )->flushIndex ();
$this->index->closeBuffer ();
}
}
//编辑问题内容
function update_content($qid, $title, $content) {
$data = array ('title' => $title, 'description' => $content );
$this->db->where ( array ('id' => $qid ) )->update ( 'question', $data );
//$this->db->query ( "UPDATE `" . $this->db->dbprefix . "question` SET `title`='$title',`description`='$content' WHERE `id`=$qid" );
$this->db->query ( "UPDATE `" . $this->db->dbprefix . "answer` SET `title`='$title' WHERE `qid`=$qid" );
if ($this->base->setting ['xunsearch_open']) {
$question = array ();
$question ['id'] = $qid;
$question ['title'] = $title;
$question ['description'] =htmlspecialchars_decode($content ) ;
$doc = new XSDocument ();
$doc->setFields ( $question );
$this->index->openBuffer ();
$this->index->update ( $doc )->flushIndex ();
$this->index->closeBuffer ();
}
}
/* 是否关注问题 */
function is_followed($qid, $uid) {
$qid=intval($qid);
$uid=intval($uid);
$m = $this->db->query ( "SELECT COUNT(*) as num FROM " . $this->db->dbprefix . "question_attention WHERE qid=$qid AND followerid=$uid" )->row_array ();
return $m ['num'];
}
/* 获取问题管理者列表信息 */
function get_follower($qid, $start = 0, $limit = 16) {
$qid=intval($qid);
$followerlist = array ();
$query = $this->db->query ( "SELECT * FROM " . $this->db->dbprefix . "question_attention WHERE qid=$qid ORDER BY `time` DESC LIMIT $start,$limit" );
foreach ( $query->result_array () as $follower ) {
$follower ['avatar'] = get_avatar_dir ( $follower ['followerid'] );
$follower ['format_time'] = tdate ( $follower ['time'] );
$followerlist [] = $follower;
}
return $followerlist;
}
//编辑问题分类
function update_category($qids, $cid, $cid1, $cid2, $cid3) {
$data=array(
'cid'=>$cid,
'cid1'=>$cid1,
'cid2'=>$cid2,
'cid3'=>$cid3,
);
$this->db->where_in('id',explode(',', $qids))->update('question',$data);
if ($this->base->setting ['xunsearch_open']) {
foreach ( $qids as $qid ) {
$question = array ();
$question ['id'] = $qid;
$question ['cid'] = $cid;
$question ['cid1'] = $cid1;
$question ['cid2'] = $cid2;
$question ['cid3'] = $cid3;
$doc = new XSDocument ();
$doc->setFields ( $question );
$this->index->openBuffer ();
$this->index->update ( $doc )->flushIndex ();
$this->index->closeBuffer ();
}
}
}
//设为待解决
function change_to_nosolve($qids) {
$overdue_days = intval ( $this->base->setting ['overdue_days'] );
$endtime = $this->base->time + $overdue_days * 86400;
$this->db->query ( "UPDATE `" . $this->db->dbprefix . "question` set status=1, `endtime`=$endtime WHERE (status=6 OR status=2 OR status=9) AND `id` in ($qids) and shangjin<=0 " );
$this->db->query ( "UPDATE `" . $this->db->dbprefix . "answer` SET `adopttime`=0 WHERE `qid` in ($qids)" );
if ($this->base->setting ['xunsearch_open']) {
foreach ( $qids as $qid ) {
$question = array ();
$question ['status'] = 1;
$doc = new XSDocument ();
$doc->setFields ( $question );
$this->index->openBuffer ();
$this->index->update ( $doc )->flushIndex ();
$this->index->closeBuffer ();
}
}
}
//问题推荐
function change_recommend($qids, $status1, $status2) {
$this->db->query ( "UPDATE `" . $this->db->dbprefix . "question` SET `status`=$status1 WHERE `status`=$status2 AND `id` in ($qids)" );
}
//根据标题搜索问题的结果数
function search_title_num($title, $status = '1,2,6') {
$title=addslashes($title);
$status=addslashes($status);
$questionnum = 0;
if ($this->base->setting ['xunsearch_open']) {
$questionnum = $this->search->getLastCount ();
} else {
$query=$this->db-> select('count(id) AS total')->where_in('status',explode ( ",", $status ))->like('title',$title)->or_like('description', $title)->get("question");
$questionnum = $query-> row() -> total;
}
return $questionnum;
}
//根据标题搜索问题
function search_title($title, $status = '1,2,6', $addbestanswer = 0, $start = 0, $limit = 20) {
$title=addslashes($title);
$status=addslashes($status);
$questionlist = array ();
if ($this->base->setting ['xunsearch_open']) {
$statusarr = explode ( ",", $status );
$size = count ( $statusarr );
$to = $statusarr [$size - 1];
$from = $statusarr [0];
$result = $this->search->setCollapse('id')->setQuery ( $title )->addRange ( 'status', $from, $to )->setLimit ( $limit, $start )->search ();
foreach ( $result as $doc ) {
$question = array ();
$question ['id'] = $doc->id;
$question ['cid'] = $doc->cid;
$question ['category_name'] = $this->base->category [$question ['cid']] ['name'];
$question ['cid1'] = $doc->cid1;
$question ['cid2'] = $doc->cid2;
$question ['cid3'] = $doc->cid3;
$question ['author'] = $doc->author;
$question ['authorid'] = $doc->authorid;
$question ['authoravatar'] = get_avatar_dir ( $doc->authorid );
$question ['answers'] = $doc->answers;
$question ['status'] = $doc->status;
$question ['views'] = $doc->views;
$question ['format_time'] = tdate ( $doc->time );
$question ['title'] = $this->search->highlight ( $doc->title );
$question ['author_has_vertify'] = get_vertify_info ( $question ['authorid'] ); //用户是否认证
$question ['avatar'] = get_avatar_dir ( $question ['authorid'] );
$question ['description'] = $this->search->highlight ( cutstr ( checkwordsglobal ( strip_tags (htmlspecialchars_decode( $question ['description'] ) ) ), 240, '...' ) );
$questionlist [] = $question;
}
if (count ( $questionlist ) == 0) {
$questionlist = $this->get_question_bytitle ( $title, $status, $addbestanswer, $start, $limit );
}
} else {
$query=$this->db->
where_in('status',explode ( ",", $status ))
->group_start() //左括号
->like('title',$title)
->or_like('description', $title)
->group_end() //右括号
->limit($limit, $start)->get('question');
foreach ( $query->result_array () as $question ) {
$question ['category_name'] = $this->base->category [$question ['cid']] ['name'];
$question ['format_time'] = tdate ( $question ['time'] );
$question ['authoravatar'] = get_avatar_dir ( $question ['authorid'] );
$question ['description'] = strip_tags ( htmlspecialchars_decode( $question ['description'] ) );
$question ['author_has_vertify'] = get_vertify_info ( $question ['authorid'] ); //用户是否认证
$question ['title'] = highlight ( $question ['title'], $title );
$question ['avatar'] = get_avatar_dir ( $question ['authorid'] );
$question ['description'] = highlight ( cutstr ( checkwordsglobal ( strip_tags ( htmlspecialchars_decode( $question ['description'] )) ), 240, '...' ), $title );
$questionlist [] = $question;
}
}
return $questionlist;
}
function get_question_bytitle($title, $status = '1,2,6', $addbestanswer = 0, $start = 0, $limit = 20) {
$questionlist = array ();
$query=$this->db->
where_in('status',explode ( ",", $status ))
->group_start() //左括号
->like('title',$title)
->or_like('description', $title)
->group_end() //右括号
->limit($limit, $start)->get('question');
foreach ( $query->result_array () as $question ) {
$question ['category_name'] = $this->base->category [$question ['cid']] ['name'];
$question ['format_time'] = tdate ( $question ['time'] );
$addbestanswer && $question ['bestanswer'] = $this->db->result_first ( "SELECT content FROM `" . $this->db->dbprefix . "answer` WHERE qid=" . $question ['id'] . " AND adopttime>0 " );
$question ['avatar'] = get_avatar_dir ( $question ['authorid'] );
$question ['author_has_vertify'] = get_vertify_info ( $question ['authorid'] ); //用户是否认证
$question ['description'] = highlight ( cutstr ( checkwordsglobal ( strip_tags ( htmlspecialchars_decode( $question ['description'] )) ), 240, '...' ), $title );
$questionlist [] = $question;
}
return $questionlist;
}
/**
* 获得相关结果关键词
*/
function get_related_words() {
$words = array ();
if ($this->base->setting ['xunsearch_open'])
$words = $this->search->getRelatedQuery ();
return $words;
}
/**
* 获得热门搜索词
* @param type $size
* @return type
*/
function get_hot_words($size = 8) {
$words = array ();
if ($this->base->setting ['xunsearch_open'])
$words = array_keys ( $this->search->getHotQuery ( $size, "currnum" ) );
return $words;
}
function get_corrected_word() {
$words = array ();
if ($this->base->setting ['xunsearch_open'])
$words = $this->search->getCorrectedQuery ();
return $words;
}
function removequestionattention($qid,$uid){
$qid=intval($qid);
$uid=intval($uid);
$this->db->query("delete from `" . $this->db->dbprefix . "question_attention` where qid=$qid and followerid= $uid ");
}
/* 防采集 */
function stopcopy() {
$ip = $this->base->ip;
$bengintime = $this->base->time - 60;
$useragent = isset ( $_SERVER ['HTTP_USER_AGENT'] ) ? $_SERVER ['HTTP_USER_AGENT'] : '';
$useragent = strtolower ( $useragent );
$allowagent = explode ( "\n", $this->base->setting ['stopcopy_allowagent'] );
$allow = false;
foreach ( $allowagent as $agent ) {
if (false !== strpos ( $useragent, $agent )) {
$allow = true;
break;
}
}
! $allow && exit ( 'access deny' );
$stopagent = explode ( "\n", $this->base->setting ['stopcopy_stopagent'] );
foreach ( $stopagent as $agent ) {
if (false !== strpos ( $useragent, $agent )) {
exit ( 'access deny' );
}
}
$m = $this->db->query ( "select count(*) as num from " . $this->db->dbprefix . "visit where time>$bengintime AND ip='$ip'" )->row_array ();
$visits = $m ['num'];
if ($visits > $this->base->setting ['stopcopy_maxnum']) {
$userip = explode ( ".", $ip );
$expiration = 3600 * 24;
$this->db->query ( "INSERT INTO `" . $this->db->dbprefix . "banned` (`ip1`,`ip2`,`ip3`,`ip4`,`admin`,`time`,`expiration`) VALUES ('{$userip[0]}', '{$userip[1]}', '{$userip[2]}', '{$userip[3]}', 'SYSTEM', '{$this->base->time}', '{$expiration}')" );
exit ( '你采集的速度太快了吧 : ) ' );
} else {
$this->db->query ( "INSERT INTO " . $this->db->dbprefix . "visit (`ip`,`time`) values ('$ip','{$this->base->time}')" ); //加入数据库记录visit表中
}
}
function makeindex($startindex, $pagesize) {
if ($this->base->setting['xunsearch_open']) {
if ($startindex == 0) {
$this->index->clean ();
}
$this->index->openBuffer ();
$query = $this->db->query ( "SELECT * FROM " . $this->db->dbprefix . "question LIMIT $startindex,$pagesize" );
foreach ( $query->result_array () as $question ) {
$data = array ();
$data ['id'] = $question ['id'];
$data ['cid'] = $question ['cid'];
$data ['cid1'] = $question ['cid1'];
$data ['cid2'] = $question ['cid2'];
$data ['cid3'] = $question ['cid3'];
$data ['author'] = $question ['author'];
$data ['authorid'] = $question ['authorid'];
$data ['answers'] = $question ['answers'];
$data ['price'] = $question ['price'];
$data ['attentions'] = $question ['attentions'];
$data ['shangjin'] = $question ['shangjin'];
$data ['status'] = $question ['status'];
$data ['views'] = $question ['views'];
$data ['time'] = $question ['time'];
$data ['title'] = $question ['title'];
$data ['description'] = $question ['description'];
$doc = new XSDocument ();
$doc->setFields ( $data );
$this->index->update ( $doc )->flushIndex ();
}
$this->index->closeBuffer ();
}
}
}
?>