public function execute() { // (1) generate a conv id $ids = array(); foreach ($this->requestData['user_to_invite'] as $userToInvite) { $ids[] = $userToInvite['id']; } // always add our selve to the array for the conv id $ids[] = $this->requestData['user']['id']; // (2) check if conv id exists if ($id = $this->conversationMapper->existsByUsers($ids)) { $id = $id['conv_id']; } else { $id = $this->generateConvId(); // (3) Create the conv $conversation = new Conversation(); $conversation->setConversationId($id); $this->conversationMapper->insert($conversation); } // (5) invite the user_to_invite since we just created the conv // foreach user to invite $requestData = array(); $requestData['conv_id'] = $id; $requestData['user'] = $this->requestData['user']; foreach ($this->requestData['user_to_invite'] as $userToInvite) { if ($userToInvite['id'] !== $this->requestData['user']['id']) { $requestData['user_to_invite'] = $userToInvite; $this->invite->setRequestData($requestData); $this->invite->execute(); } } // (4) join the just created conv $this->requestData['conv_id'] = $id; $this->join->setRequestData($this->requestData); $this->join->execute(); // Fetch users in conv $this->getUsers->setRequestData(array("conv_id" => $this->requestData['conv_id'])); $users = $this->getUsers->execute(); $users = $users['users']; // Fetch messages in conv $this->messages->setRequestData(array("conv_id" => $this->requestData['conv_id'], 'user' => $this->requestData['user'])); $messages = $this->messages->execute(); $messages = $messages['messages']; return array("conv_id" => $id, "users" => $users, "messages" => $messages); }
public function existsByUserProvider() { $conv1Id = md5(time()); $conv1 = new Conversation(); $conv1->setConversationId($conv1Id); $user1InConv1 = new User(); $user1InConv1->setConversationId($conv1Id); $user1InConv1->setUser('foo'); $user1InConv1->setJoined(time() - 53353); $user2InConv1 = new User(); $user2InConv1->setConversationId($conv1Id); $user2InConv1->setUser('bar'); $user2InConv1->setJoined(time() - 53353); $conv2Id = md5(time() - 3434); $conv2 = new Conversation(); $conv2->setConversationId($conv2Id); $user1InConv2 = new User(); $user1InConv2->setConversationId($conv2Id); $user1InConv2->setUser('foo'); $user1InConv2->setJoined(time() - 53353); $user2InConv2 = new User(); $user2InConv2->setConversationId($conv2Id); $user2InConv2->setUser('bar'); $user2InConv2->setJoined(time() - 53353); $user3InConv2 = new User(); $user3InConv2->setConversationId($conv2Id); $user3InConv2->setUser('foobar'); $user3InConv2->setJoined(time() - 53353); return array(array($conv1, $user1InConv1, $user2InConv1, $conv2, $user1InConv2, $user2InConv2, $user3InConv2)); }