Projet

Général

Profil

Paste
Statistiques
| Branche: | Révision:

ryxeo-glpi-git / inc / planning.function.php @ b67d8923

Historique | Voir | Annoter | Télécharger (27,4 ko)

1
<?php
2
/*
3
 * @version $Id: planning.function.php 7881 2009-01-23 17:56:15Z moyo $
4
 -------------------------------------------------------------------------
5
 GLPI - Gestionnaire Libre de Parc Informatique
6
 Copyright (C) 2003-2009 by the INDEPNET Development Team.
7

8
 http://indepnet.net/   http://glpi-project.org
9
 -------------------------------------------------------------------------
10

11
 LICENSE
12

13
 This file is part of GLPI.
14

15
 GLPI is free software; you can redistribute it and/or modify
16
 it under the terms of the GNU General Public License as published by
17
 the Free Software Foundation; either version 2 of the License, or
18
 (at your option) any later version.
19

20
 GLPI is distributed in the hope that it will be useful,
21
 but WITHOUT ANY WARRANTY; without even the implied warranty of
22
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23
 GNU General Public License for more details.
24

25
 You should have received a copy of the GNU General Public License
26
 along with GLPI; if not, write to the Free Software
27
 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
28
 --------------------------------------------------------------------------
29
 */
30

    
31
// ----------------------------------------------------------------------
32
// Original Author of file: Julien Dombre
33
// Purpose of file:
34
// ----------------------------------------------------------------------
35

    
36
if (!defined('GLPI_ROOT')){
37
        die("Sorry. You can't access directly to this file");
38
        }
39

    
40

    
41
// FUNCTIONS Planning
42

    
43

    
44
/**
45
 * Show the planning
46
 *
47
 *  
48
 * @param $who ID of the user (0 = undefined)
49
 * @param $who_group ID of the group of users (0 = undefined)
50
 * @param $when Date of the planning to display
51
 * @param $type type of planning to display (day, week, month) 
52
 * @return Nothing (display function)
53
 *
54
 **/
55
function showPlanning($who,$who_group,$when,$type){
56
        global $LANG,$CFG_GLPI,$DB;
57

    
58
        if (!haveRight("show_planning","1")&&!haveRight("show_all_planning","1")) return false;
59

    
60
        // Define some constants
61

    
62
        $date=split("-",$when);
63
        $time=mktime(0,0,0,$date[1],$date[2],$date[0]);
64

    
65
        // Check bisextile years
66
        list($current_year,$current_month,$current_day)=split("-",$when);
67
        if (($current_year%4)==0) $feb=29; else $feb=28;
68
        $nb_days= array(31,$feb,31,30,31,30,31,31,30,31,30,31);
69
        // Begin of the month
70
        $begin_month_day=strftime("%w",mktime(0,0,0,$current_month,1,$current_year));
71
        if ($begin_month_day==0) $begin_month_day=7;
72
        $end_month_day=strftime("%w",mktime(0,0,0,$current_month,$nb_days[$current_month-1],$current_year));
73
        // Day of the week
74
        $dayofweek=date("w",$time);
75
        // Cas du dimanche
76
        if ($dayofweek==0) $dayofweek=7;
77

    
78

    
79

    
80

    
81
        // Print Headers
82
        echo "<div class='center'><table class='tab_cadre_fixe'>";
83
        // Print Headers
84
        echo "<tr>";
85
        switch ($type){
86
                case "month":
87
                case "week":
88
                        for ($i=1;$i<=7;$i++){
89
                                echo "<th width='12%'>".$LANG["calendarDay"][$i%7]."</th>";
90
                        }
91
                        break;
92
                case "day":
93
                        echo "<th width='12%'>".$LANG["calendarDay"][$dayofweek%7]."</th>";
94
                        break;
95
        }
96
        echo "</tr>";
97

    
98
        // Get begin and duration
99
        $begin=0;
100
        $end=0;
101
        switch ($type){
102
                case "month":
103
                        $begin=strtotime($current_year."-".$current_month."-01 00:00:00");
104
                        $end=$begin+DAY_TIMESTAMP*$nb_days[$current_month-1];
105
                        break;
106
                case "week":
107
                        $begin=$time+mktime(0,0,0,0,1,0)-mktime(0,0,0,0,$dayofweek,0);
108
                        $end=$begin+WEEK_TIMESTAMP;
109
                        break;
110
                case "day":
111
                        $add="";
112
                        $begin=$time;
113
                        $end=$begin+DAY_TIMESTAMP;
114
                        break;
115
        }
116
        $begin=date("Y-m-d H:i:s",$begin);
117
        $end=date("Y-m-d H:i:s",$end);
118

    
119
        // Get items to print
120
        $ASSIGN="";
121

    
122
        if ($who_group=="mine"){
123
                if (count($_SESSION["glpigroups"])){
124
                        $first=true;
125
                        $groups="";
126
                        foreach ($_SESSION['glpigroups'] as $val){
127
                                if (!$first) $groups.=",";
128
                                else $first=false;
129
                                $groups.="'".$val."'";
130
                        }                        
131
                        $ASSIGN="id_assign IN (SELECT DISTINCT FK_users FROM glpi_users_groups WHERE FK_groups IN ($groups)) AND";
132
                } else { // Only personal ones
133
                        $ASSIGN="id_assign='$who' AND ";
134
                }
135
        } else {
136

    
137
                if ($who>0){
138
                        $ASSIGN="id_assign='$who' AND ";
139
                }
140

    
141
                if ($who_group>0){
142
                        $ASSIGN="id_assign IN (SELECT FK_users FROM glpi_users_groups WHERE FK_groups = '$who_group') AND";
143
                }
144
        }
145
        if (empty($ASSIGN)){
146
                $ASSIGN=" id_assign IN (SELECT DISTINCT glpi_users_profiles.FK_users 
147
                                        FROM glpi_profiles 
148
                                        LEFT JOIN glpi_users_profiles ON (glpi_profiles.ID = glpi_users_profiles.FK_profiles)
149
                                        WHERE glpi_profiles.interface='central' ";
150

    
151
                $ASSIGN.=getEntitiesRestrictRequest("AND","glpi_users_profiles", '',$_SESSION["glpiactive_entity"],1);        
152
                $ASSIGN.=") AND ";
153

    
154

    
155
        }
156
        // ---------------Tracking
157
        $query="SELECT * FROM glpi_tracking_planning WHERE $ASSIGN (('$begin' <= begin AND '$end' >= begin) OR ('$begin' < end AND '$end' >= end) OR (begin <= '$begin' AND end > '$begin') OR (begin <= '$end' AND end > '$end')) ORDER BY begin";
158

    
159
        $result=$DB->query($query);
160

    
161
        $fup=new Followup();
162
        $job=new Job();
163

    
164
        $interv=array();
165
        $i=0;
166
        if ($DB->numrows($result)>0)
167
                while ($data=$DB->fetch_array($result)){
168
                        $fup->getFromDB($data["id_followup"]);
169
                        $job->getFromDBwithData($fup->fields["tracking"],0);
170
                        if (haveAccessToEntity($job->fields["FK_entities"])){
171
                                $interv[$data["begin"]."$$$".$i]["id_followup"]=$data["id_followup"];
172
                                $interv[$data["begin"]."$$$".$i]["state"]=$data["state"];
173
                                $interv[$data["begin"]."$$$".$i]["id_tracking"]=$fup->fields["tracking"];
174
                                $interv[$data["begin"]."$$$".$i]["id_assign"]=$data["id_assign"];
175
                                $interv[$data["begin"]."$$$".$i]["ID"]=$data["ID"];
176
                                if (strcmp($begin,$data["begin"])>0){
177
                                        $interv[$data["begin"]."$$$".$i]["begin"]=$begin;
178
                                } else {
179
                                        $interv[$data["begin"]."$$$".$i]["begin"]=$data["begin"];
180
                                }
181
                                if (strcmp($end,$data["end"])<0){
182
                                        $interv[$data["begin"]."$$$".$i]["end"]=$end;
183
                                } else {
184
                                        $interv[$data["begin"]."$$$".$i]["end"]=$data["end"];
185
                                }
186
                                $interv[$data["begin"]."$$$".$i]["name"]=$job->fields["name"];
187
                                $interv[$data["begin"]."$$$".$i]["content"]=resume_text($job->fields["contents"],$CFG_GLPI["cut"]);
188
                                $interv[$data["begin"]."$$$".$i]["device"]=$job->hardwaredatas->getName();
189
                                $interv[$data["begin"]."$$$".$i]["status"]=$job->fields["status"];
190
                                $interv[$data["begin"]."$$$".$i]["priority"]=$job->fields["priority"];
191
                                $i++;
192
                        }
193
                }
194

    
195
        // ---------------reminder
196
        $readpub=$readpriv="";
197

    
198
        // See public reminder ?
199
        if (haveRight("reminder_public","r")) {
200
                $readpub="(private=0 AND".getEntitiesRestrictRequest("","glpi_reminder",'','',true).")";
201
        }
202

    
203
        // See my private reminder ?
204
        if ($who_group=="mine" || $who==$_SESSION["glpiID"]){
205
                $readpriv="(private=1 AND FK_users='".$_SESSION["glpiID"]."')";
206
        }
207

    
208
        if ($readpub && $readpriv) {
209
                $ASSIGN        = "($readpub OR $readpriv)";
210
        } else if ($readpub) {
211
                $ASSIGN        = $readpub;
212
        } else {
213
                $ASSIGN        = $readpriv;
214
        }
215
        if ($ASSIGN) {
216
                $query2="SELECT * FROM glpi_reminder WHERE rv=1 AND $ASSIGN  AND begin < '$end' AND end > '$begin' ORDER BY begin";
217
                $result2=$DB->query($query2);
218
        
219
                if ($DB->numrows($result2)>0) {        
220
                        while ($data=$DB->fetch_array($result2)){
221
        
222
                                $interv[$data["begin"]."$$".$i]["id_reminder"]=$data["ID"];
223
                                if (strcmp($begin,$data["begin"])>0)
224
                                        $interv[$data["begin"]."$$".$i]["begin"]=$begin;
225
                                else $interv[$data["begin"]."$$".$i]["begin"]=$data["begin"];
226
                                if (strcmp($end,$data["end"])<0)
227
                                        $interv[$data["begin"]."$$".$i]["end"]=$end;
228
                                else $interv[$data["begin"]."$$".$i]["end"]=$data["end"];
229
        
230
                                $interv[$data["begin"]."$$".$i]["name"]=resume_text($data["name"],$CFG_GLPI["cut"]);
231
                                $interv[$data["begin"]."$$".$i]["text"]=resume_text($data["text"],$CFG_GLPI["cut"]);
232
                                $interv[$data["begin"]."$$".$i]["FK_users"]=$data["FK_users"];
233
                                $interv[$data["begin"]."$$".$i]["private"]=$data["private"];
234
                                $interv[$data["begin"]."$$".$i]["state"]=$data["state"];
235
        
236
                                $i++;
237
                        } //
238
                }
239
        }
240

    
241
        // --------------- Plugins
242
        $data=doHookFunction("planning_populate",array("begin"=>$begin,"end"=>$end,"who"=>$who,"who_group"=>$who_group));
243

    
244
        if (isset($data["items"])&&count($data["items"])){
245
                $interv=array_merge($data["items"],$interv);
246
        }
247

    
248
        ksort($interv);
249
        
250
        // Display Items
251
        $tmp=split(":",$CFG_GLPI["planning_begin"]);
252
        $hour_begin=$tmp[0];
253
        $tmp=split(":",$CFG_GLPI["planning_end"]);
254
        $hour_end=$tmp[0];
255

    
256
        switch ($type){
257
                case "week":
258
                        for ($hour=$hour_begin;$hour<=$hour_end;$hour++){
259
                                echo "<tr>";
260
                                for ($i=1;$i<=7;$i++){
261
                                        echo "<td class='tab_bg_3' width='12%' valign='top' >";
262
                                        echo "<strong>".displayUsingTwoDigits($hour).":00</strong><br>";
263
                                        
264
                                        // From midnight
265
                                        if ($hour==$hour_begin){
266
                                                $begin_time=date("Y-m-d H:i:s",strtotime($when)+($i-$dayofweek)*DAY_TIMESTAMP);
267
                                        } else {
268
                                                $begin_time=date("Y-m-d H:i:s",strtotime($when)+($i-$dayofweek)*DAY_TIMESTAMP+$hour*HOUR_TIMESTAMP);
269
                                        }
270
                                        // To midnight
271
                                        if($hour==$hour_end){
272
                                                $end_time=date("Y-m-d H:i:s",strtotime($when)+($i-$dayofweek)*DAY_TIMESTAMP+24*HOUR_TIMESTAMP);
273
                                        } else {
274
                                                $end_time=date("Y-m-d H:i:s",strtotime($when)+($i-$dayofweek)*DAY_TIMESTAMP+($hour+1)*HOUR_TIMESTAMP);
275
                                        }
276
                                        
277
                                        reset($interv);
278
                                        while ($data=current($interv)){
279
                                                $type="";
280

    
281
                                                if ($data["begin"]>=$begin_time&&$data["end"]<=$end_time){
282
                                                        $type="in";
283
                                                } else if ($data["begin"]<$begin_time&&$data["end"]>$end_time){
284
                                                        $type="through";
285
                                                } else if ($data["begin"]>=$begin_time&&$data["begin"]<$end_time){
286
                                                        $type="begin";
287
                                                } else if ($data["end"]>$begin_time&&$data["end"]<=$end_time){
288
                                                        $type="end";
289
                                                } 
290
                                                
291
                                                if (empty($type)){
292
                                                        next($interv);
293
                                                } else {
294
                                                        displayPlanningItem($data,$who,$type);
295
                                                        if ($type=="in"){
296
                                                                unset($interv[key($interv)]);
297
                                                        } else {
298
                                                                next($interv);
299
                                                        }
300
                                                }
301
                                        }
302
                                        echo "</td>";
303
                                }
304
        
305
                                echo "</tr>\n";
306
        
307
                        }
308

    
309
                        break;
310
                case "day":
311
                        for ($hour=$hour_begin;$hour<=$hour_end;$hour++){
312
                                echo "<tr>";
313
                                $begin_time=date("Y-m-d H:i:s",strtotime($when)+($hour)*HOUR_TIMESTAMP);
314
                                $end_time=date("Y-m-d H:i:s",strtotime($when)+($hour+1)*HOUR_TIMESTAMP);
315
                                echo "<td class='tab_bg_3' width='12%' valign='top' >";
316
                                echo "<strong>".displayUsingTwoDigits($hour).":00</strong><br>";
317
                                reset($interv);
318
                                while ($data=current($interv)){
319
                                        $type="";
320
                                        if ($data["begin"]>=$begin_time&&$data["end"]<=$end_time){
321
                                                $type="in";
322
                                        } else if ($data["begin"]<$begin_time&&$data["end"]>$end_time){
323
                                                $type="through";
324
                                        } else if ($data["begin"]>=$begin_time&&$data["begin"]<$end_time){
325
                                                $type="begin";
326
                                        } else if ($data["end"]>$begin_time&&$data["end"]<=$end_time){
327
                                                $type="end";
328
                                        } 
329
                                                
330
                                        if (empty($type)){
331
                                                next($interv);
332
                                        } else {
333
                                                displayPlanningItem($data,$who,$type,1);
334
                                                if ($type=="in"){
335
                                                        unset($interv[key($interv)]);
336
                                                } else {
337
                                                        next($interv);
338
                                                }
339
                                        }
340
                                }
341
                                echo "</td>";
342
                                echo "</tr>";
343
                        }
344
                        break;
345
                case "month":
346
                        echo "<tr class='tab_bg_3'>";
347
                        // Display first day out of the month
348
                        for ($i=1;$i<$begin_month_day;$i++){
349
                                echo "<td style='background-color:#ffffff'>&nbsp;</td>";
350
                        }
351
                        // Print real days
352
                        if ($current_month<10&&strlen($current_month)==1) $current_month="0".$current_month;
353
                        
354
                        $begin_time=strtotime($begin);
355
                        $end_time=strtotime($end);
356
                
357
                        for ($time=$begin_time;$time<$end_time;$time+=DAY_TIMESTAMP){
358

    
359
                                // Add 6 hours for midnight problem
360
                                $day=date("d",$time+6*HOUR_TIMESTAMP);
361

    
362
                                echo "<td  valign='top' height='100'  class='tab_bg_3'>";
363
                                echo "<table align='center' ><tr><td align='center' ><span style='font-family: arial,helvetica,sans-serif; font-size: 14px; color: black'>".$day."</span></td></tr>";
364

    
365
                                echo "<tr class='tab_bg_3'>";
366
                                echo "<td class='tab_bg_3' width='12%' valign='top' >";
367
                                $begin_day=date("Y-m-d H:i:s",$time);
368
                                $end_day=date("Y-m-d H:i:s",$time+DAY_TIMESTAMP);
369
                                reset($interv);
370
                                while ($data=current($interv)){
371
                                        $type="";
372

    
373
                                        if ($data["begin"]>=$begin_day&&$data["end"]<=$end_day){
374
                                                $type="in";
375
                                        } else if ($data["begin"]<$begin_day&&$data["end"]>$end_day){
376
                                                $type="through";
377
                                        } else if ($data["begin"]>=$begin_day&&$data["begin"]<$end_day){
378
                                                $type="begin";
379
                                        } else if ($data["end"]>$begin_day&&$data["end"]<=$end_day){
380
                                                $type="end";
381
                                        } 
382

    
383
                                        if (empty($type)){
384
                                                next($interv);
385
                                        } else {
386
                                                displayPlanningItem($data,$who,$type);
387
                                                if ($type=="in"){
388
                                                        unset($interv[key($interv)]);
389
                                                } else {
390
                                                        next($interv);
391
                                                }
392
                                        }
393
                                }
394

    
395
                                echo "</td>";
396
        
397
                                echo "</tr>";
398
                                echo "</table>";
399
                                echo "</td>";
400
                                
401
                                // Add break line
402
                                if (($day+$begin_month_day)%7==1)        {
403
                                        echo "</tr>";
404
                                        if ($day!=$nb_days[$current_month-1]){
405
                                                echo "<tr>";
406
                                        }
407
                                }
408

    
409
                        }
410
                        if ($end_month_day!=0){
411
                                for ($i=0;$i<7-$end_month_day;$i++)         {
412
                                        echo "<td style='background-color:#ffffff'>&nbsp;</td>";
413
                                }
414
                        }
415
                        echo "</tr>";
416

    
417

    
418
                        break;
419

    
420
        }
421
        
422
        echo "</table></div>";
423

    
424
}
425

    
426
/**
427
 * Display a Planning Item
428
 *
429
 *  
430
 * @param $val Array of the item to display
431
 * @param $who ID of the user (0 if all)
432
 * @param $type position of the item in the time block (in, through, begin or end)
433
 * @param $complete complete display (more details)
434
 * @return Nothing (display function)
435
 *
436
 **/
437
function displayPlanningItem($val,$who,$type="",$complete=0){
438
        global $CFG_GLPI,$LANG,$PLUGIN_HOOKS;
439

    
440
        $author="";  // show author reminder
441
        $img="rdv_private.png"; // default icon for reminder
442
        $color="#e4e4e4";
443
        $styleText="";
444
        if (isset($val["state"])){
445
                switch ($val["state"]){
446
                        case 0:
447
                                $color="#efefe7"; // Information
448
                                break;
449
                        case 1:
450
                                $color="#fbfbfb"; // TODO
451
                                break;
452
                        case 2:
453
                                $color="#e7e7e2"; // Done
454
                                $styleText="color:#747474;";
455
                                
456
                                break;
457
                        
458
                }
459
        }
460
        
461
        echo "<div style=' margin:auto; text-align:left; border:1px dashed #cccccc; background-color: $color; font-size:9px; width:98%; '>";
462
        $rand=mt_rand(); 
463

    
464
        // Plugins case
465
        if (isset($val["plugin"])&&isset($PLUGIN_HOOKS['display_planning'][$val["plugin"]])){
466
                        $function=$PLUGIN_HOOKS['display_planning'][$val["plugin"]];
467
                if (function_exists($function)) {
468
                        $val["type"]=$type;
469
                        $function($val);
470
                }
471
        } else if(isset($val["id_tracking"])){  // show tracking
472

    
473
                echo "<img src='".$CFG_GLPI["root_doc"]."/pics/rdv_interv.png' alt='' title='".$LANG["planning"][8]."'>&nbsp;";
474
                echo "&nbsp;<img src=\"".$CFG_GLPI["root_doc"]."/pics/".$val["status"].".png\" alt='".getStatusName($val["status"])."' title='".getStatusName($val["status"])."'>&nbsp;";
475

    
476
                echo "<a href='".$CFG_GLPI["root_doc"]."/front/tracking.form.php?ID=".$val["id_tracking"]."' style='$styleText'";
477
                if (!$complete){
478
                        echo "onmouseout=\"cleanhide('content_tracking_".$val["ID"].$rand."')\" onmouseover=\"cleandisplay('content_tracking_".$val["ID"].$rand."')\"";
479
                }
480
                echo ">";
481
                switch ($type){
482
                        case "in":
483
                                echo date("H:i",strtotime($val["begin"]))."/".date("H:i",strtotime($val["end"])).": ";
484
                                break;
485
                        case "through":
486
                                break;
487
                        case "begin";
488
                                echo $LANG["buttons"][33]." ".date("H:i",strtotime($val["begin"])).": ";
489
                                break;
490
                        case "end";
491
                                echo $LANG["buttons"][32]." ".date("H:i",strtotime($val["end"])).": ";
492
                                break;
493

    
494
                }
495
                echo "<br>- #".$val["id_tracking"]." ";
496
                echo  resume_text($val["name"],80). " ";
497
                if (!empty($val["device"])){
498
                        echo "<br>- ".$val["device"];
499
                }
500
                
501
                if ($who<=0){ // show tech for "show all and show group"
502
                        echo "<br>- ";
503
                        echo $LANG["planning"][9]." ".getUserName($val["id_assign"]);
504
                } 
505
                echo "</a>";
506
                if ($complete){
507
                        echo "<br>";
508
                        echo "<strong>".getPlanningState($val["state"])."</strong><br>";
509
                        echo "<strong>".$LANG["joblist"][2].":</strong> ".getPriorityName($val["priority"])."<br>";
510
                        echo "<strong>".$LANG["joblist"][6].":</strong><br>".$val["content"];
511
                } else {
512
                        echo "<div class='over_link' id='content_tracking_".$val["ID"].$rand."'>";
513
                        echo "<strong>".getPlanningState($val["state"])."</strong><br>";
514
                        echo "<strong>".$LANG["joblist"][2].":</strong> ".getPriorityName($val["priority"])."<br>";
515
                        echo "<strong>".$LANG["joblist"][6].":</strong><br>".$val["content"]."</div>";
516
                }
517

    
518
        }else{  // show Reminder
519
                if (!$val["private"]){
520
                        $author="<br>".$LANG["planning"][9]." : ".getUserName($val["FK_users"]);
521
                        $img="rdv_public.png";
522
                } 
523
                echo "<img src='".$CFG_GLPI["root_doc"]."/pics/".$img."' alt='' title='".$LANG["title"][37]."'>&nbsp;";
524
                echo "<a href='".$CFG_GLPI["root_doc"]."/front/reminder.form.php?ID=".$val["id_reminder"]."'";
525
                        if (!$complete){
526
                        echo "onmouseout=\"cleanhide('content_reminder_".$val["id_reminder"].$rand."')\" onmouseover=\"cleandisplay('content_reminder_".$val["id_reminder"].$rand."')\"";
527
                }
528
                echo ">";
529

    
530
                switch ($type){
531
                        case "in":
532
                                echo date("H:i",strtotime($val["begin"]))." -> ".date("H:i",strtotime($val["end"])).": ";
533
                                break;
534
                        case "through":
535
                                break;
536
                        case "begin";
537
                                echo $LANG["buttons"][33]." ".date("H:i",strtotime($val["begin"])).": ";
538
                                break;
539
                        case "end";
540
                                echo $LANG["buttons"][32]." ".date("H:i",strtotime($val["end"])).": ";
541
                                break;
542

    
543
                }
544
                echo $val["name"];
545
                echo $author;
546
                echo "</a>";
547
                if ($complete){
548
                        echo "<br><strong>".getPlanningState($val["state"])."</strong><br>";
549
                        echo $val["text"];
550
                } else {
551
                        echo "<div class='over_link' id='content_reminder_".$val["id_reminder"].$rand."'><strong>".getPlanningState($val["state"])."</strong><br>".$val["text"]."</div>";
552
                }
553

    
554
                echo "";
555
        }
556
        echo "</div><br>";
557

    
558
}
559

    
560

    
561
/**
562
 * Display an integer using 2 digits
563
 *
564
 *  
565
 * @param $time value to display
566
 * @return string return the 2 digits item
567
 *
568
 **/
569
function displayUsingTwoDigits($time){
570

    
571
        $time=round($time);
572
        if ($time<10&&strlen($time)) return "0".$time;
573
        else return $time;
574
}
575

    
576
/**
577
 * Show the planning for the central page of a user
578
 *
579
 *
580
 * @param $who ID of the user
581
 * @return Nothing (display function)
582
 *
583
 **/
584
function showPlanningCentral($who){
585

    
586
        global $DB,$CFG_GLPI,$LANG;
587

    
588
        if (!haveRight("show_planning","1")) return false;
589

    
590
        $when=strftime("%Y-%m-%d");
591
        $debut=$when;
592

    
593
        // followup
594
        $ASSIGN="";
595
        if ($who!=0){
596
                $ASSIGN="id_assign='$who' AND";
597
        } else {
598
                return false;
599
        }
600

    
601

    
602
        $INTERVAL=" 1 DAY "; // we want to show planning of the day
603

    
604
        $query="SELECT * FROM glpi_tracking_planning WHERE $ASSIGN (('".$debut."' <= begin AND adddate( '". $debut ."' , INTERVAL $INTERVAL ) >= begin) OR ('".$debut."' < end AND adddate( '". $debut ."' , INTERVAL $INTERVAL ) >= end) OR (begin <= '".$debut."' AND end > '".$debut."') OR (begin <= adddate( '". $debut ."' , INTERVAL $INTERVAL ) AND end > adddate( '". $debut ."' , INTERVAL $INTERVAL ))) ORDER BY begin";
605

    
606
        $result=$DB->query($query);
607

    
608
        $fup=new Followup();
609
        $job=new Job();
610

    
611
        $interv=array();
612
        $i=0;
613

    
614
        if ($DB->numrows($result)>0)
615
                while ($data=$DB->fetch_array($result)){
616
                        if ($fup->getFromDB($data["id_followup"])){
617
                                if ($job->getFromDBwithData($fup->fields["tracking"],0)){
618
                                        if (haveAccessToEntity($job->fields["FK_entities"])){
619
                                                $interv[$data["begin"]."$$".$i]["id_followup"]=$data["id_followup"];
620
                                                $interv[$data["begin"]."$$".$i]["id_tracking"]=$fup->fields["tracking"];
621
                                                $interv[$data["begin"]."$$".$i]["begin"]=$data["begin"];
622
                                                $interv[$data["begin"]."$$".$i]["end"]=$data["end"];
623
                                                $interv[$data["begin"]."$$".$i]["state"]=$data["state"];
624
                                                $interv[$data["begin"]."$$".$i]["content"]=resume_text($job->fields["contents"],$CFG_GLPI["cut"]);
625
                                                $interv[$data["begin"]."$$".$i]["device"]=$job->hardwaredatas->getName();
626
                                                $interv[$data["begin"]."$$".$i]["status"]=$job->fields['status'];
627
                                                $interv[$data["begin"]."$$".$i]["id_assign"]=$data["id_assign"];
628
                                                $interv[$data["begin"]."$$".$i]["ID"]=$job->fields['ID'];
629
                                                $interv[$data["begin"]."$$".$i]["name"]=$job->fields['name'];
630
                                                $interv[$data["begin"]."$$".$i]["priority"]=$job->fields['priority'];
631
                                                $i++;
632
                                        }
633
                                }
634
                        }
635
                }
636

    
637

    
638
        // reminder
639
        $read_public="";
640
        if (haveRight("reminder_public","r")) $read_public=" OR ( private=0 ".getEntitiesRestrictRequest("AND","glpi_reminder").") ";
641

    
642
        $query2="SELECT * FROM glpi_reminder WHERE rv='1' AND (FK_users='$who' $read_public)    AND (('".$debut."' <= begin AND adddate( '". $debut ."' , INTERVAL $INTERVAL ) >= begin) OR ('".$debut."' < end AND adddate( '". $debut ."' , INTERVAL $INTERVAL ) >= end) OR (begin <= '".$debut."' AND end > '".$debut."') OR (begin <= adddate( '". $debut ."' , INTERVAL $INTERVAL ) AND end > adddate( '". $debut ."' , INTERVAL $INTERVAL ))) ORDER BY begin";
643

    
644
        $result2=$DB->query($query2);
645

    
646

    
647
        $remind=new Reminder();
648

    
649
        $i=0;
650

    
651
        if ($DB->numrows($result2)>0)
652
                while ($data=$DB->fetch_array($result2)){
653
                        if ($remind->getFromDB($data["ID"])){
654
                                $interv[$data["begin"]."$$".$i]["id_reminder"]=$data["ID"];
655
                                $interv[$data["begin"]."$$".$i]["begin"]=$data["begin"];
656
                                $interv[$data["begin"]."$$".$i]["end"]=$data["end"];
657
                                $interv[$data["begin"]."$$".$i]["private"]=$data["private"];
658
                                $interv[$data["begin"]."$$".$i]["state"]=$data["state"];
659
                                $interv[$data["begin"]."$$".$i]["FK_users"]=$data["FK_users"];
660
                                $interv[$data["begin"]."$$".$i]["name"]=resume_text($remind->fields["name"],$CFG_GLPI["cut"]);
661
                                $interv[$data["begin"]."$$".$i]["text"]=resume_text($remind->fields["text"],$CFG_GLPI["cut"]);
662
                                $i++;
663
                        }
664
                }
665

    
666
        // Get begin and duration
667
        $date=split("-",$when);
668
        $time=mktime(0,0,0,$date[1],$date[2],$date[0]);
669
        $begin=$time;
670
        $end=$begin+DAY_TIMESTAMP;
671
        $begin=date("Y-m-d H:i:s",$begin);
672
        $end=date("Y-m-d H:i:s",$end);
673

    
674

    
675
        $data=doHookFunction("planning_populate",array("begin"=>$begin,"end"=>$end,"who"=>$who,"who_group"=>-1));
676

    
677
        if (isset($data["items"])&&count($data["items"])){
678
                $interv=array_merge($data["items"],$interv);
679
        }
680

    
681

    
682
        ksort($interv);
683

    
684
        echo "<table class='tab_cadrehov'><tr><th><a href='".$CFG_GLPI["root_doc"]."/front/planning.php'>".$LANG["planning"][15]."</a></th></tr>";
685
        $type='';
686
        if (count($interv)>0){
687
                foreach ($interv as $key => $val){
688

    
689
                        echo "<tr class='tab_bg_1'>";
690
                        echo "<td>";                
691

    
692
                        if ($val["begin"]<$begin){
693
                                $val["begin"]=$begin;
694
                        }
695
                        if ($val["end"]>$end){
696
                                $val["end"]=$end;
697
                        }
698

    
699
                        displayPlanningItem($val,$who,'in');
700

    
701
                        echo "</td></tr>";
702

    
703
                }
704

    
705
        }
706
        echo "</table>";
707

    
708
}
709

    
710

    
711

    
712

    
713

    
714

    
715

    
716

    
717

    
718

    
719

    
720

    
721

    
722

    
723

    
724

    
725
//*******************************************************************************************************************************
726
// *********************************** Implementation ICAL ***************************************************************
727
//*******************************************************************************************************************************
728

    
729

    
730
/**
731
 * Generate URL for ICAL
732
 *
733
 *  
734
 * @param $who 
735
 * @return Nothing (display function)
736
 *
737
 **/      
738
function urlIcal ($who) {
739

    
740
        global  $CFG_GLPI, $LANG;
741

    
742
        echo "<a href=\"".$CFG_GLPI["root_doc"]."/front/planning.ical.php?uID=$who\"><span style='font-size:10px'>-".$LANG["planning"][12]."</span></a>";
743
        echo "<br>";
744

    
745
        // Todo recup l'url complete de glpi proprement, ? nouveau champs table config ?
746
        echo "<a href=\"webcal://".$_SERVER['HTTP_HOST'].$CFG_GLPI["root_doc"]."/front/planning.ical.php?uID=$who\"><span style='font-size:10px'>-".$LANG["planning"][13]."</span></a>";
747

    
748
}
749

    
750

    
751
/**
752
 * Convert date mysql to timestamp
753
 * 
754
 * @param $date  date in mysql format
755
 * @return timestamp
756
 *
757
 **/      
758
function date_mysql_to_timestamp($date){
759
        if (!preg_match('/(\d\d\d\d)-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)/', $date, $r)){
760
                return false;
761
        }
762

    
763
        return mktime($r[4], $r[5], $r[6], $r[2], $r[3], $r[1] );
764
}
765

    
766

    
767
/**
768
 * Convert timestamp to date in ical format
769
 * 
770
 * @param $date  timestamp
771
 * @return date in ical format
772
 *
773
 **/      
774
function date_ical($date) {
775
        return date("Ymd\THis", date_mysql_to_timestamp($date));
776
}
777

    
778

    
779

    
780
/**
781
 *
782
 * Generate header for ical file
783
 * 
784
 * @param $name 
785
 * @return $debut_cal  
786
 *
787
 **/      
788
function debutIcal($name) {
789

    
790
        global  $CFG_GLPI, $LANG;
791

    
792
        $debut_cal = "BEGIN:VCALENDAR\n";
793
        $debut_cal .= "VERSION:2.0\n";
794

    
795
        if ( ! empty ( $CFG_GLPI["version"]) ) {
796
                $debut_cal.= "PRODID:-//GLPI-Planning-".$CFG_GLPI["version"]."\n";
797
        } else {
798
                $debut_cal.= "PRODID:-//GLPI-Planning-UnknownVersion\n";
799
        }
800

    
801
        $debut_cal.= "METHOD:PUBLISH\n"; // Outlook want's this in the header, why I don't know...
802
        $debut_cal .= "X-WR-CALNAME ;VALUE=TEXT:$name\n";
803

    
804
        //   $debut_cal .= "X-WR-RELCALID:n";
805
        //   $debut_cal .= "X-WR-TIMEZONE:US/Pacific\n";
806
        $debut_cal .= "CALSCALE:GREGORIAN\n\n";
807
        return (string) $debut_cal;
808
}
809

    
810

    
811
/**
812
 *  Generate ical body file
813
 *  
814
 * @param $who
815
 * @return $debutcal $event $fincal
816
 **/      
817
function generateIcal($who){
818

    
819
        global  $DB,$CFG_GLPI, $LANG;
820

    
821
        // export job
822
        $query="SELECT * FROM glpi_tracking_planning WHERE id_assign='$who'";
823

    
824
        $result=$DB->query($query);
825

    
826
        $job=new Job();
827
        $fup=new Followup();
828
        $interv=array();
829
        $i=0;
830
        if ($DB->numrows($result)>0)
831
                while ($data=$DB->fetch_array($result)){
832

    
833
                        if ($fup->getFromDB($data["id_followup"])){
834
                                if ($job->getFromDBwithData($fup->fields["tracking"],0)){
835
                                        $interv[$data["begin"]."$$".$i]["content"]=substr($job->fields['contents'],0,$CFG_GLPI["cut"]);
836
                                        $interv[$data["begin"]."$$".$i]["device"]=$job->hardwaredatas->getName();
837
                                }
838
                        }
839

    
840
                        $interv[$data["begin"]."$$".$i]["id_tracking"]=$data['id_followup'];
841
                        $interv[$data["begin"]."$$".$i]["id_assign"]=$data['id_assign'];
842
                        $interv[$data["begin"]."$$".$i]["ID"]=$data['ID'];
843
                        $interv[$data["begin"]."$$".$i]["begin"]=$data['begin'];
844
                        $interv[$data["begin"]."$$".$i]["end"]=$data['end'];
845
                        $interv[$data["begin"]."$$".$i]["content"]="";
846
                        $interv[$data["begin"]."$$".$i]["device"]="";
847
                        //$interv[$i]["content"]=substr($job->contents,0,$CFG_GLPI["cut"]);
848
                        if ($fup->getFromDB($data["id_followup"])){
849
                                if ($job->getFromDBwithData($fup->fields["tracking"],0)){
850
                                        $interv[$data["begin"]."$$".$i]["content"]=substr($job->fields['contents'],0,$CFG_GLPI["cut"]);
851
                                        $interv[$data["begin"]."$$".$i]["device"]=$job->hardwaredatas->getName();
852
                                }
853
                        }
854
                        $i++;
855
                }
856

    
857

    
858
        // reminder 
859

    
860
        $query2="SELECT * FROM glpi_reminder WHERE rv='1' AND (FK_users='$who' OR private=0)";
861

    
862
        $result2=$DB->query($query2);
863

    
864

    
865
        $remind=new Reminder();
866

    
867
        $i=0;
868
        if ($DB->numrows($result2)>0)
869
                while ($data=$DB->fetch_array($result2)){
870
                        $remind->getFromDB($data["ID"]);
871

    
872

    
873
                        $interv[$data["begin"]."$$".$i]["id_reminder"]=$remind->fields["ID"];
874
                        $interv[$data["begin"]."$$".$i]["begin"]=$data["begin"];
875
                        $interv[$data["begin"]."$$".$i]["end"]=$data["end"];
876
                        $interv[$data["begin"]."$$".$i]["name"]=$remind->fields["name"];
877
                        $interv[$data["begin"]."$$".$i]["content"]=$remind->fields["text"];
878

    
879
                        $i++;
880
                }
881

    
882
        $debutcal="";
883
        $event="";
884
        $fincal="";
885
        
886
        //
887
        $begin=time()-MONTH_TIMESTAMP*12;
888
        $end=time()+MONTH_TIMESTAMP*12;
889
        $begin=date("Y-m-d H:i:s",$begin); 
890
        $end=date("Y-m-d H:i:s",$end); 
891
        
892

    
893
        $data=doHookFunction("planning_populate",array("begin"=>$begin,"end"=>$end,"who"=>$who));
894

    
895
        if (isset($data["items"])&&count($data["items"])){
896
                $interv=array_merge($data["items"],$interv);
897
        }
898

    
899

    
900

    
901
        ksort($interv);
902

    
903
        if (count($interv)>0) {
904

    
905
                $debutcal=debutIcal(getUserName($who));
906

    
907
                foreach ($interv as $key => $val){
908

    
909
                        $event .= "BEGIN:VEVENT\n";
910

    
911
                        if(isset($val["id_tracking"])){
912
                                $event.="UID:Job#".$val["id_tracking"]."\n";
913
                        }else if (isset($val["id_reminder"])){
914
                                $event.="UID:Event#".$val["id_reminder"]."\n";
915
                        } else {
916
                                $event.="UID:Plugin#".$key."\n";
917
                        }        
918

    
919
                        $event.="DTSTAMP:".date_ical($val["begin"])."\n";
920

    
921
                        $event .= "DTSTART:".date_ical($val["begin"])."\n";
922

    
923
                        $event .= "DTEND:".date_ical($val["end"])."\n";
924

    
925
                        if(isset($val["id_tracking"])){
926
                                $event .= "SUMMARY:".$LANG["planning"][8]." # ".$val["id_tracking"]." ".$LANG["common"][1]." # ".$val["device"]."\n";
927
                        }else if (isset($val["name"])){
928
                                $event .= "SUMMARY:".$val["name"]."\n";
929
                        }
930

    
931
                        if (isset($val["content"])){
932
                                $event .= "DESCRIPTION:".$val["content"]."\n";
933
                        }
934

    
935
                        //todo recup la cat�orie d'intervention.
936
                        //$event .= "CATEGORIES:".$val["categorie"]."\n";
937
                        if(isset($val["id_tracking"])){
938
                                $event .= "URL:".$CFG_GLPI["url_base"]."/index.php?redirect=tracking_".$val["id_tracking"]."\n";
939
                        }
940

    
941
                        $event .= "END:VEVENT\n\n";
942
                }
943
                $fincal= "END:VCALENDAR\n";        
944
        }
945

    
946
        return $debutcal.$event.$fincal;
947

    
948
}
949

    
950

    
951
?>
Redmine Appliance - Powered by TurnKey Linux