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; }