summaryrefslogtreecommitdiff
path: root/httemplate
diff options
context:
space:
mode:
authorIvan Kohler <ivan@freeside.biz>2014-01-18 19:13:14 -0800
committerIvan Kohler <ivan@freeside.biz>2014-01-18 19:13:14 -0800
commit6ac45d15e85b10e3d63645c26a0a2acbad103df1 (patch)
tree79ffb548e9018b9512fe31740e6ab8911e08ff2a /httemplate
parent5fbd483ef56737fad894f18ec311a817c40054f0 (diff)
FS/FS/pbx_extension.pm
Diffstat (limited to 'httemplate')
-rw-r--r--httemplate/edit/process/svc_pbx.html13
-rw-r--r--httemplate/edit/svc_pbx.html52
-rw-r--r--httemplate/elements/pbx_extension.html113
-rw-r--r--httemplate/elements/tr-pbx_extension.html24
-rw-r--r--httemplate/view/svc_pbx.cgi51
5 files changed, 249 insertions, 4 deletions
diff --git a/httemplate/edit/process/svc_pbx.html b/httemplate/edit/process/svc_pbx.html
new file mode 100644
index 000000000..15023a4b9
--- /dev/null
+++ b/httemplate/edit/process/svc_pbx.html
@@ -0,0 +1,13 @@
+<& elements/svc_Common.html,
+ table => 'svc_pbx',
+ edit_ext => 'html',
+ process_o2m => { table => 'pbx_extension',
+ fields => [qw( extension pin sip_password phone_name )],
+ },
+&>
+<%init>
+
+die "access denied"
+ unless $FS::CurrentUser::CurrentUser->access_right('Provision customer service'); #something else more specific?
+
+</%init>
diff --git a/httemplate/edit/svc_pbx.html b/httemplate/edit/svc_pbx.html
new file mode 100644
index 000000000..d973bf5e9
--- /dev/null
+++ b/httemplate/edit/svc_pbx.html
@@ -0,0 +1,52 @@
+<& elements/svc_Common.html,
+ 'table' => 'svc_pbx',
+
+ 'end_callback' => sub {
+ my( $cgi, $svc_pbx, $fields, $opt ) = @_;
+ $opt->{labels}{extensionnum} = ' ';
+ push @$fields,
+ { type => 'tablebreak-tr-title',
+ value => 'Extensions',
+ },
+ {
+ field => 'extensionnum',
+ type => 'pbx_extension',
+ o2m_table => 'pbx_extension',
+ m2_label => ' ',
+ m2_error_callback => $m2_error_callback,
+ },
+ ;
+
+ },
+
+&>
+<%init>
+
+my $m2_error_callback = sub {
+ my($cgi, $object) = @_;
+
+ #process_o2m fields in process/svc_pbx.html
+ my @fields = qw( extension pin sip_password phone_name );
+ my @gfields = ( '', map "_$_", @fields );
+
+ map {
+ if ( /^extensionnum(\d+)$/ ) {
+ my $num = $1;
+ if ( grep $cgi->param("extensionnum$num$_"), @gfields ) {
+ my $x = new FS::pbx_extension {
+ 'extensionnum' => scalar($cgi->param("extensionnum$num")),
+ map { $_ => scalar($cgi->param("extensionnum${num}_$_")) } @fields,
+ };
+ $x;
+ } else {
+ ();
+ }
+ } else {
+ ();
+ }
+ }
+ $cgi->param;
+};
+
+
+</%init>
diff --git a/httemplate/elements/pbx_extension.html b/httemplate/elements/pbx_extension.html
new file mode 100644
index 000000000..62a1f5172
--- /dev/null
+++ b/httemplate/elements/pbx_extension.html
@@ -0,0 +1,113 @@
+% unless ( $opt{'js_only'} ) {
+
+ <INPUT TYPE="hidden" NAME="<%$name%>" ID="<%$id%>" VALUE="<% $curr_value %>">
+
+ <TABLE STYLE="display:inline">
+ <TR>
+
+% ###
+% # extension
+% ###
+ <TD>
+ <INPUT
+ TYPE = "text"
+ NAME = "<%$name%>_extension"
+ ID = "<%$id%>_extension"
+ VALUE = "<% scalar($cgi->param($name.'_extension'))
+ || $pbx_extension->extension
+ %>"
+ SIZE = 5
+ MAXLENGTH = 6
+ <% $onchange %>
+ >
+ <BR>
+ <FONT SIZE="-1">Extension</FONT>
+ </TD>
+
+% ###
+% # pin
+% ###
+ <TD>
+ <INPUT
+ TYPE = "text"
+ NAME = "<%$name%>_pin"
+ ID = "<%$id%>_pin"
+ VALUE = "<% scalar($cgi->param($name.'_pin'))
+ || $pbx_extension->pin
+ %>"
+ SIZE = 7
+ MAXLENGTH = 6
+ <% $onchange %>
+ >
+ <BR>
+ <FONT SIZE="-1">PIN</FONT>
+ </TD>
+
+% ###
+% # sip_password
+% ###
+ <TD>
+ <INPUT
+ TYPE = "text"
+ NAME = "<%$name%>_sip_password"
+ ID = "<%$id%>_sip_password"
+ VALUE = "<% scalar($cgi->param($name.'_sip_password'))
+ || $pbx_extension->sip_password
+ %>"
+ SIZE = <% $passwordmax == 80 ? 20 : $passwordmax + 2 %>
+ MAXLENGTH = <% $passwordmax + 2 %>
+ <% $onchange %>
+ >
+ <BR>
+ <FONT SIZE="-1">SIP Password</FONT>
+ </TD>
+
+% ###
+% # phone_name
+% ###
+ <TD>
+ <INPUT
+ TYPE = "text"
+ NAME = "<%$name%>_phone_name"
+ ID = "<%$id%>_phone_name"
+ VALUE = "<% scalar($cgi->param($name.'_phone_name'))
+ || $pbx_extension->phone_name
+ %>"
+ SIZE = 20
+ MAXLENGTH = 80
+ <% $onchange %>
+ >
+ <BR>
+ <FONT SIZE="-1">Name</FONT>
+ </TD>
+
+ </TR>
+ </TABLE>
+
+% }
+<%init>
+
+my( %opt ) = @_;
+
+my $conf = new FS::Conf;
+my $passwordmax = $conf->config('sip_passwordmax') || 80;
+
+my $name = $opt{'element_name'} || $opt{'field'} || 'extensionnum';
+my $id = $opt{'id'} || 'extensionnum';
+
+my $curr_value = $opt{'curr_value'} || $opt{'value'};
+
+my $onchange = '';
+if ( $opt{'onchange'} ) {
+ $onchange = $opt{'onchange'};
+ $onchange .= '(this)' unless $onchange =~ /\(\w*\);?$/;
+ $onchange =~ s/\(what\);/\(this\);/g; #ugh, terrible hack. all onchange
+ #callbacks should act the same
+ $onchange = 'onChange="'. $onchange. '"';
+}
+
+my $pbx_extension = $curr_value
+ ? qsearchs('pbx_extension', { 'extensionnum' => $curr_value } )
+ : new FS::pbx_extension {};
+
+</%init>
diff --git a/httemplate/elements/tr-pbx_extension.html b/httemplate/elements/tr-pbx_extension.html
new file mode 100644
index 000000000..a9d640d51
--- /dev/null
+++ b/httemplate/elements/tr-pbx_extension.html
@@ -0,0 +1,24 @@
+% unless ( $opt{'js_only'} ) {
+
+ <% include('tr-td-label.html', %opt) %>
+ <TD <% $cell_style %>>
+
+% }
+%
+ <% include( '/elements/pbx_extension.html', %opt ) %>
+%
+% unless ( $opt{'js_only'} ) {
+
+ </TD>
+ </TR>
+
+% }
+<%init>
+
+my( %opt ) = @_;
+
+my $cell_style = $opt{'cell_style'} ? 'STYLE="'. $opt{'cell_style'}. '"' : '';
+
+$opt{'label'} ||= 'Extension';
+
+</%init>
diff --git a/httemplate/view/svc_pbx.cgi b/httemplate/view/svc_pbx.cgi
index ff0d28501..9b18dc3bd 100644
--- a/httemplate/view/svc_pbx.cgi
+++ b/httemplate/view/svc_pbx.cgi
@@ -1,6 +1,6 @@
<% include('elements/svc_Common.html',
'table' => 'svc_pbx',
- 'edit_url' => $p."edit/svc_Common.html?svcdb=svc_pbx;svcnum=",
+ 'edit_url' => $p.'edit/svc_pbx.html?',
'labels' => \%labels,
'html_foot' => $html_foot,
)
@@ -19,6 +19,48 @@ my $html_foot = sub {
my $svc_pbx = shift;
##
+ # Extensions
+ ##
+
+ my @pbx_extension = sort { $a->extension cmp $b->extension }
+ $svc_pbx->pbx_extension;
+
+ my $extensions = '';
+ if ( @pbx_extension ) {
+
+ $extensions .= '<FONT CLASS="fsinnerbox-title">Extensions</FONT>'.
+ include('/elements/table-grid.html');
+ my $bgcolor1 = '#eeeeee';
+ my $bgcolor2 = '#ffffff';
+ my $bgcolor = '';
+
+ #$extensions .= '
+ # <TR>
+ # <TH CLASS="grid" BGCOLOR="#cccccc">Ext</TH>
+ # <TH CLASS="grid" BGCOLOR="#cccccc">Name</TH>
+ # </TR>
+ #';
+
+ foreach my $pbx_extension ( @pbx_extension ) {
+ if ( $bgcolor eq $bgcolor1 ) {
+ $bgcolor = $bgcolor2;
+ } else {
+ $bgcolor = $bgcolor1;
+ }
+
+ $extensions .= qq(
+ <TR>
+ <TD CLASS="grid" BGCOLOR="$bgcolor">). $pbx_extension->extension. qq(
+ <TD CLASS="grid" BGCOLOR="$bgcolor">). $pbx_extension->phone_name. qq(
+ </TR>
+ );
+
+ }
+
+ $extensions .= '</TABLE><BR>';
+ }
+
+ ##
# CDR links
##
@@ -29,7 +71,7 @@ my $html_foot = sub {
#matching as per package def cdr_svc_method
my $cust_pkg = $svc_pbx->cust_svc->cust_pkg;
- return '' unless $cust_pkg;
+ return $extensions unless $cust_pkg;
my @voip_pkgs =
grep { $_->plan eq 'voip_cdr' } $cust_pkg->part_pkg->self_and_bill_linked;
@@ -43,7 +85,7 @@ my $html_foot = sub {
my $cdr_svc_method = ( $voip_pkg && $voip_pkg->option('cdr_svc_method') )
|| 'svc_phone.phonenum';
- return '' unless $cdr_svc_method =~ /^svc_pbx\.(.*)$/;
+ return $extensions unless $cdr_svc_method =~ /^svc_pbx\.(.*)$/;
my $field = $1;
my $search;
@@ -55,7 +97,7 @@ my $html_foot = sub {
$search = 'svcnum='. $svc_pbx->svcnum;
} else {
warn "unknown cdr_svc_method svc_pbx.$field";
- return '';
+ return $extensions
}
my @links = map {
@@ -67,6 +109,7 @@ my $html_foot = sub {
# concatenate & return
###
+ $extensions.
join(' | ', @links ). '<BR>';
};