source: extensions/ConcoursPhoto/admin/add_concours.php

Last change on this file was 32546, checked in by tiico, 3 years ago

Correction + add podium on category (with param)

File size: 17.4 KB
Line 
1<?php
2
3// To add a concours, 2 steps  are needed:
4// Step 1 : action=new
5//      initialize a concours and store it to database (with elements on piwigo_concours table)
6//      After storage on database, step 2 is called (action=new_crit)
7// Step 2 : action=new_crit  &  concours_id=XX
8
9// add_concours with action=view is called only to list informations about a concours id
10// add_concours with action=modify is called to modify informations about a concours.  Like creation, 2 steps are needed
11//      Step 1 : action=modify &  concours_id=XX
12//              List informations about concours id and modify it to store to piwifo_concours table
13//              Go to Step 2 (if needed by client choice ==> 2 buttons) with action=modify_crit
14//      Step 2 : action=modify_crit &  concours_id=XX
15//              List informations about criterias and modify them
16//              Warning : different cases are possible :
17//                      - delete criteria ou sub criteria
18//                      - modify criteria ou sub criteria (
19//                      - add criteria ou sub criteria
20//              For all theses actions, the command is sent by _GET method
21
22
23
24
25if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
26
27global $template;
28
29include_once(CONCOURS_PATH . 'admin/functions.inc.php');
30load_language('plugin.lang', CONCOURS_PATH);
31
32$method_list = array(l10n('concours_method1'), l10n ('concours_method2'), l10n ('concours_method3'), l10n ('concours_method4') );
33
34       
35// test for _GET informations needed
36if (!isset($_GET['action']))
37  die('Wrong parameters...1');
38else
39  $action = $_GET['action'];
40
41/*
42echo "action : ".$action."\n";
43sleep(5);
44*/ 
45 
46// Month initialization for date selection...
47$month_list = $lang['month'];
48$month_list[0]='------------';
49ksort($month_list);
50
51
52// concours initialize
53if ($action != "new")
54{
55        if (!isset($_GET['concours']))
56          die('Wrong parameters...2');
57
58        $concours_id = $_GET['concours'];
59        // Get informations from base for concours_id
60        $concours = new Concours($concours_id);
61}
62else    // creation
63{
64        $concours = new Concours();
65        $query = 'SELECT IF(MAX(id)+1 IS NULL, 1, MAX(id)+1) AS next_element_id
66                                FROM ' . CONCOURS_TABLE . ' ;';
67        list($next_element_id) = pwg_db_fetch_array(pwg_query($query));
68        $concours_id = $next_element_id;
69}
70
71
72// Add informations from previous pages if present
73if (isset($_GET['infos']) && isset($concours))
74{
75  $infos = $_GET['infos'];
76  switch($infos)
77  {
78    case "1" :
79    array_push($page['errors'],   l10n('concours_end_date_change_to' ,$concours->concours_infos['end_date'] ));
80    break;
81       
82  }
83           
84}
85
86 
87// Add criteria
88if (isset($_POST['add']))
89        redirect( PHPWG_ROOT_PATH . 'admin.php?page=plugin-' . CONCOURS_DIR . '-criteria&amp;id_concours=' . $concours_id.'&amp;action=add');
90
91 
92if (isset($_POST['submit']))
93{
94
95// Update method if changed
96        if (!isset($concours->concours_infos['method']) OR (isset($_POST['concours_method']) AND $concours->concours_infos['method'] != $_POST['concours_method']))
97        {
98                $concours->concours_infos['method'] = $_POST['concours_method'];
99                $concours->update_concoursfield("method", $concours_id);
100        }
101
102        if ($action == "modify_crit")
103    {
104        $concours->infos = 0;
105//        redirect(PHPWG_ROOT_PATH.'admin.php?page=plugin&section=' . CONCOURS_DIR . '-admin.php&amp;concours=' . $concours_id.(isset($concours->infos) ? '&amp;infos=' .$concours->infos: ''));
106        redirect(PHPWG_ROOT_PATH.'admin.php?page=plugin&section=' . CONCOURS_DIR . '%2Fadmin.php&amp;concours=' . $concours_id.(isset($concours->infos) ? '&amp;infos=' .$concours->infos: ''));
107    }
108
109        if ($action == "edit")
110        {
111       
112                redirect(PHPWG_ROOT_PATH.'admin.php?page=plugin&section=' . CONCOURS_DIR . '%2Fadmin.php');
113        }
114
115
116// Step 1 : action = modify
117// Step 2 : action = modify_crit
118       
119/*
120        // Verify date format.         
121        if (!preg_match(
122        "/^([2][0]\d{2})\-([0]\d|[1][0-2])\-([0-2]\d|[3][0-1])\s([0-1]\d|[2][0-3])\:[0-5]\d\:[0-5]\d$/"
123        , $_POST['concours_begin_date']))
124        {
125                $_POST['concours_begin_date'] = date("Y-m-d H:m:s");
126        }
127*/
128       
129        // Get information from form
130        $concours->concours_id = $concours_id;
131        $concours->concours_infos['id'] = $concours_id;
132        $concours->concours_infos['name'] = $_POST['concours_name'];
133        $concours->concours_infos['descr'] = $_POST['concours_descr'];
134
135
136        $concours->concours_infos['begin_date'] = sprintf("%04d-%02d-%02d %02d:%02d:%02d",$_POST['start_year'], $_POST['start_month'], $_POST['start_day'], $_POST['start_hour'], $_POST['start_min'], 0);
137    $concours->concours_infos['end_date'] = sprintf("%04d-%02d-%02d %02d:%02d:%02d",$_POST['end_year'], $_POST['end_month'], $_POST['end_day'], $_POST['end_hour'], $_POST['end_min'], 0);
138
139if ($concours->debug)   
140{
141    echo "BEGIN=".$concours->concours_infos['begin_date']."\n";
142    echo "END=".$concours->concours_infos['end_date']."\n";
143    sleep(5);
144}
145   
146    $BeginToEnd = NbJours($concours->concours_infos['begin_date'], $concours->concours_infos['end_date']);
147//    echo "NB=".$BeginToEnd;
148    // Test if end date is lower than end date
149    if ($BeginToEnd == 0)
150    {
151        $tBeginDate = explodeDateArray($concours->concours_infos['begin_date']);
152        $tEndDate = explodeDateArray($concours->concours_infos['end_date']);
153        if ( (intval(@$tEndDate[3]) < intval(@$tBeginDate[3]))    // End hour is lower than begin hour
154            OR ( (intval(@$tBeginDate[3]) == intval(@$tEndDate[3]))    // End hour is equal to begin hour
155                 AND (intval(@$tEndDate[4]) < intval(@$tBeginDate[4]))) // End min is lower than begin hour
156            )
157        {
158            $concours->concours_infos['end_date'] = AjoutJours ($concours->concours_infos['begin_date'], 1);
159            $concours->infos = 1;  // sprintf( l10n('concours_end_date_change_to') ,$concours->concours_infos['end_date'] ));
160        }
161    }
162    elseif ($BeginToEnd < 0 )
163    {
164        $concours->concours_infos['end_date'] = AjoutJours ($concours->concours_infos['begin_date'], 1);
165        $concours->infos = 1;  // sprintf( l10n('concours_end_date_change_to') ,$concours->concours_infos['end_date'] ));
166    }
167    // End test date
168       
169        $concours->concours_infos['groups'] = (!empty($_POST['groups']) ? '"' . implode(',', $_POST['groups']) . '"' : 'NULL');
170        $concours->concours_infos['guest'] = isset($_POST['guest']);
171        $concours->concours_infos['admin'] = isset($_POST['admin']);
172        $concours->concours_infos['Podium_onCat'] = isset($_POST['Podium_onCat']);
173       
174        $concours->concours_infos['category'] = $_POST['cat_selection'];
175       
176
177
178        switch($action) 
179        {
180                case "edit" :
181                        redirect(PHPWG_ROOT_PATH.'admin.php?page=plugin&section=' . CONCOURS_DIR . '%2Fadmin.php');
182                        break;
183                case "new" :
184                       
185                        $concours->save_concours();
186                        $concours->get_default_criterias();
187                        // Redirect to admin
188                        redirect(PHPWG_ROOT_PATH.'admin.php?page=plugin&section=' . CONCOURS_DIR . '%2Fadmin.php&amp;tab=add_concours&amp;action=modify_crit&amp;concours=' . $concours_id.(isset($concours->infos) ? '&amp;infos=' .$concours->infos: ''));
189
190                        break;
191                case "modify" :
192            $concours->update_concours();
193                        redirect(PHPWG_ROOT_PATH.'admin.php?page=plugin&section=' . CONCOURS_DIR . '%2Fadmin.php&amp;tab=add_concours&amp;action=modify_crit&amp;concours=' . $concours_id.(isset($concours->infos) ? '&amp;infos=' .$concours->infos: ''));
194
195                        break;
196                case "modify_crit" :
197            $concours->infos = 0;
198                        redirect(PHPWG_ROOT_PATH.'admin.php?page=plugin&section=' . CONCOURS_DIR . '%2Fadmin.php&amp;concours=' . $concours_id.(isset($concours->infos) ? '&amp;infos=' .$concours->infos: ''));
199                        break;
200        }
201         
202               
203}               
204       
205       
206       
207switch($action) 
208{
209// Download the file
210        case "file" :
211                //  generate csv file
212                $file = $concours->generate_csv();
213                // Get the existing filename or the new one if doesnt exist
214                $filename = $concours->save_file($file);
215
216                redirect(PHPWG_ROOT_PATH.'admin.php?page=plugin&section=' . CONCOURS_DIR . '%2Fadmin.php');
217                break;
218
219// Geneate result
220        case "result" :
221                // Generate result and save it to DB
222                $concours->create_result();
223                // Generate csv file
224                // 1. Simple  csv file
225//              $file = $concours->generate_csv();
226                // 2.  Complete csv file.
227                $file = $concours->generate_detail_csv();
228                // Save file to directory
229                $filename = $concours->save_file($file);
230               
231                redirect(PHPWG_ROOT_PATH.'admin.php?page=plugin&section=' . CONCOURS_DIR . '%2Fadmin.php');
232                break;
233
234        case "del" : 
235        // Suppress concours and all parameters
236                $concours->delete_concours();
237                redirect(PHPWG_ROOT_PATH.'admin.php?page=plugin&section=' . CONCOURS_DIR . '%2Fadmin.php');
238                break;
239               
240        case "new" :
241                $concours->concours_infos['groups'] = array();
242                $concours->concours_infos['category'] = '';
243                $template->assign( 'CONCOURS', array(
244                                'ID'    => $concours_id,
245                                ));
246
247        //  Init begin and end date
248          $form['start_year']  = $form['end_year']  = date('Y');
249          $form['start_month'] = $form['end_month'] = date('n');
250          $form['start_day']   = $form['end_day']   = date('j');
251                     
252        $template->assign(
253          array(
254
255            'START_DAY_SELECTED' => @$form['start_day'],
256            'START_MONTH_SELECTED' => @$form['start_month'],
257            'START_YEAR' => @$form['start_year'],
258            'START_HOUR' => '12',
259            'START_MIN' => '00',
260           
261            'END_DAY_SELECTED' => @$form['end_day'],
262            'END_MONTH_SELECTED' => @$form['end_month'],
263            'END_YEAR'   => @$form['end_year'],
264            'END_HOUR' => '12',
265            'END_MIN' => '00',
266            )
267          );
268
269  break;
270        case "modify" :
271
272                // Format group list
273                $concours->concours_infos['groups'] = explode(',', $concours->concours_infos['groups']);
274
275       
276        $tBeginDate = explodeDateArray($concours->concours_infos['begin_date']);
277        $tEndDate = explodeDateArray($concours->concours_infos['end_date']);
278
279
280
281               
282                $template->assign( 'CONCOURS', array(
283                                'ID'    => $concours->concours_infos['id'],
284                                'NAME'  => $concours->concours_infos['name'],
285                                'DESCR' => $concours->concours_infos['descr'],
286                'GUEST' => ($concours->concours_infos['guest'] ? 'checked="checked"' : ''),
287                'ADMIN' => ($concours->concours_infos['admin'] ? 'checked="checked"' : ''),                             
288                'SHOWPODIUM' => ($concours->concours_infos['Podium_onCat'] ? 'checked="checked"' : ''),                         
289                                ));
290        $template->assign(
291          array(
292
293            'START_DAY_SELECTED' => @$tBeginDate[2],
294            'START_MONTH_SELECTED' => intval($tBeginDate[1]),
295            'START_YEAR' => @$tBeginDate[0],
296            'START_HOUR' => @$tBeginDate[3],
297            'START_MIN' => @$tBeginDate[4],
298           
299            'END_DAY_SELECTED' => @$tEndDate[2],
300            'END_MONTH_SELECTED' => intval($tEndDate[1]),
301            'END_YEAR'   => @$tEndDate[0],
302            'END_HOUR' => @$tEndDate[3],
303            'END_MIN' => @$tEndDate[4],
304            )
305          );
306
307                break;
308        case "modify_crit" :
309        case "edit" :
310                $concours->concours_infos['groups'] = explode(',', $concours->concours_infos['groups']);
311
312        $tBeginDate = explodeDateArray($concours->concours_infos['begin_date']);
313        $tEndDate = explodeDateArray($concours->concours_infos['end_date']);
314               
315                $template->assign( 'CONCOURS', array(
316                                'ID'    => $concours->concours_infos['id'],
317                                'NAME'  => $concours->concours_infos['name'],
318                                'DESCR' => $concours->concours_infos['descr'],
319                'GUEST' => ($concours->concours_infos['guest'] ? 'checked="checked"' : ''),
320                'ADMIN' => ($concours->concours_infos['admin'] ? 'checked="checked"' : ''),
321                                ));
322        $template->assign(
323          array(
324
325            'START_DAY_SELECTED' => @$tBeginDate[2],
326            'START_MONTH_SELECTED' => @$tBeginDate[1],
327            'START_YEAR' => @$tBeginDate[0],
328            'START_HOUR' => @$tBeginDate[3],
329            'START_MIN' => @$tBeginDate[4],
330           
331            'END_DAY_SELECTED' => @$tEndDate[2],
332            'END_MONTH_SELECTED' => @$tEndDate[1],
333            'END_YEAR'   => @$tEndDate[0],
334            'END_HOUR' => @$tEndDate[3],
335            'END_MIN' => @$tEndDate[4],
336            )
337          );
338               
339                $firstcriterias = $concours->get_firstlevel_criterias();
340                foreach ($firstcriterias as $criteria)
341                {
342                if ($concours->debug)                                   echo "criteriaID=".$criteria['criteria_id']."\n";
343                        // First without sub criterias
344                        if (!$concours->is_criterias_contains_sub($criteria['criteria_id'] ))
345                        {
346                                $template->append( 'concours_criteria', array(
347                                                'nosub' => true,
348                                                'level' => 1,
349                                                'id'    => $criteria['criteria_id'],                            // id du critere
350                                                'name'  => $criteria['name'],                           // id du critere
351                                                'lib'   => $criteria['descr'], //.'(min='$criteria['min_value'].';max='.$criteria['min_value'].')',                     // libelle du critrer
352                                                'min'   => $criteria['min_value'],                              // min
353                                                'max'   => $criteria['max_value'],                              // max
354                                                'pond'  => $criteria['ponderation'],                    // ponderation
355                                                'U_EDIT' => PHPWG_ROOT_PATH . 'admin.php?page=plugin-' . CONCOURS_DIR . '-criteria&amp;id_concours=' . $concours->concours_id.'&amp;action=modify&amp;id='.$criteria['id'],
356                                                'U_DELETE' => PHPWG_ROOT_PATH . 'admin.php?page=plugin-' . CONCOURS_DIR . '-criteria&amp;id_concours=' . $concours->concours_id.'&amp;action=delete&amp;id='.$criteria['id'],
357                                                'U_ADD' => PHPWG_ROOT_PATH . 'admin.php?page=plugin-' . CONCOURS_DIR . '-criteria&amp;id_concours=' . $concours->concours_id.'&amp;action=add&amp;upcriteria='.$criteria['criteria_id'],
358                                        ));
359                        }
360                        else
361                        {
362                                $template->append( 'concours_criteria', array(
363                                                'nosub' => false,
364                                                'level' => 1,
365                                                'id'    => $criteria['criteria_id'],                            // id du critere
366                                                'name'  => $criteria['name'],                           // id du critere
367                                                'lib'   => $criteria['descr'],
368                                                'U_ADD' => PHPWG_ROOT_PATH . 'admin.php?page=plugin-' . CONCOURS_DIR . '-criteria&amp;id_concours=' . $concours->concours_id.'&amp;action=add&amp;upcriteria='.$criteria['criteria_id'],
369                                        ));
370                                $secondcriterias = $concours->get_subcriterias($criteria['criteria_id'] );
371                                foreach ($secondcriterias as $subcriteria)
372                                {
373                if ($concours->debug)                                                   echo "subcriteriaID=".$criteria['criteria_id']."\n";
374                                        $template->append( 'concours_criteria', array(
375                                                        'nosub' => true,
376                                                        'level' => 2,
377                                                        'id'    => $subcriteria['criteria_id'],                         // id du critere
378                                                        'name'  => $subcriteria['name'],                                // id du critere
379                                                        'lib'   => $subcriteria['descr'], //.'(min='$criteria['min_value'].';max='.$criteria['min_value'].')',                  // libelle du critrer
380                                                        'min'   => $subcriteria['min_value'],                           // min
381                                                        'max'   => $subcriteria['max_value'],                           // max
382                                                        'pond'  => $subcriteria['ponderation'],                 // ponderation
383                                                        'U_EDIT' => PHPWG_ROOT_PATH . 'admin.php?page=plugin-' . CONCOURS_DIR . '-criteria&amp;id_concours=' . $concours->concours_id.'&amp;action=modify&amp;id='.$subcriteria['id'],
384                                                        'U_DELETE' => PHPWG_ROOT_PATH . 'admin.php?page=plugin-' . CONCOURS_DIR . '-criteria&amp;id_concours=' . $concours->concours_id.'&amp;action=delete&amp;id='.$subcriteria['id'] ,
385                                                ));                                     
386                                }
387                        }
388
389                }
390               
391                break;
392}
393       
394       
395       
396$template->assign( 'action', $action);
397$template->assign('IMG_URL', CONCOURS_IMG_PATH);
398       
399
400// Add month list to template
401$template->assign(array('month_list' => $month_list));
402
403// Add method list to
404$i=1;
405foreach ( $method_list as $order ) //on parcours le tableau
406{
407        $template->append('concours_method',
408                array(  'ID' => $i,
409                                'NAME' => $order,
410                                'SELECTED' => (isset($concours->concours_infos['method']) && $concours->concours_infos['method'] == $i ? 'selected' : '')));
411        $i++;   
412}
413
414if ($concours->is_closed($concours_id) AND !$concours->is_result_present($concours_id))
415        $template->append('result_not_generated', true);
416
417
418// Groups selection
419$groups = get_all_groups();
420if (!empty($groups))
421{
422  $template->assign('group_perm', array('GROUPSELECTION' => get_html_groups_selection($groups, 'groups', (isset($concours->concours_infos['groups']) ? $concours->concours_infos['groups'] : array()))));
423}
424
425
426// Category selection
427$query = '
428  SELECT id, name, uppercats, global_rank
429  FROM '.CATEGORIES_TABLE.';';
430
431  $result = pwg_query($query);
432  $categories = array();
433if (!empty($result))
434{
435        while ($row = pwg_db_fetch_array($result))
436                array_push($categories, $row);
437}
438usort($categories, 'global_rank_compare');
439
440if (!empty($result))
441{
442                foreach ($categories as $cat)
443                        $template->append('category_selection',
444                                array(  'ID' => $cat['id'],
445                                                'NAME' => get_cat_display_name_cache($cat['uppercats'],null,false),
446                                                'SELECTED' => ($concours->concours_infos['category'] == $cat['id'] ? 'selected' : '')
447                                        ));
448}
449
450
451
452$template->set_filenames(array('plugin_admin_content' => dirname(__FILE__) . '/template/add_concours.tpl'));
453$template->assign_var_from_handle('ADMIN_CONTENT', 'plugin_admin_content');
454
455// Explode a date format ("AAAA-MM-JJ HH:hh:ss") in array
456// Array(YYYY, MM, JJ, HH, mm, ss)
457function explodeDateArray($date) {
458
459  $tDeb = explode("-", substr($date,0,strpos($date, ' ')));
460  $tDebH = explode(":", substr($date,strpos($date, ' ')+1));
461
462  return array($tDeb[0], $tDeb[1], $tDeb[2], $tDebH[0], $tDebH[1], $tDebH[2]);
463 
464}
465
466
467// NB of days between 2 dates "AAAA-MM-JJ HH:hh:ss"
468function NbJours($debut, $fin) {
469
470  $tDeb = explode("-", substr($debut,0,strpos($debut, ' ')));
471  $tFin = explode("-", substr($fin,0,strpos($fin, ' ')));
472
473  $diff = mktime(0, 0, 0, $tFin[1], $tFin[2], $tFin[0]) - 
474          mktime(0, 0, 0, $tDeb[1], $tDeb[2], $tDeb[0]);
475 
476  return(($diff / 86400));
477
478}
479function AjoutJours($debut, $jours) {
480  $tDeb = explode("-", substr($debut,0,strpos($debut, ' ')));
481  $tDebH = explode(":", substr($debut,strpos($debut, ' ')+1));
482  $tFin = "";
483
484        $nb_ans = (int)(($jours)/365);
485        $nb_mois = (int)(( ($jours)%365) / 31);
486        $nb_jours = (int)(( ($jours)%365) % 31);               
487
488$tFin = date("Y-m-d H:m:s", mktime($tDebH[0], $tDebH[1], $tDebH[2], $tDeb[1] + $nb_mois, $tDeb[2] + $nb_jours, $tDeb[0] + $nb_ans));
489 
490  return($tFin);
491
492}
493
494
495?>
Note: See TracBrowser for help on using the repository browser.