source: extensions/ConcoursPhoto/include/Concours.class.php @ 9082

Last change on this file since 9082 was 8965, checked in by tiico, 13 years ago
  • Correct hour/min bug when time is set to 00h00 and control coherence between end and begin dates/hours
  • Correct export to csv file (utf8decode)
File size: 59.8 KB
Line 
1<?php
2/*
3 * Plugin Name: ConcoursPhoto
4 * File :  Concours.class.php 
5 */
6 
7global $user, $conf;
8
9class Concours
10{
11        var $concours_id = null;
12        var $concours_infos = array();
13       
14/*      var $create_date = null;
15        var $name = null;
16        var $descr = null;
17        var $begin_date = null;
18        var $end_date = null;
19        var $category = null;
20        var $groups = null;
21*/     
22
23        // General configuration parameters
24        var $my_config = array();
25/*
26        active_menubar
27        nbconcours_menubar
28*/
29        var $user_groups = array();
30        var $debug = false;
31       
32        // Class constructor with concours id. Return NULL if not existing or create it
33        function Concours($concours_id = null, $force_creation = NULL)
34        {
35//          $this->get_user_groups();
36                if ($concours_id !== null)
37                {               
38                        $this->concours_id = (int)$concours_id;
39                        $this->get_concours($concours_id);
40                }
41                // Load general parameters
42                $this->load_config();
43        }
44
45       
46        // Load general configuration from config_database
47        function load_config() 
48        {
49
50                $query = '
51                  SELECT value
52                  FROM '.CONFIG_TABLE.'
53                  WHERE param = \'concoursphoto\'
54                ;';
55
56                $result = pwg_query($query);
57
58            if($result) 
59                {
60                     $row = mysql_fetch_row($result);
61                     if(is_string($row[0])) 
62                         {
63                        $this->my_config = unserialize(($row[0]));
64                     }
65            }
66                $this->load_default_config();
67        }
68       
69        // Initialize default values of params
70        private function load_default_config()
71        {
72            include CONCOURS_INC_PATH.'default_values.inc.php';
73            foreach ($concours_default_values as $key => $value) 
74                {
75                    if (!isset($this->my_config[$key]))         $this->my_config[$key] = $value;
76                }
77        }
78
79        // Save  general configuration to config_database
80        function save_config()
81        {
82                $query = '
83                  REPLACE INTO '.CONFIG_TABLE.'
84                  VALUES(
85                        \'concoursphoto\',
86                        \''.serialize($this->my_config).'\',
87                        \'Configuration Concours Photo\')
88                ;';
89
90                $result = pwg_query($query);
91
92                if($result) 
93                  return true;
94                else
95                  return false;
96        }
97       
98       
99        // Retrieve user groups
100        function get_user_groups()
101        {
102                global $user;
103if ($this->debug)
104foreach ($user as $id=>$val)
105{
106        if (is_array($val))
107                foreach ($val as $id2=>$val2)
108                        echo "user[".$id."][".$id2."]=".$val2."\n";
109        else
110                echo "user[".$id."]=".$val."\n";
111}
112
113                $query = 'SELECT group_id FROM ' . USER_GROUP_TABLE . ' WHERE user_id = ' . $user['id'] . ';';
114if ($this->debug)               echo $query."\n";
115                $result = pwg_query($query);
116                while ($row = mysql_fetch_assoc($result))
117                {
118                  array_push($this->user_groups, $row['group_id']);
119                }
120               
121if ($this->debug)
122foreach ($this->user_groups as $gr)
123        echo "Group=".$gr."\n";
124
125        }
126
127        // create a concours and store it to db.
128        // return id for concours.
129        function create_concours()
130        {}
131
132        // Get informations array for  a concours id
133        function get_concours($concours_id = null)
134        {
135                if ($concours_id!== null or $this->concours_id !== null)
136                {
137                        $query = '
138                                SELECT *
139                                FROM ' . CONCOURS_TABLE .'
140                                WHERE id =' . ($concours_id !== NULL ? $concours_id : $this->concours_id) . '
141                                LIMIT 1
142                        ';
143
144                        $result = pwg_query($query);
145                        if ($result)
146                                $this->concours_infos = mysql_fetch_assoc($result);
147                }
148
149        }
150
151        // save informations on database for a concours_id
152        function save_concours($concours_id = null)
153        {
154                if ($concours_id!== null or $this->concours_id !== null)
155                {
156                                                       
157                        $query = "INSERT INTO " . CONCOURS_TABLE . "
158                                                ( `id`,
159                                                `create_date`,
160                                                `name`,
161                                                `descr`,
162                                                `begin_date`,
163                                                `end_date`,
164                                                `category`,
165                                                `groups`,
166                                                `method`,
167                                                `guest`
168                       
169                                                )
170                                        VALUES (".($concours_id !== NULL ? $concours_id : $this->concours_id).", now(),
171                                                        \"".$this->concours_infos['name']."\", \"".$this->concours_infos['descr']."\",
172                                                        \"".$this->concours_infos['begin_date']."\", \"".$this->concours_infos['end_date']."\",
173                                                        ".$this->concours_infos['category'].", ".$this->concours_infos['groups'].",
174                                                        ".$this->concours_infos['method'].", ".($this->concours_infos['guest'] ? "TRUE" : "FALSE")."
175                                                        );";
176                        if (pwg_query($query) != null)
177                                return true;
178                        else
179                                return false;
180                }
181                else           
182                        return false;
183        }
184
185        // update informations on database for a concours_id
186        function update_concours($concours_id = null)
187        {
188                if ($concours_id!== null or $this->concours_id !== null)
189                {
190
191                        $query = "UPDATE " . CONCOURS_TABLE . "
192                                                SET
193                                                create_date = now(),
194                                                name = \"".$this->concours_infos['name']."\",
195                                                descr = \"".$this->concours_infos['descr']."\",
196                                                begin_date = \"".$this->concours_infos['begin_date']."\",
197                                                end_date = \"".$this->concours_infos['end_date']."\",
198                                                category = ".$this->concours_infos['category'].",
199                                                groups = ".$this->concours_infos['groups'].",
200                                                method = ".$this->concours_infos['method'].",
201                                                guest = ".($this->concours_infos['guest'] ? "TRUE" : "FALSE")."
202                                               
203                                                WHERE id = ".($concours_id !== NULL ? $concours_id : $this->concours_id)."
204                                                ;";
205                        pwg_query($query);
206                        if (pwg_query($query) != null)
207                                return true;
208                        else
209                                return false;
210                }
211                else           
212                        return false;
213       
214        }
215       
216        // update field on database for a concours_id
217        function update_concoursfield($field_id, $concours_id = null)
218        {
219                if ($concours_id!== null or $this->concours_id !== null)
220                {
221
222                        $query = "UPDATE " . CONCOURS_TABLE . "
223                                                SET
224                                                " . $field_id." = ". $this->concours_infos[$field_id] . "
225                                               
226                                                WHERE id = ".($concours_id !== NULL ? $concours_id : $this->concours_id)."
227                                                ;";
228                        pwg_query($query);
229                        if (pwg_query($query) != null)
230                                return true;
231                        else
232                                return false;
233                }
234                else           
235                        return false;
236       
237        }
238
239        // delete concours from db (and all sub informations such as details, vote and result
240        function delete_concours($concours_id = null)
241        {
242                if ($concours_id!== null or $this->concours_id !== null)
243                {
244               
245                        $query = '
246                                DELETE
247                                FROM ' . CONCOURS_TABLE .'
248                                WHERE id =' . ($concours_id !== null ? $concours_id : $this->concours_id ) . '
249                                ';
250                        pwg_query($query);
251                        $query = '
252                                DELETE
253                                FROM ' . CONCOURS_DETAIL_TABLE .'
254                                WHERE id_concours =' . ($concours_id !== null ? $concours_id : $this->concours_id ) . '
255                                ';
256                        pwg_query($query);
257                        $query = '
258                                DELETE
259                                FROM ' . CONCOURS_DATA_TABLE .'
260                                WHERE id_concours =' . ($concours_id !== null ? $concours_id : $this->concours_id ) . '
261                                ';
262                        pwg_query($query);
263                        $query = '
264                                DELETE
265                                FROM ' . CONCOURS_RESULT_TABLE .'
266                                WHERE id_concours =' . ($concours_id !== null ? $concours_id : $this->concours_id ) . '
267                                ';
268                        pwg_query($query);
269                }
270                else
271                        return false;
272               
273        }
274
275                       
276        // today's date is between open and close date of concours?
277        function is_active($concours_id = NULL)
278        {
279                if ($concours_id!== null or $this->concours_id !== null)
280                {
281                        $query = '
282                                SELECT id
283                                FROM ' . CONCOURS_TABLE .'
284                                WHERE id =' . ($concours_id !== NULL ? $concours_id : $this->concours_id) . '
285                                AND time_to_sec(TIMEDIFF(begin_date,now())) < 0
286                                AND time_to_sec(TIMEDIFF(now(), end_date)) < 0
287                                ';
288
289                        $result = pwg_query($query);
290if ($this->debug) echo $query."\n";
291                        if ($result != NULL)
292                                return true;
293                        else
294                                return false;
295                }
296                else
297                        return NULL;
298        }
299
300        // today's date is not between open and close date of concours?
301        function is_closed($concours_id = NULL)
302        {
303                if ($concours_id!== null or $this->concours_id !== null)
304                {
305                        $query = '
306                                SELECT id
307                                FROM ' . CONCOURS_TABLE .'
308                                WHERE id =' . ($concours_id !== NULL ? $concours_id : $this->concours_id) . '
309                                AND time_to_sec(TIMEDIFF(now(), end_date)) > 0
310                                ';
311
312                        $result = pwg_query($query);
313if ($this->debug) echo $query."\n";
314                        if ($result != NULL)
315                                return true;
316                        else
317                                return false;
318                }
319                else
320                        return NULL;
321        }
322
323
324        // Get criterias that are stored on db for default mode (concours_id = 0)
325        function get_default_criterias()
326        {
327                $criterias = $this->get_criterias_list(0);
328                $query = 'SELECT IF(MAX(id)+1 IS NULL, 1, MAX(id)+1) AS next_element_id
329                                        FROM ' . CONCOURS_DETAIL_TABLE . ' ;';
330                list($next_element_id) = mysql_fetch_array(pwg_query($query));
331
332                foreach ($criterias as $criteria)
333                {               
334if ($this->debug)                       echo "NEXT =".$next_element_id."\n";
335                        $query = 'INSERT INTO '.CONCOURS_DETAIL_TABLE.'
336                                                (id, id_concours, criteria_id, name, descr, min_value, max_value, ponderation, uppercriteria)'
337                                                .'VALUES ('.$next_element_id.', '.$this->concours_id.', '
338                                                .$criteria['criteria_id'].', "'.$criteria['name'].'", "'
339                                                .$criteria['descr'].'", '.$criteria['min_value'].', '
340                                                .$criteria['max_value'].', '.$criteria['ponderation'].', '
341                                                .($criteria['uppercriteria'] ? $criteria['uppercriteria'] : 'NULL').')
342                                                ;';
343                       
344                                $result = pwg_query($query);
345if ($this->debug)       echo $query;                   
346                        $next_element_id = $next_element_id +1;
347                }
348        }
349
350        // Get criterias from a concours
351        function get_criterias_list($concours_id = NULL)
352        {
353                $criteria_list = array();
354                if ($concours_id!== null or $this->concours_id !== null)
355                {
356                        $query = '
357                                SELECT *
358                                FROM ' . CONCOURS_DETAIL_TABLE .'
359                                WHERE id_concours =' . ($concours_id !== null ? $concours_id : $this->concours_id ) . '
360                                ORDER BY criteria_id
361                                ';
362                        $result = pwg_query($query);
363if ($this->debug) echo $query."\n";
364                        while ($row = mysql_fetch_assoc($result))
365                        {
366                                array_push($criteria_list, $row);
367                        }
368                        return $criteria_list;
369                }
370                else
371                        return $criteria_list;
372        }
373
374        // Get list of the fist level criterias
375        function get_firstlevel_criterias($concours_id = NULL)
376        {
377                $criteria_list = array();
378                if ($concours_id!== null or $this->concours_id !== null)
379                {
380                        $query = '
381                                SELECT *
382                                FROM ' . CONCOURS_DETAIL_TABLE .'
383                                WHERE id_concours =' . ($concours_id !== null ? $concours_id : $this->concours_id ) . '
384                                AND uppercriteria IS NULL
385                                ORDER BY criteria_id
386                                ';
387                        $result = pwg_query($query);
388if ($this->debug) echo $query."\n";
389                        while ($row = mysql_fetch_assoc($result))
390                        {
391if ($this->debug)                       echo "criteria_id=".$row['criteria_id']."\n";
392                                array_push($criteria_list, $row);
393                        }
394                        return $criteria_list;
395                }
396                else
397                        return $criteria_list;
398        }
399
400        // check if a criteria contains subcriterias
401        function is_criterias_contains_sub($criteria_id, $concours_id = NULL)
402        {
403                if ($concours_id!== null or $this->concours_id !== null)
404                {
405                        $query = '
406                                SELECT criteria_id
407                                FROM ' . CONCOURS_DETAIL_TABLE .'
408                                WHERE id_concours =' . ($concours_id !== null ? $concours_id : $this->concours_id ) . '
409                                AND uppercriteria = '.$criteria_id.'
410                                ';
411                        $result = pwg_query($query);
412if ($this->debug) echo $query."\n";
413                        // mini 1 line
414                        if(mysql_fetch_assoc($result))
415                                return true;
416                        else
417                                return false;
418                }
419                return NULL;
420        }
421       
422       
423        // Get list of subcriterias from a criteria_id
424        function get_subcriterias($criteria_id, $concours_id = NULL)
425        {
426                $criteria_list = array();
427                if ($concours_id!== null or $this->concours_id !== null)
428                {
429                        $query = '
430                                SELECT *
431                                FROM ' . CONCOURS_DETAIL_TABLE .'
432                                WHERE id_concours =' . ($concours_id !== null ? $concours_id : $this->concours_id ) . '
433                                AND uppercriteria = '.$criteria_id.'
434                                ORDER BY criteria_id
435                                ';
436                        $result = pwg_query($query);
437if ($this->debug) echo $query."\n";
438                        while ($row = mysql_fetch_assoc($result))
439                        {
440                                array_push($criteria_list, $row);
441                        }
442                        return $criteria_list;
443                }
444                else
445                        return $criteria_list;
446        }
447       
448        // Get a detail from a criteria
449        function get_criteria($criteria_id, $concours_id = NULL)
450        {
451                $criteria = array();
452
453                if ($concours_id!== null or $this->concours_id !== null)
454                {
455                        $query = '
456                                SELECT *
457                                FROM ' . CONCOURS_DETAIL_TABLE .'
458                                WHERE id_concours = '. ($concours_id !== null ? $concours_id : $this->concours_id ) . '
459                                AND criteria_id =' . $criteria_id . '
460                                ';
461                        $result = pwg_query($query);
462        if ($this->debug) echo $query."\n";
463            $criteria = mysql_fetch_assoc($result);
464        /*              while ($row = mysql_fetch_assoc($result))
465                        {
466                                array_push($criteria, $row);
467                        }
468*/             
469                }
470                return $criteria;
471       
472        }
473
474        // Get a detail from a criteria
475        function get_criteria_by_id($id)
476        {
477                $criteria = array();
478
479                $query = '
480                        SELECT *
481                        FROM ' . CONCOURS_DETAIL_TABLE .'
482                        WHERE id =' . $id . '
483                        ';
484                $result = pwg_query($query);
485if ($this->debug) echo $query."\n";
486$criteria = mysql_fetch_assoc($result);
487/*              while ($row = mysql_fetch_assoc($result))
488                {
489                        array_push($criteria, $row);
490                }
491*/             
492        return $criteria;
493       
494        }
495
496        // Add a criteria to a concours
497        // Datas is an array and contains all infos.
498        // Return the criteria id
499        function add_criteria($datas, $concours_id = NULL)
500        {
501                // determines the criteria_id
502                if ($concours_id!== null or $this->concours_id !== null)
503                {
504                        $query = 'SELECT IF(MAX(id)+1 IS NULL, 1, MAX(id)+1) AS next_element_id
505                                                FROM ' . CONCOURS_DETAIL_TABLE . ' ;';
506                        list($next_element_id) = mysql_fetch_array(pwg_query($query));
507                        $query = 'SELECT IF(MAX(criteria_id)+1 IS NULL, 1, MAX(criteria_id)+1) AS next_criteria_id
508                                                FROM ' . CONCOURS_DETAIL_TABLE . '
509                                          WHERE id_concours = '.($concours_id !== null ? $concours_id : $this->concours_id ) . ' ;';
510                        list($next_criteria_id) = mysql_fetch_array(pwg_query($query));
511                       
512                        $query = '
513                        INSERT INTO ' . CONCOURS_DETAIL_TABLE .'
514                                (`id`,
515                                `id_concours`,
516                                `criteria_id`,
517                                `name`,
518                                `descr`,
519                                `min_value`,
520                                `max_value`,
521                                `ponderation`,
522                                `uppercriteria`)
523                                VALUES (
524                                '.$next_element_id.', '.($concours_id !== null ? $concours_id : $this->concours_id ).',
525                                '.$next_criteria_id.', "'.$datas['name'].'", "'.$datas['descr'].'", '.$datas['min_value'].'
526                                , '.$datas['max_value'].', '.$datas['ponderation'].'
527                                , '.($datas['uppercriteria'] ? $datas['uppercriteria'] : 'NULL').'
528                                );';
529
530                        pwg_query($query);
531                        if ($this->debug) echo $query."\n";
532       
533                }
534        }
535       
536        // Update a criteria to a concours
537        // Datas is an array and contains all infos.
538        function update_criteria($datas, $concours_id = NULL)
539        {
540                // determines the criteria_id
541                if ($concours_id!== null or $this->concours_id !== null)
542                {
543                        $query = '
544                                UPDATE ' . CONCOURS_DETAIL_TABLE .'
545                                SET
546                                name = "'.$datas['name'].'",
547                                descr = "'.$datas['descr'].'",
548                                min_value = '.$datas['min_value'].',
549                                max_value = '.$datas['max_value'].',
550                                '.($datas['uppercriteria'] == false ? '' : 'uppercriteria = '.($datas['uppercriteria'] ? $datas['uppercriteria'].',' : 'NULL ,')).'
551                                ponderation = '.$datas['ponderation'].'
552                                WHERE id = '.$datas['id'].';';
553
554                        pwg_query($query);
555
556                        if ($this->debug) echo $query."\n";
557
558                }               
559        }
560       
561
562        // Delete a criteria from a concours
563        function delete_criteria($criteria_id, $concours_id = NULL)
564        {
565                if ($concours_id!== null or $this->concours_id !== null)
566                {
567               
568                        $query = '
569                                DELETE
570                                FROM ' . CONCOURS_DETAIL_TABLE .'
571                                WHERE id_concours =' . ($concours_id !== null ? $concours_id : $this->concours_id ) . '
572                                AND criteria_id = '.$criteria_id.'
573                                ';
574                        $result = pwg_query($query);
575        if ($this->debug) echo $query."\n";
576                        if($result)
577                                return true;
578                        else
579                                return false;
580                }
581                else
582                        return null;
583
584        }
585       
586        // Delete a criteria (with id) from a concours
587        function delete_criteria_by_id($id)
588        {
589       
590                $query = '
591                        DELETE
592                        FROM ' . CONCOURS_DETAIL_TABLE .'
593                        WHERE id =' . $id . '
594                        ';
595                $result = pwg_query($query);
596if ($this->debug) echo $query."\n";
597
598        }       
599
600        // check if a result is already present in the database
601        function is_result_present($concours_id = null)
602        {
603                // recover all img_id from the category
604                $query = 'SELECT DISTINCT(id_concours)'
605                .' FROM ' .CONCOURS_RESULT_TABLE
606                .' WHERE id_concours = '.($concours_id !== null ? $concours_id : $this->concours_id ).';';
607               
608                $result = pwg_query($query);
609                // For each images
610                if (mysql_fetch_assoc($result))
611                        return true;
612                else
613                        return false;
614       
615        }
616       
617        // function to return the number of votes for a concours by images
618        function nb_votes_by_img($concours_id = NULL)
619        {
620               
621                // nb of users who vote for each image (for a selected concours
622                $query = 'SELECT img_id, COUNT(DISTINCT user_id) AS NBVOTE FROM ' . CONCOURS_DATA_TABLE 
623                .' WHERE id_concours = '.($concours_id !== null ? $concours_id : $this->concours_id )
624        .' AND ipguest IS NULL'
625                .' GROUP BY img_id '
626                .';';
627                               
628                $result = pwg_query($query);
629                $nbvotes = array();
630                while ($row = mysql_fetch_assoc($result))
631                {
632                        $nbvotes[$row['img_id']] = $row['NBVOTE'];
633                }
634       
635        // Add guest infos
636        $query = 'SELECT img_id, COUNT(DISTINCT user_id, ipguest) AS NBVOTE FROM ' . CONCOURS_DATA_TABLE 
637        .' WHERE id_concours = '.($concours_id !== null ? $concours_id : $this->concours_id )
638        .' AND ipguest IS NOT NULL'
639        .' GROUP BY img_id '
640        .';';
641               
642        $result = pwg_query($query);
643    if ($this->debug)           echo "NBVOTE = ".$query."\n";
644        while ($row = mysql_fetch_assoc($result))
645            if (!isset($nbvotes[$row['img_id']]))
646                $nbvotes[$row['img_id']] = $row['NBVOTE'];
647            else
648                $nbvotes[$row['img_id']] += $row['NBVOTE'];
649       
650                return $nbvotes;
651        }
652
653        // Get All iaddr for guest who have vote (IP Stores in db) in a concours
654        function get_guest_list($concours_id = NULL)
655        {
656        $ipguest = array();
657                if ($concours_id!== null or $this->concours_id !== null)
658                {
659                        $query = '
660                                SELECT distinct(ipguest)
661                                FROM ' . CONCOURS_DATA_TABLE .'
662                                WHERE id_concours =' . ($concours_id !== null ? $concours_id : $this->concours_id ) . '
663                AND ipguest IS NOT NULL
664                                ORDER BY ipguest
665                                ';
666                        $result = pwg_query($query);
667if ($this->debug) echo $query."\n";
668                        while ($row = mysql_fetch_assoc($result))
669                        {
670                                array_push($ipguest, $row['ipguest']);
671                        }
672            if ($this->debug)
673            {
674                foreach ($ipguest as $ip)
675                    echo "IP=".$ip."\n";
676            }
677
678                        return $ipguest;
679                }
680                else
681                        return $ipguest;
682        }
683   
684       
685        // After concours is completed (closed date is passed), generate the result and store it to DB
686        function create_result($concours_id = NULL)
687        {
688        global $conf;
689                // var which contains id=img_id and val =global note
690                $global_note = array();
691                if ($concours_id!== null or $this->concours_id !== null)
692                {
693                        // only for closed concours and not already result generated
694                        if ($this->is_closed($concours_id) AND ! $this->is_result_present($concours_id))
695                        {
696                       
697                                // array with the number of vote by image for the concours. Needed for the moyenne
698                                $nbvotes = $this->nb_votes_by_img($concours_id);
699                               
700                                $user_id = array();
701                                // vars not initialized
702                                if ($this->concours_infos == array())
703                                        $this->get_concours();
704                                $category = $this->concours_infos['category'];
705
706if ($this->debug)
707        echo "CAT=".$category;
708                                // Get all user_id from a concours
709                                $query = 'SELECT DISTINCT user_id'
710                                .' FROM ' .CONCOURS_DATA_TABLE
711                                .' WHERE id_concours = '.($concours_id !== null ? $concours_id : $this->concours_id )
712                .' AND user_id <> '.$conf['guest_id']
713                                .';';
714                                $result = pwg_query($query);
715if ($this->debug)
716echo $query;
717                                while ($row = mysql_fetch_assoc($result))
718                                        array_push($user_id, $row['user_id']);
719
720                // Add guest info is present
721                $ipguest = array();
722                if ($concours_id!== null)
723                    $ipguest = $this->get_guest_list(($concours_id !== null ? $concours_id : $this->concours_id ));
724
725if ($this->debug)
726{
727        foreach ($user_id as $userid)
728                        echo "USER = ".$userid;
729}       foreach ($ipguest as $userid)
730                        echo "IPGUEST = ".$userid;
731                               
732                               
733                                // recover all img_id from the category
734                                $query = 'SELECT DISTINCT(image_id)'
735                                .' FROM ' .IMAGE_CATEGORY_TABLE
736                                .' WHERE category_id = '.$category.';';
737                               
738                                $result = pwg_query($query);
739                                // For each images
740                                while ($row = mysql_fetch_assoc($result))
741                                {
742                if ($this->debug)       echo "IMG_ID=".$row['image_id']."\n";
743                                        foreach ($user_id as $i => $userid)
744                                        {
745                                                if (!isset($global_note[$row['image_id']]))
746                                                        $global_note[$row['image_id']] = 0;
747                                                $global_note[$row['image_id']] +=  $this->get_img_globalnote_user($row['image_id'], null, $userid);                     
748                                        }
749                    // Add guest scores if present
750                                        foreach ($ipguest as $i => $ipguestt)
751                                        {
752                                                if (!isset($global_note[$row['image_id']]))
753                                                        $global_note[$row['image_id']] = 0;
754                                                $global_note[$row['image_id']] +=  $this->get_img_globalnote_user($row['image_id'], null, null, $ipguestt);                     
755                                        }
756                                }
757                                if ($this->debug)
758                                {
759                                        foreach ($global_note as $id => $val)
760                                                echo "Note img ( ".$id.") = ".$val."\n";
761                                }
762                               
763                                // update database and store result into RESULT table
764                                // note = global note
765                                $IMGmoyenne = 0;
766                                foreach ($global_note as $id => $val)
767                                // id contains the image id
768                                {
769if ($this->debug)               echo $nbvotes[$id];
770                                        $IMGmoyenne = (isset($nbvotes[$id]) && $nbvotes[$id] != 0 ? $val/$nbvotes[$id] : 0);
771                                       
772                                        $query = 'INSERT INTO  ' . CONCOURS_RESULT_TABLE .'(`id_concours`, `img_id`, `date` , `note`, `moyenne`, `nbvotant` )
773                                                        VALUES ('.($concours_id !== null ? $concours_id : $this->concours_id )
774                                                                         .', '.$id 
775                                                                         .', now() '
776                                                                         .', '.$val
777                                                                         .', '.$IMGmoyenne
778                                                                         .', '.(isset($nbvotes[$id]) ? $nbvotes[$id] : 0)
779                                                                         .');';
780                                $result = pwg_query($query);
781                                                 
782                                       
783                                }
784           
785                               
786
787                               
788                        }
789                        else
790                                return false;
791                }
792                else
793                        return false;
794        }
795       
796
797        // Check if an image's author is the same as the actual user
798        function check_img_user($img_id)
799        {
800                global $user;
801                $query = '
802                        SELECT author
803                        FROM ' . IMAGES_TABLE .'
804                        WHERE id =' . $img_id . '
805                        ';
806
807                $result = pwg_query($query);
808if ($this->debug) echo $query."\n";
809                if ($result)
810                {
811                        $row = mysql_fetch_assoc($result);
812                        $authorid = get_userid($row['author']);
813                        if ($authorid and ($authorid == $user['id']))
814                                return true;
815                        else
816                                return false;
817                }
818                return false;
819       
820        }
821       
822
823        // Add tpl to picture.php page to display concours informations and vote
824        function display_concours_to_picture()
825        {
826                // Step0 : if user = guest, check the concours param and store ip address to user name.
827                // Step1 : concours is defined to this category AND concours is open AND user is authorized to access to this category (thru group)
828                // Step1 bis : dont show concours if img_author = user_id
829                // Step 2 : Recover stored informations in db for this user
830                // Step 3 : Complete tpl information
831                // Step 4 : concat tpl
832               
833                global $page, $user, $template, $conf;
834
835                // Get user group.
836                $this->get_user_groups();
837
838                $concours = array();
839
840        // STEP 0
841if ($this->debug)       echo "STEP0\n";
842
843    $user['ipguest'] = null;
844
845    echo "user id=".$user['id'];
846    // Check if the user is a guest only
847    if (is_a_guest())
848    {
849        if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
850            $IP = $_SERVER['HTTP_X_FORWARDED_FOR']; 
851        elseif(isset($_SERVER['HTTP_CLIENT_IP']))   
852            $IP = $_SERVER['HTTP_CLIENT_IP'];   
853        else
854            $IP = $_SERVER['REMOTE_ADDR']; 
855             
856        // store ip
857        $user['ipguest'] = $IP;
858if ($this->debug)           
859    echo "user ip guest=".$user['ipguest'];
860
861}
862
863
864               
865// DEBUG
866if ($this->debug)
867{
868    foreach ($user as $id=>$val)
869    {
870        if (is_array($val))
871            foreach ($val as $id2=>$val2)
872                echo "user[".$id."][".$id2."]=".$val2."\n";
873        else
874            echo "user[".$id."]=".$val."\n";
875    }
876}
877
878//  END DEBUG
879       
880       
881// DEBUG
882if ($this->debug)
883foreach ($page as $id=>$val)
884{
885        if (is_array($val))
886                foreach ($val as $id2=>$val2)
887                        echo "page[".$id."][".$id2."]=".$val2."\n";
888        else
889                echo "page[".$id."]=".$val."\n";
890}
891//  END DEBUG
892
893        // disable author name  on image which are present in a concours.
894        // check the categories where the current image is present and disable the author name
895                if (isset($this->my_config['mask_author']) && $this->my_config['mask_author'] == true)
896                {
897                        // Get all categories where the current image is present
898                        $query = '
899                        SELECT category_id,uppercats,commentable,global_rank
900                          FROM '.IMAGE_CATEGORY_TABLE.'
901                                INNER JOIN '.CATEGORIES_TABLE.' ON category_id = id
902                          WHERE image_id = '.$page['image_id'].'
903                          ;';
904//                     echo $query;
905                        $result = pwg_query($query);
906                        $related_categories = array();
907                        while ($row = mysql_fetch_array($result))
908                        {
909                          array_push($related_categories, $row['category_id']);
910                        }
911                        //
912            //echo related_categories;
913            if (count($related_categories))
914            {
915                // Request for all concours prepared & actived on each categories
916                $query = '
917                    SELECT *
918                    FROM ' . CONCOURS_TABLE .'
919                    WHERE category IN ('.implode(',', $related_categories).')
920                    AND time_to_sec(TIMEDIFF(now(), end_date)) < 0
921                ';
922        //                echo $query;
923                $result = pwg_query($query);
924                // If one or more concours are found, the author name is masked
925                if ($result && mysql_fetch_assoc($result))
926                {
927                    $template->assign('INFO_AUTHOR',l10n('concours_img_author'));
928                }
929            }
930                }
931
932        // End disable author name
933
934
935   
936                if (($page['section']) == 'categories' AND !empty($page['category']))
937                {
938if ($this->debug)       echo "STEP1\n";
939                        //------------
940                        // Step 1
941
942/*           
943            if ($this->my_config['mask_author'] && $this->my_config['mask_author'] == true)
944            {
945                // Request for all concours prepared & actived
946                $query = '
947                    SELECT *
948                    FROM ' . CONCOURS_TABLE .'
949                    WHERE category =' . $page['category']['id'] . '
950                    AND time_to_sec(TIMEDIFF(now(), end_date)) < 0
951                                ';
952//                echo $query;
953                $result = pwg_query($query);
954                if ($result && mysql_fetch_assoc($result))
955                    $template->assign('INFO_AUTHOR',l10n('concours_img_author'));
956            }
957*/
958           
959                        $query = '
960                                SELECT *
961                                FROM ' . CONCOURS_TABLE .'
962                                WHERE category =' . $page['category']['id'] . '
963                                AND time_to_sec(TIMEDIFF(begin_date,now())) < 0
964                                AND time_to_sec(TIMEDIFF(now(), end_date)) < 0
965                                ';
966
967                        $result = pwg_query($query);
968if ($this->debug) echo $query."\n";
969                        while ($row = mysql_fetch_assoc($result))
970                        {
971                                if (!empty($row['groups']))
972                                {
973if ($this->debug)       echo "GROUPS=".$row['groups'];                         
974                                        $authorized_groups = explode(',', $row['groups']);
975                                        if (array_intersect($this->user_groups, $authorized_groups) == array()) 
976                                        {
977if ($this->debug)       echo "ERROR GROUPS";
978                                                continue;
979                                        }
980                    // If no group is parameter for that concours  ==> available for all registered users
981                                        $concours = $row;
982                                }
983                else
984                                        $concours = $row;
985
986
987                        }
988
989if ($this->debug)       echo "STEP1 bis\n";
990                        //------------
991                        // Step 1 bis
992                        // Actual user is  the author of the picture ==>end
993                        if ( !$this->my_config['author_vote_available']
994                AND $this->check_img_user($page['current_item']))
995                                return;
996                       
997
998if ($this->debug)       echo "STEP2\n";
999                        //------------
1000                        // Step 2
1001                        if ($concours != array())
1002                        {
1003                                // If user validate the notation
1004                                if (isset($_POST['concours_submit']))
1005                                {
1006                                        $user_note = "";
1007                if ($this->debug)                       echo "SUBMIT";
1008                                // concat all the notes to save on db
1009                               
1010                                        $firstcriterias = $this->get_firstlevel_criterias($concours['id']);
1011                                        foreach ($firstcriterias as $criteria)
1012                                        {
1013                                               
1014                                                // First without sub criterias
1015                                                if (!$this->is_criterias_contains_sub($criteria['criteria_id'],$concours['id'] ))
1016                                                {
1017                                                        // Check value
1018                                                        $value = str_replace(",",".",$_POST[$criteria['criteria_id']]);
1019                                                        $value = str_replace(" ","",$value);
1020                                                        $value = floatval($value);
1021                                                        if ($value < floatval($criteria['min_value']))
1022                                                                $value = floatval($criteria['min_value']);
1023                                                        if ($value > floatval($criteria['max_value']))
1024                                                                $value = floatval($criteria['max_value']);
1025
1026                                                        $user_note .= (strlen($user_note) != 0 ? ";" : "").$criteria['criteria_id']."=".$value;
1027                                                }
1028                                                else
1029                                                {
1030                                                        $secondcriterias = $this->get_subcriterias($criteria['criteria_id'], $concours['id'] );
1031                                                        foreach ($secondcriterias as $subcriteria)
1032                                                        {
1033                                                                // Check value
1034                                                                $value = str_replace(",",".",$_POST[$subcriteria['criteria_id']]);
1035                                                                $value = str_replace(" ","",$value);
1036                                                                $value = floatval($value);
1037                                                                if ($value < floatval($subcriteria['min_value']))
1038                                                                        $value = floatval($subcriteria['min_value']);
1039                                                                if ($value > floatval($subcriteria['max_value']))
1040                                                                        $value = floatval($subcriteria['max_value']);
1041                                                       
1042                                                                $user_note .= (strlen($user_note) != 0 ? ";" : "").$subcriteria['criteria_id']."=".$value;
1043                                                        }
1044                                                }
1045                                        }
1046                               
1047//                              $datas = "0=0";
1048                                        $this->store_img_note_user($page['current_item'], $user_note, $concours['id'], $user['ipguest']);
1049if ($this->debug)       echo "COMMENT=".$_POST['CONCOURS_COMMENT'];
1050                                        $this->store_img_comment_user($page['current_item'], $_POST['concours_comment'], $concours['id'], $user['ipguest']);
1051                                }
1052
1053                                // If user want to erase notes
1054                                if (isset($_POST['concours_raz']))
1055                                {
1056if ($this->debug)                       echo "RAZ";                             
1057                                        $this->RAZ_img_note_user($page['current_item'], $concours['id'], $user['ipguest']);
1058                                }
1059                                else
1060                                {
1061                                        // Recover previous note in DB (if exists)
1062                                        $user_notes = $this->get_img_note_user($page['current_item'], $concours['id'], $user['id'], $user['ipguest']);
1063                                }
1064                               
1065                                // Comment is not RAZ, always restore                           
1066                                $comment = $this->get_img_comment_user($page['current_item'], $concours['id'], $user['id'], $user['ipguest']);
1067
1068if ($this->debug)       echo "STEP3\n";
1069                                //------------
1070                                // Step 3
1071                                // Recover all 1st level criterias
1072                                $firstcriterias = $this->get_firstlevel_criterias($concours['id']);
1073                                foreach ($firstcriterias as $criteria)
1074                                {
1075if ($this->debug)                                       echo "criteriaID=".$criteria['criteria_id']."\n";
1076                                        // First without sub criterias
1077                                        if (!$this->is_criterias_contains_sub($criteria['criteria_id'],$concours['id'] ))
1078                                        {
1079                                                $template->append( 'concours_criteria', array(
1080                                                                'nosub' => true,
1081                                                                'level' => 1,
1082                                                                'id'    => $criteria['criteria_id'],                            // id du critere
1083                                                                'name'  => $criteria['name'],                           // id du critere
1084                                                                'lib'   => $criteria['descr'], //.'(min='$criteria['min_value'].';max='.$criteria['min_value'].')',                     // libelle du critrer
1085                                                                'val'   => (isset($user_notes[$criteria['criteria_id']])?$user_notes[$criteria['criteria_id']] : $criteria['min_value']),               //  valeur du critere
1086                                                                'min'   => $criteria['min_value'],                              // min
1087                                                                'max'   => $criteria['max_value']                               // max
1088                                                        ));
1089                                        }
1090                                        else
1091                                        {
1092                                                $template->append( 'concours_criteria', array(
1093                                                                'nosub' => false,
1094                                                                'level' => 1,
1095                                                                'id'    => $criteria['criteria_id'],                            // id du critere
1096                                                                'name'  => $criteria['name'],                           // id du critere
1097                                                                'lib'   => $criteria['descr']
1098                                                        ));
1099                                                $secondcriterias = $this->get_subcriterias($criteria['criteria_id'], $concours['id'] );
1100                                                foreach ($secondcriterias as $subcriteria)
1101                                                {
1102if ($this->debug)                                                       echo "subcriteriaID=".$criteria['criteria_id']."\n";
1103                                                        $template->append( 'concours_criteria', array(
1104                                                                        'nosub' => true,
1105                                                                        'level' => 2,
1106                                                                        'id'    => $subcriteria['criteria_id'],                         // id du critere
1107                                                                        'name'  => $subcriteria['name'],                                // id du critere
1108                                                                        'lib'   => $subcriteria['descr'], //.'(min='$criteria['min_value'].';max='.$criteria['min_value'].')',                  // libelle du critrer
1109                                                                        'val'   => (isset($user_notes[$subcriteria['criteria_id']])?$user_notes[$subcriteria['criteria_id']] : $subcriteria['min_value']),
1110                                                                        'min'   => $subcriteria['min_value'],                           // min
1111                                                                        'max'   => $subcriteria['max_value']                            // max
1112                                                                ));
1113                                                       
1114                                                }
1115                                        }
1116
1117                                }
1118                                // Add the comment
1119                                $template->assign( 'CONCOURS_COMMENT', $comment);
1120
1121                                // if a user has already vote for this photo, check if the score change is allowed
1122
1123if ($this->debug)           echo "change=".($this->my_config['concours_change_score'] ? "OK" : "KO");
1124                if ($user_notes == array() OR $this->my_config['concours_change_score'])  // Allow user to change his vote after a validation
1125                    $template->assign( 'CONCOURS_CHANGE_SCORE', true);
1126                else
1127                    $template->assign( 'CONCOURS_CHANGE_SCORE', false);
1128               
1129                               
1130                                // Add concours informations on template
1131                                $template->assign( 'concours_infos', array(
1132                                                        'name'  => $concours['name'],
1133                                                        'descr' => $concours['descr'],
1134                            'note'  => $this->get_img_globalnote_user($page['current_item'], $concours['id'], null, $user['ipguest'])
1135                                                                ));
1136                               
1137                       
1138                                $template->set_filenames(array('concours' =>  CONCOURS_ROOT.'/template/concours.tpl'));
1139//                              $template->concat('PLUGIN_PICTURE_AFTER', $template->parse('concours', true));
1140                                $template->concat('COMMENT_IMG', $template->parse('concours', true));
1141
1142                                //
1143                                $template->assign('INFO_AUTHOR',l10n('concours_img_author'));
1144                        }
1145                }
1146        }
1147
1148        // RAZ notation from user to db
1149        // fill criterias notes to 0 in DB
1150        // return false if error
1151        function RAZ_img_note_user($img_id, $concours_id = NULL, $ipguest = null)
1152        {
1153                $user_note = "";
1154                if ($concours_id === null)
1155                        if ($this->concours_id !== null)
1156                                $concours_id = $this->concours_id;
1157                        else
1158                                return false;
1159                               
1160                $firstcriterias = $this->get_firstlevel_criterias($concours_id);
1161                foreach ($firstcriterias as $criteria)
1162                {
1163if ($this->debug)                                       echo "ID=".$criteria['criteria_id']."\n";
1164                        // First without sub criterias
1165                        if (!$this->is_criterias_contains_sub($criteria['criteria_id'],$concours_id ))
1166                        {
1167                                $user_note .= (strlen($user_note) != 0 ? ";" : "").$criteria['criteria_id']."=".$criteria['min_value'];
1168                        }
1169                        else
1170                        {
1171                                $secondcriterias = $this->get_subcriterias($criteria['criteria_id'], $concours_id );
1172                                foreach ($secondcriterias as $subcriteria)
1173                                {
1174if ($this->debug)                                                       echo "ID=".$criteria['criteria_id']."\n";
1175                                        $user_note .= (strlen($user_note) != 0 ? ";" : "").$subcriteria['criteria_id']."=".$subcriteria['min_value'];
1176                                }
1177                        }
1178                }
1179if ($this->debug)       echo "RAZ=>".$user_note."\n";
1180                if (strlen($user_note) != 0)
1181                {
1182                        $this->store_img_note_user($img_id, $user_note, $concours_id, $ipguest);
1183                        return true;
1184                }
1185                else
1186                        return false;
1187                               
1188
1189        }
1190
1191        // Store notation from user to db
1192        // save with format "criteria_id=note;criteria_id=note..." for data     
1193        function store_img_note_user($img_id, $datas, $concours_id = NULL, $ipguest = null)
1194        {
1195                global $user;
1196                if ($this->get_img_note_user( $img_id, $concours_id, $user['id'], $ipguest) == array() )
1197                {
1198                        $query = 'SELECT IF(MAX(id)+1 IS NULL, 1, MAX(id)+1) AS next_element_id  FROM ' . CONCOURS_DATA_TABLE . ' ;';
1199                        list($next_element_id) = mysql_fetch_array(pwg_query($query));
1200if ($this->debug)       echo "Next_element=".$next_element_id."\n";
1201                        $query = '
1202                        INSERT INTO ' . CONCOURS_DATA_TABLE .'
1203                                (`id`,
1204                                `id_concours` ,
1205                                `user_id` ,
1206                                `create_date` ,
1207                                `img_id` ,
1208                                `datas`'.
1209                ($ipguest ? ',`ipguest` ' : '')
1210
1211                .')
1212                        VALUES ( '.$next_element_id.','
1213                        .($concours_id !== null ? $concours_id : $this->concours_id ) .'
1214                        , '. $user['id'] .', now(), '.$img_id.', "'.$datas.'"'
1215            .($ipguest ? ',"'.$user['ipguest'].'"' : '')
1216            .');';
1217                }
1218                else
1219                {
1220                        $query = '
1221                        UPDATE ' . CONCOURS_DATA_TABLE .'
1222                        SET datas = "'.$datas.'", create_date = now()
1223                        WHERE id_concours = '.($concours_id !== null ? $concours_id : $this->concours_id ).'
1224                        AND user_id = '.$user['id'].'
1225                        AND img_id = '.$img_id.
1226            ($ipguest ? ' AND ipguest = "'.$ipguest.'"' : '')           
1227            .';';
1228                }
1229if ($this->debug)                       echo $query."\n";
1230                        pwg_query($query);
1231       
1232        }
1233       
1234        // get notation's user from db
1235        // Return an array with :
1236        // Criteria_id ==> value
1237        // Note : criterias with subcriterias are not saved and not restored. They are calculated for global result
1238        function get_img_note_user($img_id, $concours_id = NULL, $user_id = null, $ipguest = null)
1239        {
1240                global $user;
1241                $img_note = array();
1242                if ($concours_id!== null or $this->concours_id !== null)
1243                {
1244                        $query = '
1245                        SELECT datas
1246                        FROM ' . CONCOURS_DATA_TABLE .'
1247                        WHERE id_concours =' . ($concours_id !== NULL ? $concours_id : $this->concours_id) . '
1248                        AND user_id = '. ($user_id !== null ? $user_id : $user['id']).'
1249                        AND img_id = '. $img_id .
1250            ($ipguest ? ' AND ipguest = "'.$ipguest.'"' : '')
1251                        .';';
1252if ($this->debug)                       echo $query."\n";
1253                        $result = pwg_query($query);
1254                       
1255                        while ($row = mysql_fetch_assoc($result))
1256                        {
1257if ($this->debug)                               echo "row[data]=".$row['datas']."\n";
1258                                $datas = explode(";",$row['datas']);
1259                                foreach ($datas as $val)
1260                                {
1261                                        if (strpos($val, '=') !== FALSE)
1262                                                $img_note[substr($val, 0, strpos($val, '='))]=substr($val, strpos($val, '=')+1);
1263                                }
1264                        }
1265// DEBUG
1266if ($this->debug)
1267foreach ($img_note as $id=>$val)
1268{
1269        if (is_array($val))
1270                foreach ($val as $id2=>$val2)
1271                        echo "img_note[".$id."][".$id2."]=".$val2."\n";
1272        else
1273                echo "img_note[".$id."]=".$val."\n";
1274}
1275//  END DEBUG
1276                       
1277                        return $img_note;
1278                }
1279                else
1280                        return array();
1281               
1282               
1283        }
1284
1285       
1286        // get notation's user from db
1287        // Return the global note for a picture id from a user
1288        function get_img_globalnote_user($img_id, $concours_id = NULL, $user_id = null, $ipguest = null)
1289        {
1290                global $user;
1291                $img_note = array();
1292                $global_user_note = 0;
1293                if ($concours_id!== null or $this->concours_id !== null)
1294                {
1295                        $query = '
1296                        SELECT datas
1297                        FROM ' . CONCOURS_DATA_TABLE .'
1298                        WHERE id_concours =' . ($concours_id !== NULL ? $concours_id : $this->concours_id) . '
1299                        AND user_id = '. ($user_id !== null ? $user_id : $user['id']).'
1300                        AND img_id = '. $img_id .
1301            ($ipguest ? ' AND ipguest = "'.$ipguest.'"' : '')
1302                        .';';
1303                        $result = pwg_query($query);
1304                       
1305                        while ($row = mysql_fetch_assoc($result))
1306                        {
1307                                $datas = explode(";",$row['datas']);
1308                                foreach ($datas as $val)
1309                                {
1310                                        if (strpos($val, '=') !== FALSE)
1311                                                $img_note[substr($val, 0, strpos($val, '='))]=substr($val, strpos($val, '=')+1);
1312                                }
1313                        }
1314                       
1315                        $firstcriterias = $this->get_firstlevel_criterias($concours_id);
1316                        foreach ($firstcriterias as $criteria)
1317                        {
1318if ($this->debug)                                       echo "criteriaID=".$criteria['criteria_id']."\n";
1319                                // First without sub criterias
1320                                if (!$this->is_criterias_contains_sub($criteria['criteria_id'],$concours_id ))
1321                                {
1322                                        if (isset($img_note[$criteria['criteria_id']]))
1323                                                $global_user_note += (int)$criteria['ponderation'] * (float)$img_note[$criteria['criteria_id']];
1324                                }
1325                                else
1326                                {
1327
1328                                        $secondcriterias = $this->get_subcriterias($criteria['criteria_id'], $concours_id );
1329                                        foreach ($secondcriterias as $subcriteria)
1330                                        {
1331if ($this->debug)                                                       echo "subcriteriaID=".$subcriteria['criteria_id']."\n";
1332                                                if (isset($img_note[$subcriteria['criteria_id']]))
1333                                                $global_user_note += (int)$subcriteria['ponderation'] * (float)$img_note[$subcriteria['criteria_id']];
1334                                        }
1335                                }
1336
1337                        }
1338                       
1339                        return $global_user_note;
1340                }
1341                else
1342                        return array();
1343               
1344               
1345        }
1346
1347        // Store comment from user to db
1348        function store_img_comment_user($img_id, $datas, $concours_id = NULL, $ipguest = null)
1349        {
1350                global $user;
1351                if (($comment = $this->get_img_note_user( $img_id, $concours_id, null, $ipguest)) == false)
1352                {
1353                        $query = 'SELECT IF(MAX(id)+1 IS NULL, 1, MAX(id)+1) AS next_element_id  FROM ' . CONCOURS_DATA_TABLE . ' ;';
1354                        list($next_element_id) = mysql_fetch_array(pwg_query($query));
1355if ($this->debug)       echo "Next_element=".$next_element_id."\n";
1356                        $query = '
1357                        INSERT INTO ' . CONCOURS_DATA_TABLE .'
1358                                (`id`,
1359                                `id_concours` ,
1360                                `user_id` ,
1361                                `create_date` ,
1362                                `img_id` ,
1363                                `comment`'
1364                .($ipguest ? ' `ipguest`' : '').
1365                ')
1366                        VALUES ( '.$next_element_id.','
1367                        .($concours_id !== null ? $concours_id : $this->concours_id ) .'
1368                        , '. $user['id'] .', now(), '.$img_id.', "'.$datas.'");';
1369                }
1370                else
1371                {
1372                        $query = '
1373                        UPDATE ' . CONCOURS_DATA_TABLE .'
1374                        SET comment = "'.$datas.'", create_date = now()
1375                        WHERE id_concours = '.($concours_id !== null ? $concours_id : $this->concours_id ).'
1376                        AND user_id = '.$user['id'].'
1377                        AND img_id = '.$img_id.
1378            ($ipguest ? ' AND ipguest = "'.$ipguest.'"' : '')
1379            .';';
1380                }
1381if ($this->debug)                       echo $query."\n";
1382                        pwg_query($query);
1383       
1384        }
1385       
1386       
1387        // Get comment on an image for a user
1388        function get_img_comment_user($img_id, $concours_id = NULL, $user_id = null, $ipguest = null)
1389        {
1390                global $user;
1391                $datas = false;
1392                if ($concours_id!== null or $this->concours_id !== null)
1393                {
1394                        $query = '
1395                        SELECT comment
1396                        FROM ' . CONCOURS_DATA_TABLE .'
1397                        WHERE id_concours =' . ($concours_id !== NULL ? $concours_id : $this->concours_id) . '
1398                        AND user_id = '. ($user_id !== null ? $user_id : $user['id']).'
1399                        AND img_id = '. $img_id .
1400            ($ipguest ? ' AND ipguest = "'.$ipguest.'"' : '')
1401                        .';';
1402if ($this->debug)                       echo $query."\n";
1403                        $result = pwg_query($query);
1404                       
1405                        while ($row = mysql_fetch_assoc($result))
1406                        {
1407if ($this->debug)                               echo "row[comment]=".$row['comment']."\n";
1408                                $datas = $row['comment'];
1409                        }
1410                }
1411                return $datas;
1412        }
1413       
1414       
1415        // Generate csv file for a closed concours with result generated
1416        function generate_csv($concours_id = NULL)
1417        {
1418        global $conf;
1419                $file = "rang, id_concours,method, img_id, img_name, img_file, date, note, moyenne, nbvotant, datas\r\n";
1420
1421                if (!(isset($this->concours_infos['method'])))
1422                        $this->concours_infos['method'] = 1;
1423                       
1424                // recover all img_id from the category
1425                $query = 'SELECT id_concours,method, img_id, IMG.name, IMG.file, date, note, moyenne, nbvotant, datas'
1426                .' FROM ' .CONCOURS_RESULT_TABLE
1427                .' INNER JOIN ' . CONCOURS_TABLE.' AS CONC on CONC.id = id_concours'
1428                .' INNER JOIN ' . IMAGES_TABLE.' AS IMG on IMG.id = img_id'
1429                .' WHERE id_concours = '.($concours_id !== null ? $concours_id : $this->concours_id );
1430               
1431                if ($this->concours_infos['method'] == 1)       // total
1432                        $query .= ' ORDER BY note DESC';
1433                elseif ($this->concours_infos['method'] == 2)   // moyenne
1434                        $query .= ' ORDER BY moyenne DESC';
1435               
1436                $query .=';';
1437               
1438                $result = pwg_query($query);
1439                // For each images
1440                $rang = 1;
1441                while ($row = mysql_fetch_assoc($result))
1442                {
1443                        $file .= ($row['nbvotant'] != 0 ? $rang : 'N/A').', '
1444                                        .$row['id_concours'].', '
1445                                        .$row['method'].', '
1446                                        .$row['img_id'].', '
1447                                        .$row['name'].', '
1448                                        .$row['file'].', '
1449                                        .$row['date'].', '
1450                                        .$row['note'].', '
1451                                        .$row['moyenne'].', '
1452                                        .$row['nbvotant'].', '
1453                                        .($row['datas'] != null ? $row['datas'] : '')
1454                                        ."\r\n";
1455                        $rang ++;
1456                }
1457                               
1458                return $file;
1459       
1460               
1461        }
1462
1463        // Generate csv file for a closed concours with result generated and all users informations
1464        function generate_detail_csv($concours_id = NULL)
1465        {
1466        global $conf;
1467                if ($concours_id === null)
1468                        $concours_id = $this->concours_id;
1469                // Prepare the list of criteria
1470                $criteria_list = "";
1471                $firstcriterias = $this->get_firstlevel_criterias($concours_id);
1472                $ident1 = 1;
1473                foreach ($firstcriterias as $criteria)
1474                {
1475                        // format (id:name)
1476                        $criteria_list .= (strlen($criteria_list) ? "," : "")
1477                                                                .$ident1.":".$criteria['name']
1478                                                                ."(id=".$criteria['criteria_id'].")";
1479                        // First wit sub criterias
1480                        if ($this->is_criterias_contains_sub($criteria['criteria_id'],$concours_id ))
1481                        {
1482                                $ident2 = 1;
1483                                $secondcriterias = $this->get_subcriterias($criteria['criteria_id'], $concours_id );
1484                                foreach ($secondcriterias as $subcriteria)
1485                                {
1486                                        // format (id:name)
1487                                        $criteria_list .= (strlen($criteria_list) ? "," : "")
1488                                                                          .$ident1.".".$ident2
1489                                                                          .":".$subcriteria['name']."(id=".$subcriteria['criteria_id'].")";
1490                                        $ident2 ++;
1491                                }
1492                        }
1493                        $ident1++;
1494                }
1495if ($this->debug)       echo "CRITERIA_LIST=".$criteria_list."\n";     
1496                $user_list = array();
1497                $users_criteria = "";
1498       
1499       
1500                // Get all the users who have notes for the concours
1501                $query = 'SELECT distinct(user_id), USER.username'
1502                .' FROM ' .CONCOURS_DATA_TABLE
1503                .' INNER JOIN ' . USERS_TABLE.' AS USER on USER.id = user_id'
1504                .' WHERE id_concours = '.($concours_id !== null ? $concours_id : $this->concours_id )
1505        // Dont take the guest informations because
1506        .' AND user_id <> '.$conf['guest_id']
1507        .' ORDER BY username ASC'
1508                .';';
1509                $result = pwg_query($query);
1510                // For each user
1511                while ($row = mysql_fetch_assoc($result))
1512                {
1513                        array_push($user_list, $row);
1514                        $users_criteria .= (strlen($users_criteria) ? "," : "")."user, user_global_note, comment, ".$criteria_list;
1515                       
1516                }
1517       
1518        $ipguest = array();
1519        // Get guest info (if available)
1520        if ($this->concours_infos['guest'])
1521        {
1522            $ipguest = $this->get_guest_list();
1523            // For each guest
1524            foreach ( $ipguest as $i => $userid ) //on parcours le tableau
1525            {
1526                $users_criteria .= (strlen($users_criteria) ? "," : "")."user, user_global_note, comment, ".$criteria_list;               
1527            }       
1528        }
1529
1530if ($this->debug)       echo "users_criteria=".$users_criteria."\n";   
1531               
1532                // All informations in csv format
1533                $file = "rang, id_concours, method, nom_concours, date_debut, date_fin, date_export, img_id, img_name, img_file, img_author, note, moyenne, nbvotant, datas,"
1534                .$users_criteria 
1535                ."\r\n";
1536
1537                // nb of users who vote for each image
1538
1539        // NOT NEEDED, INFO STORE IN DATABASE 'RESULT'
1540                $nbvotes = $this->nb_votes_by_img($concours_id);
1541
1542               
1543                // recover all img_id from the category
1544                if (!(isset($this->concours_infos['method'])))
1545                        $this->concours_infos['method'] = 1;
1546                $query = 'SELECT id_concours, method, img_id, IMG.name, IMG.file, IMG.author, date, note, moyenne, nbvotant, datas, comment'
1547                .' FROM ' .CONCOURS_RESULT_TABLE
1548                .' INNER JOIN ' . CONCOURS_TABLE.' AS CONC on CONC.id = id_concours'
1549                .' INNER JOIN ' . IMAGES_TABLE.' AS IMG on IMG.id = img_id'
1550                .' WHERE id_concours = '.($concours_id !== null ? $concours_id : $this->concours_id );
1551               
1552                if ($this->concours_infos['method'] == 1)       // total
1553                        $query .= ' ORDER BY note DESC';
1554                elseif ($this->concours_infos['method'] == 2)   // moyenne
1555                        $query .= ' ORDER BY moyenne DESC';
1556               
1557                $query .=';';
1558               
1559if ($this->debug)               echo $query;
1560                $result = pwg_query($query);
1561                // For each images
1562                $rang = 1;
1563        $previousNote = $previousMoy = 0;
1564
1565                while ($row = mysql_fetch_assoc($result))
1566                {
1567            // Check and verify for exaequo
1568            if ($this->my_config['check_exaequo'])
1569            {
1570                if ( ($this->concours_infos['method'] == 1      // total
1571                       AND ($row['note'] == $previousNote))
1572                     OR  ($this->concours_infos['method'] == 2  // moyenne
1573                          AND ($row['moyenne'] == $previousMoy)))
1574                {
1575                    $rang --;
1576                   
1577                }
1578            }
1579           
1580                        $file .= ($row['nbvotant'] != 0 ? $rang : 'N/A').', '
1581                                        .$row['id_concours'].', '
1582                                        .$row['method'].', '
1583                                        .str_replace(",", "",$this->concours_infos['name']).', '
1584                                        .$this->concours_infos['begin_date'].', '
1585                                        .$this->concours_infos['end_date'].', '
1586                                        .$row['date'].', '
1587
1588                                        .$row['img_id'].', '
1589                                        .str_replace(",", "",$row['name']).', '
1590                                        .$row['file'].', '
1591                                        .$row['author'].', '
1592                                        .$row['note'].', '
1593                                        .$row['moyenne'].', '
1594                                        .$row['nbvotant'].', '
1595//                                      .(isset($nbvotes[$row['img_id']]) ? $nbvotes[$row['img_id']] : 0).', '
1596                                        .($row['datas'] != null ? $row['datas'] : '')
1597                                        ;
1598                        foreach ($user_list as $uuser)
1599                        {
1600
1601                                $comment = $this->get_img_comment_user($row['img_id'], $concours_id, $uuser['user_id']);
1602                       
1603                                $user_note = $this->get_img_note_user($row['img_id'], $concours_id, $uuser['user_id']);
1604                               
1605                                $file .= ', '.$uuser['username'].', '.$this->get_img_globalnote_user($row['img_id'], $concours_id, $uuser['user_id'])
1606//                                              .', '.($row['comment'] != null ? str_replace(",", "",$row['comment']) : '')
1607                                                .', '.($comment != false ? str_replace(array(",","\r\n", "\n", "\r"), " ",$comment) : '')
1608                                                .', '
1609                                                ;
1610
1611                                $user_note_by_crit = "";
1612                                foreach ($firstcriterias as $criteria)
1613                                {
1614                                        // First without sub criterias
1615                                        if (!$this->is_criterias_contains_sub($criteria['criteria_id'],$concours_id ))
1616                                        {
1617                                                $user_note_by_crit .= (strlen($user_note_by_crit) ? "," : "").(isset($user_note[$criteria['criteria_id']]) ? $user_note[$criteria['criteria_id']] : ' ');
1618                                        }
1619                                        else
1620                                        {
1621                                                $user_note_by_subcrit = "";
1622                                                $subcrit_note = 0;
1623                                                $user_has_vote = false;
1624                                                $secondcriterias = $this->get_subcriterias($criteria['criteria_id'], $concours_id );
1625                                                foreach ($secondcriterias as $subcriteria)
1626                                                {
1627                                                        if (isset($user_note[$subcriteria['criteria_id']]))             $user_has_vote = true;
1628                                                        $user_note_by_subcrit .= (strlen($user_note_by_subcrit) ? "," : "").(isset($user_note[$subcriteria['criteria_id']]) ? $user_note[$subcriteria['criteria_id']] : ' ');
1629                                                        $subcrit_note += (int)$subcriteria['ponderation'] * (float)(isset($user_note[$subcriteria['criteria_id']]) ? $user_note[$subcriteria['criteria_id']] : 0);
1630
1631                                                }
1632                                                $user_note_by_crit .= (strlen($user_note_by_crit) ? "," : "").($user_has_vote ? $subcrit_note : ' ').",".$user_note_by_subcrit;
1633                                        }
1634                                }
1635                                $file .= $user_note_by_crit;
1636
1637                        }
1638
1639            // Add guest infos (if present)
1640                        foreach ($ipguest as $ipguestt)
1641                        {
1642//                echo "IP=".$ipguestt."\n";
1643                                $comment = $this->get_img_comment_user($row['img_id'], $concours_id, $conf['guest_id'], $ipguestt);
1644                       
1645                                $user_note = $this->get_img_note_user($row['img_id'], $concours_id, $conf['guest_id'], $ipguestt);
1646                               
1647                                $file .= ', Guest('.$ipguestt.'), '.$this->get_img_globalnote_user($row['img_id'], $concours_id, $conf['guest_id'], $ipguestt)
1648//                                              .', '.($row['comment'] != null ? str_replace(",", "",$row['comment']) : '')
1649                                                .', '.($comment != false ? str_replace(array(",","\r\n", "\n", "\r"), " ",$comment) : '')
1650                                                .', '
1651                                                ;
1652
1653                                $user_note_by_crit = "";
1654                                foreach ($firstcriterias as $criteria)
1655                                {
1656                                        // First without sub criterias
1657                                        if (!$this->is_criterias_contains_sub($criteria['criteria_id'],$concours_id ))
1658                                        {
1659                                                $user_note_by_crit .= (strlen($user_note_by_crit) ? "," : "").(isset($user_note[$criteria['criteria_id']]) ? $user_note[$criteria['criteria_id']] : ' ');
1660                                        }
1661                                        else
1662                                        {
1663                                                $user_note_by_subcrit = "";
1664                                                $subcrit_note = 0;
1665                                                $user_has_vote = false;
1666                                                $secondcriterias = $this->get_subcriterias($criteria['criteria_id'], $concours_id );
1667                                                foreach ($secondcriterias as $subcriteria)
1668                                                {
1669                                                        if (isset($user_note[$subcriteria['criteria_id']]))             $user_has_vote = true;
1670                                                        $user_note_by_subcrit .= (strlen($user_note_by_subcrit) ? "," : "").(isset($user_note[$subcriteria['criteria_id']]) ? $user_note[$subcriteria['criteria_id']] : ' ');
1671                                                        $subcrit_note += (int)$subcriteria['ponderation'] * (float)(isset($user_note[$subcriteria['criteria_id']]) ? $user_note[$subcriteria['criteria_id']] : 0);
1672
1673                                                }
1674                                                $user_note_by_crit .= (strlen($user_note_by_crit) ? "," : "").($user_has_vote ? $subcrit_note : ' ').",".$user_note_by_subcrit;
1675                                        }
1676                                }
1677                                $file .= $user_note_by_crit;
1678
1679                        }
1680           
1681                        $file .="\r\n";
1682                        $rang ++;
1683            $previousNote = $row['note'];
1684            $previousMoy = $row['moyenne'];
1685
1686                }
1687if ($this->debug)               echo $file;
1688                return utf8_decode($file);
1689       
1690               
1691        }
1692       
1693       
1694       
1695        // Save csv datas to physical file
1696        function save_file($file,$concours_id = NULL)
1697        {
1698                // check if already saved file
1699                if ($filename = $this->get_file_name($concours_id))
1700                        return $filename;
1701                else
1702                {
1703                        $dirpath = CONCOURS_RESULT_FOLDER;
1704
1705                        $filename = date('Ymd')."_concours".($concours_id !== null ? $concours_id : $this->concours_id ).".csv";
1706                        if (!is_dir($dirpath)) 
1707                                @mkdir($dirpath);
1708                        if (file_exists($dirpath. $filename))
1709                                unlink($dirpath. $filename);
1710
1711                        $fh = fopen($dirpath. $filename, 'w') or die("can't open file");
1712                        fwrite($fh, $file);
1713                        fclose($fh);
1714
1715                        //update result database with filename
1716                        $query = "UPDATE " . CONCOURS_RESULT_TABLE . "
1717                                                SET
1718                                                file_name = \"".$filename."\"
1719                                                WHERE id_concours= ".($concours_id !== NULL ? $concours_id : $this->concours_id)."
1720                                                ;";
1721                        pwg_query($query);
1722if ($this->debug)               echo $query;
1723                       
1724                        return $filename;
1725                }
1726        }               
1727
1728        // Get result file name from db
1729        function get_file_name($concours_id = NULL)
1730        {
1731                $query = 'SELECT distinct(file_name)'
1732                .' FROM ' .CONCOURS_RESULT_TABLE
1733                .' WHERE id_concours = '.($concours_id !== null ? $concours_id : $this->concours_id )
1734                .';';
1735if ($this->debug)       echo $query;
1736                $result = pwg_query($query);
1737                if ($result)
1738                {
1739                        $row = mysql_fetch_assoc($result);             
1740                        if ($row)
1741                                return $row['file_name'];
1742                        else
1743                                return false;
1744                }
1745        }
1746
1747        // Get csv datas from a saved file
1748        function get_file($concours_id = NULL)
1749        {
1750                $filename = CONCOURS_RESULT_FOLDER.
1751                $size = filesize($filename);
1752                header('Content-Type: application/octet-stream');
1753                header('Content-Length: '.$size);
1754                header('Content-Disposition: attachment; filename='.$filename);
1755                header('Content-Transfer-Encoding: binary');
1756
1757                $file = @fopen($filename, ‘rb’);
1758                if ($file) {
1759                        // stream the file and exit the script when complete
1760                        fpassthru($file);
1761                }
1762       
1763        }
1764       
1765        // Activation page administration
1766        function concours_admin_menu($menu)
1767        {
1768            array_push($menu,
1769               array(
1770                    'NAME' => CONCOURS_NAME,
1771                    'URL' => get_admin_plugin_menu_link(CONCOURS_ADMIN_PATH.'admin.php')
1772                ) 
1773            );
1774            return $menu;
1775        }
1776       
1777        // register Concours Menubar
1778        public function register_blocks( $menu_ref_arr )
1779        {
1780        $menu = & $menu_ref_arr[0];
1781        if ($menu->get_id() != 'menubar' OR $this->my_config['active_menubar'] == false)
1782          return;
1783        $menu->register_block( new RegisteredBlock( 'CONCOURS_menu', 'concours', 'ConcoursPhoto'));
1784        }
1785
1786  /*
1787    initialise menubar's menu
1788    called by menubar object when making menu
1789  */
1790        public function blockmanager_apply( $menu_ref_arr )
1791        {
1792 
1793                global $user, $template;
1794                $menu = & $menu_ref_arr[0];
1795
1796                if ($this->user_groups == array())
1797                        $this->get_user_groups();
1798               
1799                if ( ($block = $menu->get_block( 'CONCOURS_menu' ) ) != null )
1800                {
1801                  if($user['id']==2)
1802                  {
1803                        $vote_id = $_SERVER['REMOTE_ADDR'];
1804                  }
1805                  else
1806                  {
1807                        $vote_id = $user['id'];
1808                  }
1809
1810        //      $polls_list=$this->get_polls_list($vote_id, is_admin(), $user['language']);
1811                  $menu_list=array();
1812
1813                  if(is_admin())
1814                  {
1815                        array_push($menu_list,
1816                          array(
1817                                'nfo' => "",
1818                                'text' => l10n('concours_admin_add'),
1819                                'link' => PHPWG_ROOT_PATH . 'admin.php?page=plugin&amp;section=' . CONCOURS_DIR . '%2Fadmin%2Fadd_concours.php&amp;action=new',
1820                                'edit' => ""
1821                          )
1822                        );
1823                  }
1824
1825                        // recover all img_id from the category
1826                        $query = 'SELECT distinct(id_concours), groups, CONC.name'
1827                        .' FROM ' .CONCOURS_RESULT_TABLE
1828                        .' INNER JOIN '.CONCOURS_TABLE. ' AS CONC ON CONC.id = id_concours'
1829                        .' ORDER BY date DESC'
1830                        .';';
1831                       
1832                        $result = pwg_query($query);
1833                        $nb_concours = 1;
1834                        // For each concours
1835                        while ($row = mysql_fetch_assoc($result))
1836                        {
1837                               
1838                                if ($nb_concours > $this->my_config['nbconcours_menubar'])
1839                                        break;
1840                                       
1841                                if (!empty($row['groups']))
1842                                {
1843                                        $authorized_groups = explode(',', $row['groups']);
1844                                        if (array_intersect($this->user_groups, $authorized_groups) == array()) 
1845                                        {
1846                                                continue;
1847                                        }
1848                                        $nb_concours ++;
1849                                        array_push($menu_list,
1850                                          array(
1851                                                'nfo' => "",
1852                                                'text' => $row['name'],
1853        //                                      'link' => CONCOURS_PATH.'publish.php?id='.$row['id_concours'],
1854                                                'link' => './index.php?/concours/'.$row['id_concours'],
1855                                                'edit' => (is_admin()? PHPWG_ROOT_PATH . 'admin.php?page=plugin&amp;section=' . CONCOURS_DIR . '%2Fadmin%2Fadd_concours.php&amp;concours=' . $row['id_concours'].'&amp;action=modify':"")
1856                                          )
1857                                        );
1858                                }
1859                        }
1860
1861                  if (count($menu_list))
1862                  {
1863
1864                          $block->set_title("Concours Photo");
1865                          $block->template = CONCOURS_ROOT.'/template/concours_menu.tpl';
1866                          $block->data = $menu_list;
1867                  }
1868                }
1869        }
1870
1871       
1872        function section_init_concours()
1873        {
1874                global $tokens, $page;
1875                if ($tokens[0] == 'concours')
1876                  $page['section'] = 'concours';
1877        }
1878       
1879        function index_concours()
1880        {
1881                global $page;
1882               
1883               
1884                if (isset($page['section']) and $page['section'] == 'concours')
1885                {
1886                        include(CONCOURS_PATH . 'publish.php');
1887                }
1888        }
1889
1890       
1891  // Show the global note under the thumbnail
1892  function thumbnail_note($tpl_var) 
1893  {
1894
1895        global $page, $user;
1896        $this->get_user_groups();
1897
1898    $user['ipguest'] = null;
1899    if (is_a_guest())
1900    {
1901        if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
1902            $IP = $_SERVER['HTTP_X_FORWARDED_FOR']; 
1903        elseif(isset($_SERVER['HTTP_CLIENT_IP']))   
1904            $IP = $_SERVER['HTTP_CLIENT_IP'];   
1905        else
1906            $IP = $_SERVER['REMOTE_ADDR']; 
1907             
1908        // store ip
1909        $user['ipguest'] = $IP;
1910    }
1911       
1912    if ($this->my_config['thumb_note'] && $this->my_config['thumb_note'] == true)
1913    {
1914        $concours = array();
1915        if (($page['section']) == 'categories' AND !empty($page['category']))
1916        {
1917            $query = '
1918                SELECT *
1919                FROM ' . CONCOURS_TABLE .'
1920                WHERE category =' . $page['category']['id'] . '
1921                AND time_to_sec(TIMEDIFF(begin_date,now())) < 0
1922                AND time_to_sec(TIMEDIFF(now(), end_date)) < 0
1923                ';
1924
1925            $result = pwg_query($query);
1926    if ($this->debug) echo $query."\n";
1927            while ($row = mysql_fetch_assoc($result))
1928            {
1929               
1930                if (!empty($row['groups']))
1931                {
1932    if ($this->debug)   echo "GROUPS=".$row['groups'];                         
1933                    $authorized_groups = explode(',', $row['groups']);
1934                    if (array_intersect($this->user_groups, $authorized_groups) == array()) 
1935                    {
1936    if ($this->debug)   echo "ERROR GROUPS";
1937                        continue;
1938                    }
1939                    $concours = $row;
1940                }
1941               
1942                // If no group is parameter for that concours  ==> available for all registered users
1943                else
1944                    $concours = $row;
1945               
1946            }
1947            if (count($concours))
1948            {
1949                // Check if user is guest and if guest is allowed
1950                if ((is_a_guest() AND $concours['guest'])
1951                    OR !is_a_guest())
1952                {
1953                    foreach($tpl_var as $cle=>$valeur) 
1954                    {
1955                        // show only if the author is not the active user
1956                        if ($tpl_var[$cle]['FILE_AUTHOR'] != $user['username']
1957                            OR $this->my_config['author_vote_available']    // Allow author to vote (and also show his score)
1958                            )
1959                        {
1960                            $tpl_var[$cle]['NAME'] = $tpl_var[$cle]['NAME'].'<br>&nbsp;'.l10n('thumbnail_global_note').' : '.$this->get_img_globalnote_user($tpl_var[$cle]['ID'], $concours['id'], $user['id'], $user['ipguest']);
1961                        }
1962                    }
1963                }
1964            }
1965        }
1966    }
1967    return $tpl_var;
1968  }
1969       
1970       
1971}
1972
1973?>
Note: See TracBrowser for help on using the repository browser.