add seperate view for editing soundfiles

3.4
Christian Veigl 13 years ago
parent 23582dcf77
commit 22a83170b1

@ -22,43 +22,30 @@ Edit sound sets.
sub base : Chained('/') PathPrefix CaptureArgs(0) {
my ($self, $c) = @_;
return unless ( $c->stash->{sets} = $c->forward ('load_sets'));
if (defined $c->session->{refill}) {
foreach my $s (@{$c->stash->{sets}}) {
next if ($s->{id} ne $c->session->{refill}->{set_id});
foreach my $h (@{$s->{handles}}) {
next if ($h->{id} ne $c->session->{refill}->{handle_id});
$h->{filename} = $c->session->{refill}->{filename};
$h->{err} = 1;
}
}
$c->session->{refill} = undef;
}
$c->stash->{template} = 'tt/sound.tt';
}
sub list : Chained('base') PathPart('') Args(0) {
my ($self, $c) = @_;
$c->stash->{sets} = $c->forward ('load_sets');
$c->stash->{template} = 'tt/sound.tt';
}
sub set_get : Chained('base') PathPart('set') CaptureArgs(1) {
sub set : Chained('base') PathPart('set') CaptureArgs(1) {
my ($self, $c, $set_id) = @_;
$c->stash->{set_id} = $set_id if ($set_id != 0);
$c->stash->{set} = $c->forward ('load_single_set') if ($set_id != 0);
}
sub set_add : Chained('base') PathPart('set') CaptureArgs(0) {
my ($self, $c, $set_id) = @_;
}
sub handle_get : Chained('set_get') PathPart('handle') CaptureArgs(1) {
sub handle : Chained('set') PathPart('handle') CaptureArgs(1) {
my ($self, $c, $handle_id) = @_;
$c->stash->{handle_id} = $handle_id;
}
sub upload_soundfile : Chained('handle_get') PathPart('soundfile/upload') Args(0) {
sub upload_soundfile : Chained('handle') PathPart('soundfile/upload') Args(0) {
my ($self, $c) = @_;
my %messages;
@ -93,21 +80,22 @@ sub upload_soundfile : Chained('handle_get') PathPart('soundfile/upload') Args(0
},
undef))
{
$messages{topmsg} = 'Server.Voip.SavedSettings';
$messages{sound_set_msg} = 'Server.Voip.SavedSettings';
} else {
$messages{toperr} = 'Client.Voip.InputErrorFound';
$messages{sound_set_err} = 'Client.Voip.InputErrorFound';
}
}
else {
$messages{file_err} = 'Client.Syntax.InvalidFileType';
$messages{sound_set_err} = 'Client.Syntax.InvalidFileType';
$c->session->{refill} = { set_id => $c->stash->{set_id}, handle_id => $c->stash->{handle_id}, filename => $filename };
}
$c->session->{messages} = \%messages;
$c->response->redirect('/sound/set/' . $c->stash->{set_id} . '/edit#set_' . $c->stash->{set_id});
# $c->response->redirect('/sound/set/' . $c->stash->{set_id} . '/edit#set_' . $c->stash->{set_id});
$c->response->redirect('/sound/set/' . $c->stash->{set_id} . '/editfiles');
}
sub get_soundfile : Chained('handle_get') PathPart('soundfile/get') Args(0) {
sub get_soundfile : Chained('handle') PathPart('soundfile/get') Args(0) {
my ($self, $c) = @_;
my $soundfile;
@ -123,13 +111,18 @@ sub get_soundfile : Chained('handle_get') PathPart('soundfile/get') Args(0) {
$c->response->body($soundfile->{data});
}
sub edit_set : Chained('set_get') PathPart('edit') Args(0) {
sub edit_set : Chained('set') PathPart('edit') Args(0) {
my ($self, $c) = @_;
$c->stash->{edit_set_id} = $c->stash->{set_id}; # meh
$c->stash->{sets} = $c->forward ('load_sets');
$c->stash->{template} = 'tt/sound.tt';
}
sub delete_set : Chained('set_get') PathPart('delete') Args(0) {
sub edit_files : Chained('set') PathPart('editfiles') Args(0) {
my ($self, $c) = @_;
$c->stash->{template} = 'tt/sound_edit_files.tt';
}
sub delete_set : Chained('set') PathPart('delete') Args(0) {
my ($self, $c) = @_;
$c->stash->{template} = 'tt/sound.tt';
my %messages;
@ -139,10 +132,10 @@ sub delete_set : Chained('set_get') PathPart('delete') Args(0) {
{ id => $c->stash->{set_id} },
undef))
{
$messages{topmsg} = 'Server.Voip.SoundsetDeleted';
$messages{sound_set_msg} = 'Server.Voip.SoundsetDeleted';
}
else {
$messages{toperr} = 'Client.Voip.InputErrorFound';
$messages{sound_set_err} = 'Client.Voip.InputErrorFound';
}
$c->response->redirect("/sound");
@ -150,7 +143,7 @@ sub delete_set : Chained('set_get') PathPart('delete') Args(0) {
# deletes an sound file, not the handle
# usage of 'handle' here is from users perspective
sub delete_handle : Chained('handle_get') PathPart('delete') Args(0) {
sub delete_handle : Chained('handle') PathPart('delete') Args(0) {
my ($self, $c) = @_;
$c->stash->{template} = 'tt/sound.tt';
my %messages;
@ -162,60 +155,61 @@ sub delete_handle : Chained('handle_get') PathPart('delete') Args(0) {
},
undef))
{
$messages{topmsg} = 'Server.Voip.SoundHandleDeleted';
$messages{sound_set_msg} = 'Server.Voip.SoundHandleDeleted';
}
else {
$messages{toperr} = 'Client.Voip.InputErrorFound';
$messages{sound_set_err} = 'Client.Voip.InputErrorFound';
}
$c->response->redirect('/sound/set/' . $c->stash->{set_id} . '/edit#set_' . $c->stash->{set_id});
# $c->response->redirect('/sound/set/' . $c->stash->{set_id} . '/edit#set_' . $c->stash->{set_id});
$c->response->redirect('/sound/set/' . $c->stash->{set_id} . '/editfiles');
}
sub save_set : Chained('set_get') PathPart('save') Args(0) {
sub save_set : Chained('set') PathPart('save') Args(0) {
my ($self, $c) = @_;
$c->stash->{template} = 'tt/sound.tt';
my %messages;
$c->stash->{set_name} = $c->request->params->{set_name};
$c->stash->{set_description} = $c->request->params->{set_description};
if ($c->stash->{set_id}) {
if ($c->model('Provisioning')->call_prov($c, 'voip',
'update_sound_set',
{ id => $c->stash->{set_id},
set_name => $c->stash->{set_name},
set_description => $c->stash->{set_description},
},
undef))
{
$messages{topmsg} = 'Server.Voip.SavedSettings';
$messages{sound_set_msg} = 'Server.Voip.SavedSettings';
}
}
else {
if ($c->model('Provisioning')->call_prov($c, 'voip',
'create_sound_set',
{ set_name => $c->request->params->{set_name} },
{ set_name => $c->request->params->{set_name},
set_description => $c->stash->{set_description},
},
undef ))
{
$messages{topmsg} = 'Server.Voip.SavedSettings';
$messages{sound_set_msg} = 'Server.Voip.SavedSettings';
}
}
$messages{toperr} = 'Client.Voip.InputErrorFound';
$messages{sound_set_err} = 'Client.Voip.InputErrorFound';
$c->response->redirect("/sound");
}
sub load_sets :Private {
my ( $self, $c, $params) = @_;
my ($self, $c) = @_;
my $sets;
return unless $c->model('Provisioning')->call_prov(
$c,
'voip',
'get_sound_sets',
# TODO: remove comment
# handle_request (called from call_prov) will add
# reseller_id
# { reseller_id => $params->{reseller_id} },
undef, # parameters
\$sets,
);
@ -223,5 +217,20 @@ sub load_sets :Private {
return $sets;
}
sub load_single_set :Private {
my ($self, $c) = @_;
my $set;
return unless $c->model('Provisioning')->call_prov(
$c,
'voip',
'get_single_sound_set',
{ set_id => $c->stash->{set_id} },
\$set,
);
return $set;
}
# Ends, some people will rob their mothers for the ends ...
1

@ -1,21 +1,30 @@
<h3>Manage sound sets</h3>
[% IF messages.sound_set_err %]<div class="error">[% messages.sound_set_err %]</div>[% END %]
[% IF messages.sound_set_msg %]<div class="success">[% messages.sound_set_msg %]</div>[% END %]
<ul class="cleanlist">
<li class="ui-state-default">
<div class="prepend-3 span-3">Handle</div>
<div class="prepend-1 span-2 last">Filename</div>
<div class="span-6">Name</div>
<div class="prepend-1 span-6">Description</div>
<div class="prepend-1 span-1 last"></div>
</li>
[% FOREACH set IN sets %]
<li class="ui-state-default"><a name="set_[% set.id %]"></a></li>
<div class="ui-state-default"><a name="set_[% set.id %]"></a></div>
[% IF set.id == edit_set_id %]
[% IF set.id == set_id %]
<li class="ui-state-default">
<form action="/sound/set/[% set.id %]/save#set_[% set.id %]" method="post">
<div class="span-6">
<input type="text" name="set_name" value="[% set.name %]" size="10"/>
</div>
<div class="prepend-8 span-1">
<div class="prepend-1 span-6">
<input type="text" name="set_description" value="[% set.description %]" size="10"/>
</div>
<div class="prepend-1 span-1">
<button class="button-save" id="setsave[% id %]">Save</button>
</div>
<div class="span-1 last">
@ -23,49 +32,24 @@
</div>
</form>
</li>
[% FOREACH h IN set.handles %]
<li class="ui-state-default">
<div class="prepend-3 span-3">[% h.name %]</div>
[% IF h.filename.length AND NOT h.err %]
<div class="prepend-1 span-4">[% h.filename %]</div>
<form action="/sound/set/[% set.id %]/handle/[% h.id %]/delete" method="post">
<div class="prepend-4 span-1">
[% UNLESS Catalyst.session.admin.read_only %]
<button class="button-delete" id="setdel[% id %]">Delete</button>
[% END %]
</form>
</div>
[% ELSE %]
<form action="/sound/set/[% set.id %]/handle/[% h.id %]/soundfile/upload" method="post" enctype="multipart/form-data">
<div class="prepend-1 span-4">
[%# value='' is ignored by browsers for security reasons for file-input-fields %]
<input id="soundfile" name="soundfile" class="file" type="file" size="10" value="[% IF h.filename.length %][% h.filename %][% END %]">
</div>
<div class="prepend-4 span-1">
<button class="button-add" id="soundadd" />
</div>
</form>
[% END %]
</li>
[% END %]
[% IF messages.file_err %]
<div class="error">[% messages.file_err %]</div>
[% END %]
[% ELSE %]
[% count = set.mapped.domains + set.mapped.users + set.mapped.peers %]
[% plural = 's' IF count > 1 %]
<li class="ui-state-default">
<div class="span-6">
[% set.name %]
<a href="/sound/set/[% set.id %]/editfiles">[% set.name %]</a>
[% IF set.mapped %]
<font class="small"><i>(mapped [% count %] time[% plural %])</i></font>
[% END %]
</div>
<div class="prepend-1 span-6">
[% IF set.description.length %] [% set.description %]
[% ELSE %] ---
[% END %]
</div>
<div class="prepend-8 span-1">
<div class="prepend-1 span-1">
[% UNLESS Catalyst.session.admin.read_only %]
<a href="/sound/set/[% set.id %]/edit#set_[% set.id %]"><span class="button-edit">Edit</span></a>
[% END %]
@ -82,25 +66,22 @@
</div>
</li>
[% FOREACH h IN set.handles %]
<li class="ui-state-default">
<div class="prepend-3 span-3">[% h.name %]</div>
<div class="prepend-1 span-4"><a href="/sound/set/[% set.id %]/handle/[% h.id %]/soundfile/get">[% h.filename %]</a></div>
</li>
[% END %]
[% END %]
<br>
[% END %]
</ul>
<hr>
<div class="hspace-20"</div>
<ul class="cleanlist">
<li class="ui-state-default">
<form action="/sound/set/0/save" method="post">
<div class="prepend-7 span-3">New soundset</div>
<div class="prepend-2 span-3">New soundset</div>
<div class="span-5">
<input type="text" name="set_name" value="" size="10"/>
</div>
<div class="span-5">
<input type="text" name="set_description" value="" size="10"/>
</div>
<div class="span-1">
<button class="button-add" id="setsave">Add soundset</button>
</div>

@ -0,0 +1,54 @@
<h3>Manage sound sets</h3>
<a href="/sound"><span class="button-back">Back</span></a>
<div class="hspace-20"</div>
<h3>Edit sound files</h3>
[% IF messages.sound_set_err %]<div class="error">[% messages.sound_set_err %]</div>[% END %]
[% IF messages.sound_set_msg %]<div class="success">[% messages.sound_set_msg %]</div>[% END %]
<ul class="cleanlist">
<li class="ui-state-default">
<div class="span-2">Setname</div>
<div class="prepend-1 span-2">Handle</div>
<div class="prepend-1 span-2">Filename</div>
</li>
<li class="ui-state-default">
<div class="span-5">
[% count = set.mapped.domains + set.mapped.users + set.mapped.peers %]
[% plural = 's' IF count > 1 %]
[% set.name %]
[% IF set.mapped %]
<font class="small"><i>(mapped [% count %] time[% plural %])</i></font>
[% END %]
</div>
</li>
[% FOREACH h IN set.handles %]
<li class="ui-state-default">
<div class="span-2"></div>
<div class="prepend-1 span-2">[% h.name %]</div>
[% IF h.filename.length AND NOT h.err %]
<div class="prepend-1 span-2"><a href="/sound/set/[% set.id %]/handle/[% h.id %]/soundfile/get">[% h.filename %]</a></div>
<form action="/sound/set/[% set.id %]/handle/[% h.id %]/delete" method="post">
<div class="prepend-6 span-1">
[% UNLESS Catalyst.session.admin.read_only %]
<button class="button-delete" id="setdel[% id %]">Delete</button>
[% END %]
</form>
</div>
[% ELSE %]
<form action="/sound/set/[% set.id %]/handle/[% h.id %]/soundfile/upload" method="post" enctype="multipart/form-data">
<div class="prepend-1 span-4">
[%# value='' is ignored by browsers for security reasons for file-input-fields %]
<input id="soundfile" name="soundfile" class="file" type="file" size="10" value="[% IF h.filename.length %][% h.filename %][% END %]">
</div>
<div class="prepend-4 span-1">
<button class="button-add" id="soundadd" />
</div>
</form>
[% END %]
</li>
[% END %]
</ul>
Loading…
Cancel
Save