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

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

[ConcoursPhoto] Modify date selections mechanism

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