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; }
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; }