PublicationsService   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 100
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 0

Importance

Changes 2
Bugs 1 Features 0
Metric Value
wmc 7
c 2
b 1
f 0
lcom 0
cbo 0
dl 0
loc 100
rs 10

6 Methods

Rating   Name   Duplication   Size   Complexity  
A findOne() 0 8 1
A find() 0 8 1
A getRandom() 0 8 1
A getNext() 0 4 1
A getPrevious() 0 4 1
A getSiblings() 0 9 2
1
<?php
2
3
namespace Fenrizbes\PublicationsBundle\Service;
4
5
use Fenrizbes\PublicationsBundle\Model\Publication;
6
use Fenrizbes\PublicationsBundle\Model\PublicationQuery;
7
8
class PublicationsService
9
{
10
    /**
11
     * Returns a piece of news by its slug
12
     *
13
     * @param $slug
14
     * @param null $type_key
15
     * @param null $criteria
16
     * @return Publication
17
     */
18
    public function findOne($slug, $type_key = null, $criteria = null)
19
    {
20
        return PublicationQuery::create(null, $criteria)
21
            ->applyBaseFilter($type_key)
22
            ->filterBySlug($slug)
23
            ->findOne()
24
        ;
25
    }
26
27
    /**
28
     * Returns a propel's pager
29
     *
30
     * @param string|null $type_key
31
     * @param int $limit
32
     * @param int $page
33
     * @param string $sort_order
34
     * @param null $criteria
35
     * @return \PropelModelPager
36
     */
37
    public function find($type_key = null, $limit = 10, $page = 1, $sort_order = \Criteria::DESC, $criteria = null)
38
    {
39
        return PublicationQuery::create(null, $criteria)
40
            ->applyBaseFilter($type_key)
41
            ->applySorting($sort_order)
42
            ->paginate($page, $limit)
43
        ;
44
    }
45
46
    /**
47
     * Returns a random set of publications
48
     *
49
     * @param string|null $type_key
50
     * @param int $limit
51
     * @param null $criteria
52
     * @return \PropelObjectCollection|Publication|null
53
     */
54
    public function getRandom($type_key = null, $limit = 1, $criteria = null)
55
    {
56
        return PublicationQuery::create(null, $criteria)
57
            ->applyBaseFilter($type_key)
58
            ->sortRandomly()
59
            ->findWithLimit($limit)
60
        ;
61
    }
62
63
    /**
64
     * Returns next publications
65
     *
66
     * @param Publication $current
67
     * @param int $limit
68
     * @param null $criteria
69
     * @return \PropelObjectCollection|Publication|null
70
     */
71
    public function getNext(Publication $current, $limit = 1, $criteria = null)
72
    {
73
        return $this->getSiblings($current, $limit, \Criteria::GREATER_THAN, $criteria);
74
    }
75
76
    /**
77
     * Returns previous publications
78
     *
79
     * @param Publication $current
80
     * @param int $limit
81
     * @param null $criteria
82
     * @return \PropelObjectCollection|Publication|null
83
     */
84
    public function getPrevious(Publication $current, $limit = 1, $criteria = null)
85
    {
86
        return $this->getSiblings($current, $limit, \Criteria::LESS_THAN, $criteria);
87
    }
88
89
    /**
90
     * Returns next or previous publications
91
     *
92
     * @param Publication $current
93
     * @param int $limit
94
     * @param string $comparison
95
     * @param null $criteria
96
     * @return \PropelObjectCollection|Publication|null
97
     */
98
    protected function getSiblings(Publication $current, $limit, $comparison, $criteria = null)
99
    {
100
        return PublicationQuery::create(null, $criteria)
101
            ->applyBaseFilter($current->getPublicationTypeKey())
102
            ->filterByCreatedAt($current->getCreatedAt(), $comparison)
103
            ->applySorting($comparison == \Criteria::GREATER_THAN ? \Criteria::ASC : \Criteria::DESC)
104
            ->findWithLimit($limit)
105
        ;
106
    }
107
}