Completed
Push — master ( f3ae79...9c48b0 )
by Daniel
02:18
created

Api::search()   B

Complexity

Conditions 6
Paths 32

Size

Total Lines 22
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 18
CRAP Score 6

Importance

Changes 3
Bugs 0 Features 1
Metric Value
c 3
b 0
f 1
dl 0
loc 22
ccs 18
cts 18
cp 1
rs 8.6737
cc 6
eloc 14
nc 32
nop 1
crap 6
1
<?php
2
3
namespace Jobles\Careerjet;
4
5
use Jobles\Careerjet\Builder\JobBuilder;
6
use Jobles\Core\API\SearchInterface;
7
use Jobles\Core\Job\JobCollection;
8
9
class Api implements SearchInterface
10
{
11
    /**
12
     * @var string
13
     */
14
    private $affiliateId;
15
16
    /**
17
     * @var \Careerjet_API
18
     */
19
    private $api;
20
21
    /**
22
     * @var string
23
     */
24
    private $country;
25
26
    /**
27
     * @var string
28
     */
29
    private $language;
30
31 1
    public function __construct($affiliateId, $country, $language = null, \Careerjet_API $api = null)
32
    {
33 1
        $this->affiliateId = $affiliateId;
34 1
        $this->country = $country;
35 1
        $this->language = $language;
36
37 1
        if (!empty($api)) {
38 1
            $this->api = $api;
39 1
        } else {
40
            $this->api = new \Careerjet_API($this->getLocale($country, $language));
41
        }
42 1
    }
43
44
    /**
45
     * @param array $filters
46
     * @return JobCollection
47
     */
48 1
    public function search(array $filters = [])
49
    {
50 1
        $collection = new JobCollection;
51 1
        $search = ['affid' => $this->affiliateId];
52 1
        if (isset($filters['keywords'])) { // empty allowed
53 1
            $search['keywords'] = $filters['keywords'];
54 1
        }
55 1
        if (isset($filters['location'])) { // empty allowed
56 1
            $search['location'] = $filters['location'];
57 1
        }
58 1
        if (isset($filters['limit'])) { // max 99
59 1
            $search['pagesize'] = $filters['limit'];
60 1
        }
61 1
        $search['page'] = isset($filters['offset']) ? $filters['offset'] : 1; // starts on 1
62
63 1
        $result = $this->api->search($search);
64 1
        foreach ($result->jobs as $job) {
65 1
            $collection->addJob(JobBuilder::fromApi($job, $this->country));
66 1
        }
67
68 1
        return $collection;
69
    }
70
71
    /**
72
     * @param string $country
73
     * @param string $language
74
     * @return string
75
     */
76
    private function getLocale($country, $language)
77
    {
78
        switch ($country) {
79
            case 'Australia': // English
80
                $locale = 'en_AU';
81
                break;
82
            case 'Austria': // German
83
                $locale = 'de_AT';
84
                break;
85
            case 'Argentina': // Spanish
86
                $locale = 'es_AR';
87
                break;
88
            case 'Belgium':
89
                switch ($language) {
90
                    case 'French':
91
                        $locale = 'fr_BE';
92
                        break;
93
                    case 'Dutch':
94
                    default:
95
                        $locale = 'nl_BE';
96
                        break;
97
                }
98
                break;
99
            case 'Bolivia': // Spanish
100
                $locale = 'es_BO';
101
                break;
102
            case 'Brazil': // Portuguese
103
                $locale = 'pt_BR';
104
                break;
105
            case 'Canada': // French
106
                switch ($language) {
107
                    case 'French':
108
                        $locale = 'fr_CA';
109
                        break;
110
                    case 'English':
111
                    default:
112
                        $locale = 'en_CA';
113
                        break;
114
                }
115
                break;
116
            case 'Chile': // Spanish
117
                $locale = 'es_CL';
118
                break;
119
            case 'China':
120
                switch ($language) {
121
                    case 'English':
122
                        $locale = 'en_CN';
123
                        break;
124
                    case 'Chinese':
125
                    default:
126
                        $locale = 'zh_CN';
127
                        break;
128
                }
129
                break;
130
            case 'Costa Rica': // Spanish
131
                $locale = 'es_CR';
132
                break;
133
            case 'Denmark': // Danish
134
                $locale = 'da_DK';
135
                break;
136
            case 'Dominican Republic': // Spanish
137
                $locale = 'es_DO';
138
                break;
139
            case 'Ecuador': // Spanish
140
                $locale = 'es_EC';
141
                break;
142
            case 'Finland': // Finnish
143
                $locale = 'fi_FI';
144
                break;
145
            case 'France': // French
146
                $locale = 'fr_FR';
147
                break;
148
            case 'Germany': // German
149
                $locale = 'de_DE';
150
                break;
151
            case 'Guatemala': // Spanish
152
                $locale = 'es_GT';
153
                break;
154
            case 'Hungary': // Hungarian
155
                $locale = 'hu_HU';
156
                break;
157
            case 'Hong Kong': // English
158
                $locale = 'en_HK';
159
                break;
160
            case 'Italy': // Italian
161
                $locale = 'it_IT';
162
                break;
163
            case 'Ireland': // English
164
                $locale = 'en_IE';
165
                break;
166
            case 'India': // English
167
                $locale = 'en_IN';
168
                break;
169
            case 'Japan': // Japanese
170
                $locale = 'ja_JP';
171
                break;
172
            case 'Korea': // Korean
173
                $locale = 'ko_KR';
174
                break;
175
            case 'Luxembourg': // French
176
                $locale = 'fr_LU';
177
                break;
178
            case 'Malaysia': // English
179
                $locale = 'en_MY';
180
                break;
181
            case 'Mexico': // Spanish
182
                $locale = 'es_MX';
183
                break;
184
            case 'Morocco': // French
185
                $locale = 'fr_MA';
186
                break;
187
            case 'Netherlands': // Dutch
188
                $locale = 'nl_NL';
189
                break;
190
            case 'New Zealand': // English
191
                $locale = 'en_NZ';
192
                break;
193
            case 'Norway': // Norwegian
194
                $locale = 'no_NO';
195
                break;
196
            case 'Oman': // English
197
                $locale = 'en_OM';
198
                break;
199
            case 'Pakistan': // English
200
                $locale = 'en_PK';
201
                break;
202
            case 'Panama': // Spanish
203
                $locale = 'es_PA';
204
                break;
205
            case 'Paraguay': // Spanish
206
                $locale = 'es_PY';
207
                break;
208
            case 'Philippines': // English
209
                $locale = 'en_PH';
210
                break;
211
            case 'Peru': // Spanish
212
                $locale = 'es_PE';
213
                break;
214
            case 'Poland': // Polish
215
                $locale = 'pl_PL';
216
                break;
217
            case 'Portugal': // Portuguese
218
                $locale = 'pt_PT';
219
                break;
220
            case 'Puerto Rico': // Spanish
221
                $locale = 'es_PR';
222
                break;
223
            case 'Qatar': // English
224
                $locale = 'en_QA';
225
                break;
226
            case 'Republic': // Czech
227
                $locale = 'cs_CZ';
228
                break;
229
            case 'Russia': // Russian
230
                $locale = 'ru_RU';
231
                break;
232
            case 'Singapore': // English
233
                $locale = 'en_SG';
234
                break;
235
            case 'Slovakia': // Slovak
236
                $locale = 'sk_SK';
237
                break;
238
            case 'South Africa': // English
239
                $locale = 'en_ZA';
240
                break;
241
            case 'Spain': // Spanish
242
                $locale = 'es_ES';
243
                break;
244
            case 'Sweden': // Swedish
245
                $locale = 'sv_SE';
246
                break;
247
            case 'Switzerland':
248
                switch ($language) {
249
                    case 'German':
250
                        $locale = 'de_CH';
251
                        break;
252
                    case 'French':
253
                    default:
254
                        $locale = 'fr_CH';
255
                        break;
256
                }
257
                break;
258
            case 'Taiwan': // English
259
                $locale = 'en_TW';
260
                break;
261
            case 'Turkey': // Turkish
262
                $locale = 'tr_TR';
263
                break;
264
            case 'Ukraine':
265
                switch ($language) {
266
                    case 'Russian':
267
                        $locale = 'ru_UA';
268
                        break;
269
                    case 'Ukrainian':
270
                    default:
271
                        $locale = 'uk_UA';
272
                        break;
273
                }
274
                break;
275
            case 'United Arab Emirates': // English
276
                $locale = 'en_AE';
277
                break;
278
            case 'United Kingdom': // English
279
                $locale = 'en_GB';
280
                break;
281
            case 'United States': // English
282
                $locale = 'en_US';
283
                break;
284
            case 'Uruguay': // Spanish
285
                $locale = 'es_UY';
286
                break;
287
            case 'Venezuela': // Spanish
288
                $locale = 'es_VE';
289
                break;
290
            case 'Vietnam':
291
                switch ($language) {
292
                    case 'English':
293
                        $locale = 'en_VN';
294
                        break;
295
                    case 'Vietnamese':
296
                    default:
297
                        $locale = 'vi_VN';
298
                        break;
299
                }
300
                break;
301
            default:
302
                throw new \InvalidArgumentException('Please use a valid country');
303
        }
304
305
        return $locale;
306
    }
307
}
308