communigate (phase 2): Account Preferences (& Domain::Account Defaults:Preferences...
[freeside.git] / httemplate / edit / svc_acct.cgi
index 58283ef..5c2d5f4 100755 (executable)
@@ -9,6 +9,18 @@
   <BR>
 % } 
 
+<SCRIPT TYPE="text/javascript">
+function randomPass() {
+  var i=0;
+  var pw_set='<% join('', 'a'..'z', 'A'..'Z', '0'..'9' ) %>';
+  var pass='';
+  while(i < 8) {
+    i++;
+    pass += pw_set.charAt(Math.floor(Math.random() * pw_set.length));
+  }
+  document.OneTrueForm.clear_password.value = pass;
+}
+</SCRIPT>
 
 <FORM NAME="OneTrueForm" ACTION="<% $p1 %>process/svc_acct.cgi" METHOD=POST>
 <INPUT TYPE="hidden" NAME="svcnum" VALUE="<% $svcnum %>">
@@ -35,13 +47,14 @@ Service # <% $svcnum ? "<B>$svcnum</B>" : " (NEW)" %><BR>
 <TR>
   <TD ALIGN="right">Password</TD>
   <TD>
-    <INPUT TYPE="text" NAME="_password" VALUE="<% $password %>" SIZE=<% $pmax2 %> MAXLENGTH=<% $pmax %>>
-    (blank to generate)
+    <INPUT TYPE="text" NAME="clear_password" VALUE="<% $password %>" SIZE=<% $pmax2 %> MAXLENGTH=<% $pmax %>>
+    <INPUT TYPE="button" VALUE="Generate" onclick="randomPass();">
   </TD>
 </TR>
 %}else{
-    <INPUT TYPE="hidden" NAME="_password" VALUE="<% $password %>">
+    <INPUT TYPE="hidden" NAME="clear_password" VALUE="<% $password %>">
 %}
+<INPUT TYPE="hidden" NAME="_password_encoding" VALUE="<% $svc_acct->_password_encoding %>">
 %
 %my $sec_phrase = $svc_acct->sec_phrase;
 %if ( $conf->exists('security_phrase') 
@@ -109,7 +122,27 @@ Service # <% $svcnum ? "<B>$svcnum</B>" : " (NEW)" %><BR>
     </TD>
   </TR>
 % } 
-%
+
+
+% if ( $communigate ) {
+
+    <TR>
+      <TD ALIGN="right">Aliases</TD>
+      <TD><INPUT TYPE="text" NAME="cgp_aliases" VALUE="<% $svc_acct->cgp_aliases %>"></TD>
+    </TR>
+
+% } else {
+    <INPUT TYPE="hidden" NAME="cgp_aliases" VALUE="<% $svc_acct->cgp_aliases %>">
+% }
+
+
+<% include('/elements/tr-select-svc_pbx.html',
+             'curr_value' => $svc_acct->pbxsvc,
+             'part_svc'   => $part_svc,
+             'cust_pkg'   => $cust_pkg,
+          )
+%>
+
 %#pop
 %my $popnum = $svc_acct->popnum || 0;
 %if ( $part_svc->part_svc_column('popnum')->columnflag eq 'F' ) {
@@ -168,7 +201,7 @@ Service # <% $svcnum ? "<B>$svcnum</B>" : " (NEW)" %><BR>
 
 
   <TR>
-    <TD ALIGN="right">GECOS</TD>
+    <TD ALIGN="right">Real Name</TD>
     <TD>
       <INPUT TYPE="text" NAME="finger" VALUE="<% $svc_acct->finger %>">
     </TD>
@@ -221,31 +254,289 @@ Service # <% $svcnum ? "<B>$svcnum</B>" : " (NEW)" %><BR>
     </TD>
   </TR>
 % } 
-% if ( $part_svc->part_svc_column('quota')->columnflag eq 'F' ) { 
 
 
+% if ( $communigate
+%      && $part_svc->part_svc_column('cgp_type')->columnflag ne 'F' )
+% {
+
+% # settings
+
+  <TR>
+    <TD ALIGN="right">Mailbox type</TD>
+    <TD>
+      <SELECT NAME="cgp_type">
+%       foreach my $option (qw( MultiMailbox TextMailbox MailDirMailbox
+%                               AGrade BGrade CGrade                    )) {
+          <OPTION VALUE="<% $option %>"
+                  <% $option eq $svc_acct->cgp_type() ? 'SELECTED' : '' %>
+          ><% $option %>
+%       }
+      </SELECT>
+    </TD>
+  </TR>
+
+% } else {
+    <INPUT TYPE="hidden" NAME="cgp_type" VALUE="<% $svc_acct->cgp_type() %>">
+% }
+
+
+% #false laziness w/svc_domain
+% if ( $communigate
+%      && $part_svc->part_svc_column('cgp_accessmodes')->columnflag ne 'F' )
+% {
+
+  <TR>
+    <TD ALIGN="right">Enabled services</TD>
+    <TD>
+      <% include( '/elements/communigate_pro-accessmodes.html',
+                    'curr_value' => $svc_acct->cgp_accessmodes,
+                )
+      %>
+    </TD>
+  </TR>
+
+% } else {
+    <INPUT TYPE="hidden" NAME="cgp_accessmodes" VALUE="<% $svc_acct->cgp_accessmodes() |h %>">
+% }
+
+
+% if ( $part_svc->part_svc_column('quota')->columnflag eq 'F' ) { 
   <INPUT TYPE="hidden" NAME="quota" VALUE="<% $svc_acct->quota %>">
-% } else { 
+% } else {
+%   my $quota_label = $communigate ? 'Mail storage limit' : 'Quota';
+    <TR>
+      <TD ALIGN="right"><% $quota_label %></TD>
+      <TD><INPUT TYPE="text" NAME="quota" VALUE="<% $svc_acct->quota %>"></TD>
+    </TR>
+% }
 
+% tie my %cgp_label, 'Tie::IxHash',
+%   'file_quota'   => 'File storage limit',
+%   'file_maxnum'  => 'Number of files limit',
+%   'file_maxsize' => 'File size limit',
+% ;
+%
+% foreach my $key (keys %cgp_label) {
+%
+%   if ( !$communigate || $part_svc->part_svc_column($key)->columnflag eq 'F' ){
+      <INPUT TYPE="hidden" NAME="<%$key%>" VALUE="<% $svc_acct->$key() |h %>">
+%   } else {
+
+      <TR>
+        <TD ALIGN="right"><% $cgp_label{$key} %></TD>
+        <TD><INPUT TYPE="text" NAME="<% $key %>" VALUE="<% $svc_acct->$key() |h %>"></TD>
+      </TR>
 
+%   }
+% }
+
+% if ( $communigate ) {
+
+  <% include('/elements/tr-checkbox.html',
+               'label'      => 'Password recovery',
+               'field'      => 'password_recover',
+               'curr_value' => $svc_acct->password_recover,
+               'value'      => 'Y',
+            )
+  %>
+
+  <% include('/elements/tr-select.html',
+               'label'      => 'Allowed mail rules',
+               'field'      => 'cgp_rulesallowed',
+               'options'    => [ '', 'No', 'Filter Only', 'All But Exec', 'Any' ],
+               'labels'     => {
+                                 '' => 'default (No)', #No always the default?
+                               },
+               'curr_value' => $svc_acct->cgp_rulesallowed,
+            )
+  %>
+
+  <% include('/elements/tr-checkbox.html',
+               'label'      => 'RPOP modifications',
+               'field'      => 'cgp_rpopallowed',
+               'curr_value' => $svc_acct->cgp_rpopallowed,
+               'value'      => 'Y',
+            )
+  %>
+
+  <% include('/elements/tr-checkbox.html',
+               'label'      => 'Accepts mail to "all"',
+               'field'      => 'cgp_mailtoall',
+               'curr_value' => $svc_acct->cgp_mailtoall,
+               'value'      => 'Y',
+            )
+  %>
+
+  <% include('/elements/tr-checkbox.html',
+               'label'      => 'Add trailer to sent mail',
+               'field'      => 'cgp_addmailtrailer',
+               'curr_value' => $svc_acct->cgp_addmailtrailer,
+               'value'      => 'Y',
+            )
+  %>
+
+%  #preferences
+
+%# false laziness w/svc_domain acct_def
   <TR>
-    <TD ALIGN="right">Quota:</TD>
-    <TD><INPUT TYPE="text" NAME="quota" VALUE="<% $svc_acct->quota %>"></TD>
+    <TD ALIGN="right">Message delete method</TD>
+    <TD>
+      <SELECT NAME="cgp_deletemode">
+%       for ( 'Move To Trash', 'Immediately', 'Mark' ) {
+          <OPTION VALUE="<% $_ %>"
+                  <% $_ eq $svc_acct->cgp_deletemode ? 'SELECTED' : '' %>
+          ><% $_ %>
+%       }
+      </SELECT>
+    </TD>
+  </TR>
+
+  <TR>
+    <TD ALIGN="right">On logout remove trash</TD>
+    <TD><INPUT TYPE="text" NAME="cgp_emptytrash" VALUE="<% $svc_acct->cgp_emptytrash %>"></TD>
   </TR>
-% } 
-% if ( $part_svc->part_svc_column('slipip')->columnflag =~ /^[FA]$/ ) { 
 
+  <% include('/elements/tr-select.html',
+               'label'      => 'Language',
+               'field'      => 'cgp_language',
+               'options'    => [ '', qw( English Arabic Chinese Dutch French German Hebrew Italian Japanese Portuguese Russian Slovak Spanish Thai ) ],
+               'labels'     => {
+                                 '' => 'default (English)',
+                               },
+               'curr_value' => $svc_acct->cgp_language,
+            )
+  %>
+
+  <% include('/elements/tr-select.html',
+               'label'      => 'Time zone',
+               'field'      => 'cgp_timezone',
+               'options'    => [
+                                 'HostOS',
+                                 '(+0100) Algeria/Congo',
+                                 '(+0200) Egypt/South Africa',
+                                 '(+0300) Saudi Arabia',
+                                 '(+0400) Oman',
+                                 '(+0500) Pakistan',
+                                 '(+0600) Bangladesh',
+                                 '(+0700) Thailand/Vietnam',
+                                 '(+0800) China/Malaysia',
+                                 '(+0900) Japan/Korea',
+                                 '(+1000) Queensland',
+                                 '(+1100) Micronesia',
+                                 '(+1200) Fiji',
+                                 '(+1300) Tonga/Kiribati',
+                                 '(+1400) Christmas Islands',
+                                 '(-0100) Azores/Cape Verde',
+                                 '(-0200) Fernando de Noronha',
+                                 '(-0300) Argentina/Uruguay',
+                                 '(-0400) Venezuela/Guyana',
+                                 '(-0500) Haiti/Peru',
+                                 '(-0600) Central America',
+                                 '(-0700) Arisona',
+                                 '(-0800) Adamstown',
+                                 '(-0900) Marquesas Islands',
+                                 '(-1000) Hawaii/Tahiti',
+                                 '(-1100) Samoa',
+                                 'Asia/Afghanistan',
+                                 'Asia/India',
+                                 'Asia/Iran',
+                                 'Asia/Iraq',
+                                 'Asia/Israel',
+                                 'Asia/Jordan',
+                                 'Asia/Lebanon',
+                                 'Asia/Syria',
+                                 'Australia/Adelaide',
+                                 'Australia/East',
+                                 'Australia/NorthernTerritory',
+                                 'Europe/Central',
+                                 'Europe/Eastern',
+                                 'Europe/Moscow',
+                                 'Europe/Western',
+                                 'GMT (+0000)',
+                                 'Newfoundland',
+                                 'NewZealand/Auckland',
+                                 'NorthAmerica/Alaska',
+                                 'NorthAmerica/Atlantic',
+                                 'NorthAmerica/Central',
+                                 'NorthAmerica/Eastern',
+                                 'NorthAmerica/Mountain',
+                                 'NorthAmerica/Pacific',
+                                 'Russia/Ekaterinburg',
+                                 'Russia/Irkutsk',
+                                 'Russia/Kamchatka',
+                                 'Russia/Krasnoyarsk',
+                                 'Russia/Magadan',
+                                 'Russia/Novosibirsk',
+                                 'Russia/Vladivostok',
+                                 'Russia/Yakutsk',
+                                 'SouthAmerica/Brasil',
+                                 'SouthAmerica/Chile',
+                                 'SouthAmerica/Paraguay',
+                               ],
+               'labels'     => {
+                                 '' => 'default (HostOS)',
+                               },
+               'curr_value' => $svc_acct->cgp_timezone,
+            )
+  %>
+
+  <% include('/elements/tr-select.html',
+               'label'      => 'Layout',
+               'field'      => 'cgp_skinname',
+               'options'    => [ '', '***', 'GoldFleece', 'Skin2' ],
+               'labels'     => {
+                                 '' => 'default (***)',
+                               },
+               'curr_value' => $svc_acct->cgp_skinname,
+            )
+  %>
+
+  <% include('/elements/tr-select.html',
+               'label'      => 'Pronto style',
+               'field'      => 'cgp_prontoskinname',
+               'options'    => [ '', 'Pronto', 'Pronto-darkflame', 'Pronto-steel', 'Pronto-twilight', ],
+
+               'curr_value' => $svc_acct->cgp_prontoskinname,
+            )
+  %>
+
+  <% include('/elements/tr-select.html',
+               'label'      => 'Send read receipts',
+               'field'      => 'cgp_sendmdnmode',
+               'options'    => [ '', 'Never', 'Manually', 'Automatically' ],
+               'labels'     => {
+                                 '' => 'default (Automatically)',
+                               },
+               'curr_value' => $svc_acct->cgp_language,
+            )
+  %>
+
+%#XXX vacation message, redirect all mail, mail rules
 
-  <INPUT TYPE="hidden" NAME="slipip" VALUE="<% $svc_acct->slipip %>">
-% } else { 
+% } else {
+
+%   for (qw( password_recover cgp_rulesallowed cgp_rpopallowed cgp_mailtoall
+%            cgp_addmailtrailer
+%            cgp_deletemode cgp_emptytrash cgp_language cgp_timezone
+%            cgp_skinname cgp_sendmdnmode
+%          ) ) {
 
+      <INPUT TYPE="hidden" NAME="<% $_ %>" VALUE="<% $svc_acct->$_() %>">
+%   }
 
+% }
+
+
+% if ( $part_svc->part_svc_column('slipip')->columnflag =~ /^[FA]$/ ) { 
+  <INPUT TYPE="hidden" NAME="slipip" VALUE="<% $svc_acct->slipip %>">
+% } else { 
   <TR>
     <TD ALIGN="right">IP</TD>
     <TD><INPUT TYPE="text" NAME="slipip" VALUE="<% $svc_acct->slipip %>"></TD>
   </TR>
 % } 
-%
+
 % my %label = ( seconds => 'Time',
 %               upbytes => 'Upload bytes',
 %               downbytes => 'Download bytes',
@@ -354,9 +645,11 @@ if ( $cgi->param('error') ) {
   $part_svc=qsearchs('part_svc',{'svcpart'=>$svcpart});
   die "No part_svc entry!" unless $part_svc;
 
-    $svc_acct = new FS::svc_acct({svcpart => $svcpart}); 
+  $svc_acct = new FS::svc_acct({svcpart => $svcpart}); 
 
-    $svcnum='';
+  $svcnum='';
+
+  $svc_acct->password_recover('Y'); #default. hmm.
 
 } else { #editing
 
@@ -379,6 +672,9 @@ if ( $cgi->param('error') ) {
 
 }
 
+my $communigate = scalar($part_svc->part_export('communigate_pro'));
+                # || scalar($part_svc->part_export('communigate_pro_singledomain'));
+
 my( $cust_pkg, $cust_main ) = ( '', '' );
 if ( $pkgnum ) {
   $cust_pkg = qsearchs('cust_pkg', { 'pkgnum' => $pkgnum } );
@@ -427,15 +723,17 @@ my $svc = $part_svc->getfield('svc');
 my $otaker = getotaker;
 
 my $username = $svc_acct->username;
-my $password;
-if ( $svc_acct->_password ) {
-  if ( $conf->exists('showpasswords') || ! $svcnum ) {
-    $password = $svc_acct->_password;
-  } else {
-    $password = "*HIDDEN*";
+
+my $password = '';
+if ( $cgi->param('error') ) {
+  $password = $cgi->param('clear_password');
+} elsif ( $svcnum ) {
+  my $password_encryption = $svc_acct->_password_encryption;
+  if ( $password = $svc_acct->get_cleartext_password ) {
+    $password = '*HIDDEN*' unless $conf->exists('showpasswords');
+  } elsif( $svc_acct->_password and $password_encryption ne 'plain' ) {
+    $password = "(".uc($password_encryption)." encrypted)";
   }
-} else {
-  $password = '';
 }
 
 my $ulen = 
@@ -444,9 +742,13 @@ my $ulen =
   : dbdef->table('svc_acct')->column('username')->length;
 my $ulen2 = $ulen+2;
 
-my $pmax = $conf->config('passwordmax') || 8;
+my $pmax = max($conf->config('passwordmax') || 13);
 my $pmax2 = $pmax+2;
 
 my $p1 = popurl(1);
 
+sub max {
+  (sort(@_))[-1]
+}
+
 </%init>