Beispiel #1
0
 public function find($cond = array(), $select = '', $return_dyadic_array = FALSE)
 {
     //{{{
     $this->_CI->load->model('User', 'user_m', TRUE);
     $this->_CI->load->model('Scheme', 'scheme_m', TRUE);
     $retweets = parent::find($cond, $select, TRUE);
     if (empty($retweets)) {
         return array();
     }
     //获取的 $retweets 就是按 retweet_id 的升序排列
     //只需要在遍历时 查询余下部分是否有包含相同 scheme_id 的
     //数据并清除之便可
     //@todo 为了节约时间 可以利用的优势就是 返回的集合不需要是有序的 ( 因为之后还会再按照时间排序 )
     foreach ($retweets as $i => $retweet) {
         //@todo 一切都是为了所谓的合并转发 此算法有改进的余地 起码不必每次都计算 sizeof
         if (sizeof($retweets) > 1) {
             //标志是否已经删除了某条记录
             $has_unset = FALSE;
             //取余下的数组
             array_walk(array_slice($retweets, $i), function ($value, $key) use(&$retweets, $retweet, $i, &$has_unset) {
                 if ($retweet['scheme_id'] === $value['scheme_id']) {
                     //有重复 删除当前的( 下标为$i ) 的记录
                     unset($retweets[$i]);
                     $has_unset = TRUE;
                 }
             });
             if ($has_unset === TRUE) {
                 continue;
             }
         }
         $prev_retweet_id = $retweet['prev_retweet_id'];
         if (is_numeric($prev_retweet_id) && $prev_retweet_id > 0) {
             //有效的 prev_retweet_id 意味着是 二转 或以上
             //此处如果调用本函数的话 会形成一个递归 获取完整的转发链
             //但是目前(只使用二转的情况)是没有必要的
             $prev_retweet = parent::find(array('retweet_id' => $prev_retweet_id));
             //此处的断言是 prev_retweet 信息是一定存咋的 若不存在 则需要触发一个异常
             if (empty($prev_retweet)) {
                 throw new Exception('通过有效的 prev_retweet_id 获取了一个空的 retweet.[prev_retweet_id=' . $prev_retweet_id . ']');
             }
             //获取相关用户信息
             $prev_retweet_user = $this->_CI->user_m->find(array('user_id' => $prev_retweet['retweeter_id']));
         } else {
             //无效的 prev_retweet_id 意味着是一转
             //"转发自"用户信息就是方案的所有用户
             $scheme = $this->_CI->scheme_m->find(array('scheme_id' => $retweet['scheme_id']));
             $prev_retweet_user = $scheme['holder'];
         }
         //获取当前 retweeter 用户的信息
         $retweets[$i]['retweeter'] = $this->_CI->user_m->find(array('user_id' => $retweet['retweeter_id']));
         $retweets[$i]['prev_retweet_user'] = $prev_retweet_user;
         $retweets[$i]['formated_time'] = $this->format_time($retweet['time']);
     }
     if ($return_dyadic_array == FALSE && sizeof($retweets) == 1) {
         return array_shift($retweets);
     }
     return $retweets;
 }
Beispiel #2
0
 public function get_user_id_by_nick($user_nick = '')
 {
     //{{{
     $user_id = NULL;
     if (!empty($user_nick)) {
         $user_info = parent::find(array('nick' => $user_nick));
         if (empty($user_info)) {
             throw new Exception("查找的用户 nick 不存在,但是其方案信息却存在于用户页面上. user_nick=[{$user_nick}]");
         }
         if (sizeof($user_info) > 1) {
             throw new Exception("查找的用户 nick 在数据库中存在多条记录. user_nick=[{$user_nick}]");
         }
         $user_id = $user_info['user_id'];
     }
     return $user_id;
 }
Beispiel #3
0
 public function get_expire_time($scheme_id)
 {
     //{{{
     $this->_CI->config->load('scheme');
     $expire_time = $this->_CI->config->item('expire_time');
     $scheme = parent::find(array('scheme_id' => $scheme_id));
     if (empty($scheme)) {
         return -1;
     }
     //获取方案 发布/转发 时间
     $time = strtotime($scheme['time']);
     return date('Y-m-d h:i:s', $time + $expire_time);
 }