stanley-king 7 роки тому
батько
коміт
71aba6cd3f

+ 3 - 1
data/logic/queue.logic.php

@@ -23,6 +23,7 @@ require_once (BASE_ROOT_PATH . '/helper/fcode/mfcode.php');
 require_once (BASE_ROOT_PATH . '/helper/fcode/operator.php');
 require_once (BASE_ROOT_PATH . '/helper/user_session/fcode.php');
 require_once (BASE_ROOT_PATH . '/helper/stat_helper.php');
+require_once (BASE_ROOT_PATH . '/helper/message/publisher.php');
 
 
 class queueLogic
@@ -659,6 +660,7 @@ class queueLogic
     }
     public function onPublishSpecial($param)
     {
-
+        $publisher = new message\publisher();
+        $publisher->add_special($param['user_id'],$param['specials']);
     }
 }

+ 11 - 1
helper/search/tcp_client.php

@@ -288,10 +288,20 @@ class relation_client extends tcp_client
         $param = array("act" => 'special','op' => 'del', "params" => $param);
         return $this->request($param);
     }
+
+    public function fetch_self_special($param)
+    {
+        $param = array("act" => 'special','op' => 'fetch_self', "params" => $param);
+        return $this->request($param);
+    }
+    public function fetch_pri_special($param)
+    {
+        $param = array("act" => 'special','op' => 'fetch_pri', "params" => $param);
+        return $this->request($param);
+    }
     public function fetch_pub_special($param)
     {
         $param = array("act" => 'special','op' => 'fetch_pub', "params" => $param);
         return $this->request($param);
     }
-
 }

+ 22 - 0
helper/special_helper.php

@@ -256,6 +256,28 @@ class special_formater
         return $result;
     }
 
+    public static function format_ugc(ugc\special $special)
+    {
+        $special_id = $special->special_id();
+        $url = BASE_SITE_URL . "/mobile/index.php?act=special&op=index&client_type=wap&special_id={$special_id}";
+
+        $result = [];
+
+        $result['item_title'] = $special->share_title();
+        $result['item_type'] = 'home1';
+
+        $item['show_type'] = 'ugc';
+        $item['show_data'] = $special_id;
+        $item['image'] = $special->share_img();
+        $item['type'] = 'url';
+        $item['data'] = $url;
+        $item['title'] = $special->share_title();
+
+        $result['items'][] = $item;
+
+        return $result;
+    }
+
     public static function format_bonus($bonuses,$title='')
     {
         $result = [];

+ 3 - 0
helper/ugc/content.php

@@ -103,6 +103,9 @@ class text_item extends UGContent
         $params['item_data'] = $this->item_data('text',$data,'','text',$data);
         return $params;
     }
+    public function text() {
+        return $this->mText;
+    }
     public function type() {
         return 'text';
     }

+ 14 - 2
helper/ugc/generator.php

@@ -51,6 +51,8 @@ class special_object
 
         $item_sort = 0;
         $qindex = 0;
+        $desc = '';
+        $fDesc = false;
         foreach ($this->contents as $item)
         {
             $data  = $item->format_block();
@@ -65,7 +67,16 @@ class special_object
             if($item_id == false) continue;
 
             $cur_type = $item->type();
-            if($cur_type== 'vote')
+            if($cur_type == 'text' && $fDesc == false)
+            {
+                $fDesc = true;
+                $text = $item->text();
+                $desc = mb_substr($text,0,128);
+                if(!empty($desc)) {
+                    $desc .= '>>>';
+                }
+            }
+            elseif($cur_type == 'vote')
             {
                 $vote_result = $item->vote_result();
                 $vote = $item->vote_param();
@@ -84,7 +95,8 @@ class special_object
         }
 
         $params = ['vote' => $vote,'questions' => $questions];
-        $this->mb_special->editUserSpecial($this->special_id,['member_id' => $user_id,'special_id' => $sp_id],['params' => serialize($params),'vote_result' => serialize($vote_result)]);
+        $this->mb_special->editUserSpecial($this->special_id,['member_id' => $user_id,'special_id' => $sp_id],['params' => serialize($params),
+            'vote_result' => serialize($vote_result),'description' => $desc]);
         return $sp_id;
     }
 

+ 21 - 0
helper/ugc/special.php

@@ -113,12 +113,21 @@ class special
     public function __construct($items) {
         $this->mItems = $items;
     }
+    public function special_id() {
+        return intval($this->mItems['special_id']);
+    }
+    public function memberid() {
+        return intval($this->mItems['member_id']);
+    }
     public function published() {
         return intval($this->mItems['state']) == 1;
     }
     public function editing() {
         return intval($this->mItems['state']) == 0;
     }
+    public function description() {
+        return $this->mItems['description'];
+    }
     public function has_vote()
     {
         return ($this->vote_param() != false);
@@ -182,6 +191,18 @@ class special
             return new submit_rule(unserialize($result));
         }
     }
+    public function comments() {
+        return intval($this->mItems['comments']);
+    }
+    public function clicks() {
+        return intval($this->mItems['clicks']);
+    }
+    public function editime() {
+        return intval($this->mItems['editime']);
+    }
+    public function pubtime() {
+        return intval($this->mItems['pubtime']);
+    }
 
     public function bless()
     {

+ 30 - 2
helper/ugc_helper.php

@@ -14,7 +14,6 @@ require_once(BASE_ROOT_PATH . '/helper/ugc/answer.php');
 require_once(BASE_ROOT_PATH . '/helper/ugc/friends.php');
 require_once(BASE_ROOT_PATH . '/helper/ugc/special.php');
 require_once(BASE_ROOT_PATH . '/helper/ugc/setting.php');
-
 require_once(BASE_ROOT_PATH . '/helper/search/tcp_client.php');
 require_once(BASE_ROOT_PATH . '/helper/bonus_helper.php');
 require_once(BASE_ROOT_PATH . '/helper/predeposit_helper.php');
@@ -45,11 +44,12 @@ class ugc_helper
         }
         $setting = new ugc\setting($setting,$special);
         $rule = $setting->format();
+        $rule['pubtime'] = time();
         $ret = $mod_special->editUserSpecial($special_id,['special_id' => $special_id,'member_id' => session_helper::memberid()],$rule);
         if($ret != false) {
             $type = $setting->reader_type();
             $spid = intval($special_id);
-            QueueClient::push('onPublishSpecial',['user_id' => session_helper::memberid(),'specials'=> ['type' => $type,'spid' => $spid]]);
+            QueueClient::push('onPublishSpecial',['user_id' => session_helper::memberid(),'specials'=> array(['type' => $type,'spid' => $spid])]);
         }
 
         return $ret;
@@ -85,6 +85,7 @@ class ugc_helper
     {
         $initer = new ugciniter();
         $initer->init_fellows();
+        $initer->init_special();
     }
 }
 
@@ -150,4 +151,31 @@ class ugciniter
             }
         }
     }
+    public function init_special()
+    {
+        $i = 0;
+        while (true)
+        {
+            $start = $i * 1000;
+            $items = Model()->table('mb_special')->where(['from_user' => 1])->field('special_id,member_id,reader_type')->order('member_id asc')->limit("{$start},1000")->select();
+            if(empty($items)) {
+                return;
+            }
+            $i++;
+
+            foreach ($items as $item) {
+                $this->add_special($item);
+            }
+        }
+    }
+    private function add_special($item)
+    {
+        $user_id     = intval($item['member_id']);
+        $special_id  = intval($item['special_id']);
+        $reader_type = intval($item['reader_type']);
+
+        if($user_id >0 && $special_id > 0) {
+            search\relation_client::instance()->add_special(array('user_id' => $user_id,'specials'=> [['type' => $reader_type,'spid' => $special_id]]));
+        }
+    }
 }

+ 4 - 1
mac_start.sh

@@ -3,4 +3,7 @@ sudo /usr/local/mysql/support-files/mysql.server restart
 sudo nginx
 sudo php-fpm
 redis-server /etc/redis/6379.conf
-redis-server /etc/redis/6380.conf
+redis-server /etc/redis/6380.conf
+./daemon/mac_ugcman
+php ./centra_srv.php
+php ./ugc_srv.php

+ 147 - 1
mobile/control/member_ugc.php

@@ -9,9 +9,13 @@
 
 require_once(BASE_ROOT_PATH . '/mobile/control/special.php');
 require_once(BASE_ROOT_PATH . '/helper/ugc_helper.php');
+require_once(BASE_ROOT_PATH . '/helper/search/tcp_client.php');
 
 class member_ugcControl extends specialControl
 {
+    const greater = 0;
+    const lesser  = 1;
+
     public function __construct()
     {
         parent::__construct();
@@ -19,14 +23,149 @@ class member_ugcControl extends specialControl
 
     public function pub_listOp()
     {
-
+        return $this->fetch('pub_list');
     }
 
     public function pri_listOp()
     {
+        $this->need_login();
+        return $this->fetch('pub_list');
+    }
+    public function mine_listOp()
+    {
+        $this->need_login();
+        return $this->fetch('mine_list');
+    }
+
+    private function fetch($type)
+    {
+        $special_id = intval($_GET['special_id']);
+        $count = $this->page_size();
+
+        if(empty($special_id) || $special_id == -1) {
+            $special_id = -1;
+            $direct = self::lesser;
+        }
+        else {
+            $direct = $this->direct();
+        }
+
+        if($type == "pub_list") {
+            $result = search\relation_client::instance()->fetch_pub_special(['special_id' => $special_id,'count'=> $count,'type' => $direct]);
+        }
+        elseif($type == 'pri_list') {
+            $result = search\relation_client::instance()->fetch_pri_special(['user_id' => intval($_SESSION['member_id']),
+                'special_id' => $special_id,'count'=> $count,'type' => $direct]);
+        }
+        elseif($type == "mine_list") {
+            $result = search\relation_client::instance()->fetch_self_special(['user_id' => intval($_SESSION['member_id']),
+                'special_id' => $special_id,'count'=> $count,'type' => $direct]);
+        }
+        else {
+            return self::outerr(errcode::ErrParamter);
+        }
+
+        $specials = $this->specials($result);
+        if($specials == false) {
+            return self::outsuccess(array('special_list' => null,'mobile_page' => mobile_page(0)));
+        }
+        else
+        {
+            $special_list = $this->special_list($specials,$ugcs);
+            return self::outsuccess(array('special_list' => $special_list,
+                'ugcs' => $ugcs,
+                'summary'  => null,
+                'groupbuy' => null,
+                'limitime' => null,
+                'bundling' => null,
+                'mobile_page' => mobile_page(1)));
+        }
+    }
+
+    private function direct()
+    {
+        $cur_page = $this->page_no();
+        if($cur_page == 1) {
+            return self::greater;
+        } else {
+            return self::lesser;
+        }
+    }
+    private function specials($result)
+    {
+        if(empty($result)) return false;
 
+        $code = intval($result['code']);
+        if($code != 200) {
+            return false;
+        }
+        else {
+            $specials = $result['data']['specials'];
+            return empty($specials) ? false : $specials;
+        }
     }
 
+    private function special_list($spids, &$ugcs)
+    {
+        $result = [];
+        $mod_special = Model('mb_special');
+        $items = $mod_special->getMbSpecialList(['special_id' => ['in',$spids]]);
+
+        $users = [];
+        $specials = [];
+        foreach ($items as $item)
+        {
+            $special = new ugc\special($item);
+            $specials[] = $special;
+            $sender = $special->memberid();
+            $users[] = $sender;
+        }
+        sort($users);
+        array_unique($users);
+
+        $minfos = [];
+        if(!empty($users))
+        {
+            $mod_member = Model('member');
+            $members = $mod_member->getMemberList(['member_id' => ['in',$users]]);
+            foreach ($members as $member) {
+                $info = new member_info($member);
+                $mid = $info->member_id();
+                $minfos[$mid] = $info;
+            }
+        }
+
+        $ugcs = [];
+        foreach ($specials as $special)
+        {
+            $block = special_formater::format_ugc($special);
+            $result[] = $block;
+            $divider = special_formater::def_divider();
+            $result[] = $divider;
+
+            $mid = $special->memberid();
+            $minfo = $minfos[$mid];
+            $ugc = $this->formate_ugc($minfo,$special);
+            $ugcs[] = $ugc;
+        }
+        return $result;
+    }
+
+    private function formate_ugc(member_info $minfo,ugc\special $special)
+    {
+        $ret['special_id'] = $special->special_id();
+        $ret['member_avatar'] = $minfo->avatar();
+        $ret['member_nickname'] = $minfo->nickname();
+        $ret['has_vote'] = $special->has_vote();
+        $ret['appreciate_num'] = 100;
+        $ret['comment_num'] = $special->comments();
+        $ret['clicks'] = $special->clicks();
+        $ret['pubtime'] = $special->editime();
+        $ret['desc'] = $special->description();
+
+        return $ret;
+    }
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     public function addOp()
     {
         $this->need_login();
@@ -90,6 +229,13 @@ class member_ugcControl extends specialControl
         }
     }
 
+    public function mineOp()
+    {
+        $this->need_login();
+        $user_id = $_SESSION['member_id'];
+
+
+    }
     public function delOp()
     {
 

+ 14 - 3
test/TestFriends.php

@@ -42,13 +42,16 @@ class TestFriends extends PHPUnit_Framework_TestCase
 
     public function testAddSpecial()
     {
-        for ($i =0 ; $i < 10000; ++$i)
+        //for ($i =0 ; $i < 10000; ++$i)
         {
-            $result = search\relation_client::instance()->add_special(array('user_id' => 36490,'specials'=>array(['type' => 1, 'spid' =>1],['type' => 1,'spid' => 2],['type' => 1,'spid' => 3])));
-            $result = search\relation_client::instance()->add_special(array('user_id' => 36490,'specials'=>array(['type' => 1, 'spid' =>5],['type' => 1,'spid' => 4],['type' => 0,'spid' => 7])));
+//            $result = search\relation_client::instance()->add_special(array('user_id' => 36490,'specials'=>array(['type' => 1, 'spid' =>1],['type' => 1,'spid' => 2],['type' => 1,'spid' => 3])));
+//            $result = search\relation_client::instance()->add_special(array('user_id' => 36490,'specials'=>array(['type' => 1, 'spid' =>5],['type' => 1,'spid' => 4],['type' => 0,'spid' => 7])));
             $result = search\relation_client::instance()->add_special(array('user_id' => 36490,'specials'=>array(['type' => 0,'spid' => 7])));
             $result = search\relation_client::instance()->add_special(array('user_id' => 36490,'specials'=>array(['type' => 0,'spid' => 6])));
             $result = search\relation_client::instance()->add_special(array('user_id' => 36490,'specials'=>array(['type' => 0,'spid' => 9])));
+            $result = search\relation_client::instance()->add_special(array('user_id' => 36490,'specials'=>array(['type' => 0,'spid' => 17])));
+            $result = search\relation_client::instance()->add_special(array('user_id' => 36490,'specials'=>array(['type' => 0,'spid' => 16])));
+            $result = search\relation_client::instance()->add_special(array('user_id' => 36490,'specials'=>array(['type' => 0,'spid' => 19])));
         }
     }
 
@@ -60,6 +63,9 @@ class TestFriends extends PHPUnit_Framework_TestCase
 
     public function testFetchPub()
     {
+        $result = search\relation_client::instance()->fetch_pub_special(['special_id' => -1,'count'=> 10,'type' => 1]);
+
+
         for ($i =0 ; $i < 10000; ++$i)
         {
             $result = search\relation_client::instance()->fetch_pub_special(['special_id' => 11,'count'=> 10,'type' => 1]);
@@ -89,4 +95,9 @@ class TestFriends extends PHPUnit_Framework_TestCase
         $publisher = new message\publisher();
         $publisher->del_special(36490,array(['type' => 1, 'spid' =>1],['type' => 1,'spid' => 2],['type' => 1,'spid' => 3]));
     }
+    public function testFetchSelfSpecials()
+    {
+        $result = search\relation_client::instance()->fetch_self_special(['user_id' => 39621,
+            'special_id' => -1,'count'=> 20,'type' => 1]);
+    }
 }

+ 7 - 7
ugc_srv.php

@@ -10,11 +10,11 @@ define('BASE_ROOT_PATH',str_replace('\\','/',dirname(__FILE__)));
 
 define('UGC_SUBSCRIBER_PROC',true);
 
-require_once (BASE_ROOT_PATH . '/fooder.php');
-require_once (BASE_ROOT_PATH . '/helper/algorithm.php');
-require_once (BASE_ROOT_PATH . '/helper/message/msgutil.php');
-require_once (BASE_ROOT_PATH . '/helper/message/subscriber.php');
-require_once (BASE_ROOT_PATH . '/helper/ugc_helper.php');
+require_once(BASE_ROOT_PATH . '/fooder.php');
+require_once(BASE_ROOT_PATH . '/helper/algorithm.php');
+require_once(BASE_ROOT_PATH . '/helper/message/msgutil.php');
+require_once(BASE_ROOT_PATH . '/helper/message/subscriber.php');
+require_once(BASE_ROOT_PATH . '/helper/ugc_helper.php');
 require_once(BASE_ROOT_PATH . '/helper/search/tcp_client.php');
 
 function all_channels() {
@@ -118,5 +118,5 @@ function fork_subprocess($count)
     }
 }
 
-work_proc();
-//fork_subprocess(1);
+fork_subprocess(1);
+//work_proc();