|
@@ -0,0 +1,265 @@
|
|
|
+<?php
|
|
|
+/**
|
|
|
+ * Created by PhpStorm.
|
|
|
+ * User: stanley-king
|
|
|
+ * Date: 16/6/23
|
|
|
+ * Time: 下午10:28
|
|
|
+ */
|
|
|
+
|
|
|
+namespace relation;
|
|
|
+
|
|
|
+use \Exception;
|
|
|
+use \user_helper;
|
|
|
+use \algorithm_helper;
|
|
|
+
|
|
|
+class mem_relation
|
|
|
+{
|
|
|
+ //member_mobile VARCHAR(11) PRIMARY KEY NOT NULL COMMENT '用户手机号',
|
|
|
+ //member_id INT(11) DEFAULT '0' COMMENT '已经注册用户id',
|
|
|
+ //contact_name VARCHAR(50) DEFAULT '',
|
|
|
+ //subscriber TEXT COMMENT '订阅我为好友的人。',
|
|
|
+ //follower TEXT COMMENT '我订阅别人成为好友通过的人。',
|
|
|
+ //build_mobiles TEXT COMMENT '已经与我建立好友关系的手机号',
|
|
|
+ //unbuild_mobiles TEXT COMMENT '还未与我建立好友关系的手机号'
|
|
|
+
|
|
|
+ private $member_id;
|
|
|
+ private $member_mobile;
|
|
|
+ private $contact_name;
|
|
|
+ private $subscriber;
|
|
|
+ private $new_subscriber;
|
|
|
+ private $follower;
|
|
|
+ private $build_mobiles;
|
|
|
+ private $unbuild_mobiles;
|
|
|
+
|
|
|
+ private $mod_relation;
|
|
|
+ private $dirty;
|
|
|
+
|
|
|
+ public function __construct($member_id,$mobile,$name)
|
|
|
+ {
|
|
|
+ $this->dirty = false;
|
|
|
+ $this->member_id = 0;
|
|
|
+
|
|
|
+ if(isset($name) && !empty($name)) {
|
|
|
+ $this->contact_name = $name;
|
|
|
+ } else {
|
|
|
+ $this->contact_name = '';
|
|
|
+ }
|
|
|
+
|
|
|
+ $this->mod_relation = Model('member_relation');
|
|
|
+
|
|
|
+ if(isset($member_id) && intval($member_id) > 0)
|
|
|
+ {
|
|
|
+ $info = $this->mod_relation->findByID($member_id);
|
|
|
+ if(!empty($info)) {
|
|
|
+ $this->init($info);
|
|
|
+ return;
|
|
|
+ } else {
|
|
|
+ $this->member_id = $member_id;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(isset($mobile) && !empty($mobile))
|
|
|
+ {
|
|
|
+ $info = $this->mod_relation->findByMobile($mobile);
|
|
|
+ if(!empty($info)) {
|
|
|
+ $this->init($info);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ $mobile = user_helper::mobile_valid($mobile);
|
|
|
+ if($mobile == false) {
|
|
|
+ throw new Exception();
|
|
|
+ } else {
|
|
|
+ $this->member_mobile = $mobile;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ throw new Exception();
|
|
|
+ }
|
|
|
+
|
|
|
+ $this->dirty = true;
|
|
|
+ $this->subscriber = array();
|
|
|
+ $this->new_subscriber = array();
|
|
|
+ $this->follower = array();
|
|
|
+ $this->build_mobiles = array();
|
|
|
+ $this->unbuild_mobiles = array();
|
|
|
+ }
|
|
|
+
|
|
|
+ private function subscrib_me($member_id)
|
|
|
+ {
|
|
|
+ $ret = algorithm_helper::bsearch($member_id,$this->subscriber);
|
|
|
+ if($ret == false) {
|
|
|
+ array_push($this->subscriber,$member_id);
|
|
|
+ sort($this->subscriber);
|
|
|
+ $this->dirty = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ $ret = algorithm_helper::bsearch($member_id,$this->new_subscriber);
|
|
|
+ if($ret == false) {
|
|
|
+ array_push($this->new_subscriber,$member_id);
|
|
|
+ sort($this->new_subscriber);
|
|
|
+ $this->dirty = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private function doSubscribe($mobile, $name)
|
|
|
+ {
|
|
|
+ $someone = new mem_relation('', $mobile, $name);
|
|
|
+ $someone->subscrib_me($this->member_id);
|
|
|
+ $someone->save();
|
|
|
+ return $someone->member_id;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function subscribe($mobile,$name)
|
|
|
+ {
|
|
|
+ $someone_id = $this->doSubscribe($mobile, $name);
|
|
|
+ if($someone_id > 0) {
|
|
|
+ $this->add_fllower($someone_id);
|
|
|
+ $this->remove_unbuild($mobile);
|
|
|
+ $this->add_build($mobile);
|
|
|
+ } else {
|
|
|
+ $this->add_unbuild($mobile);
|
|
|
+ }
|
|
|
+ $this->save();
|
|
|
+ }
|
|
|
+
|
|
|
+ public function pass_subscrib()
|
|
|
+ {
|
|
|
+
|
|
|
+ }
|
|
|
+ private function subscribed($mobile)
|
|
|
+ {
|
|
|
+ if(algorithm_helper::bsearch($mobile,$this->build_mobiles) != false) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ if(algorithm_helper::bsearch($mobile,$this->unbuild_mobiles) != false) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function add_fllower($someone_id)
|
|
|
+ {
|
|
|
+ if(algorithm_helper::bsearch($someone_id,$this->follower) != false) {
|
|
|
+ array_push($this->follower,$someone_id);
|
|
|
+ sort($this->follower);
|
|
|
+ $this->dirty = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private function add_unbuild($mobile)
|
|
|
+ {
|
|
|
+ $ret = algorithm_helper::bsearch($mobile,$this->unbuild_mobiles);
|
|
|
+ if($ret == false) {
|
|
|
+ array_push($this->unbuild_mobiles,$mobile);
|
|
|
+ sort($this->unbuild_mobiles);
|
|
|
+ $this->dirty = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private function remove_unbuild($mobile)
|
|
|
+ {
|
|
|
+ $ret = algorithm_helper::bsearch($mobile,$this->unbuild_mobiles);
|
|
|
+ if($ret != false) {
|
|
|
+ unset($this->unbuild_mobiles[$ret]);
|
|
|
+ $this->dirty = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private function add_build($mobile)
|
|
|
+ {
|
|
|
+ $ret = algorithm_helper::bsearch($mobile,$this->build_mobiles);
|
|
|
+ if($ret == false) {
|
|
|
+ array_push($this->build_mobiles,$mobile);
|
|
|
+ sort($this->build_mobiles);
|
|
|
+ $this->dirty = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public function handle_contacts($contacts)
|
|
|
+ {
|
|
|
+ foreach ($contacts as $mobile => $name)
|
|
|
+ {
|
|
|
+ if($this->subscribed($mobile)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ $someone_id = $this->doSubscribe($mobile,$name);
|
|
|
+ if($someone_id > 0) {
|
|
|
+ $this->add_fllower($someone_id);
|
|
|
+ $this->remove_unbuild($mobile);
|
|
|
+ $this->add_build($mobile);
|
|
|
+ } else {
|
|
|
+ $this->add_unbuild($mobile);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $this->save();
|
|
|
+ }
|
|
|
+
|
|
|
+ private function save()
|
|
|
+ {
|
|
|
+ if($this->dirty) {
|
|
|
+ $data = array();
|
|
|
+ $data['member_mobile'] = $this->member_mobile;
|
|
|
+ $data['member_id'] = $this->member_id;
|
|
|
+ $data['contact_name'] = $this->contact_name;
|
|
|
+
|
|
|
+ $data['subscriber'] = serialize($this->subscriber);
|
|
|
+ $data['new_subscriber '] = serialize($this->new_subscriber);
|
|
|
+ $data['follower'] = serialize($this->follower);
|
|
|
+ $data['build_mobiles'] = serialize($this->build_mobiles);
|
|
|
+ $data['unbuild_mobiles'] = serialize($this->unbuild_mobiles);
|
|
|
+ $this->mod_relation->replace($data);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private function init($info)
|
|
|
+ {
|
|
|
+ $this->member_id = $info['member_id'];
|
|
|
+ $this->member_mobile = $info['member_mobile'];
|
|
|
+ $this->contact_name = $info['contact_name'];
|
|
|
+ $subscriber = $info['subscriber'];
|
|
|
+ $new_subscriber = $info['new_subscriber'];
|
|
|
+ $follower = $info['follower'];
|
|
|
+ $build_mobiles = $info['build_mobiles'];
|
|
|
+ $unbuild_mobiles = $info['unbuild_mobiles'];
|
|
|
+
|
|
|
+ if(is_null($subscriber) || empty($subscriber)) {
|
|
|
+ $this->subscriber = array();
|
|
|
+ } else {
|
|
|
+ $this->subscriber = unserialize($subscriber);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(is_null($new_subscriber) || empty($new_subscriber)) {
|
|
|
+ $this->new_subscriber = array();
|
|
|
+ } else {
|
|
|
+ $this->new_subscriber = unserialize($new_subscriber);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(is_null($follower) || empty($follower)) {
|
|
|
+ $this->follower = array();
|
|
|
+ } else {
|
|
|
+ $this->follower = unserialize($follower);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(is_null($build_mobiles) || empty($build_mobiles)) {
|
|
|
+ $this->build_mobiles = array();
|
|
|
+ } else {
|
|
|
+ $this->build_mobiles = unserialize($build_mobiles);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(is_null($unbuild_mobiles) || empty($unbuild_mobiles)) {
|
|
|
+ $this->unbuild_mobiles = array();
|
|
|
+ } else {
|
|
|
+ $this->unbuild_mobiles = unserialize($unbuild_mobiles);
|
|
|
+ }
|
|
|
+
|
|
|
+ sort($this->subscriber);
|
|
|
+ sort($this->new_subscriber);
|
|
|
+ sort($this->follower);
|
|
|
+ sort($this->build_mobiles);
|
|
|
+ sort($this->unbuild_mobiles);
|
|
|
+ }
|
|
|
+}
|