Offline::sendOfflineMsg()   B
last analyzed

Complexity

Conditions 4
Paths 4

Size

Total Lines 26
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 26
rs 8.5806
cc 4
eloc 18
nc 4
nop 0
1
<?php
2
/**
3
 * Copyright (c) 2014, Tobia De Koninck hey--at--ledfan.be
4
 * This file is licensed under the AGPL version 3 or later.
5
 * See the COPYING file.
6
 */
7
8
namespace OCA\Chat\OCH\Commands;
9
10
use \OCA\Chat\OCH\ChatAPI;
11
use \OCA\Chat\OCH\Db\UserOnlineMapper;
12
use \OCA\Chat\OCH\Db\PushMessageMapper;
13
use \OCA\Chat\OCH\Commands\SyncOnline;
14
use \OCA\Chat\OCH\Db\PushMessage;
15
use \OCA\Chat\App\Chat;
16
17
class Offline extends ChatAPI {
18
19
	/**
20
	 * @var $pushMessageMapper \OCA\Chat\OCH\Db\PushMessageMapper
21
	 */
22
	private $pushMessageMapper;
23
24
	/**
25
	 * @var $userMapper \OCA\Chat\OCH\Db\UserOnlineMapper
26
	 */
27
	private $userOnlineMapper;
28
29
	/**
30
	 * @var $syncOnline \OCA\Chat\OCH\Commands\SyncOnline
31
	 */
32
	private $syncOnline;
33
34
	public function __construct(
35
		PushMessageMapper $pushMessageMapper,
36
		UserOnlineMapper $userOnlineMapper,
37
		SynConline $syncOnline
38
	){
39
		$this->pushMessageMapper = $pushMessageMapper;
40
		$this->userOnlineMapper = $userOnlineMapper;
41
		$this->syncOnline = $syncOnline;
42
43
	}
44
45
46
	public function setRequestData(array $requestData){
47
		$this->requestData = $requestData;
48
	}
49
50
	public function execute(){
51
		$this->userOnlineMapper->deleteBySessionId($this->requestData['session_id']);
52
		$this->syncOnline->execute();
53
		$this->sendOfflineMsg();
54
	}
55
56
	private function sendOfflineMsg(){
57
		// first check if we're really offline
58
		$sessions = $this->userOnlineMapper->findByUser($this->requestData['user']['id']);
59
		if(count($sessions) === 0){
60
			$command = json_encode(array(
61
				'type' => 'offline',
62
				'data' => array(
63
					'user' => $this->requestData['user'],
64
					'timestamp' => $this->requestData['timestamp'],
65
				)
66
			));
67
68
			$users = $this->userOnlineMapper->getAll();
69
			$sender = $this->requestData['user']['id'];
70
			foreach($users as $user){
71
				if($user->getUser() !== $sender){
72
					$pushMessage = new PushMessage();
73
					$pushMessage->setSender($sender);
74
					$pushMessage->setReceiver($user->getUser());
75
					$pushMessage->setReceiverSessionId($user->getSessionId());
76
					$pushMessage->setCommand($command);
77
					$this->pushMessageMapper->insert($pushMessage);
78
				}
79
			}
80
		}
81
	}
82
83
}
84
85