1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181
<?php
/* --------------------------------------------------------------
SlideRepositoryReader.inc.php 2016-09-05
Gambio GmbH
http://www.gambio.de
Copyright (c) 2016 Gambio GmbH
Released under the GNU General Public License (Version 2)
[http://www.gnu.org/licenses/gpl-2.0.html]
--------------------------------------------------------------
*/
/**
* Class SlideRepositoryReader
*
* @category System
* @package Slider
* @subpackage Repositories
*/
class SlideRepositoryReader implements SlideRepositoryReaderInterface
{
/**
* Table name
*
* @var string
*/
protected $table = 'slides';
/**
* Query builder.
*
* @var CI_DB_query_builder
*/
protected $db;
/**
* SlideRepositoryReader constructor.
*
* @param CI_DB_query_builder $db
*/
public function __construct(CI_DB_query_builder $db)
{
$this->db = $db;
}
/**
* Returns a SlideCollection for the given Slider ID.
*
* @param IdType $sliderId
*
* @throws UnexpectedValueException
* @throws InvalidArgumentException
*
* @return SlideCollection All slides found by the slider ID as a SlideCollection.
*/
public function getBySliderId(IdType $sliderId)
{
$slideArray = [];
$result = $this->db->from($this->table)
->where(['slider_id' => $sliderId->asInt()])
->order_by('sort_order')
->get();
foreach($result->result_array() as $row)
{
$slide = MainFactory::create('Slide');
$this->_setDbValues($slide, $row);
$slideArray[] = $slide;
}
return MainFactory::create('SlideCollection', $slideArray);
}
/**
* Returns a Slide instance by the given slide ID.
*
* @param IdType $slideId
*
* @throws UnexpectedValueException
* @throws InvalidArgumentException
*
* @return SlideInterface
*/
public function getById(IdType $slideId)
{
$slideData = $this->db->get_where($this->table, ['slide_id' => $slideId->asInt()])->row_array();
if($slideData === null)
{
throw new UnexpectedValueException('The requested slide was not found in the database (ID:'
. $slideId->asInt() . ')');
}
$slide = MainFactory::create('Slide');
$this->_setDbValues($slide, $slideData);
return $slide;
}
/**
* Returns a SlideCollection with all existing Slide objects by the given slider ID and language ID.
*
* @param IdType $sliderId
* @param IdType $languageId
*
* @throws UnexpectedValueException
* @throws InvalidArgumentException
*
* @return SlideCollection
*/
public function getBySliderIdAndLanguageId(IdType $sliderId, IdType $languageId)
{
$slideArray = [];
$result = $this->db->from($this->table)->where(['slider_id' => $sliderId->asInt(),
'language_id' => $languageId->asInt()
])->order_by('sort_order')->get();
foreach($result->result_array() as $row)
{
$slide = MainFactory::create('Slide');
$this->_setDbValues($slide, $row);
$slideArray[] = $slide;
}
return MainFactory::create('SlideCollection', $slideArray);
}
/**
* Check if an image file is used by another slide entry.
*
* @param FilenameStringType $filename Slide thumbnail image filename.
* @param IdType $slideId
*
* @return bool
*/
public function isSlideThumbnailImageFileUsed(FilenameStringType $filename, IdType $slideId)
{
return $this->db->where('thumbnail', $filename->asString())
->where('slide_id !=', $slideId->asInt())
->get($this->table)
->num_rows() > 0;
}
/*
| -----------------------------------------------------------------------------------------------------------------
| Helper Methods
| -----------------------------------------------------------------------------------------------------------------
*/
/**
* Assign the slide values via the setters.
*
* @param Slide $slide Slide object.
* @param array $row Fetched DB row.
*
* @throws InvalidArgumentException If $row contains invalid values.
*/
protected function _setDbValues(Slide $slide, array $row)
{
$slide->setId(new IdType($row['slide_id']));
$slide->setLanguageId(new IdType($row['language_id']));
$slide->setThumbnail(new StringType($row['thumbnail']));
$slide->setTitle(new StringType($row['title']));
$slide->setAltText(new StringType($row['alt_text']));
$slide->setUrl(new StringType($row['url']));
$slide->setUrlTarget(new StringType($row['url_target']));
$slide->setSortOrder(new IntType($row['sort_order']));
}
}