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

Last change on this file since 4368 was 4368, checked in by tiico, 14 years ago

[ConcoursPhoto] Correct some bug, update database and add audit page (Need to be completed)

File size: 15.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//      Ste 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') );
33
34       
35// test for _GET informations needed
36if (!isset($_GET['action']))
37  die('Wrong parameters...1');
38else
39  $action = $_GET['action'];
40
41
42 
43// Month initialization for date selection...
44$month_list = $lang['month'];
45$month_list[0]='------------';
46ksort($month_list);
47
48
49// concours initialize
50if ($action != "new")
51{
52        if (!isset($_GET['concours']))
53          die('Wrong parameters...2');
54
55        $concours_id = $_GET['concours'];
56        // Get informations from base for concours_id
57        $concours = new Concours($concours_id);
58}
59else    // creation
60{
61        $concours = new Concours();
62        $query = 'SELECT IF(MAX(id)+1 IS NULL, 1, MAX(id)+1) AS next_element_id
63                                FROM ' . CONCOURS_TABLE . ' ;';
64        list($next_element_id) = mysql_fetch_array(pwg_query($query));
65        $concours_id = $next_element_id;
66}
67
68 
69// Add criteria
70if (isset($_POST['add']))
71        redirect( PHPWG_ROOT_PATH . 'admin.php?page=plugin&amp;section=' . CONCOURS_DIR . '%2Fadmin%2Fcriteria.php&amp;id_concours=' . $concours_id.'&amp;action=add');
72
73 
74if (isset($_POST['submit']))
75{
76
77        $concours->concours_infos['method'] = $_POST['concours_method'];
78
79        if ($action == "modify_crit")
80                redirect(PHPWG_ROOT_PATH.'admin.php?page=plugin&section=' . CONCOURS_DIR . '%2Fadmin%2Fadmin.php');
81
82        if ($action == "edit")
83        {
84                if ($concours->is_closed($concours_id) AND ! $concours->is_result_present($concours_id))
85                        $concours->update_concoursfield("method", $concours_id);
86       
87                redirect(PHPWG_ROOT_PATH.'admin.php?page=plugin&section=' . CONCOURS_DIR . '%2Fadmin%2Fadmin.php');
88        }
89
90// Step 1 : action = modify
91// Step 2 : action = modify_crit
92       
93/*
94        // Verify date format.         
95        if (!preg_match(
96        "/^([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$/"
97        , $_POST['concours_begin_date']))
98        {
99                $_POST['concours_begin_date'] = date("Y-m-d H:m:s");
100        }
101*/
102       
103        // Get information from form
104        $concours->concours_id = $concours_id;
105        $concours->concours_infos['id'] = $concours_id;
106        $concours->concours_infos['name'] = $_POST['concours_name'];
107        $concours->concours_infos['descr'] = $_POST['concours_descr'];
108
109//      $concours->concours_infos['begin_date'] = $_POST['concours_begin_date'];
110//      $concours->concours_infos['end_date'] = AjoutJours($concours->concours_infos['begin_date'],$_POST['concours_end_date'] );
111
112        $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);
113    $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);
114
115
116        $concours->concours_infos['groups'] = (!empty($_POST['groups']) ? '"' . implode(',', $_POST['groups']) . '"' : 'NULL');
117        $concours->concours_infos['category'] = $_POST['cat_selection'];
118       
119
120
121        switch($action) 
122        {
123                case "edit" :
124                        redirect(PHPWG_ROOT_PATH.'admin.php?page=plugin&section=' . CONCOURS_DIR . '%2Fadmin%2Fadmin.php');
125                        break;
126                case "new" :
127                       
128                        $concours->save_concours();
129                        $concours->get_default_criterias();
130if ($concours->debug)   sleep(5);
131                        // Redirect to admin
132                        redirect(PHPWG_ROOT_PATH.'admin.php?page=plugin&section=' . CONCOURS_DIR . '%2Fadmin%2Fadmin.php&amp;tab=add_concours&amp;action=modify_crit&amp;concours=' . $concours_id);
133
134                        break;
135                case "modify" :
136                        $concours->update_concours();
137                        redirect(PHPWG_ROOT_PATH.'admin.php?page=plugin&section=' . CONCOURS_DIR . '%2Fadmin%2Fadmin.php&amp;tab=add_concours&amp;action=modify_crit&amp;concours=' . $concours_id);
138
139                        break;
140                case "modify_crit" :
141                        redirect(PHPWG_ROOT_PATH.'admin.php?page=plugin&section=' . CONCOURS_DIR . '%2Fadmin%2Fadmin.php');
142                        break;
143        }
144         
145               
146}               
147       
148       
149       
150switch($action) 
151{
152// Download the file
153        case "file" :
154                // TODO generate csv file
155                $file = $concours->generate_csv();
156                // Get the existing filename or the new one if doesnt exist
157                $filename = $concours->save_file($file);
158
159                redirect(PHPWG_ROOT_PATH.'admin.php?page=plugin&section=' . CONCOURS_DIR . '%2Fadmin%2Fadmin.php');
160                break;
161
162// Geneate result
163        case "result" :
164                // Generate result and save it to DB
165                $concours->create_result();
166                // Generate csv file
167                // 1. Simple  csv file
168//              $file = $concours->generate_csv();
169                // 2.  Complete csv file.
170                $file = $concours->generate_detail_csv();
171                // Save file to directory
172                $filename = $concours->save_file($file);
173               
174                redirect(PHPWG_ROOT_PATH.'admin.php?page=plugin&section=' . CONCOURS_DIR . '%2Fadmin%2Fadmin.php');
175                break;
176
177        case "del" : 
178        // Suppress concours and all parameters
179                $concours->delete_concours();
180                redirect(PHPWG_ROOT_PATH.'admin.php?page=plugin&section=' . CONCOURS_DIR . '%2Fadmin%2Fadmin.php');
181                break;
182               
183        case "new" :
184                $concours->concours_infos['groups'] = array();
185                $concours->concours_infos['category'] = '';
186                $template->assign( 'CONCOURS', array(
187                                'ID'    => $concours_id,
188//                              'BEGIN_DATE'    => date("Y-m-d H:m:s"),
189//                              'END_DATE'      => 15
190                                ));
191
192        //  Init begin and end date
193          $form['start_year']  = $form['end_year']  = date('Y');
194          $form['start_month'] = $form['end_month'] = date('n');
195          $form['start_day']   = $form['end_day']   = date('j');
196                     
197        $template->assign(
198          array(
199
200            'START_DAY_SELECTED' => @$form['start_day'],
201            'START_MONTH_SELECTED' => @$form['start_month'],
202            'START_YEAR' => @$form['start_year'],
203            'START_HOUR' => '12',
204            'START_MIN' => '00',
205           
206            'END_DAY_SELECTED' => @$form['end_day'],
207            'END_MONTH_SELECTED' => @$form['end_month'],
208            'END_YEAR'   => @$form['end_year'],
209            'END_HOUR' => '12',
210            'END_MIN' => '00',
211            )
212          );
213
214  break;
215        case "modify" :
216
217/*              $info_concours['groups']
218                                `create_date` datetime NOT NULL,
219                                `name` text NOT NULL,
220                                `descr` varchar(255) default NULL,
221                                `begin_date` datetime NOT NULL,
222                                `end_date` datetime NOT NULL,
223                                `category` smallint(5) default NULL,
224                                `groups` varchar(255) default NULL,
225*/             
226                // Format group list
227                $concours->concours_infos['groups'] = explode(',', $concours->concours_infos['groups']);
228
229        $tBeginDate = explodeDateArray($concours->concours_infos['begin_date']);
230        $tEndDate = explodeDateArray($concours->concours_infos['end_date']);
231               
232                $template->assign( 'CONCOURS', array(
233                                'ID'    => $concours->concours_infos['id'],
234                                'NAME'  => $concours->concours_infos['name'],
235                                'DESCR' => $concours->concours_infos['descr'],
236//                              'BEGIN_DATE'    => $concours->concours_infos['begin_date'],
237//                              'END_DATE'      => NbJours($concours->concours_infos['begin_date'], $concours->concours_infos['end_date'])
238                                ));
239        $template->assign(
240          array(
241
242            'START_DAY_SELECTED' => @$tBeginDate[2],
243            'START_MONTH_SELECTED' => @$tBeginDate[1],
244            'START_YEAR' => @$tBeginDate[0],
245            'START_HOUR' => @$tBeginDate[3],
246            'START_MIN' => @$tBeginDate[4],
247           
248            'END_DAY_SELECTED' => @$tEndDate[2],
249            'END_MONTH_SELECTED' => @$tEndDate[1],
250            'END_YEAR'   => @$tEndDate[0],
251            'END_HOUR' => @$tEndDate[3],
252            'END_MIN' => @$tEndDate[4],
253            )
254          );
255
256                break;
257        case "modify_crit" :
258        case "edit" :
259                $concours->concours_infos['groups'] = explode(',', $concours->concours_infos['groups']);
260
261        $tBeginDate = explodeDateArray($concours->concours_infos['begin_date']);
262        $tEndDate = explodeDateArray($concours->concours_infos['end_date']);
263               
264                $template->assign( 'CONCOURS', array(
265                                'ID'    => $concours->concours_infos['id'],
266                                'NAME'  => $concours->concours_infos['name'],
267                                'DESCR' => $concours->concours_infos['descr'],
268//                              'BEGIN_DATE'    => $concours->concours_infos['begin_date'],
269//                              'END_DATE'      => NbJours($concours->concours_infos['begin_date'], $concours->concours_infos['end_date'])
270                                ));
271        $template->assign(
272          array(
273
274            'START_DAY_SELECTED' => @$tBeginDate[2],
275            'START_MONTH_SELECTED' => @$tBeginDate[1],
276            'START_YEAR' => @$tBeginDate[0],
277            'START_HOUR' => @$tBeginDate[3],
278            'START_MIN' => @$tBeginDate[4],
279           
280            'END_DAY_SELECTED' => @$tEndDate[2],
281            'END_MONTH_SELECTED' => @$tEndDate[1],
282            'END_YEAR'   => @$tEndDate[0],
283            'END_HOUR' => @$tEndDate[3],
284            'END_MIN' => @$tEndDate[4],
285            )
286          );
287               
288                $firstcriterias = $concours->get_firstlevel_criterias();
289                foreach ($firstcriterias as $criteria)
290                {
291                if ($concours->debug)                                   echo "criteriaID=".$criteria['criteria_id']."\n";
292                        // First without sub criterias
293                        if (!$concours->is_criterias_contains_sub($criteria['criteria_id'] ))
294                        {
295                                $template->append( 'concours_criteria', array(
296                                                'nosub' => true,
297                                                'level' => 1,
298                                                'id'    => $criteria['criteria_id'],                            // id du critere
299                                                'name'  => $criteria['name'],                           // id du critere
300                                                'lib'   => $criteria['descr'], //.'(min='$criteria['min_value'].';max='.$criteria['min_value'].')',                     // libelle du critrer
301                                                'min'   => $criteria['min_value'],                              // min
302                                                'max'   => $criteria['max_value'],                              // max
303                                                'pond'  => $criteria['ponderation'],                    // ponderation
304                                                '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'],
305                                                'U_DELETE' => !is_adviser() ? 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'] : '',
306                                                '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'],
307                                        ));
308                        }
309                        else
310                        {
311                                $template->append( 'concours_criteria', array(
312                                                'nosub' => false,
313                                                'level' => 1,
314                                                'id'    => $criteria['criteria_id'],                            // id du critere
315                                                'name'  => $criteria['name'],                           // id du critere
316                                                'lib'   => $criteria['descr'],
317                                                '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'],
318                                        ));
319                                $secondcriterias = $concours->get_subcriterias($criteria['criteria_id'] );
320                                foreach ($secondcriterias as $subcriteria)
321                                {
322                if ($concours->debug)                                                   echo "subcriteriaID=".$criteria['criteria_id']."\n";
323                                        $template->append( 'concours_criteria', array(
324                                                        'nosub' => true,
325                                                        'level' => 2,
326                                                        'id'    => $subcriteria['criteria_id'],                         // id du critere
327                                                        'name'  => $subcriteria['name'],                                // id du critere
328                                                        'lib'   => $subcriteria['descr'], //.'(min='$criteria['min_value'].';max='.$criteria['min_value'].')',                  // libelle du critrer
329                                                        'min'   => $subcriteria['min_value'],                           // min
330                                                        'max'   => $subcriteria['max_value'],                           // max
331                                                        'pond'  => $subcriteria['ponderation'],                 // ponderation
332                                                        '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'],
333                                                        'U_DELETE' => !is_adviser() ? 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'] : '',
334                                                ));
335                                       
336                                }
337                        }
338
339                }
340               
341                break;
342}
343       
344       
345       
346$template->assign( 'action', $action);
347$template->assign('IMG_URL', CONCOURS_IMG_PATH);
348       
349
350// Add month list to template
351$template->assign(array('month_list' => $month_list));
352
353// Add method list to
354$i=1;
355foreach ( $method_list as $order ) //on parcours le tableau
356{
357        $template->append('concours_method',
358                array(  'ID' => $i,
359                                'NAME' => $order,
360                                'SELECTED' => (isset($concours->concours_infos['method']) && $concours->concours_infos['method'] == $i ? 'selected' : '')));
361        $i++;   
362}
363
364if ($concours->is_closed($concours_id) AND !$concours->is_result_present($concours_id))
365        $template->append('result_not_generated', true);
366
367
368// Groups selection
369$groups = get_all_groups();
370if (!empty($groups))
371{
372  $template->assign('group_perm', array('GROUPSELECTION' => get_html_groups_selection($groups, 'groups', (isset($concours->concours_infos['groups']) ? $concours->concours_infos['groups'] : array()))));
373}
374
375// Category selection
376$query = '
377  SELECT id, name, uppercats, global_rank
378  FROM '.CATEGORIES_TABLE.';';
379
380  $result = pwg_query($query);
381  $categories = array();
382if (!empty($result))
383{
384        while ($row = mysql_fetch_assoc($result))
385                array_push($categories, $row);
386}
387usort($categories, 'global_rank_compare');
388
389if (!empty($result))
390{
391                foreach ($categories as $cat)
392                        $template->append('category_selection',
393                                array(  'ID' => $cat['id'],
394                                                'NAME' => get_cat_display_name_cache($cat['uppercats'],null,false),
395                                                'SELECTED' => ($concours->concours_infos['category'] == $cat['id'] ? 'selected' : '')
396                                        ));
397}
398
399
400
401$template->set_filenames(array('plugin_admin_content' => dirname(__FILE__) . '/template/add_concours.tpl'));
402$template->assign_var_from_handle('ADMIN_CONTENT', 'plugin_admin_content');
403
404// Explode a date format ("AAAA-MM-JJ HH:hh:ss") in array
405// Array(YYYY, MM, JJ, HH, mm, ss)
406function explodeDateArray($date) {
407
408  $tDeb = explode("-", substr($date,0,strpos($date, ' ')));
409  $tDebH = explode(":", substr($date,strpos($date, ' ')+1));
410
411  return array($tDeb[0], $tDeb[1], $tDeb[2], $tDebH[0], $tDebH[1], $tDebH[2]);
412 
413}
414
415
416// NB of days between 2 dates "AAAA-MM-JJ HH:hh:ss"
417function NbJours($debut, $fin) {
418
419  $tDeb = explode("-", substr($debut,0,strpos($debut, ' ')));
420  $tFin = explode("-", substr($fin,0,strpos($fin, ' ')));
421
422  $diff = mktime(0, 0, 0, $tFin[1], $tFin[2], $tFin[0]) - 
423          mktime(0, 0, 0, $tDeb[1], $tDeb[2], $tDeb[0]);
424 
425  return(($diff / 86400));
426
427}
428function AjoutJours($debut, $jours) {
429  $tDeb = explode("-", substr($debut,0,strpos($debut, ' ')));
430  $tDebH = explode(":", substr($debut,strpos($debut, ' ')+1));
431  $tFin = "";
432
433        $nb_ans = (int)(($jours)/365);
434        $nb_mois = (int)(( ($jours)%365) / 31);
435        $nb_jours = (int)(( ($jours)%365) % 31);               
436
437$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));
438 
439  return($tFin);
440
441}
442
443
444?>
Note: See TracBrowser for help on using the repository browser.