SHOW:
|
|
- or go back to the newest paste.
1 | <?php | |
2 | class VoterController extends VoteAppController { | |
3 | ||
4 | public function index() { | |
5 | $this->loadModel('Vote.VoteConfiguration'); | |
6 | $config = $this->VoteConfiguration->getConfig(); | |
7 | ||
8 | $this->set('websites', $config['websites']); | |
9 | $this->set('rewards', $config['rewards']); | |
10 | ||
11 | $this->loadModel('User'); | |
12 | $ranking = $this->User->find('all', array('limit' => '10', 'order' => 'vote desc')); | |
13 | $this->set(compact('ranking')); | |
14 | } | |
15 | ||
16 | public function setWebsite() { | |
17 | $this->autoRender = false; | |
18 | - | $this->response->type('json'); |
18 | + | |
19 | if(!empty($this->request->data['website']) OR $this->request->data['website'] == 0) { | |
20 | $this->Session->write('vote.website', $this->request->data['website']); | |
21 | ||
22 | $this->loadModel('Vote.VoteConfiguration'); | |
23 | $config = $this->VoteConfiguration->getConfig(); | |
24 | $websites = $config['websites']; | |
25 | ||
26 | if($websites[$this->request->data['website']]['website_type'] == 'rpg') { | |
27 | $this->response->body(json_encode(array('page' => 'http://rpg-paradize.com/?page=vote&vote='.@$websites[$this->request->data['website']]['rpg_id'], 'website_type' => @$websites[$this->request->data['website']]['website_type']))); | |
28 | } else { | |
29 | $this->response->body(json_encode(array('page' => @$websites[$this->request->data['website']]['page_vote'], 'website_type' => @$websites[$this->request->data['website']]['website_type']))); | |
30 | } | |
31 | } | |
32 | } | |
33 | } | |
34 | ||
35 | public function setPseudo() { | |
36 | $this->autoRender = false; | |
37 | $this->response->type('json'); | |
38 | if($this->request->is('ajax')) { | |
39 | $this->loadModel('User'); | |
40 | if(!empty($this->request->data['pseudo'])) { | |
41 | if($this->User->exist($this->request->data['pseudo'])) { | |
42 | ||
43 | $user_id = $this->User->getFromUser('id', $this->request->data['pseudo']); | |
44 | ||
45 | $this->loadModel('Vote.Vote'); | |
46 | $get_last_vote = $this->Vote->find('first', | |
47 | array('conditions' => | |
48 | array( | |
49 | 'OR' => array( | |
50 | 'user_id' => $user_id, | |
51 | 'ip' => $this->Util->getIP() | |
52 | ), | |
53 | 'website' => $this->Session->read('vote.website') | |
54 | ) | |
55 | ) | |
56 | ); | |
57 | ||
58 | if(!empty($get_last_vote['Vote']['created'])) { | |
59 | $now = time(); | |
60 | $last_vote = ($now - strtotime($get_last_vote['Vote']['created']))/60; | |
61 | } else { | |
62 | $last_vote = null; | |
63 | } | |
64 | ||
65 | $this->loadModel('Vote.VoteConfiguration'); | |
66 | $config = $this->VoteConfiguration->getConfig(); | |
67 | ||
68 | ||
69 | $websites = $config['websites']; | |
70 | if(isset($websites[$this->Session->read('vote.website')])) { | |
71 | $time_vote = $websites[$this->Session->read('vote.website')]['time_vote']; | |
72 | ||
73 | if(empty($last_vote) OR $last_vote > $time_vote) { | |
74 | ||
75 | $this->Session->write('vote.pseudo', $this->request->data['pseudo']); | |
76 | echo json_encode(array('statut' => true , 'msg' => $this->Lang->get('VOTE__STEP_1_SUCCESS'))); | |
77 | ||
78 | } else { | |
79 | ||
80 | $calcul_wait_time = ($time_vote - $last_vote)*60; | |
81 | $calcul_wait_time = $this->Util->secondsToTime($calcul_wait_time); //On le sort en jolie | |
82 | ||
83 | $wait_time = array(); | |
84 | if($calcul_wait_time['d'] > 0) { | |
85 | $wait_time[] = $calcul_wait_time['d'].' '.$this->Lang->get('GLOBAL__DATE_R_DAYS'); | |
86 | } | |
87 | if($calcul_wait_time['h'] > 0) { | |
88 | $wait_time[] = $calcul_wait_time['h'].' '.$this->Lang->get('GLOBAL__DATE_R_HOURS'); | |
89 | } | |
90 | if($calcul_wait_time['m'] > 0) { | |
91 | $wait_time[] = $calcul_wait_time['m'].' '.$this->Lang->get('GLOBAL__DATE_R_MINUTES'); | |
92 | } | |
93 | if($calcul_wait_time['s'] > 0) { | |
94 | $wait_time[] = $calcul_wait_time['s'].' '.$this->Lang->get('GLOBAL__DATE_R_SECONDS'); | |
95 | } | |
96 | ||
97 | $wait_time = implode(', ', $wait_time); | |
98 | ||
99 | $this->response->body(json_encode(array('statut' => false , 'msg' => $this->Lang->get('VOTE__VOTE_ERROR_WAIT', array('{WAIT_TIME}' => $wait_time))))); | |
100 | } | |
101 | } else { | |
102 | $this->response->body(json_encode(array('statut' => false , 'msg' => $this->Lang->get('VOTE__VOTE_ERROR_UNKNOWN_WEBSITE')))); | |
103 | } | |
104 | } else { | |
105 | $this->response->body(json_encode(array('statut' => false , 'msg' =>$this->Lang->get('VOTE__VOTE_ERROR_USER_UNKNOWN')))); | |
106 | } | |
107 | } | |
108 | } else { | |
109 | throw new InternalErrorException(); | |
110 | } | |
111 | } | |
112 | ||
113 | public function checkOut() { | |
114 | $this->autoRender = false; | |
115 | $this->response->type('json'); | |
116 | if($this->request->is('ajax')) { | |
117 | if(!empty($this->request->data['out']) && $this->Session->check('vote.website') && $this->Session->check('vote.pseudo')) { | |
118 | ||
119 | $this->loadModel('Vote.VoteConfiguration'); | |
120 | $config = $this->VoteConfiguration->getConfig(); | |
121 | $websites = $config['websites']; | |
122 | $url = $websites[$this->Session->read('vote.website')]['page_vote']; | |
123 | // exemple : http://rpg-paradize.com/site-+FR+++RESET++ObsiFight+Serveur+PvP+Faction+2424+1.8-44835 | |
124 | ||
125 | $user_agent = 'Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1'; // simule Firefox 4. | |
126 | $header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,"; | |
127 | $header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"; | |
128 | $header[] = "Cache-Control: max-age=0"; | |
129 | $header[] = "Connection: keep-alive"; | |
130 | $header[] = "Keep-Alive: 300"; | |
131 | $header[] = "Accept-Charset: utf-8"; | |
132 | $header[] = "Accept-Language: fr"; // langue fr. | |
133 | $header[] = "Pragma: "; // Simule un navigateur | |
134 | ||
135 | $ch = curl_init(); | |
136 | curl_setopt($ch, CURLOPT_URL, $url); // l'url visité | |
137 | curl_setopt($ch, CURLOPT_FAILONERROR, 1);// Gestion d'erreur | |
138 | curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // autorise la redirection | |
139 | curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // stock la response dans une variable | |
140 | curl_setopt($ch, CURLOPT_HTTPHEADER, $header); | |
141 | curl_setopt($ch, CURLOPT_PORT, 80); // set port 80 | |
142 | curl_setopt($ch, CURLOPT_TIMEOUT, 2); // timeout curl à 15 secondes. | |
143 | ||
144 | curl_setopt($ch, CURLOPT_USERAGENT, $user_agent); | |
145 | ||
146 | ||
147 | $result=curl_exec($ch); | |
148 | $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); | |
149 | curl_close($ch); | |
150 | ||
151 | if($code != 200) { | |
152 | $this->log('RPG-Paradize unavailable (CODE: '.$code.')'); | |
153 | } | |
154 | ||
155 | $str = substr($result, strpos($result, 'Clic Sortant'), 20); | |
156 | $out = filter_var($str, FILTER_SANITIZE_NUMBER_INT); | |
157 | $array = array($out, $out-1, $out-2, $out-3, $out+1, $out+2, $out+3); | |
158 | ||
159 | if(in_array($this->request->data['out'], $array) || $code != 200) { | |
160 | ||
161 | $this->Session->write('vote.out', true); | |
162 | $this->response->body(json_encode(array('statut' => true, 'msg' =>$this->Lang->get('VOTE__STEP_3_SUCCESS')))); | |
163 | ||
164 | } else { | |
165 | $this->response->body(json_encode(array('statut' => false, 'msg' =>$this->Lang->get('VOTE__STEP_3_ERROR')))); | |
166 | } | |
167 | } | |
168 | } else { | |
169 | throw new InternalErrorException(); | |
170 | } | |
171 | } | |
172 | ||
173 | public function getRewards() { | |
174 | $when = (isset($this->request->data['when'])) ? $this->request->data['when'] : 'now'; | |
175 | $this->autoRender = false; | |
176 | $this->response->type('json'); | |
177 | if($this->request->is('ajax')) { | |
178 | if($this->Session->check('vote.website') && $this->Session->check('vote.pseudo')) { | |
179 | $this->loadModel('Vote.VoteConfiguration'); | |
180 | $config = $this->VoteConfiguration->getConfig(); | |
181 | $websites = $config['websites']; | |
182 | $website = $websites[$this->Session->read('vote.website')]; | |
183 | if($this->Session->check('vote.out') || $website['website_type'] == "other") { | |
184 | ||
185 | // check si il a pas déjà voté sur ce site | |
186 | $this->loadModel('Vote.Vote'); | |
187 | $user_id = $this->User->getFromUser('id', $this->Session->read('vote.pseudo')); | |
188 | $get_last_vote = $this->Vote->find('first', array('conditions' => array('OR' => array('user_id' => $user_id, 'ip' => $this->Util->getIP()), 'website' => $this->Session->read('vote.website')))); | |
189 | ||
190 | if(!empty($get_last_vote['Vote']['created'])) { | |
191 | $now = time(); | |
192 | $last_vote = ($now - strtotime($get_last_vote['Vote']['created']))/60; | |
193 | } else { | |
194 | $last_vote = null; | |
195 | } | |
196 | ||
197 | if(isset($websites[$this->Session->read('vote.website')])) { | |
198 | $time_vote = $websites[$this->Session->read('vote.website')]['time_vote']; | |
199 | ||
200 | if(empty($last_vote) OR $last_vote > $time_vote) { | |
201 | ||
202 | // on incrémente le vote | |
203 | if(empty($get_last_vote)) { | |
204 | $this->Vote->read(null, null); | |
205 | $this->Vote->set(array( | |
206 | 'user_id' => $user_id, | |
207 | 'ip' => $this->Util->getIP(), | |
208 | 'website' => $this->Session->read('vote.website') | |
209 | )); | |
210 | } else { | |
211 | $this->Vote->read(null, $get_last_vote['Vote']['id']); | |
212 | $this->Vote->set(array( | |
213 | 'user_id' => $user_id, | |
214 | 'ip' => $this->Util->getIP(), | |
215 | 'website' => $this->Session->read('vote.website'), | |
216 | 'created' => date('Y-m-d H:i:s') | |
217 | )); | |
218 | } | |
219 | $this->loadModel('User'); | |
220 | $userData = $this->User->find('first', array('conditions' => array('pseudo' => $this->Session->read('vote.pseudo')))); | |
221 | $vote_nbr = $userData['User']['vote'] + 1; | |
222 | ||
223 | if($when != 'now') { | |
224 | $rewards_waited = intval($userData['User']['rewards_waited']) + 1; | |
225 | } | |
226 | ||
227 | // on cast l'event | |
228 | $event = new CakeEvent('onVote', $this, array('when' => $when, 'website' => $this->Session->read('vote.website'), 'config' => $config, 'user' => $userData)); | |
229 | $this->getEventManager()->dispatch($event); | |
230 | if($event->isStopped()) { | |
231 | return $event->result; | |
232 | } | |
233 | ||
234 | ||
235 | if($when == 'now') { // si c'est maintenant | |
236 | ||
237 | $rewardStatus = $this->processRewards($config, $userData['User']); | |
238 | ||
239 | if(!$rewardStatus['status']) { | |
240 | $this->response->body(json_encode(array('statut' => false, 'msg' => $this->Lang->get($rewardStatus['msg'])))); | |
241 | return; | |
242 | } | |
243 | ||
244 | /* | |
245 | On vérifie sa position pour le notifier | |
246 | */ | |
247 | // On récupère le top 3 | |
248 | $getTOP = $this->User->find('all', array('fields' => array('User.id', 'User.vote'), 'order' => 'vote DESC', 'limit' => 3)); | |
249 | //Si il en fait partie | |
250 | if(in_array($userData['User']['id'], $getTOP)) { | |
251 | ||
252 | // Si il est deuxième | |
253 | if($getTOP[1]['User']['id'] == $userData['User']['id']) { | |
254 | // Si il va être premier | |
255 | if($vote_nbr > $getTOP[1]['User']['vote']) { | |
256 | ||
257 | //On notifie qu'il est 1er | |
258 | $this->loadModel('Notification'); | |
259 | $this->Notification->setToUser($this->Lang->get('VOTE__NOTIFICATION_NOW_FIRST'), $userData['User']['id']); | |
260 | //On notifie l'autre qu'il n'est plus 1er | |
261 | $this->Notification->setToUser($this->Lang->get('VOTE__NOTIFICATION_NOT_NOW_FIRST'), $getTOP[0]['User']['id']); | |
262 | ||
263 | } | |
264 | } | |
265 | ||
266 | } else { | |
267 | // Si il en fait pas partie, mais que dans 1 vote, il y sera | |
268 | $top3Votes = $getTOP[2]['User']['vote']; | |
269 | if($vote_nbr > $top3Votes) { | |
270 | ||
271 | //On notifie qu'il est dans le top 3 | |
272 | $this->loadModel('Notification'); | |
273 | $this->Notification->setToUser($this->Lang->get('VOTE__NOTIFICATION_NOW_IN_TOP'), $userData['User']['id']); | |
274 | //On notifie l'autre qu'il n'est plus dans le top 3 | |
275 | $this->Notification->setToUser($this->Lang->get('VOTE__NOTIFICATION_NOT_NOW_IN_TOP'), $getTOP[2]['User']['id']); | |
276 | ||
277 | } | |
278 | } | |
279 | ||
280 | // on sauvegarde le vote | |
281 | $this->User->setToUser('vote', $vote_nbr, $userData['User']['id']); | |
282 | $this->Vote->save(); | |
283 | ||
284 | $this->response->body(json_encode(array('statut' => true, 'msg' => $rewardStatus['msg']))); | |
285 | ||
286 | } else { // si c'est plus tard | |
287 | ||
288 | /* | |
289 | On vérifie sa position pour le notifier | |
290 | */ | |
291 | // On récupère le top 3 | |
292 | $getTOP = $this->User->find('all', array('fields' => array('User.id', 'User.pseudo', 'User.vote'), 'order' => 'vote DESC', 'limit' => 3)); | |
293 | ||
294 | //Si il en fait partie | |
295 | if($getTOP[0]['User']['id'] == $userData['User']['id'] || $getTOP[1]['User']['id'] == $userData['User']['id'] || $getTOP[2]['User']['id'] == $userData['User']['id']) { | |
296 | ||
297 | // Si il est deuxième | |
298 | if($getTOP[1]['User']['id'] == $userData['User']['id']) { | |
299 | // Si il va être premier | |
300 | if($vote_nbr > $getTOP[0]['User']['vote']) { | |
301 | ||
302 | //On notifie qu'il est 1er | |
303 | $this->loadModel('Notification'); | |
304 | $this->Notification->setToUser($this->Lang->get('VOTE__NOTIFICATION_NOW_FIRST'), $userData['User']['id']); | |
305 | //On notifie l'autre qu'il n'est plus 1er | |
306 | $this->Notification->setToUser($this->Lang->get('VOTE__NOTIFICATION_NOT_NOW_FIRST'), $getTOP[0]['User']['id']); | |
307 | ||
308 | } | |
309 | } | |
310 | ||
311 | } else { | |
312 | // Si il en fait pas partie, mais que dans 1 vote, il y sera | |
313 | $top3Votes = $getTOP[2]['User']['vote']; | |
314 | if($vote_nbr > $top3Votes) { | |
315 | ||
316 | //On notifie qu'il est dans le top 3 | |
317 | $this->loadModel('Notification'); | |
318 | $this->Notification->setToUser($this->Lang->get('VOTE__NOTIFICATION_NOW_IN_TOP'), $userData['User']['id']); | |
319 | //On notifie l'autre qu'il n'est plus dans le top 3 | |
320 | $this->Notification->setToUser($this->Lang->get('VOTE__NOTIFICATION_NOT_NOW_IN_TOP'), $getTOP[2]['User']['id']); | |
321 | ||
322 | } | |
323 | } | |
324 | ||
325 | // on sauvegarde le vote | |
326 | $this->User->setToUser('vote', $vote_nbr, $userData['User']['id']); | |
327 | $this->User->setToUser('rewards_waited', $rewards_waited, $userData['User']['id']); | |
328 | $this->Vote->save(); | |
329 | ||
330 | $this->response->body(json_encode(array('statut' => true, 'msg' => $this->Lang->get('VOTE__STEP_4_REWARD_SUCCESS_SAVE')))); | |
331 | } | |
332 | ||
333 | $this->Session->delete('vote'); | |
334 | ||
335 | } else { | |
336 | ||
337 | $calcul_wait_time = ($time_vote - $last_vote)*60; | |
338 | $calcul_wait_time = $this->Util->secondsToTime($calcul_wait_time); //On le sort en jolie | |
339 | ||
340 | $wait_time = array(); | |
341 | if($calcul_wait_time['d'] > 0) { | |
342 | $wait_time[] = $calcul_wait_time['d'].' '.$this->Lang->get('GLOBAL__DATE_R_DAYS'); | |
343 | } | |
344 | if($calcul_wait_time['h'] > 0) { | |
345 | $wait_time[] = $calcul_wait_time['h'].' '.$this->Lang->get('GLOBAL__DATE_R_HOURS'); | |
346 | } | |
347 | if($calcul_wait_time['m'] > 0) { | |
348 | $wait_time[] = $calcul_wait_time['m'].' '.$this->Lang->get('GLOBAL__DATE_R_MINUTES'); | |
349 | } | |
350 | if($calcul_wait_time['s'] > 0) { | |
351 | $wait_time[] = $calcul_wait_time['s'].' '.$this->Lang->get('GLOBAL__DATE_R_SECONDS'); | |
352 | } | |
353 | ||
354 | $wait_time = implode(', ', $wait_time); | |
355 | ||
356 | $this->response->body(json_encode(array('statut' => false, 'msg' => $this->Lang->get('VOTE__VOTE_ERROR_WAIT', array('{WAIT_TIME}' => $wait_time))))); | |
357 | ||
358 | $this->Session->delete('vote'); | |
359 | } | |
360 | } else { | |
361 | throw new NotFoundException(); | |
362 | } | |
363 | ||
364 | } else { | |
365 | $this->response->body(json_encode(array('statut' => false, 'msg' => $this->Lang->get('VOTE__STEP_3_ERROR')))); | |
366 | } | |
367 | } else { | |
368 | $this->response->body(json_encode(array('statut' => false, 'msg' => $this->Lang->get('VOTE__VOTE_ERROR_USER_UNKNOWN')))); | |
369 | } | |
370 | } else { | |
371 | throw new InternalErrorException(); | |
372 | } | |
373 | } | |
374 | ||
375 | private function processRewards($config, $user) { // Donne les récompenses au user passé selon la configuration donnée | |
376 | ||
377 | /* ==== | |
378 | Toutes les récompenses | |
379 | ==== */ | |
380 | if($config['rewards_type'] == 1) { // toutes les récompenses | |
381 | ||
382 | $rewards = $config['rewards']; // on récupére la liste | |
383 | ||
384 | $event = new CakeEvent('beforeReceiveRewards', $this, array('rewards' => $rewards, 'type' => 'all', 'user' => $user)); | |
385 | $this->getEventManager()->dispatch($event); | |
386 | if($event->isStopped()) { | |
387 | return $event->result; | |
388 | } | |
389 | ||
390 | foreach ($rewards as $key => $value) { // on parcoure les récompenses | |
391 | ||
392 | if($value['type'] == 'server') { // si c'est une commande serveur | |
393 | ||
394 | $server = $this->executeServerReward($config, $user, $value); | |
395 | if($server === true) { | |
396 | ||
397 | $rewardsSended[] = $value['name']; | |
398 | ||
399 | } else { | |
400 | return array('status' => false, 'msg' => $server); | |
401 | } | |
402 | ||
403 | } elseif($value['type'] == 'money') { // si c'est des points boutique | |
404 | ||
405 | $money = intval($user['money']) + intval($value['how']); | |
406 | $this->loadModel('User'); | |
407 | $this->User->setToUser('money', $money, $user['pseudo']); | |
408 | ||
409 | $rewardsSended[] = $value['how'].' '.$this->Configuration->getMoneyName(); | |
410 | ||
411 | } else { | |
412 | return array('status' => false, 'msg' => 'VOTE__UNKNOWN_REWARD_TYPE'); | |
413 | } | |
414 | ||
415 | } | |
416 | ||
417 | $return = $this->Lang->get('VOTE__VOTE_SUCCESS').' ! '; | |
418 | if(!empty($rewardsSended)) { | |
419 | $return .= $this->Lang->get('VOTE__REWARDS_TITLE').' : '; | |
420 | $return .= '<b>'.implode('</b>, <b>', $rewardsSended).'</b>.'; | |
421 | } | |
422 | ||
423 | return array('status' =>true, 'msg' => $return); | |
424 | ||
425 | } else { // récompenses aléatoire selon probabilité | |
426 | ||
427 | $rewards = $config['rewards']; // on récupère la liste des récompenses | |
428 | $probability_all = 0; // on met la probabilité totale à 0 de base | |
429 | foreach ($rewards as $key => $value) { | |
430 | $probability_all = $probability_all + $value['proba']; // Puis on la calcule | |
431 | $rewards_rand[$key] = $value['proba']; | |
432 | } | |
433 | ||
434 | $reward = $this->Util->random($rewards_rand, $probability_all); // on récupère la reward tiré au sort | |
435 | ||
436 | $event = new CakeEvent('beforeReceiveRewards', $this, array('rewards' => $reward, 'type' => 'random', 'user' => $user)); | |
437 | $this->getEventManager()->dispatch($event); | |
438 | if($event->isStopped()) { | |
439 | return $event->result; | |
440 | } | |
441 | ||
442 | if($rewards[$reward]['type'] == 'server') { // si c'est une commande serveur | |
443 | ||
444 | $server = $this->executeServerReward($config, $user, $rewards[$reward]); | |
445 | if($server === true) { | |
446 | ||
447 | return array('status' => true, 'msg' => $this->Lang->get('VOTE__VOTE_SUCCESS').' ! '.$this->Lang->get('VOTE__MESSAGE_VOTE_SUCCESS_REWARD').' : <b>'.$rewards[$reward]['name'].'</b>.'); | |
448 | ||
449 | } else { | |
450 | return array('status' => false, 'msg' => $server); | |
451 | } | |
452 | ||
453 | } elseif($rewards[$reward]['type'] == 'money') { // si c'est des points boutique | |
454 | ||
455 | $money = intval($user['money']) + intval($rewards[$reward]['how']); | |
456 | $this->loadModel('User'); | |
457 | $this->User->setToUser('money', $money, $user['pseudo']); | |
458 | ||
459 | return array('status' => true, 'msg' =>$this->Lang->get('VOTE__VOTE_SUCCESS').' ! '.$this->Lang->get('VOTE__REWARDS_TITLE').' : <b>'.$rewards[$reward]['how'].' '.$this->Configuration->getMoneyName().'</b>.'); | |
460 | ||
461 | } else { | |
462 | return array('status' => false, 'msg' => 'ERROR__INTERNAL_ERROR'); | |
463 | } | |
464 | ||
465 | } | |
466 | ||
467 | } | |
468 | ||
469 | private function executeServerReward($config, $user, $reward) { // execute la commande d'une récompense si les serveurs de la config sont ouverts | |
470 | $config['servers'] = $config['servers']; // on récupére la liste des serveurs configurés | |
471 | if(!empty($config['servers'])) { // si la liste n'est pas vide | |
472 | foreach ($config['servers'] as $k => $v) { //on parcours les serveurs pour voir si ils sont tous allumés | |
473 | $servers_online[] = $this->Server->online($v); | |
474 | } | |
475 | } else { // sinon on demande au component de prendre celui par défaut, le premier de ceux liés | |
476 | $servers_online = array($this->Server->online()); | |
477 | } | |
478 | if(!in_array(false, $servers_online)) { // si tous les serveurs sont allumés | |
479 | ||
480 | $cmd = $reward['command']; | |
481 | $cmd = str_replace('{PLAYER}', $user['pseudo'], $cmd); | |
482 | $cmd = str_replace('{PROBA}', $reward['proba'], $cmd); | |
483 | $cmd = str_replace('{REWARD}', $reward['name'], $cmd); | |
484 | ||
485 | if(empty($config['servers'])) { // si on a pas de liste, on prend celui par défaut | |
486 | ||
487 | if($reward['need_connect_on_server'] == "true") { | |
488 | $call = $this->Server->call(array('isConnected' => $user['pseudo']), true, false); | |
489 | if($call['isConnected'] != 'true') { | |
490 | return 'VOTE__ERROR_NEED_CONNECT_ON_SERVER'; | |
491 | } | |
492 | } | |
493 | ||
494 | $this->Server->commands($cmd); // on envoie la commande puis enregistre le vote | |
495 | } else { | |
496 | $continue = false; | |
497 | if($reward['need_connect_on_server'] == "true") { | |
498 | foreach ($config['servers'] as $k2 => $v2) { // on parcours les serveurs | |
499 | ||
500 | $call = $this->Server->call(array('isConnected' => $user['pseudo']), true, $v2); | |
501 | if($call['isConnected'] == 'true') { | |
502 | $continue = true; | |
503 | break; | |
504 | } | |
505 | ||
506 | } | |
507 | } else { | |
508 | $continue = true; | |
509 | } | |
510 | if($continue) { | |
511 | unset($k2); | |
512 | unset($v2); | |
513 | foreach ($config['servers'] as $k2 => $v2) { | |
514 | $this->Server->commands($cmd, $v2); // on envoie la commande puis enregistre le vote | |
515 | } | |
516 | } else { | |
517 | return 'VOTE__ERROR_NEED_CONNECT_ON_SERVER'; | |
518 | } | |
519 | } | |
520 | } else { //le serveur est éteint | |
521 | return 'SERVER__MUST_BE_ON'; | |
522 | } | |
523 | return true; | |
524 | } | |
525 | ||
526 | public function get_reward() { | |
527 | $this->autoRender = false; | |
528 | if($this->isConnected && $this->User->getKey('rewards_waited') > 0) { | |
529 | $this->loadModel('Vote.VoteConfiguration'); | |
530 | $config = $this->VoteConfiguration->getConfig(); | |
531 | ||
532 | $event = new CakeEvent('beforeGetWaitingReward', $this, array('user' => $this->User->getAllFromCurrentUser())); | |
533 | $this->getEventManager()->dispatch($event); | |
534 | if($event->isStopped()) { | |
535 | return $event->result; | |
536 | } | |
537 | ||
538 | $rewardStatus = $this->processRewards($config, $this->User->getAllFromCurrentUser()); | |
539 | ||
540 | if(!$rewardStatus['status']) { | |
541 | $this->Session->setFlash($this->Lang->get($rewardStatus['msg']), 'default.error'); | |
542 | $this->redirect(array('controller' => 'user', 'action' => 'profile', 'plugin' => false)); | |
543 | } | |
544 | ||
545 | $this->User->setKey('rewards_waited', (intval($this->User->getKey('rewards_waited')) - 1)); | |
546 | $this->Session->setFlash($rewardStatus['msg'], 'default.success'); | |
547 | $this->redirect(array('controller' => 'user', 'action' => 'profile', 'plugin' => false)); | |
548 | ||
549 | } else { | |
550 | $this->redirect('/'); | |
551 | } | |
552 | } | |
553 | ||
554 | public function admin_index() { | |
555 | if($this->isConnected AND $this->User->isAdmin()) { | |
556 | $this->layout = "admin"; | |
557 | ||
558 | $this->loadModel('Vote.VoteConfiguration'); | |
559 | $vote = $config = $this->VoteConfiguration->getConfig(); | |
560 | if(!empty($vote)) { | |
561 | $vote['rewards'] = $vote['rewards']; | |
562 | $vote['websites'] = $vote['websites']; | |
563 | } else { | |
564 | $vote = array(); | |
565 | } | |
566 | //debug($vote['rewards']); | |
567 | $this->set(compact('vote')); | |
568 | ||
569 | $this->loadModel('Server'); | |
570 | ||
571 | $servers = $this->Server->findSelectableServers(true); | |
572 | $this->set(compact('servers')); | |
573 | ||
574 | $vote['servers'] = (isset($vote['servers'])) ? $vote['servers'] : array(); | |
575 | if(!empty($vote['servers'])) { | |
576 | $selected_server = array(); | |
577 | foreach ($vote['servers'] as $key => $value) { | |
578 | if(isset($servers[$value])) { | |
579 | $selected_server[] = $value; | |
580 | } | |
581 | } | |
582 | } else { | |
583 | $selected_server = array(); | |
584 | } | |
585 | $this->set(compact('selected_server')); | |
586 | ||
587 | $this->loadModel('User'); | |
588 | $ranking = $this->User->find('all', array('limit' => '15', 'order' => 'vote desc')); | |
589 | $this->set(compact('ranking')); | |
590 | ||
591 | $this->set('title_for_layout',$this->Lang->get('VOTE__TITLE')); | |
592 | } else { | |
593 | $this->redirect('/'); | |
594 | } | |
595 | } | |
596 | ||
597 | public function admin_reset() { | |
598 | $this->autoRender = false; | |
599 | if($this->isConnected AND $this->User->isAdmin()) { | |
600 | ||
601 | $event = new CakeEvent('beforeResetVotes', $this, array('user' => $this->User->getAllFromCurrentUser())); | |
602 | $this->getEventManager()->dispatch($event); | |
603 | if($event->isStopped()) { | |
604 | return $event->result; | |
605 | } | |
606 | ||
607 | $this->loadModel('Notification'); | |
608 | $this->Notification->setToAll($this->Lang->get('VOTE__NOTIFICATION_RESET_VOTES')); | |
609 | ||
610 | $this->loadModel('Vote.Vote'); | |
611 | $this->Vote->deleteAll(array('1' => '1')); | |
612 | $this->loadModel('User'); | |
613 | $this->User->updateAll(array('vote' => 0)); | |
614 | $this->History->set('RESET', 'vote'); | |
615 | $this->Session->setFlash($this->Lang->get('VOTE__RESET_SUCCESS'), 'default.success'); | |
616 | $this->redirect(array('controller' => 'voter', 'action' => 'index', 'admin' => true)); | |
617 | } | |
618 | } | |
619 | ||
620 | public function admin_add_ajax() { | |
621 | $this->autoRender = false; | |
622 | if($this->isConnected AND $this->User->isAdmin()) { | |
623 | ||
624 | if($this->request->is('post')) { | |
625 | if(!empty($this->request->data['servers']) AND !empty($this->request->data['website'][0]['page_vote']) AND !empty($this->request->data['website'][0]['time_vote']) AND !empty($this->request->data['website'][0]['website_type']) AND $this->request->data['rewards_type'] == '0' OR $this->request->data['rewards_type'] == '1') { | |
626 | ||
627 | $firstReward = @key($this->request->data['rewards']); | |
628 | if(isset($this->request->data['rewards']) && is_array($this->request->data['rewards']) && !empty($this->request->data['rewards']) && !empty($this->request->data['rewards'][$firstReward]['name']) && $this->request->data['rewards'][$firstReward]['name'] != "undefined" && !empty($this->request->data['rewards'][$firstReward]['type']) && $this->request->data['rewards'][$firstReward]['type'] != "undefined") { | |
629 | $this->loadModel('Vote.VoteConfiguration'); | |
630 | /* | |
631 | REWARDS -> serialize(); | |
632 | ||
633 | Structure = array( | |
634 | array( | |
635 | 'type' => money/server | |
636 | - 'how' => 10 - pour la money | |
637 | - 'command' => say e - pour le server | |
638 | ) | |
639 | ||
640 | ) | |
641 | ||
642 | */ | |
643 | ||
644 | if($this->request->data['rewards_type'] == 0) { | |
645 | foreach ($this->request->data['rewards'] as $key => $value) { | |
646 | if(!isset($value['proba']) || empty($value['proba'])) { | |
647 | echo json_encode(array('statut' => false, 'msg' => $this->Lang->get('ERROR__FILL_ALL_FIELDS'))); | |
648 | return; | |
649 | } | |
650 | } | |
651 | } | |
652 | ||
653 | $rewards = serialize($this->request->data['rewards']); | |
654 | ||
655 | $vote = $this->VoteConfiguration->getConfig(); | |
656 | if(!empty($vote)) { | |
657 | $this->VoteConfiguration->read(null, 1); | |
658 | } else { | |
659 | $this->VoteConfiguration->create(); | |
660 | } | |
661 | $this->VoteConfiguration->set(array( | |
662 | 'rewards_type' => $this->request->data['rewards_type'], | |
663 | 'rewards' => $rewards, | |
664 | 'websites' => serialize($this->request->data['website']), | |
665 | 'servers' => serialize($this->request->data['servers']) | |
666 | )); | |
667 | $this->VoteConfiguration->save(); | |
668 | $this->History->set('EDIT_CONFIG', 'vote'); | |
669 | $this->Session->setFlash($this->Lang->get('VOTE__CONFIGURATION_SUCCESS'), 'default.success'); | |
670 | echo json_encode(array('statut' => true, 'msg' => $this->Lang->get('VOTE__CONFIGURATION_SUCCESS'))); | |
671 | } else { | |
672 | echo json_encode(array('statut' => false, 'msg' => $this->Lang->get('ERROR__FILL_ALL_FIELDS'))); | |
673 | } | |
674 | } else { | |
675 | echo json_encode(array('statut' => false, 'msg' => $this->Lang->get('ERROR__FILL_ALL_FIELDS'))); | |
676 | } | |
677 | } else { | |
678 | echo json_encode(array('statut' => false, 'msg' => $this->Lang->get('ERROR__BAD_REQUEST'))); | |
679 | } | |
680 | } else { | |
681 | throw new ForbiddenException(); | |
682 | } | |
683 | } | |
684 | } |