Exemplo n.º 1
0
 public function get_favorite_article_action()
 {
     if (empty($_GET['page'])) {
         $_GET['page'] = 1;
     }
     if (empty($_GET['per_page'])) {
         $_GET['per_page'] = 10;
     }
     $uid = $this->user_id;
     if (!empty($_GET['uid'])) {
         $uid = intval($_GET['uid']);
     }
     $data = $this->model('api')->get_favorite_article($uid, $_GET['page'], $_GET['per_page']);
     if (!empty($data['rows'])) {
         foreach ($data['rows'] as $k => $v) {
             $data['rows'][$k]['message'] = cjk_substr(strip_ubb($v['message']), 0, 80, 'utf-8');
         }
     }
     if (empty($data['rows'])) {
         $data['rows'] = null;
         $data['total_rows'] = 0;
     }
     H::ajax_json_output(AWS_APP::RSM($data, 1, null));
 }
Exemplo n.º 2
0
 public function home_activity($uid, $limit = 10)
 {
     // 我关注的话题
     if ($user_focus_topics_ids = $this->model('topic')->get_focus_topic_ids_by_uid($uid)) {
         if ($user_focus_topics_questions_ids = $this->model('topic')->get_item_ids_by_topics_ids($user_focus_topics_ids, 'question', 1000)) {
             if ($user_focus_topics_info = $this->model('question')->get_topic_info_by_question_ids($user_focus_topics_questions_ids)) {
                 foreach ($user_focus_topics_info as $key => $user_focus_topics_info_by_question) {
                     foreach ($user_focus_topics_info_by_question as $_key => $_val) {
                         if (!in_array($_val['topic_id'], $user_focus_topics_ids)) {
                             unset($user_focus_topics_info[$key][$_key]);
                         }
                     }
                 }
             }
         }
         $user_focus_topics_article_ids = $this->model('topic')->get_item_ids_by_topics_ids($user_focus_topics_ids, 'article', 1000);
     }
     // 我关注的问题
     /*if ($user_focus_questions_ids = $this->model('question')->get_focus_question_ids_by_uid($uid))
     		{
     			// 回复问题
     			$where_in[] = "(associate_type = " . ACTION_LOG::CATEGORY_QUESTION . " AND associate_id IN (" . implode(',', $user_focus_questions_ids) . ") AND associate_action = " . ACTION_LOG::ANSWER_QUESTION . " AND uid <> " . $uid . ")";
     		}*/
     // 我关注的话题
     if ($user_focus_topics_questions_ids) {
         // 回复问题, 新增问题, 赞同答案
         $where_in[] = "(associate_type = " . ACTION_LOG::CATEGORY_QUESTION . " AND associate_id IN (" . implode(',', $user_focus_topics_questions_ids) . ") AND associate_action IN (" . ACTION_LOG::ANSWER_QUESTION . ", " . ACTION_LOG::ADD_QUESTION . ", " . ACTION_LOG::ADD_AGREE . ") AND uid <> " . $uid . ")";
     }
     if ($user_focus_topics_article_ids) {
         // 发表文章, 文章评论
         $where_in[] = "(associate_id IN (" . implode(',', $user_focus_topics_article_ids) . ") AND associate_action IN (" . ACTION_LOG::ADD_ARTICLE . ", " . ACTION_LOG::ADD_COMMENT_ARTICLE . ") AND uid <> " . $uid . ")";
     }
     // 我关注的人
     if ($user_follow_uids = $this->model('follow')->get_user_friends_ids($uid)) {
         // 添加问题, 回复问题, 添加文章
         $where_in[] = "(uid IN (" . implode(',', $user_follow_uids) . ") AND associate_action IN(" . ACTION_LOG::ADD_QUESTION . ',' . ACTION_LOG::ANSWER_QUESTION . ',' . ACTION_LOG::ADD_ARTICLE . ',' . ACTION_LOG::ADD_COMMENT_ARTICLE . '))';
         // 增加赞同, 文章评论
         $where_in[] = "(uid IN (" . implode(',', $user_follow_uids) . ") AND associate_action IN(" . ACTION_LOG::ADD_AGREE_ARTICLE . ", " . ACTION_LOG::ADD_COMMENT_ARTICLE . ") AND uid <> " . $uid . ")";
         // 添加问题关注
         if ($user_focus_questions_ids) {
             $where_in[] = "(uid IN (" . implode(',', $user_follow_uids) . ") AND associate_action = " . ACTION_LOG::ADD_REQUESTION_FOCUS . " AND associate_id NOT IN (" . implode(',', $user_focus_questions_ids) . "))";
         } else {
             $where_in[] = "(uid IN (" . implode(',', $user_follow_uids) . ") AND associate_action = " . ACTION_LOG::ADD_REQUESTION_FOCUS . ")";
         }
     } else {
         $user_follow_uids = array();
     }
     // 添加问题, 添加文章
     $where_in[] = "(associate_action IN (" . ACTION_LOG::ADD_QUESTION . ", " . ACTION_LOG::ADD_ARTICLE . ") AND uid = " . $uid . ")";
     if ($questions_uninterested_ids = $this->model('question')->get_question_uninterested($uid)) {
         $where = "(associate_type = " . ACTION_LOG::CATEGORY_QUESTION . " AND associate_id NOT IN (" . implode(',', $questions_uninterested_ids) . "))";
     } else {
         $where = "(associate_type = " . ACTION_LOG::CATEGORY_QUESTION . ")";
     }
     if ($where_in and $where) {
         $where .= ' AND (' . implode(' OR ', $where_in) . ')';
     } else {
         if ($where_in) {
             $where = implode(' OR ', $where_in);
         }
     }
     if (!($action_list = ACTION_LOG::get_actions_fresh_by_where($where, $limit))) {
         return false;
     }
     foreach ($action_list as $key => $val) {
         if (in_array($val['associate_action'], array(ACTION_LOG::ADD_ARTICLE, ACTION_LOG::ADD_AGREE_ARTICLE, ACTION_LOG::ADD_COMMENT_ARTICLE))) {
             $action_list_article_ids[] = $val['associate_id'];
             if ($val['associate_action'] == ACTION_LOG::ADD_COMMENT_ARTICLE and $val['associate_attached']) {
                 $action_list_article_comment_ids[] = $val['associate_attached'];
             }
         } else {
             if (in_array($val['associate_action'], array(ACTION_LOG::ADD_LIKE_PROJECT, ACTION_LOG::ADD_SUPPORT_PROJECT))) {
                 $action_list_project_ids[] = $val['associate_id'];
             } else {
                 $action_list_question_ids[] = $val['associate_id'];
                 if (in_array($val['associate_action'], array(ACTION_LOG::ANSWER_QUESTION, ACTION_LOG::ADD_AGREE)) and $val['associate_attached']) {
                     $action_list_answer_ids[] = $val['associate_attached'];
                 }
             }
         }
         if (!$action_list_uids[$val['uid']]) {
             $action_list_uids[$val['uid']] = $val['uid'];
         }
     }
     if ($action_list_question_ids) {
         $question_infos = $this->model('question')->get_question_info_by_ids($action_list_question_ids);
         foreach ($question_infos as $key => $val) {
             $question_infos[$key]['question_detail'] = strip_ubb($val['question_detail']);
         }
     }
     if ($action_list_answer_ids) {
         $answer_infos = $this->model('answer')->get_answers_by_ids($action_list_answer_ids);
         foreach ($answer_infos as $key => $val) {
             $answer_infos[$key]['answer_content'] = strip_ubb($val['answer_content']);
         }
         $answer_attachs = $this->model('publish')->get_attachs('answer', $action_list_answer_ids, 'min');
     }
     if ($action_list_project_ids) {
         $project_infos = $this->model('project')->get_project_info_by_ids($action_list_project_ids);
         foreach ($project_infos as $key => $val) {
             $project_infos[$key]['description'] = strip_ubb($val['description']);
         }
     }
     if ($action_list_uids) {
         $user_info_lists = $this->model('account')->get_user_info_by_uids($action_list_uids, true);
     }
     if ($action_list_article_ids) {
         $article_infos = $this->model('article')->get_article_info_by_ids($action_list_article_ids);
         foreach ($article_infos as $key => $val) {
             $article_infos[$key]['message'] = strip_ubb($val['message']);
         }
     }
     if ($action_list_article_comment_ids) {
         $article_comment = $this->model('article')->get_comments_by_ids($action_list_article_comment_ids);
     }
     // 重组信息
     foreach ($action_list as $key => $val) {
         $action_list[$key]['user_info'] = $user_info_lists[$val['uid']];
         if ($user_focus_topics_info[$val['associate_id']] and !in_array($action_list[$key]['uid'], $user_follow_uids) and $action_list[$key]['uid'] != $uid) {
             $topic_info = end($user_focus_topics_info[$val['associate_id']]);
         } else {
             unset($topic_info);
         }
         switch ($val['associate_action']) {
             case ACTION_LOG::ADD_ARTICLE:
             case ACTION_LOG::ADD_AGREE_ARTICLE:
             case ACTION_LOG::ADD_COMMENT_ARTICLE:
                 $article_info = $article_infos[$val['associate_id']];
                 $action_list[$key]['title'] = $article_info['title'];
                 $action_list[$key]['link'] = get_js_url('/article/' . $article_info['id']);
                 $action_list[$key]['article_info'] = $article_info;
                 if ($val['associate_action'] == ACTION_LOG::ADD_COMMENT_ARTICLE) {
                     $action_list[$key]['comment_info'] = $article_comment[$val['associate_attached']];
                 }
                 break;
             case ACTION_LOG::ADD_LIKE_PROJECT:
             case ACTION_LOG::ADD_SUPPORT_PROJECT:
                 $project_info = $project_infos[$val['associate_id']];
                 $action_list[$key]['title'] = $project_info['title'];
                 $action_list[$key]['link'] = get_js_url('/project/' . $project_info['id']);
                 $action_list[$key]['project_info'] = $project_info;
                 break;
             default:
                 $question_info = $question_infos[$val['associate_id']];
                 $action_list[$key]['title'] = $question_info['question_content'];
                 $action_list[$key]['link'] = get_js_url('/question/' . $question_info['question_id']);
                 // 是否关注
                 if ($user_focus_questions_ids) {
                     if (in_array($question_info['question_id'], $user_focus_questions_ids)) {
                         $question_info['has_focus'] = TRUE;
                     }
                 }
                 // 对于回复问题的
                 if ($answer_infos[$val['associate_attached']] and in_array($val['associate_action'], array(ACTION_LOG::ANSWER_QUESTION, ACTION_LOG::ADD_AGREE))) {
                     $action_list[$key]['answer_info'] = $answer_infos[$val['associate_attached']];
                 }
                 $action_list[$key]['question_info'] = $question_info;
                 // 处理回复
                 if ($action_list[$key]['answer_info']['answer_id']) {
                     if ($action_list[$key]['answer_info']['anonymous'] and $val['associate_action'] == ACTION_LOG::ANSWER_QUESTION) {
                         unset($action_list[$key]);
                         continue;
                     }
                     $final_list_answer_ids[] = $action_list[$key]['answer_info']['answer_id'];
                     if ($action_list[$key]['answer_info']['has_attach']) {
                         $action_list[$key]['answer_info']['attachs'] = $answer_attachs[$action_list[$key]['answer_info']['answer_id']];
                     }
                 }
                 break;
         }
         if ($action_list[$key]) {
             $action_list[$key]['last_action_str'] = ACTION_LOG::format_action_data($val['associate_action'], $val['uid'], $user_info_lists[$val['uid']]['user_name'], $question_info, $topic_info);
         }
     }
     if ($final_list_answer_ids) {
         $answer_agree_users = $this->model('answer')->get_vote_user_by_answer_ids($final_list_answer_ids);
         $answer_vote_status = $this->model('answer')->get_answer_vote_status($final_list_answer_ids, $uid);
         $answer_users_rated_thanks = $this->model('answer')->users_rated('thanks', $final_list_answer_ids, $uid);
         $answer_users_rated_uninterested = $this->model('answer')->users_rated('uninterested', $final_list_answer_ids, $uid);
     }
     foreach ($action_list as $key => $val) {
         if (isset($action_list[$key]['answer_info']['answer_id'])) {
             $answer_id = $action_list[$key]['answer_info']['answer_id'];
             if (isset($answer_agree_users[$answer_id])) {
                 $action_list[$key]['answer_info']['agree_users'] = $answer_agree_users[$answer_id];
             }
             if (isset($answer_vote_status[$answer_id])) {
                 $action_list[$key]['answer_info']['agree_status'] = $answer_vote_status[$answer_id];
             }
             if (isset($answer_users_rated_thanks[$answer_id])) {
                 $action_list[$key]['answer_info']['user_rated_thanks'] = $answer_users_rated_thanks[$answer_id];
             }
             if (isset($answer_users_rated_uninterested[$answer_id])) {
                 $action_list[$key]['answer_info']['user_rated_uninterested'] = $answer_users_rated_uninterested[$answer_id];
             }
         }
     }
     return $action_list;
 }
Exemplo n.º 3
0
 public function index_action()
 {
     if (!($question_info = $this->model('question')->get_question_info_by_id($_GET['id']))) {
         H::ajax_json_output(AWS_APP::RSM(null, -1, AWS_APP::lang()->_t('问题不存在或已被删除')));
     }
     if (!$_GET['sort'] or $_GET['sort'] != 'ASC') {
         $_GET['sort'] = 'DESC';
     } else {
         $_GET['sort'] = 'ASC';
     }
     if (get_setting('unfold_question_comments') == 'Y') {
         $_GET['comment_unfold'] = 'all';
     }
     $question_info['redirect'] = $this->model('question')->get_redirect($question_info['question_id']);
     if ($question_info['redirect']['target_id']) {
         $target_question = $this->model('question')->get_question_info_by_id($question_info['redirect']['target_id']);
     }
     if (is_digits($_GET['rf']) and $_GET['rf']) {
         if ($from_question = $this->model('question')->get_question_info_by_id($_GET['rf'])) {
             $redirect_message[] = AWS_APP::lang()->_t('从问题 %s 跳转而来', '<a href="' . get_js_url('/question/' . $_GET['rf'] . '?rf=false') . '">' . $from_question['question_content'] . '</a>');
         }
     }
     if ($question_info['redirect'] and !$_GET['rf']) {
         if ($target_question) {
             HTTP::redirect('/question/' . $question_info['redirect']['target_id'] . '?rf=' . $question_info['question_id']);
         } else {
             $redirect_message[] = AWS_APP::lang()->_t('重定向目标问题已被删除, 将不再重定向问题');
         }
     } else {
         if ($question_info['redirect']) {
             if ($target_question) {
                 $message = AWS_APP::lang()->_t('此问题将跳转至') . ' <a href="' . get_js_url('/question/' . $question_info['redirect']['target_id'] . '?rf=' . $question_info['question_id']) . '">' . $target_question['question_content'] . '</a>';
                 if ($this->user_id and ($this->user_info['permission']['is_administortar'] or $this->user_info['permission']['is_moderator'] or !$this->question_info['lock'] and $this->user_info['permission']['redirect_question'])) {
                     $message .= '&nbsp; (<a href="javascript:;" onclick="AWS.ajax_request(G_BASE_URL + \'/question/ajax/redirect/\', \'item_id=' . $question_info['question_id'] . '\');">' . AWS_APP::lang()->_t('撤消重定向') . '</a>)';
                 }
                 $redirect_message[] = $message;
             } else {
                 $redirect_message[] = AWS_APP::lang()->_t('重定向目标问题已被删除, 将不再重定向问题');
             }
         }
     }
     $question_info['user_info'] = $this->model('account')->get_user_info_by_uid($question_info['published_uid'], true);
     if ($_GET['column'] != 'log') {
         $this->model('question')->calc_popular_value($question_info['question_id']);
         $this->model('question')->update_views($question_info['question_id']);
         if (is_digits($_GET['uid'])) {
             $answer_list_where[] = 'uid = ' . intval($_GET['uid']);
             $answer_count_where = 'uid = ' . intval($_GET['uid']);
         } else {
             if ($_GET['uid'] == 'focus' and $this->user_id) {
                 if ($friends = $this->model('follow')->get_user_friends($this->user_id, false)) {
                     foreach ($friends as $key => $val) {
                         $follow_uids[] = $val['uid'];
                     }
                 } else {
                     $follow_uids[] = 0;
                 }
                 $answer_list_where[] = 'uid IN(' . implode($follow_uids, ',') . ')';
                 $answer_count_where = 'uid IN(' . implode($follow_uids, ',') . ')';
                 $answer_order_by = 'add_time ASC';
             } else {
                 if ($_GET['sort_key'] == 'add_time') {
                     $answer_order_by = $_GET['sort_key'] . " " . $_GET['sort'];
                 } else {
                     $answer_order_by = "agree_count " . $_GET['sort'] . ", against_count ASC, add_time ASC";
                 }
             }
         }
         if ($answer_count_where) {
             $answer_count = $this->model('answer')->get_answer_count_by_question_id($question_info['question_id'], $answer_count_where);
         } else {
             $answer_count = $question_info['answer_count'];
         }
         if (isset($_GET['answer_id']) and (!$this->user_id or $_GET['single'])) {
             $answer_list = $this->model('answer')->get_answer_list_by_question_id($question_info['question_id'], 1, 'answer_id = ' . intval($_GET['answer_id']));
         } else {
             if (!$this->user_id and !$this->user_info['permission']['answer_show']) {
                 if ($question_info['best_answer']) {
                     $answer_list = $this->model('answer')->get_answer_list_by_question_id($question_info['question_id'], 1, 'answer_id = ' . intval($question_info['best_answer']));
                 } else {
                     $answer_list = $this->model('answer')->get_answer_list_by_question_id($question_info['question_id'], 1, null, 'agree_count DESC');
                 }
             } else {
                 if ($answer_list_where) {
                     $answer_list_where = implode(' AND ', $answer_list_where);
                 }
                 $answer_list = $this->model('answer')->get_answer_list_by_question_id($question_info['question_id'], calc_page_limit($_GET['page'], 100), $answer_list_where, $answer_order_by);
             }
         }
         // 最佳回复预留
         $answers[0] = '';
         if (!is_array($answer_list)) {
             $answer_list = array();
         }
         $answer_ids = array();
         $answer_uids = array();
         foreach ($answer_list as $answer) {
             $answer_ids[] = $answer['answer_id'];
             $answer_uids[] = $answer['uid'];
             if ($answer['has_attach']) {
                 $has_attach_answer_ids[] = $answer['answer_id'];
             }
         }
         if (!in_array($question_info['best_answer'], $answer_ids) and intval($_GET['page']) < 2) {
             $answer_list = array_merge($this->model('answer')->get_answer_list_by_question_id($question_info['question_id'], 1, 'answer_id = ' . $question_info['best_answer']), $answer_list);
         }
         if ($answer_ids) {
             $answer_vote_status = $this->model('answer')->get_answer_vote_status($answer_ids, $this->user_id);
             $answer_users_rated_thanks = $this->model('answer')->users_rated('thanks', $answer_ids, $this->user_id);
             $answer_users_rated_uninterested = $this->model('answer')->users_rated('uninterested', $answer_ids, $this->user_id);
         }
         foreach ($answer_list as $answer) {
             $answer['user_rated_thanks'] = $answer_users_rated_thanks[$answer['answer_id']];
             $answer['user_rated_uninterested'] = $answer_users_rated_uninterested[$answer['answer_id']];
             $answer['answer_content'] = cjk_substr(strip_ubb($answer['answer_content']), 0, 100);
             //$answer['agree_users'] = $answer_agree_users[$answer['answer_id']];
             $answer['agree_status'] = $answer_vote_status[$answer['answer_id']];
             $answer['user_info']['avatar_file'] = get_avatar_url($answer['uid']);
             if ($question_info['best_answer'] == $answer['answer_id'] and intval($_GET['page']) < 2) {
                 $answers[0] = $answer;
             } else {
                 $answers[] = $answer;
             }
         }
         if (!$answers[0]) {
             unset($answers[0]);
         }
         $question_info['user_answered'] = 0;
         //如果系统设置了用户只能回答一次
         if (get_setting('answer_unique') == 'Y') {
             if ($this->model('answer')->has_answer_by_uid($question_info['question_id'], $this->user_id)) {
                 $question_info['user_answered'] = 1;
             } else {
                 $question_info['user_answered'] = 0;
             }
         }
     }
     $question_info['user_follow_check'] = 0;
     $question_info['user_question_focus'] = 0;
     $question_info['user_thanks'] = 0;
     if ($this->user_id) {
         if ($this->model('question')->get_question_thanks($question_info['question_id'], $this->user_id)) {
             $question_info['user_thanks'] = 1;
         }
         //当前用户是否已关注该问题作者
         if ($this->model('follow')->user_follow_check($this->user_id, $question_info['published_uid'])) {
             $question_info['user_follow_check'] = 1;
         }
         if ($this->model('question')->has_focus_question($question_info['question_id'], $this->user_id)) {
             $question_info['user_question_focus'] = 1;
         }
     }
     $question_info['question_detail'] = FORMAT::parse_attachs(nl2br(FORMAT::parse_bbcode($question_info['question_detail'])));
     $question_topics = $this->model('topic')->get_topics_by_item_id($question_info['question_id'], 'question');
     $question_info['answer_count'] = $answer_count;
     //clean
     $question_key = array('question_id', 'question_content', 'question_detail', 'add_time', 'update_time', 'answer_count', 'view_count', 'agree_count', 'focus_count', 'against_count', 'thanks_count', 'comment_count', 'user_info', 'user_answered', 'user_thanks', 'user_follow_check', 'user_question_focus');
     $user_key = array('uid', 'user_name', 'namecard_pic', 'signature');
     $topics_key = array('topic_id', 'topic_title');
     foreach ($question_info as $k => $v) {
         if (!in_array($k, $question_key)) {
             unset($question_info[$k]);
         }
     }
     //作者信息
     if (!empty($question_info['user_info'])) {
         foreach ($question_info['user_info'] as $k => $v) {
             if (!in_array($k, $user_key)) {
                 unset($question_info['user_info'][$k]);
             }
         }
         $question_info['user_info']['avatar_file'] = get_avatar_url($question_info['user_info']['uid'], 'mid');
     }
     if (!empty($answers)) {
         foreach ($answers as $key => $value) {
             if (!empty($value['user_info'])) {
                 foreach ($value['user_info'] as $k => $v) {
                     if (!in_array($k, $user_key)) {
                         unset($answers[$key]['user_info'][$k]);
                     }
                 }
                 $answers[$key]['user_info']['avatar_file'] = get_avatar_url($answers[$key]['user_info']['uid'], 'mid');
             }
             $answers[$key]['answer_content'] = strip_tags($value['answer_content']);
         }
     }
     if (!empty($question_topics)) {
         foreach ($question_topics as $key => $val) {
             foreach ($val as $k => $v) {
                 if (!in_array($k, $topics_key)) {
                     unset($question_topics[$key][$k]);
                 }
             }
         }
     }
     //$question_info['answers'] = $answers;
     H::ajax_json_output(AWS_APP::RSM(array('question_info' => $question_info, 'question_topics' => $question_topics, 'answers' => array_values($answers)), 1, null));
 }
Exemplo n.º 4
0
if (!defined('BLOG')) {
    exit('Access Denied');
}
$doarr = array('list', 'view', 'new', 'update');
if (!in_array($do, $doarr)) {
    $do = 'list';
}
$limit = 10;
$start = ($_B['page'] - 1) * $limit;
require_once libfile('article');
switch ($do) {
    case 'list':
        $articles = J::t('article')->fetch_list('*', '`status`=1', $start, $limit, 'dateline DESC');
        foreach ($articles as $k => $v) {
            $articles[$k]['content'] = strip_ubb($v['content']);
            $articles[$k]['formattime'] = btime($v['dateline'], 1);
            $articles[$k]['time'] = btime($v['dateline']);
            $articles[$k]['link'] = 'index.php?m=article&do=view&aid=' . $v['aid'];
            if ($v['image']) {
                $imgids[$v['aid']] = $v['image'];
            }
        }
        if ($imgids) {
            $str_ids = join(',', $imgids);
            $imginfos = J::t('image')->fetch_all('*', "id IN({$str_ids})");
            foreach ($imginfos as $k => $v) {
                $suff = $v['thumbH'] ? '.thumb.jpg' : '';
                $imgids[$v['aid']] = $_B['siteurl'] . $v['path'] . $suff;
            }
        }