default to a session cookie instead of setting an explicit timeout, weird timezone...
[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 <& /elements/popup-topreload.html, mt("Attachment $act") &>
11 % }
12 <%init>
13
14 my $error;
15 $cgi->param('custnum') =~ /^(\d+)$/
16   or die "Illegal custnum: ". $cgi->param('custnum');
17 my $custnum = $1;
18
19 $cgi->param('attachnum') =~ /^(\d*)$/
20   or die "Illegal attachnum: ". $cgi->param('attachnum');
21 my $attachnum = $1;
22
23 my $filename = $cgi->param('file');
24 # strip directory names; thanks, IE7
25 $filename =~ s!.*[\/\\]!!;
26
27 my $curuser = $FS::CurrentUser::CurrentUser;
28
29 my $delete = $cgi->param('delete');
30 my $undelete = $cgi->param('undelete');
31 my $purge = $cgi->param('purge');
32
33 my $new = new FS::cust_attachment ( {
34   attachnum => $attachnum,
35   custnum   => $custnum,
36   _date     => time,
37   usernum   => $curuser->usernum,
38   disabled  => '',
39 });
40 my $old;
41
42 if($attachnum) {
43   $old = qsearchs('cust_attachment', { attachnum => $attachnum });
44   if(!$old) {
45     $error = "Attachnum '$attachnum' not found";
46   }
47   elsif($purge) { # do nothing
48   }
49   else {
50     map { $new->$_($old->$_) } 
51       ('_date', 'otaker', 'body', 'disabled');
52     $new->filename($filename || $old->filename);
53     $new->mime_type($cgi->param('mime_type') || $old->mime_type);
54     $new->title( scalar($cgi->param('title')) );
55     if($delete and not $old->disabled) {
56       $new->disabled(time);
57     }
58     if($undelete and $old->disabled) {
59       $new->disabled('');
60     }
61   }
62 }
63 else { # This is a new attachment, so require a file.
64
65   if($filename) {
66     $new->filename($filename);
67     # use the original filename here, not the stripped form
68     $new->mime_type(
69       $cgi->uploadInfo( scalar($cgi->param('file')) )->{'Content-Type'}
70     );
71     $new->title( scalar($cgi->param('title')) );
72     
73     local $/;
74     my $fh = $cgi->upload('file');
75     $new->body(<$fh>);
76   }
77   else {
78     $error = 'No file uploaded';
79   }
80 }
81 my $action = 'Add';
82 $action = 'Edit' if $attachnum;
83 $action = 'Delete' if $attachnum and $delete;
84 $action = 'Undelete' if $attachnum and $undelete;
85 $action = 'Purge' if $attachnum and $purge;
86
87 $error = 'access denied' unless $curuser->access_right($action . ' attachment');
88
89 if(!$error) {
90   if($old and $old->disabled and $purge) {
91     $error = $old->delete;
92   }
93   elsif($old) {
94     $error = $new->replace($old);
95   }
96   else {
97     $error = $new->insert;
98   }
99 }
100
101 </%init>