Improve handling of deleted attachments
[freeside.git] / httemplate / edit / process / cust_main_attach.cgi
1 %if ($error) {
2 %  $cgi->param('error', $error);
3 <% $cgi->redirect(popurl(2). 'cust_main_attach.cgi?'. $cgi->query_string ) %>
4 %} else {
5 % my $act = 'added';
6 % $act = 'updated' if ($attachnum);
7 % $act = 'purged' if($attachnum and $purge);
8 % $act = 'undeleted' if($attachnum and $undelete);
9 % $act = 'deleted' if($attachnum and $delete);
10 <% header('Attachment ' . $act ) %>
11     <SCRIPT TYPE="text/javascript">
12       window.top.location.reload();
13     </SCRIPT>
14     </BODY></HTML>
15 % }
16 <%init>
17
18 my $error;
19 $cgi->param('custnum') =~ /^(\d+)$/
20   or die "Illegal custnum: ". $cgi->param('custnum');
21 my $custnum = $1;
22
23 $cgi->param('attachnum') =~ /^(\d*)$/
24   or die "Illegal attachnum: ". $cgi->param('attachnum');
25 my $attachnum = $1;
26
27 my $curuser = $FS::CurrentUser::CurrentUser;
28 my $otaker = $curuser->name;
29 $otaker = $curuser->username if ($otaker eq "User, Legacy");
30
31 my $delete = $cgi->param('delete');
32 my $undelete = $cgi->param('undelete');
33 my $purge = $cgi->param('purge');
34
35 my $new = new FS::cust_attachment ( {
36   attachnum => $attachnum,
37   custnum   => $custnum,
38   _date     => time,
39   otaker    => $otaker,
40   disabled  => '',
41 });
42 my $old;
43
44 if($attachnum) {
45   $old = qsearchs('cust_attachment', { attachnum => $attachnum });
46   if(!$old) {
47     $error = "Attachnum '$attachnum' not found";
48   }
49   elsif($purge) { # do nothing
50   }
51   else {
52     map { $new->$_($old->$_) } 
53       ('_date', 'otaker', 'body', 'disabled');
54     $new->filename($cgi->param('filename') || $old->filename);
55     $new->mime_type($cgi->param('mime_type') || $old->mime_type);
56     if($delete and not $old->disabled) {
57       $new->disabled(time);
58     }
59     if($undelete and $old->disabled) {
60       $new->disabled('');
61     }
62   }
63 }
64 else { # This is a new attachment, so require a file.
65
66   my $filename = $cgi->param('file');
67   if($filename) {
68     $new->filename($filename);
69     $new->mime_type($cgi->uploadInfo($filename)->{'Content-Type'});
70     
71     local $/;
72     my $fh = $cgi->upload('file');
73     $new->body(<$fh>);
74   }
75   else {
76     $error = 'No file uploaded';
77   }
78 }
79 my $action = 'Add';
80 $action = 'Edit' if $attachnum;
81 $action = 'Delete' if $attachnum and $delete;
82 $action = 'Undelete' if $attachnum and $undelete;
83 $action = 'Purge' if $attachnum and $purge;
84
85 $error = 'access denied' unless $curuser->access_right($action . ' attachment');
86
87 if(!$error) {
88   if($old and $old->disabled and $purge) {
89     $error = $old->delete;
90   }
91   elsif($old) {
92     $error = $new->replace($old);
93   }
94   else {
95     $error = $new->insert;
96   }
97 }
98
99 </%init>