Popular downloads stuff.
[rock.divinelegy.git] / DataAccess / StepMania / PackRepository.php
1 <?php
2
3 namespace DataAccess\StepMania;
4
5 use DataAccess\StepMania\IPackRepository;
6 use DataAccess\DataMapper\IDataMapper;
7 use DataAccess\Queries\IQueryBuilderFactory;
8 use Domain\Entities\StepMania\IPack;
9
10 //TODO: Implement some sort of caching. Probably OK for now not to worry.
11 class PackRepository implements IPackRepository
12 {
13 private $_dataMapper;
14 private $_queryBuilderFactory;
15
16 public function __construct(IDataMapper $dataMapper, IQueryBuilderFactory $queryBuilderFactory) {
17 $this->_dataMapper = $dataMapper;
18 $this->_queryBuilderFactory = $queryBuilderFactory;
19 }
20
21 public function findById($id) {
22 $queryBuilder = $this->_queryBuilderFactory->createInstance();
23 $queryBuilder->where('id', '=', $id);
24
25 $result = $this->_dataMapper->map('Pack', $queryBuilder);
26 return reset($result);
27 }
28
29 public function findAll()
30 {
31 $queryBuilder = $this->_queryBuilderFactory->createInstance();
32 $queryBuilder->where('id', '>', 0);
33
34 $result = $this->_dataMapper->map('Pack', $queryBuilder);
35 return $result;
36 }
37
38 public function findByFileId($id)
39 {
40 $queryBuilder = $this->_queryBuilderFactory->createInstance();
41 $queryBuilder->where('file_id', '=', $id);
42 return $this->_dataMapper->map('Pack', $queryBuilder);
43 }
44
45 public function findRange($id, $limit)
46 {
47 $queryBuilder = $this->_queryBuilderFactory->createInstance();
48 $queryBuilder->where('id', '>=', $id)->limit(abs($limit));
49 if($limit < 0) $queryBuilder->orderBy('id', 'DESC');
50
51 return $this->_dataMapper->map('Pack', $queryBuilder);
52 }
53
54 public function save(IPack $entity) {
55 return $this->_dataMapper->save($entity);
56 }
57
58 //TODO: Implement
59 public function remove(IPack $entity) {
60 ;
61 }
62
63 public function findByTitle($title)
64 {
65 $queryBuilder = $this->_queryBuilderFactory->createInstance();
66 $queryBuilder->where('title', 'LIKE', "%%$title%%");
67
68 return $this->_dataMapper->map('Pack', $queryBuilder);
69 }
70
71 public function findByContributor($artistName)
72 {
73 $queryBuilder = $this->_queryBuilderFactory->createInstance();
74 $queryBuilder->join('inner', 'packs', 'id', 'simfiles', 'pack_id')
75 ->join('inner', 'simfiles', 'id', 'steps', 'simfile_id')
76 ->join('inner', 'steps', 'step_artist_id', 'step_artists', 'id')
77 ->where('tag', 'LIKE', "%%$artistName%%");
78
79 return $this->_dataMapper->map('Pack', $queryBuilder);
80 }
81 }