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

Last change on this file since 8946 was 8946, checked in by tiico, 13 years ago

Prepare v2.0.0 for Concours photo plugin :

  • Add exaequo checking for the result (beta)
  • Add EN language
  • Correct "concours not displayed" when no group is selected in admin page. Now, concours is available for all registered user (not depending on the group appartenance)
  • Add option to allow author to vote for their photos (disable check based on username=authorname)
  • Add option to allow user to change the score after a validation
  • Add to guest the possibility to vote for a concours (BETA)
  • Some correction (code and database structure)
File size: 16.1 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['guest'] = isset($_POST['guest']);
118        $concours->concours_infos['category'] = $_POST['cat_selection'];
119       
120
121
122        switch($action) 
123        {
124                case "edit" :
125                        redirect(PHPWG_ROOT_PATH.'admin.php?page=plugin&section=' . CONCOURS_DIR . '%2Fadmin%2Fadmin.php');
126                        break;
127                case "new" :
128                       
129                        $concours->save_concours();
130                        $concours->get_default_criterias();
131if ($concours->debug)   sleep(5);
132                        // Redirect to admin
133                        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);
134
135                        break;
136                case "modify" :
137                        $concours->update_concours();
138                        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);
139
140                        break;
141                case "modify_crit" :
142                        redirect(PHPWG_ROOT_PATH.'admin.php?page=plugin&section=' . CONCOURS_DIR . '%2Fadmin%2Fadmin.php');
143                        break;
144        }
145         
146               
147}               
148       
149       
150       
151switch($action) 
152{
153// Download the file
154        case "file" :
155                // TODO generate csv file
156                $file = $concours->generate_csv();
157                // Get the existing filename or the new one if doesnt exist
158                $filename = $concours->save_file($file);
159
160                redirect(PHPWG_ROOT_PATH.'admin.php?page=plugin&section=' . CONCOURS_DIR . '%2Fadmin%2Fadmin.php');
161                break;
162
163// Geneate result
164        case "result" :
165                // Generate result and save it to DB
166                $concours->create_result();
167                // Generate csv file
168                // 1. Simple  csv file
169//              $file = $concours->generate_csv();
170                // 2.  Complete csv file.
171                $file = $concours->generate_detail_csv();
172                // Save file to directory
173                $filename = $concours->save_file($file);
174               
175                redirect(PHPWG_ROOT_PATH.'admin.php?page=plugin&section=' . CONCOURS_DIR . '%2Fadmin%2Fadmin.php');
176                break;
177
178        case "del" : 
179        // Suppress concours and all parameters
180                $concours->delete_concours();
181                redirect(PHPWG_ROOT_PATH.'admin.php?page=plugin&section=' . CONCOURS_DIR . '%2Fadmin%2Fadmin.php');
182                break;
183               
184        case "new" :
185                $concours->concours_infos['groups'] = array();
186                $concours->concours_infos['category'] = '';
187                $template->assign( 'CONCOURS', array(
188                                'ID'    => $concours_id,
189//                              'BEGIN_DATE'    => date("Y-m-d H:m:s"),
190//                              'END_DATE'      => 15
191                                ));
192
193        //  Init begin and end date
194          $form['start_year']  = $form['end_year']  = date('Y');
195          $form['start_month'] = $form['end_month'] = date('n');
196          $form['start_day']   = $form['end_day']   = date('j');
197                     
198        $template->assign(
199          array(
200
201            'START_DAY_SELECTED' => @$form['start_day'],
202            'START_MONTH_SELECTED' => @$form['start_month'],
203            'START_YEAR' => @$form['start_year'],
204            'START_HOUR' => '12',
205            'START_MIN' => '00',
206           
207            'END_DAY_SELECTED' => @$form['end_day'],
208            'END_MONTH_SELECTED' => @$form['end_month'],
209            'END_YEAR'   => @$form['end_year'],
210            'END_HOUR' => '12',
211            'END_MIN' => '00',
212            )
213          );
214
215  break;
216        case "modify" :
217
218/*              $info_concours['groups']
219                                `create_date` datetime NOT NULL,
220                                `name` text NOT NULL,
221                                `descr` varchar(255) default NULL,
222                                `begin_date` datetime NOT NULL,
223                                `end_date` datetime NOT NULL,
224                                `category` smallint(5) default NULL,
225                                `groups` varchar(255) default NULL,
226*/             
227                // Format group list
228                $concours->concours_infos['groups'] = explode(',', $concours->concours_infos['groups']);
229
230       
231        $tBeginDate = explodeDateArray($concours->concours_infos['begin_date']);
232        $tEndDate = explodeDateArray($concours->concours_infos['end_date']);
233               
234                $template->assign( 'CONCOURS', array(
235                                'ID'    => $concours->concours_infos['id'],
236                                'NAME'  => $concours->concours_infos['name'],
237                                'DESCR' => $concours->concours_infos['descr'],
238                'GUEST' => ($concours->concours_infos['guest'] ? 'checked="checked"' : ''),
239//                              'BEGIN_DATE'    => $concours->concours_infos['begin_date'],
240//                              'END_DATE'      => NbJours($concours->concours_infos['begin_date'], $concours->concours_infos['end_date'])
241                                ));
242        $template->assign(
243          array(
244
245            'START_DAY_SELECTED' => @$tBeginDate[2],
246            'START_MONTH_SELECTED' => @$tBeginDate[1],
247            'START_YEAR' => @$tBeginDate[0],
248            'START_HOUR' => @$tBeginDate[3],
249            'START_MIN' => @$tBeginDate[4],
250           
251            'END_DAY_SELECTED' => @$tEndDate[2],
252            'END_MONTH_SELECTED' => @$tEndDate[1],
253            'END_YEAR'   => @$tEndDate[0],
254            'END_HOUR' => @$tEndDate[3],
255            'END_MIN' => @$tEndDate[4],
256            )
257          );
258
259                break;
260        case "modify_crit" :
261        case "edit" :
262                $concours->concours_infos['groups'] = explode(',', $concours->concours_infos['groups']);
263
264        $tBeginDate = explodeDateArray($concours->concours_infos['begin_date']);
265        $tEndDate = explodeDateArray($concours->concours_infos['end_date']);
266               
267                $template->assign( 'CONCOURS', array(
268                                'ID'    => $concours->concours_infos['id'],
269                                'NAME'  => $concours->concours_infos['name'],
270                                'DESCR' => $concours->concours_infos['descr'],
271                'GUEST' => ($concours->concours_infos['guest'] ? 'checked="checked"' : ''),
272//                              'BEGIN_DATE'    => $concours->concours_infos['begin_date'],
273//                              'END_DATE'      => NbJours($concours->concours_infos['begin_date'], $concours->concours_infos['end_date'])
274                                ));
275        $template->assign(
276          array(
277
278            'START_DAY_SELECTED' => @$tBeginDate[2],
279            'START_MONTH_SELECTED' => @$tBeginDate[1],
280            'START_YEAR' => @$tBeginDate[0],
281            'START_HOUR' => @$tBeginDate[3],
282            'START_MIN' => @$tBeginDate[4],
283           
284            'END_DAY_SELECTED' => @$tEndDate[2],
285            'END_MONTH_SELECTED' => @$tEndDate[1],
286            'END_YEAR'   => @$tEndDate[0],
287            'END_HOUR' => @$tEndDate[3],
288            'END_MIN' => @$tEndDate[4],
289            )
290          );
291               
292                $firstcriterias = $concours->get_firstlevel_criterias();
293                foreach ($firstcriterias as $criteria)
294                {
295                if ($concours->debug)                                   echo "criteriaID=".$criteria['criteria_id']."\n";
296                        // First without sub criterias
297                        if (!$concours->is_criterias_contains_sub($criteria['criteria_id'] ))
298                        {
299                                $template->append( 'concours_criteria', array(
300                                                'nosub' => true,
301                                                'level' => 1,
302                                                'id'    => $criteria['criteria_id'],                            // id du critere
303                                                'name'  => $criteria['name'],                           // id du critere
304                                                'lib'   => $criteria['descr'], //.'(min='$criteria['min_value'].';max='.$criteria['min_value'].')',                     // libelle du critrer
305                                                'min'   => $criteria['min_value'],                              // min
306                                                'max'   => $criteria['max_value'],                              // max
307                                                'pond'  => $criteria['ponderation'],                    // ponderation
308                                                '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'],
309                                                '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'] : '',
310                                                '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'],
311                                        ));
312                        }
313                        else
314                        {
315                                $template->append( 'concours_criteria', array(
316                                                'nosub' => false,
317                                                'level' => 1,
318                                                'id'    => $criteria['criteria_id'],                            // id du critere
319                                                'name'  => $criteria['name'],                           // id du critere
320                                                'lib'   => $criteria['descr'],
321                                                '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'],
322                                        ));
323                                $secondcriterias = $concours->get_subcriterias($criteria['criteria_id'] );
324                                foreach ($secondcriterias as $subcriteria)
325                                {
326                if ($concours->debug)                                                   echo "subcriteriaID=".$criteria['criteria_id']."\n";
327                                        $template->append( 'concours_criteria', array(
328                                                        'nosub' => true,
329                                                        'level' => 2,
330                                                        'id'    => $subcriteria['criteria_id'],                         // id du critere
331                                                        'name'  => $subcriteria['name'],                                // id du critere
332                                                        'lib'   => $subcriteria['descr'], //.'(min='$criteria['min_value'].';max='.$criteria['min_value'].')',                  // libelle du critrer
333                                                        'min'   => $subcriteria['min_value'],                           // min
334                                                        'max'   => $subcriteria['max_value'],                           // max
335                                                        'pond'  => $subcriteria['ponderation'],                 // ponderation
336                                                        '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'],
337                                                        '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'] : '',
338                                                ));
339                                       
340                                }
341                        }
342
343                }
344               
345                break;
346}
347       
348       
349       
350$template->assign( 'action', $action);
351$template->assign('IMG_URL', CONCOURS_IMG_PATH);
352       
353
354// Add month list to template
355$template->assign(array('month_list' => $month_list));
356
357// Add method list to
358$i=1;
359foreach ( $method_list as $order ) //on parcours le tableau
360{
361        $template->append('concours_method',
362                array(  'ID' => $i,
363                                'NAME' => $order,
364                                'SELECTED' => (isset($concours->concours_infos['method']) && $concours->concours_infos['method'] == $i ? 'selected' : '')));
365        $i++;   
366}
367
368if ($concours->is_closed($concours_id) AND !$concours->is_result_present($concours_id))
369        $template->append('result_not_generated', true);
370
371
372// Groups selection
373$groups = get_all_groups();
374if (!empty($groups))
375{
376  $template->assign('group_perm', array('GROUPSELECTION' => get_html_groups_selection($groups, 'groups', (isset($concours->concours_infos['groups']) ? $concours->concours_infos['groups'] : array()))));
377}
378
379
380// Category selection
381$query = '
382  SELECT id, name, uppercats, global_rank
383  FROM '.CATEGORIES_TABLE.';';
384
385  $result = pwg_query($query);
386  $categories = array();
387if (!empty($result))
388{
389        while ($row = mysql_fetch_assoc($result))
390                array_push($categories, $row);
391}
392usort($categories, 'global_rank_compare');
393
394if (!empty($result))
395{
396                foreach ($categories as $cat)
397                        $template->append('category_selection',
398                                array(  'ID' => $cat['id'],
399                                                'NAME' => get_cat_display_name_cache($cat['uppercats'],null,false),
400                                                'SELECTED' => ($concours->concours_infos['category'] == $cat['id'] ? 'selected' : '')
401                                        ));
402}
403
404
405
406$template->set_filenames(array('plugin_admin_content' => dirname(__FILE__) . '/template/add_concours.tpl'));
407$template->assign_var_from_handle('ADMIN_CONTENT', 'plugin_admin_content');
408
409// Explode a date format ("AAAA-MM-JJ HH:hh:ss") in array
410// Array(YYYY, MM, JJ, HH, mm, ss)
411function explodeDateArray($date) {
412
413  $tDeb = explode("-", substr($date,0,strpos($date, ' ')));
414  $tDebH = explode(":", substr($date,strpos($date, ' ')+1));
415
416  return array($tDeb[0], $tDeb[1], $tDeb[2], $tDebH[0], $tDebH[1], $tDebH[2]);
417 
418}
419
420
421// NB of days between 2 dates "AAAA-MM-JJ HH:hh:ss"
422function NbJours($debut, $fin) {
423
424  $tDeb = explode("-", substr($debut,0,strpos($debut, ' ')));
425  $tFin = explode("-", substr($fin,0,strpos($fin, ' ')));
426
427  $diff = mktime(0, 0, 0, $tFin[1], $tFin[2], $tFin[0]) - 
428          mktime(0, 0, 0, $tDeb[1], $tDeb[2], $tDeb[0]);
429 
430  return(($diff / 86400));
431
432}
433function AjoutJours($debut, $jours) {
434  $tDeb = explode("-", substr($debut,0,strpos($debut, ' ')));
435  $tDebH = explode(":", substr($debut,strpos($debut, ' ')+1));
436  $tFin = "";
437
438        $nb_ans = (int)(($jours)/365);
439        $nb_mois = (int)(( ($jours)%365) / 31);
440        $nb_jours = (int)(( ($jours)%365) % 31);               
441
442$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));
443 
444  return($tFin);
445
446}
447
448
449?>
Note: See TracBrowser for help on using the repository browser.