EncryptedFileRepository::findForDownload()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 14
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 9
c 1
b 0
f 0
dl 0
loc 14
rs 9.9666
cc 2
nc 2
nop 2
1
<?php
2
3
namespace Azine\JsCryptoStoreBundle\Entity\Repositories;
4
5
use Doctrine\ORM\EntityRepository;
6
7
/**
8
 * EncryptedFileRepository.
9
 */
10
class EncryptedFileRepository extends EntityRepository
11
{
12
    /**
13
     * Remove expired files from DB.
14
     */
15
    public function removeExpiredFiles()
16
    {
17
        $now = new \DateTime();
18
        $queryBuilder = $this->createQueryBuilder('f')
19
            ->select('f.file as file')
20
            ->where('f.expiry < :now')
21
            ->setParameter('now', $now);
22
23
        $expiredFiles = $queryBuilder->getQuery()->execute();
24
        foreach ($expiredFiles as $next) {
25
            unlink($next['file']);
26
        }
27
28
        $queryBuilder = $this->createQueryBuilder('f')
29
            ->delete()
30
            ->where('f.expiry < :now')
31
            ->setParameter('now', $now);
32
33
        $queryBuilder->getQuery()->execute();
34
    }
35
36
    /**
37
     * @param $owner_id
38
     *
39
     * @return array of array groupToken => EncryptedFile
40
     */
41
    public function findForDashBoard($owner_id)
42
    {
43
        $queryBuilder = $this->createQueryBuilder('f')
44
            ->select('f.description as description, f.expiry as expiry, f.mimeType as mimeType, f.fileName as fileName, f.groupToken as groupToken, f.token as token')
45
            ->where('f.owner_id = :ownerId')
46
            ->setParameter('ownerId', $owner_id)
47
            ->orderBy('f.groupToken', 'desc');
48
49
        $files = $queryBuilder->getQuery()->execute();
50
        $fileGroups = array();
51
        foreach ($files as $file) {
52
            $groupToken = $file['groupToken'];
53
            $file['group'] = substr($files[0]['groupToken'], 0, strrpos($files[0]['groupToken'], '-'));
54
            if (!array_key_exists($groupToken, $fileGroups)) {
55
                $fileGroups[$groupToken] = array();
56
            }
57
            $fileGroups[$groupToken][] = $file;
58
        }
59
60
        return $fileGroups;
61
    }
62
63
    public function findForDownload($groupToken, $token = null)
64
    {
65
        $queryBuilder = $this->createQueryBuilder('f')
66
            ->select('f.description as description, f.expiry as expiry, f.mimeType as mimeType, f.fileName as fileName, f.groupToken as groupToken, f.token as token')
67
            ->where('f.groupToken = :groupToken')
68
            ->setParameter('groupToken', $groupToken)
69
            ->orderBy('f.groupToken', 'desc');
70
71
        if (null != $token) {
72
            $queryBuilder->andWhere('f.token = :token')
73
                ->setParameter('token', $token);
74
        }
75
76
        return $queryBuilder->getQuery()->execute();
77
    }
78
79
    public function getGroupTokensForUser($owner_id)
80
    {
81
        $queryBuilder = $this->createQueryBuilder('f')
82
            ->select('f.groupToken as groupToken')
83
            ->distinct()
84
            ->where('f.owner_id = :ownerId')
85
            ->setParameter('ownerId', $owner_id)
86
            ->orderBy('f.groupToken', 'desc')
87
            ;
88
89
        $result = array();
90
        foreach ($queryBuilder->getQuery()->execute() as $next) {
91
            $result[] = substr($next['groupToken'], 0, strrpos($next['groupToken'], '-'));
92
        }
93
94
        return $result;
95
    }
96
}
97