implemented audio file web forms for domains and subscribers

2.0@2434
Daniel Tiefnig 17 years ago
parent 7b6ac4f222
commit 86d5caf117

@ -72,6 +72,10 @@ Attempt to render a view, if needed.
sub end : ActionClass('RenderView') {
my ( $self, $c ) = @_;
if(defined $c->stash->{current_view} and $c->stash->{current_view} eq 'Plain') {
return 1;
}
$c->stash->{current_view} = $c->config->{view};
unless($c->response->{status} =~ /^3/) { # only if not a redirect

@ -14,7 +14,7 @@ Catalyst Controller.
=head1 METHODS
=head2 index
=head2 index
Display domain list.
@ -49,7 +49,7 @@ sub index : Private {
return 1;
}
=head2 do_edit_domain
=head2 do_edit_domain
Change settings for a domain.
@ -96,7 +96,7 @@ sub do_edit_domain : Local {
return;
}
=head2 do_create_domain
=head2 do_create_domain
Create a new domain.
@ -144,7 +144,7 @@ sub do_create_domain : Local {
return;
}
=head2 do_delete_domain
=head2 do_delete_domain
Delete a domain.
@ -177,7 +177,7 @@ Show details for a given domain: rewrite rules
sub detail : Local {
my ( $self, $c ) = @_;
$c->stash->{template} = 'tt/domain_detail.tt';
my $domain = $c->request->params->{domain};
my $domain_rw;
@ -188,6 +188,31 @@ sub detail : Local {
$c->stash->{domain} = $domain_rw;
$c->stash->{iteditid} = $c->request->params->{iteditid};
my $audio_files;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_audio_files',
{ domain => $domain },
\$audio_files
);
$c->stash->{audio_files} = $$audio_files{result} if eval { @{$$audio_files{result}} };
$c->stash->{edit_audio} = $c->request->params->{edit_audio};
if(exists $c->session->{acrefill}) {
$c->stash->{acrefill} = $c->session->{acrefill};
delete $c->session->{acrefill};
}
if(exists $c->session->{aerefill}) {
$c->stash->{aerefill} = $c->session->{aerefill};
delete $c->session->{aerefill};
} elsif($c->request->params->{edit_audio}) {
foreach my $audio (eval { @{$$audio_files{result}} }) {
if($$audio{handle} eq $c->request->params->{edit_audio}) {
$c->stash->{aerefill} = $audio;
last;
}
}
}
return 1;
}
@ -315,12 +340,166 @@ sub delete_rewrite : Local {
return;
}
=head2 do_create_audio
Store a new audio file in the database.
=cut
sub do_create_audio : Local {
my ( $self, $c ) = @_;
my %messages;
my %settings;
$settings{domain} = $c->request->params->{domain};
unless(length $settings{domain}) {
$c->response->redirect("/domain");
return;
}
$settings{handle} = $c->request->params->{handle};
$settings{data}{description} = $c->request->params->{description}
if length $c->request->params->{description};
my $upload = $c->req->upload('cupload_audio');
$settings{data}{audio} = eval { $upload->slurp };
unless(keys %messages) {
if($c->model('Provisioning')->call_prov( $c, 'voip', 'create_audio_file',
\%settings,
undef))
{
$messages{audiomsg} = 'Web.AudioFile.Created';
$c->session->{messages} = \%messages;
$c->response->redirect("/domain/detail?domain=$settings{domain}#audio");
return;
}
}
$messages{audioerr} = 'Client.Voip.InputErrorFound';
$c->session->{messages} = \%messages;
$c->session->{acrefill} = \%settings;
$c->response->redirect("/domain/detail?domain=$settings{domain}#audio");
return;
}
=head2 do_update_audio
Update an audio file in the database.
=cut
sub do_update_audio : Local {
my ( $self, $c ) = @_;
my %messages;
my %settings;
$settings{domain} = $c->request->params->{domain};
unless(length $settings{domain}) {
$c->response->redirect("/domain");
return;
}
$settings{handle} = $c->request->params->{handle};
unless(length $settings{handle}) {
$c->response->redirect("/domain/detail?domain=$settings{domain}");
return;
}
$settings{data}{description} = $c->request->params->{description};
my $upload = $c->req->upload('eupload_audio');
$settings{data}{audio} = eval { $upload->slurp } if defined $upload;
unless(keys %messages) {
if($c->model('Provisioning')->call_prov( $c, 'voip', 'update_audio_file',
\%settings,
undef))
{
$messages{audiomsg} = 'Web.AudioFile.Updated';
$c->session->{messages} = \%messages;
$c->response->redirect("/domain/detail?domain=$settings{domain}#audio");
return;
}
$c->response->redirect("/domain/detail?domain=$settings{domain}&edit_audio=$settings{handle}#audio");
return;
}
$messages{audioerr} = 'Client.Voip.InputErrorFound';
$c->session->{messages} = \%messages;
$c->session->{aerefill} = $settings{data};
$c->response->redirect("/domain/detail?domain=$settings{domain}&edit_audio=$settings{handle}#audio");
return;
}
=head2 do_delete_audio
Delete an audio file from the database.
=cut
sub do_delete_audio : Local {
my ( $self, $c ) = @_;
my %settings;
$settings{domain} = $c->request->params->{domain};
unless(length $settings{domain}) {
$c->response->redirect("/domain");
return;
}
$settings{handle} = $c->request->params->{handle};
unless(length $settings{handle}) {
$c->response->redirect("/domain/detail?domain=$settings{domain}");
return;
}
if($c->model('Provisioning')->call_prov( $c, 'voip', 'delete_audio_file',
\%settings,
undef))
{
$c->session->{messages} = { provmsg => 'Web.AudioFile.Deleted' };
$c->response->redirect("/domain/detail?domain=$settings{domain}#audio");
return;
}
$c->response->redirect("/domain/detail?domain=$settings{domain}#audio");
return;
}
=head2 listen_audio
Listen to an audio file from the database.
=cut
sub listen_audio : Local {
my ( $self, $c ) = @_;
my %settings;
$settings{domain} = $c->request->params->{domain};
unless(length $settings{domain}) {
$c->response->redirect("/domain");
return;
}
$settings{handle} = $c->request->params->{handle};
unless(length $settings{handle}) {
$c->response->redirect("/domain/detail?domain=$settings{domain}");
return;
}
my $audio;
if($c->model('Provisioning')->call_prov( $c, 'voip', 'get_audio_file',
\%settings,
\$audio))
{
$c->stash->{current_view} = 'Plain';
$c->stash->{content_type} = 'audio/x-wav';
$c->stash->{content} = eval { $$audio{audio}->value() };
return;
}
$c->response->redirect("/domain/detail?domain=$settings{domain}#audio");
return;
}
=head1 BUGS AND LIMITATIONS

@ -15,7 +15,7 @@ This provides functionality for VoIP subscriber administration.
=head1 METHODS
=head2 index
=head2 index
Display search form.
@ -28,7 +28,7 @@ sub index : Private {
return 1;
}
=head2 search
=head2 search
Search for subscribers and display results.
@ -105,7 +105,7 @@ sub search : Local {
return 1;
}
=head2 detail
=head2 detail
Display subscriber details.
@ -147,7 +147,7 @@ sub detail : Local {
},
\$regcon
);
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_speed_dial_slots',
{ username => $c->session->{subscriber}{username},
domain => $c->session->{subscriber}{domain},
@ -169,7 +169,16 @@ sub detail : Local {
config->{VARIABLES}{site_config}{language},
'Web.Subscriber.Lock'.$$preferences{lock})
if $$preferences{lock};
my $audio_files;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_audio_files',
{ username => $c->session->{subscriber}{username},
domain => $c->session->{subscriber}{domain},
},
\$audio_files
);
$c->session->{subscriber}{audio_files} = $$audio_files{result} if eval { @{$$audio_files{result}} };
} else {
$c->stash->{account_id} = $c->request->params->{account_id};
$c->stash->{edit_subscriber} = 1;
@ -1165,7 +1174,7 @@ sub edit_speed_dial_slots : Local {
$c->stash->{adddestinationtxt} = $c->session->{adddestinationtxt};
delete $c->session->{adddestinationtxt};
}
return 1;
}
@ -1184,7 +1193,7 @@ sub do_edit_sd_list : Local {
my $add_slot = $c->request->params->{add_slot};
my $add_destination = $c->request->params->{add_destination};
if(defined $add_slot) {
my $checkadd_slot;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'check_vsc_format', $add_slot, \$checkadd_slot);
my $checkadd_destination;
@ -1197,7 +1206,7 @@ sub do_edit_sd_list : Local {
if ($destination =~ /^sip:.+\@.+$/) {
$checkadd_destination = 1;
}
if($checkadd_slot and $checkadd_destination) {
$c->model('Provisioning')->call_prov( $c, 'voip', 'create_speed_dial_slot',
{ username => $c->session->{subscriber}{username},
@ -1224,7 +1233,7 @@ sub do_edit_sd_list : Local {
}
$messages{numerr} = 'Client.Voip.InputErrorFound';
}
}
# delete link forms
@ -1244,7 +1253,7 @@ sub do_edit_sd_list : Local {
my $update_slot = $c->request->params->{slot};
my $update_destination = $c->request->params->{destination};
if(defined $update_slotid) {
my $checkupdate_slot;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'check_vsc_format', $update_slot, \$checkupdate_slot);
my $checkupdate_destination;
@ -1257,7 +1266,7 @@ sub do_edit_sd_list : Local {
if ($destination =~ /^sip:.+\@.+$/) {
$checkupdate_destination = 1;
}
if($checkupdate_slot and $checkupdate_destination) {
$c->model('Provisioning')->call_prov( $c, 'voip', 'update_speed_dial_slot',
{ username => $c->session->{subscriber}{username},
@ -1288,7 +1297,7 @@ sub do_edit_sd_list : Local {
}
$messages{numerr} = 'Client.Voip.InputErrorFound';
}
}
unless(keys %messages) {
@ -1481,6 +1490,233 @@ sub do_edit_destlist : Local {
$c->response->redirect("/subscriber/edit_destlist?subscriber_id=$subscriber_id&list_name=$list");
}
sub edit_audio_files : Local {
my ( $self, $c ) = @_;
$c->stash->{template} = 'tt/subscriber_edit_audio_files.tt';
my $subscriber_id = $c->request->params->{subscriber_id};
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_subscriber_by_id',
{ subscriber_id => $subscriber_id },
\$c->session->{subscriber}
);
$c->stash->{subscriber} = $c->session->{subscriber};
$c->stash->{subscriber_id} = $subscriber_id;
my %settings;
$settings{username} = $c->session->{subscriber}{username};
$settings{domain} = $c->session->{subscriber}{domain};
my $audio_files;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_audio_files',
{ %settings },
\$audio_files
);
$c->stash->{audio_files} = $$audio_files{result} if eval { @{$$audio_files{result}} };
$c->stash->{edit_audio} = $c->request->params->{edit_audio};
if(exists $c->session->{acrefill}) {
$c->stash->{acrefill} = $c->session->{acrefill};
delete $c->session->{acrefill};
}
if(exists $c->session->{aerefill}) {
$c->stash->{aerefill} = $c->session->{aerefill};
delete $c->session->{aerefill};
} elsif($c->request->params->{edit_audio}) {
foreach my $audio (eval { @{$$audio_files{result}} }) {
if($$audio{handle} eq $c->request->params->{edit_audio}) {
$c->stash->{aerefill} = $audio;
last;
}
}
}
return 1;
}
=head2 do_create_audio
Store a new audio file in the database.
=cut
sub do_create_audio : Local {
my ( $self, $c ) = @_;
my %messages;
my %settings;
my $subscriber_id = $c->request->params->{subscriber_id};
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_subscriber_by_id',
{ subscriber_id => $subscriber_id },
\$c->session->{subscriber}
);
$c->stash->{subscriber} = $c->session->{subscriber};
$c->stash->{subscriber_id} = $subscriber_id;
$settings{username} = $c->session->{subscriber}{username};
$settings{domain} = $c->session->{subscriber}{domain};
$settings{handle} = $c->request->params->{handle};
$settings{data}{description} = $c->request->params->{description}
if length $c->request->params->{description};
my $upload = $c->req->upload('cupload_audio');
$settings{data}{audio} = eval { $upload->slurp };
unless(keys %messages) {
if($c->model('Provisioning')->call_prov( $c, 'voip', 'create_audio_file',
\%settings,
undef))
{
$messages{audiomsg} = 'Web.AudioFile.Created';
$c->session->{messages} = \%messages;
$c->response->redirect("/subscriber/edit_audio_files?subscriber_id=$subscriber_id");
return;
}
}
$messages{audioerr} = 'Client.Voip.InputErrorFound';
$c->session->{messages} = \%messages;
$c->session->{acrefill} = \%settings;
$c->response->redirect("/subscriber/edit_audio_files?subscriber_id=$subscriber_id");
return;
}
=head2 do_update_audio
Update an audio file in the database.
=cut
sub do_update_audio : Local {
my ( $self, $c ) = @_;
my %messages;
my %settings;
my $subscriber_id = $c->request->params->{subscriber_id};
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_subscriber_by_id',
{ subscriber_id => $subscriber_id },
\$c->session->{subscriber}
);
$c->stash->{subscriber} = $c->session->{subscriber};
$c->stash->{subscriber_id} = $subscriber_id;
$settings{username} = $c->session->{subscriber}{username};
$settings{domain} = $c->session->{subscriber}{domain};
$settings{handle} = $c->request->params->{handle};
unless(length $settings{handle}) {
$c->response->redirect("/subscriber/edit_audio_files?subscriber_id=$subscriber_id");
return;
}
$settings{data}{description} = $c->request->params->{description};
my $upload = $c->req->upload('eupload_audio');
$settings{data}{audio} = eval { $upload->slurp } if defined $upload;
unless(keys %messages) {
if($c->model('Provisioning')->call_prov( $c, 'voip', 'update_audio_file',
\%settings,
undef))
{
$messages{audiomsg} = 'Web.AudioFile.Updated';
$c->session->{messages} = \%messages;
$c->response->redirect("/subscriber/edit_audio_files?subscriber_id=$subscriber_id");
return;
}
$c->response->redirect("/subscriber/edit_audio_files?subscriber_id=$subscriber_id&edit_audio=$settings{handle}");
return;
}
$messages{audioerr} = 'Client.Voip.InputErrorFound';
$c->session->{messages} = \%messages;
$c->session->{aerefill} = $settings{data};
$c->response->redirect("/subscriber/edit_audio_files?subscriber_id=$subscriber_id&edit_audio=$settings{handle}");
return;
}
=head2 do_delete_audio
Delete an audio file from the database.
=cut
sub do_delete_audio : Local {
my ( $self, $c ) = @_;
my %settings;
my $subscriber_id = $c->request->params->{subscriber_id};
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_subscriber_by_id',
{ subscriber_id => $subscriber_id },
\$c->session->{subscriber}
);
$c->stash->{subscriber} = $c->session->{subscriber};
$c->stash->{subscriber_id} = $subscriber_id;
$settings{username} = $c->session->{subscriber}{username};
$settings{domain} = $c->session->{subscriber}{domain};
$settings{handle} = $c->request->params->{handle};
unless(length $settings{handle}) {
$c->response->redirect("/subscriber/edit_audio_files?subscriber_id=$subscriber_id");
return;
}
if($c->model('Provisioning')->call_prov( $c, 'voip', 'delete_audio_file',
\%settings,
undef))
{
$c->session->{messages} = { provmsg => 'Web.AudioFile.Deleted' };
$c->response->redirect("/subscriber/edit_audio_files?subscriber_id=$subscriber_id");
return;
}
$c->response->redirect("/subscriber/edit_audio_files?subscriber_id=$subscriber_id");
return;
}
=head2 listen_audio
Listen to an audio file from the database.
=cut
sub listen_audio : Local {
my ( $self, $c ) = @_;
my %settings;
my $subscriber_id = $c->request->params->{subscriber_id};
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_subscriber_by_id',
{ subscriber_id => $subscriber_id },
\$c->session->{subscriber}
);
$settings{username} = $c->session->{subscriber}{username};
$settings{domain} = $c->session->{subscriber}{domain};
$settings{handle} = $c->request->params->{handle};
unless(length $settings{handle}) {
$c->response->redirect("/subscriber/edit_audio_files?subscriber_id=$subscriber_id");
return;
}
my $audio;
if($c->model('Provisioning')->call_prov( $c, 'voip', 'get_audio_file',
\%settings,
\$audio))
{
$c->stash->{current_view} = 'Plain';
$c->stash->{content_type} = 'audio/x-wav';
$c->stash->{content} = eval { $$audio{audio}->value() };
return;
}
$c->response->redirect("/subscriber/edit_audio_files?subscriber_id=$subscriber_id");
return;
}
sub expire : Local {
my ( $self, $c ) = @_;

@ -276,6 +276,13 @@ h3 {
width: 135px;
}
.ihandle {
width: 90px;
}
.iaudiodesc {
width: 240px;
}
/* decrease input text fields for ac */
.ishort {
width: 50px;

@ -51,7 +51,7 @@
<td>[% rule.description %]</td>
<td>
[% UNLESS Catalyst.session.admin.read_only %]
<a href="/domain/detail?domain=[% domain.domain %]&iteditid=[% rule.id %]" class="aaction">edit</a>
<a href="/domain/detail?domain=[% domain.domain %]&amp;iteditid=[% rule.id %]" class="aaction">edit</a>
[% END %]
</td>
<form action="/domain/delete_rewrite" method="post">
@ -100,3 +100,98 @@
</table>
</div>
<h3 id="audio">Audio Files</h3>
<div class="p1">
[% IF messages.audiomsg %]<div class="goodmsg">[% messages.audiomsg %]</div>[% END %]
[% IF messages.audioerr %]<div class="errormsg">[% messages.audioerr %]</div>[% END %]
<table class="audiofiles">
<tr class="table_header">
<td style="width:100px;">Handle</td>
<td style="width:250px;">Description</td>
<td style="width:180px;">Audio</td>
<td style="width:40px;" />
<td style="width:60px;" />
</tr>
[% id = 0 %]
[% FOREACH audio = audio_files %]
[% id = id + 1 %]
[% IF audio.handle == edit_audio %]
<tr>
<form action="/domain/do_update_audio" enctype="multipart/form-data" method="post">
<td>[% audio.handle %]</td>
<td>
<input type="text" class="iaudiodesc" title="free-form description string"
name="description" value="[% aerefill.description %]" />
</td>
<td>
<input type="file" size="10" class="file" id="eupload_audio" name="eupload_audio"
title="audio file in wave format" />
</td>
<td>
<input type="hidden" name="domain" value="[% domain.domain %]" />
<input type="hidden" name="handle" value="[% audio.handle %]" />
<div class="postlink">
<label for="audiosave">save</label>
<input type="image" class="hidden" src="/static/images/dot_trans.gif" alt="" id="audiosave" />
</div>
</td>
</form>
<td><a href="/domain/detail?domain=[% domain.domain %]#audio" class="aaction">cancel</a></td>
</tr>
[% IF aerefill && prov_error %]<tr><td colspan="5"><div class="errormsg">[% prov_error %]</div></td></tr>[% END %]
[% ELSE %]
<tr>
<td>[% audio.handle %]</td>
<td>[% audio.description %]</td>
<td><a href="/domain/listen_audio?domain=[% domain.domain %]&amp;handle=[% audio.handle %]">listen</a></td>
<td>
[% UNLESS Catalyst.session.admin.read_only %]
<a href="/domain/detail?domain=[% domain.domain %]&amp;edit_audio=[% audio.handle %]#audio" class="aaction">edit</a>
[% END %]
</td>
<td>
<form action="/domain/do_delete_audio" method="post">
<input type="hidden" name="domain" value="[% domain.domain %]" />
<input type="hidden" name="handle" value="[% audio.handle %]" />
[% UNLESS Catalyst.session.admin.read_only %]
<div class="postlink">
<label for="audiodel[% id %]">delete</label>
<input type="image" class="hidden" src="/static/images/dot_trans.gif" alt="" id="audiodel[% id %]" />
</div>
[% END %]
</form>
</td>
</tr>
[% END %]
[% END %]
<tr>
<form action="/domain/do_create_audio" enctype="multipart/form-data" method="post">
<td>
<input type="text" class="ihandle" title="unique identifier string"
name="handle" value="[% acrefill.handle %]" />
</td>
<td>
<input type="text" class="iaudiodesc" title="free-form description string"
name="description" value="[% acrefill.data.description %]" />
</td>
<td>
<input type="file" size="10" class="file" id="cupload_audio" name="cupload_audio"
title="audio file in wave format" />
</td>
<td>
<input type="hidden" name="domain" value="[% domain.domain %]" />
<div class="postlink">
<label for="audioadd">add</label>
<input type="image" class="hidden" src="/static/images/dot_trans.gif" alt="" id="audioadd" />
</div>
</td>
</form>
<td />
</tr>
</table>
[% IF acrefill && prov_error %]<div class="errormsg">[% prov_error %]</div>[% END %]
</div>

@ -405,7 +405,28 @@
</tr>
</table>
</div>
<h3 id="audio">Audio Files</h3>
<div class="p1">
<table>
<tr>
<td class="tdkey">Existing audio files:</td>
<td>
<select size="1" name="audio_files">
[% FOREACH audio = subscriber.audio_files %]
<option>[% audio.handle %]</option>
[% END %]
</select>
[% UNLESS Catalyst.session.admin.read_only %]
&nbsp;
<a href="edit_audio_files?subscriber_id=[% subscriber.subscriber_id %]"
class="aaction">edit list</a>
[% END %]
</td>
</tr>
</table>
</div>
[% IF subscriber.voicebox_preferences %]
<h3 id="vboxprefs">Voicebox Preferences</h3>

@ -0,0 +1,99 @@
<h3> Audio Files for Subscriber
<a class="noarrow" href="detail?subscriber_id=[% subscriber_id %]">
[% subscriber.username %]@[% subscriber.domain %]</a>
</h3>
<a href="detail?subscriber_id=[% subscriber_id %]&amp;#audio" class="aaction">back</a>
<div class="p1">
[% IF messages.audiomsg %]<div class="goodmsg">[% messages.audiomsg %]</div>[% END %]
[% IF messages.audioerr %]<div class="errormsg">[% messages.audioerr %]</div>[% END %]
<table class="audiofiles">
<tr class="table_header">
<td style="width:100px;">Handle</td>
<td style="width:250px;">Description</td>
<td style="width:180px;">Audio</td>
<td style="width:40px;" />
<td style="width:60px;" />
</tr>
[% id = 0 %]
[% FOREACH audio = audio_files %]
[% id = id + 1 %]
[% IF audio.handle == edit_audio %]
<tr>
<form action="/subscriber/do_update_audio" enctype="multipart/form-data" method="post">
<td>[% audio.handle %]</td>
<td>
<input type="text" class="iaudiodesc" title="free-form description string"
name="description" value="[% aerefill.description %]" />
</td>
<td>
<input type="file" size="10" class="file" id="eupload_audio" name="eupload_audio"
title="audio file in wave format" />
</td>
<td>
<input type="hidden" name="subscriber_id" value="[% subscriber_id %]" />
<input type="hidden" name="handle" value="[% audio.handle %]" />
<div class="postlink">
<label for="audiosave">save</label>
<input type="image" class="hidden" src="/static/images/dot_trans.gif" alt="" id="audiosave" />
</div>
</td>
</form>
<td><a href="/subscriber/edit_audio_files?subscriber_id=[% subscriber_id %]" class="aaction">cancel</a></td>
</tr>
[% IF aerefill && prov_error %]<tr><td colspan="5"><div class="errormsg">[% prov_error %]</div></td></tr>[% END %]
[% ELSE %]
<tr>
<td>[% audio.handle %]</td>
<td>[% audio.description %]</td>
<td><a href="/subscriber/listen_audio?subscriber_id=[% subscriber_id %]&amp;handle=[% audio.handle %]">listen</a></td>
<td>
[% UNLESS Catalyst.session.admin.read_only %]
<a href="/subscriber/edit_audio_files?subscriber_id=[% subscriber_id %]&amp;edit_audio=[% audio.handle %]" class="aaction">edit</a>
[% END %]
</td>
<td>
<form action="/subscriber/do_delete_audio" method="post">
<input type="hidden" name="subscriber_id" value="[% subscriber_id %]" />
<input type="hidden" name="handle" value="[% audio.handle %]" />
[% UNLESS Catalyst.session.admin.read_only %]
<div class="postlink">
<label for="audiodel[% id %]">delete</label>
<input type="image" class="hidden" src="/static/images/dot_trans.gif" alt="" id="audiodel[% id %]" />
</div>
[% END %]
</form>
</td>
</tr>
[% END %]
[% END %]
<tr>
<form action="/subscriber/do_create_audio" enctype="multipart/form-data" method="post">
<td>
<input type="text" class="ihandle" title="unique identifier string"
name="handle" value="[% acrefill.handle %]" />
</td>
<td>
<input type="text" class="iaudiodesc" title="free-form description string"
name="description" value="[% acrefill.data.description %]" />
</td>
<td>
<input type="file" size="10" class="file" id="cupload_audio" name="cupload_audio"
title="audio file in wave format" />
</td>
<td>
<input type="hidden" name="subscriber_id" value="[% subscriber_id %]" />
<div class="postlink">
<label for="audioadd">add</label>
<input type="image" class="hidden" src="/static/images/dot_trans.gif" alt="" id="audioadd" />
</div>
</td>
</form>
<td />
</tr>
</table>
[% IF acrefill && prov_error %]<div class="errormsg">[% prov_error %]</div>[% END %]
</div>
Loading…
Cancel
Save