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

Last change on this file since 3905 was 3905, checked in by tiico, 15 years ago

Initial submit for plugin ConcoursPhoto (Possibility to add a competition on category with selected criterias and generation of the competition's result).
Functionnal version. Admin pages must be checked for informations/errors notifications

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