'Download attachment', #NEW
'Add attachment', #NEW
'Edit attachment', #NEW
+ 'Delete attachment', #NEW
+ 'View deleted attachments', #NEW
+ 'Undelete attachment', #NEW
+ 'Purge attachment', #NEW
'Bill customer now', #NEW
'Bulk send customer notices', #NEW
],
<INPUT TYPE="submit" NAME="submit"
VALUE="<% $attachnum ? "Apply Changes" : "Upload File" %>">
-% if(defined $attach) {
+% if(defined $attach and $curuser->access_right('Delete attachment')) {
<BR>
<INPUT TYPE="submit" NAME="delete" value="Delete File">
% }
<%init>
+my $curuser = $FS::CurrentUser::CurrentUser;
my $attachnum = '';
my $attach;
if ( $cgi->param('error') ) {
my $action = $attachnum ? 'Edit' : 'Add';
die "access denied"
- unless $FS::CurrentUser::CurrentUser->access_right("$action customer note");
+ unless $curuser->access_right("$action customer note");
</%init>
%} else {
% my $act = 'added';
% $act = 'updated' if ($attachnum);
+% $act = 'purged' if($attachnum and $purge);
% $act = 'undeleted' if($attachnum and $undelete);
% $act = 'deleted' if($attachnum and $delete);
<% header('Attachment ' . $act ) %>
or die "Illegal attachnum: ". $cgi->param('attachnum');
my $attachnum = $1;
-my $otaker = $FS::CurrentUser::CurrentUser->name;
-$otaker = $FS::CurrentUser::CurrentUser->username
- if ($otaker eq "User, Legacy");
+my $curuser = $FS::CurrentUser::CurrentUser;
+my $otaker = $curuser->name;
+$otaker = $curuser->username if ($otaker eq "User, Legacy");
my $delete = $cgi->param('delete');
my $undelete = $cgi->param('undelete');
+my $purge = $cgi->param('purge');
my $new = new FS::cust_attachment ( {
attachnum => $attachnum,
if(!$old) {
$error = "Attachnum '$attachnum' not found";
}
+ elsif($purge) { # do nothing
+ }
else {
map { $new->$_($old->$_) }
('_date', 'otaker', 'body', 'disabled');
$error = 'No file uploaded';
}
}
-my $user = $FS::CurrentUser::CurrentUser;
+my $action = 'Add';
+$action = 'Edit' if $attachnum;
+$action = 'Delete' if $attachnum and $delete;
+$action = 'Undelete' if $attachnum and $undelete;
+$action = 'Purge' if $attachnum and $purge;
-$error = 'access denied' unless $user->access_right(($old ? 'Edit' : 'Add') . ' attachment');
+$error = 'access denied' unless $curuser->access_right($action . ' attachment');
if(!$error) {
- if($old) {
+ if($old and $old->disabled and $purge) {
+ $error = $old->delete;
+ }
+ elsif($old) {
$error = $new->replace($old);
}
else {
+<% $attach->body %>
<%init>
my ($query) = $cgi->keywords;
$query =~ /^(\d+)$/;
my $attachnum = $1 or die 'Invalid attachment number';
$FS::CurrentUser::CurrentUser->access_right('Download attachment') or die 'access denied';
-my $attach = qsearchs('cust_attachment', { attachnum => $attachnum }) or die 'Attachment not found: $attachnum';
+my $attach = qsearchs('cust_attachment', { attachnum => $attachnum }) or die "Attachment not found: $attachnum";
+die 'access denied' if $attach->disabled;
$m->clear_buffer;
$r->content_type($attach->mime_type || 'text/plain');
$r->headers_out->add('Content-Disposition' => 'attachment;filename=' . $attach->filename);
-binmode STDOUT;
-print STDOUT $attach->body;
</%init>
</TABLE></TABLE>
<BR><BR>
% }
-
+<A NAME="notes">
% my $notecount = scalar($cust_main->notes());
% if ( ! $conf->exists('cust_main-disable_notes') || $notecount) {
%>
% }
<% include('cust_main/attachments.html', 'custnum' => $cust_main->custnum ) %>
+% if($cgi->param('show_deleted')) {
+<A HREF="<% $p.'view/cust_main.cgi?custnum=' . $cust_main->custnum .
+ ($view ? ";show=$view" : '') . '#notes'
+ %>"><I>(Show active attachments)</I></A>
+% }
+% elsif($curuser->access_right('View deleted attachments')) {
+<A HREF="<% $p.'view/cust_main.cgi?custnum=' . $cust_main->custnum .
+ ($view ? ";show=$view" : '') . ';show_deleted=1#notes'
+ %>"><I>(Show deleted attachments)</I></A>
+% }
<BR>
% }
% my $bgcolor1 = '#eeeeee';
% my $bgcolor2 = '#ffffff';
% my $bgcolor = '';
+% if($cgi->param('show_deleted')) {
+% if ($curuser->access_right('View deleted attachments')) {
+% @attachments = grep { $_->disabled } @attachments;
+% }
+% else {
+% @attachments = ();
+% }
+% }
+% else {
+% @attachments = grep { not $_->disabled } @attachments;
+% }
%
-% foreach my $attach ((grep { $_->disabled } @attachments),
-% (grep { ! $_->disabled } @attachments)) {
+% foreach my $attach (@attachments) {
%
% if ( $bgcolor eq $bgcolor1 ) {
% $bgcolor = $bgcolor2;
% my $pop = popurl(3);
% my $attachnum = $attach->attachnum;
% my $edit = '';
-% my $download = '';
-% if($attach->disabled) {
-% my $onclick = include('/elements/popup_link_onclick.html',
-% 'action' => popurl(2).
-% 'edit/process/cust_main_attach.cgi'.
-% "?custnum=$custnum;".
-% "attachnum=$attachnum;".
-% "undelete=1",
-% 'actionlabel' => 'Undelete attachment',
-% 'width' => 616,
-% 'height' => 408,
-% 'frame' => 'top',
-% );
-% my $clickjs = qq!onclick="$onclick"!;
-% if($curuser->access_right('Edit attachment')) {
-% $edit = qq! <A HREF="javascript:void(0);" $clickjs>(undelete)</A>!;
+% if($attach->disabled) { # then you can undelete it or purge it.
+% if ($curuser->access_right('Undelete attachment')) {
+% my $clickjs = popup('edit/process/cust_main_attach.cgi?'.
+% "custnum=$custnum;attachnum=$attachnum;".
+% "undelete=1",
+% 'Undelete attachment');
+% $edit .= qq! <A HREF="javascript:void(0);" $clickjs>(undelete)</A>!;
+% }
+% if ($curuser->access_right('Purge attachment')) {
+% my $clickjs = popup('edit/process/cust_main_attach.cgi?'.
+% "custnum=$custnum;attachnum=$attachnum;".
+% "purge=1",
+% 'Purge attachment');
+% $edit .= qq! <A HREF="javascript:void(0);" $clickjs>(purge)</A>!;
% }
% }
-% else {
-% my $onclick = include( '/elements/popup_link_onclick.html',
-% 'action' => popurl(2).
-% 'edit/cust_main_attach.cgi'.
-% "?custnum=$custnum".
-% ";attachnum=$attachnum",
-% 'actionlabel' => 'Edit customer note',
-% 'width' => 616,
-% 'height' => 408,
-% 'frame' => 'top',
-% );
-% my $clickjs = qq!onclick="$onclick"!;
-%
+% else { # you can download or edit it
% if ($curuser->access_right('Edit attachment') ) {
-% $edit = qq! <A HREF="javascript:void(0);" $clickjs>(edit)</A>!;
+% my $clickjs = popup('edit/cust_main_attach.cgi?'.
+% "custnum=$custnum;attachnum=$attachnum",
+% 'Edit attachment properties');
+% $edit .= qq! <A HREF="javascript:void(0);" $clickjs>(edit)</A>!;
+% }
+% if($curuser->access_right('Delete attachment') ) {
+% my $clickjs = popup('edit/process/cust_main_attach.cgi?'.
+% "custnum=$custnum;attachnum=$attachnum;".
+% "delete=1",
+% 'Delete attachment');
+% $edit .= qq! <A HREF="javascript:void(0);" $clickjs>(delete)</A>!;
% }
% if ($curuser->access_right('Download attachment') ) {
-% $download = qq! <A HREF="!.popurl(1).'attachment.html?'.$attachnum.qq!">(download)</A>!;
+% $edit .= qq! <A HREF="!.popurl(1).'attachment.html?'.$attachnum.qq!">(download)</A>!;
% }
% }
<% size_units( $attach->size ) %>
</TD>
<TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
- <% $edit %>
- <% $download %>
+ <% $edit %>
</TD>
- <% $attach->disabled ? '</I>' : '' %>
</TR>
% } #end display notes
return int($bytes / 1048576)."M";
}
+sub popup {
+ my ($url, $label) = @_;
+ my $onclick =
+ include('/elements/popup_link_onclick.html',
+ 'action' => popurl(2).$url,
+ 'actionlabel' => $label,
+ 'width' => 616,
+ 'height' => 408,
+ 'frame' => 'top',
+ );
+ return qq!onclick="$onclick"!;
+}
+
+
</%init>