source: extensions/ConcoursPhoto/admin/add_concours.php @ 32457

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

Version 11.0.1 ConcoursPhoto (piwigo 11 compatible + some corrections/news)

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&amp;section=' . CONCOURS_DIR . '%2Fadmin%2Fcriteria.php&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 . '%2Fadmin%2Fadmin.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       
173        $concours->concours_infos['category'] = $_POST['cat_selection'];
174       
175
176
177        switch($action) 
178        {
179                case "edit" :
180                        redirect(PHPWG_ROOT_PATH.'admin.php?page=plugin&section=' . CONCOURS_DIR . '%2Fadmin.php');
181                        break;
182                case "new" :
183                       
184                        $concours->save_concours();
185                        $concours->get_default_criterias();
186                        // Redirect to admin
187                        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: ''));
188
189                        break;
190                case "modify" :
191            $concours->update_concours();
192                        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: ''));
193
194                        break;
195                case "modify_crit" :
196            $concours->infos = 0;
197                        redirect(PHPWG_ROOT_PATH.'admin.php?page=plugin&section=' . CONCOURS_DIR . '%2Fadmin.php&amp;concours=' . $concours_id.(isset($concours->infos) ? '&amp;infos=' .$concours->infos: ''));
198                        break;
199        }
200         
201               
202}               
203       
204       
205       
206switch($action) 
207{
208// Download the file
209        case "file" :
210                //  generate csv file
211                $file = $concours->generate_csv();
212                // Get the existing filename or the new one if doesnt exist
213                $filename = $concours->save_file($file);
214
215                redirect(PHPWG_ROOT_PATH.'admin.php?page=plugin&section=' . CONCOURS_DIR . '%2Fadmin.php');
216                break;
217
218// Geneate result
219        case "result" :
220                // Generate result and save it to DB
221                $concours->create_result();
222                // Generate csv file
223                // 1. Simple  csv file
224//              $file = $concours->generate_csv();
225                // 2.  Complete csv file.
226                $file = $concours->generate_detail_csv();
227                // Save file to directory
228                $filename = $concours->save_file($file);
229               
230                redirect(PHPWG_ROOT_PATH.'admin.php?page=plugin&section=' . CONCOURS_DIR . '%2Fadmin.php');
231                break;
232
233        case "del" : 
234        // Suppress concours and all parameters
235                $concours->delete_concours();
236                redirect(PHPWG_ROOT_PATH.'admin.php?page=plugin&section=' . CONCOURS_DIR . '%2Fadmin.php');
237                break;
238               
239        case "new" :
240                $concours->concours_infos['groups'] = array();
241                $concours->concours_infos['category'] = '';
242                $template->assign( 'CONCOURS', array(
243                                'ID'    => $concours_id,
244                                ));
245
246        //  Init begin and end date
247          $form['start_year']  = $form['end_year']  = date('Y');
248          $form['start_month'] = $form['end_month'] = date('n');
249          $form['start_day']   = $form['end_day']   = date('j');
250                     
251        $template->assign(
252          array(
253
254            'START_DAY_SELECTED' => @$form['start_day'],
255            'START_MONTH_SELECTED' => @$form['start_month'],
256            'START_YEAR' => @$form['start_year'],
257            'START_HOUR' => '12',
258            'START_MIN' => '00',
259           
260            'END_DAY_SELECTED' => @$form['end_day'],
261            'END_MONTH_SELECTED' => @$form['end_month'],
262            'END_YEAR'   => @$form['end_year'],
263            'END_HOUR' => '12',
264            'END_MIN' => '00',
265            )
266          );
267
268  break;
269        case "modify" :
270
271                // Format group list
272                $concours->concours_infos['groups'] = explode(',', $concours->concours_infos['groups']);
273
274       
275        $tBeginDate = explodeDateArray($concours->concours_infos['begin_date']);
276        $tEndDate = explodeDateArray($concours->concours_infos['end_date']);
277
278
279
280               
281                $template->assign( 'CONCOURS', array(
282                                'ID'    => $concours->concours_infos['id'],
283                                'NAME'  => $concours->concours_infos['name'],
284                                'DESCR' => $concours->concours_infos['descr'],
285                'GUEST' => ($concours->concours_infos['guest'] ? 'checked="checked"' : ''),
286                'ADMIN' => ($concours->concours_infos['admin'] ? 'checked="checked"' : ''),                             
287                                ));
288        $template->assign(
289          array(
290
291            'START_DAY_SELECTED' => @$tBeginDate[2],
292            'START_MONTH_SELECTED' => intval($tBeginDate[1]),
293            'START_YEAR' => @$tBeginDate[0],
294            'START_HOUR' => @$tBeginDate[3],
295            'START_MIN' => @$tBeginDate[4],
296           
297            'END_DAY_SELECTED' => @$tEndDate[2],
298            'END_MONTH_SELECTED' => intval($tEndDate[1]),
299            'END_YEAR'   => @$tEndDate[0],
300            'END_HOUR' => @$tEndDate[3],
301            'END_MIN' => @$tEndDate[4],
302            )
303          );
304
305                break;
306        case "modify_crit" :
307        case "edit" :
308                $concours->concours_infos['groups'] = explode(',', $concours->concours_infos['groups']);
309
310        $tBeginDate = explodeDateArray($concours->concours_infos['begin_date']);
311        $tEndDate = explodeDateArray($concours->concours_infos['end_date']);
312               
313                $template->assign( 'CONCOURS', array(
314                                'ID'    => $concours->concours_infos['id'],
315                                'NAME'  => $concours->concours_infos['name'],
316                                'DESCR' => $concours->concours_infos['descr'],
317                'GUEST' => ($concours->concours_infos['guest'] ? 'checked="checked"' : ''),
318                'ADMIN' => ($concours->concours_infos['admin'] ? 'checked="checked"' : ''),
319                                ));
320        $template->assign(
321          array(
322
323            'START_DAY_SELECTED' => @$tBeginDate[2],
324            'START_MONTH_SELECTED' => @$tBeginDate[1],
325            'START_YEAR' => @$tBeginDate[0],
326            'START_HOUR' => @$tBeginDate[3],
327            'START_MIN' => @$tBeginDate[4],
328           
329            'END_DAY_SELECTED' => @$tEndDate[2],
330            'END_MONTH_SELECTED' => @$tEndDate[1],
331            'END_YEAR'   => @$tEndDate[0],
332            'END_HOUR' => @$tEndDate[3],
333            'END_MIN' => @$tEndDate[4],
334            )
335          );
336               
337                $firstcriterias = $concours->get_firstlevel_criterias();
338                foreach ($firstcriterias as $criteria)
339                {
340                if ($concours->debug)                                   echo "criteriaID=".$criteria['criteria_id']."\n";
341                        // First without sub criterias
342                        if (!$concours->is_criterias_contains_sub($criteria['criteria_id'] ))
343                        {
344                                $template->append( 'concours_criteria', array(
345                                                'nosub' => true,
346                                                'level' => 1,
347                                                'id'    => $criteria['criteria_id'],                            // id du critere
348                                                'name'  => $criteria['name'],                           // id du critere
349                                                'lib'   => $criteria['descr'], //.'(min='$criteria['min_value'].';max='.$criteria['min_value'].')',                     // libelle du critrer
350                                                'min'   => $criteria['min_value'],                              // min
351                                                'max'   => $criteria['max_value'],                              // max
352                                                'pond'  => $criteria['ponderation'],                    // ponderation
353                                                'U_EDIT' => PHPWG_ROOT_PATH . 'admin.php?page=plugin&amp;section=' . CONCOURS_DIR . '%2Fadmin%2Fcriteria.php&amp;id_concours=' . $concours->concours_id.'&amp;action=modify&amp;id='.$criteria['id'],
354                                                'U_DELETE' => PHPWG_ROOT_PATH . 'admin.php?page=plugin&amp;section=' . CONCOURS_DIR . '%2Fadmin%2Fcriteria.php&amp;id_concours=' . $concours->concours_id.'&amp;action=delete&amp;id='.$criteria['id'],
355                                                'U_ADD' => PHPWG_ROOT_PATH . 'admin.php?page=plugin&amp;section=' . CONCOURS_DIR . '%2Fadmin%2Fcriteria.php&amp;id_concours=' . $concours->concours_id.'&amp;action=add&amp;upcriteria='.$criteria['criteria_id'],
356                                        ));
357                        }
358                        else
359                        {
360                                $template->append( 'concours_criteria', array(
361                                                'nosub' => false,
362                                                'level' => 1,
363                                                'id'    => $criteria['criteria_id'],                            // id du critere
364                                                'name'  => $criteria['name'],                           // id du critere
365                                                'lib'   => $criteria['descr'],
366                                                'U_ADD' => PHPWG_ROOT_PATH . 'admin.php?page=plugin&amp;section=' . CONCOURS_DIR . '%2Fadmin%2Fcriteria.php&amp;id_concours=' . $concours->concours_id.'&amp;action=add&amp;upcriteria='.$criteria['criteria_id'],
367                                        ));
368                                $secondcriterias = $concours->get_subcriterias($criteria['criteria_id'] );
369                                foreach ($secondcriterias as $subcriteria)
370                                {
371                if ($concours->debug)                                                   echo "subcriteriaID=".$criteria['criteria_id']."\n";
372                                        $template->append( 'concours_criteria', array(
373                                                        'nosub' => true,
374                                                        'level' => 2,
375                                                        'id'    => $subcriteria['criteria_id'],                         // id du critere
376                                                        'name'  => $subcriteria['name'],                                // id du critere
377                                                        'lib'   => $subcriteria['descr'], //.'(min='$criteria['min_value'].';max='.$criteria['min_value'].')',                  // libelle du critrer
378                                                        'min'   => $subcriteria['min_value'],                           // min
379                                                        'max'   => $subcriteria['max_value'],                           // max
380                                                        'pond'  => $subcriteria['ponderation'],                 // ponderation
381                                                        'U_EDIT' => PHPWG_ROOT_PATH . 'admin.php?page=plugin&amp;section=' . CONCOURS_DIR . '%2Fadmin%2Fcriteria.php&amp;id_concours=' . $concours->concours_id.'&amp;action=modify&amp;id='.$subcriteria['id'],
382                                                        'U_DELETE' => PHPWG_ROOT_PATH . 'admin.php?page=plugin&amp;section=' . CONCOURS_DIR . '%2Fadmin%2Fcriteria.php&amp;id_concours=' . $concours->concours_id.'&amp;action=delete&amp;id='.$subcriteria['id'] ,
383                                                ));                                     
384                                }
385                        }
386
387                }
388               
389                break;
390}
391       
392       
393       
394$template->assign( 'action', $action);
395$template->assign('IMG_URL', CONCOURS_IMG_PATH);
396       
397
398// Add month list to template
399$template->assign(array('month_list' => $month_list));
400
401// Add method list to
402$i=1;
403foreach ( $method_list as $order ) //on parcours le tableau
404{
405        $template->append('concours_method',
406                array(  'ID' => $i,
407                                'NAME' => $order,
408                                'SELECTED' => (isset($concours->concours_infos['method']) && $concours->concours_infos['method'] == $i ? 'selected' : '')));
409        $i++;   
410}
411
412if ($concours->is_closed($concours_id) AND !$concours->is_result_present($concours_id))
413        $template->append('result_not_generated', true);
414
415
416// Groups selection
417$groups = get_all_groups();
418if (!empty($groups))
419{
420  $template->assign('group_perm', array('GROUPSELECTION' => get_html_groups_selection($groups, 'groups', (isset($concours->concours_infos['groups']) ? $concours->concours_infos['groups'] : array()))));
421}
422
423
424// Category selection
425$query = '
426  SELECT id, name, uppercats, global_rank
427  FROM '.CATEGORIES_TABLE.';';
428
429  $result = pwg_query($query);
430  $categories = array();
431if (!empty($result))
432{
433        while ($row = pwg_db_fetch_array($result))
434                array_push($categories, $row);
435}
436usort($categories, 'global_rank_compare');
437
438if (!empty($result))
439{
440                foreach ($categories as $cat)
441                        $template->append('category_selection',
442                                array(  'ID' => $cat['id'],
443                                                'NAME' => get_cat_display_name_cache($cat['uppercats'],null,false),
444                                                'SELECTED' => ($concours->concours_infos['category'] == $cat['id'] ? 'selected' : '')
445                                        ));
446}
447
448
449
450$template->set_filenames(array('plugin_admin_content' => dirname(__FILE__) . '/template/add_concours.tpl'));
451$template->assign_var_from_handle('ADMIN_CONTENT', 'plugin_admin_content');
452
453// Explode a date format ("AAAA-MM-JJ HH:hh:ss") in array
454// Array(YYYY, MM, JJ, HH, mm, ss)
455function explodeDateArray($date) {
456
457  $tDeb = explode("-", substr($date,0,strpos($date, ' ')));
458  $tDebH = explode(":", substr($date,strpos($date, ' ')+1));
459
460  return array($tDeb[0], $tDeb[1], $tDeb[2], $tDebH[0], $tDebH[1], $tDebH[2]);
461 
462}
463
464
465// NB of days between 2 dates "AAAA-MM-JJ HH:hh:ss"
466function NbJours($debut, $fin) {
467
468  $tDeb = explode("-", substr($debut,0,strpos($debut, ' ')));
469  $tFin = explode("-", substr($fin,0,strpos($fin, ' ')));
470
471  $diff = mktime(0, 0, 0, $tFin[1], $tFin[2], $tFin[0]) - 
472          mktime(0, 0, 0, $tDeb[1], $tDeb[2], $tDeb[0]);
473 
474  return(($diff / 86400));
475
476}
477function AjoutJours($debut, $jours) {
478  $tDeb = explode("-", substr($debut,0,strpos($debut, ' ')));
479  $tDebH = explode(":", substr($debut,strpos($debut, ' ')+1));
480  $tFin = "";
481
482        $nb_ans = (int)(($jours)/365);
483        $nb_mois = (int)(( ($jours)%365) / 31);
484        $nb_jours = (int)(( ($jours)%365) % 31);               
485
486$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));
487 
488  return($tFin);
489
490}
491
492
493?>
Note: See TracBrowser for help on using the repository browser.