Completed
Push — master ( 5b5cdc...a6b764 )
by Sam
02:28
created

SubscriptionQuery::getNewestMatching()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 6
rs 9.4285
cc 1
eloc 4
nc 1
nop 2
1
<?php
2
3
namespace Jalle19\StatusManager\Database;
4
5
use Jalle19\StatusManager\Database\Base\SubscriptionQuery as BaseSubscriptionQuery;
6
use Jalle19\StatusManager\Subscription\StateChange;
7
use Jalle19\tvheadend\model\SubscriptionStatus;
8
use Propel\Runtime\ActiveQuery\Criteria;
9
10
/**
11
 * @package   Jalle19\StatusManager\Database
12
 * @copyright Copyright &copy; Sam Stenvall 2015-
13
 * @license   https://www.gnu.org/licenses/gpl.html The GNU General Public License v2.0
14
 */
15
class SubscriptionQuery extends BaseSubscriptionQuery
16
{
17
18
	/**
19
	 * @param Instance           $instance
20
	 * @param User|null          $user
21
	 * @param Channel            $channel
22
	 * @param SubscriptionStatus $subscription
23
	 *
24
	 * @return bool
25
	 * @throws \Propel\Runtime\Exception\PropelException
26
	 */
27
	public function hasSubscription(
28
		Instance $instance,
29
		$user,
30
		Channel $channel,
31
		SubscriptionStatus $subscription
32
	) {
33
		// Not all subscriptions are tied to a user
34
		$userId = $user !== null ? $user->getId() : null;
35
36
		return $this->filterByInstance($instance)->filterByUserId($userId)
37
		            ->filterByChannel($channel)
38
		            ->filterBySubscriptionId($subscription->id)->filterByStarted($subscription->start)
39
		            ->findOne() !== null;
40
	}
41
42
43
	/**
44
	 * @param string $instanceName
45
	 * @param int    $subscriptionId
46
	 *
47
	 * @return Subscription
48
	 */
49
	public function getNewestMatching($instanceName, $subscriptionId)
50
	{
51
		return $this->filterByInstanceName($instanceName)
52
		            ->filterBySubscriptionId($subscriptionId)
53
		            ->addDescendingOrderByColumn('started')->findOne();
54
	}
55
56
57
	/**
58
	 * @param Instance $instance
59
	 * @param User     $user
60
	 *
61
	 * @return SubscriptionQuery
62
	 * @throws \Propel\Runtime\Exception\PropelException
63
	 */
64
	public function getPopularChannelsQuery(Instance $instance, User $user)
65
	{
66
		$this->withColumn('channel.name', 'channelName');
67
		$this->withColumn('user.name', 'userName');
68
		$this->withColumn('SUM((julianday(subscription.stopped) - julianday(subscription.started)) * 86400)',
69
			'totalTimeSeconds');
70
		$this->select(['channelName', 'userName', 'totalTimeSeconds']);
71
		$this->joinChannel('channel');
72
		$this->joinUser('user');
73
		$this->groupBy('channelName');
74
		$this->orderBy('totalTimeSeconds', Criteria::DESC);
75
76
		// Apply filtering
77
		$this->filterByStopped(null, Criteria::NOT_EQUAL);
78
		$this->filterByInstance($instance);
79
80
		if ($user !== null)
81
			$this->filterByUser($user);
82
83
		return $this;
84
	}
85
86
}
87