Пример #1
0
 function likeEvent($like = 1)
 {
     global $current_user;
     $current_user = new CurrentUser();
     if (!$current_user->id) {
         return;
     }
     $id = $_POST['id'];
     if ($like) {
         $res = MongoDatabase::eventLike($id, $current_user->id);
     } else {
         $res = MongoDatabase::eventUnlike($id, $current_user->id);
     }
     $this->data['result'] = $res;
     $event_owner = $res['event_owner'];
     if ($res && $like && $id && $event_owner != $current_user->id) {
         // перетаскиваем запись к себе на стену
         $followerIds = $current_user->getFollowers();
         $followerIds[$current_user->id] = $current_user->id;
         MongoDatabase::pushEvents($current_user->id, $followerIds, $id, time(), $event_owner);
     }
     if (!$like && $id && $event_owner != $current_user->id) {
         // разонравилась. удаляем эту запись с моей стены
         $followerIds = $current_user->getFollowers();
         $followerIds[$current_user->id] = $current_user->id;
         MongoDatabase::removeWallItem(array_keys($followerIds), $id, $event_owner);
     }
 }
Пример #2
0
 function onNewFollowing($i_now_follow_id)
 {
     // все друзья кроме свежедобавленного должны узнать об этом!
     $event = new Event();
     $event->event_FollowingAdd($this->id, $i_now_follow_id);
     $event->push(array($i_now_follow_id));
     // а я получаю всю ленту свежедобавленного друга (последние 50 эвентов хотя бы) к себе на стену
     $wall = MongoDatabase::getUserWall($i_now_follow_id, 0, 50, 'self');
     foreach ($wall as $wallItem) {
         if (isset($wallItem['_id'])) {
             MongoDatabase::pushEvents($i_now_follow_id, array($this->id), (string) $wallItem['id'], $wallItem['time']);
         }
     }
 }
Пример #3
0
 public function push($walls_disabled = array())
 {
     global $current_user;
     if (!$this->canPushed) {
         return;
     }
     $eventId = false;
     // ревью обновляем
     if ($this->data['type'] == self::EVENT_BOOKS_REVIEW_ADD || $this->data['type'] == self::EVENT_BOOKS_RATE_ADD) {
         // ищем старую
         $eventId = MongoDatabase::findReviewEvent($current_user->id, $this->data['bid']);
         if ($eventId) {
             // есть старая? нужно удалить запись на стене со ссылкой на старую запись со всех стен
             MongoDatabase::deleteWallItemsByEventId($eventId);
             MongoDatabase::updateEvent($eventId, $this->data);
         }
     }
     // а если был такой эвент недавно, с тем же типом
     // то обновляем эфент, добавляя туда объекты
     if (in_array($this->data['type'], self::$eventsMultTypes)) {
         // находим эвент с таким типом
         $additionalCriteria = array();
         if ($this->data['type'] == self::EVENT_BOOKS_ADD_SHELF) {
             $additionalCriteria['shelf_id'] = $this->data['shelf_id'];
         }
         list($eventId, $data) = MongoDatabase::findLastEventByType($this->data['user_id'], $this->data['type'], $additionalCriteria);
         if ($eventId) {
             // нашли эвент!
             $old_time = isset($data['time']) ? $data['time'] : time();
             foreach ($this->data as $field => $value) {
                 if (!isset($data[$field])) {
                     $data[$field] = $value;
                 }
                 if (is_array($value)) {
                     foreach ($value as $val) {
                         if (is_array($data[$field])) {
                             $data[$field][$val] = $val;
                         }
                     }
                 }
             }
             $data['time'] = $old_time;
             MongoDatabase::deleteWallItemsByEventId($eventId);
             MongoDatabase::updateEvent($eventId, $data);
         }
     }
     $eventDbId = 0;
     if (!$eventId) {
         $eventId = MongoDatabase::addEvent($this->data);
         $query = 'INSERT INTO `events` SET `mongoid`=' . Database::escape($eventId);
         Database::query($query, false);
         $eventDbId = Database::lastInsertId();
         if (!$eventDbId) {
             throw new Exception('cant push event id to database');
         }
     }
     if ($eventId) {
         $user = Users::getById($this->data['user_id']);
         /* @var $user User */
         $followerIds = $user->getFollowers();
         $followerIds[$user->id] = $user->id;
         foreach ($walls_disabled as $id) {
             if (isset($followerIds[$id])) {
                 unset($followerIds[$id]);
             }
         }
         MongoDatabase::pushEvents($this->data['user_id'], $followerIds, $eventId, $this->data['time']);
     }
     return $eventDbId;
 }