root/modules/branches/2.9/voicemail/page.voicemail.php

Revision 10874, 53.4 kB (checked in by p_lindheimer, 2 years ago)

closes #4736 merge vmailadmin into core voicemail module

Line 
1 <?php
2 /*
3   This program is free software; you can redistribute it and/or
4   modify it under the terms of the GNU General Public License
5   as published by the Free Software Foundation; either version 2
6   of the License, or (at your option) any later version.
7
8   This program is distributed in the hope that it will be useful,
9   but WITHOUT ANY WARRANTY; without even the implied warranty of
10   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11   GNU General Public License for more details.
12 */
13
14 /* All extensions. */
15 $extens     = core_users_list();
16 /* All voicemail.conf settings. */
17 $uservm     = voicemail_getVoicemail();
18 /* VMAIL info - needed for rnav menu and other page content. */
19 $vmail_info["activated_info"]   = array();
20 $vmail_info["bycontext"]        = array();
21 $vmail_info["unactivated_info"] = array();
22 $vmail_info["disabled_list"]    = array();
23 $vmail_info["contexts"]         = array();
24 $vmail_info["contexts"]     = array_keys($uservm);        /* All voicemail contexts. */
25
26 $extdisplay             = isset($_REQUEST["ext"])?$_REQUEST["ext"]:"";
27 $type                = (isset($_REQUEST["type"]) && $_REQUEST["type"] != "")?$_REQUEST["type"]:"setup";
28 $display            = (isset($_REQUEST["display"]) && $_REQUEST["display"] != "")?$_REQUEST["display"]:"voicemail";
29
30 $rnav_list              = "";
31 $rnav_enabled_index         = array();
32 $rnav_entries             = array();
33
34 /* Activated mailboxes are those which have a subdirectory on disk. */
35 global $amp_conf;
36 $vmail_root = "/" . trim($amp_conf["ASTSPOOLDIR"] , "/") . "/voicemail";
37
38 if (isset($extens) && is_array($extens)) {
39     $i = 0;
40     foreach ($extens as $key => $exten) {
41         $vmbox = null;
42         /* Voicemail is enabled for this extension when it is associated with a voicemail context. */
43         foreach ($vmail_info["contexts"] as $vmcontext) {
44             if (isset($uservm[$vmcontext][$exten[0]])) {
45                 $vmbox["context"] = $vmcontext;
46                 break;
47             }
48         }
49
50         /* FOR RNAV MENU */
51         $name = $exten[1];
52         $unactivated_style = "";
53         $unactivated_txt = "";
54         $disabled_style = "";
55         $disabled_txt = "";
56         $c = "";
57         $c = isset($vmbox["context"])?$vmbox["context"]:"";
58         if ($vmbox !== null) {
59             $vmail_info["bycontext"][$vmbox["context"]][] = $exten[0];
60             $vmbox["path"] = $vmail_root . "/" . $vmbox["context"] . "/" . $exten[0];
61             $rnav_enabled_index[$vmbox["context"]][] = $i;
62             if (is_dir($vmbox["path"])) {
63                 $vmail_info["activated_info"][$exten[0]] = $vmbox["context"];
64             } else {
65                 $vmail_info["unactivated_info"][$exten[0]] = $vmbox["context"];
66                 $unactivated_style = " style='background: #abc9ff;'";
67                 $unactivated_txt = " [unactivated]";
68             }
69             $link = "config.php?type=" . $type . "&display=" . $display . "&ext=" . $exten[0] . "&action=bsettings#" . $exten[0];
70         } else {
71             /* Voicemail is disabled for this extension. */
72             $vmail_info["disabled_list"][] = $exten[0];
73             $disabled_txt = "disabled";
74             $disabled_style = " style='background: #ffffcc; text-decoration: line-through;'";
75             /* Distinguish between "extensions" and "deviceanduser" modes. */
76             if (isset($amp_conf["AMPEXTENSIONS"]) && ($amp_conf["AMPEXTENSIONS"] == "extensions")) {
77                 $link = "config.php?type=setup&display=extensions&extdisplay=" . $exten[0] . "#" . $exten[0];
78             } else {
79                 $link = "config.php?type=setup&display=users&extdisplay=" . $exten[0] . "#" . $exten[0];
80             }
81         }
82         $rnav_entries[$i] = "\t<li id='voicemail_list_" . $exten[0] . "'${disabled_style}${unactivated_style}><a" . ($extdisplay==$exten[0] ? ' class="current"':'') . "${disabled_style}${unactivated_style} href=\"$link\" onHover='menuUpdatePos();'>{$name} &lt;" . $exten[0] . "&gt;&nbsp;&nbsp;(${c}${disabled_txt})${unactivated_txt}</a></li>\n";
83         $i++;
84     }
85 }
86
87 /* End VMAIL info processing. */
88
89 /* Settings options */
90 $dlen = 800;    /* default max length on text entry */
91 $gen_settings = array(        "adsifdn"             => array("ver" => 1.2, "len" => 4, "type" => "char"),
92                 "adsisec"             => array("ver" => 1.2, "len" => 4, "type" => "char"),
93                 "adsiver"             => array("ver" => 1.2, "len" => $dlen, "type" => "num"),
94                 "attach"             => array("ver" => 1.2, "len" => $dlen, "type" => "flag"),
95                 "authpassword"             => array("ver" => 1.4, "len" => $dlen, "type" => "char"),
96                     "authuser"             => array("ver" => 1.4, "len" => $dlen, "type" => "char"),
97                 "backupdeleted"         => array("ver" => 1.6, "len" => $dlen, "type" => "char"),
98                 "callback"             => array("ver" => 1.2, "len" => 80, "type" => "char"),
99                 "charset"              => array("ver" => 1.2, "len" => 32, "type" => "char"),
100                     "cidinternalcontexts"         => array("ver" => 1.2, "len" => 640, "type" => "char"),
101                 "dialout"              => array("ver" => 1.2, "len" => 80, "type" => "char"),
102                 "emailbody"             => array("ver" => 1.2, "len" => $dlen, "type" => "char"),
103                 "emaildateformat"         => array("ver" => 1.2, "len" => 32, "type" => "char"),
104                 "emailsubject"                  => array("ver" => 1.2, "len" => $dlen, "type" => "char"),
105                 "envelope"                      => array("ver" => 1.2, "len" => $dlen, "type" => "flag"),
106                 "exitcontext"                   => array("ver" => 1.2, "len" => 80, "type" => "char"),
107                 "expungeonhangup"               => array("ver" => 1.2, "len" => $dlen, "type" => "char"),
108                 "externnotify"                  => array("ver" => 1.2, "len" => 160, "type" => "char"),
109                 "externpass"                    => array("ver" => 1.2, "len" => 128, "type" => "char"),
110                 "externpassnotify"              => array("ver" => 1.6, "len" => 128, "type" => "char"),
111                 "forcegreetings"                => array("ver" => 1.2, "len" => $dlen, "type" => "flag"),
112                 "forcename"                     => array("ver" => 1.2, "len" => $dlen, "type" => "flag"),
113                 "format"                        => array("ver" => 1.2, "len" => 80, "type" => "char"),
114                 "fromstring"                    => array("ver" => 1.2, "len" => 100, "type" => "char"),
115                 "greetingsfolder"               => array("ver" => 1.6, "len" => $dlen, "type" => "char"),
116                 "imapclosetimeout"              => array("ver" => 1.4, "len" => $dlen, "type" => "char"),
117                 "imapflags"                     => array("ver" => 1.4, "len" => $dlen, "type" => "char"),
118                 "imapfolder"                    => array("ver" => 1.4, "len" => $dlen, "type" => "char"),
119                 "imapgreetings"                 => array("ver" => 1.6, "len" => $dlen, "type" => "char"),
120                 "imapopentimeout"               => array("ver" => 1.6, "len" => $dlen, "type" => "char"),
121                 "imapparentfolder"              => array("ver" => 1.6, "len" => $dlen, "type" => "char"),
122                 "imapport"                      => array("ver" => 1.4, "len" => $dlen, "type" => "char"),
123                 "imapreadtimeout"               => array("ver" => 1.4, "len" => $dlen, "type" => "char"),
124                 "imapserver"                    => array("ver" => 1.4, "len" => $dlen, "type" => "char"),
125                 "imapwritetimeout"              => array("ver" => 1.4, "len" => $dlen, "type" => "char"),
126                 "listen-control-forward-key"    => array("ver" => 1.6, "len" => $dlen, "type" => "char"),
127                 "listen-control-pause-key"      => array("ver" => 1.6, "len" => $dlen, "type" => "char"),
128                 "listen-control-restart-key"    => array("ver" => 1.6, "len" => $dlen, "type" => "char"),
129                 "listen-control-reverse-key"    => array("ver" => 1.6, "len" => $dlen, "type" => "char"),
130                 "listen-control-stop-key"       => array("ver" => 1.6, "len" => $dlen, "type" => "char"),
131                 "mailcmd"                       => array("ver" => 1.2, "len" => $dlen, "type" => "char"),
132                 "maxgreet"                      => array("ver" => 1.2, "len" => $dlen, "type" => "num"),
133                 "maxlogins"                     => array("ver" => 1.2, "len" => $dlen, "type" => "num"),
134                 "maxmessage"            => array("ver" => 1.2, "len" => $dlen, "type" => "num"),
135                 "maxmsg"                        => array("ver" => 1.2, "len" => $dlen, "type" => "num"),
136                 "maxsecs"                       => array("ver" => 1.6, "len" => $dlen, "type" => "num"),
137                 "maxsilence"                    => array("ver" => 1.2, "len" => $dlen, "type" => "num"),
138                 "minsecs"                       => array("ver" => 1.6, "len" => $dlen, "type" => "num"),
139                 "moveheard"                     => array("ver" => 1.6, "len" => 0, "type" => "flag"),
140                 "nextaftercmd"                  => array("ver" => 1.2, "len" => 0, "type" => "flag"),
141                 "obdcstorage"                   => array("ver" => 1.2, "len" => $dlen, "type" => "char"),
142                 "odbctable"                     => array("ver" => 1.2, "len" => $dlen, "type" => "char"),
143                 "operator"                      => array("ver" => 1.2, "len" => $dlen, "type" => "flag"),
144                 "pagerbody"                     => array("ver" => 1.2, "len" => $dlen, "type" => "char"),
145                 "pagerfromstring"               => array("ver" => 1.2, "len" => 100, "type" => "char"),
146                 "pagersubject"                  => array("ver" => 1.2, "len" => $dlen, "type" => "char"),
147                 "pbxskip"                       => array("ver" => 1.2, "len" => 0, "type" => "flag"),
148                 "pollfreq"                      => array("ver" => 1.6, "len" => $dlen, "type" => "num"),
149                 "pollmailboxes"                 => array("ver" => 1.6, "len" => 0, "type" => "flag"),
150                 "review"                        => array("ver" => 1.2, "len" => $dlen, "type" => "flag"),
151                 "saycid"                        => array("ver" => 1.2, "len" => $dlen, "type" => "flag"),
152                 "sayduration"                   => array("ver" => 1.2, "len" => $dlen, "type" => "flag"),
153                 "saydurationm"                  => array("ver" => 1.2, "len" => $dlen, "type" => "num"),
154                 "searchcontexts"                => array("ver" => 1.2, "len" => 0, "type" => "flag"),
155                 "sendvoicemail"                 => array("ver" => 1.2, "len" => 0, "type" => "flag"),
156                 "serveremail"                   => array("ver" => 1.2, "len" => 80, "type" => "char"),
157                 "silencethreshold"              => array("ver" => 1.2, "len" => $dlen, "type" => "num"),
158                 "skipms"                        => array("ver" => 1.2, "len" => $dlen, "type" => "num"),
159                 "smdienable"                    => array("ver" => 1.6, "len" => $dlen, "type" => "char"),
160                 "smdiport"                      => array("ver" => 1.4, "len" => $dlen, "type" => "char"),
161                 "tempgreetwarn"                 => array("ver" => 1.4, "len" => $dlen, "type" => "flag"),
162                 "usedirectory"                  => array("ver" => 1.4, "len" => 0, "type" => "flag"),
163                 "userscontext"                  => array("ver" => 1.4, "len" => $dlen, "type" => "char"),
164                 "vm-mismatch"                   => array("ver" => 1.6, "len" => $dlen, "type" => "char"),
165                 "vm-newpassword"                => array("ver" => 1.6, "len" => $dlen, "type" => "char"),
166                 "vm-passchanged"                => array("ver" => 1.6, "len" => $dlen, "type" => "char"),
167                 "vm-password"                   => array("ver" => 1.6, "len" => $dlen, "type" => "char"),
168                 "vm-reenterpassword"            => array("ver" => 1.6, "len" => $dlen, "type" => "char"),
169                 "volgain"             => array("ver" => 1.4, "len" => $dlen, "type" => "num")     );
170
171 $acct_settings = array(        "attach"            => array("ver" => 1.2, "len" => 0"type" => "flag"),
172                 "attachfmt"            => array("ver" => 1.4, "len" => 20, "type" => "char"),
173                 "backupdeleted"            => array("ver" => 1.6, "len" => 0"type" => "num"),
174                            "callback"            => array("ver" => 1.2, "len" => 80, "type" => "char"),
175                 "callmenum"            => array("ver" => 1.2, "len" => 0"type" => "num"),
176                 "delete"            => array("ver" => 1.2, "len" => 0"type" => "flag"),
177                 "dialout"            => array("ver" => 1.2, "len" => 80, "type" => "char"),
178                            "email"                         => array("ver" => 1.2, "len" => 80, "type" => "char"),
179                            "envelope"            => array("ver" => 1.2, "len" => 0"type" => "flag"),
180                            "exitcontext"            => array("ver" => 1.2, "len" => 80, "type" => "char"),
181                            "forcegreetings"        => array("ver" => 1.2, "len" => 0"type" => "flag"),
182                            "forcename"            => array("ver" => 1.2, "len" => 0"type" => "flag"),
183                            "hidefromdir"            => array("ver" => 1.2, "len" => 0"type" => "flag"),
184                            "imappassword"            => array("ver" => 1.4, "len" => 80, "type" => "char"),
185                            "imapuser"            => array("ver" => 1.4, "len" => 80, "type" => "char"),
186                            "language"            => array("ver" => 1.4, "len" => 20, "type" => "char"),
187                 "maxmessage"            => array("ver" => 1.2, "len" => 0, "type" => "num"),
188                 "maxmsg"            => array("ver" => 1.2, "len" => 0"type" => "num"),
189                            "maxsecs"            => array("ver" => 1.6, "len" => 0"type" => "num"),
190                            "moveheard"            => array("ver" => 1.6, "len" => 0"type" => "flag"),
191                 "name"                        => array("ver" => 1.2, "len" => 80, "type" => "char"),
192                            "operator"            => array("ver" => 1.2, "len" => 0"type" => "flag"),
193                            "pager"                         => array("ver" => 1.2, "len" => 80, "type" => "char"),
194                 "pwd"                           => array("ver" => 1.2, "len" => 80, "type" => "char"),
195                 "review"            => array("ver" => 1.2, "len" => 0"type" => "flag"),
196                            "saycid"            => array("ver" => 1.2, "len" => 0"type" => "flag"),
197                            "sayduration"            => array("ver" => 1.2, "len" => 0"type" => "flag"),
198                            "saydurationm"            => array("ver" => 1.2, "len" => 0"type" => "num"),
199                            "sendvoicemail"            => array("ver" => 1.2, "len" => 0"type" => "flag"),
200                 "serveremail"            => array("ver" => 1.2, "len" => 80, "type" => "char"),
201                            "tempgreetwarn"            => array("ver" => 1.4, "len" => 0"type" => "flag"),
202                            "tz"                => array("ver" => 1.2, "len" => 80, "type" => "char"),
203                 "vmcontext"            => array("ver" => 1.2, "len" => 80, "type" => "char"),
204                            "volgain"            => array("ver" => 1.4, "len" => 0"type" => "num") );
205
206 $tooltips = array("tz"         => array("name"                 => _("Timezone definition name"),
207                      "def"                => _("Time announcement for message playback"),
208                      "del"                => _("Remove the timezone definition")),
209               "general" => array("adsifdn"                => _("The ADSI feature descriptor number to download to"),
210                      "adsisec"                => _("The ADSI security lock code"),
211                      "adsiver"                => _("The ADSI voicemail application version number."),
212                      "attach"                 => _("Option to attach voicemails to email."),
213                      "authpassword"             => _("IMAP server master password."),
214                      "authuser"             => _("IMAP server master username."),
215                      "backupdeleted"            => _("No. of deleted messages saved per mailbox (can be a number or yes/no, yes meaning MAXMSG, no meaning 0)."),
216                      "callback"                => _("Context to call back from; if not listed, calling the sender back will not be permitted."),
217                      "charset"                => _("The character set for voicemail messages"),
218                      "cidinternalcontexts"        => _("Comma separated list of internal contexts to use caller ID."),
219                      "dialout"                => _("Context to dial out from [option 4 from the advanced menu] if not listed, dialing out will not be permitted."),
220                      "emailbody"            => _("Email body."),
221                      "emaildateformat"            => _("Load date format config for voicemail mail."),
222                      "emailsubject"            => _("Email subject"),
223                      "maxsilence"            => _("How many seconds of silence before we end the recording"),
224                      "envelope"                => _("Turn on/off envelope playback before message playback. [ON by default] This does NOT affect option 3,3 from the advanced options menu."),
225                      "exitcontext"            => _("Context to check for handling * or 0 calls to operator. \"Operator Context\""),
226                      "expungeonhangup"            => _("Expunge on exit."),
227                      "externnotify"            => _("External voicemail notify application."),
228                      "externpass"            => _("External password changing command (overrides externpassnotify)."),
229                      "externpassnotify"            => _("Command specified runs after a user changes his password."),
230                      "forcegreetings"            => _("Force new user to record greetings (the same as forcename, except for recording greetings).  The default is \"no\"."),
231                      "forcename"            => _("Force a new user to record their name.  A new user is determined by the password being the same as the mailbox number.  The default is \"no\"."),
232                      "format"                => _("Formats for writing Voicemail.  Note that when using IMAP storage for voicemail, only the first format specified will be used."),
233                      "fromstring"            => _("From: string for email"),
234                      "imapclosetimeout"            => _("For IMAP storage"),
235                      "imapflags"            => _("IMAP server flags."),
236                      "imapfolder"            => _("IMAP voicemail folder."),
237                      "imapgreetings"            => _("If using IMAP storage, specify whether voicemail greetings should be stored via IMAP. If no, then greetings are stored as if IMAP storage were not enabled"),
238                      "greetingsfolder"            => _("(yes/no) If imapgreetings=yes, then specify which folder to store your greetings in. If you do not specify a folder, then INBOX will be used."),
239                      "imapopentimeout"            => _("For IMAP storage - TCP open timeout in seconds"),
240                      "imapparentfolder"            => _("Set the parent folder (default is to have no parent folder set)."),
241                      "imapport"                => _("IMAP server port."),
242                      "imapreadtimeout"            => _("For IMAP storage - TCP read timeout in seconds"),
243                      "imapserver"            => _("IMAP server address."),
244                      "imapwritetimeout"            => _("For IMAP storage - TCP write timeout in seconds"),
245                      "listen-control-forward-key"    => _("Customize the key that fast-forwards message playback"),
246                      "listen-control-pause-key"        => _("Customize the key that pauses/unpauses message playback"),
247                      "listen-control-restart-key"    => _("Customize the key that restarts message playback"),
248                      "listen-control-reverse-key"    => _("Customize the key that rewinds message playback"),
249                      "listen-control-stop-key"        => _("Customize the key that stops message playback"),
250                      "mailcmd"                => _("Mail command."),
251                      "maxgreet"                => _("Max message greeting length."),
252                      "maxlogins"            => _("Max failed login attempts."),
253                      "maxmessage"             => _("Max message time length."),
254                      "maxsecs"                => _("Max message time length."),
255                      "maxmsg"                => _("Maximum number of messages per folder.  If not specified, a default value (100) is used.  Maximum value for this option is 9999."),
256                      "minsecs"                => _("Min message time length - maxsilence should be less than minsecs or you may get empty messages."),
257                      "moveheard"            => _("Move heard messages to the 'Old' folder automagically.  Defaults to on."),
258                      "nextaftercmd"            => _("Skip to the next message after save/delete."),
259                      "obdcstorage"            => _("The value of odbcstorage is the database connection configured in res_odbc.conf."),
260                      "odbctable"            => _("The default table for ODBC voicemail storage is voicemessages."),
261                      "operator"                => _("Operator break. Allow sender to hit 0 before/after/during  leaving a voicemail to reach an operator  [OFF by default]"),
262                      "pagerbody"            => _("Body of message sent to pager."),
263                      "pagerfromstring"            => _("From: string sent to pager."),
264                      "pagersubject"            => _("Subject sent to pager."),
265                      "pbxskip"                => _("Skip the \"[PBX]:\" string from the message title"),
266                      "pollfreq"                => _("If the \"pollmailboxes\" option is enabled, this option sets the polling frequency.  The default is once every 30 seconds."),
267                      "pollmailboxes"            => _("If mailboxes are changed anywhere outside of app_voicemail, then this option must be enabled for MWI to work.  This enables polling mailboxes for changes.  Normally, it will expect that changes are only made when someone called in to one of the voicemail applications. Examples of situations that would require this option are web interfaces to voicemail or an email client in the case of using IMAP storage."),
268                      "review"                => _("Allow sender to review/rerecord their message before saving it [OFF by default]"),
269                      "saycid"                => _("Read back caller's telephone number prior to playing the incoming message, and just after announcing the date and time the message was left. If not described, or set to no, it will be in the envelope."),
270                      "sayduration"            => _("Turn on/off saying duration information before the message playback. [ON by default]"),
271                      "saydurationm"            => _("Specify in minutes the minimum duration to say. Default is 2 minutes."),
272                      "searchcontexts"            => _("Yes to search all contexts, no to search current context (if one is not specified)."),
273                      "sendvoicemail"            => _("Send voicemail message. If not listed, sending messages from inside voicemail will not be permitted."),
274                      "serveremail"            => _("Who the e-mail notification should appear to come from"),
275                      "silencethreshold"            => _("Silence threshold (what we consider silence: the lower, the more sensitive)"),
276                      "skipms"                => _("How many milliseconds to skip forward/back when rew/ff in message playback"),
277                      "smdienable"            => _("Enable Simple Message Desk Interface (SMDI) integration"),
278                      "smdiport"                => _("Valid port as specified in smdi.conf for using smdi for external notification."),
279                      "tempgreetwarn"            => _("Temporary greeting reminder."),
280                      "usedirectory"            => _("Permit finding entries for forward/compose from the directory"),
281                      "userscontext"            => _("User context is where entries from users.conf are registered.  The default value is 'default'"),
282                      "vm-mismatch"            => _("Customize which sound file is used instead of the default prompt that says: \"The passwords you entered and re-entered did not match.  Please try again.\""),
283                      "vm-newpassword"            => _("Customize which sound file is used instead of the default prompt that says: \"Please enter your new password followed by the pound key.\""),
284                      "vm-passchanged"            => _("Customize which sound file is used instead of the default prompt that says: \"Your password has been changed.\""),
285                      "vm-password"            => _("Customize which sound file is used instead of the default prompt that says: \"password\""),
286                      "vm-reenterpassword"        => _("Customize which sound file is used instead of the default prompt that says: \"Please re-enter your password followed by the pound key\""),
287                      "volgain"                => _("Emails bearing the voicemail may arrive in a volume too quiet to be heard.  This parameter allows you to specify how much gain to add to the message when sending a voicemail. NOTE: sox must be installed for this option to work.")
288                      ),
289           "account" => array("pwd"                 => _("This is the password used to access the voicemail system.<br /><br />This password can only contain numbers.<br /><br />A user can change the password you enter here after logging into the voicemail system (*98) with a phone."),
290                      "attach"                 => _("Option to attach voicemails to email."),
291                      "attachfmt"            => _("Which format of audio file to attach to the email."),
292                      "backupdeleted"             => _("No. of deleted messages saved per mailbox (can be a number or yes/no, yes meaning MAXMSG, no meaning 0)."),
293                      "callback"             => _("Context to call back from; if not listed, calling the sender back will not be permitted."),
294                      "delete"                 => _("After notification, the voicemail is deleted from the server. [per-mailbox only] This is intended for use with users who wish to receive their voicemail ONLY by email. Note:  deletevoicemail is provided as an equivalent option for Realtime configuration."),
295                      "dialout"                 => _("Context to dial out from [option 4 from the advanced menu] if not listed, dialing out will not be permitted."),
296                      "email"                => _("The email address that voicemails are sent to."),
297                      "envelope"             => _("Turn on/off envelope playback before message playback. [ON by default] This does NOT affect option 3,3 from the advanced options menu."),
298                      "exitcontext"             => _("Context to check for handling * or 0 calls to operator. \"Operator Context\""),
299                      "forcegreetings"             => _("Force new user to record greetings (the same as forcename, except for recording greetings).  The default is \"no\"."),
300                      "forcename"             => _("Force a new user to record their name.  A new user is determined by the password being the same as the mailbox number.  The default is \"no\"."),
301                      "fullname"                => _("Name of voicemail account"),
302                      "hidefromdir"            => _("Hide this mailbox from the directory produced by app_directory. The default is \"no\"."),
303                      "imappassword"             => _("IMAP password."),
304                      "imapuser"             => _("IMAP user."),
305                      "language"             => _("Asterisk language code"),
306                      "maxmsg"                 => _("Maximum number of messages per folder.  If not specified, a default value (100) is used.  Maximum value for this option is 9999."),
307                      "maxmessage"             => _("Max message time length."),
308                      "maxsecs"                 => _("Max message time length."),
309                      "moveheard"             => _("Move heard messages to the 'Old' folder automagically.  Defaults to on."),
310                      "name"                => _("Name of account/user"),
311                      "operator"             => _("Operator break. Allow sender to hit 0 before/after/during  leaving a voicemail to reach an operator  [OFF by default]"),
312                      "pager"                => _("Pager/mobile email address that short voicemail notifications are sent to."),
313                      "review"                => _("Allow sender to review/rerecord their message before saving it [OFF by default]"),
314                      "saycid"                 => _("Read back caller's telephone number prior to playing the incoming message, and just after announcing the date and time the message was left. If not described, or set to no, it will be in the envelope."),
315                      "sayduration"             => _("Turn on/off saying duration information before the message playback. [ON by default]"),
316                      "saydurationm"             => _("Specify in minutes the minimum duration to say. Default is 2 minutes."),
317                      "sendvoicemail"             => _("Send voicemail message. If not listed, sending messages from inside voicemail will not be permitted."),
318                      "serveremail"            => _("Who the e-mail notification should appear to come from"),
319                      "tempgreetwarn"             => _("Remind the user that their temporary greeting is set"),
320                      "tz"                 => _("Timezone from zonemessages context.  Irrelevant if envelope=no."),
321                      "vmcontext"            => _("This is the Voicemail Context which is normally set to default. Do not change unless you understand the implications."),
322                      "volgain"                 => _("Emails bearing the voicemail may arrive in a volume too quiet to be heard.  This parameter allows you to specify how much gain to add to the message when sending a voicemail. NOTE: sox must be installed for this option to work."),
323                      "callmenum"             => _("Call me number. Can be used from within ARI.")
324                      )
325          );
326
327 /* End settings options */
328
329 /* Data needed to display correct page. */
330 $type        = (isset($_REQUEST["type"]) && $_REQUEST["type"] != "")?$_REQUEST["type"]:"setup";
331 $display    = (isset($_REQUEST["display"]) && $_REQUEST["display"] != "")?$_REQUEST["display"]:"voicemail";
332 if (isset($_REQUEST["updated"])) {
333     if ($_REQUEST["updated"] == "true") {
334         $update_flag = true;
335     } else {
336         $update_flag = false;
337     }
338 } else {
339     $update_flag = null;
340 }
341 $action        = isset($_REQUEST["action"])?$_REQUEST["action"]:"";
342 if (isset($_REQUEST["ext"])) {
343         $extension = $_REQUEST["ext"];
344         if (isset($vmail_info["activated_info"][$extension])) {
345             $context = $vmail_info["activated_info"][$extension];
346         } else if (isset($vmail_info["unactivated_info"][$extension])) {
347             $context = $vmail_info["unactivated_info"][$extension];
348         } else {
349             // Force voicemail to "system" mode by clearing context and extension values
350             $context   = "";
351             $extension = "";
352         }
353 } else {
354     // System mode
355     $context   = "";
356     $extension = "";
357 }
358
359 /* Special handling for action specified by form submission. */
360 if ($action == "Go") {
361     /* This is for viewing a particular context's usage. */
362     $action = "usage";
363     /* Clear extension */
364     $extension = "";
365 } else if ($action == "Submit") {
366     /* "Submit" is for performing some kind of update to settings (for page type of general, account OR timezone settings) OR to the files on disk. */
367     /* page_type can be settings, account, tz or usage. */
368     $action = (isset($_REQUEST["page_type"]) && !empty($_REQUEST["page_type"]))?$_REQUEST["page_type"]:"";;
369     $need_update = true;
370 } else {
371     $need_update = false;
372 }
373
374 /* If no action specified, default to a view of the entire system's usage. */
375 if (empty($action)) {
376     $context     = "";
377     $extension   = "";
378     $need_update = false;
379     $action      = "usage";
380 }
381
382 /* Need to generate rnav div menu */
383 /* system-wide rnav menu (lists all accounts) */
384 $rnav_list = implode("\n", $rnav_entries);
385
386 $rnav_menu = "<ul name='voicemail_menu' id='voicemail_menu' style='max-width:400px;'>\n" . $rnav_list . "</ul>";
387 $title      = voicemail_get_title($action, $context, $extension);
388 $output   = "";
389 $output   .= "<div class='rnav'>$rnav_menu</div>";
390 $output   .= "<div class='content'>\n";
391 $output   .= "<form name='frm_voicemail' action='" . $_SERVER['PHP_SELF'] . "' method='post'>";
392 $output   .= "<input type='hidden' name='type' id='type' value='$type' />";
393 $output   .= "<input type='hidden' name='display' id='display' value='$display' />";
394 $output   .= "<input type='hidden' name='ext' id='ext' value='$extension' />";
395 $output   .= "<input type='hidden' name='page_type' id='page_type' value='$action' />";
396 /* Javascript for remembering scroll position of rnav menu */
397 $output .= "<script type='text/javascript'><!--\n";
398 $output .= "\n
399 function find_in_menu(id) {
400     var objToFind   = document.getElementById(id);
401     document.getElementById('voicemail_menu').scrollTop = objToFind.offsetTop - 2 * objToFind.offsetHeight;
402 }";
403 if ($extension != "") {
404     $output .= "\n\n" . "find_in_menu('voicemail_list_" . $extension . "');\n";
405 }
406 $output .= "\n--></script>";
407 /* END of Javascript for remembering scroll position of rnav menu */
408
409 $sys_view_flag = empty($extension)?true:false;
410 $settings_link = "<a" . (($sys_view_flag && $action == "settings")?" style='color:#ff9933;' ":" ") . "href='config.php?type=$type&display=$display&action=settings'>Settings</a>";
411 $usage_link    = "<a" . (($sys_view_flag && $action == "usage")?" style='color:#ff9933;' ":" ") . "href='config.php?type=$type&display=$display&action=usage'>Usage</a>";
412 $tzone_link    = "<a" . (($sys_view_flag && $action == "tz")?" style='color:#ff9933;' ":" ") . "href='config.php?type=$type&display=$display&action=tz'>Timezone Definitions</a>";
413 $output        .= "<table border='0' cellpadding='0.3px' cellspacing='2px'>";
414 $output           .= "<tr><td colspan='3'>$title</td></tr>";
415 $output        .= "<tr><td><h5>" . _("System View Links:") . "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</h5></td><td colspan='2'><h5>$settings_link&nbsp;&nbsp;|&nbsp;&nbsp;$usage_link&nbsp;&nbsp;|&nbsp;&nbsp;$tzone_link</h5></td></tr>";
416
417 if ($need_update) {
418     /* set args */
419     $args = array();
420     if (voicemail_update_settings($action, $context, $extension, $_REQUEST)) {
421         $url = "config.php?type=$type&display=$display&action=$action&ext=$extension&updated=true";
422         redirect($url);
423     } else {
424         $url = "config.php?type=$type&display=$display&action=$action&ext=$extension&updated=false";
425         redirect($url);
426     }
427 }
428 switch ($action) {
429     case "tz":
430         /* get tz settings */
431         $settings = voicemail_get_settings($uservm, $action, $extension);
432         $output .= "<tr><td colspan='2'><hr /></td><td></td></tr>";
433         $output .= "<tr><td style='max-width: 60px' colspan='2'>" . _("A timezone definition specifies how the voicemail system announces the time.") . "</td><td></td></tr>";
434         $output .= "<tr><td style='max-width: 60px' colspan='2'>" . _("For example, the time a message was left will be announced according to the user's timezone on message playback.") . "</td><td></td></tr>";
435         $output .= "<tr><td></td><td></td></tr>";
436         $output .= "<tr><td style='max-width: 60px' colspan='2'><b>" . _("Entries below will be written to voicemail configuration as-is.") . "</b></td><td></td></tr>";
437         $output .= "<tr><td style='max-width: 60px' colspan='2'><b>" . _("Please be sure to follow the format for timezone definitions described below.") . "</b></td></tr>";
438         $output .= "<tr><td colspan='2'><hr /></td><td></td></tr>";
439         $output .= "<tr><td><a href='#' class='info'><h4>" . _("Name") . "</h4><span>" . $tooltips["tz"]["name"] . "</span></a></td><td><a href='#' class='info'><h4>" . _("Timezone Definition") . "</h4><span>" . $tooltips["tz"]["def"] . "</span></a>";
440         $output .= "</td></tr>";
441         if (is_array($settings) && !empty($settings)) {
442             foreach ($settings as $key => $val) {
443                 $output .= "<tr>";
444                 $output .= "<td>$key</td>";
445                 $output .= "<td><input size='50' type='text' name='tz__$key' id='tz__$key' tabindex='1' value=\"$val\" />";
446                 $output .= "&nbsp;&nbsp;&nbsp;&nbsp;<input type='checkbox' name='tzdel__$key' id='tzdel__$key' value='true' />&nbsp;&nbsp;<a href='#' class='info'>" . _("Delete") . "<span>" . $tooltips["tz"]["del"] . "</span></a></td></tr>";
447             }
448         }
449         $output .= "<tr><td coslpan='2'></td></tr>";
450         $output .= "<tr><td><a href='#' class='info'><h4>" . _("New Name") . "</h4><span>" . $tooltips["tz"]["name"] . "</span></a></td><td><a href='#' class='info'><h4>" . _("New Timezone Definition") . "</h4><span>" . $tooltips["tz"]["def"] . "</span></a></td>";
451         $output .= "<tr><td><input size='10' type='text' name='tznew_name' id='tznew_name' tabindex='1' value='' /></td>";
452         $output .= "<td><input size='50' type='text' name='tznew_def' id='tznew_def' tabindex='1' value='' /></td></tr>";
453
454         $update_notice = ($update_flag == false)?"&nbsp;&nbsp;<b><u>UPDATE FAILED</u></b>":"";
455         $update_notice = ($update_flag == true)?"&nbsp;&nbsp;<b><u>UPDATE COMPLETED</u></b>":"";
456         $output .= "<tr><td></td><td colspan='2'><input type='submit' name='action' id='action' value='Submit' />" . $update_notice . "</td></tr>";
457
458         $output .= "<tr><td colspan='2'><hr /></td></tr>";
459         $output .= "<tr><td style='max-width: 60px' colspan='2'>" . _("Timezone definition format is: ") . "&nbsp;&nbsp;<b style='font-family:courier;'>" . _("timezone|values") . "</b></td><td></td></tr>";
460         $output .= "<tr><td style='max-width: 60px' colspan='2'><br /><b>" . _("<i>Timezones</i> are listed in /usr/share/zoneinfo") . "</td></tr>";
461         $output .= "<tr><td style='max-width: 60px' colspan='2'><b>" . _("The <i>values</i> supported in the timezone definition string include:") . "</b></td></tr>" .
462         "<tr><td>" . _("'filename'") . "</td><td style='max-width: 60px' colspan='2'>" . _("The name of a sound file (the file name must be single-quoted)") . "</td></tr>" .
463         "<tr><td>" . _("variable") . "</td><td style='max-width: 60px' colspan='2'>" . _("A variable to be substituted (see below for supported variable values)") . "</td></tr>";
464         $output .= "<tr><td style='max-width: 60px' colspan='2'><b>" . _("Supported <i>variables</i>:") . "</b></td></tr>" .
465                "<tr><td style='max-width: 60px'>" . _("A or a")      . "</td><td style='max-width: 60px' colspan='2'>" . _("Day of week (Saturday, Sunday, ...)") . "</td></tr>" .
466                "<tr><td style='max-width: 60px'>" . _("B or b or h") . "</td><td style='max-width: 60px' colspan='2'>" . _("Month name (January, February, ...)") . "</td></tr>" .
467                "<tr><td style='max-width: 60px'>" . _("d or e")      . "</td><td style='max-width: 60px' colspan='2'>" . _("numeric day of month (first, second, ..., thirty-first)") . "</td></tr>" .
468                "<tr><td style='max-width: 60px'>" . _("Y")          . "</td><td style='max-width: 60px' colspan='2'>" . _("Year") . "</td></tr>" .
469                "<tr><td style='max-width: 60px'>" . _("I or l")      . "</td><td style='max-width: 60px' colspan='2'>" . _("Hour, 12 hour clock") . "</td></tr>" .
470                "<tr><td style='max-width: 60px'>" . _("H")          . "</td><td style='max-width: 60px' colspan='2'>" . _("Hour, 24 hour clock (single digit hours preceded by \"oh\")") . "</td></tr>" .
471                "<tr><td style='max-width: 60px'>" . _("k")          . "</td><td style='max-width: 60px' colspan='2'>" . _("Hour, 24 hour clock (single digit hours NOT preceded by \"oh\")") . "</td></tr>" .
472                "<tr><td style='max-width: 60px'>" . _("M")          . "</td><td style='max-width: 60px' colspan='2'>" . _("Minute, with 00 pronounced as \"o'clock\"") . "</td></tr>" .
473                "<tr><td style='max-width: 60px'>" . _("N")          . "</td><td style='max-width: 60px' colspan='2'>" . _("Minute, with 00 pronounced as \"hundred\" (US military time)") . "</td></tr>" .
474                "<tr><td style='max-width: 60px'>" . _("P or p")      . "</td><td style='max-width: 60px' colspan='2'>" . _("AM or PM") . "</td></tr>" .
475                "<tr><td style='max-width: 60px'>" . _("Q")          . "</td><td style='max-width: 60px' colspan='2'>" . _("\"today\", \"yesterday\" or ABdY") . "</td></tr>" .
476                "<tr><td style='max-width: 60px'>" . _("q")          . "</td><td style='max-width: 60px' colspan='2'>" . _("\"\" (for today), \"yesterday\", weekday, or ABdY") . "</td></tr>" .
477                "<tr><td style='max-width: 60px'>" . _("R")          . "</td><td style='max-width: 60px' colspan='2'>" . _("24 hour time, including minute") . "</td></tr>";
478         break;
479     case "bsettings":
480     case "settings":
481         /* get settings */
482         $settings = voicemail_get_settings($uservm, $action, $extension);
483         /* Get Asterisk version. */
484         $ast_info = engine_getinfo();
485         $version = $ast_info["version"];
486         $text_size = 40;
487
488         if (!empty($extension)) {
489             $acct_title_links  = "<tr><td><h5>" . _("Account View Links:") . "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</h5></td><td colspan='2'><h5><a href='config.php?type=$type&display=$display&action=bsettings&ext=$extension'>" . _("Settings") . "</a>&nbsp;&nbsp;|&nbsp;&nbsp;";
490             $acct_title_links .= "<a href='config.php?type=$type&display=$display&action=usage&ext=$extension'>" . _("Usage") . "</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a style='color:#ff9933;' href='config.php?type=$type&display=$display&action=settings&ext=$extension'>" . _("Advanced Settings") . "</a></h5></td></tr><tr><td colspan='2'><hr /></td></tr>";
491             $display_settings = $acct_settings;
492             $display_tips     = $tooltips["account"];
493             $id_prefix        = "acct";
494         } else {
495             $acct_title_links = "";
496             $output .= "<tr><td colspan='2'><hr /></td></tr>";
497             $display_settings = $gen_settings;
498             $display_tips     = $tooltips["general"];
499             $id_prefix        = "gen";
500         }
501         $display_name_row = "";
502         if ($action == "bsettings") {
503             # Overwrite account title links
504             $acct_title_links = "<tr><td><h5>" . _("Account View Links:") . "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</h5></td><td colspan='2'><h5><a style='color:#ff9933;' href='config.php?type=$type&display=$display&action=bsettings&ext=$extension'>" . _("Settings") . "</a>&nbsp;&nbsp;|&nbsp;&nbsp;";
505             $acct_title_links .= "<a href='config.php?type=$type&display=$display&action=usage&ext=$extension'>" . _("Usage") . "</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href='config.php?type=$type&display=$display&action=settings&ext=$extension'>" . _("Advanced Settings") . "</a></h5></td></tr><tr><td colspan='2'><hr /></td></tr>";
506             /* Display account name */
507             $display_name = isset($settings["name"])?$settings["name"]:_("No name defined; this is configured from the Extensions or Users page.");
508             $display_name_row = "<tr><td><a href='#' class='info'>" . _("Name") . "<span>" . $tooltips["account"]["name"] . "</span></a></td><td>&nbsp;&nbsp;&nbsp;&nbsp;" . $display_name . "</td></tr>";
509             # Override display settings, so only the basic account settings appear.
510             unset($display_settings);
511             $basic_settings["pwd"]         = isset($settings["pwd"])?$settings["pwd"]:"";
512             $basic_settings["email"]     = isset($settings["email"])?$settings["email"]:"";
513             $basic_settings["pager"]     = isset($settings["pager"])?$settings["pager"]:"";
514             $basic_settings["attach"]     = isset($settings["attach"])?$settings["attach"]:"";
515             $basic_settings["saycid"]     = isset($settings["saycid"])?$settings["saycid"]:"";
516             $basic_settings["envelope"]     = isset($settings["envelope"])?$settings["envelope"]:"";
517             $basic_settings["delete"]     = isset($settings["delete"])?$settings["delete"]:"";
518             $basic_settings["callmenum"]     = isset($settings["callmenum"])?$settings["callmenum"]:"";
519             unset($settings);
520             $settings            = $basic_settings;
521             $display_settings["pwd"]     = $acct_settings["pwd"];
522             $display_settings["email"]     = $acct_settings["email"];
523             $display_settings["pager"]     = $acct_settings["pager"];
524             $display_settings["attach"]     = $acct_settings["attach"];
525             $display_settings["saycid"]     = $acct_settings["saycid"];
526             $display_settings["envelope"]     = $acct_settings["envelope"];
527             $display_settings["delete"]     = $acct_settings["delete"];
528             $display_settings["callmenum"]     = $acct_settings["callmenum"];
529             $opt_headings = $display_settings;
530             $opt_headings["pwd"]        = _("Voicemail Password");
531             $opt_headings["email"]        = _("Email Address");
532             $opt_headings["pager"]        = _("Pager Email Address");
533             $opt_headings["attach"]        = _("Email Attachment");
534             $opt_headings["saycid"]        = _("Play CID");
535             $opt_headings["envelope"]    = _("Play Envelope");
536             $opt_headings["delete"]        = _("Delete Voicemail");
537             $opt_headings["callmenum"]    = _("Call-Me Number");
538         }
539         $output .= $acct_title_links . $display_name_row;
540
541
542         foreach ($display_settings as $key => $descrip) {
543             $tooltip = isset($display_tips[$key])?$display_tips[$key]:"";
544             $len = ($descrip["len"] > 0)?$descrip["len"]:$dlen;
545             $id = $id_prefix . "__" . $key;
546             if (isset($settings[$key]) || ($version >= $descrip["ver"])) {
547                 $val = isset($settings[$key])?$settings[$key]:"";
548                 unset($settings[$key]);
549                 $opt_name = ($action == "bsettings")?$opt_headings[$key]:$key;
550                 $output .= "<tr><td><a href='#' class='info'>$opt_name<span>$tooltip</span></a></td>";
551                 /* check box or not */
552                 if ($descrip["type"] == "flag") {
553                     switch ($val) {
554                         case "yes":
555                             $yes_selected = "checked=checked";
556                             $no_selected  = "";
557                             $undef_selected = "";
558                             break;
559                         case "no":
560                             $yes_selected = "";
561                             $no_selected = "checked=checked";
562                             $undef_selected = "";
563                             break;
564                         default:
565                             $yes_selected = "";
566                             $no_selected = "";
567                             $undef_selected = "checked=checked";
568                             break;
569                     }
570                     $output .= "<td>&nbsp;&nbsp;&nbsp;&nbsp;<input type='radio' name='$id' id='$id' tabindex='1' value='yes' $yes_selected />" . _("yes");
571                     $output .= "<input type='radio' name='$id' id='$id' tabindex='1' value='no' $no_selected />" . _("no");
572                     $output .= "<input type='radio' name='$id' id='$id' tabindex='1' value='undefined' $undef_selected /><a href='#' class='info'>" . _("undefined") . "<span>" . _("Selecting \"undefined\" will remove this option from the user's voicemail configuration entry. (System default will be used.)") . "</span></a></td></tr>";
573                 } else {
574                     $text_type = ($key == "pwd" || $key == "authpassword")?"password":"text";
575                     $output .= "<td>&nbsp;&nbsp;&nbsp;&nbsp;<input size='$text_size' maxlength='$len' type='$text_type' name='$id' id='$id' tabindex='1' value=\"$val\" /></td></tr>";
576                 }
577             }
578             unset($id);
579         }
580         /* Any additional setting? */
581         unset($settings["enabled"]);    # ignore this value; we will not enable/disable from voicemail
582         if (is_array($settings) && !empty($settings)) {
583             foreach ($settings as $key => $val) {
584                 $id = $id_prefix . "__" . $key;
585                 # no tooltip available
586                 $output .= "<tr><td>$key</td>";
587                 $output .= "<td>&nbsp;&nbsp;&nbsp;&nbsp;<input size='$text_size' type='text' name='$id' id='$id' tabindex='1' value=\"$val\" /></td></tr>";
588             }
589         }
590         $update_notice = ($update_flag == false)?"&nbsp;&nbsp;<b><u>UPDATE FAILED</u></b>":"";
591         $update_notice = ($update_flag == true)?"&nbsp;&nbsp;<b><u>UPDATE COMPLETED</u></b>":"";
592         $output .= "<tr><td></td><td colspan='2'>&nbsp;&nbsp;&nbsp;&nbsp;<input type='submit' name='action' id='action' value='Submit' />" . $update_notice . "</td></tr>";
593         break;
594     case "usage":
595         /* Usage information and options available for system-wide,
596            and individual account views.
597         */
598         $scope = voicemail_get_scope($extension);
599         if ($need_update) {
600             voicemail_update_usage($vmail_info, $context, $extension, $_REQUEST);
601             if (!empty($extension)) {
602                 $url = "config.php?type=$type&display=$display&ext=$extension&action=$action&updated=true";
603             } else {
604                 $url = "config.php?type=$type&display=$display&action=$action&updated=true";
605             }
606             redirect($url);
607         }
608
609         voicemail_get_usage($vmail_info, $scope, $acts_total, $acts_act, $acts_unact, $disabled_count,
610                                             $msg_total, $msg_in, $msg_other,
611                            $name, $unavail, $busy, $temp, $abandoned,
612                            $storage,
613                            $context, $extension);
614         $lp = "<tr><td colspan='3'><br /></td></tr>";
615         if ($scope == "system") {
616             $output .= "<tr><td colspan='3'><hr /></td></tr>";
617             $accounts_row = "<tr><td><a href='#' class='info'>" . _("Number of Accounts:") . "<span>" . _("Total ( Activated / Unactivated / Disabled )") . "</span></a></td>";
618             $accounts_row .= "<td>&nbsp;&nbsp;&nbsp;&nbsp;$acts_total&nbsp;&nbsp;(&nbsp;$acts_act&nbsp;/&nbsp;$acts_unact&nbsp;/&nbsp;$disabled_count&nbsp;)</td></tr>";
619             $accounts_row .= "<tr><td colspan='3'><hr style='height:0.1px;' /></td></tr>";
620
621             $msg_row = "<tr><td><a href='#' class='info'>" . _("Number of Messages:") . "<span>" . _("Total ( Messages in inboxes / Messages in other folders )") . "</span></a></td>";
622             $msg_row .= "<td>&nbsp;&nbsp;&nbsp;&nbsp;$msg_total&nbsp;&nbsp;(&nbsp;$msg_in&nbsp;/&nbsp;$msg_other&nbsp;)</td>";
623             $msg_row .= "<td><input type='checkbox' name='del_msgs' id='del_msgs' value='true' />&nbsp;<a href='#' class='info'>" . _("Delete") . "<span>" . _("Remove all messages") . "</span></a></td></tr>";
624             $msg_row .= "<tr><td colspan='3'><hr style='height:0.1px;' /></td></tr>";
625
626             $name_row = "<tr><td><a href='#' class='info'>" . _("Recorded Names:") . "<span>" . _("Number of recorded name greetings") . "</span></a></td>";
627             $name_row .= "<td>&nbsp;&nbsp;&nbsp;&nbsp;$name</td>";
628             $name_row .= "<td><input type='checkbox' name='del_names' id='del_names' value='true' />&nbsp;<a href='#' class='info'>" . _("Delete") . "<span>" . _("Remove all recorded names") . "</span></a></td></tr>";
629             $name_row .= "<tr><td colspan='3'><hr style='height:0.1px;' /></td></tr>";
630
631             $unavail_row = "<tr><td><a href='#' class='info'>" . _("Unavailable Greetings:") . "<span>" . _("Number of recorded unavailable greetings") . "</span></a></td>";
632             $unavail_row .= "<td>&nbsp;&nbsp;&nbsp;&nbsp;$unavail</td>";
633             $unavail_row .= "<td><input type='checkbox' name='del_unavail' id='del_unavail' value='true' />&nbsp;<a href='#' class='info'>" . _("Delete") . "<span>" . _("Remove all unavailable greetings") . "</span></a></td></tr>";
634             $unavail_row .= "<tr><td colspan='3'><hr style='height:0.1px;' /></td></tr>";
635
636             $busy_row = "<tr><td><a href='#' class='info'>" . _("Busy Greetings:") . "<span>" . _("Number of recorded busy greetings") . "</span></a></td>";
637             $busy_row .= "<td>&nbsp;&nbsp;&nbsp;&nbsp;$busy</td>";
638             $busy_row .= "<td><input type='checkbox' name='del_busy' id='del_busy' value='true' />&nbsp;<a href='#' class='info'>" . _("Delete") . "<span>" . _("Remove all busy greetings") . "</span></a></td></tr>";
639             $busy_row .= "<tr><td colspan='3'><hr style='height:0.1px;' /></td></tr>";
640
641             $temp_row = "<tr><td><a href='#' class='info'>" . _("Temporary Greetings:") . "<span>" . _("Number of recorded temporary greetings") . "</span></a></td>";
642             $temp_row .= "<td>&nbsp;&nbsp;&nbsp;&nbsp;$temp</td>";
643             $temp_row .= "<td><input type='checkbox' name='del_temp' id='del_temp' value='true' />&nbsp;<a href='#' class='info'>" . _("Delete") . "<span>" . _("Remove all temporary greetings") . "</span></a></td></tr>";
644             $temp_row .= "<tr><td colspan='3'><hr style='height:0.1px;' /></td></tr>";
645
646             $abandoned_row = "<tr><td><a href='#' class='info'>" . _("Abandoned Greetings:") . "<span>" . _("Number of abandoned greetings. Such greetings were recorded by the user but were NOT accepted, so the sound file remains on disk but is not used as a greeting.") . "</span></a></td>";
647             $abandoned_row .= "<td>&nbsp;&nbsp;&nbsp;&nbsp;$abandoned</td>";
648             $abandoned_row .= "<td><input type='checkbox' name='del_abandoned' id='del_abandoned' value='true' />&nbsp;<a href='#' class='info'>" . _("Delete") . "<span>" . _("Remove all abandoned greetings (> 1 day old)") . "</span></a></td></tr>";
649             $abandoned_row .= "<tr><td colspan='3'><hr style='height:0.1px;' /></td></tr>";
650
651             $storage_row = "<tr><td><a href='#' class='info'>" . _("Storage Used:") . "<span>" . _("Disk space currently in use by voicemail data") . "</span></a></td>";
652             $storage_row .= "<td>&nbsp;&nbsp;&nbsp;&nbsp;$storage</td>";
653             $storage_row .= "<tr><td colspan='3'><hr style='height:0.1px;' /></td></tr>";
654             
655             $output .= $lp . $accounts_row . $msg_row . $name_row . $unavail_row . $busy_row . $temp_row . $abandoned_row . $storage_row;           
656         } else {
657             $accounts_row = "";
658             $output .= "<tr><td><h5>" . _("Account View Links:") . "</h5></td><td colspan='3'><h5><a href='config.php?type=$type&display=$display&action=bsettings&ext=$extension'>" . _("Settings") . "</a>&nbsp;&nbsp;|&nbsp;&nbsp;";
659             $output .= "<a style='color:#ff9933;' href='config.php?type=$type&display=$display&action=usage&ext=$extension'>" . _("Usage") . "</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href='config.php?type=$type&display=$display&action=settings&ext=$extension'>" . _("Advanced Settings") . "</a></h5></td></tr><tr><td colspan='3'><hr /></td></tr>";
660
661             $msg_row = "<tr><td><a href='#' class='info'>" . _("Number of Messages:") . "<span>" . _("Total ( Messages in inboxes / Messages in other folders )") . "</span></a>&nbsp;&nbsp;&nbsp;</td>";
662             $msg_row .= "<td>&nbsp;&nbsp;&nbsp;&nbsp;$msg_total&nbsp;&nbsp;(&nbsp;$msg_in&nbsp;/&nbsp;$msg_other&nbsp;)</td>";
663             $msg_row .= "<td><input type='checkbox' name='del_msgs' id='del_msgs' value='true' />&nbsp;<a href='#' class='info'>" . _("Delete") . "<span>" . _("Remove all messages") . "</span></a></td></tr>";
664             $msg_row .= "<tr><td colspan='3'><hr style='height:0.1px;' /></td></tr>";
665
666             /* Get timestamps, if applicable */
667             $ts = voicemail_get_greeting_timestamps($name, $unavail, $busy, $temp, $context, $extension);
668             $name_ts = ($ts["name"] > 0)?$ts["name"]:"";
669             $unavail_ts = ($ts["unavail"] > 0)?$ts["unavail"]:"";
670             $busy_ts = ($ts["busy"] > 0)?$ts["busy"]:"";
671             $temp_ts = ($ts["temp"] > 0)?$ts["temp"]:"";
672
673             /* Convert count of greetings to yes/no */
674             $name = ($name > 0)?"<a href='#' class='info'>" . _("yes") . "<span>" . _("File timestamp: ") . $name_ts . "</span></a>":_("no");
675             $name_row = "<tr><td><a href='#' class='info'>" . _("Recorded Name:") . "<span>" . _("Has a recorded name greeting?") . "</span></a>&nbsp;&nbsp;&nbsp;</td>";
676             $name_row .= "<td>&nbsp;&nbsp;&nbsp;&nbsp;$name</td>";
677             $name_row .= "<td><input type='checkbox' name='del_names' id='del_names' value='true' />&nbsp;<a href='#' class='info'>" . _("Delete") . "<span>" . _("Remove recorded name") . "</span></a>&nbsp;&nbsp;&nbsp;</td></tr>";
678             $name_row .= "<tr><td colspan='3'><hr style='height:0.1px;' /></td></tr>";
679
680             $unavail = ($unavail > 0)?"<a href='#' class='info'>" . _("yes") . "<span>" . _("File timestamp: ") . $unavail_ts . "</span></a>":_("no");
681             $unavail_row = "<tr><td><a href='#' class='info'>" . _("Unavailable Greeting:") . "<span>" . _("Has a recorded unavailable greeting?") . "</span></a>&nbsp;&nbsp;&nbsp;</td>";
682             $unavail_row .= "<td>&nbsp;&nbsp;&nbsp;&nbsp;$unavail</td>";
683             $unavail_row .= "<td><input type='checkbox' name='del_unavail' id='del_unavail' value='true' />&nbsp;<a href='#' class='info'>" . _("Delete") . "<span>" . _("Remove unavailable greeting") . "</span></a>&nbsp;&nbsp;&nbsp;</td></tr>";
684             $unavail_row .= "<tr><td colspan='3'><hr style='height:0.1px;' /></td></tr>";
685
686             $busy = ($busy > 0)?"<a href='#' class='info'>" . _("yes") . "<span>" . _("File timestamp: ") . $busy_ts . "</span></a>":_("no");
687             $busy_row = "<tr><td><a href='#' class='info'>" . _("Busy Greetings:") . "<span>" . _("Has a recorded busy greeting?") . "</span></a>&nbsp;&nbsp;&nbsp;</td>";
688             $busy_row .= "<td>&nbsp;&nbsp;&nbsp;&nbsp;$busy</td>";
689             $busy_row .= "<td><input type='checkbox' name='del_busy' id='del_busy' value='true' />&nbsp;<a href='#' class='info'>" . _("Delete") . "<span>" . _("Remove busy greeting") . "</span></a>&nbsp;&nbsp;&nbsp;</td></tr>";
690             $busy_row .= "<tr><td colspan='3'><hr style='height:0.1px;' /></td></tr>";
691
692             $temp = ($temp > 0)?"<a href='#' class='info'>" . _("yes") . "<span>" . _("File timestamp: ") . $temp_ts . "</span></a>":_("no");
693             $temp_row = "<tr><td><a href='#' class='info'>" . _("Temporary Greeting:") . "<span>" . _("Has a recorded temporary greeting?") . "</span></a>&nbsp;&nbsp;&nbsp;</td>";
694             $temp_row .= "<td>&nbsp;&nbsp;&nbsp;&nbsp;$temp</td>";
695             $temp_row .= "<td><input type='checkbox' name='del_temp' id='del_temp' value='true' />&nbsp;<a href='#' class='info'>" . _("Delete") . "<span>" . _("Remove temporary greeting") . "</span></a></td></tr>";
696             $temp_row .= "<tr><td colspan='3'><hr style='height:0.1px;' /></td></tr>";
697
698             # It is conceivable a user has more than one abandoned greeting.
699             $abandoned_row = "<tr><td><a href='#' class='info'>" . _("Abandoned Greetings:") . "<span>" . _("Number of abandoned greetings. Such greetings were recorded by the user but were NOT accepted, so the sound file remains on disk but is not used as a greeting.") . "</span></a></td>";
700             $abandoned_row .= "<td>&nbsp;&nbsp;&nbsp;&nbsp;$abandoned</td>";
701             $abandoned_row .= "<td><input type='checkbox' name='del_abandoned' id='del_abandoned' value='true' />&nbsp;<a href='#' class='info'>" . _("Delete") . "<span>" . _("Remove all abandoned greetings (> 1 day old)") . "</span></a></td></tr>";
702             $abandoned_row .= "<tr><td colspan='3'><hr style='height:0.1px;' /></td></tr>";
703
704             $storage_row = "<tr><td><a href='#' class='info'>" . _("Storage Used") . "<span>" . _("Disk space currently in use by voicemail data") . "</span></a></td>";
705             $storage_row .= "<td>&nbsp;&nbsp;&nbsp;&nbsp;$storage</td>";
706             $storage_row .= "<tr><td colspan='3'><hr style='height:0.1px;' /></td></tr>";
707
708             $output .= $lp . $msg_row . $name_row . $unavail_row . $busy_row . $temp_row . $abandoned_row . $storage_row;
709         }
710
711         $update_notice = ($update_flag == false)?"&nbsp;&nbsp;<b><u>UPDATE FAILED</u></b>":"";
712         $update_notice = ($update_flag == true)?"&nbsp;&nbsp;<b><u>UPDATE COMPLETED</u></b>":"";
713         $output .= "<tr><td></td><td colspan='2'>&nbsp;&nbsp;&nbsp;&nbsp;<input type='submit' name='action' id='action' value='Submit' />" . $update_notice . "</td></tr>";
714         break;
715     default:
716         break;
717 }
718
719 $output .= "</table>";
720 $output .= "</form>";
721
722 echo $output;
723 ?>
724
Note: See TracBrowser for help on using the browser.