1 <?php
2
3 /* --------------------------------------------------------------
4 YetAnotherLanguageProvider.inc.php 2016-02-07
5 Gambio GmbH
6 http://www.gambio.de
7 Copyright (c) 2016 Gambio GmbH
8 Released under the GNU General Public License (Version 2)
9 [http://www.gnu.org/licenses/gpl-2.0.html]
10 --------------------------------------------------------------
11 */
12
13 /**
14 * Class YetAnotherLanguageProvider
15 *
16 * @category System
17 * @package Shared
18 */
19 class YetAnotherLanguageProvider implements LanguageProviderInterface
20 {
21
22 /**
23 * Database connection.
24 * @var CI_DB_query_builder
25 */
26 protected $db;
27
28
29 /**
30 * YetAnotherLanguageProvider constructor.
31 *
32 * @param CI_DB_query_builder $db Database connection.
33 */
34 public function __construct(CI_DB_query_builder $db)
35 {
36 $this->db = $db;
37 }
38
39
40 /**
41 * Returns the language IDs.
42 *
43 * @throws UnexpectedValueException If no ID has been found.
44 * @throws InvalidArgumentException If ID is not valid.
45 *
46 * @return IdCollection
47 */
48 public function getIds()
49 {
50 // Database query.
51 $query = $this->db->select('languages_id')->from('languages');
52
53 // Array in which the fetched languages IDs will be pushed as IdType to.
54 $fetchedIds = array();
55
56 // Iterate over each found row and push ID as IdType to array.
57 foreach($query->get()->result_array() as $row)
58 {
59 $id = (integer)$row['languages_id'];
60 $fetchedIds[] = new IdType($id);
61 }
62
63 // Throw exception if no ID has been found.
64 if($fetchedIds === null)
65 {
66 throw new UnexpectedValueException('No language IDs were found in the database');
67 }
68
69 return MainFactory::create('IdCollection', $fetchedIds);
70 }
71
72
73 /**
74 * Returns the language codes.
75 *
76 * @throws UnexpectedValueException If no code has been found.
77 * @throws InvalidArgumentException If code is not valid.
78 *
79 * @return KeyValueCollection
80 */
81 public function getCodes()
82 {
83 // Database query.
84 $query = $this->db->select('code')->from('languages');
85
86 // Array in which the fetched languages codes will be pushed as StringType to.
87 $fetchedCodes = array();
88
89 // Iterate over each found row and push code as StringType to array.
90 foreach($query->get()->result_array() as $row)
91 {
92 $code = $row['code'];
93 $fetchedCodes[] = new LanguageCode(new StringType($code));
94 }
95
96 // Throw exception if no code has been found.
97 if($fetchedCodes === null)
98 {
99 throw new UnexpectedValueException('No language codes were found in the database');
100 }
101
102 return MainFactory::create('KeyValueCollection', $fetchedCodes);
103 }
104
105
106 /**
107 * Returns the language code from a specific language, selected by the language ID.
108 *
109 * @param IdType $id Language ID.
110 *
111 * @throws UnexpectedValueException If no code has been found.
112 * @throws InvalidArgumentException If code is not valid.
113 *
114 * @return LanguageCode
115 */
116 public function getCodeById(IdType $id)
117 {
118 // Database query.
119 $this->db->select('code')->from('languages')->where('languages_id', $id->asInt());
120
121 // Fetch data from database and save.
122 $data = $this->db->get()->row_array();
123
124 // Throw error if no code has been found.
125 if($data === null)
126 {
127 throw new UnexpectedValueException('No language code has been found');
128 }
129
130 return new LanguageCode(new StringType($data['code']));
131 }
132
133
134 /**
135 * Returns the directory from the a specific language, selected by the language ID.
136 *
137 * @param IdType $id Language ID.
138 *
139 * @throws UnexpectedValueException If no directory has been found.
140 * @throws InvalidArgumentException If code is not valid.
141 *
142 * @return string
143 */
144 public function getDirectoryById(IdType $id)
145 {
146 // Database query.
147 $this->db->select('directory')->from('languages')->where('languages_id', $id->asInt());
148
149 // Fetch data from database and save.
150 $data = $this->db->get()->row_array();
151
152 // Throw error if no value has been found.
153 if($data === null)
154 {
155 throw new UnexpectedValueException('No language directory has been found');
156 }
157
158 // Return language directory.
159 $directory = $data['directory'];
160
161 return $directory;
162 }
163
164
165 /**
166 * Returns the ID from the a specific language, selected by the language code.
167 *
168 * @param LanguageCode $code Language code.
169 *
170 * @throws UnexpectedValueException If no ID has been found.
171 *
172 * @return int
173 */
174 public function getIdByCode(LanguageCode $code)
175 {
176 // Database query.
177 $this->db->select('languages_id')->from('languages')->where('code', $code->asString());
178
179 // Fetch data from database and save.
180 $data = $this->db->get()->row_array();
181
182 // Throw error if no value has been found.
183 if($data === null)
184 {
185 throw new UnexpectedValueException('No language ID has been found');
186 }
187
188 // Return language ID.
189 $id = (int)$data['languages_id'];
190
191 return $id;
192 }
193
194
195 /**
196 * Returns the directory from the a specific language, selected by the language code.
197 *
198 * @param LanguageCode $code Language code.
199 *
200 * @throws UnexpectedValueException If no directory has been found.
201 *
202 * @return string
203 */
204 public function getDirectoryByCode(LanguageCode $code)
205 {
206 // Database query.
207 $this->db->select('directory')->from('languages')->where('code', $code->asString());
208
209 // Fetch data from database and save.
210 $data = $this->db->get()->row_array();
211
212 // Throw error if no value has been found.
213 if($data === null)
214 {
215 throw new UnexpectedValueException('No language directory has been found');
216 }
217
218 // Return language directory.
219 $directory = $data['directory'];
220
221 return $directory;
222 }
223
224
225 /**
226 * Returns the active language codes.
227 *
228 * @throws InvalidArgumentException If code is not valid.
229 *
230 * @return KeyValueCollection
231 */
232 public function getActiveCodes()
233 {
234 // Database query.
235 $query = $this->db->select('code')->from('languages')->where('status', 1);
236
237 // Array in which the fetched languages codes will be pushed as StringType to.
238 $fetchedCodes = array();
239
240 // Iterate over each found row and push code as StringType to array.
241 foreach($query->get()->result_array() as $row)
242 {
243 $code = $row['code'];
244 $fetchedCodes[] = new LanguageCode(new StringType($code));
245 }
246
247 // Throw exception if no code has been found.
248 if($fetchedCodes === null)
249 {
250 $fetchedCodes = array();
251 }
252
253 return MainFactory::create('KeyValueCollection', $fetchedCodes);
254 }
255
256
257 /**
258 * Returns the icon for a specific language by a given language code.
259 *
260 * @param LanguageCode $code The given language code
261 *
262 * @throws UnexpectedValueException If no icon has been found.
263 *
264 * @return string
265 */
266 public function getIconFilenameByCode(LanguageCode $code)
267 {
268 // Database query.
269 $this->db->select('image')->from('languages')->where('code', $code->asString());
270
271 // Fetch data from database and save.
272 $data = $this->db->get()->row_array();
273
274 // Throw error if no value has been found.
275 if($data === null)
276 {
277 throw new UnexpectedValueException('No language icon has been found');
278 }
279
280 // Return language icon filename.
281 $icon = $data['image'];
282
283 return $icon;
284 }
285 }