예제 #1
0
파일: Event.php 프로젝트: rasstroen/metro
 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;
 }