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