Beispiel #1
0
 public function get_user_actions($uid, $limit = 10, $actions = false, $this_uid = 0)
 {
     $cache_key = 'user_actions_' . md5($uid . $limit . $actions . $this_uid);
     if ($user_actions = AWS_APP::cache()->get($cache_key)) {
         return $user_actions;
     }
     $associate_action = ACTION_LOG::ADD_QUESTION;
     if (strstr($actions, ',')) {
         $associate_action = explode(',', $actions);
         array_walk_recursive($associate_action, 'intval_string');
         $associate_action = implode(',', $associate_action);
     } else {
         if ($actions) {
             $associate_action = intval($actions);
         }
     }
     if (!$uid) {
         $where[] = "(associate_type = " . ACTION_LOG::CATEGORY_QUESTION . " AND associate_action IN(" . $this->quote($associate_action) . "))";
     } else {
         $where[] = "(associate_type = " . ACTION_LOG::CATEGORY_QUESTION . " AND uid = " . intval($uid) . " AND associate_action IN(" . $this->quote($associate_action) . "))";
     }
     if ($this_uid == $uid) {
         $show_anonymous = true;
     }
     $action_list = ACTION_LOG::get_action_by_where(implode($where, ' OR '), $limit, $show_anonymous);
     // 重组信息
     foreach ($action_list as $key => $val) {
         $uids[] = $val['uid'];
         switch ($val['associate_type']) {
             case ACTION_LOG::CATEGORY_QUESTION:
                 if (in_array($val['associate_action'], array(ACTION_LOG::ADD_ARTICLE, ACTION_LOG::ADD_COMMENT_ARTICLE))) {
                     $article_ids[] = $val['associate_id'];
                 } else {
                     $question_ids[] = $val['associate_id'];
                 }
                 if (in_array($val['associate_action'], array(ACTION_LOG::ADD_TOPIC, ACTION_LOG::MOD_TOPIC, ACTION_LOG::MOD_TOPIC_DESCRI, ACTION_LOG::MOD_TOPIC_PIC, ACTION_LOG::DELETE_TOPIC, ACTION_LOG::ADD_TOPIC_FOCUS)) and $val['associate_attached']) {
                     $associate_topic_ids[] = $val['associate_attached'];
                 }
                 break;
         }
     }
     if ($uids) {
         $action_list_users = $this->model('account')->get_user_info_by_uids($uids, true);
     }
     if ($question_ids) {
         $action_questions_info = $this->model('question')->get_question_info_by_ids($question_ids);
     }
     if ($associate_topic_ids) {
         $associate_topics = $this->model('topic')->get_topics_by_ids($associate_topic_ids);
     }
     if ($article_ids) {
         $action_articles_info = $this->model('article')->get_article_info_by_ids($article_ids);
     }
     foreach ($action_list as $key => $val) {
         $action_list[$key]['user_info'] = $action_list_users[$val['uid']];
         switch ($val['associate_type']) {
             case ACTION_LOG::CATEGORY_QUESTION:
                 switch ($val['associate_action']) {
                     case ACTION_LOG::ADD_ARTICLE:
                     case ACTION_LOG::ADD_COMMENT_ARTICLE:
                         $article_info = $action_articles_info[$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;
                         $action_list[$key]['last_action_str'] = ACTION_LOG::format_action_data($val['associate_action'], $val['uid'], $action_list_users[$val['uid']]['user_name']);
                         break;
                     default:
                         $question_info = $action_questions_info[$val['associate_id']];
                         $action_list[$key]['title'] = $question_info['question_content'];
                         $action_list[$key]['link'] = get_js_url('/question/' . $question_info['question_id']);
                         if (in_array($val['associate_action'], array(ACTION_LOG::ADD_TOPIC, ACTION_LOG::MOD_TOPIC, ACTION_LOG::MOD_TOPIC_DESCRI, ACTION_LOG::MOD_TOPIC_PIC, ACTION_LOG::DELETE_TOPIC, ACTION_LOG::ADD_TOPIC_FOCUS)) and $val['associate_attached']) {
                             $topic_info = $associate_topics[$val['associate_attached']];
                         } else {
                             unset($topic_info);
                         }
                         if (in_array($val['associate_action'], array(ACTION_LOG::ADD_QUESTION)) and $question_info['has_attach']) {
                             $question_info['attachs'] = $question_attachs[$question_info['question_id']];
                         }
                         if ($val['uid']) {
                             $action_list[$key]['last_action_str'] = ACTION_LOG::format_action_data($val['associate_action'], $val['uid'], $action_list_users[$val['uid']]['user_name'], $question_info, $topic_info);
                         }
                         if (in_array($val['associate_action'], array(ACTION_LOG::ANSWER_QUESTION)) and $question_info['answer_count']) {
                             if ($answer_list = $this->model('answer')->get_answer_by_id($val['associate_attached'])) {
                                 $action_list[$key]['answer_info'] = $answer_list;
                             }
                         }
                         $action_list[$key]['question_info'] = $question_info;
                         break;
                 }
                 break;
         }
     }
     AWS_APP::cache()->set($cache_key, $action_list, get_setting('cache_level_normal'));
     return $action_list;
 }
Beispiel #2
0
 public function process_list_data($favorite_items)
 {
     if (!$favorite_items) {
         return false;
     }
     foreach ($favorite_items as $key => $data) {
         switch ($data['type']) {
             case 'answer':
                 $answer_ids[] = $data['item_id'];
                 break;
             case 'article':
                 $article_ids[] = $data['item_id'];
                 break;
         }
     }
     if ($answer_ids) {
         if ($answer_infos = $this->model('answer')->get_answers_by_ids($answer_ids)) {
             foreach ($answer_infos as $key => $data) {
                 $question_ids[$val['question_id']] = $data['question_id'];
                 $favorite_uids[$data['uid']] = $data['uid'];
             }
             $answer_attachs = $this->model('publish')->get_attachs('answer', $answer_ids, 'min');
             $question_infos = $this->model('question')->get_question_info_by_ids($question_ids);
         }
     }
     if ($article_ids) {
         if ($article_infos = $this->model('article')->get_article_info_by_ids($article_ids)) {
             foreach ($article_infos as $key => $data) {
                 $favorite_uids[$data['uid']] = $data['uid'];
             }
         }
     }
     $users_info = $this->model('account')->get_user_info_by_uids($favorite_uids);
     foreach ($favorite_items as $key => $data) {
         switch ($data['type']) {
             case 'answer':
                 $favorite_list_data[$key]['title'] = $question_infos[$answer_infos[$data['item_id']]['question_id']]['question_content'];
                 $favorite_list_data[$key]['link'] = get_js_url('/question/' . $answer_infos[$data['item_id']]['question_id'] . '?rf=false&item_id=' . $data['item_id'] . '#!answer_' . $data['item_id']);
                 $favorite_list_data[$key]['add_time'] = $question_infos[$answer_infos[$data['item_id']]['question_id']]['add_time'];
                 $favorite_list_data[$key]['answer_info'] = $answer_infos[$data['item_id']];
                 if ($favorite_list_data[$key]['answer_info']['has_attach']) {
                     $favorite_list_data[$key]['answer_info']['attachs'] = $answer_attachs[$data['item_id']];
                 }
                 $favorite_list_data[$key]['question_info'] = $question_infos[$answer_infos[$data['item_id']]['question_id']];
                 $favorite_list_data[$key]['user_info'] = $users_info[$answer_infos[$data['item_id']]['uid']];
                 break;
             case 'article':
                 $favorite_list_data[$key]['title'] = $article_infos[$data['item_id']]['title'];
                 $favorite_list_data[$key]['link'] = get_js_url('/article/' . $data['item_id']);
                 $favorite_list_data[$key]['add_time'] = $article_infos[$data['item_id']]['add_time'];
                 $favorite_list_data[$key]['article_info'] = $article_infos[$data['item_id']];
                 $favorite_list_data[$key]['last_action_str'] = ACTION_LOG::format_action_data(ACTION_LOG::ADD_ARTICLE, $data['uid'], $users_info[$data['uid']]['user_name']);
                 $favorite_list_data[$key]['user_info'] = $users_info[$article_infos[$data['item_id']]['uid']];
                 break;
         }
         $favorite_list_data[$key]['item_id'] = $data['item_id'];
         $favorite_list_data[$key]['item_type'] = $data['type'];
     }
     return $favorite_list_data;
 }
 public function get_topic_best_answer_action_list($topic_ids, $uid, $limit)
 {
     $cache_key = 'topic_best_answer_action_list_' . md5($topic_ids . $limit);
     if (!($result = AWS_APP::cache()->get($cache_key))) {
         if ($topic_relation = $this->query_all("SELECT item_id FROM " . $this->get_table('topic_relation') . " WHERE topic_id IN (" . implode(',', explode(',', $topic_ids)) . ") AND `type` = 'question'")) {
             foreach ($topic_relation as $key => $val) {
                 $question_ids[$val['item_id']] = $val['item_id'];
             }
             unset($topic_relation);
         } else {
             return false;
         }
         if ($best_answers = $this->query_all("SELECT question_id, best_answer FROM " . $this->get_table('question') . " WHERE best_answer > 0 AND question_id IN (" . implode(',', $question_ids) . ") ORDER BY update_time DESC LIMIT " . $limit)) {
             unset($question_ids);
             foreach ($best_answers as $key => $val) {
                 $answer_ids[$val['best_answer']] = $val['best_answer'];
                 $question_ids[$val['question_id']] = $val['question_id'];
             }
         } else {
             return false;
         }
         if ($questions_info = $this->model('question')->get_question_info_by_ids($question_ids)) {
             foreach ($questions_info as $key => $val) {
                 $questions_info[$key]['associate_action'] = ACTION_LOG::ANSWER_QUESTION;
                 $action_list_uids[$val['published_uid']] = $val['published_uid'];
             }
         }
         if ($answers_info = $this->model('answer')->get_answers_by_ids($answer_ids)) {
             foreach ($answers_info as $key => $val) {
                 $action_list_uids[$val['uid']] = $val['uid'];
             }
         }
         if ($action_list_uids) {
             $action_list_users_info = $this->model('account')->get_user_info_by_uids($action_list_uids);
         }
         $answers_info_vote_user = $this->model('answer')->get_vote_user_by_answer_ids($answer_ids);
         $answer_attachs = $this->model('publish')->get_attachs('answer', $answer_ids, 'min');
         foreach ($questions_info as $key => $val) {
             $result[$key]['question_info'] = $val;
             $result[$key]['user_info'] = $action_list_users_info[$answers_info[$val['best_answer']]['uid']];
             if ($val['has_attach']) {
                 $result[$key]['question_info']['attachs'] = $question_attachs[$val['question_id']];
             }
             $result[$key]['answer_info'] = $answers_info[$val['best_answer']];
             if ($val['answer_info']['has_attach']) {
                 $result[$key]['answer_info']['attachs'] = $answer_attachs[$val['best_answer']];
             }
         }
         AWS_APP::cache()->set($cache_key, $result, get_setting('cache_level_low'));
     }
     if ($uid) {
         foreach ($result as $key => $val) {
             $question_ids[] = $val['question_info']['question_id'];
             if ($val['question_info']['best_answer']) {
                 $answer_ids[] = $val['question_info']['best_answer'];
             }
         }
         $questions_focus = $this->model('question')->has_focus_questions($question_ids, $uid);
         $answers_info_vote_status = $this->model('answer')->get_answer_vote_status($answer_ids, $uid);
     }
     foreach ($result as $key => $val) {
         $result[$key]['question_info']['has_focus'] = $questions_focus[$val['question_info']['question_id']];
         $result[$key]['answer_info']['agree_status'] = intval($answers_info_vote_status[$val['question_info']['best_answer']]);
         $result[$key]['title'] = $val['question_info']['question_content'];
         $result[$key]['link'] = get_js_url('/question/' . $val['question_info']['question_id']);
         $result[$key]['add_time'] = $result[$key]['answer_info']['add_time'];
         $result[$key]['last_action_str'] = ACTION_LOG::format_action_data(ACTION_LOG::ANSWER_QUESTION, $result[$key]['answer_info']['uid'], $result[$key]['user_info']['user_name'], $result[$key]['question_info']);
     }
     return $result;
 }