Projet

Général

Profil

Paste
Statistiques
| Branche: | Révision:

ryxeo-glpi-git / inc / tracking.class.php @ b67d8923

Historique | Voir | Annoter | Télécharger (42 ko)

1
<?php
2
/*
3
 * @version $Id: tracking.class.php 7875 2009-01-23 15:16:47Z 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:
33
// Purpose of file:
34
// ----------------------------------------------------------------------
35

    
36

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

    
41
/// Tracking class
42
class Job extends CommonDBTM{
43
        /// Hardware datas used by getFromDBwithData
44
        var $hardwaredatas        = array();
45
        /// Is a hardware found in getHardwareData / getFromDBwithData : hardware link to the job
46
        var $computerfound        = 0;
47

    
48
        /**
49
         * Constructor
50
        **/
51
        function Job(){
52
                $this->table="glpi_tracking";
53
                $this->type=TRACKING_TYPE;
54
        }
55

    
56
        /**
57
         * Retrieve an item from the database with datas associated (hardwares)
58
         *
59
         *@param $ID ID of the item to get
60
         *@param $purecontent boolean : true : nothing change / false : convert to HTML display
61
         *@return true if succeed else false
62
        **/
63
        function getFromDBwithData ($ID,$purecontent) {
64

    
65
                global $DB,$LANG;
66

    
67
                if ($this->getFromDB($ID)){
68

    
69
                        if (!$purecontent) {
70
                                $this->fields["contents"] = nl2br(preg_replace("/\r\n\r\n/","\r\n",$this->fields["contents"]));
71
                        }
72

    
73
                        $this->getHardwareData();
74
                        return true;
75
                } else {
76
                        return false;
77
                }
78
        }
79

    
80
        /**
81
         * Retrieve data of the hardware linked to the ticket if exists
82
         *
83
         *@return nothing : set computerfound to 1 if founded
84
        **/
85
        function getHardwareData(){
86
                $m= new CommonItem;
87
                if ($m->getFromDB($this->fields["device_type"],$this->fields["computer"])){
88
                        $this->hardwaredatas=$m;
89
                        $this->computerfound=0;
90
                } else {
91
                        $this->hardwaredatas=$m;
92
                        $this->computerfound=1;
93
                }
94
        }
95
        function cleanDBonPurge($ID) {
96
                global $DB;
97

    
98
                $query="SELECT ID FROM glpi_followups WHERE tracking = '$ID'";
99
                $result=$DB->query($query);
100
                if ($DB->numrows($result)>0)
101
                        while ($data=$DB->fetch_array($result)){
102
                                $querydel="DELETE FROM glpi_tracking_planning WHERE id_followup = '".$data['ID']."'";
103
                                $DB->query($querydel);                                
104
                        }
105
                $query1="DELETE FROM glpi_followups WHERE tracking = '$ID'";
106
                $DB->query($query1);
107

    
108
        }
109

    
110
        function prepareInputForUpdate($input) {
111
                global $LANG,$CFG_GLPI;
112
                // Security checks
113
                if (!haveRight("assign_ticket","1")){
114
                        if (isset($input["assign"])){
115
                                // Can not steal or can steal and not assign to me
116
                                if (!haveRight("steal_ticket","1")||$input["assign"]!=$_SESSION["glpiID"]){
117
                                        unset($input["assign"]);
118
                                } 
119
                        }
120
                        if (isset($input["assign_ent"])){
121
                                unset($input["assign_ent"]);
122
                        }
123
                        if (isset($input["assign_group"])){
124
                                unset($input["assign_group"]);
125
                        }
126

    
127
                }
128

    
129
                if (!haveRight("update_ticket","1")){
130
                        // Manage assign and steal right
131
                        if (isset($input["assign"])){
132
                                $ret["assign"]=$input["assign"];
133
                        }
134
                        if (isset($input["assign_ent"])){
135
                                $ret["assign_ent"]=$input["assign_ent"];
136
                        }
137
                        if (isset($input["assign_group"])){
138
                                $ret["assign_group"]=$input["assign_group"];
139
                        }
140
                        // Can only update contents if no followups already added
141
                        $ret["ID"]=$input["ID"];
142
                        if (isset($input["contents"])){
143
                                $ret["contents"]=$input["contents"];
144
                        }
145
                        if (isset($input["name"])){
146
                                $ret["name"]=$input["name"];
147
                        }
148
                        $input=$ret;
149
                }
150

    
151
                // NEEDED ???? 
152
                if (isset($input["type"])&& $input["type"]==0&&!isset($input["item"])){
153
                        $input["computer"]=0;
154
                        $input["device_type"]=$input["type"];
155
                } else if (isset($input["item"])&& $input["item"]!=0&&isset($input["type"])&& $input["type"]!=0){
156
                        $input["computer"]=$input["item"];
157
                        $input["device_type"]=$input["type"];
158
                } 
159

    
160
                if (isset($input["computer"])&&$input["computer"]>=0&&isset($input["device_type"])&&$input["device_type"]>=0){
161
                        if (isset($this->fields['FK_group'])&&$this->fields['FK_group']){
162
                                $ci=new CommonItem;
163
                                $ci->getFromDB($input["device_type"],$input["computer"]);
164
                                if ($tmp=$ci->getField('FK_groups')){
165
                                        $input["FK_group"] = $tmp;
166
                                }
167
                        }
168
                } else if (isset($input["device_type"])&&$input["device_type"]==0){
169
                        $input["computer"]=0;
170
                } else {
171
                        unset($input["computer"]);
172
                        unset($input["device_type"]);
173
                }        
174

    
175

    
176
                if ( isset($_FILES['multiple']) ) {
177
                        unset($_FILES['multiple']);
178
                        $TMPFILE = $_FILES;
179
                } else {
180
                        $TMPFILE = array( $_FILES );
181
                }
182
                foreach ($TMPFILE as $_FILES) {
183
                        // add Document if exists
184
                        if (isset($_FILES['filename'])&&count($_FILES['filename'])>0&&$_FILES['filename']["size"]>0){
185
                                $input2=array();
186
                                $input2["name"]=addslashes(resume_text($LANG["tracking"][24]." ".$input["ID"],200));
187
                                $input2["FK_tracking"]=$input["ID"];
188
                                $input2["rubrique"]=$CFG_GLPI["default_rubdoc_tracking"];
189
                                $this->getFromDB($input["ID"]);
190
                                $input2["FK_entities"]=$this->fields["FK_entities"];
191
                                $input2["_only_if_upload_succeed"]=1;
192
                                $doc=new Document();
193
                                if ($docID=$doc->add($input2)){
194
                                        addDeviceDocument($docID,TRACKING_TYPE,$input["ID"]);
195
                                        // force update date_mod
196
                                        $input["date_mod"]=$_SESSION["glpi_currenttime"];
197
                                        if ($CFG_GLPI["followup_on_update_ticket"]){
198
                                                $input['_doc_added']=stripslashes($doc->fields["name"]);
199
                                        }
200
                                }
201
                        } else if (!empty($_FILES['filename']['name'])&&isset($_FILES['filename']['error'])&&$_FILES['filename']['error']){
202
                                addMessageAfterRedirect($LANG["document"][46]);
203
                        }
204
                }
205

    
206
                if (isset($input["document"])&&$input["document"]>0){
207
                        addDeviceDocument($input["document"],TRACKING_TYPE,$input["ID"]);
208
                        $doc=new Document();
209
                        $doc->getFromDB($input["document"]);
210
                        unset($input["document"]);
211
                        // Force date_mod of tracking
212
                        $input["date_mod"]=$_SESSION["glpi_currenttime"];
213
                        $input['_doc_added']=$doc->fields["name"];
214
                }
215

    
216
                // Old values for add followup in change
217
                if ($CFG_GLPI["followup_on_update_ticket"]){
218
                        $this->getFromDB($input["ID"]);
219
                        $input["_old_assign_name"]=getAssignName($this->fields["assign"],USER_TYPE);
220
                        $input["_old_assign"]=$this->fields["assign"];
221
                        $input["_old_assign_ent_name"]=getAssignName($this->fields["assign_ent"],ENTERPRISE_TYPE);
222
                        $input["_old_assign_group_name"]=getAssignName($this->fields["assign_group"],GROUP_TYPE);
223
                        $input["_old_category"]=$this->fields["category"];
224
                        $input["_old_item"]=$this->fields["computer"];
225
                        $input["_old_item_type"]=$this->fields["device_type"];
226
                        $input["_old_author"]=$this->fields["author"];
227
                        $input["_old_recipient"]=$this->fields["recipient"];
228
                        $input["_old_group"]=$this->fields["FK_group"];
229
                        $input["_old_priority"]=$this->fields["priority"];
230
                        $input["_old_status"]=$this->fields["status"];
231
                        $input["_old_request_type"]=$this->fields["request_type"];
232
                        $input["_old_cost_time"]=$this->fields["cost_time"];
233
                        $input["_old_cost_fixed"]=$this->fields["cost_fixed"];
234
                        $input["_old_cost_material"]=$this->fields["cost_material"];
235
                        $input["_old_date"]=$this->fields["date"];
236
                        $input["_old_closedate"]=$this->fields["closedate"];
237
                }
238

    
239
                return $input;
240
        }
241

    
242
        function pre_updateInDB($input,$updates) {
243
                global $LANG;
244

    
245
                // Status close : check dates
246
                if (ereg("old_",$this->fields["status"])&&(in_array("date",$updates)||in_array("closedate",$updates))){
247
                        // Invalid dates : no change
248
                        if ($this->fields["closedate"]<$this->fields["date"]){
249
                                addMessageAfterRedirect($LANG["tracking"][3]);
250
                                if (($key=array_search('date',$updates))!==false){
251
                                        unset($updates[$key]);
252
                                }
253
                                if (($key=array_search('closedate',$updates))!==false){
254
                                        unset($updates[$key]);
255
                                }
256
                        }
257
                }
258

    
259

    
260

    
261
                if (((in_array("assign",$updates)&&$input["assign"]>0)||(in_array("assign_ent",$updates)&&$input["assign_ent"]>0)||(in_array("assign_group",$updates)&&$input["assign_group"]>0))&&$this->fields["status"]=="new"){
262
                        $updates[]="status";
263
                        $this->fields["status"]="assign";
264
                }
265
                if (isset($input["status"])){
266
                        if (isset($input["assign_ent"])&&$input["assign_ent"]==0&&isset($input["assign_group"])&&$input["assign_group"]==0&&
267
                        isset($input["assign"])&&$input["assign"]==0&&$input["status"]=="assign"){
268
                                $updates[]="status";
269
                                $this->fields["status"]="new";
270
                        }
271

    
272
                        if (in_array("status",$updates)&&ereg("old_",$input["status"])){
273
                                $updates[]="closedate";
274
                                $this->fields["closedate"]=$_SESSION["glpi_currenttime"];
275
                                // If invalid date : set open date
276
                                if ($this->fields["closedate"]<$this->fields["date"]){
277
                                        $this->fields["closedate"]=$this->fields["date"];
278
                                }
279
                        }
280
                }
281

    
282
                if (in_array("author",$updates)){
283
                        $user=new User;
284
                        $user->getFromDB($input["author"]);
285
                        if (!empty($user->fields["email"])){
286
                                $updates[]="uemail";
287
                                $this->fields["uemail"]=$user->fields["email"];
288
                        }
289
                }
290

    
291
                return array($input,$updates);
292
        }
293

    
294
        function post_updateItem($input,$updates,$history=1) {
295
                global $CFG_GLPI,$LANG;
296

    
297
                if (count($updates)){
298
                        // New values for add followup in change
299
                        $change_followup_content="";
300
                        if (isset($input['_doc_added'])){
301
                                $change_followup_content=$LANG["mailing"][26]." ".$input['_doc_added'];
302
                        }
303
                        $global_mail_change_count=0;
304
        
305
                        // Update Ticket Tco
306
                        if (in_array("realtime",$updates)||in_array("cost_time",$updates)|| in_array("cost_fixed",$updates)||in_array("cost_material",$updates)){
307
                                $ci=new CommonItem;
308
                                if ($ci->getFromDB($this->fields["device_type"],$this->fields["computer"])){
309
                                        $newinput=array();
310
                                        $newinput['ID']=$this->fields["computer"];
311
                                        $newinput['ticket_tco']=computeTicketTco($this->fields["device_type"],$this->fields["computer"]);
312
                                        $ci->obj->update($newinput);
313
                                }
314
                        }
315

    
316
                        if ($CFG_GLPI["followup_on_update_ticket"]&&count($updates)){
317
        
318
        
319
                                foreach ($updates as $key)
320
                                switch ($key) {
321
                                        case "name":
322
                                                $change_followup_content.=$LANG["mailing"][45]."\n";
323
                                                $global_mail_change_count++;
324
                                                break;
325
                                        case "contents":
326
                                                $change_followup_content.=$LANG["mailing"][46]."\n";
327
                                                $global_mail_change_count++;
328
                                        break;
329
                                        case "date":
330
                                                $change_followup_content.=$LANG["mailing"][48].": ".$input["_old_date"]." -> ".$this->fields["date"]."\n";
331
                
332
                                                $global_mail_change_count++;
333
                                        break;
334
                                        case "closedate":
335
                                                // if update status from an not closed status : no mail for change closedate
336
                                                if (!in_array("status",$updates)||!ereg("old_",$input["status"])){
337
                                                        $change_followup_content.=$LANG["mailing"][49].": ".$input["_old_closedate"]." -> ".$this->fields["closedate"]."\n";
338
                        
339
                                                        $global_mail_change_count++;
340
                                                }
341
                                        break;
342
                                        case "status":
343
                                                $new_status=$this->fields["status"];
344
                                                $change_followup_content.=$LANG["mailing"][27].": ".getStatusName($input["_old_status"])." -> ".getStatusName($new_status)."\n";
345
                
346
                                                if (ereg("old_",$new_status))
347
                                                        $newinput["add_close"]="add_close";
348

    
349
                                                if (in_array("closedate",$updates))        
350
                                                        $global_mail_change_count++; // Manage closedate
351
                
352
                                                $global_mail_change_count++;
353
                                        break;
354
                                        case "author":
355
                                                $author=new User;
356
                                                $author->getFromDB($input["_old_author"]);
357
                                                $old_author_name=$author->getName();
358
                                                $author->getFromDB($this->fields["author"]);
359
                                                $new_author_name=$author->getName();
360
                                                $change_followup_content.=$LANG["mailing"][18].": $old_author_name -> ".$new_author_name."\n";
361
                
362
                                                $global_mail_change_count++;
363
                                        break;
364
                                        case "recipient":
365
                                                $recipient=new User;
366
                                                $recipient->getFromDB($input["_old_recipient"]);
367
                                                $old_recipient_name=$recipient->getName();
368
                                                $recipient->getFromDB($this->fields["recipient"]);
369
                                                $new_recipient_name=$recipient->getName();
370
                                                $change_followup_content.=$LANG["mailing"][50].": $old_recipient_name -> ".$new_recipient_name."\n";
371
                
372
                                                $global_mail_change_count++;
373
                                        break;
374
                                        case "FK_group" :
375
                                                $new_group=$this->fields["FK_group"];
376
                                                $old_group_name=ereg_replace("&nbsp;",$LANG["mailing"][109],getDropdownName("glpi_groups",$input["_old_group"]));
377
                                                $new_group_name=ereg_replace("&nbsp;",$LANG["mailing"][109],getDropdownName("glpi_groups",$new_group));
378
                                                $change_followup_content.=$LANG["mailing"][20].": ".$old_group_name." -> ".$new_group_name."\n";
379
                                                $global_mail_change_count++;
380
                                        break;
381
                                        case "priority" :
382
                                                $new_priority=$this->fields["priority"];
383
                                                $change_followup_content.=$LANG["mailing"][15].": ".getPriorityName($input["_old_priority"])." -> ".getPriorityName($new_priority)."\n";
384
                                                $global_mail_change_count++;                
385
                                        break;
386
                                        case "category":
387
                                                $new_category=$this->fields["category"];
388
                                                $old_category_name=ereg_replace("&nbsp;",$LANG["mailing"][100],getDropdownName("glpi_dropdown_tracking_category",$input["_old_category"]));
389
                                                $new_category_name=ereg_replace("&nbsp;",$LANG["mailing"][100],getDropdownName("glpi_dropdown_tracking_category",$new_category));
390
                                                $change_followup_content.=$LANG["mailing"][14].": ".$old_category_name." -> ".$new_category_name."\n";
391
                                                $global_mail_change_count++;
392
                                        break;
393
                                        case "request_type":
394
                                                $new_request_type=$this->fields["request_type"];
395
                                                $old_request_type_name=getRequestTypeName($input["_old_request_type"]);
396
                                                $new_request_type_name=getRequestTypeName($new_request_type);
397
                                                $change_followup_content.=$LANG["mailing"][21].": ".$old_request_type_name." -> ".$new_request_type_name."\n";
398
                                                $global_mail_change_count++;
399
                                        break;
400
                                        case "computer" :
401
                                        case "device_type":
402
                                                if (isset($already_done_computer_device_type_update)){
403
                                                        break;
404
                                                } else {
405
                                                        $already_done_computer_device_type_update=true;
406
                                                }
407
                                                $ci=new CommonItem;
408
                                                $ci->getFromDB($input["_old_item_type"],$input["_old_item"]);
409
                                                $old_item_name=$ci->getName();
410
                                                if ($old_item_name=="N/A"||empty($old_item_name))
411
                                                        $old_item_name=$LANG["mailing"][107];
412
                                                $ci->getFromDB($this->fields["device_type"],$this->fields["computer"]);
413
                                                $new_item_name=$ci->getName();
414
                                                if ($new_item_name=="N/A"||empty($new_item_name))
415
                                                        $new_item_name=$LANG["mailing"][107];
416
                
417
                                                $change_followup_content.=$LANG["mailing"][17].": $old_item_name -> ".$new_item_name."\n";
418
                                                if (in_array("computer",$updates)) $global_mail_change_count++;
419
                                                if (in_array("device_type",$updates)) $global_mail_change_count++;
420
                                        break;
421
                                        case "assign" :
422
                                                $new_assign_name=getAssignName($this->fields["assign"],USER_TYPE);
423
                                                if ($input["_old_assign"]==0){
424
                                                        $input["_old_assign_name"]=$LANG["mailing"][105];
425
                                                }
426
                                                $change_followup_content.=$LANG["mailing"][12].": ".$input["_old_assign_name"]." -> ".$new_assign_name."\n";
427
                                                $global_mail_change_count++;
428
                                        break;
429
                                        case "assign_ent" :
430
                                                $new_assign_ent_name=getAssignName($this->fields["assign_ent"],ENTERPRISE_TYPE);
431
                                                $change_followup_content.=$LANG["mailing"][12].": ".$input["_old_assign_ent_name"]." -> ".$new_assign_ent_name."\n";
432
                                                $global_mail_change_count++;
433
                                        break;
434
                                        case "assign_group" :
435
                                                $new_assign_group_name=getAssignName($this->fields["assign_group"],GROUP_TYPE);
436
                                                $change_followup_content.=$LANG["mailing"][12].": ".$input["_old_assign_group_name"]." -> ".$new_assign_group_name."\n";
437
                                                $global_mail_change_count++;
438
                                        break;
439
                                        case "cost_time":
440
                                                $change_followup_content.=$LANG["mailing"][42].": ".formatNumber($input["_old_cost_time"])." -> ".formatNumber($this->fields["cost_time"])."\n";
441
                                                $global_mail_change_count++;
442
                                        break;
443
                                        case "cost_fixed" :
444
                                                $change_followup_content.=$LANG["mailing"][43].": ".formatNumber($input["_old_cost_fixed"])." -> ".formatNumber($this->fields["cost_fixed"])."\n";
445
                                                $global_mail_change_count++;
446
                                        break;
447
                                        case "cost_material" :
448
                                                $change_followup_content.=$LANG["mailing"][44].": ".formatNumber($input["_old_cost_material"])." -> ".formatNumber($this->fields["cost_material"])."\n";
449
                                                $global_mail_change_count++;
450
                                        break;
451
                                        case "emailupdates":
452
                                                if ($this->fields["emailupdates"]){
453
                                                        $change_followup_content.=$LANG["mailing"][101]."\n";
454
                                                } else {
455
                                                        $change_followup_content.=$LANG["mailing"][102]."\n";
456
                                                }
457
                                                $global_mail_change_count++;
458
                                        break;
459
                                }
460
                        }
461
                        if (!in_array("assign",$updates)){
462
                                unset($input["_old_assign"]);
463
                        }
464
                        $mail_send=false;
465
        
466
                        if (!empty($change_followup_content)){ // Add followup if not empty
467
                                $newinput=array();
468
                                $newinput["contents"]=addslashes($change_followup_content);
469
                                $newinput["author"]=$_SESSION['glpiID'];
470
                                $newinput["private"]=0;
471
                                $newinput["hour"]=$newinput["minute"]=0;
472
                                $newinput["tracking"]=$this->fields["ID"];
473
                                $newinput["type"]="update";
474
                                $newinput["_do_not_check_author"]=true;
475
                                // pass _old_assign if assig changed
476
                                if (isset($input["_old_assign"])){
477
                                        $newinput["_old_assign"]=$input["_old_assign"];
478
                                } 
479
                                if (isset($input["status"])&&in_array("status",$updates)&&ereg("old_",$input["status"])){
480
                                        $newinput["type"]="finish";
481
                                }
482
                                $fup=new Followup();
483
                                $fup->add($newinput);
484
                                $mail_send=true;
485
                        }
486
        
487
                        
488
                        // Clean content to mail
489
                        $this->fields["contents"]=stripslashes($this->fields["contents"]);
490
        
491
                        if (!$mail_send&&count($updates)>$global_mail_change_count&&$CFG_GLPI["mailing"]){
492
                                $user=new User;
493
                                $user->getFromDB($_SESSION["glpiID"]);
494
                                $mailtype="update";
495
                                if ($input["status"]&&in_array("status",$updates)&&ereg("old_",$input["status"])){
496
                                        $mailtype="finish";
497
                                } 
498
                                if (isset($input["_old_assign"])){
499
                                        $this->fields["_old_assign"]=$input["_old_assign"];
500
                                } 
501
                                $mail = new Mailing($mailtype,$this,$user);
502
                                $mail->send();
503
                        }
504
                }
505
        }
506

    
507

    
508
        function prepareInputForAdd($input) {
509
                global $CFG_GLPI,$LANG;
510

    
511
//                print_r($input);
512
//                exit();
513
                // Check mandatory
514
                $mandatory_ok=true;
515

    
516
                // Do not check mandatory on auto import (mailgates)
517
                if (!isset($input['_auto_import'])){
518

    
519
                        $_SESSION["helpdeskSaved"]=$input;
520
        
521
                        if ($CFG_GLPI["ticket_content_mandatory"]&&(!isset($input['contents'])||empty($input['contents']))){
522
                                addMessageAfterRedirect($LANG["tracking"][8]);
523
                                $mandatory_ok=false;
524
                        }
525
                        if ($CFG_GLPI["ticket_title_mandatory"]&&(!isset($input['name'])||empty($input['name']))){
526
                                addMessageAfterRedirect($LANG["help"][40]);
527
                                $mandatory_ok=false;
528
                        }
529
                        if ($CFG_GLPI["ticket_category_mandatory"]&&(!isset($input['category'])||empty($input['category']))){
530
                                addMessageAfterRedirect($LANG["help"][41]);
531
                                $mandatory_ok=false;
532
                        }
533
                        if (isset($input['emailupdates'])&&$input['emailupdates']&&(!isset($input['uemail'])||empty($input['uemail']))){
534
                                addMessageAfterRedirect($LANG["help"][16]);
535
                                $mandatory_ok=false;
536
                        }
537
        
538
                        if (!$mandatory_ok){
539
                                return false;
540
                        }
541
                }
542
                unset($_SESSION["helpdeskSaved"]);
543

    
544
                // Manage helpdesk.html submission type
545
                unset($input["type"]);
546

    
547
                // No Auto set Import for external source
548
                if (!isset($input['_auto_import'])){
549
                        if (!isset($input["author"])){
550
                                if (isset($_SESSION["glpiID"])&&$_SESSION["glpiID"]>0)
551
                                        $input["author"]=$_SESSION["glpiID"];
552
                        }
553
                }
554

    
555
                // No Auto set Import for external source
556
                if (isset($_SESSION["glpiID"])&&!isset($input['_auto_import'])) {
557
                        $input["recipient"]=$_SESSION["glpiID"];
558
                } else if ($input["author"]) {
559
                        $input["recipient"]=$input["author"];
560
                }
561

    
562
                if (!isset($input["request_type"])) $input["request_type"]=1;
563
                if (!isset($input["status"])) $input["status"]="new";
564
                if (!isset($input["assign"])) $input["assign"]=0;
565
                
566
                $user=new User();
567
                if ($user->getFromDB($input["author"])){
568
                        $input['author_location']=$user->fields['location'];
569
                }
570

    
571
                if (!isset($input["date"])||$input["date"]=='0000-00-00 00:00'){
572
                        $input["date"] = $_SESSION["glpi_currenttime"];
573
                }
574

    
575
                if (isset($input["computer"])&&$input["computer"]==0){
576
                        $input["device_type"]=0;        
577
                }
578

    
579
                if ($input["device_type"]==0){
580
                        $input["computer"]=0;
581
                }
582

    
583
                // Auto group define
584
                if (isset($input["computer"])&&$input["computer"]&&$input["device_type"]){
585
                        $ci=new CommonItem;
586
                        $ci->getFromDB($input["device_type"],$input["computer"]);
587
                        if ($tmp=$ci->getField('FK_groups')){
588
                                $input["FK_group"] = $tmp;
589
                        }
590
                }
591

    
592
                if ($CFG_GLPI["auto_assign"]&&$input["assign"]==0&&isset($input["computer"])&&$input["computer"]>0&&isset($input["device_type"])&&$input["device_type"]>0){
593
                        $ci=new CommonItem;
594
                        $ci->getFromDB($input["device_type"],$input["computer"]);
595
                        if ($tmp=$ci->getField('tech_num')){
596
                                $input["assign"] = $tmp;
597
                                if ($input["assign"]>0){
598
                                        $input["status"] = "assign";
599
                                }
600
                        }
601
                }
602

    
603
                // Process Business Rules
604
                $rules=new TrackingBusinessRuleCollection();
605

    
606
                $input=$rules->processAllRules($input,$input);
607

    
608
                if (isset($input["emailupdates"])&&$input["emailupdates"]&&empty($input["uemail"])){
609
                        $user=new User();
610
                        $user->getFromDB($input["author"]);
611
                        $input["uemail"]=$user->fields["email"];
612
                }
613

    
614
                if (((isset($input["assign"])&&$input["assign"]>0)
615
                                ||(isset($input["assign_group"])&&$input["assign_group"]>0)
616
                                ||(isset($input["assign_ent"])&&$input["assign_ent"]>0))
617
                        &&$input["status"]=="new"){
618
                        $input["status"] = "assign";
619
                }
620

    
621
                if (isset($input["hour"])&&isset($input["minute"])){
622
                        $input["realtime"]=$input["hour"]+$input["minute"]/60;
623
                        $input["_hour"]=$input["hour"];
624
                        $input["_minute"]=$input["minute"];
625
                        unset($input["hour"]);
626
                        unset($input["minute"]);
627
                }
628

    
629
                if (isset($input["status"])&&strstr($input["status"],"old_")){
630
                        if (isset($input["date"])){
631
                                $input["closedate"]=$input["date"];
632
                        } else {
633
                                $input["closedate"]=$_SESSION["glpi_currenttime"];
634
                        }
635
                } 
636

    
637
                if (empty($input["name"])) {
638
                        $input["name"]=preg_replace('/\r\n/',' ',$input['contents']);
639
                        $input["name"]=preg_replace('/\n/',' ',$input['name']);
640
                        $input["name"]=substr($input['name'],0,70);
641
                }
642

    
643
                return $input;
644
        }
645

    
646
        function post_addItem($newID,$input) {
647
                global $LANG,$CFG_GLPI;
648

    
649
                // add Document if exists
650
                if (isset($_FILES['multiple']) ) {
651
                        unset($_FILES['multiple']);
652
                        $TMPFILE = $_FILES;
653
                } else {
654
                        $TMPFILE = array( $_FILES );
655
                }
656
                foreach ($TMPFILE as $_FILES) {
657
                        if (isset($_FILES['filename'])&&count($_FILES['filename'])>0&&$_FILES['filename']["size"]>0){
658
                                $input2=array();
659
                                $input2["name"]=$LANG["tracking"][24]." $newID";
660
                                $input2["FK_tracking"]=$newID;
661
                                $input2["FK_entities"]=$input["FK_entities"];
662
                                $input2["rubrique"]=$CFG_GLPI["default_rubdoc_tracking"];
663
                                $input2["_only_if_upload_succeed"]=1;
664
                                $doc=new Document();
665
                                if ($docID=$doc->add($input2))
666
                                        addDeviceDocument($docID,TRACKING_TYPE,$newID);
667
                        }
668
                }
669

    
670
                // Log this event
671
                logEvent($newID,"tracking",4,"tracking",getUserName($input["author"])." ".$LANG["log"][20]);
672

    
673
                $already_mail=false;
674
                if (((isset($input["_followup"])&&is_array($input["_followup"])&&strlen($input["_followup"]['contents']))||isset($input["plan"]))
675
                        ||(isset($input["_hour"])&&isset($input["_minute"])&&isset($input["realtime"])&&$input["realtime"]>0)){
676

    
677
                        $fup=new Followup();
678
                        $type="new";
679
                        if (isset($this->fields["status"])&&ereg("old_",$this->fields["status"])) $type="finish";
680
                        $toadd=array("type"=>$type,"tracking"=>$newID);
681
                        if (isset($input["_hour"])) $toadd["hour"]=$input["_hour"];
682
                        if (isset($input["_minute"])) $toadd["minute"]=$input["_minute"];
683
                        if (isset($input["_followup"]['contents'])&&strlen($input["_followup"]['contents'])) $toadd["contents"]=$input["_followup"]['contents'];
684
                        if (isset($input["_followup"]['private'])) $toadd["private"]=$input["_followup"]['private'];
685
                        if (isset($input["plan"])) $toadd["plan"]=$input["plan"];
686
                        $fup->add($toadd);
687
                        $already_mail=true;
688
                }
689

    
690
                // Processing Email
691
                if ($CFG_GLPI["mailing"]&&!$already_mail)
692
                {
693
                        $user=new User();
694
                        $user->getFromDB($input["author"]);
695

    
696
                        $this->fields=stripslashes_deep($this->fields);
697
                        $type="new";
698
                        if (isset($this->fields["status"])&&ereg("old_",$this->fields["status"])) $type="finish";
699
                        $mail = new Mailing($type,$this,$user);
700
                        $mail->send();
701
                }
702

    
703
        }
704

    
705
        // SPECIFIC FUNCTIONS
706
        /**
707
         * Number of followups of the ticket
708
         *
709
         *@param $with_private boolean : true : all ticket / false : only public ones
710
         *@return followup count
711
        **/
712
        function numberOfFollowups($with_private=1){
713
                global $DB;
714
                $RESTRICT="";
715
                if ($with_private!=1) $RESTRICT = " AND private='0'";
716
                // Set number of followups
717
                $query = "SELECT count(*) FROM glpi_followups WHERE tracking = '".$this->fields["ID"]."' $RESTRICT";
718
                $result = $DB->query($query);
719
                return $DB->result($result,0,0);
720

    
721
        }
722

    
723
        /**
724
         * Update realtime of the ticket based on realtim of the followups
725
         *
726
         *@param $ID ID of the ticket
727
         *@return boolean : success
728
        **/
729
        function updateRealTime($ID) {
730
                // update Status of Job
731

    
732
                global $DB;
733
                $query = "SELECT SUM(realtime) FROM glpi_followups WHERE tracking = '$ID'";
734
                if ($result = $DB->query($query)) {
735
                        $sum=$DB->result($result,0,0);
736
                        if (is_null($sum)) $sum=0;
737
                        $query2="UPDATE glpi_tracking SET realtime='".$sum."' WHERE ID='$ID'";
738
                        $DB->query($query2);
739
                        return true;
740
                } else {
741
                        return false;
742
                }
743
        }
744

    
745
        /**
746
         * Update date mod of the ticket
747
         *
748
         *@param $ID ID of the ticket
749
        **/
750
        function updateDateMod($ID) {
751
                global $DB;
752
                $query="UPDATE glpi_tracking SET date_mod='".$_SESSION["glpi_currenttime"]."' WHERE ID='$ID'";
753
                $DB->query($query);
754
        }
755

    
756
        /**
757
         * Get text describing Followups
758
         * 
759
        * @param $format text or html
760
        * @param $sendprivate true if both public and private followups have to be printed in the email
761
         */
762
        function textFollowups($format="text", $sendprivate=false) {
763
                // get the last followup for this job and give its contents as
764
                global $DB,$LANG;
765

    
766
                if (isset($this->fields["ID"])){
767
                        $query = "SELECT * FROM glpi_followups WHERE tracking = '".$this->fields["ID"]."' ".($sendprivate?"":" AND private = '0' ")." ORDER by date DESC";
768
                        $result=$DB->query($query);
769
                        $nbfollow=$DB->numrows($result);
770
                        if($format=="html"){
771
                                $message = "<div class='description'><strong>".$LANG["mailing"][4]." : $nbfollow<br></strong></div>\n";
772

    
773
                                if ($nbfollow>0){
774
                                        $fup=new Followup();
775
                                        while ($data=$DB->fetch_array($result)){
776
                                                $fup->getFromDB($data['ID']);
777
                                                $message .= "<strong>[ ".convDateTime($fup->fields["date"])." ] ".($fup->fields["private"]?"<i>".$LANG["common"][77]."</i>":"")."</strong>\n";
778
                                                $message .= "<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["job"][4].":</span> ".$fup->getAuthorName()."<br>";
779
                                                $message .= "<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["mailing"][3]."</span>:<br>".ereg_replace("\n","<br>",$fup->fields["contents"])."\n";
780
                                                if ($fup->fields["realtime"]>0)
781
                                                        $message .= "<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["mailing"][104].":</span> ".getRealtime($fup->fields["realtime"])."\n";
782

    
783
                                                $message.="<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["mailing"][25]."</span> ";
784
                                                $query2="SELECT * from glpi_tracking_planning WHERE id_followup='".$data['ID']."'";
785
                                                $result2=$DB->query($query2);
786
                                                if ($DB->numrows($result2)==0)
787
                                                        $message.=$LANG["job"][32]."\n";
788
                                                else {
789
                                                        $data2=$DB->fetch_array($result2);
790
                                                        $message.=convDateTime($data2["begin"])." -> ".convDateTime($data2["end"])."\n";
791
                                                }
792

    
793
                                                $message.=$LANG["mailing"][0]."\n";        
794
                                        }        
795
                                }
796
                        }else{ // text format
797
                                $message = $LANG["mailing"][1]."\n".$LANG["mailing"][4]." : $nbfollow\n".$LANG["mailing"][1]."\n";
798

    
799
                                if ($nbfollow>0){
800
                                        $fup=new Followup();
801
                                        while ($data=$DB->fetch_array($result)){
802
                                                $fup->getFromDB($data['ID']);
803
                                                $message .= "[ ".convDateTime($fup->fields["date"])." ]".($fup->fields["private"]?"\t".$LANG["common"][77]:"")."\n";
804
                                                $message .= $LANG["job"][4].": ".$fup->getAuthorName()."\n";
805
                                                $message .= $LANG["mailing"][3].":\n".$fup->fields["contents"]."\n";
806
                                                if ($fup->fields["realtime"]>0)
807
                                                        $message .= $LANG["mailing"][104].": ".getRealtime($fup->fields["realtime"])."\n";
808

    
809
                                                $message.=$LANG["mailing"][25]." ";
810
                                                $query2="SELECT * from glpi_tracking_planning WHERE id_followup='".$data['ID']."'";
811
                                                $result2=$DB->query($query2);
812
                                                if ($DB->numrows($result2)==0)
813
                                                        $message.=$LANG["job"][32]."\n";
814
                                                else {
815
                                                        $data2=$DB->fetch_array($result2);
816
                                                        $message.=convDateTime($data2["begin"])." -> ".convDateTime($data2["end"])."\n";
817
                                                }
818

    
819
                                                $message.=$LANG["mailing"][0]."\n";        
820
                                        }        
821
                                }
822

    
823

    
824
                        }
825
                        return $message;
826
                } else return "";
827
        }
828

    
829
        /**
830
         * Get text describing ticket
831
         * 
832
        * @param $format text or html
833
         */
834
        function textDescription($format="text"){
835
                global $DB,$LANG;
836

    
837

    
838
                $name=$LANG["help"][30];
839
                $contact='';
840
                $tech='';
841
                $name=$this->hardwaredatas->getType()." ".$this->hardwaredatas->getName();
842
                if ($this->hardwaredatas->obj!=NULL){
843
                        if (isset($this->hardwaredatas->obj->fields["serial"])&&!empty($this->hardwaredatas->obj->fields["serial"])){
844
                                $name.=" - #".$this->hardwaredatas->obj->fields["serial"];
845
                        }
846
                        if (isset($this->hardwaredatas->obj->fields["model"])&&$this->hardwaredatas->obj->fields["model"]>0){
847
                                $add="";
848
                                switch ($this->fields['device_type']){
849
                                        case MONITOR_TYPE:
850
                                                $add='_monitors';
851
                                                break;
852
                                        case NETWORKING_TYPE:
853
                                                $add='_networking';
854
                                                break;
855
                                        case PERIPHERAL_TYPE:
856
                                                $add='_peripherals';
857
                                                break;
858
                                        case PHONE_TYPE:
859
                                                $add='_phones';
860
                                                break;
861
                                        case PRINTER_TYPE:
862
                                                $add='_printers';
863
                                                break;
864
                                }
865
                                $name.=" - ".getDropdownName("glpi_dropdown_model".$add,$this->hardwaredatas->obj->fields["model"]);
866
                        }
867
                        if (isset($this->hardwaredatas->obj->fields["tech_num"])&&$this->hardwaredatas->obj->fields["tech_num"]>0){
868
                                        $tech=getUserName($this->hardwaredatas->obj->fields["tech_num"]);
869
                        }
870
                        if (isset($this->hardwaredatas->obj->fields["contact"])){
871
                                $contact=$this->hardwaredatas->obj->fields["contact"];
872
                        }
873
                        if (isset($this->hardwaredatas->obj->fields["FK_users"])){
874
                                $contact=getUserName($this->hardwaredatas->obj->fields["FK_users"]);
875
                        }
876
                        if (isset($this->hardwaredatas->obj->fields["FK_groups"])){
877
                                if (!empty($contact)) $contact.=" / ";
878
                                        $contact.=getDropdownName("glpi_groups",$this->hardwaredatas->obj->fields["FK_groups"]);
879
                        }
880
                }
881

    
882
                if($format=="html"){
883
                        $message= "<html><head> <style type=\"text/css\">";
884
                        $message.=".description{ color: inherit; background: #ebebeb; border-style: solid; border-color: #8d8d8d; border-width: 0px 1px 1px 0px; }";
885
                        $message.=" </style></head><body>";
886

    
887
                        $message.="<div class='description'><strong>".$LANG["mailing"][5]."</strong></div>\n";
888
                        $message.="<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["common"][57].":</span> ".$this->fields["name"]."\n";
889
                        $author=$this->getAuthorName();
890
                        if (empty($author)) $author=$LANG["mailing"][108];
891
                        $message.="<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["job"][4].":</span> ".$author."\n";
892
                        $message.="<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>". $LANG["search"][8].":</span> ".convDateTime($this->fields["date"])."\n";
893
                        $message.="<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>". $LANG["job"][44].":</span> ".getRequestTypeName($this->fields["request_type"])."\n";
894
                        $message.="<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>". $LANG["mailing"][7].":</span> ".$name."\n";
895
                        if (!empty($tech))
896
                                $message.="<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>". $LANG["common"][10].":</span> ".$tech."\n";
897
                        $message.= "<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["joblist"][0].":</span> ".getStatusName($this->fields["status"])."\n";
898
                        $assign=getAssignName($this->fields["assign"],USER_TYPE);
899
                        $assign_group="";
900
                        if (isset($this->fields["assign_group"])){
901
                                $assign_group=getAssignName($this->fields["assign_group"],GROUP_TYPE);
902
                        }
903
                        if ($assign=="[Nobody]"){
904
                                if (!empty($assign_group)){
905
                                        $assign=$assign_group;
906
                                } else {
907
                                        $assign=$LANG["mailing"][105];
908
                                }
909
                        } else {
910
                                if (!empty($assign_group)){
911
                                        $assign.=" / ".$assign_group;
912
                                }
913
                        }
914
                        $message.= "<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["mailing"][8].":</span> ".$assign."\n";
915
                        $message.="<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["joblist"][2].":</span> ".getPriorityName($this->fields["priority"])."\n";
916
                        if ($this->fields["device_type"]!=SOFTWARE_TYPE&&!empty($contact))
917
                                $message.= "<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["common"][18].":</span> ".$contact."\n";
918
                        if (isset($this->fields["emailupdates"]) && $this->fields["emailupdates"]){
919
                                $message.="<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["mailing"][103].":</span> ".$LANG["choice"][1]."\n";
920
                        } else {
921
                                $message.="<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["mailing"][103].":</span> ".$LANG["choice"][0]."\n";
922
                        }
923

    
924
                        $message.= "<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["common"][36].":</span> ";
925
                        if (isset($this->fields["category"])&&$this->fields["category"]){
926
                                $message.= getDropdownName("glpi_dropdown_tracking_category",$this->fields["category"]);
927
                        } else $message.=$LANG["mailing"][100];
928
                        $message.= "\n";
929
                        $message.="<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>". $LANG["mailing"][3].":</span><br>".ereg_replace("\n","<br>",$this->fields["contents"])."<br>\n";        
930

    
931
                }else{ //text format
932
                        $message = $LANG["mailing"][1]."\n*".$LANG["mailing"][5]."*\n".$LANG["mailing"][1]."\n";
933
                        
934
                        $message.=mailRow($LANG["common"][57],$this->fields["name"]);
935
                        $author=$this->getAuthorName();
936
                        if (empty($author)) $author=$LANG["mailing"][108];
937
                        $message.=mailRow($LANG["job"][4],$author);
938
                        $message.=mailRow($LANG["search"][8],convDateTime($this->fields["date"]));
939
                        $message.=mailRow($LANG["job"][44],getRequestTypeName($this->fields["request_type"]));
940
                        $message.=mailRow($LANG["mailing"][7],$name);
941
                        if (!empty($tech))
942
                                $message.= mailRow($LANG["common"][10],$tech);
943
                        $message.= mailRow($LANG["joblist"][0],getStatusName($this->fields["status"]));
944
                        $assign=getAssignName($this->fields["assign"],USER_TYPE);
945
                        $assign_group="";
946
                        if (isset($this->fields["assign_group"])){
947
                                $assign_group=getAssignName($this->fields["assign_group"],GROUP_TYPE);
948
                        }
949
                        if ($assign=="[Nobody]"){
950
                                if (!empty($assign_group)){
951
                                        $assign=$assign_group;
952
                                } else {
953
                                        $assign=$LANG["mailing"][105];
954
                                }
955
                        } else {
956
                                if (!empty($assign_group)){
957
                                        $assign.=" / ".$assign_group;
958
                                }
959
                        }
960

    
961
                        $message.= mailRow($LANG["mailing"][8],$assign);
962
                        $message.= mailRow($LANG["joblist"][2],getPriorityName($this->fields["priority"]));
963
                        if ($this->fields["device_type"]!=SOFTWARE_TYPE&&!empty($contact))
964
                                $message.= mailRow($LANG["common"][18],$contact);
965
                        if (isset($this->fields["emailupdates"]) && $this->fields["emailupdates"]){
966
                                $message.=mailRow($LANG["mailing"][103],$LANG["choice"][1]);
967
                        } else {
968
                                $message.=mailRow($LANG["mailing"][103],$LANG["choice"][0]);
969
                        }
970

    
971
                        
972
                        if (isset($this->fields["category"])&&$this->fields["category"]){
973
                                $message.= mailRow($LANG["common"][36],getDropdownName("glpi_dropdown_tracking_category",$this->fields["category"]));
974
                        } else $message.=mailRow($LANG["common"][36],$LANG["mailing"][100]);
975
                        $message.= "--\n";
976
                        $message.= $LANG["mailing"][3]." : \n".$this->fields["contents"]."\n";        
977
                        $message.="\n\n";
978

    
979
                }
980

    
981
                return $message;
982
        }
983

    
984

    
985
        /**
986
         * Get author name
987
         * 
988
         * @param $link boolean with link ?
989
         * @return string author name
990
         */
991
        function getAuthorName($link=0){
992
                return getUserName($this->fields["author"],$link);
993
        }
994

    
995
        /**
996
         * Is the current user have right to add followups to the current ticket ?
997
         * 
998
         * @return boolean
999
         */
1000
        function canAddFollowups(){
1001
                return ((haveRight("comment_ticket","1")&&$this->fields["author"]==$_SESSION["glpiID"])
1002
                        ||haveRight("comment_all_ticket","1")
1003
                        ||(isset($_SESSION["glpiID"])&&$this->fields["assign"]==$_SESSION["glpiID"])
1004
                        ||(isset($_SESSION["glpigroups"])&&in_array($this->fields["assign_group"],$_SESSION['glpigroups']))
1005
                        );
1006
        }
1007
        /**
1008
         * Is the current user have right to show the current ticket ?
1009
         * 
1010
         * @return boolean
1011
         */
1012
        function canShowTicket(){
1013
                return (
1014
                        haveRight("show_all_ticket","1")
1015
                        || (isset($_SESSION["glpiID"])&&$this->fields["author"]==$_SESSION["glpiID"])
1016
                        || (haveRight("show_group_ticket",'1')&&isset($_SESSION["glpigroups"])&&in_array($this->fields["FK_group"],$_SESSION["glpigroups"]))
1017
                        || (haveRight("show_assign_ticket",'1')&&(
1018
                                (isset($_SESSION["glpiID"])&&$this->fields["assign"]==$_SESSION["glpiID"])
1019
                                ||(isset($_SESSION["glpigroups"])&&in_array($this->fields["assign_group"],$_SESSION["glpigroups"]))
1020
                                )
1021
                        )
1022
                        );
1023
        }
1024

    
1025
}
1026

    
1027
/// Followup class
1028
class Followup  extends CommonDBTM {
1029

    
1030
        /**
1031
         * Constructor
1032
        **/
1033
        function Followup () {
1034
                $this->table="glpi_followups";
1035
                $this->type=-1;
1036
        }
1037

    
1038
        function cleanDBonPurge($ID) {
1039
                global $DB;
1040
                $querydel="DELETE FROM glpi_tracking_planning WHERE id_followup = '$ID'";
1041
                $DB->query($querydel);                                
1042
        }
1043

    
1044
        function post_deleteFromDB($ID){
1045
                $job=new Job();
1046
                $job->updateRealtime($this->fields['tracking']);
1047
                $job->updateDateMod($this->fields["tracking"]);                
1048
        }
1049

    
1050

    
1051
        function prepareInputForUpdate($input) {
1052

    
1053
                $input["realtime"]=$input["hour"]+$input["minute"]/60;
1054
                if (isset($_SESSION["glpiID"])){
1055
                        $input["author"]=$_SESSION["glpiID"];
1056
                }
1057

    
1058
                if (isset($input["plan"])){
1059
                        $input["_plan"]=$input["plan"];
1060
                        unset($input["plan"]);
1061
                }
1062
                return $input;
1063
        }
1064

    
1065
        function post_updateItem($input,$updates,$history=1) {
1066
                global $CFG_GLPI;
1067

    
1068
                $job=new Job;
1069
                $mailsend=false;
1070
                if ($job->getFromDB($input["tracking"])){
1071
                        $job->updateDateMod($input["tracking"]);
1072
                        
1073
                        if (count($updates)){
1074
                
1075
                                if ($CFG_GLPI["mailing"]&&
1076
                                (in_array("contents",$updates)||isset($input['_need_send_mail']))){
1077
                                        $user=new User;
1078
                                        $user->getFromDB($_SESSION["glpiID"]);
1079
                                        $mail = new Mailing("followup",$job,$user,(isset($input["private"]) && $input["private"]));
1080
                                        $mail->send();
1081
                                        $mailsend=true;
1082
                                }
1083
                
1084
                                if (in_array("realtime",$updates)) {
1085
                                        $job->updateRealTime($input["tracking"]);
1086
                                }
1087
                        }
1088
                }
1089
                
1090
                if (isset($input["_plan"])){
1091

    
1092
                        $pt=new PlanningTracking();
1093
                        // Update case
1094
                        if (isset($input["_plan"]["ID"])){
1095
                                $input["_plan"]['id_followup']=$input["ID"];
1096
                                $input["_plan"]['id_tracking']=$input['tracking'];
1097
                                $input["_plan"]['_nomail']=$mailsend;
1098

    
1099
                                if (!$pt->update($input["_plan"])){
1100
                                        return false;
1101
                                }
1102
                                unset($input["_plan"]);
1103
                        // Add case
1104
                        } else {
1105
                                $input["_plan"]['id_followup']=$input["ID"];
1106
                                $input["_plan"]['id_tracking']=$input['tracking'];
1107
                                $input["_plan"]['_nomail']=1;
1108

    
1109
                                if (!$pt->add($input["_plan"])){
1110
                                        return false;
1111
                                }
1112
                                unset($input["_plan"]);
1113
                                $input['_need_send_mail']=true;
1114
                        }
1115
                }
1116
        }
1117

    
1118
        function prepareInputForAdd($input) {
1119

    
1120
                $input["_isadmin"]=haveRight("comment_all_ticket","1");
1121

    
1122
                $input["_job"]=new Job;
1123
                if ($input["_job"]->getFromDB($input["tracking"])){
1124
                        // Security to add unauthorized followups
1125
                        if (!isset($input['_do_not_check_author'])
1126
                        &&$input["_job"]->fields["author"]!=$_SESSION["glpiID"]
1127
                        &&!$input["_job"]->canAddFollowups()) {
1128
                                return false;
1129
                        }
1130
                } else {
1131
                        return false;
1132
                }
1133

    
1134
                // Pass old assign From Job in case of assign change
1135
                if (isset($input["_old_assign"])){
1136
                        $input["_job"]->fields["_old_assign"]=$input["_old_assign"];
1137
                }
1138

    
1139

    
1140
                if (!isset($input["type"])) $input["type"]="followup";
1141
                $input["_type"]=$input["type"];
1142
                unset($input["type"]);
1143

    
1144
                $input['_close']=0;
1145
                unset($input["add"]);
1146

    
1147
                if (!isset($input["author"]))
1148
                        $input["author"]=$_SESSION["glpiID"];
1149

    
1150
                if ($input["_isadmin"]&&$input["_type"]!="update"){
1151
                        if (isset($input['plan'])){
1152
                                $input['_plan']=$input['plan'];
1153
                                unset($input['plan']);
1154
                        }        
1155
                        if (isset($input["add_close"])) $input['_close']=1;
1156
                        unset($input["add_close"]);
1157

    
1158
                        if (!isset($input["hour"])){
1159
                                $input["hour"]=0;
1160
                        }
1161
                        if (!isset($input["minute"])){
1162
                                $input["minute"]=0;
1163
                        }
1164
                        if ($input["hour"]>0||$input["minute"]>0)
1165
                                $input["realtime"]=$input["hour"]+$input["minute"]/60;
1166
                }
1167

    
1168
                unset($input["minute"]);
1169
                unset($input["hour"]);
1170

    
1171
                $input["date"] = $_SESSION["glpi_currenttime"];
1172

    
1173
                return $input;
1174
        }
1175

    
1176
        function post_addItem($newID,$input) {
1177
                global $CFG_GLPI;
1178

    
1179
                $job=new Job();
1180
                $job->getFromDB($input["tracking"]);
1181

    
1182
                $job->updateDateMod($input["tracking"]);
1183

    
1184
                if (isset($input["realtime"])&&$input["realtime"]>0) {
1185
                        $job->updateRealTime($input["tracking"]);
1186
                }
1187

    
1188

    
1189
                if ($input["_isadmin"]&&$input["_type"]!="update"){
1190

    
1191
                        if (isset($input["_plan"])){
1192
                                $input["_plan"]['id_followup']=$newID;
1193
                                $input["_plan"]['id_tracking']=$input['tracking'];
1194
                                $input["_plan"]['_nomail']=1;
1195
                                $pt=new PlanningTracking();
1196

    
1197
                                if (!$pt->add($input["_plan"])){
1198
                                        return false;
1199
                                }
1200
                        }
1201

    
1202

    
1203
                        if ($input["_close"]&&$input["_type"]!="update"&&$input["_type"]!="finish"){
1204
                                $updates[]="status";
1205
                                $updates[]="closedate";
1206
                                $input["_job"]->fields["status"]="old_done";
1207
                                $input["_job"]->fields["closedate"] = $_SESSION["glpi_currenttime"];
1208
                                $input["_job"]->updateInDB($updates);
1209
                        }
1210

    
1211
                }
1212

    
1213
                if ($CFG_GLPI["mailing"]){
1214
                        if ($input["_close"]) $input["_type"]="finish";
1215
                        $user=new User;
1216
                        if (!isset($input['_auto_import'])&&isset($_SESSION["glpiID"])){
1217
                                $user->getFromDB($_SESSION["glpiID"]);
1218
                        }
1219
                        $mail = new Mailing($input["_type"],$input["_job"],$user,
1220
                                                (isset($input["private"])&&$input["private"]));
1221
                        $mail->send();
1222
                }
1223
        }
1224

    
1225

    
1226
        // SPECIFIC FUNCTIONS
1227

    
1228
        /**
1229
         * Get the author name of the followup
1230
         * @param $link insert link ?
1231
         *
1232
         *@return string of the author name
1233
        **/
1234
        function getAuthorName($link=0){
1235
                return getUserName($this->fields["author"],$link);
1236
        }        
1237

    
1238
}
1239

    
1240

    
1241

    
1242
?>
Redmine Appliance - Powered by TurnKey Linux