This commit was generated by cvs2svn to compensate for changes in r4888,
[freeside.git] / httemplate / edit / svc_acct.cgi
1 %
2 %
3 %my $conf = new FS::Conf;
4 %my @shells = $conf->config('shells');
5 %
6 %my($svcnum, $pkgnum, $svcpart, $part_svc, $svc_acct, @groups);
7 %if ( $cgi->param('error') ) {
8 %
9 %  $svc_acct = new FS::svc_acct ( {
10 %    map { $_, scalar($cgi->param($_)) } fields('svc_acct')
11 %  } );
12 %  $svcnum = $svc_acct->svcnum;
13 %  $pkgnum = $cgi->param('pkgnum');
14 %  $svcpart = $cgi->param('svcpart');
15 %  $part_svc = qsearchs( 'part_svc', { 'svcpart' => $svcpart } );
16 %  die "No part_svc entry for svcpart $svcpart!" unless $part_svc;
17 %  @groups = $cgi->param('radius_usergroup');
18 %
19 %} else {
20 %
21 %  my($query) = $cgi->keywords;
22 %  if ( $query =~ /^(\d+)$/ ) { #editing
23 %    $svcnum=$1;
24 %    $svc_acct=qsearchs('svc_acct',{'svcnum'=>$svcnum})
25 %      or die "Unknown (svc_acct) svcnum!";
26 %
27 %    my($cust_svc)=qsearchs('cust_svc',{'svcnum'=>$svcnum})
28 %      or die "Unknown (cust_svc) svcnum!";
29 %
30 %    $pkgnum=$cust_svc->pkgnum;
31 %    $svcpart=$cust_svc->svcpart;
32 %
33 %    $part_svc = qsearchs( 'part_svc', { 'svcpart' => $svcpart } );
34 %    die "No part_svc entry for svcpart $svcpart!" unless $part_svc;
35 %
36 %    @groups = $svc_acct->radius_groups;
37 %
38 %  } else { #adding
39 %
40 %    foreach $_ (split(/-/,$query)) {
41 %      $pkgnum=$1 if /^pkgnum(\d+)$/;
42 %      $svcpart=$1 if /^svcpart(\d+)$/;
43 %    }
44 %    $part_svc = qsearchs( 'part_svc', { 'svcpart' => $svcpart } );
45 %    die "No part_svc entry for svcpart $svcpart!" unless $part_svc;
46 %
47 %    $svc_acct = new FS::svc_acct({svcpart => $svcpart}); 
48 %
49 %    $svcnum='';
50 %
51 %  }
52 %}
53 %
54 %my( $cust_pkg, $cust_main ) = ( '', '' );
55 %if ( $pkgnum ) {
56 %  $cust_pkg = qsearchs('cust_pkg', { 'pkgnum' => $pkgnum } );
57 %  $cust_main = $cust_pkg->cust_main;
58 %}
59 %
60 %unless ( $svcnum || $cgi->param('error') ) { #adding
61 %
62 %  #set gecos
63 %  if ($cust_main) {
64 %    unless ( $part_svc->part_svc_column('uid')->columnflag eq 'F' ) {
65 %      $svc_acct->setfield('finger',
66 %        $cust_main->getfield('first') . " " . $cust_main->getfield('last')
67 %      );
68 %    }
69 %  }
70 %
71 %  $svc_acct->set_default_and_fixed( {
72 %    #false laziness w/svc-acct::_fieldhandlers
73 %    'usergroup' => sub { 
74 %                         my( $self, $groups ) = @_;
75 %                         if ( ref($groups) eq 'ARRAY' ) {
76 %                           @groups = @$groups;
77 %                           $groups;
78 %                         } elsif ( length($groups) ) {
79 %                           @groups = split(/\s*,\s*/, $groups);
80 %                           [ @groups ];
81 %                         } else {
82 %                           @groups = ();
83 %                           [];
84 %                         }
85 %                       }
86 %  } );
87 %
88 %}
89 %
90 %#fixed radius groups always override & display
91 %if ( $part_svc->part_svc_column('usergroup')->columnflag eq 'F' ) {
92 %  @groups = split(',', $part_svc->part_svc_column('usergroup')->columnvalue);
93 %}
94 %
95 %my $action = $svcnum ? 'Edit' : 'Add';
96 %
97 %my $svc = $part_svc->getfield('svc');
98 %
99 %my $otaker = getotaker;
100 %
101 %my $username = $svc_acct->username;
102 %my $password;
103 %if ( $svc_acct->_password ) {
104 %  if ( $conf->exists('showpasswords') || ! $svcnum ) {
105 %    $password = $svc_acct->_password;
106 %  } else {
107 %    $password = "*HIDDEN*";
108 %  }
109 %} else {
110 %  $password = '';
111 %}
112 %
113 %my $ulen = 
114 %  $conf->exists('usernamemax')
115 %  ? $conf->config('usernamemax')
116 %  : dbdef->table('svc_acct')->column('username')->length;
117 %my $ulen2 = $ulen+2;
118 %
119 %my $pmax = $conf->config('passwordmax') || 8;
120 %my $pmax2 = $pmax+2;
121 %
122 %my $p1 = popurl(1);
123 %
124 %
125
126
127 <% include("/elements/header.html","$action $svc account") %>
128 % if ( $cgi->param('error') ) { 
129
130   <FONT SIZE="+1" COLOR="#ff0000">Error: <% $cgi->param('error') %></FONT>
131   <BR><BR>
132 % } 
133 % if ( $cust_main ) { 
134
135   <% include( '/elements/small_custview.html', $cust_main, '', 1 ) %>
136   <BR>
137 % } 
138
139
140 <FORM NAME="OneTrueForm" ACTION="<% $p1 %>process/svc_acct.cgi" METHOD=POST>
141 <INPUT TYPE="hidden" NAME="svcnum" VALUE="<% $svcnum %>">
142 <INPUT TYPE="hidden" NAME="pkgnum" VALUE="<% $pkgnum %>">
143 <INPUT TYPE="hidden" NAME="svcpart" VALUE="<% $svcpart %>">
144
145 Service # <% $svcnum ? "<B>$svcnum</B>" : " (NEW)" %><BR>
146
147 <% ntable("#cccccc",2) %>
148
149 <TR>
150   <TD ALIGN="right">Service</TD>
151   <TD BGCOLOR="#eeeeee"><% $part_svc->svc %></TD>
152 </TR>
153
154 <TR>
155   <TD ALIGN="right">Username</TD>
156   <TD>
157     <INPUT TYPE="text" NAME="username" VALUE="<% $username %>" SIZE=<% $ulen2 %> MAXLENGTH=<% $ulen %>>
158   </TD>
159 </TR>
160
161 <TR>
162   <TD ALIGN="right">Password</TD>
163   <TD>
164     <INPUT TYPE="text" NAME="_password" VALUE="<% $password %>" SIZE=<% $pmax2 %> MAXLENGTH=<% $pmax %>>
165     (blank to generate)
166   </TD>
167 </TR>
168 %
169 %my $sec_phrase = $svc_acct->sec_phrase;
170 %if ( $conf->exists('security_phrase') ) {
171 %
172
173
174   <TR>
175     <TD ALIGN="right">Security phrase</TD>
176     <TD>
177       <INPUT TYPE="text" NAME="sec_phrase" VALUE="<% $sec_phrase %>" SIZE=32>
178       (for forgotten passwords)
179     </TD>
180   </TD>
181 % } else { 
182
183
184   <INPUT TYPE="hidden" NAME="sec_phrase" VALUE="<% $sec_phrase %>">
185 % } 
186 %
187 %#domain
188 %my $domsvc = $svc_acct->domsvc || 0;
189 %if ( $part_svc->part_svc_column('domsvc')->columnflag eq 'F' ) {
190 %
191
192
193   <INPUT TYPE="hidden" NAME="domsvc" VALUE="<% $domsvc %>">
194 % } else { 
195 %
196 %  my %svc_domain = ();
197 %
198 %  if ( $domsvc ) {
199 %    my $svc_domain = qsearchs('svc_domain', { 'svcnum' => $domsvc, } );
200 %    if ( $svc_domain ) {
201 %      $svc_domain{$svc_domain->svcnum} = $svc_domain;
202 %    } else {
203 %      warn "unknown svc_domain.svcnum for svc_acct.domsvc: $domsvc";
204 %    }
205 %  }
206 %
207 %  if ( $part_svc->part_svc_column('domsvc')->columnflag eq 'D' ) {
208 %    my $svc_domain = qsearchs('svc_domain', {
209 %      'svcnum' => $part_svc->part_svc_column('domsvc')->columnvalue,
210 %    } );
211 %    if ( $svc_domain ) {
212 %      $svc_domain{$svc_domain->svcnum} = $svc_domain;
213 %    } else {
214 %      warn "unknown svc_domain.svcnum for part_svc_column domsvc: ".
215 %           $part_svc->part_svc_column('domsvc')->columnvalue;
216 %    }
217 %  }
218 %
219 %  if ($cust_pkg && !$conf->exists('svc_acct-alldomains') ) {
220 %    my @cust_svc =
221 %      map { qsearch('cust_svc', { 'pkgnum' => $_->pkgnum } ) }
222 %          qsearch('cust_pkg', { 'custnum' => $cust_pkg->custnum } );
223 %    foreach my $cust_svc ( @cust_svc ) {
224 %      my $svc_domain =
225 %        qsearchs('svc_domain', { 'svcnum' => $cust_svc->svcnum } );
226 %     $svc_domain{$svc_domain->svcnum} = $svc_domain if $svc_domain;
227 %    }
228 %  } else {
229 %    %svc_domain = map { $_->svcnum => $_ } qsearch('svc_domain', {} );
230 %  }
231 %
232 %
233
234
235   <TR>
236     <TD ALIGN="right">Domain</TD>
237     <TD>
238       <SELECT NAME="domsvc" SIZE=1>
239 % foreach my $svcnum (
240 %             sort { $svc_domain{$a}->domain cmp $svc_domain{$b}->domain }
241 %                  keys %svc_domain
242 %           ) {
243 %             my $svc_domain = $svc_domain{$svcnum};
244 %        
245
246
247              <OPTION VALUE="<% $svc_domain->svcnum %>" <% $svc_domain->svcnum == $domsvc ? ' SELECTED' : '' %>><% $svc_domain->domain %>
248 % } 
249
250       </SELECT>
251     </TD>
252   </TR>
253 % } 
254 %
255 %#pop
256 %my $popnum = $svc_acct->popnum || 0;
257 %if ( $part_svc->part_svc_column('popnum')->columnflag eq 'F' ) {
258 %
259
260
261   <INPUT TYPE="hidden" NAME="popnum" VALUE="<% $popnum %>">
262 % } else { 
263
264
265   <TR>
266     <TD ALIGN="right">Access number</TD>
267     <TD><% FS::svc_acct_pop::popselector($popnum) %></TD>
268   </TR>
269 % } 
270 % #uid/gid 
271 % foreach my $xid (qw( uid gid )) { 
272 %
273 %  if ( $part_svc->part_svc_column($xid)->columnflag =~ /^[FA]$/
274 %       || ! $conf->exists("svc_acct-edit_$xid")
275 %     ) {
276 %  
277 % if ( length($svc_acct->$xid()) ) { 
278
279   
280       <TR>
281         <TD ALIGN="right"><% uc($xid) %></TD>
282           <TD BGCOLOR="#eeeeee"><% $svc_acct->$xid() %></TD>
283         <TD>
284         </TD>
285       </TR>
286 % } 
287
288   
289     <INPUT TYPE="hidden" NAME="<% $xid %>" VALUE="<% $svc_acct->$xid() %>">
290 % } else { 
291
292   
293     <TR>
294       <TD ALIGN="right"><% uc($xid) %></TD>
295       <TD>
296         <INPUT TYPE="text" NAME="<% $xid %>" SIZE=8 MAXLENGTH=6 VALUE="<% $svc_acct->$xid() %>">
297       </TD>
298     </TR>
299 % } 
300 % } 
301 %
302 %#finger
303 %if ( $part_svc->part_svc_column('uid')->columnflag eq 'F'
304 %     && ! $svc_acct->finger ) { 
305 %
306
307
308   <INPUT TYPE="hidden" NAME="finger" VALUE="">
309 % } else { 
310
311
312   <TR>
313     <TD ALIGN="right">GECOS</TD>
314     <TD>
315       <INPUT TYPE="text" NAME="finger" VALUE="<% $svc_acct->finger %>">
316     </TD>
317   </TR>
318 % } 
319
320
321
322 <INPUT TYPE="hidden" NAME="dir" VALUE="<% $svc_acct->dir %>">
323 %
324 %#shell
325 %my $shell = $svc_acct->shell;
326 %if ( $part_svc->part_svc_column('shell')->columnflag eq 'F'
327 %     || ( !$shell && $part_svc->part_svc_column('uid')->columnflag eq 'F' )
328 %   ) {
329 %
330
331
332   <INPUT TYPE="hidden" NAME="shell" VALUE="<% $shell %>">
333 % } else { 
334
335
336   <TR>
337     <TD ALIGN="right">Shell</TD>
338     <TD>
339       <SELECT NAME="shell" SIZE=1>
340 %
341 %           my($etc_shell);
342 %           foreach $etc_shell (@shells) {
343 %        
344
345
346           <OPTION<% $etc_shell eq $shell ? ' SELECTED' : '' %>><% $etc_shell %>
347 % } 
348
349
350       </SELECT>
351     </TD>
352   </TR>
353 % } 
354 % if ( $part_svc->part_svc_column('quota')->columnflag eq 'F' ) { 
355
356
357   <INPUT TYPE="hidden" NAME="quota" VALUE="<% $svc_acct->quota %>">
358 % } else { 
359
360
361   <TR>
362     <TD ALIGN="right">Quota:</TD>
363     <TD><INPUT TYPE="text" NAME="quota" VALUE="<% $svc_acct->quota %>"></TD>
364   </TR>
365 % } 
366 % if ( $part_svc->part_svc_column('slipip')->columnflag =~ /^[FA]$/ ) { 
367
368
369   <INPUT TYPE="hidden" NAME="slipip" VALUE="<% $svc_acct->slipip %>">
370 % } else { 
371
372
373   <TR>
374     <TD ALIGN="right">IP</TD>
375     <TD><INPUT TYPE="text" NAME="slipip" VALUE="<% $svc_acct->slipip %>"></TD>
376   </TR>
377 % } 
378 %
379 %foreach my $r ( grep { /^r(adius|[cr])_/ } fields('svc_acct') ) {
380 %  $r =~ /^^r(adius|[cr])_(.+)$/ or next; #?
381 %  my $a = $2;
382 %
383 % if ( $part_svc->part_svc_column($r)->columnflag =~ /^[FA]$/ ) { 
384
385
386     <INPUT TYPE="hidden" NAME="<% $r %>" VALUE="<% $svc_acct->getfield($r) %>">
387 % } else { 
388
389
390     <TR>
391       <TD ALIGN="right"><% $FS::raddb::attrib{$a} %></TD>
392       <TD><INPUT TYPE="text" NAME="<% $r %>" VALUE="<% $svc_acct->getfield($r) %>"></TD>
393     </TR>
394 % } 
395 % } 
396
397
398
399 <TR>
400   <TD ALIGN="right">RADIUS groups</TD>
401 % if ( $part_svc->part_svc_column('usergroup')->columnflag eq 'F' ) { 
402
403
404     <TD BGCOLOR="#eeeeee"><% join('<BR>', @groups) %></TD>
405 % } else { 
406
407
408     <TD><% FS::svc_acct::radius_usergroup_selector( \@groups ) %></TD>
409 % } 
410
411
412 </TR>
413 % foreach my $field ($svc_acct->virtual_fields) { 
414 % # If the flag is X, it won't even show up in $svc_acct->virtual_fields. 
415 % if ( $part_svc->part_svc_column($field)->columnflag ne 'F' ) { 
416
417
418     <% $svc_acct->pvf($field)->widget('HTML', 'edit', $svc_acct->getfield($field)) %>
419 % } 
420 % } 
421
422   
423 </TABLE>
424 <BR>
425
426 <INPUT TYPE="submit" VALUE="Submit">
427
428 </FORM></BODY></HTML>