summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorivan <ivan>2008-03-16 19:58:33 +0000
committerivan <ivan>2008-03-16 19:58:33 +0000
commit3a17b276638200475d54201fa62566b7440e819a (patch)
treee287d32efc93c5924bc63dec88a79d36e4383961
parent46c6025ca0759b96e5bd16e7ce4b16d4df8a0988 (diff)
-rw-r--r--fs_selfservice/fri/CHANGE.log271
-rw-r--r--fs_selfservice/fri/LICENSE.txt340
-rw-r--r--fs_selfservice/fri/README.txt123
-rw-r--r--fs_selfservice/fri/includes/ajax.php132
-rw-r--r--fs_selfservice/fri/includes/asi.php156
-rw-r--r--fs_selfservice/fri/includes/bootstrap.php315
-rw-r--r--fs_selfservice/fri/includes/common.php433
-rw-r--r--fs_selfservice/fri/includes/crypt.php81
-rw-r--r--fs_selfservice/fri/includes/database.php72
-rw-r--r--fs_selfservice/fri/includes/display.php222
-rw-r--r--fs_selfservice/fri/includes/lang.php112
-rw-r--r--fs_selfservice/fri/includes/login.php477
-rw-r--r--fs_selfservice/fri/includes/main.conf.php330
-rw-r--r--fs_selfservice/fri/index.php20
-rw-r--r--fs_selfservice/fri/locale/ari.po590
-rw-r--r--fs_selfservice/fri/locale/ari.utf-8.po590
-rw-r--r--fs_selfservice/fri/locale/de_DE/LC_MESSAGES/ari.mobin0 -> 4161 bytes
-rw-r--r--fs_selfservice/fri/locale/de_DE/LC_MESSAGES/ari.po631
-rw-r--r--fs_selfservice/fri/locale/el_GR/LC_MESSAGES/ari.mobin0 -> 5158 bytes
-rw-r--r--fs_selfservice/fri/locale/el_GR/LC_MESSAGES/ari.po648
-rw-r--r--fs_selfservice/fri/locale/es_ES/LC_MESSAGES/ari.mobin0 -> 9562 bytes
-rw-r--r--fs_selfservice/fri/locale/es_ES/LC_MESSAGES/ari.po616
-rw-r--r--fs_selfservice/fri/locale/fr_FR/LC_MESSAGES/ari.mobin0 -> 6751 bytes
-rw-r--r--fs_selfservice/fri/locale/fr_FR/LC_MESSAGES/ari.po635
-rw-r--r--fs_selfservice/fri/locale/he_IL/LC_MESSAGES/ari.mobin0 -> 4430 bytes
-rw-r--r--fs_selfservice/fri/locale/he_IL/LC_MESSAGES/ari.po646
-rw-r--r--fs_selfservice/fri/locale/hu_HU/LC_MESSAGES/ari.mobin0 -> 4051 bytes
-rw-r--r--fs_selfservice/fri/locale/hu_HU/LC_MESSAGES/ari.po645
-rw-r--r--fs_selfservice/fri/locale/it_IT/LC_MESSAGES/ari.mobin0 -> 16728 bytes
-rw-r--r--fs_selfservice/fri/locale/it_IT/LC_MESSAGES/ari.po999
-rw-r--r--fs_selfservice/fri/locale/locale.txt37
-rw-r--r--fs_selfservice/fri/locale/pt_BR/LC_MESSAGES/ari.mobin0 -> 2064 bytes
-rw-r--r--fs_selfservice/fri/locale/pt_BR/LC_MESSAGES/ari.po647
-rw-r--r--fs_selfservice/fri/locale/readme.txt37
-rw-r--r--fs_selfservice/fri/locale/sv_SE/LC_MESSAGES/ari.mobin0 -> 7134 bytes
-rw-r--r--fs_selfservice/fri/locale/sv_SE/LC_MESSAGES/ari.po678
-rw-r--r--fs_selfservice/fri/misc/audio.php61
-rw-r--r--fs_selfservice/fri/misc/popup.css10
-rw-r--r--fs_selfservice/fri/misc/recording_popup.php46
-rw-r--r--fs_selfservice/fri/modules/VmX.module661
-rw-r--r--fs_selfservice/fri/modules/callmonitor.module675
-rw-r--r--fs_selfservice/fri/modules/featurecodes.module152
-rw-r--r--fs_selfservice/fri/modules/followme.module678
-rw-r--r--fs_selfservice/fri/modules/phonefeatures.module342
-rw-r--r--fs_selfservice/fri/modules/settings.module813
-rw-r--r--fs_selfservice/fri/modules/voicemail.module805
-rw-r--r--fs_selfservice/fri/theme/global.css87
-rw-r--r--fs_selfservice/fri/theme/header.css83
-rw-r--r--fs_selfservice/fri/theme/iefixes.css16
-rw-r--r--fs_selfservice/fri/theme/images/arrow-asc.gifbin0 -> 86 bytes
-rw-r--r--fs_selfservice/fri/theme/images/arrow-desc.gifbin0 -> 85 bytes
-rw-r--r--fs_selfservice/fri/theme/layout.css420
-rw-r--r--fs_selfservice/fri/theme/logo.gifbin0 -> 2819 bytes
-rw-r--r--fs_selfservice/fri/theme/main.css13
-rw-r--r--fs_selfservice/fri/theme/navigation.css166
-rw-r--r--fs_selfservice/fri/theme/page.tpl.php77
-rw-r--r--fs_selfservice/fri/theme/spacer.gifbin0 -> 43 bytes
-rw-r--r--fs_selfservice/fri/theme/text.css10
-rw-r--r--fs_selfservice/fri/version.php10
59 files changed, 15608 insertions, 0 deletions
diff --git a/fs_selfservice/fri/CHANGE.log b/fs_selfservice/fri/CHANGE.log
new file mode 100644
index 0000000..f25712b
--- /dev/null
+++ b/fs_selfservice/fri/CHANGE.log
@@ -0,0 +1,271 @@
+
+
+Change log - 05/02/2006
+
+ * update of french translation (submitted by Xavier Ourcière)
+
+Change log - 04/28/2006
+
+ * changed PEAR portability flags to try and fix a bug a user is having (maybe a buggy or old version of PEAR on users machine)
+ * fixed no voicemail message to be more intuitive
+ * fixed ajax bug
+ * fixed German i18n translation bug (requested by Wanninger)
+ * fixed settings recording format bug
+ * fixed settings call forward bug
+
+Change log - 04/10/2006
+
+ * added autoplay of recordings (requested by Robert LaPoint)
+ * refactored the response from the asterisk manager interface so do not always have to strip off "value:" from the response
+
+Change log - 04/04/2006
+
+ * abstracted the doc_root (PHP_SELF) to a variable to handle cases where it is not set properly (requested by Diego Iastrubni)
+ * removed error message about user voicemail directory (submitted by Diego Iastrubni)
+ * added feature to login to allow voicemail include files with wildcards (submitted by Diego Iastrubni)
+ * made voicemail password length message more accurate and descriptive on settings page (submitte by Robert Colbert)
+ * added outbound caller id record matching for call monitor page for results returned to individual users (requested by Robert LaPoint)
+ * fixed AJAX bug that kept giving javascript errors. Now form, pass, and parse a full xml doc
+ * fixed bug in description of dial code in help settings page (submitte by Robert Colbert)
+ * fixed bug to disable AJAX if using a browser that does not support AJAX
+ * updated Italian Translation (contributed by Francesco Romano: alteclab.it)
+
+Change log - 03/31/2006
+
+ * updated Spanish Translation (contributed by Antonio Cano damas: igestec.com)
+
+Change log - 03/29/2006
+
+ * added support for voicemail.conf include files (requested by Diego Iastrubni)
+ * updated database connection to support sqlite (and other databases using a connect file) (requested by Diego Iastrubni)
+
+Change log - 03/28/2006
+
+ * updated for PHP5 support
+ * fixed bug in AJAX javascript (fix submitted by Mahmud Fatafta - voicemetro.com)
+
+Change log - 03/23/2006
+
+ * remove variable references in function calls for PHP5 support (PHP4 supports, PHP5 does not, go figure)
+
+Change log - 03/18/2006
+
+ * fixed setting page voicemail options bug (submitted by Dave Vaughn: techcompinc.com)
+ * fixed settings page record settings FreePBX version bug (submitted by Luca Pandolfini)
+
+Change log - 03/13/2006
+
+ * added navigation menus to ajax update
+ * changed voicemail password on settings page so it can be variable length (submitted by vgster)
+ * fixed bug with settings page check boxes
+
+Change log - 03/09/2006
+
+ * fixed bug in error reporting for asterisk config files or recording file directories missing
+ * fixed bug for voicemail message move to perserve permissions, group, and user
+ * fixed bug in .inc and .conf file security (submitted by Diego Iastrubni, François Harvey: securiweb.net, and Adam Gray: novacoast.com)
+
+Change log - 03/07/2006
+
+ * added ajax seemless page refresh to callmonitor and voicemail
+ * added recording playback encryption (requested by François Harvey: securiweb.net)
+ * added ajax page refresh for voicemail and callmonitor (will seemlessly update page realtime)
+ * fixed bug in file permissions when a voicemail was moved (submitted by ?)
+
+Change log - 02/22/2006
+
+ * added filter to not load code not needed if a module is not loaded (submitted by Diego Iastrubni)
+ * refactored asterisk manager interface class to not require password lookup in common and asi files
+ * fixed module admin bug (submitted by serger)
+
+Change log - 02/14/2006
+
+ * added callmonitor duration filter to filter out short length calls (sponsored by John Cardner, Phonoscope, Inc)
+
+Change log - 02/09/2006
+
+ * added voicemail email and pager settings
+ * more rework of callmonitor recording match to handle large volumes of recordings (sponsored by John Cardner, Phonoscope, Inc)
+
+Change log - 02/07/2006
+
+ * added check for PHP PEAR installation
+ * added check for proper communication with the Asterisk Manager
+ * fixed class coding standard (ie ClassName)
+ * fixed method coding standard (ie methodName)
+ * fixed variable coding standard (ie variable_name)
+ * fixed constant coding standard (ie CONSTANT_NAME)
+ * added config option for voicemail password length (submitted by Chuck Bunn)
+ - set with $SETTINGS_VOICEMAIL_PASSWORD_LENGTH in /includes/main.conf
+ * added voicemail audio format admin option in settings page (submitted by Chuck Bunn)
+ - set with $ARI_VOICEMAIL_AUDIO_FORMAT_DEFAULT in /includes/main.conf
+ * fixed bug to separate voicemail password set in settings page (submitted by Chuck Bunn)
+
+Change log - 02/05/2006
+
+ * added call forward setting
+ * added Hebrew Translation (submitted by Diego Iastrubni)
+ * fixed i18n translation best practices and bugs (submitted by Diego Iastrubni)
+ * fixed voicemail message move bug (submitted by Steve Davies)
+ * fixed voicemail folder creation permissions issue (submitted by Steve Davies)
+
+Change log - 01/31/2006
+
+ * added help page
+ * added file lookup limiting code to prevent hanging when extremely large numbers of files are found in a directory
+ * added database type global variable
+
+Change log - 01/26/2006
+
+ * added php 4 or later version checking
+ * fixed php pre 4.3 version compatability
+ * fixed buy in call manager file matching recursively searching directories (submitted by Adrian Carter)
+
+Change log - 01/20/2006
+
+ * added call monitor aggressive matching option
+
+Change log - 01/18/2006
+
+ * added Hungarian Translation (submitted by Diego Imre Csaba Varasdy)
+ * fixed bug for Asterisk Manager change in Asterisk 1.2
+
+Change log - 01/12/2006
+
+ * added column sort to voicemail page (requested by Diego Elias Sofronas)
+ * added column sort to call monitor page (requested by Elias Sofronas)
+ * added i18n lang select to login page (requested by Diego Iastrubni)
+
+Change log - 12/09/2005
+
+ * another fix to the on-demand call monitor recordings (submitted by Blake Krone)
+
+Change log - 12/09/2005
+
+ * fix to recognize on-demand call monitor recordings (identified as auto-...) (submitted by Francesco Romano, Antonio Cano Damas, and Jason P. Meyer)
+ * added German Translation (submitted by Till Stoermer)
+
+Change log - 12/07/2005
+
+ * fixed search bug (submitted by Francesco Romano)
+ * fixed formating bugs
+
+Change log - 12/01/2005
+
+ * fix delete, move_to, and forward_to voicemail buttons for i18n translations
+ * fix delete call monitor button for i18n translations
+ * fix call monitor file matching problem if call time is a second or two later than time recorded in database log (submitted by Will Prater, Steve D, and others)
+ * changed to get call recording settings from asterisk and not the mysql database to support ARI standalone
+ * fix i18n for recording popup (submitted by Antonio Cano Damas)
+ * added search for voicemail
+ * added class to handle Asterisk Manager Interface (phpagi-asmanager.php would need error handling added)
+ * moved i18n language functions to own file so can support i18n in recording popup
+ * added Italian (submitted by Francesco Romano)
+ * updated Spanish translation (submitted by Antonio Cano Damas)
+ * fixed bugs in standalone code (sponsored by Hugh Buitano and also submitted by John Biundo)
+ * fixed logo (submitted by John Biundo)
+ * cleaned up css for misc/audio.php
+
+Change log - 11/17/2005
+
+ * added protocol multi-config_file (iax,sip,zap) support (sponsored by Hugh Buitano, Infosecure Systems)
+ * add global variables for asterisk and asteriskcdr database hosts and names (sponsored by Hugh Buitano, Infosecure Systems)
+ * added French translation (submitted by Joachim Buron-Pilatre, Phileas Com)
+ * fixed bug (submitted by Joachim Buron-Pilatre, Phileas Com)
+
+Change log - 11/13/2005
+
+ * refactored login context support
+ * added voicemail context support (submitted by Todd Courtnage)
+ * fixed voicemail sub nav folders to allow i18n translation (submitted by Elias Sofronas)
+ * fixed voicemail finding messages in different contexts (sponsored by Brian Connelly, Connelly Management)
+
+Change log - 11/09/2005
+
+ * fixed utf-8 translation in Greek (submitted by Elias Sofronas)
+ * added admin only access to specific modules (submitted by Julian J. M.)
+ * rework handler module code so that each module is only build one time
+ * added download message link on recording playback popup (sponsored by John Cardner, Phonoscope, Inc)
+ * converted i18n translation to utf-8 (submitted by Niklas Larsson and Elias Sofronas)
+ * fix more bugs in i18n translation (submitted by Niklas Larsson)
+ * fixed security bug that allowed access to all files (Edwin Eefting, syn-3.nl)
+
+Change log - 11/04/2005
+
+ * fixed bug to reload asterisk voicemail after voicemail password setting change (submitted by Jason Becker)
+
+Change log - 11/03/2005
+
+ * Highlight which voicemail sub-folder in use (submitted by Elias Sofronas)
+ * set default i18n page (suggested by Niklas Larsson)
+ * admin only account for call monitor (submitted by Julian J. M.)
+ * enhanced pattern matching call monitor unique id from database (submitted by Julian J. M.)
+ * updated Spanish translation (submitted by Diego Iastrubni)
+ * added Swedish translation (submitted by Niklas Larsson)
+ * added Greek translation (submitted by Elias Sofronas)
+ * fixed bug in call recording settings method (changed in AMP 1.10.009)
+ * fix bugs in i18n translation (submitted by Niklas Larsson)
+ - buttons, left menus, select all | none, Call Monitor (heading), Login page.
+
+Change log - 10/21/2005
+
+ * fixed bug in voicemail navigation (submitted by Elias Sofronas)
+ * added version cleanup
+ * added Spanish translation (submitted by Susana Castillo)
+ * added Portuguese translation (submitted by Alejandro Duplat)
+ * added admin setting for call recording
+
+Change log - 09/30/2005
+
+ * added i18n language support
+ * fixed bug if no folder or extension was selected and "move_to" or
+ "forward_to" clicked (bug submitted by Elias Sofronas)
+ * converted modules to a OO plugin architecture
+ * added version to footer
+ * add theme customization
+ * added recording type support (.WAV, .GSM) on settings page
+ * fixed bug to find call recording files better (patch submitted by Mark Voevodin)
+ * fixed bug for navigation and search controls to link to correct folder (bug submitted by Elias Sofronas)
+ * added voicemail password change to settings page
+ * added call monitor delete recording functionality (does not delete database entry)
+ * added call recording settings on settings page
+
+Change log - 09/15/2005
+
+ * added settings page
+ * added call monitor record options on settings page
+ * fixed bug to view src and dst calls in call monitor when restricted (submitted by Elias Sofronas and Thomas Stalder)
+
+Change log - 08/25/2005
+
+ * added SIP authentication login (this does not allow voicemail access)
+ * added persistent passwords (cookies)
+ * added encryption for cookies
+
+Change log - 08/23/2005
+
+ * Fixed $_SESSION['user'] bug conflict with AMP
+ -> changed to $_SESSION['ari_user']
+ * Fixed recording file lookup bug.
+
+Change log - 08/16/2005
+
+ * Fixed formating bug in css
+ * Added multipath to call monitor recordings
+ - set with $asterisk_callmonitor_path in /includes/main.conf
+ * added authentication
+ - use voicemail password
+ - access mailbox voicemail
+ - access call monitor for mailbox
+ - use AMP password
+ - access call monitor for all users
+ - config to allow voicemail to have call monitor access to all users
+ * voicemail access
+ - search of mailbox
+ - easy to delete voicemail interface
+ - move voicemail interface
+ - forward voicemail interface
+
+
+
+ \ No newline at end of file
diff --git a/fs_selfservice/fri/LICENSE.txt b/fs_selfservice/fri/LICENSE.txt
new file mode 100644
index 0000000..c09b19c
--- /dev/null
+++ b/fs_selfservice/fri/LICENSE.txt
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/fs_selfservice/fri/README.txt b/fs_selfservice/fri/README.txt
new file mode 100644
index 0000000..2e3b908
--- /dev/null
+++ b/fs_selfservice/fri/README.txt
@@ -0,0 +1,123 @@
+Developed by Dan Littlejohn of Littlejohn Consulting.
+ www.littlejohnconsulting.com
+
+Released under the GPL.
+
+Send bug reports, requests to dan@littlejohnconsulting.com
+
++++
+
+Misc notes
+
+ARI Project Page
+ www.littlejohnconsulting.com?q=ari
+
+Coding standard
+ * class - CamelCase (ie ClassName)
+ * method camelCase (ie methodName)
+ * variable underscore (ie variable_name)
+ * constant UNDERSCORE (ie CONSTANT_NAME)
+
+Requirements
+ PHP4 (but PHP5 is not yet supported)
+ PHP PEAR
+ asterisk 1.2 or later
+ apache or apache2
+ asterisk manager - at a mininum need command access
+
+security
+ for security all the files in ./recordings/include should be locked down in the web browser
+ so they cannot be viewed.
+
+voicemail email links - For those who would like to include a link to ARI in the voicemail email and set the correct login (mailbox) you can do so as:
+
+ http://< ip address >/recordings/index.php?login=< login >
+
+ replace
+ < ip address > with the server dns or ip
+ < login > with the login or mailbox
+
++++
+
+Module API
+
+odules can be added or removed from ARI.
+
+API
+
+must include these methods.
+
+rank - weights were the module menu item will appear in the navigation window
+init - initialize the module. Database access should first appear here and not in the constructor
+navMenu - side navigation menu item
+display - main module page content
+
+example
+
+<?php
+
+/**
+ * @file
+ * Functions for the interface to the help page
+ */
+
+/**
+ * Class for new_module
+ */
+class NewModule {
+
+ /*
+ * rank (for prioritizing modules)
+ */
+ function rank() {
+
+ $rank = 50;
+ return $rank;
+ }
+
+ /*
+ * init
+ */
+ function init() {
+ }
+
+ /*
+ * Adds menu item to nav menu
+ *
+ * @param $args
+ * Common arguments
+ */
+ function navMenu($args) {
+
+ // put if statement in return string, because do not know $logout until page is built
+ $ret .= "
+ <?php if ($logout !='') { ?>
+ <p><small><small><a href='" . $_SERVER['PHP_SELF'] . "?m=NewModule&f=display'>" . _("new_module") . "</a></small></small></p>
+ <?php } ?>";
+
+ return $ret;
+ }
+
+ /*
+ * Displays stats page
+ *
+ * @param $args
+ * Common arguments
+ */
+ function display($args) {
+
+ // build page content
+ $ret .= checkErrorMessage();
+
+ $ret .= $display->displayHeaderText("new_module");
+ $ret .= $display->displayLine();
+
+ return $ret;
+ }
+
+}
+
+
+?>
+
+
diff --git a/fs_selfservice/fri/includes/ajax.php b/fs_selfservice/fri/includes/ajax.php
new file mode 100644
index 0000000..fc7961b
--- /dev/null
+++ b/fs_selfservice/fri/includes/ajax.php
@@ -0,0 +1,132 @@
+<?php
+
+/*
+ * AJAX page update script
+ */
+function ajaxRefreshScript($args) {
+
+ global $AJAX_PAGE_REFRESH_TIME;
+
+ $url_args = "?ajax_refresh=1&";
+ foreach($args as $key => $value) {
+ $url_args .= $key . "=" . $value . "&";
+ }
+ $url_args = substr($url_args, 0,strlen($url_args)-1);
+
+ $ret = "
+ <script type='text/javascript' language='javascript'>
+
+ var http_request = false;
+
+ function makeRequest(url, parameters) {
+
+ http_request = false;
+
+ if (window.XMLHttpRequest) { // Mozilla, Safari,...
+ http_request = new XMLHttpRequest();
+ if (http_request.overrideMimeType) {
+ http_request.overrideMimeType('text/xml');
+ }
+ }
+ else if (window.ActiveXObject) { // IE
+ try {
+ http_request = new ActiveXObject('Msxml2.XMLHTTP');
+ }
+ catch (e) {
+ try {
+ http_request = new ActiveXObject('Microsoft.XMLHTTP');
+ }
+ catch (e) {}
+ }
+ }
+ if (!http_request) {
+ return false;
+ }
+ http_request.onreadystatechange = alertContents;
+ http_request.open('GET', url + parameters, true);
+ http_request.send(null);
+ }
+
+ function alertContents() {
+
+ if (!http_request) {
+ return;
+ }
+
+ if (http_request.readyState == 4) {
+ if (http_request.status == 200) {
+
+ var result = http_request.responseXML;
+ if (!result.documentElement && http_request.responseStream) {
+ result.load(http_request.responseStream);
+ }
+
+ var response = http_request.responseXML.documentElement;
+
+ var nav_menu = '';
+ if (response.getElementsByTagName('nav_menu')[0]) {
+ nav_menu = response.getElementsByTagName('nav_menu')[0].firstChild.data;
+ }
+ var nav_submenu = '';
+ if (response.getElementsByTagName('nav_submenu')[0]) {
+ nav_submenu = response.getElementsByTagName('nav_submenu')[0].firstChild.data;
+ }
+ var content = '';
+ if (response.getElementsByTagName('content')[0]) {
+ content = response.getElementsByTagName('content')[0].firstChild.data;
+ }
+
+ if (nav_menu) {
+ document.getElementById('nav_menu').innerHTML = '';
+ document.getElementById('nav_menu').innerHTML = nav_menu;
+ }
+ if (nav_submenu) {
+ document.getElementById('nav_submenu').innerHTML = '';
+ document.getElementById('nav_submenu').innerHTML = nav_submenu;
+ }
+ if (content) {
+ document.getElementById('content').innerHTML = '';
+ document.getElementById('content').innerHTML = content;
+ }
+ }
+ }
+ }
+
+ function updatePage() {
+ makeRequest('" . $_SESSION['ARI_ROOT'] . "', '" . $url_args . "');
+ }
+
+ // refresh time in 'minutes:seconds' (0 to inifinity) : (0 to 59)
+ var refresh_time='" . $AJAX_PAGE_REFRESH_TIME . "';
+
+ if (document.images){
+ var limit=refresh_time.split(\":\");
+ limit=limit[0]*60+limit[1]*1;
+ var current = limit;
+ }
+
+ function beginRefresh(){
+
+ if (!document.images) {
+ return;
+ }
+ if (current==1) {
+ updatePage();
+ current = limit;
+ }
+ else {
+ current-=1;
+ }
+
+ setTimeout(\"beginRefresh()\",1000);
+ }
+
+ window.onload=beginRefresh;
+
+ </script>";
+
+ return $ret;
+}
+
+
+?> \ No newline at end of file
diff --git a/fs_selfservice/fri/includes/asi.php b/fs_selfservice/fri/includes/asi.php
new file mode 100644
index 0000000..62f221e
--- /dev/null
+++ b/fs_selfservice/fri/includes/asi.php
@@ -0,0 +1,156 @@
+<?php
+
+/**
+ * @file
+ * Asterisk manager interface for access to asterisk api (astdb)
+ */
+
+/**
+ * Asterisk Manager Interface
+ */
+class AsteriskManagerInterface {
+
+ var $socket;
+
+ /**
+ * constructor
+ */
+ function AsteriskManagerInterface() {
+ }
+
+ /*
+ * Reloads Asterisk Configuration
+ *
+ * @param $username
+ * asterisk manager interface username
+ * @param $password
+ * asterisk manager interface password
+ */
+ function connect($host,$username,$password) {
+
+ // connect
+ $fp = fsockopen($host, 5038, $errno, $errstr, 10);
+ if (!$fp) {
+ return FALSE;
+ }
+ else {
+ $buffer='';
+ if(version_compare(phpversion(), '4.3', '>=')) {
+ stream_set_timeout($fp, 5);
+ }
+ else {
+ socket_set_timeout($fp, 5);
+ }
+ $buffer = fgets($fp);
+ if (!preg_match('/Asterisk Call Manager/i', $buffer)) {
+ $_SESSION['ari_error'] = _("Asterisk Call Manager not responding") . "<br />\n";
+ return FALSE;
+ }
+ else {
+ $out="Action: Login\r\nUsername: ".$username."\r\nSecret: ".$password."\r\n\r\n";
+ fwrite($fp,$out);
+ $buffer=fgets($fp);
+ if ($buffer!="Response: Success\r\n") {
+ $_SESSION['ari_error'] = _("Asterisk authentication failed:") . "<br />" . $buffer . "<br />\n";
+ return FALSE;
+ }
+ else {
+ $buffers=fgets($fp); // get rid of Message: Authentication accepted
+
+ // connected
+ $this->socket = $fp;
+ }
+ }
+ }
+ return TRUE;
+ }
+
+ /*
+ * Reloads Asterisk Configuration
+ */
+ function disconnect() {
+
+ if ($this->socket) {
+ fclose($this->socket);
+ }
+ }
+
+ /*
+ * Reloads Asterisk Configuration
+ *
+ * @param $command
+ * Command to be sent to the asterisk manager interface
+ * @return $ret
+ * response from asterisk manager interface
+ */
+ function command($command) {
+
+ $response = '';
+
+ fwrite($this->socket,$command);
+
+ $count = 0;
+ while (($buffer = fgets($this->socket)) && (!preg_match('/Response: Follows/i', $buffer))) {
+
+ if ($count>100) {
+ $_SESSION['ari_error'] = _("Asterisk command not understood") . "<br />" . $buffer . "<br />\n";
+ return FALSE;
+ }
+ $count++;
+ }
+
+ $count = 0;
+ while (($buffer = fgets($this->socket)) && (!preg_match('/END COMMAND/i', $buffer))) {
+
+ if (preg_match('/Value/',$buffer)) {
+ $parts = split(' ',trim($buffer));
+ $response = $parts[1];
+ }
+
+ if ($count>100) {
+ $_SESSION['ari_error'] = _("Asterisk command not understood") . "<br />" . $buffer . "<br />\n";
+ return;
+ }
+ $count++;
+ }
+
+ return $response;
+ }
+
+ function command2($command) {
+
+ $response = '';
+
+ fwrite($this->socket,$command);
+
+ $count = 0;
+ while (($buffer = fgets($this->socket)) && (!preg_match('/Response: Follows/i', $buffer))) {
+
+ if ($count>100) {
+ $_SESSION['ari_error'] = _("Asterisk command not understood") . "<br />" . $buffer . "<br />\n";
+ return FALSE;
+ }
+ $count++;
+ }
+
+ $count = 0;
+ while (($buffer = fgets($this->socket)) && (!preg_match('/END COMMAND/i', $buffer))) {
+
+ if (preg_match('/Value:/',$buffer)) {
+ $parts = split('Value:',trim($buffer));
+ $response = $parts[1];
+ }
+ if ($count>100) {
+ $_SESSION['ari_error'] = _("Asterisk command not understood") . "<br />" . $buffer . "<br />\n";
+ return;
+ }
+ $count++;
+ }
+
+ return $response;
+ }
+
+}
+
+
+?> \ No newline at end of file
diff --git a/fs_selfservice/fri/includes/bootstrap.php b/fs_selfservice/fri/includes/bootstrap.php
new file mode 100644
index 0000000..a01a2f5
--- /dev/null
+++ b/fs_selfservice/fri/includes/bootstrap.php
@@ -0,0 +1,315 @@
+<?php
+
+/**
+ * @file
+ * Functions that need to be loaded on every request.
+ */
+
+/**
+ * Sets doc root
+ */
+function setARIRoot() {
+
+ $found = 0;
+ if (isset($_SERVER['PHP_SELF'])) {
+ if ($_SERVER['PHP_SELF']!='') {
+ $_SESSION['ARI_ROOT'] = $_SERVER['PHP_SELF'];
+ }
+ }
+
+ if (!$found) {
+ $_SESSION['ARI_ROOT'] = "index.php";
+ }
+}
+
+/**
+ * Return a arguments.
+ *
+ * @param $args
+ * The name of the array being acted upon.
+ * @param $name
+ * The name of the variable to return.
+ * @return
+ * The value of the variable.
+ */
+function getArgument($args, $name) {
+
+ return isset($args[$name]) ? $args[$name] : '';
+}
+
+/*
+ * Gets top level directory names
+ *
+ * @param $path
+ * directory to search
+ * @param $filter
+ * string to use as a filter to match files to return
+ * @return $directories
+ * directories found
+ */
+function getDirectories($path,$filter) {
+
+ $directories = array();
+
+ if (is_dir($path)) {
+
+ $dh = opendir($path);
+ while (false!== ($item = readdir($dh))) {
+ if($item!="." && $item!="..") {
+
+ $path = fixPathSlash($path);
+ $directory = $path;
+ $directory = appendPath($directory,$item);
+
+ if (is_dir($directory)) {
+
+ $found = 0;
+ if ($filter) {
+ if (strpos($directory,$filter)) {
+ $found = 1;
+ }
+ } else {
+ $found = 1;
+ }
+ if ($found) {
+ $directories[count($directories) + 1] = $directory;
+ }
+ }
+ }
+ }
+ }
+
+ return $directories;
+}
+
+/*
+ * Gets file names recursively 6 folders deep
+ *
+ * @param $path
+ * directory to search
+ * @param $filter
+ * string to use as a filter to match files to return
+ * @param $recursive_max
+ * max number of sub folders to search
+ * @param $recursive_count
+ * current sub folder count
+ * @return $files
+ * files found
+ */
+function getFiles($path,$filter,$recursive_max,$recursive_count) {
+
+ $files = array();
+
+ if (@is_dir($path) && @is_readable($path)) {
+ $dh = opendir($path);
+ while (false!== ($item = readdir($dh))) {
+ if($item[0]!=".") {
+
+ $path = fixPathSlash($path);
+ $msg_path = appendPath($path,$item);
+
+ $fileCount++;
+ if ($fileCount>3000) {
+ $_SESSION['ari_error']
+ .= _("To many files in $msg_path Not all files processed") . "<br>";
+ return;
+ }
+
+ if ($recursive_count<$recursive_max && is_dir($msg_path)) {
+
+ $dirCount++;
+ if ($dirCount>10) {
+ $_SESSION['ari_error']
+ .= sprintf(_("To many directories in %s Not all files processed"),$msg_path) . "<br>";
+ return;
+ }
+
+ $count = $recursive_count + 1;
+ $path_files = getFiles($msg_path,$filter,$recursive_max,$count);
+ $files = array_merge($files,$path_files);
+ }
+ else {
+ $found = 0;
+ if ($filter) {
+ if (strpos($msg_path,$filter)) {
+ $found = 1;
+ }
+ } else {
+ $found = 1;
+ }
+ if ($found) {
+ $files[count($files) + 1] = $msg_path;
+ }
+ }
+ }
+ }
+ }
+
+ return $files;
+}
+
+/* Utilities */
+
+/**
+ * Fixes the path for a trailing slash
+ *
+ * @param $path
+ * path to append
+ * @return $ret
+ * path to returned
+ */
+function fixPathSlash($path) {
+
+ $ret = $path;
+
+ $slash = '';
+ if (!preg_match('/\/$/',$path)) {
+ $slash = '/';
+ }
+ $ret .= $slash;
+
+ return $ret;
+}
+
+/**
+ * Appends folder to end of path
+ *
+ * @param $path
+ * path to append
+ * @param $folder
+ * folder to append to path
+ * @return $ret
+ * path to returned
+ */
+function appendPath($path,$folder) {
+
+ $ret = $path;
+
+ $m = '';
+ if (!preg_match('/\/$/',$path)) {
+ $m = '/';
+ }
+ $ret .= $m . $folder;
+
+ return $ret;
+}
+
+/**
+ * Get Date format
+ *
+ * @param $timestamp
+ * timestamp to be converted
+ */
+function getDateFormat($timestamp) {
+ return date('Y-m-d', $timestamp);
+}
+
+/**
+ * Get time format
+ *
+ * @param $timestamp
+ * timestamp to be converted
+ */
+function getTimeFormat($timestamp) {
+ return date('G:i:s', $timestamp);
+}
+
+/* */
+
+/**
+ * Checks ARI dependencies
+ */
+function checkDependencies() {
+
+ // check for PHP
+ if (!version_compare(phpversion(), '4.3', '>=')) {
+ echo _("ARI requires a version of PHP 4.3 or later");
+ exit();
+ }
+
+ // check for PEAR
+ $include_path = ini_get('include_path');
+ $buf = split(':|,',$include_path);
+
+ $found = 0;
+ foreach ($buf as $path) {
+ $path = fixPathSlash($path);
+ $pear_check_path = $path . "DB.php";
+ if (is_file($pear_check_path)) {
+ $found = 1;
+ break;
+ }
+ }
+
+ if (!$found) {
+ echo _("PHP PEAR must be installed. Visit http://pear.php.net for help with installation.");
+ exit();
+ }
+}
+
+/**
+ * Starts the session
+ */
+function startARISession() {
+
+ if (!isset($_SESSION['ari_user']) ) {
+
+ // start a new session for the user
+ ini_set('session.name', 'ARI'); // prevent session name clashes
+ ini_set('session.gc_maxlifetime', '3900'); // make the session timeout a long time
+ set_time_limit(360);
+ session_start();
+ }
+}
+
+/**
+ * Bootstrap
+ *
+ * Loads critical variables needed for every page request
+ *
+ */
+function bootstrap() {
+
+ // set error reporting
+ error_reporting (E_ALL & ~ E_NOTICE);
+}
+
+/**
+ * Set HTTP headers in preparation for a page response.
+ *
+ * TODO: Figure out caching
+ */
+function ariPageHeader() {
+
+ bootstrap();
+}
+
+/**
+ * Perform end-of-request tasks.
+ *
+ * This function sets the page cache if appropriate, and allows modules to
+ * react to the closing of the page by calling hook_exit().
+ */
+function ariPageFooter() {
+
+}
+
+/**
+ * Includes and run functions
+ */
+
+include_once("./includes/lang.php");
+$language = new Language();
+$language->set();
+
+checkDependencies();
+startARISession();
+setARIRoot();
+
+include_once("./includes/main.conf.php");
+include_once("./version.php");
+include_once("./includes/crypt.php");
+include_once("./includes/login.php");
+
+
+?>
diff --git a/fs_selfservice/fri/includes/common.php b/fs_selfservice/fri/includes/common.php
new file mode 100644
index 0000000..caa76c1
--- /dev/null
+++ b/fs_selfservice/fri/includes/common.php
@@ -0,0 +1,433 @@
+<?php
+
+/**
+ * @file
+ * common functions - core handler
+ */
+
+/*
+ * Checks if user is set and sets
+ */
+function checkErrorMessage() {
+
+ if ($_SESSION['ari_error']) {
+ $ret .= "<div class='error'>
+ " . $_SESSION['ari_error'] . "
+ </div>
+ <br>";
+ unset($_SESSION['ari_error']);
+ }
+
+ return $ret;
+}
+
+/*
+ * Checks modules directory, and configuration, and loaded modules
+ */
+function loadModules() {
+
+ global $ARI_ADMIN_MODULES;
+ global $ARI_DISABLED_MODULES;
+
+ global $loaded_modules;
+
+ $modules_path = "./modules";
+ if (is_dir($modules_path)) {
+
+ $filter = ".module";
+ $recursive_max = 1;
+ $recursive_count = 0;
+ $files = getFiles($modules_path,$filter,$recursive_max,$recursive_count);
+
+ foreach($files as $key => $path) {
+
+ // build module object
+ include_once($path);
+ $path_parts = pathinfo($path);
+ list($name,$ext) = split("\.",$path_parts['basename']);
+
+ // check for module and get rank
+ if (class_exists($name)) {
+
+ $module = new $name();
+
+ // check if admin module
+ $found = 0;
+ if ($ARI_ADMIN_MODULES) {
+ $admin_modules = split(',',$ARI_ADMIN_MODULES);
+ foreach ($admin_modules as $key => $value) {
+ if ($name==$value) {
+ $found = 1;
+ break;
+ }
+ }
+ }
+
+ // check if disabled module
+ $disabled = 0;
+ if ($ARI_DISABLED_MODULES) {
+ $disabled_modules = split(',',$ARI_DISABLED_MODULES);
+ foreach ($disabled_modules as $key => $value) {
+ if ($name==$value) {
+ $disabled = 1;
+ break;
+ }
+ }
+ }
+
+ // if not admin module or admin user add to module name to array
+ if (!$disabled && (!$found || $_SESSION['ari_user']['admin'])) {
+ $loaded_modules[$name] = $module;
+ }
+ }
+ }
+ }
+ else {
+ $_SESSION['ari_error'] = _("$path not a directory or not readable");
+ }
+}
+
+/**
+ * Builds database connections
+ */
+function databaseLogon() {
+
+ global $STANDALONE;
+
+ global $ASTERISKMGR_DBHOST;
+
+ global $AMP_FUNCTIONS_FILES;
+ global $AMPORTAL_CONF_FILE;
+
+ global $LEGACY_AMP_DBENGINE;
+ global $LEGACY_AMP_DBFILE;
+ global $LEGACY_AMP_DBHOST;
+ global $LEGACY_AMP_DBNAME;
+
+ global $ASTERISKCDR_DBENGINE;
+ global $ASTERISKCDR_DBFILE;
+ global $ASTERISKCDR_DBHOST;
+ global $ASTERISKCDR_DBNAME;
+
+ global $ARI_DISABLED_MODULES;
+
+ global $loaded_modules;
+
+ // This variable is a global in the FreePBX function.inc.php but needs to be
+ // declared here or the is not seen when parse_amprotaconf() is eventually called
+ // ?php bug?
+ //
+ global $amp_conf_defaults;
+
+ // get user
+ if ($STANDALONE['use']) {
+
+ $mgrhost = $ASTERISKMGR_DBHOST;
+ $mgruser = $STANDALONE['asterisk_mgruser'];
+ $mgrpass = $STANDALONE['asterisk_mgrpass'];
+
+ $asteriskcdr_dbengine = $ASTERISKCDR_DBENGINE;
+ $asteriskcdr_dbfile = $ASTERISKCDR_DBFILE;
+ $asteriskcdr_dbuser = $STANDALONE['asteriskcdr_dbuser'];
+ $asteriskcdr_dbpass = $STANDALONE['asteriskcdr_dbpass'];
+ $asteriskcdr_dbhost = $ASTERISKCDR_DBHOST;
+ $asteriskcdr_dbname = $ASTERISKCDR_DBNAME;
+ }
+ else {
+
+ $include = 0;
+ $files = split(';',$AMP_FUNCTIONS_FILES);
+ foreach ($files as $file) {
+ if (is_file($file)) {
+ include_once($file);
+ $include = 1;
+ }
+ }
+
+ if ($include) {
+ $amp_conf = parse_amportal_conf($AMPORTAL_CONF_FILE);
+
+ $mgrhost = $ASTERISKMGR_DBHOST;
+ $mgruser = $amp_conf['AMPMGRUSER'];
+ $mgrpass = $amp_conf['AMPMGRPASS'];
+
+ $amp_dbengine = isset($amp_conf["AMPDBENGINE"]) ? $amp_conf["AMPDBENGINE"] : $LEGACY_AMP_DBENGINE;
+ $amp_dbfile = isset($amp_conf["AMPDBFILE"]) ? $amp_conf["AMPDBFILE"] : $LEGACY_AMP_DBFILE;
+ $amp_dbuser = $amp_conf["AMPDBUSER"];
+ $amp_dbpass = $amp_conf["AMPDBPASS"];
+ $amp_dbhost = isset($amp_conf["AMPDBHOST"]) ? $amp_conf["AMPDBHOST"] : $LEGACY_AMP_DBHOST;
+ $amp_dbname = isset($amp_conf["AMPDBNAME"]) ? $amp_conf["AMPDBNAME"] : $LEGACY_AMP_DBNAME;
+
+ $asteriskcdr_dbengine = $ASTERISKCDR_DBENGINE;
+ $asteriskcdr_dbfile = $ASTERISKCDR_DBFILE;
+ $asteriskcdr_dbuser = $amp_conf["AMPDBUSER"];
+ $asteriskcdr_dbpass = $amp_conf["AMPDBPASS"];
+ $asteriskcdr_dbhost = $ASTERISKCDR_DBHOST;
+ $asteriskcdr_dbhost = isset($amp_conf["AMPDBHOST"]) ? $amp_conf["AMPDBHOST"] : $ASTERISKCDR_DBHOST;
+ $asteriskcdr_dbname = $ASTERISKCDR_DBNAME;
+
+ unset($amp_conf);
+ }
+ }
+
+ // asterisk manager interface (berkeley database I think)
+ global $asterisk_manager_interface;
+ $asterisk_manager_interface = new AsteriskManagerInterface();
+
+ $success = $asterisk_manager_interface->Connect($mgrhost,$mgruser,$mgrpass);
+ if (!$success) {
+ $_SESSION['ari_error'] =
+ _("ARI does not appear to have access to the Asterisk Manager.") . " ($errno)<br>" .
+ _("Check the ARI 'main.conf.php' configuration file to set the Asterisk Manager Account.") . "<br>" .
+ _("Check /etc/asterisk/manager.conf for a proper Asterisk Manager Account") . "<br>" .
+ _("make sure [general] enabled = yes and a 'permit=' line for localhost or the webserver.");
+ return FALSE;
+ }
+
+ // pear interface databases
+ $db = new Database();
+
+ // AMP asterisk database
+ if (!$STANDALONE['use']) {
+ $_SESSION['dbh_asterisk'] = $db->logon($amp_dbengine,
+ $amp_dbfile,
+ $amp_dbuser,
+ $amp_dbpass,
+ $amp_dbhost,
+ $amp_dbname);
+ if (!isset($_SESSION['dbh_asterisk'])) {
+ $_SESSION['ari_error'] .= _("Cannot connect to the $amp_dbname database") . "<br>" .
+ _("Check AMP installation, asterisk, and ARI main.conf");
+ return FALSE;
+ }
+ }
+
+ // cdr database
+ if (in_array('callmonitor',array_keys($loaded_modules))) {
+ $_SESSION['dbh_cdr'] = $db->logon($asteriskcdr_dbengine,
+ $asteriskcdr_dbfile,
+ $asteriskcdr_dbuser,
+ $asteriskcdr_dbpass,
+ $asteriskcdr_dbhost,
+ $asteriskcdr_dbname);
+ if (!isset($_SESSION['dbh_cdr'])) {
+ $_SESSION['ari_error'] .= sprintf(_("Cannot connect to the $asteriskcdr_dbname database"),$asteriskcdr_dbname) . "<br>" .
+ _("Check AMP installation, asterisk, and ARI main.conf");
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+/**
+ * Logout if needed for any databases
+ */
+function databaseLogoff() {
+
+ global $asterisk_manager_interface;
+
+ $asterisk_manager_interface->Disconnect();
+}
+
+/*
+ * Checks if user is set and sets
+ */
+function loginBlock() {
+
+ $login = new Login();
+
+ if (isset($_REQUEST['logout'])) {
+ $login->Unauth();
+ }
+
+ if (!isset($_SESSION['ari_user'])) {
+ $login->Auth();
+
+ }
+
+ if (!isset($_SESSION['ari_user'])) {
+
+ // login form
+ $ret .= $login->GetForm();
+
+ return $ret;
+ }
+}
+
+/*
+ * Main handler for website
+ */
+function handleBlock() {
+
+ global $ARI_NO_LOGIN;
+
+ global $loaded_modules;
+
+ // check errors here and in login block
+ $content .= checkErrorMessage();
+
+ // check logout
+ if ($_SESSION['ari_user'] && !$ARI_NO_LOGIN) {
+ $logout = 1;
+ }
+
+ // if nothing set goto user default page
+ if (!isset($_REQUEST['m'])) {
+ $_REQUEST['m'] = $_SESSION['ari_user']['default_page'];
+ }
+ // if not function specified then use display page function
+ if (!isset($_REQUEST['f'])) {
+ $_REQUEST['f'] = 'display';
+ }
+
+ $m = $_REQUEST['m']; // module
+ $f = $_REQUEST['f']; // function
+ $a = $_REQUEST['a']; // action
+
+ // set arguments
+ $args = array();
+ foreach($_REQUEST as $key => $value) {
+ $args[$key] = $value;
+ }
+
+ // set rank
+ $ranked_modules = array();
+ foreach ($loaded_modules as $module) {
+
+ $module_methods = get_class_methods($module); // note that PHP4 returns all lowercase
+ while (list($index, $value) = each($module_methods)) {
+ $module_methods[strtolower($index)] = strtolower($value);
+ }
+ reset($module_methods);
+
+ $rank = 99999;
+ $rank_function = "rank";
+ if (in_array(strtolower($rank_function), $module_methods)) {
+ $rank = $module->$rank_function();
+ }
+
+ $ranked_modules[$rank] = $module;
+ }
+ ksort($ranked_modules);
+
+ // process modules
+ foreach ($ranked_modules as $module) {
+
+ // process module
+ $name = get_class($module); // note PHP4 returns all lowercase
+ $module_methods = get_class_methods($module); // note PHP4 returns all lowercase
+ while (list($index, $value) = each($module_methods)) {
+ $module_methods[strtolower($index)] = strtolower($value);
+ }
+ reset($module_methods);
+
+ // init module
+ $module->init();
+
+ // add nav menu items
+ $nav_menu_function = "navMenu";
+ if (in_array(strtolower($nav_menu_function), $module_methods)) {
+ $nav_menu .= $module->$nav_menu_function($args);
+ }
+
+ if (strtolower($m)==strtolower($name)) {
+
+ // build sub menu
+ $subnav_menu_function = "navSubMenu";
+ if (in_array(strtolower($subnav_menu_function), $module_methods)) {
+ $subnav_menu .= $module->$subnav_menu_function($args);
+ }
+
+ // execute function (usually to build content)
+ if (in_array(strtolower($f), $module_methods)) {
+ $content .= $module->$f($args);
+ }
+ }
+ }
+
+ // add logout link
+ if ($logout != '') {
+ $nav_menu .= "<p><small><small><a href='" . $_SESSION['ARI_ROOT'] . "?logout=1'>" . _("Logout") . "</a></small></small></p>";
+ }
+
+ // error message if no content
+ if (!$content) {
+ $content .= _("Page Not Found.");
+ }
+
+ return array($nav_menu,$subnav_menu,$content);
+}
+
+/*
+ * Main handler for website
+ */
+function handler() {
+
+ global $ARI_VERSION;
+
+ // version
+ $ari_version = $ARI_VERSION;
+
+ // check error
+ $error = $_SESSION['ari_error'];
+
+ // load modules
+ loadModules();
+
+ // login to database
+ $success = databaseLogon();
+ if ($success) {
+
+ // check if login is needed
+ $content = loginBlock();
+ if (!isset($content)) {
+ list($nav_menu,$subnav_menu,$content) = handleBlock();
+ }
+ }
+ else {
+
+ $display = new Display();
+
+ $content .= $display->displayHeaderText("ARI");
+ $content .= $display->displayLine();
+ $content .= checkErrorMessage();
+ }
+
+ // log off any databases needed
+ databaseLogoff();
+
+ // check for ajax request and refresh or if not build the page
+ if (isset($_REQUEST['ajax_refresh']) ) {
+
+ echo "<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
+ <response>
+ <nav_menu><![CDATA[" . $nav_menu . "]]></nav_menu>
+ <subnav_menu><![CDATA[" . $subnav_menu . "]]></subnav_menu>
+ <content><![CDATA[" . $content . "]]></content>
+ </response>";
+ }
+ else {
+
+ // build the page
+ include_once("./theme/page.tpl.php");
+ }
+}
+
+/**
+ * Includes and run functions
+ */
+
+// create asterisk manager interface singleton
+$asterisk_manager_interface = '';
+
+// array to keep track of loaded modules
+$loaded_modules = array();
+
+include_once("./includes/asi.php");
+include_once("./includes/database.php");
+include_once("./includes/display.php");
+include_once("./includes/ajax.php");
+
+
+?>
diff --git a/fs_selfservice/fri/includes/crypt.php b/fs_selfservice/fri/includes/crypt.php
new file mode 100644
index 0000000..301d8a8
--- /dev/null
+++ b/fs_selfservice/fri/includes/crypt.php
@@ -0,0 +1,81 @@
+<?php
+
+/*
+ * Allows encrypt and decrypt
+ */
+class Crypt {
+
+ /**
+ * Gets a random value for encryption
+ * - From php.net docs
+ *
+ * @param $iv_len
+ * length of random variable
+ */
+ function getRndIV($iv_len) {
+
+ $iv = '';
+ while ($iv_len-- > 0) {
+ $iv .= chr(mt_rand() & 0xff);
+ }
+ return $iv;
+ }
+
+ /**
+ * Encrypts string
+ * - From php.net docs
+ *
+ * @param $str
+ * string to encrypt
+ * @param $salt
+ * password to use for encryption
+ * @param $iv_len
+ * length of random number
+ */
+ function encrypt($str, $salt, $iv_len = 16) {
+
+ $str .= "\x13";
+ $n = strlen($str);
+ if ($n % 16) $str .= str_repeat("\0", 16 - ($n % 16));
+ $i = 0;
+ $enc_text = $this->getRndIV($iv_len);
+ $iv = substr($salt ^ $enc_text, 0, 512);
+ while ($i < $n) {
+ $block = substr($str, $i, 16) ^ pack('H*', md5($iv));
+ $enc_text .= $block;
+ $iv = substr($block . $iv, 0, 512) ^ $salt;
+ $i += 16;
+ }
+ return urlencode(base64_encode($enc_text));
+ }
+
+ /**
+ * Decrypts string
+ * - From php.net docs
+ *
+ * @param $enc
+ * encrypted string to decrypt
+ * @param $salt
+ * password to use for encryption
+ * @param $iv_len
+ * length of random number
+ */
+ function decrypt($enc, $salt, $iv_len = 16) {
+
+ $enc = urldecode(base64_decode($enc));
+ $n = strlen($enc);
+ $i = $iv_len;
+ $str = '';
+ $iv = substr($salt ^ substr($enc, 0, $iv_len), 0, 512);
+ while ($i < $n) {
+ $block = substr($enc, $i, 16);
+ $str .= $block ^ pack('H*', md5($iv));
+ $iv = substr($block . $iv, 0, 512) ^ $salt;
+ $i += 16;
+ }
+ return preg_replace('/\\x13\\x00*$/', '', $str);
+ }
+}
+
+
+?>
diff --git a/fs_selfservice/fri/includes/database.php b/fs_selfservice/fri/includes/database.php
new file mode 100644
index 0000000..ff3d199
--- /dev/null
+++ b/fs_selfservice/fri/includes/database.php
@@ -0,0 +1,72 @@
+<?php
+
+/**
+ * @file
+ * Functions for the database
+ */
+
+/*
+ * Database Class
+ */
+class Database {
+
+ /*
+ * Constructor
+ */
+ function Database() {
+
+ // PEAR must be installed
+ require_once('DB.php');
+ }
+
+ /*
+ * Logs into database and returns database handle
+ *
+
+ * @param $engine
+ * database engine
+ * @param $dbfile
+ * database file
+ * @param $username
+ * username for database
+ * @param $password
+ * password for database
+ * @param $host
+ * database host
+ * @param $name
+ * database name
+ * @return $dbh
+ * variable to hold the returned database handle
+ */
+ function logon($engine,$dbfile,$username,$password,$host,$name) {
+
+ // connect string
+ if ($dbfile) {
+ // datasource mostly to support sqlite: dbengine://dbfile?mode=xxxx
+ $dsn = $engine . '://' . $dbfile . '?mode=0666';
+ }
+ else {
+ // datasource in in this style: dbengine://username:password@host/database
+ $datasource = $engine . '://' . $username . ':' . $password . '@' . $host . '/' . $name;
+ }
+
+ // options
+ $options = array(
+ 'debug' => 2,
+ 'portability' => DB_PORTABILITY_LOWERCASE|DB_PORTABILITY_RTRIM|DB_PORTABILITY_DELETE_COUNT|DB_PORTABILITY_NUMROWS|DB_PORTABILITY_ERRORS|DB_PORTABILITY_NULL_TO_EMPTY,
+ );
+
+ // attempt connection
+ $dbh = DB::connect($datasource,$options);
+
+ // if connection failed show error
+ if(DB::isError($dbh)) {
+ $_SESSION['ari_error'] .= $dbh->getMessage() . "<br><br>";
+ return;
+ }
+ return $dbh;
+ }
+}
+
+
+?> \ No newline at end of file
diff --git a/fs_selfservice/fri/includes/display.php b/fs_selfservice/fri/includes/display.php
new file mode 100644
index 0000000..41d8dc5
--- /dev/null
+++ b/fs_selfservice/fri/includes/display.php
@@ -0,0 +1,222 @@
+<?php
+
+/**
+ * @file
+ * Functions common to display
+ */
+
+/**
+ * Display
+ */
+class Display {
+
+ /**
+ * display constructor
+ */
+ function Display() {
+ }
+
+ /**
+ * display text header
+ *
+ * @param $text
+ * Header text to display
+ */
+ function displayHeaderText($text) {
+
+ $ret = "<h2>" . $text . "</h2>
+ <br>";
+
+ return $ret;
+ }
+
+ /**
+ * displays header line
+ */
+ function displayLine() {
+
+ $ret = "
+ <div id='line'>
+ <div class='spacer'></div>
+ <div class='spacer'></div>
+ </div>
+ <br>";
+
+ return $ret;
+ }
+}
+
+/**
+ * DisplaySearch
+ */
+class DisplaySearch extends Display {
+
+ /**
+ * Constructor
+ */
+ function DisplaySearch() {
+ }
+
+ /**
+ * displays search controls
+ *
+ * @param $align
+ * where to align the control
+ * @param $q
+ * search query
+ * @param $focus
+ * whether to focus control on this block
+ */
+ function displaySearchBlock($align,$m,$q,$url_opts,$focus) {
+
+ // align
+ if ($align=='center') {
+ $alignText = "class='bar_center'";
+ }
+ else {
+ $alignText = "class='bar_left'";
+ }
+
+ // url options
+ foreach ($url_opts as $key => $value) {
+ $option_text .= "<input type=hidden name=" . $key . " value=" . $value . ">";
+ }
+
+ // build
+ $ret .= "<div " . $alignText . ">
+ <form class='bar' action='" . $_SESSION['ARI_ROOT'] . "' method='GET' name='search'>
+ <input type=hidden name=m value=" . $m . ">
+ <input type=text name=q size=40 value='" . $q . "' maxlength=256>
+ " . $option_text . "
+ <input type=hidden name=start value=0>
+ <input type=submit name=btnS value='" . _("Search") . "'>
+ </form>
+ </div>";
+
+ if ($focus=="true") { // search block loaded twice usually so only allow javascript to be loaded on the top block
+ $ret .= "<script type='text/javascript'>
+ <!--
+ if (document.search) {
+ document.search.q.focus();
+ }
+ // -->
+ </script>";
+ }
+
+ return $ret;
+ }
+
+ /**
+ * displays info bar
+ *
+ * @param $controls
+ * controls for the page on the bar
+ * @param $q
+ * search query
+ * @param $start
+ * start number of current page
+ * @param $span
+ * number of items on current page
+ * @param $total
+ * total number of records found by current search
+ */
+ function displayInfoBarBlock($controls,$q,$start,$span,$total) {
+
+ if ($total<$span) {
+ $span = $total;
+ }
+ $start_count = ($total>0)?$start+1:$start;
+ $span_count = ($start+$span>$total)?$total:$start+$span;
+
+ if ($controls) {
+ $left_text = $controls;
+ }
+ elseif ($q != NULL) {
+ $left_text = "<small><small>" . _("Searched for") . " <u>" . $q . "</u></small></small>";
+ }
+
+ if ($span<$total) {
+ $right_text = "<small><small>" . sprintf(_("Results %d - %d of %d"),$start_count,$span_count,$total) . "</small></small>";
+ } else {
+ $right_text = "<small><small>" . sprintf(_("Results %d"),$total) . "</small></small>";
+ }
+
+ $ret .= "
+ <table id='navbar' width='100%'>
+ <tr>
+ <td>
+ " . $left_text . "
+ </td>
+ <td align='right'>
+ " . $right_text ."
+ </td>
+ </tr>
+ </table>";
+
+ return $ret;
+ }
+
+ /**
+ * displays navigation bar
+ *
+ * @param $q
+ * search query
+ * @param $start
+ * start number of current page
+ * @param $span
+ * number of items on current page
+ * @param $total
+ * total number of records found by current search
+ */
+ function displayNavigationBlock($m,$q,$url_opts,$start,$span,$total) {
+
+ $start = $start=='' ? 0 : $start ;
+ $span = $span=='' ? 15 : $span ;
+
+ $total_pages = ceil($total/$span);
+ $start_page = floor($start/$span);
+
+ // if more than ten pages start at this page minus ten otherwise start at zero
+ $begin = ($start_page>10)?($start_page-10):0;
+ // if more than ten pages then stop at this page plus ten otherwise stop at last page
+ $end = ($start_page>8)?($start_page+10):10;
+
+ // url
+ $unicode_q = urlencode($q); // encode search string
+
+ foreach ($url_opts as $key => $value) {
+ $option_text .= "&" . $key . "=" . $value;
+ }
+
+ $url = $_SESSION['ARI_ROOT'] . "?m=" . $m . "&q=" . $unicode_q . $option_text;
+
+ // build
+ if ($start_page!=0) {
+ $start_page_text = "<a href='" . $url . "&start=0'><small>" . _("First") . "</a>&nbsp;</small>
+ <a href=" . $url . "&start=" . ($start-$span) . "><small><</a>&nbsp;</small>";
+ }
+
+ for($next_page=$begin;($next_page<$total_pages)&&($next_page<$end);$next_page++) {
+ if ($next_page == $start_page) {
+ $middle_page_text .= "<small>" . ($next_page+1) . "&nbsp;</small>";
+ } else {
+ $middle_page_text .= "<a href='" . $url . "&start=" . ($next_page*$span) . "'><small>" . ($next_page+1) . "</a>&nbsp;</small>";
+ }
+ }
+ if ( ($start_page != $total_pages-1) && ($total != 0) ) {
+ $end_page_text = "<a href='" . $url . "&start=" . ($start+$span) . "'><small>></a>&nbsp;</small>
+ <a href='" . $url . "&start=" . ($total_pages-1)*$span . "'><small>" . _("Last") . "</a>&nbsp;</small>";
+ }
+
+ $ret .= "<div class='bar_center'>
+ " . $start_page_text . "
+ " . $middle_page_text . "
+ " . $end_page_text . "
+ </div>";
+
+ return $ret;
+ }
+}
+
+
+?> \ No newline at end of file
diff --git a/fs_selfservice/fri/includes/lang.php b/fs_selfservice/fri/includes/lang.php
new file mode 100644
index 0000000..b27b8e3
--- /dev/null
+++ b/fs_selfservice/fri/includes/lang.php
@@ -0,0 +1,112 @@
+<?php
+
+/**
+ * @file
+ * i18n language functions
+ */
+
+/**
+ * Class for login
+ */
+class Language {
+
+ var $error;
+
+ /**
+ * Sets i18n locale language
+ *
+ * sets the language for i18n php gettext module
+ * (gettext has to be enabled in the php.ini)
+ *
+ */
+ function set() {
+
+ if (extension_loaded('gettext')) {
+
+ // try and find the default locale
+ $default_lang = preg_replace('/-/','_',$_SERVER['HTTP_ACCEPT_LANGUAGE']);
+
+ $locale = 'en_US';
+ $locale_dir = "./locale";
+ $directories = getdirectories($locale_dir,"");
+ foreach($directories as $directory) {
+ $buf = substr($directory,strlen($locale_dir)+1,strlen($directory) - strlen($locale_dir));
+ if (preg_match("/" . $buf . "/i",$default_lang)) {
+ $locale = $buf;
+ break;
+ }
+ }
+
+ // set locale
+ $language = isset($_COOKIE['ari_lang']) ? $_COOKIE['ari_lang'] : $locale;
+ putenv("LANG=$language");
+ putenv("LANGUAGE=$language");
+ setlocale(LC_MESSAGES,$language);
+ bindtextdomain('ari','./locale');
+ bind_textdomain_codeset('ari', 'UTF-8');
+ textdomain('ari');
+
+ } else {
+ function _($str) {
+ return $str;
+ }
+ }
+ }
+
+ /**
+ * Sets the i18n language in a cookie
+ *
+ * @param $lang_code
+ * length of random number
+ */
+ function setCookie($lang_code) {
+
+ if (extension_loaded('gettext')) {
+ setcookie("ari_lang", $lang_code, time()+365*24*60*60);
+ }
+ }
+
+ /**
+ * Sets the i18n language in a cookie
+ *
+ * @param $lang_code
+ * length of random number
+ */
+ function getForm() {
+
+ // lang setting options
+ if (extension_loaded('gettext')) {
+
+ $langOptions = "
+ <script>
+ function setCookie(name,value) {
+ var t = new Date();
+ var e = new Date();
+ e.setTime(t.getTime() + 365*24*60*60);
+ document.cookie = name+\"=\"+escape(value) + \";expires=\"+e.toGMTString();
+ }
+ </script>
+ <form class='lang' name='lang' action=" . $_SESSION['ARI_ROOT'] . " method='POST'>
+ <select class='lang_code' name='lang_code' onChange=\"setCookie('ari_lang',document.lang.lang_code.value); window.location.reload();\">
+ <option value='en_US' " . ($_COOKIE['ari_lang']=='en_US' ? 'selected' : '') . ">English</option>
+ <option value='es_ES' " . ($_COOKIE['ari_lang']=='es_ES' ? 'selected' : '') . ">Espa&ntilde;ol</option>
+ <option value='fr_FR' " . ($_COOKIE['ari_lang']=='fr_FR' ? 'selected' : '') . ">French</option>
+ <option value='de_DE' " . ($_COOKIE['ari_lang']=='de_DE' ? 'selected' : '') . ">German</option>
+ <option value='el_GR' " . ($_COOKIE['ari_lang']=='el_GR' ? 'selected' : '') . ">Greek</option>
+ <option value='he_IL' " . ($_COOKIE['ari_lang']=='he_IL' ? 'selected' : '') . ">Hebrew</option>
+ <option value='hu_HU' " . ($_COOKIE['ari_lang']=='hu_HU' ? 'selected' : '') . ">Hungarian</option>
+ <option value='it_IT' " . ($_COOKIE['ari_lang']=='it_IT' ? 'selected' : '') . ">Italian</option>
+ <option value='pt_BR' " . ($_COOKIE['ari_lang']=='pt_BR' ? 'selected' : '') . ">Portuguese</option>
+ <option value='sv_SE' " . ($_COOKIE['ari_lang']=='sv_SE' ? 'selected' : '') . ">Swedish</option>
+ </select>
+ </form>";
+ }
+
+ return $langOptions;
+ }
+
+
+}
+
+
+?> \ No newline at end of file
diff --git a/fs_selfservice/fri/includes/login.php b/fs_selfservice/fri/includes/login.php
new file mode 100644
index 0000000..826692c
--- /dev/null
+++ b/fs_selfservice/fri/includes/login.php
@@ -0,0 +1,477 @@
+<?php
+
+/**
+ * @file
+ * login functions
+ */
+
+/**
+ * Class for login
+ */
+class Login {
+
+ var $error;
+
+ /**
+ * Authenticate user and register user information into a session
+ */
+ function Auth() {
+
+ global $ARI_ADMIN_USERNAME;
+ global $ARI_ADMIN_PASSWORD;
+ global $ARI_ADMIN_EXTENSIONS;
+ global $ARI_CRYPT_PASSWORD;
+ global $ASTERISK_VOICEMAIL_CONF;
+ global $ASTERISK_VOICEMAIL_CONTEXT;
+ global $ASTERISK_VOICEMAIL_PATH;
+ global $ASTERISK_PROTOCOLS;
+ global $CALLMONITOR_ADMIN_EXTENSIONS;
+ global $ARI_NO_LOGIN;
+ global $ARI_DEFAULT_ADMIN_PAGE;
+ global $ARI_DEFAULT_USER_PAGE;
+
+ $crypt = new Crypt();
+
+ // init variables
+ $extension = '';
+ $displayname = '';
+ $vm_password = '';
+ $category = '';
+ $context = '';
+ $voicemail_enabled = '';
+ $voicemail_email_address = '';
+ $voicemail_pager_address = '';
+ $voicemail_email_enable = '';
+ $admin = '';
+ $admin_callmonitor = '';
+ $default_page = '';
+
+ $username = '';
+ $password = '';
+
+ // get the ari authentication cookie
+ $data = '';
+ $chksum = '';
+ if (isset($_COOKIE['ari_auth'])) {
+ $buf = unserialize($_COOKIE['ari_auth']);
+ list($data,$chksum) = $buf;
+ }
+ if (md5($data) == $chksum) {
+ $data = unserialize($crypt->decrypt($data,$ARI_CRYPT_PASSWORD));
+ $username = $data['username'];
+ $password = $data['password'];
+ }
+
+ if (isset($_POST['username']) &&
+ isset($_POST['password'])) {
+ $username = $_POST['username'];
+ $password = $_POST['password'];
+ }
+
+ // init email options array
+ $voicemail_email = array();
+
+ // when login, make a new session
+ if ($username && !$ARI_NO_LOGIN) {
+
+ $auth = false;
+
+ // check admin
+ if (!$auth) {
+ if ($username==$ARI_ADMIN_USERNAME &&
+ $password==$ARI_ADMIN_PASSWORD) {
+
+ // authenticated
+ $auth = true;
+
+ $extension = 'admin';
+ $name = 'Administrator';
+ $admin = 1;
+ $admin_callmonitor = 1;
+
+ $default_page = $ARI_DEFAULT_ADMIN_PAGE;
+ }
+ }
+
+ // check voicemail login
+ if (!$auth) {
+
+ if (is_readable($ASTERISK_VOICEMAIL_CONF)) {
+
+ $lines = file($ASTERISK_VOICEMAIL_CONF);
+
+ // look for include files and tack their lines to end of array
+ foreach ($lines as $key => $line) {
+
+ if (preg_match("/include/i",$line)) {
+
+ $include_filename = '';
+ $parts = split(' ',$line);
+ if (isset($parts[1])) {
+ $include_filename = trim($parts[1]);
+ }
+
+ if ($include_filename) {
+ $path_parts = pathinfo($ASTERISK_VOICEMAIL_CONF);
+ $include_path = fixPathSlash($path_parts['dirname']) . $include_filename;
+ foreach (glob($include_path) as $include_file) {
+ $include_lines = file($include_file);
+ $lines = array_merge($include_lines,$lines);
+ }
+ }
+ }
+ }
+
+ // process
+ foreach ($lines as $key => $line) {
+
+ // check for current context and process
+ if (preg_match("/\[.*\]/i",$line)) {
+ $currentContext = trim(preg_replace('/\[|\]/', '', $line));
+ }
+ if ($ASTERISK_VOICEMAIL_CONTEXT &&
+ $currentContext!=$ASTERISK_VOICEMAIL_CONTEXT) {
+ continue;
+ }
+
+ // check for user and process
+ unset($value);
+ $parts = split('=>',$line);
+ if (isset($parts[0])) {
+ $var = $parts[0];
+ }
+ if (isset($parts[1])) {
+ $value = $parts[1];
+ }
+ $var = trim($var);
+ if ($var==$username && $value) {
+ $buf = split(',',$value);
+ if ($buf[0]==$password) {
+
+ // authenticated
+ $auth = true;
+ $extension = $username;
+ $displayname = $buf[1];
+ $vm_password = $buf[0];
+ $default_page = $ARI_DEFAULT_USER_PAGE;
+ $context = $currentContext;
+ $voicemail_enabled = 1;
+ $voicemail_email_address = $buf[2];
+ $voicemail_pager_address = $buf[3];
+
+ if ($voicemail_email_address || $voicemail_pager_address) {
+ $voicemail_email_enable = 1;
+ }
+
+ $options = split('\|',$buf[4]);
+ foreach ($options as $option) {
+ $opt_buf = split('=',$option);
+ $voicemail_email[$opt_buf[0]] = trim($opt_buf[1]);
+ }
+
+ $admin = 0;
+ if ($ARI_ADMIN_EXTENSIONS) {
+ $extensions = split(',',$ARI_ADMIN_EXTENSIONS);
+ foreach ($extensions as $key => $value) {
+ if ($extension==$value) {
+ $admin = 1;
+ break 2;
+ }
+ }
+ }
+
+ $admin_callmonitor = 0;
+ if ($CALLMONITOR_ADMIN_EXTENSIONS) {
+ $extensions = split(',',$CALLMONITOR_ADMIN_EXTENSIONS);
+ foreach ($extensions as $key => $value) {
+ if ($value=='all' || $extension==$value) {
+ $admin_callmonitor = 1;
+ break 2;
+ }
+ }
+ }
+ }
+ else {
+ $_SESSION['ari_error'] = "Incorrect Password";
+ return;
+ }
+ }
+ }
+ }
+ else {
+ $_SESSION['ari_error'] = "File not readable: " . $ASTERISK_VOICEMAIL_CONF;
+ return;
+ }
+ }
+
+ // check sip login
+ if (!$auth) {
+
+ foreach($ASTERISK_PROTOCOLS as $protocol => $value) {
+
+ $config_files = split(';',$value['config_files']);
+ foreach ($config_files as $config_file) {
+
+ if (is_readable($config_file)) {
+
+ $lines = file($config_file);
+ foreach ($lines as $key => $line) {
+
+ unset($value);
+ $parts = split('=',$line);
+ if (isset($parts[0])) {
+ $var = trim($parts[0]);
+ }
+ if (isset($parts[1])) {
+ $value = trim($parts[1]);
+ }
+ if ($var=="username") {
+ $protocol_username = $value;
+ }
+ if ($var=="secret") {
+
+ $protocol_password = $value;
+ if ($protocol_username==$username &&
+ $protocol_password==$password) {
+
+ // authenticated
+ $auth = true;
+ $extension = $username ;
+ $displayname = $username;
+ $default_page = $ARI_DEFAULT_ADMIN_PAGE;
+
+ $admin = 0;
+ if ($ARI_ADMIN_EXTENSIONS) {
+ $extensions = split(',',$ARI_ADMIN_EXTENSIONS);
+ foreach ($extensions as $key => $value) {
+ if ($extension==$value) {
+ $admin = 1;
+ break 2;
+ }
+ }
+ }
+
+ $admin_callmonitor = 0;
+ if ($CALLMONITOR_ADMIN_EXTENSIONS) {
+ $extensions = split(',',$CALLMONITOR_ADMIN_EXTENSIONS);
+ foreach ($extensions as $key => $value) {
+ if ($value=='all' || $extension==$value) {
+ $admin_callmonitor = 1;
+ break 2;
+ }
+ }
+ }
+ }
+ else if ($protocol_username==$username &&
+ $protocol_password!=$password) {
+ $_SESSION['ari_error'] = _("Incorrect Password");
+ return;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // let user know bad login
+ if (!$auth) {
+ $_SESSION['ari_error'] = _("Incorrect Username or Password");
+ }
+
+ // if authenticated and user wants to be remembered, set cookie
+ $remember = '';
+ if (isset($_POST['remember'])) {
+ $remember = $_POST['remember'];
+ }
+ if ($auth && $remember) {
+
+ $data = array('username' => $username, 'password' => $password);
+ $data = $crypt->encrypt(serialize($data),$ARI_CRYPT_PASSWORD);
+
+ $chksum = md5($data);
+
+ $buf = serialize(array($data,$chksum));
+ setcookie('ari_auth',$buf,time()+365*24*60*60,'/');
+ }
+
+ // set category
+ if (!$category) {
+ $category = "general";
+ }
+
+ // set context
+ if (!$context) {
+ $context = "default";
+ }
+
+ // no login user
+ if ($ARI_NO_LOGIN) {
+ $extension = 'admin';
+ $name = 'Administrator';
+ $admin_callmonitor = 1;
+ $default_page = $ARI_DEFAULT_ADMIN_PAGE;
+ }
+
+ // get outboundCID if it exists
+ $outboundCID = $this->getOutboundCID($extension);
+
+ // set
+ if ($extension) {
+ $_SESSION['ari_user']['extension'] = $extension;
+ $_SESSION['ari_user']['outboundCID'] = $outboundCID;
+ $_SESSION['ari_user']['displayname'] = $displayname;
+ $_SESSION['ari_user']['voicemail_password'] = $vm_password;
+ $_SESSION['ari_user']['category'] = $category;
+ $_SESSION['ari_user']['context'] = $context;
+ $_SESSION['ari_user']['voicemail_enabled'] = $voicemail_enabled;
+ $_SESSION['ari_user']['voicemail_email_address'] = $voicemail_email_address;
+ $_SESSION['ari_user']['voicemail_pager_address'] = $voicemail_pager_address;
+ $_SESSION['ari_user']['voicemail_email_enable'] = $voicemail_email_enable;
+ foreach ($voicemail_email as $key => $value) {
+ $_SESSION['ari_user']['voicemail_email'][$key] = $value;
+ }
+ $_SESSION['ari_user']['admin'] = $admin;
+ $_SESSION['ari_user']['admin_callmonitor'] = $admin_callmonitor;
+ $_SESSION['ari_user']['default_page'] = $default_page;
+
+ // force the session data saved
+ session_write_close();
+ }
+ }
+ }
+
+ /*
+ * Gets user outbound caller id
+ *
+ * @param $exten
+ * Extension to get information about
+ * @return $ret
+ * outbound caller id
+ */
+ function getOutboundCID($extension) {
+
+ global $asterisk_manager_interface;
+
+ $ret = '';
+ $response = $asterisk_manager_interface->Command2("Action: Command\r\nCommand: database get AMPUSER $extension/outboundcid\r\n\r\n");
+ if ($response) {
+
+ $posLeft = strpos( $response, "<")+strlen("<");
+ $posRight = strpos( $response, ">", $posLeft);
+ $ret = substr( $response,$posLeft,$posRight-$posLeft);
+ }
+ return $ret;
+ }
+
+ /**
+ * logout
+ */
+ function Unauth() {
+ unset($_COOKIE["ari_auth"]);
+ setcookie('ari_auth',"",time(),'/');
+ unset($_SESSION['ari_user']);
+ }
+
+ /**
+ * Provide a login form for user
+ *
+ * @param $request
+ * Variable to hold data entered into form
+ */
+ function GetForm() {
+
+ global $ARI_NO_LOGIN;
+
+ if ($ARI_NO_LOGIN) {
+ $ret = '';
+ return;
+ }
+
+ if (isset($_GET['login'])) {
+ $login = $_GET['login'];
+ }
+
+ // if user name and password were given, but there was a problem report the error
+ if ($this->error!='') {
+ $ret = $this->error;
+ }
+
+ $language = new Language();
+ $display = new Display(NULL);
+
+ // new header
+ $ret .= $display->DisplayHeaderText(_("Login"));
+ $ret .= $display->DisplayLine();
+ $ret .= checkErrorMessage();
+
+ $ret .= "
+ <table id='login'>
+ <form id='login' name='login' action=" . $_SESSION['ARI_ROOT'] . " method='POST'>
+ <tr>
+ <td class='right'>
+ <small><small>" . _("Login") . ":&nbsp;&nbsp;</small></small>
+ </td>
+ <td>
+ <input type='text' name='username' value='" . $login . "' maxlength=20 tabindex=1>
+ </td>
+ </tr>
+ <tr>
+ <td class='right'>
+ <small><small>" . _("Password") . ":&nbsp;&nbsp;</small></small>
+ </td>
+ <td colspan=1>
+ <input type='password' name='password' maxlength=20 tabindex=2>
+ </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>
+ <input type='submit' name='btnSubmit' value='" . _("Submit") . "' tabindex=3></small></small></p>
+ </td>
+ </tr>
+ <tr>
+ <td class='right'>
+ <input type='checkbox' name='remember'>
+ </td>
+ <td class='left'>
+ <p class='small'>" . _("Remember Password") . "</p>
+ </td>
+ </tr>
+ </form>
+ <tr>
+ <td></td>
+ <td>
+ " . $language->getForm() . "
+ </td>
+ </tr>
+ <tr><td>&nbsp;</td></tr>
+ </table>
+ <table id='login_text'>
+ <tr>
+ <td>" .
+ _("Use your <b>Voicemail Mailbox and Password</b>") . "<br>" .
+ _("This is the same password used for the phone") . "<br>" .
+ "<br>" .
+ _("For password maintenance or assistance, contact your Phone System Administrator.") . "<br>" . "
+ </td>
+ </tr>
+ </table>";
+
+ $ret .= "
+ <script type='text/javascript'>
+ <!--
+ if (document.login) {
+ document.login.username.focus();
+ }
+ // -->
+ </script>";
+
+ return $ret;
+ }
+
+
+}
+
+
+?> \ No newline at end of file
diff --git a/fs_selfservice/fri/includes/main.conf.php b/fs_selfservice/fri/includes/main.conf.php
new file mode 100644
index 0000000..31592ca
--- /dev/null
+++ b/fs_selfservice/fri/includes/main.conf.php
@@ -0,0 +1,330 @@
+<?php
+
+/**
+ * @file
+ * site-specific configuration file.
+ */
+
+###############################
+# AMP or standalone settings
+###############################
+#
+# From AMP. Used for logon to database.
+#
+$AMP_FUNCTIONS_FILES = "../admin/functions.php;../admin/functions.inc.php";
+$AMPORTAL_CONF_FILE = "/etc/amportal.conf";
+
+#
+# Host for Asterisk Manager Interface
+#
+$ASTERISKMGR_DBHOST = "localhost";
+
+#
+# Database options for older legacy AMP installations (pre-FreePBX)
+# - $LEGACY_AMP_DBFILE only needs to be set if using a database like sqlite
+#
+$LEGACY_AMP_DBHOST = "localhost";
+$LEGACY_AMP_DBENGINE = "mysql";
+$LEGACY_AMP_DBFILE = "";
+$LEGACY_AMP_DBNAME = "asterisk";
+
+#
+# Database cdr settings
+# - Only need to update these settings if standalone or an older AMP version (pre-FreePBX) is used
+# - $ASTERISKCDR_DBFILE only needs to be set if using a database like sqlite
+# Options: supported database types (others are supported, but not listed)
+# 'mysql' - MySQL
+# 'pgsql' - PostgreSQL
+# 'oci8' - Oracle
+# 'odbc' - ODBC
+#
+$ASTERISKCDR_DBHOST = "localhost";
+$ASTERISKCDR_DBENGINE = "mysql";
+$ASTERISKCDR_DBFILE = "";
+$ASTERISKCDR_DBNAME = "asteriskcdrdb";
+$ASTERISKCDR_DBTABLE = "cdr";
+
+#
+# Standalone, for use without AMP
+# set use = true;
+# set asterisk_mgruser to Asterisk Call Manager username
+# set asterisk_mgrpass to Asterisk Call Manager password
+#
+$STANDALONE['use'] = false;
+$STANDALONE['asterisk_mgruser'] = "";
+$STANDALONE['asterisk_mgrpass'] = "";
+$STANDALONE['asteriskcdr_dbuser'] = "";
+$STANDALONE['asteriskcdr_dbpass'] = "";
+
+###############################
+# authentication settings
+###############################
+#
+# For using the Call Monitor only
+# option: 0 - use Authentication, Voicemail, and Call Monitor
+# 1 - use only the Call Monitor
+#
+$ARI_NO_LOGIN = 0;
+
+#
+# Admin only account
+#
+$ARI_ADMIN_USERNAME = "admin";
+$ARI_ADMIN_PASSWORD ="ari_password";
+#
+# Admin extensions
+# option: Comma delimited list of extensions
+#
+$ARI_ADMIN_EXTENSIONS = "";
+
+#
+# Authentication password to unlock cookie password
+# This must be all continuous and only letters and numbers
+#
+$ARI_CRYPT_PASSWORD = "z1Mc6KRxA7Nw90dGjY5qLXhtrPgJOfeCaUmHvQT3yW8nDsI2VkEpiS4blFoBuZ";
+
+###############################
+# modules settings
+###############################
+#
+# modules with admin only status (they will not be displayed for regular users)
+# option: Comma delimited list of module names (ie voicemail,callmonitor,help,settings)
+#
+$ARI_ADMIN_MODULES = "";
+
+#
+# disable modules (you can also just delete them from /recordings/modules without problems)
+# option: Comma delimited list of module names (ie voicemail,callmonitor,help,settings)
+#
+$ARI_DISABLED_MODULES = "";
+
+#
+# sets the default admin page
+# option: Comma delimited list of module names (ie voicemail,callmonitor,help,settings)
+#
+$ARI_DEFAULT_ADMIN_PAGE = "callmonitor";
+
+#
+# sets the default user page
+# option: Comma delimited list of module names (ie voicemail,callmonitor,help,settings)
+#
+$ARI_DEFAULT_USER_PAGE = "voicemail";
+
+#
+# enables ajax page refresh
+# option: 0 - disable ajax page refresh
+# 1 - enable ajax page refresh
+#
+$AJAX_PAGE_REFRESH_ENABLE = 1;
+
+#
+# sets the default user page
+# option: refresh time in 'minutes:seconds' (0 to inifinity) : (0 to 59)
+#
+$AJAX_PAGE_REFRESH_TIME ="01:00";
+###############################
+# voicemail settings
+###############################
+#
+# voicemail config.
+#
+$ASTERISK_VOICEMAIL_CONF = "/etc/asterisk/voicemail.conf";
+
+#
+# To set to a specific context.
+# If using default or more than one context then leave blank
+#
+$ASTERISK_VOICEMAIL_CONTEXT = "";
+
+#
+# Location of asterisk voicemail recordings on server
+# Use semi-colon for multiple paths
+#
+$ASTERISK_VOICEMAIL_PATH = "/var/spool/asterisk/voicemail";
+
+#
+# valid mailbox folders
+#
+$ASTERISK_VOICEMAIL_FOLDERS = array();
+$ASTERISK_VOICEMAIL_FOLDERS[0]['folder'] = "INBOX";
+$ASTERISK_VOICEMAIL_FOLDERS[0]['name'] = _("INBOX");
+$ASTERISK_VOICEMAIL_FOLDERS[1]['folder'] = "Family";
+$ASTERISK_VOICEMAIL_FOLDERS[1]['name'] = _("Family");
+$ASTERISK_VOICEMAIL_FOLDERS[2]['folder'] = "Friends";
+$ASTERISK_VOICEMAIL_FOLDERS[2]['name'] = _("Friends");
+$ASTERISK_VOICEMAIL_FOLDERS[3]['folder'] = "Old";
+$ASTERISK_VOICEMAIL_FOLDERS[3]['name'] = _("Old");
+$ASTERISK_VOICEMAIL_FOLDERS[4]['folder'] = "Work";
+$ASTERISK_VOICEMAIL_FOLDERS[4]['name'] = _("Work");
+
+###############################
+# call monitor settings
+###############################
+#
+# Location of asterisk call monitor recordings on server
+#
+$ASTERISK_CALLMONITOR_PATH = "/var/spool/asterisk/monitor";
+
+#
+# Extensions with access to all call monitor recordings
+# option: Comma delimited list of extensions or "all"
+#
+$CALLMONITOR_ADMIN_EXTENSIONS ="";
+#
+# Allow call monitor users to delete monitored calls
+# option: 0 - do not show controls
+# 1 - show controls
+#
+$CALLMONITOR_ALLOW_DELETE = 1;
+
+#
+# Allow for aggressive matching of recording files to database records
+# will match recordings that are marked several seconds off
+# option: 0 - do not aggressively match
+# 1 - aggressively match
+#
+$CALLMONITOR_AGGRESSIVE_MATCHING = 1;
+
+#
+# Limits log/recording file matching to exact matching
+# will not try to look through all the recordings and make a best match
+# even if there is not uniqueid
+# requires that the MYSQL_UNIQUEID flag be compiled in asterisk-addons
+# (in the asterisk-addon Makefile add the following "CFLAGS+=-DMYSQL_LOGUNIQUEID")
+#
+# * use if there are or will be more than 2500 recording files
+#
+# option: 0 - do not exact match
+# 1 - only exact match
+#
+$CALLMONITOR_ONLY_EXACT_MATCHING = 0;
+
+###############################
+# conference page settings
+###############################
+#
+# Meetme extension prefix
+# for this module to function, the user has to have
+# a meetme conference room {prefix}{extension}
+#
+$CONFERENCE_WEBMEETME_PREFIX = "";
+
+#
+# url to web meetme conference room
+# example: "http://example.mycompany.com/webmeetme"
+#
+$CONFERENCE_WEBMEETME_URL = "";
+
+###############################
+# help page settings
+###############################
+#
+# help feature codes
+# list of handset options and their function
+#
+$ARI_HELP_FEATURE_CODES = array();
+//$ARI_HELP_FEATURE_CODES['*411'] = _("Directory");
+//$ARI_HELP_FEATURE_CODES['*43'] = _("Echo Test");
+//$ARI_HELP_FEATURE_CODES['*60'] = _("Time");
+//$ARI_HELP_FEATURE_CODES['*61'] = _("Weather");
+//$ARI_HELP_FEATURE_CODES['*62'] = _("Schedule wakeup call");
+//$ARI_HELP_FEATURE_CODES['*65'] = _("festival test (your extension is XXX)");
+//$ARI_HELP_FEATURE_CODES['*77'] = _("IVR Recording");
+//$ARI_HELP_FEATURE_CODES['*99'] = _("Playback IVR Recording");
+//$ARI_HELP_FEATURE_CODES['666'] = _("Test Fax");
+//$ARI_HELP_FEATURE_CODES['7777'] = _("Simulate incoming call");
+
+$ARI_HELP_FEATURE_CODES['*72'] = _("Call Forward All Activate");
+$ARI_HELP_FEATURE_CODES['*73'] = _("Call Forward All Deactivate");
+$ARI_HELP_FEATURE_CODES['*74'] = _("Call Forward All Prompting Deactivate");
+$ARI_HELP_FEATURE_CODES['*90'] = _("Call Forward Busy Activate");
+$ARI_HELP_FEATURE_CODES['*91'] = _("Call Forward Busy Deactivate");
+$ARI_HELP_FEATURE_CODES['*92'] = _("Call Forward Busy Prompting Deactivate");
+$ARI_HELP_FEATURE_CODES['*52'] = _("Call Forward No Answer/Unavailable Activate");
+$ARI_HELP_FEATURE_CODES['*53'] = _("Call Forward No Answer/Unavailable Deactivate");
+$ARI_HELP_FEATURE_CODES['*70'] = _("Call Waiting - Activate");
+$ARI_HELP_FEATURE_CODES['*71'] = _("Call Waiting - Deactivate");
+$ARI_HELP_FEATURE_CODES['*78'] = _("Do-Not-Disturb Activate");
+$ARI_HELP_FEATURE_CODES['*79'] = _("Do-Not-Disturb Deactivate");
+$ARI_HELP_FEATURE_CODES['*97'] = _("My Voicemail");
+$ARI_HELP_FEATURE_CODES['*98'] = _("Dial Voicemail");
+
+###############################
+# settings page settings
+###############################
+#
+# protocol config.
+# config_file options: semi-colon delimited list of extensions
+#
+$ASTERISK_PROTOCOLS = array();
+$ASTERISK_PROTOCOLS['iax']['table'] = "iax";
+$ASTERISK_PROTOCOLS['iax']['config_files'] = "/etc/asterisk/iax.conf;/etc/asterisk/iax_additional.conf";
+$ASTERISK_PROTOCOLS['sip']['table'] = "sip";
+$ASTERISK_PROTOCOLS['sip']['config_files'] = "/etc/asterisk/sip.conf;/etc/asterisk/sip_additional.conf";
+$ASTERISK_PROTOCOLS['zap']['table'] = "zap";
+$ASTERISK_PROTOCOLS['zap']['config_files'] = "/etc/asterisk/zapata.conf;/etc/asterisk/zapata_additional.conf";
+
+# Settings for Follow-Me Select Boxes in seconds
+#
+
+$SETTINGS_PRERING_LOW = 4;
+$SETTINGS_PRERING_HIGH = 30;
+$SETTINGS_LISTRING_LOW = 6;
+$SETTINGS_LISTRING_HIGH = 60;
+
+$SETTINGS_FOLLOW_ME_LIST_MAX = 5;
+$SETTINGS_ALLOW_VMX_SETTINGS = true;
+#
+# For setting
+# option: 0 - do not show controls
+# 1 - show controls
+#
+$SETTINGS_ALLOW_CALLFORWARD_SETTINGS = 1;
+$SETTINGS_ALLOW_VOICEMAIL_SETTINGS = 1;
+$SETTINGS_ALLOW_VOICEMAIL_PASSWORD_SET = 1;
+
+#
+# password length
+# setting: number of characters required for changing voicemail password
+#
+$SETTINGS_VOICEMAIL_PASSWORD_LENGTH = 3;
+
+#
+# password exact length
+# option: 0 - do not require exact length when setting the password
+# 1 - require exact length when setting the password
+#
+$SETTINGS_VOICEMAIL_PASSWORD_EXACT = 0;
+
+#
+# voicemail email option descriptions
+#
+$SETTINGS_VOICEMAIL_EMAIL_OPTION_DESCRIPTIONS = array();
+$SETTINGS_VOICEMAIL_EMAIL_OPTION_DESCRIPTIONS['attach'] = _("Email voicemail as attachment");
+$SETTINGS_VOICEMAIL_EMAIL_OPTION_DESCRIPTIONS['saycid'] = _("Say caller id in recording emailed");
+$SETTINGS_VOICEMAIL_EMAIL_OPTION_DESCRIPTIONS['envelope'] = _("Say envelop (date/time) in recording emailed");
+$SETTINGS_VOICEMAIL_EMAIL_OPTION_DESCRIPTIONS['delete'] = _("Delete voicemail when emailed");
+$SETTINGS_VOICEMAIL_EMAIL_OPTION_DESCRIPTIONS['nextaftercmd'] = _("Play next message after deleting current message");
+$SETTINGS_VOICEMAIL_EMAIL_OPTION_DESCRIPTIONS['review'] = _("Ask caller to review their voicemail before sending");
+$SETTINGS_VOICEMAIL_EMAIL_OPTION_DESCRIPTIONS['maxmessage'] = _("Maximum time in seconds a voicemail will record");
+
+#
+# Default
+# option: ".wav" - wav format
+# ".gsm" - gsm format
+#
+$ARI_VOICEMAIL_AUDIO_FORMAT_DEFAULT = ".wav";
+
+#
+# For setting
+# option: 0 - do not show controls
+# 1 - show controls
+#
+$SETTINGS_ALLOW_CALL_RECORDING_SET = 1;
+
+
+$SETTINGS_ALLOW_PHONE_SETTINGS = 1;
+
+
+
+?>
diff --git a/fs_selfservice/fri/index.php b/fs_selfservice/fri/index.php
new file mode 100644
index 0000000..0fe6149
--- /dev/null
+++ b/fs_selfservice/fri/index.php
@@ -0,0 +1,20 @@
+<?php
+
+/**
+ * @file
+ * main
+ */
+
+include_once("includes/bootstrap.php");
+ariPageHeader();
+include_once("includes/common.php");
+
+handler();
+
+ariPageFooter();
+
+
+?>
+
+
+
diff --git a/fs_selfservice/fri/locale/ari.po b/fs_selfservice/fri/locale/ari.po
new file mode 100644
index 0000000..aff5a75
--- /dev/null
+++ b/fs_selfservice/fri/locale/ari.po
@@ -0,0 +1,590 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-05-03 08:32-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../includes/asi.php:46
+msgid "Asterisk Call Manager not responding"
+msgstr ""
+
+#: ../includes/asi.php:54
+msgid "Asterisk authentication failed:"
+msgstr ""
+
+#: ../includes/asi.php:96 ../includes/asi.php:111
+msgid "Asterisk command not understood"
+msgstr ""
+
+#: ../includes/bootstrap.php:123
+#, php-format
+msgid "To many directories in %s Not all files processed"
+msgstr ""
+
+#: ../includes/bootstrap.php:226
+msgid "ARI requires a version of PHP 4.3 or later"
+msgstr ""
+
+#: ../includes/bootstrap.php:245
+msgid ""
+"PHP PEAR must be installed. Visit http://pear.php.net for help with "
+"installation."
+msgstr ""
+
+#: ../includes/common.php:173
+msgid "ARI does not appear to have access to the Asterisk Manager."
+msgstr ""
+
+#: ../includes/common.php:174
+msgid ""
+"Check the ARI 'main.conf.php' configuration file to set the Asterisk Manager "
+"Account."
+msgstr ""
+
+#: ../includes/common.php:175
+msgid "Check /etc/asterisk/manager.conf for a proper Asterisk Manager Account"
+msgstr ""
+
+#: ../includes/common.php:176
+msgid ""
+"make sure [general] enabled = yes and a 'permit=' line for localhost or the "
+"webserver."
+msgstr ""
+
+#: ../includes/common.php:193 ../includes/common.php:208
+msgid "Check AMP installation, asterisk, and ARI main.conf"
+msgstr ""
+
+#: ../includes/common.php:344
+msgid "Logout"
+msgstr ""
+
+#: ../includes/common.php:349
+msgid "Page Not Found."
+msgstr ""
+
+#: ../includes/display.php:92
+msgid "Search"
+msgstr ""
+
+#: ../includes/display.php:135
+msgid "Searched for"
+msgstr ""
+
+#: ../includes/display.php:139
+#, php-format
+msgid "Results %d - %d of %d"
+msgstr ""
+
+#: ../includes/display.php:141
+#, php-format
+msgid "Results %d"
+msgstr ""
+
+#: ../includes/display.php:195
+msgid "First"
+msgstr ""
+
+#: ../includes/display.php:208
+msgid "Last"
+msgstr ""
+
+#: ../includes/login.php:267
+msgid "Incorrect Password"
+msgstr ""
+
+#: ../includes/login.php:279
+msgid "Incorrect Username or Password"
+msgstr ""
+
+#: ../includes/login.php:402 ../includes/login.php:411
+msgid "Login"
+msgstr ""
+
+#: ../includes/login.php:419
+msgid "Password"
+msgstr ""
+
+#: ../includes/login.php:428
+msgid "Submit"
+msgstr ""
+
+#: ../includes/login.php:436
+msgid "Remember Password"
+msgstr ""
+
+#: ../includes/login.php:451
+msgid "Use your <b>Voicemail Mailbox and Password</b>"
+msgstr ""
+
+#: ../includes/login.php:452
+msgid "This is the same password used for the phone"
+msgstr ""
+
+#: ../includes/login.php:454
+msgid ""
+"For password maintenance or assistance, contact your Phone System "
+"Administrator."
+msgstr ""
+
+#: ../includes/main.conf.php:152
+msgid "INBOX"
+msgstr ""
+
+#: ../includes/main.conf.php:154
+msgid "Family"
+msgstr ""
+
+#: ../includes/main.conf.php:156
+msgid "Friends"
+msgstr ""
+
+#: ../includes/main.conf.php:158
+msgid "Old"
+msgstr ""
+
+#: ../includes/main.conf.php:160
+msgid "Work"
+msgstr ""
+
+#: ../includes/main.conf.php:229
+msgid "Directory"
+msgstr ""
+
+#: ../includes/main.conf.php:230
+msgid "Echo Test"
+msgstr ""
+
+#: ../includes/main.conf.php:231 ../modules/callmonitor.module:161
+#: ../modules/voicemail.module:324
+msgid "Time"
+msgstr ""
+
+#: ../includes/main.conf.php:232
+msgid "Weather"
+msgstr ""
+
+#: ../includes/main.conf.php:233
+msgid "Schedule wakeup call"
+msgstr ""
+
+#: ../includes/main.conf.php:234
+msgid "festival test (your extension is XXX)"
+msgstr ""
+
+#: ../includes/main.conf.php:235
+msgid "Activate Call Waiting (deactivated by default)"
+msgstr ""
+
+#: ../includes/main.conf.php:236
+msgid "Deactivate Call Waiting"
+msgstr ""
+
+#: ../includes/main.conf.php:237
+msgid "Call Forwarding System"
+msgstr ""
+
+#: ../includes/main.conf.php:238
+msgid "Disable Call Forwarding"
+msgstr ""
+
+#: ../includes/main.conf.php:239
+msgid "IVR Recording"
+msgstr ""
+
+#: ../includes/main.conf.php:240
+msgid "Enable Do-Not-Disturb"
+msgstr ""
+
+#: ../includes/main.conf.php:241
+msgid "Disable Do-Not-Disturb"
+msgstr ""
+
+#: ../includes/main.conf.php:242
+msgid "Call Forward on Busy"
+msgstr ""
+
+#: ../includes/main.conf.php:243
+msgid "Disable Call Forward on Busy"
+msgstr ""
+
+#: ../includes/main.conf.php:244
+msgid "Message Center (does not ask for extension)"
+msgstr ""
+
+#: ../includes/main.conf.php:245
+msgid "Enter Message Center"
+msgstr ""
+
+#: ../includes/main.conf.php:246
+msgid "Playback IVR Recording"
+msgstr ""
+
+#: ../includes/main.conf.php:247
+msgid "Test Fax"
+msgstr ""
+
+#: ../includes/main.conf.php:248
+msgid "Simulate incoming call"
+msgstr ""
+
+#: ../includes/main.conf.php:289
+msgid "Email voicemail as attachment"
+msgstr ""
+
+#: ../includes/main.conf.php:290
+msgid "Say caller id in recording emailed"
+msgstr ""
+
+#: ../includes/main.conf.php:291
+msgid "Say envelop (date/time) in recording emailed"
+msgstr ""
+
+#: ../includes/main.conf.php:292
+msgid "Delete voicemail when emailed"
+msgstr ""
+
+#: ../includes/main.conf.php:293
+msgid "Play next message after deleting current message"
+msgstr ""
+
+#: ../includes/main.conf.php:294
+msgid "Ask caller to review their voicemail before sending"
+msgstr ""
+
+#: ../includes/main.conf.php:295
+msgid "Maximum time in seconds a voicemail will record"
+msgstr ""
+
+#: ../modules/callmonitor.module:37 ../modules/callmonitor.module:257
+msgid "Call Monitor"
+msgstr ""
+
+#: ../modules/callmonitor.module:132
+#, php-format
+msgid "Path is not a directory: %s"
+msgstr ""
+
+#: ../modules/callmonitor.module:141 ../modules/voicemail.module:301
+msgid "delete"
+msgstr ""
+
+#: ../modules/callmonitor.module:147
+msgid "duration"
+msgstr ""
+
+#: ../modules/callmonitor.module:150
+msgid "ignore"
+msgstr ""
+
+#: ../modules/callmonitor.module:159 ../modules/voicemail.module:322
+msgid "Date"
+msgstr ""
+
+#: ../modules/callmonitor.module:163 ../modules/voicemail.module:326
+msgid "Caller ID"
+msgstr ""
+
+#: ../modules/callmonitor.module:165
+msgid "Source"
+msgstr ""
+
+#: ../modules/callmonitor.module:167
+msgid "Destination"
+msgstr ""
+
+#: ../modules/callmonitor.module:169
+msgid "Context"
+msgstr ""
+
+#: ../modules/callmonitor.module:171 ../modules/voicemail.module:332
+msgid "Duration"
+msgstr ""
+
+#: ../modules/callmonitor.module:202
+msgid "Monitor"
+msgstr ""
+
+#: ../modules/callmonitor.module:222 ../modules/voicemail.module:373
+msgid "play"
+msgstr ""
+
+#: ../modules/callmonitor.module:259
+#, php-format
+msgid "Call Monitor for %s (%s)"
+msgstr ""
+
+#: ../modules/callmonitor.module:311 ../modules/voicemail.module:475
+msgid "select"
+msgstr ""
+
+#: ../modules/callmonitor.module:312 ../modules/voicemail.module:476
+msgid "all"
+msgstr ""
+
+#: ../modules/callmonitor.module:313 ../modules/voicemail.module:477
+msgid "none"
+msgstr ""
+
+#: ../modules/callmonitor.module:533
+msgid "Only deletes recording files, not cdr log"
+msgstr ""
+
+#: ../modules/conference.module:55
+msgid "My Conference room"
+msgstr ""
+
+#: ../modules/conference.module:78
+#, php-format
+msgid "Conference for %s (%s%s)"
+msgstr ""
+
+#: ../modules/help.module:39 ../modules/help.module:68
+msgid "Help"
+msgstr ""
+
+#: ../modules/help.module:70
+#, php-format
+msgid "Help for %s (%s)"
+msgstr ""
+
+#: ../modules/help.module:77
+msgid "Handset Feature Code"
+msgstr ""
+
+#: ../modules/help.module:80
+msgid "Action"
+msgstr ""
+
+#: ../modules/settings.module:61 ../modules/settings.module:667
+msgid "Settings"
+msgstr ""
+
+#: ../modules/settings.module:125
+msgid "Call forward number not changed"
+msgstr ""
+
+#: ../modules/settings.module:126
+#, php-format
+msgid ""
+"Number %s must contain dial numbers (characters like '(', '-', and ')' are "
+"ok)"
+msgstr ""
+
+#: ../modules/settings.module:151 ../modules/settings.module:156
+#: ../modules/settings.module:161 ../modules/settings.module:166
+#: ../modules/settings.module:176 ../modules/settings.module:181
+msgid "Voicemail password not changed"
+msgstr ""
+
+#: ../modules/settings.module:152
+msgid "Password and password confirm must not be blank"
+msgstr ""
+
+#: ../modules/settings.module:157
+#, php-format
+msgid "Passwords must be all numbers and greater than %d digits"
+msgstr ""
+
+#: ../modules/settings.module:162
+#, php-format
+msgid "Passwords must be all numbers and only %d digits"
+msgstr ""
+
+#: ../modules/settings.module:167
+msgid "Password and password confirm do not match"
+msgstr ""
+
+#: ../modules/settings.module:177 ../modules/settings.module:182
+#: ../modules/settings.module:234 ../modules/settings.module:239
+#, php-format
+msgid "%s does not exist or is not writable"
+msgstr ""
+
+#: ../modules/settings.module:223
+msgid "Voicemail email and pager address not changed"
+msgstr ""
+
+#: ../modules/settings.module:233 ../modules/settings.module:238
+msgid "Voicemail email settings not changed"
+msgstr ""
+
+#: ../modules/settings.module:385
+msgid "Language:"
+msgstr ""
+
+#: ../modules/settings.module:408
+msgid "Call Routing"
+msgstr ""
+
+#: ../modules/settings.module:411
+msgid "Call Forwarding:"
+msgstr ""
+
+#: ../modules/settings.module:419 ../modules/settings.module:507
+msgid "Enable"
+msgstr ""
+
+#: ../modules/settings.module:431
+#, php-format
+msgid "Passwords must be all numbers and only %s digits"
+msgstr ""
+
+#: ../modules/settings.module:434
+#, php-format
+msgid "Passwords must be all numbers and at least %s digits"
+msgstr ""
+
+#: ../modules/settings.module:439
+msgid "Voicemail Password:"
+msgstr ""
+
+#: ../modules/settings.module:445
+msgid "Enter again to confirm:"
+msgstr ""
+
+#: ../modules/settings.module:492
+msgid "Email Voicemail To:"
+msgstr ""
+
+#: ../modules/settings.module:498
+msgid "Pager Voicemail To:"
+msgstr ""
+
+#: ../modules/settings.module:558
+msgid "Audio Format:"
+msgstr ""
+
+#: ../modules/settings.module:561
+msgid "Best Quality"
+msgstr ""
+
+#: ../modules/settings.module:562
+msgid "Smallest Download"
+msgstr ""
+
+#: ../modules/settings.module:570
+msgid "Voicemail Settings"
+msgstr ""
+
+#: ../modules/settings.module:611
+msgid "Call Monitor Settings"
+msgstr ""
+
+#: ../modules/settings.module:614
+msgid "Record INCOMING:"
+msgstr ""
+
+#: ../modules/settings.module:616 ../modules/settings.module:624
+msgid "Always"
+msgstr ""
+
+#: ../modules/settings.module:617 ../modules/settings.module:625
+msgid "Never"
+msgstr ""
+
+#: ../modules/settings.module:618 ../modules/settings.module:626
+msgid "On-Demand"
+msgstr ""
+
+#: ../modules/settings.module:622
+msgid "Record OUTGOING:"
+msgstr ""
+
+#: ../modules/settings.module:669
+#, php-format
+msgid "Settings for %s (%s)"
+msgstr ""
+
+#: ../modules/settings.module:705
+msgid "Update"
+msgstr ""
+
+#: ../modules/voicemail.module:45
+msgid "Voicemail"
+msgstr ""
+
+#: ../modules/voicemail.module:164
+msgid "A folder must be selected before the message can be moved."
+msgstr ""
+
+#: ../modules/voicemail.module:178
+msgid "An extension must be selected before the message can be forwarded."
+msgstr ""
+
+#: ../modules/voicemail.module:304
+msgid "move_to"
+msgstr ""
+
+#: ../modules/voicemail.module:307
+msgid "Folder"
+msgstr ""
+
+#: ../modules/voicemail.module:311
+msgid "forward_to"
+msgstr ""
+
+#: ../modules/voicemail.module:328
+msgid "Priority"
+msgstr ""
+
+#: ../modules/voicemail.module:330
+msgid "Orig Mailbox"
+msgstr ""
+
+#: ../modules/voicemail.module:362
+msgid "Message"
+msgstr ""
+
+#: ../modules/voicemail.module:377
+msgid "Voicemail recording(s) was not found."
+msgstr ""
+
+#: ../modules/voicemail.module:378
+#, php-format
+msgid ""
+"On settings page, change voicemail audio format. It is currently set to %s"
+msgstr ""
+
+#: ../modules/voicemail.module:405
+msgid "Voicemail Login not found."
+msgstr ""
+
+#: ../modules/voicemail.module:406
+msgid "No access to voicemail"
+msgstr ""
+
+#: ../modules/voicemail.module:412
+msgid "No Voicemail Recordings for Admin"
+msgstr ""
+
+#: ../modules/voicemail.module:428
+#, php-format
+msgid "Voicemail for %s (%s)"
+msgstr ""
+
+#: ../modules/voicemail.module:678
+#, php-format
+msgid "Could not create mailbox folder %s on the server"
+msgstr ""
+
+#: ../modules/voicemail.module:718
+#, php-format
+msgid "Permission denied on folder %s or %s"
+msgstr ""
+
+#: ../misc/recording_popup.php:39
+msgid "download"
+msgstr ""
diff --git a/fs_selfservice/fri/locale/ari.utf-8.po b/fs_selfservice/fri/locale/ari.utf-8.po
new file mode 100644
index 0000000..aff5a75
--- /dev/null
+++ b/fs_selfservice/fri/locale/ari.utf-8.po
@@ -0,0 +1,590 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-05-03 08:32-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../includes/asi.php:46
+msgid "Asterisk Call Manager not responding"
+msgstr ""
+
+#: ../includes/asi.php:54
+msgid "Asterisk authentication failed:"
+msgstr ""
+
+#: ../includes/asi.php:96 ../includes/asi.php:111
+msgid "Asterisk command not understood"
+msgstr ""
+
+#: ../includes/bootstrap.php:123
+#, php-format
+msgid "To many directories in %s Not all files processed"
+msgstr ""
+
+#: ../includes/bootstrap.php:226
+msgid "ARI requires a version of PHP 4.3 or later"
+msgstr ""
+
+#: ../includes/bootstrap.php:245
+msgid ""
+"PHP PEAR must be installed. Visit http://pear.php.net for help with "
+"installation."
+msgstr ""
+
+#: ../includes/common.php:173
+msgid "ARI does not appear to have access to the Asterisk Manager."
+msgstr ""
+
+#: ../includes/common.php:174
+msgid ""
+"Check the ARI 'main.conf.php' configuration file to set the Asterisk Manager "
+"Account."
+msgstr ""
+
+#: ../includes/common.php:175
+msgid "Check /etc/asterisk/manager.conf for a proper Asterisk Manager Account"
+msgstr ""
+
+#: ../includes/common.php:176
+msgid ""
+"make sure [general] enabled = yes and a 'permit=' line for localhost or the "
+"webserver."
+msgstr ""
+
+#: ../includes/common.php:193 ../includes/common.php:208
+msgid "Check AMP installation, asterisk, and ARI main.conf"
+msgstr ""
+
+#: ../includes/common.php:344
+msgid "Logout"
+msgstr ""
+
+#: ../includes/common.php:349
+msgid "Page Not Found."
+msgstr ""
+
+#: ../includes/display.php:92
+msgid "Search"
+msgstr ""
+
+#: ../includes/display.php:135
+msgid "Searched for"
+msgstr ""
+
+#: ../includes/display.php:139
+#, php-format
+msgid "Results %d - %d of %d"
+msgstr ""
+
+#: ../includes/display.php:141
+#, php-format
+msgid "Results %d"
+msgstr ""
+
+#: ../includes/display.php:195
+msgid "First"
+msgstr ""
+
+#: ../includes/display.php:208
+msgid "Last"
+msgstr ""
+
+#: ../includes/login.php:267
+msgid "Incorrect Password"
+msgstr ""
+
+#: ../includes/login.php:279
+msgid "Incorrect Username or Password"
+msgstr ""
+
+#: ../includes/login.php:402 ../includes/login.php:411
+msgid "Login"
+msgstr ""
+
+#: ../includes/login.php:419
+msgid "Password"
+msgstr ""
+
+#: ../includes/login.php:428
+msgid "Submit"
+msgstr ""
+
+#: ../includes/login.php:436
+msgid "Remember Password"
+msgstr ""
+
+#: ../includes/login.php:451
+msgid "Use your <b>Voicemail Mailbox and Password</b>"
+msgstr ""
+
+#: ../includes/login.php:452
+msgid "This is the same password used for the phone"
+msgstr ""
+
+#: ../includes/login.php:454
+msgid ""
+"For password maintenance or assistance, contact your Phone System "
+"Administrator."
+msgstr ""
+
+#: ../includes/main.conf.php:152
+msgid "INBOX"
+msgstr ""
+
+#: ../includes/main.conf.php:154
+msgid "Family"
+msgstr ""
+
+#: ../includes/main.conf.php:156
+msgid "Friends"
+msgstr ""
+
+#: ../includes/main.conf.php:158
+msgid "Old"
+msgstr ""
+
+#: ../includes/main.conf.php:160
+msgid "Work"
+msgstr ""
+
+#: ../includes/main.conf.php:229
+msgid "Directory"
+msgstr ""
+
+#: ../includes/main.conf.php:230
+msgid "Echo Test"
+msgstr ""
+
+#: ../includes/main.conf.php:231 ../modules/callmonitor.module:161
+#: ../modules/voicemail.module:324
+msgid "Time"
+msgstr ""
+
+#: ../includes/main.conf.php:232
+msgid "Weather"
+msgstr ""
+
+#: ../includes/main.conf.php:233
+msgid "Schedule wakeup call"
+msgstr ""
+
+#: ../includes/main.conf.php:234
+msgid "festival test (your extension is XXX)"
+msgstr ""
+
+#: ../includes/main.conf.php:235
+msgid "Activate Call Waiting (deactivated by default)"
+msgstr ""
+
+#: ../includes/main.conf.php:236
+msgid "Deactivate Call Waiting"
+msgstr ""
+
+#: ../includes/main.conf.php:237
+msgid "Call Forwarding System"
+msgstr ""
+
+#: ../includes/main.conf.php:238
+msgid "Disable Call Forwarding"
+msgstr ""
+
+#: ../includes/main.conf.php:239
+msgid "IVR Recording"
+msgstr ""
+
+#: ../includes/main.conf.php:240
+msgid "Enable Do-Not-Disturb"
+msgstr ""
+
+#: ../includes/main.conf.php:241
+msgid "Disable Do-Not-Disturb"
+msgstr ""
+
+#: ../includes/main.conf.php:242
+msgid "Call Forward on Busy"
+msgstr ""
+
+#: ../includes/main.conf.php:243
+msgid "Disable Call Forward on Busy"
+msgstr ""
+
+#: ../includes/main.conf.php:244
+msgid "Message Center (does not ask for extension)"
+msgstr ""
+
+#: ../includes/main.conf.php:245
+msgid "Enter Message Center"
+msgstr ""
+
+#: ../includes/main.conf.php:246
+msgid "Playback IVR Recording"
+msgstr ""
+
+#: ../includes/main.conf.php:247
+msgid "Test Fax"
+msgstr ""
+
+#: ../includes/main.conf.php:248
+msgid "Simulate incoming call"
+msgstr ""
+
+#: ../includes/main.conf.php:289
+msgid "Email voicemail as attachment"
+msgstr ""
+
+#: ../includes/main.conf.php:290
+msgid "Say caller id in recording emailed"
+msgstr ""
+
+#: ../includes/main.conf.php:291
+msgid "Say envelop (date/time) in recording emailed"
+msgstr ""
+
+#: ../includes/main.conf.php:292
+msgid "Delete voicemail when emailed"
+msgstr ""
+
+#: ../includes/main.conf.php:293
+msgid "Play next message after deleting current message"
+msgstr ""
+
+#: ../includes/main.conf.php:294
+msgid "Ask caller to review their voicemail before sending"
+msgstr ""
+
+#: ../includes/main.conf.php:295
+msgid "Maximum time in seconds a voicemail will record"
+msgstr ""
+
+#: ../modules/callmonitor.module:37 ../modules/callmonitor.module:257
+msgid "Call Monitor"
+msgstr ""
+
+#: ../modules/callmonitor.module:132
+#, php-format
+msgid "Path is not a directory: %s"
+msgstr ""
+
+#: ../modules/callmonitor.module:141 ../modules/voicemail.module:301
+msgid "delete"
+msgstr ""
+
+#: ../modules/callmonitor.module:147
+msgid "duration"
+msgstr ""
+
+#: ../modules/callmonitor.module:150
+msgid "ignore"
+msgstr ""
+
+#: ../modules/callmonitor.module:159 ../modules/voicemail.module:322
+msgid "Date"
+msgstr ""
+
+#: ../modules/callmonitor.module:163 ../modules/voicemail.module:326
+msgid "Caller ID"
+msgstr ""
+
+#: ../modules/callmonitor.module:165
+msgid "Source"
+msgstr ""
+
+#: ../modules/callmonitor.module:167
+msgid "Destination"
+msgstr ""
+
+#: ../modules/callmonitor.module:169
+msgid "Context"
+msgstr ""
+
+#: ../modules/callmonitor.module:171 ../modules/voicemail.module:332
+msgid "Duration"
+msgstr ""
+
+#: ../modules/callmonitor.module:202
+msgid "Monitor"
+msgstr ""
+
+#: ../modules/callmonitor.module:222 ../modules/voicemail.module:373
+msgid "play"
+msgstr ""
+
+#: ../modules/callmonitor.module:259
+#, php-format
+msgid "Call Monitor for %s (%s)"
+msgstr ""
+
+#: ../modules/callmonitor.module:311 ../modules/voicemail.module:475
+msgid "select"
+msgstr ""
+
+#: ../modules/callmonitor.module:312 ../modules/voicemail.module:476
+msgid "all"
+msgstr ""
+
+#: ../modules/callmonitor.module:313 ../modules/voicemail.module:477
+msgid "none"
+msgstr ""
+
+#: ../modules/callmonitor.module:533
+msgid "Only deletes recording files, not cdr log"
+msgstr ""
+
+#: ../modules/conference.module:55
+msgid "My Conference room"
+msgstr ""
+
+#: ../modules/conference.module:78
+#, php-format
+msgid "Conference for %s (%s%s)"
+msgstr ""
+
+#: ../modules/help.module:39 ../modules/help.module:68
+msgid "Help"
+msgstr ""
+
+#: ../modules/help.module:70
+#, php-format
+msgid "Help for %s (%s)"
+msgstr ""
+
+#: ../modules/help.module:77
+msgid "Handset Feature Code"
+msgstr ""
+
+#: ../modules/help.module:80
+msgid "Action"
+msgstr ""
+
+#: ../modules/settings.module:61 ../modules/settings.module:667
+msgid "Settings"
+msgstr ""
+
+#: ../modules/settings.module:125
+msgid "Call forward number not changed"
+msgstr ""
+
+#: ../modules/settings.module:126
+#, php-format
+msgid ""
+"Number %s must contain dial numbers (characters like '(', '-', and ')' are "
+"ok)"
+msgstr ""
+
+#: ../modules/settings.module:151 ../modules/settings.module:156
+#: ../modules/settings.module:161 ../modules/settings.module:166
+#: ../modules/settings.module:176 ../modules/settings.module:181
+msgid "Voicemail password not changed"
+msgstr ""
+
+#: ../modules/settings.module:152
+msgid "Password and password confirm must not be blank"
+msgstr ""
+
+#: ../modules/settings.module:157
+#, php-format
+msgid "Passwords must be all numbers and greater than %d digits"
+msgstr ""
+
+#: ../modules/settings.module:162
+#, php-format
+msgid "Passwords must be all numbers and only %d digits"
+msgstr ""
+
+#: ../modules/settings.module:167
+msgid "Password and password confirm do not match"
+msgstr ""
+
+#: ../modules/settings.module:177 ../modules/settings.module:182
+#: ../modules/settings.module:234 ../modules/settings.module:239
+#, php-format
+msgid "%s does not exist or is not writable"
+msgstr ""
+
+#: ../modules/settings.module:223
+msgid "Voicemail email and pager address not changed"
+msgstr ""
+
+#: ../modules/settings.module:233 ../modules/settings.module:238
+msgid "Voicemail email settings not changed"
+msgstr ""
+
+#: ../modules/settings.module:385
+msgid "Language:"
+msgstr ""
+
+#: ../modules/settings.module:408
+msgid "Call Routing"
+msgstr ""
+
+#: ../modules/settings.module:411
+msgid "Call Forwarding:"
+msgstr ""
+
+#: ../modules/settings.module:419 ../modules/settings.module:507
+msgid "Enable"
+msgstr ""
+
+#: ../modules/settings.module:431
+#, php-format
+msgid "Passwords must be all numbers and only %s digits"
+msgstr ""
+
+#: ../modules/settings.module:434
+#, php-format
+msgid "Passwords must be all numbers and at least %s digits"
+msgstr ""
+
+#: ../modules/settings.module:439
+msgid "Voicemail Password:"
+msgstr ""
+
+#: ../modules/settings.module:445
+msgid "Enter again to confirm:"
+msgstr ""
+
+#: ../modules/settings.module:492
+msgid "Email Voicemail To:"
+msgstr ""
+
+#: ../modules/settings.module:498
+msgid "Pager Voicemail To:"
+msgstr ""
+
+#: ../modules/settings.module:558
+msgid "Audio Format:"
+msgstr ""
+
+#: ../modules/settings.module:561
+msgid "Best Quality"
+msgstr ""
+
+#: ../modules/settings.module:562
+msgid "Smallest Download"
+msgstr ""
+
+#: ../modules/settings.module:570
+msgid "Voicemail Settings"
+msgstr ""
+
+#: ../modules/settings.module:611
+msgid "Call Monitor Settings"
+msgstr ""
+
+#: ../modules/settings.module:614
+msgid "Record INCOMING:"
+msgstr ""
+
+#: ../modules/settings.module:616 ../modules/settings.module:624
+msgid "Always"
+msgstr ""
+
+#: ../modules/settings.module:617 ../modules/settings.module:625
+msgid "Never"
+msgstr ""
+
+#: ../modules/settings.module:618 ../modules/settings.module:626
+msgid "On-Demand"
+msgstr ""
+
+#: ../modules/settings.module:622
+msgid "Record OUTGOING:"
+msgstr ""
+
+#: ../modules/settings.module:669
+#, php-format
+msgid "Settings for %s (%s)"
+msgstr ""
+
+#: ../modules/settings.module:705
+msgid "Update"
+msgstr ""
+
+#: ../modules/voicemail.module:45
+msgid "Voicemail"
+msgstr ""
+
+#: ../modules/voicemail.module:164
+msgid "A folder must be selected before the message can be moved."
+msgstr ""
+
+#: ../modules/voicemail.module:178
+msgid "An extension must be selected before the message can be forwarded."
+msgstr ""
+
+#: ../modules/voicemail.module:304
+msgid "move_to"
+msgstr ""
+
+#: ../modules/voicemail.module:307
+msgid "Folder"
+msgstr ""
+
+#: ../modules/voicemail.module:311
+msgid "forward_to"
+msgstr ""
+
+#: ../modules/voicemail.module:328
+msgid "Priority"
+msgstr ""
+
+#: ../modules/voicemail.module:330
+msgid "Orig Mailbox"
+msgstr ""
+
+#: ../modules/voicemail.module:362
+msgid "Message"
+msgstr ""
+
+#: ../modules/voicemail.module:377
+msgid "Voicemail recording(s) was not found."
+msgstr ""
+
+#: ../modules/voicemail.module:378
+#, php-format
+msgid ""
+"On settings page, change voicemail audio format. It is currently set to %s"
+msgstr ""
+
+#: ../modules/voicemail.module:405
+msgid "Voicemail Login not found."
+msgstr ""
+
+#: ../modules/voicemail.module:406
+msgid "No access to voicemail"
+msgstr ""
+
+#: ../modules/voicemail.module:412
+msgid "No Voicemail Recordings for Admin"
+msgstr ""
+
+#: ../modules/voicemail.module:428
+#, php-format
+msgid "Voicemail for %s (%s)"
+msgstr ""
+
+#: ../modules/voicemail.module:678
+#, php-format
+msgid "Could not create mailbox folder %s on the server"
+msgstr ""
+
+#: ../modules/voicemail.module:718
+#, php-format
+msgid "Permission denied on folder %s or %s"
+msgstr ""
+
+#: ../misc/recording_popup.php:39
+msgid "download"
+msgstr ""
diff --git a/fs_selfservice/fri/locale/de_DE/LC_MESSAGES/ari.mo b/fs_selfservice/fri/locale/de_DE/LC_MESSAGES/ari.mo
new file mode 100644
index 0000000..b94eba2
--- /dev/null
+++ b/fs_selfservice/fri/locale/de_DE/LC_MESSAGES/ari.mo
Binary files differ
diff --git a/fs_selfservice/fri/locale/de_DE/LC_MESSAGES/ari.po b/fs_selfservice/fri/locale/de_DE/LC_MESSAGES/ari.po
new file mode 100644
index 0000000..b89b612
--- /dev/null
+++ b/fs_selfservice/fri/locale/de_DE/LC_MESSAGES/ari.po
@@ -0,0 +1,631 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2005 AsteriskPBX.de
+# This file is distributed under the same license as the PACKAGE package.
+# Till Stoemer <ts@AsteriskPBX.de>, 2005.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ari-de\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-04-03 08:26-0400\n"
+"PO-Revision-Date: 2005-12-10 19:50+0100\n"
+"Last-Translator: Till Stoermer <ts@AsteriskPBX.de>\n"
+"Language-Team: German <ts@AsteriskPBX.de>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../includes/asi.php:48
+msgid "Asterisk Call Manager not responding"
+msgstr "Der Asterisk Call-Manager reagiert nicht."
+
+#: ../includes/asi.php:56
+msgid "Asterisk authentication failed:"
+msgstr "Anmeldung am Asterisk gescheitert."
+
+#: ../includes/asi.php:98 ../includes/asi.php:112
+#, fuzzy
+msgid "Asterisk command not understood"
+msgstr "Asterisk reload command not understood"
+
+#: ../includes/bootstrap.php:106
+#, php-format
+msgid "To many directories in %s Not all files processed"
+msgstr ""
+
+#: ../includes/bootstrap.php:209
+msgid "ARI requires a version of PHP 4.0 or later"
+msgstr ""
+
+#: ../includes/bootstrap.php:228
+msgid ""
+"PHP PEAR must be installed. Visit http://pear.php.net for help with "
+"installation."
+msgstr ""
+
+#: ../includes/common.php:167
+#, fuzzy
+msgid "ARI does not appear to have access to the Asterisk Manager."
+msgstr "Kann nicht zum Asterisk-Manager verbinden"
+
+#: ../includes/common.php:168
+msgid ""
+"Check the ARI 'main.conf' configuration file to set the Asterisk Manager "
+"Account."
+msgstr ""
+
+#: ../includes/common.php:169
+msgid "Check /etc/asterisk/manager.conf for a proper Asterisk Manager Account"
+msgstr ""
+
+#: ../includes/common.php:170
+msgid ""
+"make sure [general] enabled = yes and a 'permit=' line for localhost or the "
+"webserver."
+msgstr ""
+
+#: ../includes/common.php:187 ../includes/common.php:202
+#, fuzzy
+msgid "Check AMP installation, asterisk, and ARI main.conf"
+msgstr ""
+"&Uuml;berpr&uuml;fe die AMP-Installation, Asterisk-Datenbank, oder die ARI "
+"main.conf"
+
+#: ../includes/common.php:332
+msgid "Logout"
+msgstr "Abmelden"
+
+#: ../includes/common.php:337
+msgid "Page Not Found."
+msgstr "Seite nicht gefunden"
+
+#: ../includes/display.php:92
+msgid "Search"
+msgstr "Suchen"
+
+#: ../includes/display.php:135
+msgid "Searched for"
+msgstr "Suchen nach"
+
+#: ../includes/display.php:139
+#, fuzzy, php-format
+msgid "Results %d of %d"
+msgstr "Ergebnis"
+
+#: ../includes/display.php:141
+#, fuzzy, php-format
+msgid "Results %d"
+msgstr "Ergebnis"
+
+#: ../includes/display.php:195
+msgid "First"
+msgstr "Erste"
+
+#: ../includes/display.php:208
+msgid "Last"
+msgstr "Letzte"
+
+#: ../includes/login.php:239
+#, fuzzy
+msgid "Voicemail Login not found."
+msgstr "Vicemail-Login nicht gefunden"
+
+#: ../includes/login.php:240
+msgid "No access to voicemail"
+msgstr "Kein Zugriff auf Voicemail"
+
+#: ../includes/login.php:266
+msgid "Incorrect Password"
+msgstr "Falsches Passwort"
+
+#: ../includes/login.php:278
+msgid "Incorrect Username or Password"
+msgstr "Falscher Benutzer oder Passwort"
+
+#: ../includes/login.php:381 ../includes/login.php:391
+msgid "Login"
+msgstr "Anmeldung"
+
+#: ../includes/login.php:399
+msgid "Password"
+msgstr "Passwort"
+
+#: ../includes/login.php:408
+msgid "Submit"
+msgstr "Anmelden"
+
+#: ../includes/login.php:416
+msgid "Remember Password"
+msgstr "Passwort merken"
+
+#: ../includes/login.php:431
+#, fuzzy
+msgid "Use your <b>Voicemail Mailbox and Password</b>"
+msgstr "Voicemail Mailbox und Password"
+
+#: ../includes/login.php:432
+msgid "This is the same password used for the phone"
+msgstr "Dieses ist das selbe Passwort, das beim Telefon genutzt wird."
+
+#: ../includes/login.php:434
+msgid ""
+"For password maintenance or assistance, contact your Phone System "
+"Administrator."
+msgstr ""
+"F&uuml;r Passwort-&Auml;nderungen, kontaktieren Sie Ihren Voicemail-Admin"
+
+#: ../includes/main.conf.php:152
+msgid "INBOX"
+msgstr "Eingang"
+
+#: ../includes/main.conf.php:154
+msgid "Family"
+msgstr "Familie"
+
+#: ../includes/main.conf.php:156
+msgid "Friends"
+msgstr "Freunde"
+
+#: ../includes/main.conf.php:158
+msgid "Old"
+msgstr "Alt"
+
+#: ../includes/main.conf.php:160
+msgid "Work"
+msgstr "Arbeit"
+
+#: ../includes/main.conf.php:213
+msgid "Directory"
+msgstr ""
+
+#: ../includes/main.conf.php:214
+msgid "Echo Test"
+msgstr ""
+
+#: ../includes/main.conf.php:215 ../modules/callmonitor.module:161
+#: ../modules/voicemail.module:326
+msgid "Time"
+msgstr "Uhrzeit"
+
+#: ../includes/main.conf.php:216
+msgid "Weather"
+msgstr ""
+
+#: ../includes/main.conf.php:217
+msgid "Schedule wakeup call"
+msgstr ""
+
+#: ../includes/main.conf.php:218
+msgid "festival test (your extension is XXX)"
+msgstr ""
+
+#: ../includes/main.conf.php:219
+msgid "Activate Call Waiting (deactivated by default)"
+msgstr ""
+
+#: ../includes/main.conf.php:220
+msgid "Deactivate Call Waiting"
+msgstr ""
+
+#: ../includes/main.conf.php:221
+msgid "Call Forwarding System"
+msgstr ""
+
+#: ../includes/main.conf.php:222
+msgid "Disable Call Forwarding"
+msgstr ""
+
+#: ../includes/main.conf.php:223
+#, fuzzy
+msgid "IVR Recording"
+msgstr "Aufnahmen"
+
+#: ../includes/main.conf.php:224
+msgid "Enable Do-Not-Disturb"
+msgstr ""
+
+#: ../includes/main.conf.php:225
+msgid "Disable Do-Not-Disturb"
+msgstr ""
+
+#: ../includes/main.conf.php:226
+msgid "Call Forward on Busy"
+msgstr ""
+
+#: ../includes/main.conf.php:227
+msgid "Disable Call Forward on Busy"
+msgstr ""
+
+#: ../includes/main.conf.php:228
+msgid "Message Center (does no ask for extension)"
+msgstr ""
+
+#: ../includes/main.conf.php:229
+msgid "Enter Message Center"
+msgstr ""
+
+#: ../includes/main.conf.php:230
+msgid "Playback IVR Recording"
+msgstr ""
+
+#: ../includes/main.conf.php:231
+msgid "Test Fax"
+msgstr ""
+
+#: ../includes/main.conf.php:232
+msgid "Simulate incoming call"
+msgstr ""
+
+#: ../includes/main.conf.php:273
+msgid "Email voicemail as attachment"
+msgstr ""
+
+#: ../includes/main.conf.php:274
+msgid "Say caller id in recording emailed"
+msgstr ""
+
+#: ../includes/main.conf.php:275
+msgid "Say envelop (date/time) in recording emailed"
+msgstr ""
+
+#: ../includes/main.conf.php:276
+msgid "Delete voicemail when emailed"
+msgstr ""
+
+#: ../includes/main.conf.php:277
+msgid "Play next message after deleting current message"
+msgstr ""
+
+#: ../includes/main.conf.php:278
+msgid "Ask caller to review their voicemail before sending"
+msgstr ""
+
+#: ../includes/main.conf.php:279
+msgid "Maximum time in seconds a voicemail will record"
+msgstr ""
+
+#: ../modules/callmonitor.module:37 ../modules/callmonitor.module:257
+msgid "Call Monitor"
+msgstr "Anrufliste"
+
+#: ../modules/callmonitor.module:132 ../modules/voicemail.module:117
+#, php-format
+msgid "Path is not a directory: %s"
+msgstr ""
+
+#: ../modules/callmonitor.module:141 ../modules/voicemail.module:303
+#, fuzzy
+msgid "delete"
+msgstr "Ausw&auml;hlen"
+
+#: ../modules/callmonitor.module:147
+#, fuzzy
+msgid "duration"
+msgstr "Dauer"
+
+#: ../modules/callmonitor.module:150
+#, fuzzy
+msgid "ignore"
+msgstr "Keine"
+
+#: ../modules/callmonitor.module:159 ../modules/voicemail.module:324
+msgid "Date"
+msgstr "Datum"
+
+#: ../modules/callmonitor.module:163 ../modules/voicemail.module:328
+msgid "Caller ID"
+msgstr "Anrufer-Nummer"
+
+#: ../modules/callmonitor.module:165
+msgid "Source"
+msgstr "Anrufer"
+
+#: ../modules/callmonitor.module:167
+msgid "Destination"
+msgstr "Angerufener"
+
+#: ../modules/callmonitor.module:169
+msgid "Context"
+msgstr "Kontext"
+
+#: ../modules/callmonitor.module:171 ../modules/voicemail.module:334
+msgid "Duration"
+msgstr "Dauer"
+
+#: ../modules/callmonitor.module:202
+msgid "Monitor"
+msgstr "Monitor"
+
+#: ../modules/callmonitor.module:222 ../modules/voicemail.module:375
+msgid "play"
+msgstr "Abspielen"
+
+#: ../modules/callmonitor.module:259
+#, fuzzy, php-format
+msgid "Call Monitor for %s (%s)"
+msgstr "Anrufliste"
+
+#: ../modules/callmonitor.module:311 ../modules/voicemail.module:459
+msgid "select"
+msgstr "Ausw&auml;hlen"
+
+#: ../modules/callmonitor.module:312 ../modules/voicemail.module:460
+msgid "all"
+msgstr "Alle"
+
+#: ../modules/callmonitor.module:313 ../modules/voicemail.module:461
+msgid "none"
+msgstr "Keine"
+
+#: ../modules/callmonitor.module:543
+msgid "Only deletes recording files, not cdr log"
+msgstr "Nur die Aufnahme-Datei wird gel&ouml;scht (In der CDR nicht)"
+
+#: ../modules/help.module:39 ../modules/help.module:68
+msgid "Help"
+msgstr ""
+
+#: ../modules/help.module:70
+#, php-format
+msgid "Help for %s (%s)"
+msgstr ""
+
+#: ../modules/help.module:77
+msgid "Handset Feature Code"
+msgstr ""
+
+#: ../modules/help.module:80
+msgid "Action"
+msgstr ""
+
+#: ../modules/settings.module:61 ../modules/settings.module:647
+msgid "Settings"
+msgstr "Einstellungen"
+
+#: ../modules/settings.module:122
+msgid "Call forward number not changed"
+msgstr ""
+
+#: ../modules/settings.module:123
+#, php-format
+msgid ""
+"Number %s must contain dial numbers (characters like '(', '-', and ')' are "
+"ok)"
+msgstr ""
+
+#: ../modules/settings.module:143 ../modules/settings.module:148
+#: ../modules/settings.module:153 ../modules/settings.module:158
+#: ../modules/settings.module:168 ../modules/settings.module:173
+msgid "Voicemail password not changed"
+msgstr "Voicemail-Passwort nicht ge&auml;ndert"
+
+#: ../modules/settings.module:144
+msgid "Password and password confirm must not be blank"
+msgstr "Passwort und Passwort-Wiederholen-Feld darf nicht leer sein"
+
+#: ../modules/settings.module:149
+#, fuzzy, php-format
+msgid "Passwords must be all numbers and greater than %d digits"
+msgstr "Das Passwort muss aus mindestens 4 Ziffern bestehen."
+
+#: ../modules/settings.module:154
+#, fuzzy, php-format
+msgid "Passwords must be all numbers and only %d digits"
+msgstr "Das Passwort muss aus mindestens 4 Ziffern bestehen."
+
+#: ../modules/settings.module:159
+msgid "Password and password confirm do not match"
+msgstr "Die Passwort stimmen nicht &uuml;berein."
+
+#: ../modules/settings.module:169 ../modules/settings.module:174
+#: ../modules/settings.module:226 ../modules/settings.module:231
+#, fuzzy, php-format
+msgid "%s does not exist or is not writable"
+msgstr "existiert nicht, oder ist nicht lesbar."
+
+#: ../modules/settings.module:215
+#, fuzzy
+msgid "Voicemail email and pager address not changed"
+msgstr "Voicemail-Passwort nicht ge&auml;ndert"
+
+#: ../modules/settings.module:225 ../modules/settings.module:230
+#, fuzzy
+msgid "Voicemail email settings not changed"
+msgstr "Voicemail-Passwort nicht ge&auml;ndert"
+
+#: ../modules/settings.module:375
+msgid "Language:"
+msgstr "Sprache"
+
+#: ../modules/settings.module:396
+#, fuzzy
+msgid "Call Routing"
+msgstr "Call Monitor Einstellungen"
+
+#: ../modules/settings.module:399
+msgid "Call Forwarding:"
+msgstr ""
+
+#: ../modules/settings.module:407 ../modules/settings.module:486
+#, fuzzy
+msgid "Enable"
+msgstr "in Tabelle"
+
+#: ../modules/settings.module:418
+msgid "Voicemail Password:"
+msgstr "Voicemail-Passwort"
+
+#: ../modules/settings.module:424
+msgid "Enter again to confirm:"
+msgstr "Erneute Eingabe zum best&auml;tigen"
+
+#: ../modules/settings.module:430
+#, fuzzy, php-format
+msgid "Passwords must be all numbers and only %s digits"
+msgstr "Das Passwort muss aus mindestens 4 Ziffern bestehen."
+
+#: ../modules/settings.module:471
+#, fuzzy
+msgid "Email Voicemail To:"
+msgstr "Voicemail"
+
+#: ../modules/settings.module:477
+#, fuzzy
+msgid "Pager Voicemail To:"
+msgstr "Voicemail"
+
+#: ../modules/settings.module:539
+msgid "Audio Format:"
+msgstr "Audio-Format"
+
+#: ../modules/settings.module:542
+msgid "Best Quality"
+msgstr "Beste Qualit&auml;t"
+
+#: ../modules/settings.module:543
+msgid "Smallest Download"
+msgstr "F&uuml;r geringen Download"
+
+#: ../modules/settings.module:551
+msgid "Voicemail Settings"
+msgstr "Voicemail-Einstellungen"
+
+#: ../modules/settings.module:591
+msgid "Call Monitor Settings"
+msgstr "Call Monitor Einstellungen"
+
+#: ../modules/settings.module:594
+msgid "Record INCOMING:"
+msgstr "Aufnahme eingehender Telefonate:"
+
+#: ../modules/settings.module:596 ../modules/settings.module:604
+msgid "Always"
+msgstr "Immer"
+
+#: ../modules/settings.module:597 ../modules/settings.module:605
+msgid "Never"
+msgstr "Nie"
+
+#: ../modules/settings.module:598 ../modules/settings.module:606
+msgid "On-Demand"
+msgstr "Bei Bedarf"
+
+#: ../modules/settings.module:602
+msgid "Record OUTGOING:"
+msgstr "Aufnahme abgehende Telefonate"
+
+#: ../modules/settings.module:649
+#, fuzzy, php-format
+msgid "Settings for %s (%s)"
+msgstr "Einstellungen f&uuml;r"
+
+#: ../modules/settings.module:685
+msgid "Update"
+msgstr "Erneuern"
+
+#: ../modules/voicemail.module:45
+msgid "Voicemail"
+msgstr "Voicemail"
+
+#: ../modules/voicemail.module:161
+msgid "A folder must be selected before the message can be moved."
+msgstr ""
+"Ein Ordner muss gew&auml;hlt werden, bevor die Nachricht verschoben werden "
+"kann."
+
+#: ../modules/voicemail.module:175
+msgid "An extension must be selected before the message can be forwarded."
+msgstr ""
+"Ein Anschluss muss gew&auml;hlt werden, bevor die Nachricht weitergeleitet "
+"werden kann."
+
+#: ../modules/voicemail.module:239
+msgid "No Voicemail Recordings for Admin"
+msgstr "No Voicemail Recordings for Admin"
+
+#: ../modules/voicemail.module:306
+msgid "move_to"
+msgstr ""
+
+#: ../modules/voicemail.module:309
+msgid "Folder"
+msgstr "Ordner"
+
+#: ../modules/voicemail.module:313
+msgid "forward_to"
+msgstr ""
+
+#: ../modules/voicemail.module:330
+msgid "Priority"
+msgstr "Prirorit&auml;t"
+
+#: ../modules/voicemail.module:332
+msgid "Orig Mailbox"
+msgstr "Orig Mailbox"
+
+#: ../modules/voicemail.module:364
+msgid "Message"
+msgstr ""
+
+#: ../modules/voicemail.module:379
+msgid "Voicemail recording(s) was not found."
+msgstr "Sprachnachricht(en) nicht gefunden"
+
+#: ../modules/voicemail.module:380
+#, php-format
+msgid ""
+"On settings page, change voicemail audio format. It is currently set to %s"
+msgstr ""
+
+#: ../modules/voicemail.module:412
+#, fuzzy, php-format
+msgid "Voicemail for %s (%s)"
+msgstr "Voicemail"
+
+#: ../modules/voicemail.module:662
+#, fuzzy, php-format
+msgid "Could not create mailbox folder %s on the server"
+msgstr "Konnte Mailbox-Ordner nicht erstellen"
+
+#: ../modules/voicemail.module:702
+#, fuzzy, php-format
+msgid "Permission denied on folder %s or %s"
+msgstr "Zugriff verweigert auf Ordner"
+
+#: ../misc/recording_popup.php:39
+msgid "download"
+msgstr "Download"
+
+#~ msgid "not a directory or not readable"
+#~ msgstr "Kein Verzeichnis, oder nicht lesbar"
+
+#~ msgid "No database connection"
+#~ msgstr "Keine Verbindung zur Datenbank"
+
+#~ msgid "of"
+#~ msgstr "von"
+
+#~ msgid "Login used"
+#~ msgstr "Login genutzt"
+
+#~ msgid "Use your"
+#~ msgstr "Nutze Deine"
+
+#~ msgid "for"
+#~ msgstr "f&uuml;r"
+
+#~ msgid "Password must be all numbers and 4 digits"
+#~ msgstr "Das Passwort muss aus mindestens 4 Ziffern bestehen."
+
+#~ msgid "Check voicemail audio format on settings page to change from"
+#~ msgstr "Check voicemail audio format on settings page to change from"
+
+#~ msgid "Searching of voicemail is not yet implemented"
+#~ msgstr "Searching of voicemail is not yet implemented"
+
+#~ msgid "on the server"
+#~ msgstr "auf dem Server"
+
+#~ msgid "Folders"
+#~ msgstr "Ordner"
diff --git a/fs_selfservice/fri/locale/el_GR/LC_MESSAGES/ari.mo b/fs_selfservice/fri/locale/el_GR/LC_MESSAGES/ari.mo
new file mode 100644
index 0000000..6b00b14
--- /dev/null
+++ b/fs_selfservice/fri/locale/el_GR/LC_MESSAGES/ari.mo
Binary files differ
diff --git a/fs_selfservice/fri/locale/el_GR/LC_MESSAGES/ari.po b/fs_selfservice/fri/locale/el_GR/LC_MESSAGES/ari.po
new file mode 100644
index 0000000..2566494
--- /dev/null
+++ b/fs_selfservice/fri/locale/el_GR/LC_MESSAGES/ari.po
@@ -0,0 +1,648 @@
+# Copyright (C) 2005 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Elias Sofronas <esofronas@gmail.com>, 2005.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-05-03 08:32-0400\n"
+"PO-Revision-Date: 2005-11-14 10:06+0200\n"
+"Last-Translator: Elias Sofronas <esofronas@gmail.com>\n"
+"Language-Team: English <en@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../includes/asi.php:46
+msgid "Asterisk Call Manager not responding"
+msgstr "Ο διαχειÏιστής κλήσεων Asterisk δεν αποκÏίνεται"
+
+#: ../includes/asi.php:54
+msgid "Asterisk authentication failed:"
+msgstr "Η πιστοποίηση στο Asterisk απέτυχε:"
+
+#: ../includes/asi.php:96 ../includes/asi.php:111
+#, fuzzy
+msgid "Asterisk command not understood"
+msgstr "Η εντολή Asterisk επαναφόÏτωσης δεν αναγνωÏίστηκε"
+
+#: ../includes/bootstrap.php:123
+#, php-format
+msgid "To many directories in %s Not all files processed"
+msgstr ""
+
+#: ../includes/bootstrap.php:226
+msgid "ARI requires a version of PHP 4.3 or later"
+msgstr ""
+
+#: ../includes/bootstrap.php:245
+msgid ""
+"PHP PEAR must be installed. Visit http://pear.php.net for help with "
+"installation."
+msgstr ""
+
+#: ../includes/common.php:173
+#, fuzzy
+msgid "ARI does not appear to have access to the Asterisk Manager."
+msgstr "ΑδÏνατη η σÏνδεση στον Asterisk Manager"
+
+#: ../includes/common.php:174
+msgid ""
+"Check the ARI 'main.conf.php' configuration file to set the Asterisk Manager "
+"Account."
+msgstr ""
+
+#: ../includes/common.php:175
+msgid "Check /etc/asterisk/manager.conf for a proper Asterisk Manager Account"
+msgstr ""
+
+#: ../includes/common.php:176
+msgid ""
+"make sure [general] enabled = yes and a 'permit=' line for localhost or the "
+"webserver."
+msgstr ""
+
+#: ../includes/common.php:193 ../includes/common.php:208
+#, fuzzy
+msgid "Check AMP installation, asterisk, and ARI main.conf"
+msgstr ""
+"Ελέγχτε την εγκατάσταση του AMP, την βάση δεδομένων του asterisk, ή το ARI "
+"main.conf"
+
+#: ../includes/common.php:344
+msgid "Logout"
+msgstr "ΑποσÏνδεση"
+
+#: ../includes/common.php:349
+msgid "Page Not Found."
+msgstr "Η σελίδα δεν βÏέθηκε"
+
+#: ../includes/display.php:92
+msgid "Search"
+msgstr "ΕÏÏεση"
+
+#: ../includes/display.php:135
+msgid "Searched for"
+msgstr "ΕÏÏεση για"
+
+#: ../includes/display.php:139
+#, fuzzy, php-format
+msgid "Results %d - %d of %d"
+msgstr "Αποτελέσματα"
+
+#: ../includes/display.php:141
+#, fuzzy, php-format
+msgid "Results %d"
+msgstr "Αποτελέσματα"
+
+#: ../includes/display.php:195
+msgid "First"
+msgstr "ΠÏώτο"
+
+#: ../includes/display.php:208
+msgid "Last"
+msgstr "Τελευταίο"
+
+#: ../includes/login.php:267
+msgid "Incorrect Password"
+msgstr "Λάθος Κωδικός"
+
+#: ../includes/login.php:279
+msgid "Incorrect Username or Password"
+msgstr "Λάθος όνομα χÏήστη ή κωδικός"
+
+#: ../includes/login.php:402 ../includes/login.php:411
+msgid "Login"
+msgstr "ΘυÏίδα"
+
+#: ../includes/login.php:419
+msgid "Password"
+msgstr "Κωδικός"
+
+#: ../includes/login.php:428
+msgid "Submit"
+msgstr "Είσοδος"
+
+#: ../includes/login.php:436
+msgid "Remember Password"
+msgstr "Απομνημόνευση ΚωδικοÏ"
+
+#: ../includes/login.php:451
+#, fuzzy
+msgid "Use your <b>Voicemail Mailbox and Password</b>"
+msgstr "ΘυÏίδα Τηλεφωνητή και Κωδικό"
+
+#: ../includes/login.php:452
+msgid "This is the same password used for the phone"
+msgstr "Αυτό είναι ο ίδιος κωδικός που χÏησιμοποιήθηκε για το τηλέφωνο"
+
+#: ../includes/login.php:454
+msgid ""
+"For password maintenance or assistance, contact your Phone System "
+"Administrator."
+msgstr ""
+"Για αλλαγή ÎºÏ‰Î´Î¹ÎºÎ¿Ï Î® υποστήÏιξη, επικοινωνήστε με τον ΔιαχειÏιστή του "
+"συστήματος"
+
+#: ../includes/main.conf.php:152
+msgid "INBOX"
+msgstr "ΕΣΕΡΧΟΜΕÎΑ"
+
+#: ../includes/main.conf.php:154
+msgid "Family"
+msgstr "ΟΙΚΟΓΕÎΕΙΑ"
+
+#: ../includes/main.conf.php:156
+msgid "Friends"
+msgstr "ΦΙΛΟΙ"
+
+#: ../includes/main.conf.php:158
+msgid "Old"
+msgstr "ΠΑΛΙΑ"
+
+#: ../includes/main.conf.php:160
+msgid "Work"
+msgstr "ΔΟΥΛΕΙΑ"
+
+#: ../includes/main.conf.php:229
+msgid "Directory"
+msgstr ""
+
+#: ../includes/main.conf.php:230
+msgid "Echo Test"
+msgstr ""
+
+#: ../includes/main.conf.php:231 ../modules/callmonitor.module:161
+#: ../modules/voicemail.module:324
+msgid "Time"
+msgstr "ÎÏα"
+
+#: ../includes/main.conf.php:232
+msgid "Weather"
+msgstr ""
+
+#: ../includes/main.conf.php:233
+msgid "Schedule wakeup call"
+msgstr ""
+
+#: ../includes/main.conf.php:234
+msgid "festival test (your extension is XXX)"
+msgstr ""
+
+#: ../includes/main.conf.php:235
+msgid "Activate Call Waiting (deactivated by default)"
+msgstr ""
+
+#: ../includes/main.conf.php:236
+msgid "Deactivate Call Waiting"
+msgstr ""
+
+#: ../includes/main.conf.php:237
+msgid "Call Forwarding System"
+msgstr ""
+
+#: ../includes/main.conf.php:238
+msgid "Disable Call Forwarding"
+msgstr ""
+
+#: ../includes/main.conf.php:239
+#, fuzzy
+msgid "IVR Recording"
+msgstr "Μυνήματα ΘυÏίδας"
+
+#: ../includes/main.conf.php:240
+msgid "Enable Do-Not-Disturb"
+msgstr ""
+
+#: ../includes/main.conf.php:241
+msgid "Disable Do-Not-Disturb"
+msgstr ""
+
+#: ../includes/main.conf.php:242
+msgid "Call Forward on Busy"
+msgstr ""
+
+#: ../includes/main.conf.php:243
+msgid "Disable Call Forward on Busy"
+msgstr ""
+
+#: ../includes/main.conf.php:244
+msgid "Message Center (does not ask for extension)"
+msgstr ""
+
+#: ../includes/main.conf.php:245
+msgid "Enter Message Center"
+msgstr ""
+
+#: ../includes/main.conf.php:246
+msgid "Playback IVR Recording"
+msgstr ""
+
+#: ../includes/main.conf.php:247
+msgid "Test Fax"
+msgstr ""
+
+#: ../includes/main.conf.php:248
+msgid "Simulate incoming call"
+msgstr ""
+
+#: ../includes/main.conf.php:289
+msgid "Email voicemail as attachment"
+msgstr ""
+
+#: ../includes/main.conf.php:290
+msgid "Say caller id in recording emailed"
+msgstr ""
+
+#: ../includes/main.conf.php:291
+msgid "Say envelop (date/time) in recording emailed"
+msgstr ""
+
+#: ../includes/main.conf.php:292
+msgid "Delete voicemail when emailed"
+msgstr ""
+
+#: ../includes/main.conf.php:293
+msgid "Play next message after deleting current message"
+msgstr ""
+
+#: ../includes/main.conf.php:294
+msgid "Ask caller to review their voicemail before sending"
+msgstr ""
+
+#: ../includes/main.conf.php:295
+msgid "Maximum time in seconds a voicemail will record"
+msgstr ""
+
+#: ../modules/callmonitor.module:37 ../modules/callmonitor.module:257
+msgid "Call Monitor"
+msgstr "ΠαÏακολοÏθηση Κλήσεων"
+
+#: ../modules/callmonitor.module:132
+#, php-format
+msgid "Path is not a directory: %s"
+msgstr ""
+
+#: ../modules/callmonitor.module:141 ../modules/voicemail.module:301
+msgid "delete"
+msgstr "διαγÏαφή"
+
+#: ../modules/callmonitor.module:147
+#, fuzzy
+msgid "duration"
+msgstr "ΔιάÏκεια"
+
+#: ../modules/callmonitor.module:150
+#, fuzzy
+msgid "ignore"
+msgstr "κανένα"
+
+#: ../modules/callmonitor.module:159 ../modules/voicemail.module:322
+msgid "Date"
+msgstr "ΗμεÏομηνία"
+
+#: ../modules/callmonitor.module:163 ../modules/voicemail.module:326
+msgid "Caller ID"
+msgstr "Ταυτότητα ΚαλοÏντος"
+
+#: ../modules/callmonitor.module:165
+msgid "Source"
+msgstr "Πηγή"
+
+#: ../modules/callmonitor.module:167
+msgid "Destination"
+msgstr "ΠÏοοÏισμός"
+
+#: ../modules/callmonitor.module:169
+msgid "Context"
+msgstr "ΠεÏιεχόμενο"
+
+#: ../modules/callmonitor.module:171 ../modules/voicemail.module:332
+msgid "Duration"
+msgstr "ΔιάÏκεια"
+
+#: ../modules/callmonitor.module:202
+msgid "Monitor"
+msgstr "ΠαÏακολοÏθηση"
+
+#: ../modules/callmonitor.module:222 ../modules/voicemail.module:373
+msgid "play"
+msgstr "άκουσε"
+
+#: ../modules/callmonitor.module:259
+#, fuzzy, php-format
+msgid "Call Monitor for %s (%s)"
+msgstr "ΠαÏακολοÏθηση Κλήσεων"
+
+#: ../modules/callmonitor.module:311 ../modules/voicemail.module:475
+msgid "select"
+msgstr "επιλογή"
+
+#: ../modules/callmonitor.module:312 ../modules/voicemail.module:476
+msgid "all"
+msgstr "όλα"
+
+#: ../modules/callmonitor.module:313 ../modules/voicemail.module:477
+msgid "none"
+msgstr "κανένα"
+
+#: ../modules/callmonitor.module:533
+msgid "Only deletes recording files, not cdr log"
+msgstr ""
+
+#: ../modules/conference.module:55
+msgid "My Conference room"
+msgstr ""
+
+#: ../modules/conference.module:78
+#, fuzzy, php-format
+msgid "Conference for %s (%s%s)"
+msgstr "Τηλεφωνητής"
+
+#: ../modules/help.module:39 ../modules/help.module:68
+msgid "Help"
+msgstr ""
+
+#: ../modules/help.module:70
+#, fuzzy, php-format
+msgid "Help for %s (%s)"
+msgstr "Ρυθμίσεις για"
+
+#: ../modules/help.module:77
+msgid "Handset Feature Code"
+msgstr ""
+
+#: ../modules/help.module:80
+msgid "Action"
+msgstr ""
+
+#: ../modules/settings.module:61 ../modules/settings.module:667
+msgid "Settings"
+msgstr "Ρυθμίσεις"
+
+#: ../modules/settings.module:125
+msgid "Call forward number not changed"
+msgstr ""
+
+#: ../modules/settings.module:126
+#, php-format
+msgid ""
+"Number %s must contain dial numbers (characters like '(', '-', and ')' are "
+"ok)"
+msgstr ""
+
+#: ../modules/settings.module:151 ../modules/settings.module:156
+#: ../modules/settings.module:161 ../modules/settings.module:166
+#: ../modules/settings.module:176 ../modules/settings.module:181
+msgid "Voicemail password not changed"
+msgstr "Ο κωδικός του τηλεφωνητή δεν άλλαξε"
+
+#: ../modules/settings.module:152
+msgid "Password and password confirm must not be blank"
+msgstr "Ο κωδικός και η επιβεβαίωση ÎºÏ‰Î´Î¹ÎºÎ¿Ï Î´ÎµÎ½ Ï€Ïέπει να είναι κενά"
+
+#: ../modules/settings.module:157
+#, fuzzy, php-format
+msgid "Passwords must be all numbers and greater than %d digits"
+msgstr "Οι κωδικοί Ï€Ïέπει να είναι μόνο 4 αÏιθμοί"
+
+#: ../modules/settings.module:162
+#, fuzzy, php-format
+msgid "Passwords must be all numbers and only %d digits"
+msgstr "Οι κωδικοί Ï€Ïέπει να είναι μόνο 4 αÏιθμοί"
+
+#: ../modules/settings.module:167
+msgid "Password and password confirm do not match"
+msgstr "Ο κωδικός και η επιβεβαίωση ÎºÏ‰Î´Î¹ÎºÎ¿Ï Î´ÎµÎ½ συμφωνοÏν"
+
+#: ../modules/settings.module:177 ../modules/settings.module:182
+#: ../modules/settings.module:234 ../modules/settings.module:239
+#, fuzzy, php-format
+msgid "%s does not exist or is not writable"
+msgstr "Δεν υπάÏχει ή δεν είναι εγγÏάψιμο"
+
+#: ../modules/settings.module:223
+#, fuzzy
+msgid "Voicemail email and pager address not changed"
+msgstr "Ο κωδικός του τηλεφωνητή δεν άλλαξε"
+
+#: ../modules/settings.module:233 ../modules/settings.module:238
+#, fuzzy
+msgid "Voicemail email settings not changed"
+msgstr "Ο κωδικός του τηλεφωνητή δεν άλλαξε"
+
+#: ../modules/settings.module:385
+msgid "Language:"
+msgstr "Γλώσσα:"
+
+#: ../modules/settings.module:408
+#, fuzzy
+msgid "Call Routing"
+msgstr "Ρυθμίσεις ΠαÏακολοÏθησης Κλήσεων"
+
+#: ../modules/settings.module:411
+#, fuzzy
+msgid "Call Forwarding:"
+msgstr "Ρυθμίσεις ΠαÏακολοÏθησης Κλήσεων"
+
+#: ../modules/settings.module:419 ../modules/settings.module:507
+#, fuzzy
+msgid "Enable"
+msgstr "στο πεδίο"
+
+#: ../modules/settings.module:431
+#, fuzzy, php-format
+msgid "Passwords must be all numbers and only %s digits"
+msgstr "Οι κωδικοί Ï€Ïέπει να είναι μόνο 4 αÏιθμοί"
+
+#: ../modules/settings.module:434
+#, fuzzy, php-format
+msgid "Passwords must be all numbers and at least %s digits"
+msgstr "Οι κωδικοί Ï€Ïέπει να είναι μόνο 4 αÏιθμοί"
+
+#: ../modules/settings.module:439
+#, fuzzy
+msgid "Voicemail Password:"
+msgstr "Κωδικός Τηλεφωνητή"
+
+#: ../modules/settings.module:445
+msgid "Enter again to confirm:"
+msgstr "Εισάγετε ξανά για επιβεβαίωση:"
+
+#: ../modules/settings.module:492
+#, fuzzy
+msgid "Email Voicemail To:"
+msgstr "Τηλεφωνητής"
+
+#: ../modules/settings.module:498
+#, fuzzy
+msgid "Pager Voicemail To:"
+msgstr "Τηλεφωνητής"
+
+#: ../modules/settings.module:558
+msgid "Audio Format:"
+msgstr "Ποιότητα Ήχου:"
+
+#: ../modules/settings.module:561
+msgid "Best Quality"
+msgstr "Μέγιστη Ποιότητα"
+
+#: ../modules/settings.module:562
+msgid "Smallest Download"
+msgstr "ΜικÏότεÏο Download"
+
+#: ../modules/settings.module:570
+msgid "Voicemail Settings"
+msgstr "Ρυθμίσεις Τηλεφωνητή"
+
+#: ../modules/settings.module:611
+msgid "Call Monitor Settings"
+msgstr "Ρυθμίσεις ΠαÏακολοÏθησης Κλήσεων"
+
+#: ../modules/settings.module:614
+msgid "Record INCOMING:"
+msgstr "ΗχογÏάφηση ΕΙΣΕΡΧΟΜΕÎΟΥ:"
+
+#: ../modules/settings.module:616 ../modules/settings.module:624
+msgid "Always"
+msgstr "Πάντα"
+
+#: ../modules/settings.module:617 ../modules/settings.module:625
+msgid "Never"
+msgstr "Ποτέ"
+
+#: ../modules/settings.module:618 ../modules/settings.module:626
+msgid "On-Demand"
+msgstr "Επιτόπου"
+
+#: ../modules/settings.module:622
+msgid "Record OUTGOING:"
+msgstr "ΗχογÏάφηση ΕΞΕΡΧΟΜΕÎΟΥ:"
+
+#: ../modules/settings.module:669
+#, fuzzy, php-format
+msgid "Settings for %s (%s)"
+msgstr "Ρυθμίσεις για"
+
+#: ../modules/settings.module:705
+msgid "Update"
+msgstr "Ανανέωση"
+
+#: ../modules/voicemail.module:45
+msgid "Voicemail"
+msgstr "Τηλεφωνητής"
+
+#: ../modules/voicemail.module:164
+msgid "A folder must be selected before the message can be moved."
+msgstr "ΠÏέπει να επιλεχθεί ένας κατάλογος Ï€Ïίν μεταφεÏεθεί το μÏνημα."
+
+#: ../modules/voicemail.module:178
+msgid "An extension must be selected before the message can be forwarded."
+msgstr "ΠÏέπει να επιλεχθεί ΘυÏίδα παÏαλήπτη Ï€Ïίν Ï€Ïοωθηθεί το μÏνημα."
+
+#: ../modules/voicemail.module:304
+msgid "move_to"
+msgstr "μετακίνηση"
+
+#: ../modules/voicemail.module:307
+#, fuzzy
+msgid "Folder"
+msgstr "Κατάλογοι"
+
+#: ../modules/voicemail.module:311
+msgid "forward_to"
+msgstr "Ï€Ïοώθηση"
+
+#: ../modules/voicemail.module:328
+msgid "Priority"
+msgstr "ΠÏοτεÏαιότητα"
+
+#: ../modules/voicemail.module:330
+msgid "Orig Mailbox"
+msgstr "ΑÏχικός Κατάλογος Μυνημάτων"
+
+#: ../modules/voicemail.module:362
+msgid "Message"
+msgstr ""
+
+#: ../modules/voicemail.module:377
+msgid "Voicemail recording(s) was not found."
+msgstr "Δεν βÏέθηκαν εγγÏαφή(ές) στον τηλεφωνητή."
+
+#: ../modules/voicemail.module:378
+#, php-format
+msgid ""
+"On settings page, change voicemail audio format. It is currently set to %s"
+msgstr ""
+
+#: ../modules/voicemail.module:405
+#, fuzzy
+msgid "Voicemail Login not found."
+msgstr "Δεν βÏέθηκε Ï€Ïόσβαση για θυÏίδα μυνημάτων"
+
+#: ../modules/voicemail.module:406
+msgid "No access to voicemail"
+msgstr "Καμία Ï€Ïόσβαση στον τηλεφωνητή"
+
+#: ../modules/voicemail.module:412
+msgid "No Voicemail Recordings for Admin"
+msgstr "Δεν ΥπάÏχουν ΕγγÏαφές Μυνημάτων για τον ΔιαχειÏιστή"
+
+#: ../modules/voicemail.module:428
+#, fuzzy, php-format
+msgid "Voicemail for %s (%s)"
+msgstr "Τηλεφωνητής"
+
+#: ../modules/voicemail.module:678
+#, fuzzy, php-format
+msgid "Could not create mailbox folder %s on the server"
+msgstr "ΑδÏνατη η δημιουÏγία καταλόγου μυνημάτων"
+
+#: ../modules/voicemail.module:718
+#, php-format
+msgid "Permission denied on folder %s or %s"
+msgstr ""
+
+#: ../misc/recording_popup.php:39
+msgid "download"
+msgstr "κατέβασμα"
+
+#~ msgid "Passwords must be all numbers and only 4 digits"
+#~ msgstr "Οι κωδικοί Ï€Ïέπει να είναι μόνο 4 αÏιθμοί"
+
+#~ msgid "Folders"
+#~ msgstr "Κατάλογοι"
+
+#~ msgid "Login used"
+#~ msgstr "Όνομα χÏήστη που χÏησιμοποιήθηκε"
+
+#, fuzzy
+#~ msgid "No Asterisk Manager Interface connection"
+#~ msgstr "Ο διαχειÏιστής κλήσεων Asterisk δεν αποκÏίνεται"
+
+#~ msgid "not a directory or not readable"
+#~ msgstr "δεν είναι κατάλογος ή δεν είναι αναγνώσιμος"
+
+#~ msgid "of"
+#~ msgstr "από"
+
+#~ msgid "Use your"
+#~ msgstr "ΧÏησιμοποίησε την δικιά σου"
+
+#~ msgid "for"
+#~ msgstr "για"
+
+#~ msgid "Password must be all numbers and 4 digits"
+#~ msgstr "Ο κωδικός Ï€Ïέπει να έιναι 4 αÏιθμοί"
+
+#~ msgid "Check voicemail audio format on settings page to change from"
+#~ msgstr ""
+#~ "Ελέγχτε το audio format του μυνήματος στην σελίδα Ïυθμίσεων για αλλαγή"
+
+#~ msgid "on the server"
+#~ msgstr "στον server"
+
+#~ msgid "No database connection"
+#~ msgstr "Δεν υπάÏχει σÏνδεση με την βάση δεδομένων"
diff --git a/fs_selfservice/fri/locale/es_ES/LC_MESSAGES/ari.mo b/fs_selfservice/fri/locale/es_ES/LC_MESSAGES/ari.mo
new file mode 100644
index 0000000..e0fbdd9
--- /dev/null
+++ b/fs_selfservice/fri/locale/es_ES/LC_MESSAGES/ari.mo
Binary files differ
diff --git a/fs_selfservice/fri/locale/es_ES/LC_MESSAGES/ari.po b/fs_selfservice/fri/locale/es_ES/LC_MESSAGES/ari.po
new file mode 100644
index 0000000..0518573
--- /dev/null
+++ b/fs_selfservice/fri/locale/es_ES/LC_MESSAGES/ari.po
@@ -0,0 +1,616 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+# Grupo Ikusnet, Antonio F. Cano <antonio@igestec.com>, 2006.
+# Grupo Ikusnet, Agustin Vericat <agustin@igestec.com>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-05-03 08:32-0400\n"
+"PO-Revision-Date: 2006-03-31 13:00\n"
+"Last-Translator: Antonio F. Cano <antonio@igestec.com>\n"
+"Language-Team: Espanol <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../includes/asi.php:46
+msgid "Asterisk Call Manager not responding"
+msgstr "La Centralita no responde"
+
+#: ../includes/asi.php:54
+msgid "Asterisk authentication failed:"
+msgstr "Fallo la Autenticacion con la Centralita"
+
+#: ../includes/asi.php:96 ../includes/asi.php:111
+msgid "Asterisk command not understood"
+msgstr "La recarga no funcino"
+
+#: ../includes/bootstrap.php:123
+#, php-format
+msgid "To many directories in %s Not all files processed"
+msgstr "Demasiados directorios en %s, notodos los archivos han sido procesados"
+
+#: ../includes/bootstrap.php:226
+#, fuzzy
+msgid "ARI requires a version of PHP 4.3 or later"
+msgstr "Necesita una versi&oacute; de PHP 4.0 o superior"
+
+#: ../includes/bootstrap.php:245
+msgid ""
+"PHP PEAR must be installed. Visit http://pear.php.net for help with "
+"installation."
+msgstr ""
+"PHP PEAR debe estar instalado. Visite http://pear.php.net para obtener ayuda"
+
+#: ../includes/common.php:173
+msgid "ARI does not appear to have access to the Asterisk Manager."
+msgstr "No es posible conectar con la Centralita"
+
+#: ../includes/common.php:174
+#, fuzzy
+msgid ""
+"Check the ARI 'main.conf.php' configuration file to set the Asterisk Manager "
+"Account."
+msgstr ""
+"Compruebe el archivo 'main.conf' para configuar la conexi&oacute;n con "
+"Asterisk Manager"
+
+#: ../includes/common.php:175
+msgid "Check /etc/asterisk/manager.conf for a proper Asterisk Manager Account"
+msgstr ""
+"Compruebe /etc/asterisk/manager.conf para crear una cuenta Asterisk Manager"
+
+#: ../includes/common.php:176
+msgid ""
+"make sure [general] enabled = yes and a 'permit=' line for localhost or the "
+"webserver."
+msgstr ""
+
+#: ../includes/common.php:193 ../includes/common.php:208
+msgid "Check AMP installation, asterisk, and ARI main.conf"
+msgstr "Compruebe la instalacion de FreePBX, DDBB o ARI en main.conf"
+
+#: ../includes/common.php:344
+msgid "Logout"
+msgstr "Salir"
+
+#: ../includes/common.php:349
+msgid "Page Not Found."
+msgstr "Pagina No encontrada"
+
+#: ../includes/display.php:92
+msgid "Search"
+msgstr "Buscar"
+
+#: ../includes/display.php:135
+msgid "Searched for"
+msgstr "Buscado para"
+
+#: ../includes/display.php:139
+#, fuzzy, php-format
+msgid "Results %d - %d of %d"
+msgstr "Resultados %d de %d"
+
+#: ../includes/display.php:141
+#, php-format
+msgid "Results %d"
+msgstr "Resultados %d"
+
+#: ../includes/display.php:195
+msgid "First"
+msgstr "Primero"
+
+#: ../includes/display.php:208
+msgid "Last"
+msgstr "Ultimo"
+
+#: ../includes/login.php:267
+msgid "Incorrect Password"
+msgstr "Contrase&ntilde;a Incorrecta"
+
+#: ../includes/login.php:279
+msgid "Incorrect Username or Password"
+msgstr "Contrase&ntilde; Incorrecta"
+
+#: ../includes/login.php:402 ../includes/login.php:411
+msgid "Login"
+msgstr "Usuario"
+
+#: ../includes/login.php:419
+msgid "Password"
+msgstr "Contrase&ntilde;a"
+
+#: ../includes/login.php:428
+msgid "Submit"
+msgstr "Enviar"
+
+#: ../includes/login.php:436
+msgid "Remember Password"
+msgstr "Recordar Contrase&ntilde;a"
+
+#: ../includes/login.php:451
+msgid "Use your <b>Voicemail Mailbox and Password</b>"
+msgstr "Use su Buz&oacute;n de Voz (Usuario) y contrase&ntilde;a"
+
+#: ../includes/login.php:452
+msgid "This is the same password used for the phone"
+msgstr "Esta es es la misma contrase&ntilde;a usada para el telefono"
+
+#: ../includes/login.php:454
+msgid ""
+"For password maintenance or assistance, contact your Phone System "
+"Administrator."
+msgstr ""
+"Para mantenimiento de contrase&ntilde;as o asistencia, pongase en contacto "
+"con el Administrador."
+
+#: ../includes/main.conf.php:152
+msgid "INBOX"
+msgstr "Entrada"
+
+#: ../includes/main.conf.php:154
+msgid "Family"
+msgstr "Familiares"
+
+#: ../includes/main.conf.php:156
+msgid "Friends"
+msgstr "Amigos"
+
+#: ../includes/main.conf.php:158
+msgid "Old"
+msgstr "Antiguos"
+
+#: ../includes/main.conf.php:160
+msgid "Work"
+msgstr "Trabajo"
+
+#: ../includes/main.conf.php:229
+msgid "Directory"
+msgstr "Directorio"
+
+#: ../includes/main.conf.php:230
+msgid "Echo Test"
+msgstr "Test Eco"
+
+#: ../includes/main.conf.php:231 ../modules/callmonitor.module:161
+#: ../modules/voicemail.module:324
+msgid "Time"
+msgstr "Hora"
+
+#: ../includes/main.conf.php:232
+msgid "Weather"
+msgstr "Tiempo"
+
+#: ../includes/main.conf.php:233
+msgid "Schedule wakeup call"
+msgstr "Programar llamada despertador"
+
+#: ../includes/main.conf.php:234
+msgid "festival test (your extension is XXX)"
+msgstr "Test festival tts (su extension es XXX)"
+
+#: ../includes/main.conf.php:235
+msgid "Activate Call Waiting (deactivated by default)"
+msgstr "Activar Llamada en Espera (Desactivada por defecto)"
+
+#: ../includes/main.conf.php:236
+msgid "Deactivate Call Waiting"
+msgstr "Desactivar Llamada en Espera"
+
+#: ../includes/main.conf.php:237
+msgid "Call Forwarding System"
+msgstr "Desv&iacute;o de llamada"
+
+#: ../includes/main.conf.php:238
+msgid "Disable Call Forwarding"
+msgstr "Desactivar el Desv&iacute;o de Llamada"
+
+#: ../includes/main.conf.php:239
+msgid "IVR Recording"
+msgstr "Grabaciones"
+
+#: ../includes/main.conf.php:240
+msgid "Enable Do-Not-Disturb"
+msgstr "Activar No-Molestar"
+
+#: ../includes/main.conf.php:241
+msgid "Disable Do-Not-Disturb"
+msgstr "Desactivar No-Molestar"
+
+#: ../includes/main.conf.php:242
+msgid "Call Forward on Busy"
+msgstr "Desv&iacute;o de llamada cuando est&eacute; Ocupado"
+
+#: ../includes/main.conf.php:243
+msgid "Disable Call Forward on Busy"
+msgstr "Desactivar el Desv&iacute;o de llamada cuando est&eacute; Ocupado"
+
+#: ../includes/main.conf.php:244
+#, fuzzy
+msgid "Message Center (does not ask for extension)"
+msgstr "Centro de Mensajes (no pregunta la extens&iacute;n)"
+
+#: ../includes/main.conf.php:245
+msgid "Enter Message Center"
+msgstr "Entrar en el Centro de Mensajes"
+
+#: ../includes/main.conf.php:246
+msgid "Playback IVR Recording"
+msgstr "Escuchar la grabaci&oacute;n realizada"
+
+#: ../includes/main.conf.php:247
+msgid "Test Fax"
+msgstr "Probar Fax"
+
+#: ../includes/main.conf.php:248
+msgid "Simulate incoming call"
+msgstr "Simular una llamada entrante"
+
+#: ../includes/main.conf.php:289
+msgid "Email voicemail as attachment"
+msgstr "Adjuntar el mensaje de voz en el correo electr&oacute;nico"
+
+#: ../includes/main.conf.php:290
+msgid "Say caller id in recording emailed"
+msgstr ""
+"Indica el CallerID en la grabaci&oacute;n enviada por correo electr&oacute;"
+"nico"
+
+#: ../includes/main.conf.php:291
+msgid "Say envelop (date/time) in recording emailed"
+msgstr ""
+"Indica la etiqueta (tiempo/hora) en la grabaci&oacute;n enviada por correo "
+"electr&oacute;nico"
+
+#: ../includes/main.conf.php:292
+msgid "Delete voicemail when emailed"
+msgstr ""
+"Eliminar el mensaje de voz una vez enviado por correo electr&oacute;nico"
+
+#: ../includes/main.conf.php:293
+msgid "Play next message after deleting current message"
+msgstr "Reproducir el siguiente mensaje una vez eliminado el actual"
+
+#: ../includes/main.conf.php:294
+msgid "Ask caller to review their voicemail before sending"
+msgstr ""
+
+#: ../includes/main.conf.php:295
+msgid "Maximum time in seconds a voicemail will record"
+msgstr ""
+
+#: ../modules/callmonitor.module:37 ../modules/callmonitor.module:257
+msgid "Call Monitor"
+msgstr "Registro de Llamadas"
+
+#: ../modules/callmonitor.module:132
+#, php-format
+msgid "Path is not a directory: %s"
+msgstr "La ruta no es un directorio: %s"
+
+#: ../modules/callmonitor.module:141 ../modules/voicemail.module:301
+msgid "delete"
+msgstr "Eliminar"
+
+#: ../modules/callmonitor.module:147
+msgid "duration"
+msgstr "Duraci&oacute;n"
+
+#: ../modules/callmonitor.module:150
+msgid "ignore"
+msgstr "ninguno"
+
+#: ../modules/callmonitor.module:159 ../modules/voicemail.module:322
+msgid "Date"
+msgstr "Fecha"
+
+#: ../modules/callmonitor.module:163 ../modules/voicemail.module:326
+msgid "Caller ID"
+msgstr "Caller ID"
+
+#: ../modules/callmonitor.module:165
+msgid "Source"
+msgstr "Origen"
+
+#: ../modules/callmonitor.module:167
+msgid "Destination"
+msgstr "Destino"
+
+#: ../modules/callmonitor.module:169
+msgid "Context"
+msgstr "Contexto"
+
+#: ../modules/callmonitor.module:171 ../modules/voicemail.module:332
+msgid "Duration"
+msgstr "Duraci&oacute;n"
+
+#: ../modules/callmonitor.module:202
+msgid "Monitor"
+msgstr "Monitor para"
+
+#: ../modules/callmonitor.module:222 ../modules/voicemail.module:373
+msgid "play"
+msgstr "escuchar"
+
+#: ../modules/callmonitor.module:259
+#, php-format
+msgid "Call Monitor for %s (%s)"
+msgstr "Registro de Llamadas de %s (%s)"
+
+#: ../modules/callmonitor.module:311 ../modules/voicemail.module:475
+msgid "select"
+msgstr "Selecionar"
+
+#: ../modules/callmonitor.module:312 ../modules/voicemail.module:476
+msgid "all"
+msgstr "todos"
+
+#: ../modules/callmonitor.module:313 ../modules/voicemail.module:477
+msgid "none"
+msgstr "ninguno"
+
+#: ../modules/callmonitor.module:533
+msgid "Only deletes recording files, not cdr log"
+msgstr "Solo elimina los archivos grabados, no el log en el CDR"
+
+#: ../modules/conference.module:55
+msgid "My Conference room"
+msgstr ""
+
+#: ../modules/conference.module:78
+#, fuzzy, php-format
+msgid "Conference for %s (%s%s)"
+msgstr "Buz&oacute;n de Voz de %s (%s)"
+
+#: ../modules/help.module:39 ../modules/help.module:68
+msgid "Help"
+msgstr "Ayuda"
+
+#: ../modules/help.module:70
+#, php-format
+msgid "Help for %s (%s)"
+msgstr "Ayuda para %s (%s)"
+
+#: ../modules/help.module:77
+msgid "Handset Feature Code"
+msgstr "Teclas de Marcaci&oacute;n"
+
+#: ../modules/help.module:80
+msgid "Action"
+msgstr "Acci&oacute;n"
+
+#: ../modules/settings.module:61 ../modules/settings.module:667
+msgid "Settings"
+msgstr "Opciones"
+
+#: ../modules/settings.module:125
+msgid "Call forward number not changed"
+msgstr "El n&uacute;mero del desv&iacute;o no ha cambiado"
+
+#: ../modules/settings.module:126
+#, php-format
+msgid ""
+"Number %s must contain dial numbers (characters like '(', '-', and ')' are "
+"ok)"
+msgstr ""
+"El n&uacute;mero %s debe contener n&uacte;meros marcables (caracteres como "
+"'(', '-', y ')' son v&aacute;lidos)"
+
+#: ../modules/settings.module:151 ../modules/settings.module:156
+#: ../modules/settings.module:161 ../modules/settings.module:166
+#: ../modules/settings.module:176 ../modules/settings.module:181
+msgid "Voicemail password not changed"
+msgstr "La Contrase&ntilde;a del Buz&oacute;n de Voz no ha cambiado"
+
+#: ../modules/settings.module:152
+msgid "Password and password confirm must not be blank"
+msgstr ""
+"Contrase&ntilde;a y la confirmacion de esta no deben de estar en blanco"
+
+#: ../modules/settings.module:157
+#, fuzzy, php-format
+msgid "Passwords must be all numbers and greater than %d digits"
+msgstr "Contrase&ntilde;a ha de ser numerica y de longitud %d digitos"
+
+#: ../modules/settings.module:162
+#, php-format
+msgid "Passwords must be all numbers and only %d digits"
+msgstr "Contrase&ntilde;a ha de ser numerica y de longitud %d digitos"
+
+#: ../modules/settings.module:167
+msgid "Password and password confirm do not match"
+msgstr "Contrase&ntilde;a y conformacion no corresponden"
+
+#: ../modules/settings.module:177 ../modules/settings.module:182
+#: ../modules/settings.module:234 ../modules/settings.module:239
+#, php-format
+msgid "%s does not exist or is not writable"
+msgstr "%s No existe o no se puede escribir"
+
+#: ../modules/settings.module:223
+msgid "Voicemail email and pager address not changed"
+msgstr "La Contrase&ntilde;a del Buz&oacute;n de Voz no ha cambiado"
+
+#: ../modules/settings.module:233 ../modules/settings.module:238
+msgid "Voicemail email settings not changed"
+msgstr "La Contrase&ntilde;a del Buz&oacute;n de Voz no ha cambiado"
+
+#: ../modules/settings.module:385
+msgid "Language:"
+msgstr "Idioma:"
+
+#: ../modules/settings.module:408
+msgid "Call Routing"
+msgstr "Enrutado de llamadas"
+
+#: ../modules/settings.module:411
+msgid "Call Forwarding:"
+msgstr "Desviar llamadas a:"
+
+#: ../modules/settings.module:419 ../modules/settings.module:507
+msgid "Enable"
+msgstr "Activar"
+
+#: ../modules/settings.module:431
+#, php-format
+msgid "Passwords must be all numbers and only %s digits"
+msgstr "Contrase&ntilde;a ha de ser numerica y de longitud %s digitos"
+
+#: ../modules/settings.module:434
+#, fuzzy, php-format
+msgid "Passwords must be all numbers and at least %s digits"
+msgstr "Contrase&ntilde;a ha de ser numerica y de longitud %s digitos"
+
+#: ../modules/settings.module:439
+msgid "Voicemail Password:"
+msgstr "Contrase&ntilde;a del Buz&oacute;n de Voz"
+
+#: ../modules/settings.module:445
+msgid "Enter again to confirm:"
+msgstr "Introduzca otra vez para confirmar:"
+
+#: ../modules/settings.module:492
+msgid "Email Voicemail To:"
+msgstr "Buz&oacute;n de Voz para"
+
+#: ../modules/settings.module:498
+msgid "Pager Voicemail To:"
+msgstr "Buz&oacute;n de Voz para"
+
+#: ../modules/settings.module:558
+msgid "Audio Format:"
+msgstr "Formato del Audio:"
+
+#: ../modules/settings.module:561
+msgid "Best Quality"
+msgstr "Mejor Calidad"
+
+#: ../modules/settings.module:562
+msgid "Smallest Download"
+msgstr "Descarga rapida"
+
+#: ../modules/settings.module:570
+msgid "Voicemail Settings"
+msgstr "Propiedades del Buz&oacute;n de Voz"
+
+#: ../modules/settings.module:611
+msgid "Call Monitor Settings"
+msgstr "Propiedades del Registro de Llamadas"
+
+#: ../modules/settings.module:614
+msgid "Record INCOMING:"
+msgstr "Grabaciones Entrantes:"
+
+#: ../modules/settings.module:616 ../modules/settings.module:624
+msgid "Always"
+msgstr "Siempre"
+
+#: ../modules/settings.module:617 ../modules/settings.module:625
+msgid "Never"
+msgstr "Nunca"
+
+#: ../modules/settings.module:618 ../modules/settings.module:626
+msgid "On-Demand"
+msgstr "Bajo demanda"
+
+#: ../modules/settings.module:622
+msgid "Record OUTGOING:"
+msgstr "Grabaciones Salientes:"
+
+#: ../modules/settings.module:669
+#, php-format
+msgid "Settings for %s (%s)"
+msgstr "Ajustes para %s (%s)"
+
+#: ../modules/settings.module:705
+msgid "Update"
+msgstr "Actualizar"
+
+#: ../modules/voicemail.module:45
+msgid "Voicemail"
+msgstr "Buz&oacute;n de Voz"
+
+#: ../modules/voicemail.module:164
+msgid "A folder must be selected before the message can be moved."
+msgstr "Debe elegir primero una carpeta antes de mover el mensaje."
+
+#: ../modules/voicemail.module:178
+msgid "An extension must be selected before the message can be forwarded."
+msgstr "Debe de seleccionar una extension antes de reenviar el mensaje"
+
+#: ../modules/voicemail.module:304
+msgid "move_to"
+msgstr "Mover a"
+
+#: ../modules/voicemail.module:307
+msgid "Folder"
+msgstr "Carpetas"
+
+#: ../modules/voicemail.module:311
+msgid "forward_to"
+msgstr "Enviar a"
+
+#: ../modules/voicemail.module:328
+msgid "Priority"
+msgstr "Prioridad"
+
+#: ../modules/voicemail.module:330
+msgid "Orig Mailbox"
+msgstr "Buz&oacute;n de Voz Orig"
+
+#: ../modules/voicemail.module:362
+msgid "Message"
+msgstr "Mensaje"
+
+#: ../modules/voicemail.module:377
+msgid "Voicemail recording(s) was not found."
+msgstr "No se ha encontrado grabaciones en el Buz&oacute;n de Voz."
+
+#: ../modules/voicemail.module:378
+#, php-format
+msgid ""
+"On settings page, change voicemail audio format. It is currently set to %s"
+msgstr ""
+
+#: ../modules/voicemail.module:405
+msgid "Voicemail Login not found."
+msgstr ""
+"No se encontro el usuario del Buz&oacute;n de Voz, se usa el usuario de la "
+"extension"
+
+#: ../modules/voicemail.module:406
+msgid "No access to voicemail"
+msgstr "No tiene permiso para acceder al Buz&oacute;n de Voz"
+
+#: ../modules/voicemail.module:412
+msgid "No Voicemail Recordings for Admin"
+msgstr "No hay grabaciones en el Buz&oacute;n de Voz de Admin"
+
+#: ../modules/voicemail.module:428
+#, php-format
+msgid "Voicemail for %s (%s)"
+msgstr "Buz&oacute;n de Voz de %s (%s)"
+
+#: ../modules/voicemail.module:678
+#, php-format
+msgid "Could not create mailbox folder %s on the server"
+msgstr "No puedo crear la carpeta %s en el buz&oacute;n de voz"
+
+#: ../modules/voicemail.module:718
+#, php-format
+msgid "Permission denied on folder %s or %s"
+msgstr "Permiso denegado en el directorio %s o %s"
+
+#: ../misc/recording_popup.php:39
+msgid "download"
+msgstr "Descargar"
+
+#~ msgid "Settings for"
+#~ msgstr "Configuracion de"
+
+#~ msgid "Folders"
+#~ msgstr "Carpetas"
diff --git a/fs_selfservice/fri/locale/fr_FR/LC_MESSAGES/ari.mo b/fs_selfservice/fri/locale/fr_FR/LC_MESSAGES/ari.mo
new file mode 100644
index 0000000..78d4733
--- /dev/null
+++ b/fs_selfservice/fri/locale/fr_FR/LC_MESSAGES/ari.mo
Binary files differ
diff --git a/fs_selfservice/fri/locale/fr_FR/LC_MESSAGES/ari.po b/fs_selfservice/fri/locale/fr_FR/LC_MESSAGES/ari.po
new file mode 100644
index 0000000..7f15c7a
--- /dev/null
+++ b/fs_selfservice/fri/locale/fr_FR/LC_MESSAGES/ari.po
@@ -0,0 +1,635 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <jbp@phileas-com.net>, 15/11/2005.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: 1.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-05-03 08:32-0400\n"
+"PO-Revision-Date: 2006-04-29 11:30+0100\n"
+"Last-Translator: Xavier Ourcière <xourciere@propolys.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../includes/asi.php:46
+msgid "Asterisk Call Manager not responding"
+msgstr "Asterisk Call Manager ne répond pas"
+
+#: ../includes/asi.php:54
+msgid "Asterisk authentication failed:"
+msgstr "Authentification Asterisk échoue :"
+
+#: ../includes/asi.php:96 ../includes/asi.php:111
+msgid "Asterisk command not understood"
+msgstr "Asterisk: commande non comprise"
+
+#: ../includes/bootstrap.php:123
+#, php-format
+msgid "To many directories in %s Not all files processed"
+msgstr ""
+
+#: ../includes/bootstrap.php:226
+msgid "ARI requires a version of PHP 4.3 or later"
+msgstr ""
+
+#: ../includes/bootstrap.php:245
+msgid ""
+"PHP PEAR must be installed. Visit http://pear.php.net for help with "
+"installation."
+msgstr ""
+
+#: ../includes/common.php:173
+msgid "ARI does not appear to have access to the Asterisk Manager."
+msgstr "Connexion impossible à Asterisk Manager"
+
+#: ../includes/common.php:174
+msgid ""
+"Check the ARI 'main.conf.php' configuration file to set the Asterisk Manager "
+"Account."
+msgstr ""
+
+#: ../includes/common.php:175
+msgid "Check /etc/asterisk/manager.conf for a proper Asterisk Manager Account"
+msgstr ""
+
+#: ../includes/common.php:176
+msgid ""
+"make sure [general] enabled = yes and a 'permit=' line for localhost or the "
+"webserver."
+msgstr ""
+
+#: ../includes/common.php:193 ../includes/common.php:208
+msgid "Check AMP installation, asterisk, and ARI main.conf"
+msgstr ""
+"Vérifiez l'installation d'AMP, de Asterisk, ou le fichier ARI main.conf"
+
+#: ../includes/common.php:344
+msgid "Logout"
+msgstr "Déconexion"
+
+#: ../includes/common.php:349
+msgid "Page Not Found."
+msgstr "Fichier introuvable"
+
+#: ../includes/display.php:92
+msgid "Search"
+msgstr "Rechercher"
+
+#: ../includes/display.php:135
+msgid "Searched for"
+msgstr "Rechercher pour"
+
+#: ../includes/display.php:139
+#, php-format
+msgid "Results %d - %d of %d"
+msgstr "Résultats %d à %s sur %d"
+
+#: ../includes/display.php:141
+#, php-format
+msgid "Results %d"
+msgstr "Résultats %d"
+
+#: ../includes/display.php:195
+msgid "First"
+msgstr "Premier"
+
+#: ../includes/display.php:208
+msgid "Last"
+msgstr "Dernier"
+
+#: ../includes/login.php:267
+msgid "Incorrect Password"
+msgstr "Mot de Passe eronné"
+
+#: ../includes/login.php:279
+msgid "Incorrect Username or Password"
+msgstr "Login ou Mot de Passe erroné"
+
+#: ../includes/login.php:402 ../includes/login.php:411
+msgid "Login"
+msgstr "Authentification"
+
+#: ../includes/login.php:419
+msgid "Password"
+msgstr "Mot de Passe"
+
+#: ../includes/login.php:428
+msgid "Submit"
+msgstr "Valider"
+
+#: ../includes/login.php:436
+msgid "Remember Password"
+msgstr "Se souvenir du mot de passe"
+
+#: ../includes/login.php:451
+msgid "Use your <b>Voicemail Mailbox and Password</b>"
+msgstr "Utilisez votre <b>numéro de la boîte vocale et votre mot de passe</b>"
+
+#: ../includes/login.php:452
+msgid "This is the same password used for the phone"
+msgstr "C'est le même Mot de Passe que sur le téléphone"
+
+#: ../includes/login.php:454
+msgid ""
+"For password maintenance or assistance, contact your Phone System "
+"Administrator."
+msgstr "Pour de l'assistance contactez votre administrateur de téléphonie."
+
+#: ../includes/main.conf.php:152
+msgid "INBOX"
+msgstr "NOUVEAUX"
+
+#: ../includes/main.conf.php:154
+msgid "Family"
+msgstr "Famille"
+
+#: ../includes/main.conf.php:156
+msgid "Friends"
+msgstr "Amis"
+
+#: ../includes/main.conf.php:158
+msgid "Old"
+msgstr "Anciens"
+
+#: ../includes/main.conf.php:160
+msgid "Work"
+msgstr "Travail"
+
+#: ../includes/main.conf.php:229
+msgid "Directory"
+msgstr "Annuaire local"
+
+#: ../includes/main.conf.php:230
+msgid "Echo Test"
+msgstr "Test d'echo"
+
+#: ../includes/main.conf.php:231 ../modules/callmonitor.module:161
+#: ../modules/voicemail.module:324
+msgid "Time"
+msgstr "Heure"
+
+#: ../includes/main.conf.php:232
+msgid "Weather"
+msgstr "Météo"
+
+#: ../includes/main.conf.php:233
+msgid "Schedule wakeup call"
+msgstr "Programmation de réveil"
+
+#: ../includes/main.conf.php:234
+msgid "festival test (your extension is XXX)"
+msgstr "test de festival (votre numéro de téléphone est le XXXX)"
+
+#: ../includes/main.conf.php:235
+msgid "Activate Call Waiting (deactivated by default)"
+msgstr ""
+
+#: ../includes/main.conf.php:236
+msgid "Deactivate Call Waiting"
+msgstr ""
+
+#: ../includes/main.conf.php:237
+msgid "Call Forwarding System"
+msgstr ""
+
+#: ../includes/main.conf.php:238
+msgid "Disable Call Forwarding"
+msgstr ""
+
+#: ../includes/main.conf.php:239
+#, fuzzy
+msgid "IVR Recording"
+msgstr "Enregistrement"
+
+#: ../includes/main.conf.php:240
+msgid "Enable Do-Not-Disturb"
+msgstr "Active ne pas déranger"
+
+#: ../includes/main.conf.php:241
+msgid "Disable Do-Not-Disturb"
+msgstr "Désactive ne pas déranger"
+
+#: ../includes/main.conf.php:242
+msgid "Call Forward on Busy"
+msgstr ""
+
+#: ../includes/main.conf.php:243
+msgid "Disable Call Forward on Busy"
+msgstr ""
+
+#: ../includes/main.conf.php:244
+#, fuzzy
+msgid "Message Center (does not ask for extension)"
+msgstr "Boite vocale personnelle"
+
+#: ../includes/main.conf.php:245
+msgid "Enter Message Center"
+msgstr "Centre de messageries"
+
+#: ../includes/main.conf.php:246
+msgid "Playback IVR Recording"
+msgstr ""
+
+#: ../includes/main.conf.php:247
+msgid "Test Fax"
+msgstr ""
+
+#: ../includes/main.conf.php:248
+msgid "Simulate incoming call"
+msgstr "Simulation d'appel entrant"
+
+#: ../includes/main.conf.php:289
+msgid "Email voicemail as attachment"
+msgstr ""
+
+#: ../includes/main.conf.php:290
+msgid "Say caller id in recording emailed"
+msgstr ""
+
+#: ../includes/main.conf.php:291
+msgid "Say envelop (date/time) in recording emailed"
+msgstr ""
+
+#: ../includes/main.conf.php:292
+msgid "Delete voicemail when emailed"
+msgstr ""
+
+#: ../includes/main.conf.php:293
+msgid "Play next message after deleting current message"
+msgstr ""
+
+#: ../includes/main.conf.php:294
+msgid "Ask caller to review their voicemail before sending"
+msgstr ""
+
+#: ../includes/main.conf.php:295
+msgid "Maximum time in seconds a voicemail will record"
+msgstr ""
+
+#: ../modules/callmonitor.module:37 ../modules/callmonitor.module:257
+msgid "Call Monitor"
+msgstr "Journal d'Appels"
+
+#: ../modules/callmonitor.module:132
+#, php-format
+msgid "Path is not a directory: %s"
+msgstr ""
+
+#: ../modules/callmonitor.module:141 ../modules/voicemail.module:301
+msgid "delete"
+msgstr "Supprimer"
+
+#: ../modules/callmonitor.module:147
+msgid "duration"
+msgstr "Durée supérieure à"
+
+#: ../modules/callmonitor.module:150
+msgid "ignore"
+msgstr "Filtrer"
+
+#: ../modules/callmonitor.module:159 ../modules/voicemail.module:322
+msgid "Date"
+msgstr "Date"
+
+#: ../modules/callmonitor.module:163 ../modules/voicemail.module:326
+msgid "Caller ID"
+msgstr "ID Appelant"
+
+#: ../modules/callmonitor.module:165
+msgid "Source"
+msgstr ""
+
+#: ../modules/callmonitor.module:167
+msgid "Destination"
+msgstr ""
+
+#: ../modules/callmonitor.module:169
+msgid "Context"
+msgstr "Contexte"
+
+#: ../modules/callmonitor.module:171 ../modules/voicemail.module:332
+msgid "Duration"
+msgstr "Durée"
+
+#: ../modules/callmonitor.module:202
+msgid "Monitor"
+msgstr "Enregistrement"
+
+#: ../modules/callmonitor.module:222 ../modules/voicemail.module:373
+msgid "play"
+msgstr "Ecouter"
+
+#: ../modules/callmonitor.module:259
+#, php-format
+msgid "Call Monitor for %s (%s)"
+msgstr "Journal d'Appels de %s (%s)"
+
+#: ../modules/callmonitor.module:311 ../modules/voicemail.module:475
+msgid "select"
+msgstr "Sélection"
+
+#: ../modules/callmonitor.module:312 ../modules/voicemail.module:476
+msgid "all"
+msgstr "Tous"
+
+#: ../modules/callmonitor.module:313 ../modules/voicemail.module:477
+msgid "none"
+msgstr "Aucun"
+
+#: ../modules/callmonitor.module:533
+msgid "Only deletes recording files, not cdr log"
+msgstr "Supprime seulement les fichiers des enregistrements mais pas les CDRs"
+
+#: ../modules/conference.module:55
+msgid "My Conference room"
+msgstr ""
+
+#: ../modules/conference.module:78
+#, fuzzy, php-format
+msgid "Conference for %s (%s%s)"
+msgstr "Boîte Vocale de %s (%s)"
+
+#: ../modules/help.module:39 ../modules/help.module:68
+msgid "Help"
+msgstr "Aide"
+
+#: ../modules/help.module:70
+#, php-format
+msgid "Help for %s (%s)"
+msgstr "Aide: %s (%s)"
+
+#: ../modules/help.module:77
+msgid "Handset Feature Code"
+msgstr ""
+
+#: ../modules/help.module:80
+msgid "Action"
+msgstr ""
+
+#: ../modules/settings.module:61 ../modules/settings.module:667
+msgid "Settings"
+msgstr "Paramètres"
+
+#: ../modules/settings.module:125
+msgid "Call forward number not changed"
+msgstr ""
+
+#: ../modules/settings.module:126
+#, php-format
+msgid ""
+"Number %s must contain dial numbers (characters like '(', '-', and ')' are "
+"ok)"
+msgstr ""
+
+#: ../modules/settings.module:151 ../modules/settings.module:156
+#: ../modules/settings.module:161 ../modules/settings.module:166
+#: ../modules/settings.module:176 ../modules/settings.module:181
+msgid "Voicemail password not changed"
+msgstr "Mot de passe de boite vocale non changé"
+
+#: ../modules/settings.module:152
+msgid "Password and password confirm must not be blank"
+msgstr "Le mot de passe et sa confirmation ne peuvent pas être vides"
+
+#: ../modules/settings.module:157
+#, php-format
+msgid "Passwords must be all numbers and greater than %d digits"
+msgstr ""
+"Le mot de passe doit comporter uniquement des chiffres et doit avoir une "
+"longueur supérieure à %d"
+
+#: ../modules/settings.module:162
+#, php-format
+msgid "Passwords must be all numbers and only %d digits"
+msgstr ""
+"Le mot de passe doit comporter uniquement des chiffres et doit avoir une "
+"longueur de %d"
+
+#: ../modules/settings.module:167
+msgid "Password and password confirm do not match"
+msgstr ""
+
+#: ../modules/settings.module:177 ../modules/settings.module:182
+#: ../modules/settings.module:234 ../modules/settings.module:239
+#, php-format
+msgid "%s does not exist or is not writable"
+msgstr "%s n'existe pas ou n'a pas l'autorisation en écriture"
+
+#: ../modules/settings.module:223
+msgid "Voicemail email and pager address not changed"
+msgstr "Email voicemail et adresse de pager inchangés"
+
+#: ../modules/settings.module:233 ../modules/settings.module:238
+msgid "Voicemail email settings not changed"
+msgstr "Paramètres de la boite vocale inchangés"
+
+#: ../modules/settings.module:385
+msgid "Language:"
+msgstr "Langue"
+
+#: ../modules/settings.module:408
+msgid "Call Routing"
+msgstr "Routage d'appels"
+
+#: ../modules/settings.module:411
+msgid "Call Forwarding:"
+msgstr "Transfert vers:"
+
+#: ../modules/settings.module:419 ../modules/settings.module:507
+msgid "Enable"
+msgstr "Activer"
+
+#: ../modules/settings.module:431
+#, php-format
+msgid "Passwords must be all numbers and only %s digits"
+msgstr ""
+"Le mot de passe doit comporter uniquement des chiffres et seulement 4 "
+"chiffres"
+
+#: ../modules/settings.module:434
+#, fuzzy, php-format
+msgid "Passwords must be all numbers and at least %s digits"
+msgstr ""
+"Le mot de passe doit comporter uniquement des chiffres et seulement 4 "
+"chiffres"
+
+#: ../modules/settings.module:439
+msgid "Voicemail Password:"
+msgstr "Mot de passe de la boîte vocale"
+
+#: ../modules/settings.module:445
+msgid "Enter again to confirm:"
+msgstr "Repetez le mot de passe:"
+
+#: ../modules/settings.module:492
+msgid "Email Voicemail To:"
+msgstr "Adresse émail pour le Voicemail:"
+
+#: ../modules/settings.module:498
+msgid "Pager Voicemail To:"
+msgstr ""
+
+#: ../modules/settings.module:558
+msgid "Audio Format:"
+msgstr "Format audio:"
+
+#: ../modules/settings.module:561
+msgid "Best Quality"
+msgstr "Meilleure Qualité"
+
+#: ../modules/settings.module:562
+msgid "Smallest Download"
+msgstr "Taille réduite"
+
+#: ../modules/settings.module:570
+msgid "Voicemail Settings"
+msgstr "Paramètres boîte vocale"
+
+#: ../modules/settings.module:611
+msgid "Call Monitor Settings"
+msgstr "Enregistrements d'appels"
+
+#: ../modules/settings.module:614
+msgid "Record INCOMING:"
+msgstr "Enregistrements ENTRANTS"
+
+#: ../modules/settings.module:616 ../modules/settings.module:624
+msgid "Always"
+msgstr "Toujours"
+
+#: ../modules/settings.module:617 ../modules/settings.module:625
+msgid "Never"
+msgstr "Jamais"
+
+#: ../modules/settings.module:618 ../modules/settings.module:626
+msgid "On-Demand"
+msgstr "Sur demande"
+
+#: ../modules/settings.module:622
+msgid "Record OUTGOING:"
+msgstr "Enregistrements SORTANTS"
+
+#: ../modules/settings.module:669
+#, php-format
+msgid "Settings for %s (%s)"
+msgstr "Paramètres de %s (%s)"
+
+#: ../modules/settings.module:705
+msgid "Update"
+msgstr "Mettre à jour"
+
+#: ../modules/voicemail.module:45
+msgid "Voicemail"
+msgstr "Boîte Vocale"
+
+#: ../modules/voicemail.module:164
+msgid "A folder must be selected before the message can be moved."
+msgstr "Sélection un dossier avant de déplacer le message."
+
+#: ../modules/voicemail.module:178
+msgid "An extension must be selected before the message can be forwarded."
+msgstr "Sélectionnez d'abord une extension pour le transfert du message."
+
+#: ../modules/voicemail.module:304
+msgid "move_to"
+msgstr "Déplacer vers"
+
+#: ../modules/voicemail.module:307
+msgid "Folder"
+msgstr "Dossier"
+
+#: ../modules/voicemail.module:311
+msgid "forward_to"
+msgstr "Transmettre à"
+
+#: ../modules/voicemail.module:328
+msgid "Priority"
+msgstr "Priorité"
+
+#: ../modules/voicemail.module:330
+msgid "Orig Mailbox"
+msgstr "Boîte Source"
+
+#: ../modules/voicemail.module:362
+msgid "Message"
+msgstr ""
+
+#: ../modules/voicemail.module:377
+msgid "Voicemail recording(s) was not found."
+msgstr "Enregistrement audio non trouvé"
+
+#: ../modules/voicemail.module:378
+#, php-format
+msgid ""
+"On settings page, change voicemail audio format. It is currently set to %s"
+msgstr ""
+
+#: ../modules/voicemail.module:405
+#, fuzzy
+msgid "Voicemail Login not found."
+msgstr "Enregistrement audio non trouvé"
+
+#: ../modules/voicemail.module:406
+msgid "No access to voicemail"
+msgstr "Aucun accès à la boîte vocale"
+
+#: ../modules/voicemail.module:412
+msgid "No Voicemail Recordings for Admin"
+msgstr "Pas d'enregistrement pour Admin"
+
+#: ../modules/voicemail.module:428
+#, php-format
+msgid "Voicemail for %s (%s)"
+msgstr "Boîte Vocale de %s (%s)"
+
+#: ../modules/voicemail.module:678
+#, php-format
+msgid "Could not create mailbox folder %s on the server"
+msgstr "N'a pas pu créer le dossier %s"
+
+#: ../modules/voicemail.module:718
+#, php-format
+msgid "Permission denied on folder %s or %s"
+msgstr ""
+
+#: ../misc/recording_popup.php:39
+msgid "download"
+msgstr ""
+
+#~ msgid "Passwords must be all numbers and only 4 digits"
+#~ msgstr ""
+#~ "Le mot de passe doit comporter que des chiffres et 4 chiffres maximum"
+
+#, fuzzy
+#~ msgid "No Asterisk Manager Interface connection"
+#~ msgstr "Asterisk Call Manager ne répond pas"
+
+#~ msgid "not a directory or not readable"
+#~ msgstr "pas un répertoire ou non lisible"
+
+#~ msgid "of"
+#~ msgstr "de"
+
+#~ msgid "Use your"
+#~ msgstr "Utilisez votre"
+
+#~ msgid "Password must be all numbers and 4 digits"
+#~ msgstr ""
+#~ "Le mot de passe doit comporter que des chiffres et 4 chiffres maximum"
+
+#~ msgid "Check voicemail audio format on settings page to change from"
+#~ msgstr "Vérifiez le format audio à la page paramètres"
+
+#~ msgid "on the server"
+#~ msgstr "sur le serveur"
+
+#~ msgid "No database connection"
+#~ msgstr "Pas de connexion à la base de données"
+
+#~ msgid "Format Audio:"
+#~ msgstr "Format Audio :"
diff --git a/fs_selfservice/fri/locale/he_IL/LC_MESSAGES/ari.mo b/fs_selfservice/fri/locale/he_IL/LC_MESSAGES/ari.mo
new file mode 100644
index 0000000..3b00bd1
--- /dev/null
+++ b/fs_selfservice/fri/locale/he_IL/LC_MESSAGES/ari.mo
Binary files differ
diff --git a/fs_selfservice/fri/locale/he_IL/LC_MESSAGES/ari.po b/fs_selfservice/fri/locale/he_IL/LC_MESSAGES/ari.po
new file mode 100644
index 0000000..7c9ae97
--- /dev/null
+++ b/fs_selfservice/fri/locale/he_IL/LC_MESSAGES/ari.po
@@ -0,0 +1,646 @@
+# translation of ari-he.po to Hebrew
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+# Diego Iastrubni <diego.iastrubni@xorcom.com>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ari-he\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-05-03 08:32-0400\n"
+"PO-Revision-Date: 2006-02-05 11:48+0200\n"
+"Last-Translator: Diego Iastrubni <diego.iastrubni@xorcom.com>\n"
+"Language-Team: Hebrew <xorcom-users@xorcom.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.9.1\n"
+
+#: ../includes/asi.php:46
+msgid "Asterisk Call Manager not responding"
+msgstr "מנהל השיחות של Asterisk ×œ× ×ž×’×™×‘"
+
+#: ../includes/asi.php:54
+msgid "Asterisk authentication failed:"
+msgstr "×”×ימות מול Asterisk נכשל:"
+
+#: ../includes/asi.php:96 ../includes/asi.php:111
+#, fuzzy
+msgid "Asterisk command not understood"
+msgstr "פקודת reload של Asterisk ×œ× ×ž×•×‘× ×ª"
+
+#: ../includes/bootstrap.php:123
+#, php-format
+msgid "To many directories in %s Not all files processed"
+msgstr ""
+
+#: ../includes/bootstrap.php:226
+msgid "ARI requires a version of PHP 4.3 or later"
+msgstr ""
+
+#: ../includes/bootstrap.php:245
+msgid ""
+"PHP PEAR must be installed. Visit http://pear.php.net for help with "
+"installation."
+msgstr ""
+
+#: ../includes/common.php:173
+#, fuzzy
+msgid "ARI does not appear to have access to the Asterisk Manager."
+msgstr "×ין ×פשרות להתחבר למנהל של Asterisk"
+
+#: ../includes/common.php:174
+msgid ""
+"Check the ARI 'main.conf.php' configuration file to set the Asterisk Manager "
+"Account."
+msgstr ""
+
+#: ../includes/common.php:175
+msgid "Check /etc/asterisk/manager.conf for a proper Asterisk Manager Account"
+msgstr ""
+
+#: ../includes/common.php:176
+msgid ""
+"make sure [general] enabled = yes and a 'permit=' line for localhost or the "
+"webserver."
+msgstr ""
+
+#: ../includes/common.php:193 ../includes/common.php:208
+#, fuzzy
+msgid "Check AMP installation, asterisk, and ARI main.conf"
+msgstr ""
+"בדוק ×ת ההתקנה של AMP, בסיס ×”× ×ª×•× ×™× ×©×œ asterisk ×ו הקובץ main.conf של ARI"
+
+#: ../includes/common.php:344
+msgid "Logout"
+msgstr "יצי××”"
+
+#: ../includes/common.php:349
+msgid "Page Not Found."
+msgstr "דף ×œ× × ×ž×¦×"
+
+#: ../includes/display.php:92
+msgid "Search"
+msgstr "חפש"
+
+#: ../includes/display.php:135
+msgid "Searched for"
+msgstr "חיפוש של"
+
+#: ../includes/display.php:139
+#, fuzzy, php-format
+msgid "Results %d - %d of %d"
+msgstr "תוצ×ות"
+
+#: ../includes/display.php:141
+#, fuzzy, php-format
+msgid "Results %d"
+msgstr "תוצ×ות"
+
+#: ../includes/display.php:195
+msgid "First"
+msgstr "ר×שון"
+
+#: ../includes/display.php:208
+msgid "Last"
+msgstr "×חרון"
+
+#: ../includes/login.php:267
+msgid "Incorrect Password"
+msgstr "ססמה ×œ× × ×›×•× ×”"
+
+#: ../includes/login.php:279
+msgid "Incorrect Username or Password"
+msgstr "×©× ×ž×©×ª×ž×© ×œ× × ×›×•×Ÿ ×ו ססמה ×œ× × ×›×•× ×”"
+
+#: ../includes/login.php:402 ../includes/login.php:411
+msgid "Login"
+msgstr "×©× ×ž×©×ª×ž×©"
+
+#: ../includes/login.php:419
+msgid "Password"
+msgstr "ססמה"
+
+#: ../includes/login.php:428
+msgid "Submit"
+msgstr "שלח"
+
+#: ../includes/login.php:436
+msgid "Remember Password"
+msgstr "זכור ססמה"
+
+#: ../includes/login.php:451
+#, fuzzy
+msgid "Use your <b>Voicemail Mailbox and Password</b>"
+msgstr "תיבה קולית וססמה"
+
+#: ../includes/login.php:452
+msgid "This is the same password used for the phone"
+msgstr "זוהי ×ותה ססמה שבשימוש בטלפון שלך"
+
+#: ../includes/login.php:454
+msgid ""
+"For password maintenance or assistance, contact your Phone System "
+"Administrator."
+msgstr "עבור ססמה התחזוקה, ×× × ×¤× ×” ×ל מנהל הטלפוניה שלך."
+
+#: ../includes/main.conf.php:152
+msgid "INBOX"
+msgstr "נכנסות"
+
+#: ../includes/main.conf.php:154
+msgid "Family"
+msgstr "משפחה"
+
+#: ../includes/main.conf.php:156
+msgid "Friends"
+msgstr "חברי×"
+
+#: ../includes/main.conf.php:158
+msgid "Old"
+msgstr "ישני×"
+
+#: ../includes/main.conf.php:160
+msgid "Work"
+msgstr "עבודה"
+
+#: ../includes/main.conf.php:229
+msgid "Directory"
+msgstr ""
+
+#: ../includes/main.conf.php:230
+msgid "Echo Test"
+msgstr ""
+
+#: ../includes/main.conf.php:231 ../modules/callmonitor.module:161
+#: ../modules/voicemail.module:324
+msgid "Time"
+msgstr "שעה"
+
+#: ../includes/main.conf.php:232
+msgid "Weather"
+msgstr ""
+
+#: ../includes/main.conf.php:233
+msgid "Schedule wakeup call"
+msgstr ""
+
+#: ../includes/main.conf.php:234
+msgid "festival test (your extension is XXX)"
+msgstr ""
+
+#: ../includes/main.conf.php:235
+msgid "Activate Call Waiting (deactivated by default)"
+msgstr ""
+
+#: ../includes/main.conf.php:236
+msgid "Deactivate Call Waiting"
+msgstr ""
+
+#: ../includes/main.conf.php:237
+msgid "Call Forwarding System"
+msgstr ""
+
+#: ../includes/main.conf.php:238
+msgid "Disable Call Forwarding"
+msgstr ""
+
+#: ../includes/main.conf.php:239
+#, fuzzy
+msgid "IVR Recording"
+msgstr "הקלטות"
+
+#: ../includes/main.conf.php:240
+msgid "Enable Do-Not-Disturb"
+msgstr ""
+
+#: ../includes/main.conf.php:241
+msgid "Disable Do-Not-Disturb"
+msgstr ""
+
+#: ../includes/main.conf.php:242
+msgid "Call Forward on Busy"
+msgstr ""
+
+#: ../includes/main.conf.php:243
+msgid "Disable Call Forward on Busy"
+msgstr ""
+
+#: ../includes/main.conf.php:244
+msgid "Message Center (does not ask for extension)"
+msgstr ""
+
+#: ../includes/main.conf.php:245
+msgid "Enter Message Center"
+msgstr ""
+
+#: ../includes/main.conf.php:246
+msgid "Playback IVR Recording"
+msgstr ""
+
+#: ../includes/main.conf.php:247
+msgid "Test Fax"
+msgstr ""
+
+#: ../includes/main.conf.php:248
+msgid "Simulate incoming call"
+msgstr ""
+
+#: ../includes/main.conf.php:289
+msgid "Email voicemail as attachment"
+msgstr ""
+
+#: ../includes/main.conf.php:290
+msgid "Say caller id in recording emailed"
+msgstr ""
+
+#: ../includes/main.conf.php:291
+msgid "Say envelop (date/time) in recording emailed"
+msgstr ""
+
+#: ../includes/main.conf.php:292
+msgid "Delete voicemail when emailed"
+msgstr ""
+
+#: ../includes/main.conf.php:293
+msgid "Play next message after deleting current message"
+msgstr ""
+
+#: ../includes/main.conf.php:294
+msgid "Ask caller to review their voicemail before sending"
+msgstr ""
+
+#: ../includes/main.conf.php:295
+msgid "Maximum time in seconds a voicemail will record"
+msgstr ""
+
+#: ../modules/callmonitor.module:37 ../modules/callmonitor.module:257
+msgid "Call Monitor"
+msgstr "צג שיחות"
+
+#: ../modules/callmonitor.module:132
+#, php-format
+msgid "Path is not a directory: %s"
+msgstr ""
+
+#: ../modules/callmonitor.module:141 ../modules/voicemail.module:301
+#, fuzzy
+msgid "delete"
+msgstr "בחר"
+
+#: ../modules/callmonitor.module:147
+#, fuzzy
+msgid "duration"
+msgstr "משך"
+
+#: ../modules/callmonitor.module:150
+#, fuzzy
+msgid "ignore"
+msgstr "כלו×"
+
+#: ../modules/callmonitor.module:159 ../modules/voicemail.module:322
+msgid "Date"
+msgstr "ת×ריך"
+
+#: ../modules/callmonitor.module:163 ../modules/voicemail.module:326
+msgid "Caller ID"
+msgstr "שיחה מזוהה"
+
+#: ../modules/callmonitor.module:165
+msgid "Source"
+msgstr "מקור"
+
+#: ../modules/callmonitor.module:167
+msgid "Destination"
+msgstr "יעד"
+
+#: ../modules/callmonitor.module:169
+msgid "Context"
+msgstr "הקשר"
+
+#: ../modules/callmonitor.module:171 ../modules/voicemail.module:332
+msgid "Duration"
+msgstr "משך"
+
+#: ../modules/callmonitor.module:202
+msgid "Monitor"
+msgstr "ניטור"
+
+#: ../modules/callmonitor.module:222 ../modules/voicemail.module:373
+msgid "play"
+msgstr "נגן"
+
+#: ../modules/callmonitor.module:259
+#, fuzzy, php-format
+msgid "Call Monitor for %s (%s)"
+msgstr "צג שיחות"
+
+#: ../modules/callmonitor.module:311 ../modules/voicemail.module:475
+msgid "select"
+msgstr "בחר"
+
+#: ../modules/callmonitor.module:312 ../modules/voicemail.module:476
+msgid "all"
+msgstr "הכל"
+
+#: ../modules/callmonitor.module:313 ../modules/voicemail.module:477
+msgid "none"
+msgstr "כלו×"
+
+#: ../modules/callmonitor.module:533
+msgid "Only deletes recording files, not cdr log"
+msgstr "מחק הקלטות בלבד, ×œ× ×ת ×¨×™×©×•× ×”Ö¾cdr"
+
+#: ../modules/conference.module:55
+msgid "My Conference room"
+msgstr ""
+
+#: ../modules/conference.module:78
+#, fuzzy, php-format
+msgid "Conference for %s (%s%s)"
+msgstr "תיבה קולית"
+
+#: ../modules/help.module:39 ../modules/help.module:68
+msgid "Help"
+msgstr ""
+
+#: ../modules/help.module:70
+#, fuzzy, php-format
+msgid "Help for %s (%s)"
+msgstr "הגדרות עבור"
+
+#: ../modules/help.module:77
+msgid "Handset Feature Code"
+msgstr ""
+
+#: ../modules/help.module:80
+msgid "Action"
+msgstr ""
+
+#: ../modules/settings.module:61 ../modules/settings.module:667
+msgid "Settings"
+msgstr "הגדרות"
+
+#: ../modules/settings.module:125
+msgid "Call forward number not changed"
+msgstr ""
+
+#: ../modules/settings.module:126
+#, php-format
+msgid ""
+"Number %s must contain dial numbers (characters like '(', '-', and ')' are "
+"ok)"
+msgstr ""
+
+#: ../modules/settings.module:151 ../modules/settings.module:156
+#: ../modules/settings.module:161 ../modules/settings.module:166
+#: ../modules/settings.module:176 ../modules/settings.module:181
+msgid "Voicemail password not changed"
+msgstr "ססמת התיבה הקולית ×œ× ×©×•× ×ª×”"
+
+#: ../modules/settings.module:152
+msgid "Password and password confirm must not be blank"
+msgstr "הסממה וה×ימות של הססמה ×œ× ×™×›×•×œ×™× ×œ×”×™×•×ª רקי×"
+
+#: ../modules/settings.module:157
+#, fuzzy, php-format
+msgid "Passwords must be all numbers and greater than %d digits"
+msgstr "הסממ×ות חייבת להכיל 4 ספרות בלבד"
+
+#: ../modules/settings.module:162
+#, fuzzy, php-format
+msgid "Passwords must be all numbers and only %d digits"
+msgstr "הסממ×ות חייבת להכיל 4 ספרות בלבד"
+
+#: ../modules/settings.module:167
+msgid "Password and password confirm do not match"
+msgstr "הסממה וה×ימות של הססמה ×œ× ×ª×•×מי×"
+
+#: ../modules/settings.module:177 ../modules/settings.module:182
+#: ../modules/settings.module:234 ../modules/settings.module:239
+#, fuzzy, php-format
+msgid "%s does not exist or is not writable"
+msgstr "×œ× ×§×™×™× ×ו ×ין ×פשרות לכתוב עליו"
+
+#: ../modules/settings.module:223
+#, fuzzy
+msgid "Voicemail email and pager address not changed"
+msgstr "ססמת התיבה הקולית ×œ× ×©×•× ×ª×”"
+
+#: ../modules/settings.module:233 ../modules/settings.module:238
+#, fuzzy
+msgid "Voicemail email settings not changed"
+msgstr "ססמת התיבה הקולית ×œ× ×©×•× ×ª×”"
+
+#: ../modules/settings.module:385
+msgid "Language:"
+msgstr "שפה:"
+
+#: ../modules/settings.module:408
+#, fuzzy
+msgid "Call Routing"
+msgstr "הגדרות ניתור שיחות"
+
+#: ../modules/settings.module:411
+#, fuzzy
+msgid "Call Forwarding:"
+msgstr "הגדרות ניתור שיחות"
+
+#: ../modules/settings.module:419 ../modules/settings.module:507
+#, fuzzy
+msgid "Enable"
+msgstr "בטבלה"
+
+#: ../modules/settings.module:431
+#, fuzzy, php-format
+msgid "Passwords must be all numbers and only %s digits"
+msgstr "הסממ×ות חייבת להכיל 4 ספרות בלבד"
+
+#: ../modules/settings.module:434
+#, fuzzy, php-format
+msgid "Passwords must be all numbers and at least %s digits"
+msgstr "הסממ×ות חייבת להכיל 4 ספרות בלבד"
+
+#: ../modules/settings.module:439
+#, fuzzy
+msgid "Voicemail Password:"
+msgstr "ססמת תיבה קולית:"
+
+#: ../modules/settings.module:445
+msgid "Enter again to confirm:"
+msgstr "הכנס שוב ל×ימות:"
+
+#: ../modules/settings.module:492
+#, fuzzy
+msgid "Email Voicemail To:"
+msgstr "תיבה קולית"
+
+#: ../modules/settings.module:498
+#, fuzzy
+msgid "Pager Voicemail To:"
+msgstr "תיבה קולית"
+
+#: ../modules/settings.module:558
+msgid "Audio Format:"
+msgstr "תבנית שמע:"
+
+#: ../modules/settings.module:561
+msgid "Best Quality"
+msgstr "×יכות ×”×›×™ טובה"
+
+#: ../modules/settings.module:562
+msgid "Smallest Download"
+msgstr "הורדה הכי קטנה"
+
+#: ../modules/settings.module:570
+msgid "Voicemail Settings"
+msgstr "הגדרות תיבה קולית"
+
+#: ../modules/settings.module:611
+msgid "Call Monitor Settings"
+msgstr "הגדרות ניתור שיחות"
+
+#: ../modules/settings.module:614
+msgid "Record INCOMING:"
+msgstr "הקלטת שיחות נכנסות:"
+
+#: ../modules/settings.module:616 ../modules/settings.module:624
+msgid "Always"
+msgstr "תמיד"
+
+#: ../modules/settings.module:617 ../modules/settings.module:625
+msgid "Never"
+msgstr "××£ פע×"
+
+#: ../modules/settings.module:618 ../modules/settings.module:626
+msgid "On-Demand"
+msgstr "לפי דרישה"
+
+#: ../modules/settings.module:622
+msgid "Record OUTGOING:"
+msgstr "הקלטה שיחות יוצ×ות:"
+
+#: ../modules/settings.module:669
+#, fuzzy, php-format
+msgid "Settings for %s (%s)"
+msgstr "הגדרות עבור"
+
+#: ../modules/settings.module:705
+msgid "Update"
+msgstr "עדכן"
+
+#: ../modules/voicemail.module:45
+msgid "Voicemail"
+msgstr "תיבה קולית"
+
+#: ../modules/voicemail.module:164
+msgid "A folder must be selected before the message can be moved."
+msgstr "יש לבחור תיקייה לפני ש×פשר להעביר ×ת ההודעה."
+
+#: ../modules/voicemail.module:178
+msgid "An extension must be selected before the message can be forwarded."
+msgstr "יש לבחור שלוחה לפני ש×פשר העביר ×ת השיחה הל××”."
+
+#: ../modules/voicemail.module:304
+msgid "move_to"
+msgstr ""
+
+#: ../modules/voicemail.module:307
+msgid "Folder"
+msgstr "תיקייה"
+
+#: ../modules/voicemail.module:311
+msgid "forward_to"
+msgstr ""
+
+#: ../modules/voicemail.module:328
+msgid "Priority"
+msgstr "עדיפות"
+
+#: ../modules/voicemail.module:330
+msgid "Orig Mailbox"
+msgstr "תיבת דו×ר מקורית"
+
+#: ../modules/voicemail.module:362
+msgid "Message"
+msgstr ""
+
+#: ../modules/voicemail.module:377
+msgid "Voicemail recording(s) was not found."
+msgstr "הקלטת תיבה קולית ×œ× × ×ž×¦××”."
+
+#: ../modules/voicemail.module:378
+#, php-format
+msgid ""
+"On settings page, change voicemail audio format. It is currently set to %s"
+msgstr ""
+
+#: ../modules/voicemail.module:405
+#, fuzzy
+msgid "Voicemail Login not found."
+msgstr "×©× ×”×ž×©×ª×ž×© של תיבת הקול"
+
+#: ../modules/voicemail.module:406
+msgid "No access to voicemail"
+msgstr "×ין גישה לתיבת הקול"
+
+#: ../modules/voicemail.module:412
+msgid "No Voicemail Recordings for Admin"
+msgstr "×ין הקלטות בתיבת הקול של המנהל"
+
+#: ../modules/voicemail.module:428
+#, fuzzy, php-format
+msgid "Voicemail for %s (%s)"
+msgstr "תיבה קולית"
+
+#: ../modules/voicemail.module:678
+#, fuzzy, php-format
+msgid "Could not create mailbox folder %s on the server"
+msgstr "×ין ×פשרות ליצור ×ת תיקיית הדו×ר"
+
+#: ../modules/voicemail.module:718
+#, fuzzy, php-format
+msgid "Permission denied on folder %s or %s"
+msgstr "הגישה נדחתה בתיקייה"
+
+#: ../misc/recording_popup.php:39
+msgid "download"
+msgstr "הורדה"
+
+#~ msgid "Passwords must be all numbers and only 4 digits"
+#~ msgstr "הסממ×ות חייבת להכיל 4 ספרות בלבד"
+
+#~ msgid "Folders"
+#~ msgstr "תיקיות"
+
+#~ msgid "Login used"
+#~ msgstr "×©× ×”×©×ž×©×ª×©"
+
+#, fuzzy
+#~ msgid "No Asterisk Manager Interface connection"
+#~ msgstr "מנהל השיחות של Asterisk ×œ× ×ž×’×™×‘"
+
+#~ msgid "not a directory or not readable"
+#~ msgstr "×œ× ×¡×¤×¨×™×™×”, ×ו ×ין ×פשרות לקר×"
+
+#~ msgid "of"
+#~ msgstr "של "
+
+#~ msgid "Use your"
+#~ msgstr "השתמש בשלך"
+
+#~ msgid "for"
+#~ msgstr "עבור"
+
+#~ msgid "Password must be all numbers and 4 digits"
+#~ msgstr "הסממה חייבת להכיל 4 ספרות בלבד"
+
+#, fuzzy
+#~ msgid "Check voicemail audio format on settings page to change from"
+#~ msgstr "בחר ×ת תבנית השמע של התיבה הקולית בחלון ההגדרות "
+
+#~ msgid "on the server"
+#~ msgstr "ברשת"
+
+#~ msgid "No database connection"
+#~ msgstr "×ין חיבור לבסיס נתוני×"
diff --git a/fs_selfservice/fri/locale/hu_HU/LC_MESSAGES/ari.mo b/fs_selfservice/fri/locale/hu_HU/LC_MESSAGES/ari.mo
new file mode 100644
index 0000000..ff5a922
--- /dev/null
+++ b/fs_selfservice/fri/locale/hu_HU/LC_MESSAGES/ari.mo
Binary files differ
diff --git a/fs_selfservice/fri/locale/hu_HU/LC_MESSAGES/ari.po b/fs_selfservice/fri/locale/hu_HU/LC_MESSAGES/ari.po
new file mode 100644
index 0000000..c9d9e44
--- /dev/null
+++ b/fs_selfservice/fri/locale/hu_HU/LC_MESSAGES/ari.po
@@ -0,0 +1,645 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-05-03 08:32-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Varasdy Imre <csvarasdy@softpbx.hu>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../includes/asi.php:46
+msgid "Asterisk Call Manager not responding"
+msgstr "Asterisk Call Manager nem válaszol"
+
+#: ../includes/asi.php:54
+msgid "Asterisk authentication failed:"
+msgstr "Asterisk bejelentkezés elutasítva:"
+
+#: ../includes/asi.php:96 ../includes/asi.php:111
+#, fuzzy
+msgid "Asterisk command not understood"
+msgstr "Asterisk frissítés parancs ismeretlen"
+
+#: ../includes/bootstrap.php:123
+#, php-format
+msgid "To many directories in %s Not all files processed"
+msgstr ""
+
+#: ../includes/bootstrap.php:226
+msgid "ARI requires a version of PHP 4.3 or later"
+msgstr ""
+
+#: ../includes/bootstrap.php:245
+msgid ""
+"PHP PEAR must be installed. Visit http://pear.php.net for help with "
+"installation."
+msgstr ""
+
+#: ../includes/common.php:173
+#, fuzzy
+msgid "ARI does not appear to have access to the Asterisk Manager."
+msgstr "Nem tudok csatlakozni az Asterisk Managerhez"
+
+#: ../includes/common.php:174
+msgid ""
+"Check the ARI 'main.conf.php' configuration file to set the Asterisk Manager "
+"Account."
+msgstr ""
+
+#: ../includes/common.php:175
+msgid "Check /etc/asterisk/manager.conf for a proper Asterisk Manager Account"
+msgstr ""
+
+#: ../includes/common.php:176
+msgid ""
+"make sure [general] enabled = yes and a 'permit=' line for localhost or the "
+"webserver."
+msgstr ""
+
+#: ../includes/common.php:193 ../includes/common.php:208
+#, fuzzy
+msgid "Check AMP installation, asterisk, and ARI main.conf"
+msgstr ""
+"Ellen&otilde;rizze az AMP telepítést, asterisk adatbázist, vagy az ARI main."
+"conf filet"
+
+#: ../includes/common.php:344
+msgid "Logout"
+msgstr "Kilépés"
+
+#: ../includes/common.php:349
+msgid "Page Not Found."
+msgstr "Nincs ilyen oldal."
+
+#: ../includes/display.php:92
+msgid "Search"
+msgstr "Keres"
+
+#: ../includes/display.php:135
+msgid "Searched for"
+msgstr "Keresés"
+
+#: ../includes/display.php:139
+#, fuzzy, php-format
+msgid "Results %d - %d of %d"
+msgstr "Eredmény"
+
+#: ../includes/display.php:141
+#, fuzzy, php-format
+msgid "Results %d"
+msgstr "Eredmény"
+
+#: ../includes/display.php:195
+msgid "First"
+msgstr "Els&otilde;"
+
+#: ../includes/display.php:208
+msgid "Last"
+msgstr "Utolsó"
+
+#: ../includes/login.php:267
+msgid "Incorrect Password"
+msgstr "Hibás jelszó"
+
+#: ../includes/login.php:279
+msgid "Incorrect Username or Password"
+msgstr "Rossz Felhasználonév vagy jelszó"
+
+#: ../includes/login.php:402 ../includes/login.php:411
+msgid "Login"
+msgstr "Azonosító"
+
+#: ../includes/login.php:419
+msgid "Password"
+msgstr "Jelszó"
+
+#: ../includes/login.php:428
+msgid "Submit"
+msgstr "Rögzít"
+
+#: ../includes/login.php:436
+msgid "Remember Password"
+msgstr "Jelszó megjegyzése"
+
+#: ../includes/login.php:451
+#, fuzzy
+msgid "Use your <b>Voicemail Mailbox and Password</b>"
+msgstr "Hangposta és Jelszó"
+
+#: ../includes/login.php:452
+msgid "This is the same password used for the phone"
+msgstr "A jelszó ugyanaz, mint a telefonhoz"
+
+#: ../includes/login.php:454
+msgid ""
+"For password maintenance or assistance, contact your Phone System "
+"Administrator."
+msgstr ""
+"Om du har problem med lösenord eller behöver hjälp ska du kontakta din vÃ"
+"¤xel ansvarig"
+
+#: ../includes/main.conf.php:152
+msgid "INBOX"
+msgstr "Bejövõ"
+
+#: ../includes/main.conf.php:154
+msgid "Family"
+msgstr "Család"
+
+#: ../includes/main.conf.php:156
+msgid "Friends"
+msgstr "Barátok"
+
+#: ../includes/main.conf.php:158
+msgid "Old"
+msgstr "Régi"
+
+#: ../includes/main.conf.php:160
+msgid "Work"
+msgstr "Munka"
+
+#: ../includes/main.conf.php:229
+msgid "Directory"
+msgstr ""
+
+#: ../includes/main.conf.php:230
+msgid "Echo Test"
+msgstr ""
+
+#: ../includes/main.conf.php:231 ../modules/callmonitor.module:161
+#: ../modules/voicemail.module:324
+msgid "Time"
+msgstr "Idõ"
+
+#: ../includes/main.conf.php:232
+msgid "Weather"
+msgstr ""
+
+#: ../includes/main.conf.php:233
+msgid "Schedule wakeup call"
+msgstr ""
+
+#: ../includes/main.conf.php:234
+msgid "festival test (your extension is XXX)"
+msgstr ""
+
+#: ../includes/main.conf.php:235
+msgid "Activate Call Waiting (deactivated by default)"
+msgstr ""
+
+#: ../includes/main.conf.php:236
+msgid "Deactivate Call Waiting"
+msgstr ""
+
+#: ../includes/main.conf.php:237
+msgid "Call Forwarding System"
+msgstr ""
+
+#: ../includes/main.conf.php:238
+msgid "Disable Call Forwarding"
+msgstr ""
+
+#: ../includes/main.conf.php:239
+#, fuzzy
+msgid "IVR Recording"
+msgstr "Felvétel"
+
+#: ../includes/main.conf.php:240
+msgid "Enable Do-Not-Disturb"
+msgstr ""
+
+#: ../includes/main.conf.php:241
+msgid "Disable Do-Not-Disturb"
+msgstr ""
+
+#: ../includes/main.conf.php:242
+msgid "Call Forward on Busy"
+msgstr ""
+
+#: ../includes/main.conf.php:243
+msgid "Disable Call Forward on Busy"
+msgstr ""
+
+#: ../includes/main.conf.php:244
+msgid "Message Center (does not ask for extension)"
+msgstr ""
+
+#: ../includes/main.conf.php:245
+msgid "Enter Message Center"
+msgstr ""
+
+#: ../includes/main.conf.php:246
+msgid "Playback IVR Recording"
+msgstr ""
+
+#: ../includes/main.conf.php:247
+msgid "Test Fax"
+msgstr ""
+
+#: ../includes/main.conf.php:248
+msgid "Simulate incoming call"
+msgstr ""
+
+#: ../includes/main.conf.php:289
+msgid "Email voicemail as attachment"
+msgstr ""
+
+#: ../includes/main.conf.php:290
+msgid "Say caller id in recording emailed"
+msgstr ""
+
+#: ../includes/main.conf.php:291
+msgid "Say envelop (date/time) in recording emailed"
+msgstr ""
+
+#: ../includes/main.conf.php:292
+msgid "Delete voicemail when emailed"
+msgstr ""
+
+#: ../includes/main.conf.php:293
+msgid "Play next message after deleting current message"
+msgstr ""
+
+#: ../includes/main.conf.php:294
+msgid "Ask caller to review their voicemail before sending"
+msgstr ""
+
+#: ../includes/main.conf.php:295
+msgid "Maximum time in seconds a voicemail will record"
+msgstr ""
+
+#: ../modules/callmonitor.module:37 ../modules/callmonitor.module:257
+msgid "Call Monitor"
+msgstr "Hangrögzítés"
+
+#: ../modules/callmonitor.module:132
+#, php-format
+msgid "Path is not a directory: %s"
+msgstr ""
+
+#: ../modules/callmonitor.module:141 ../modules/voicemail.module:301
+msgid "delete"
+msgstr "Töröl"
+
+#: ../modules/callmonitor.module:147
+#, fuzzy
+msgid "duration"
+msgstr "Hossz"
+
+#: ../modules/callmonitor.module:150
+#, fuzzy
+msgid "ignore"
+msgstr "semmi"
+
+#: ../modules/callmonitor.module:159 ../modules/voicemail.module:322
+msgid "Date"
+msgstr "Dátum"
+
+#: ../modules/callmonitor.module:163 ../modules/voicemail.module:326
+msgid "Caller ID"
+msgstr "Hivószám"
+
+#: ../modules/callmonitor.module:165
+msgid "Source"
+msgstr "Hívó"
+
+#: ../modules/callmonitor.module:167
+msgid "Destination"
+msgstr "Hívott"
+
+#: ../modules/callmonitor.module:169
+msgid "Context"
+msgstr "Csoport"
+
+#: ../modules/callmonitor.module:171 ../modules/voicemail.module:332
+msgid "Duration"
+msgstr "Hossz"
+
+#: ../modules/callmonitor.module:202
+msgid "Monitor"
+msgstr "Rögzítés"
+
+#: ../modules/callmonitor.module:222 ../modules/voicemail.module:373
+msgid "play"
+msgstr "Lejátszás"
+
+#: ../modules/callmonitor.module:259
+#, fuzzy, php-format
+msgid "Call Monitor for %s (%s)"
+msgstr "Hangrögzítés"
+
+#: ../modules/callmonitor.module:311 ../modules/voicemail.module:475
+msgid "select"
+msgstr "Választ"
+
+#: ../modules/callmonitor.module:312 ../modules/voicemail.module:476
+msgid "all"
+msgstr "Mind"
+
+#: ../modules/callmonitor.module:313 ../modules/voicemail.module:477
+msgid "none"
+msgstr "semmi"
+
+#: ../modules/callmonitor.module:533
+msgid "Only deletes recording files, not cdr log"
+msgstr "Csak a hangfileokat törli, a CDR-t nem"
+
+#: ../modules/conference.module:55
+msgid "My Conference room"
+msgstr ""
+
+#: ../modules/conference.module:78
+#, fuzzy, php-format
+msgid "Conference for %s (%s%s)"
+msgstr "Hangposta"
+
+#: ../modules/help.module:39 ../modules/help.module:68
+msgid "Help"
+msgstr ""
+
+#: ../modules/help.module:70
+#, fuzzy, php-format
+msgid "Help for %s (%s)"
+msgstr "Beállítások"
+
+#: ../modules/help.module:77
+msgid "Handset Feature Code"
+msgstr ""
+
+#: ../modules/help.module:80
+msgid "Action"
+msgstr ""
+
+#: ../modules/settings.module:61 ../modules/settings.module:667
+msgid "Settings"
+msgstr "Beállítások"
+
+#: ../modules/settings.module:125
+msgid "Call forward number not changed"
+msgstr ""
+
+#: ../modules/settings.module:126
+#, php-format
+msgid ""
+"Number %s must contain dial numbers (characters like '(', '-', and ')' are "
+"ok)"
+msgstr ""
+
+#: ../modules/settings.module:151 ../modules/settings.module:156
+#: ../modules/settings.module:161 ../modules/settings.module:166
+#: ../modules/settings.module:176 ../modules/settings.module:181
+msgid "Voicemail password not changed"
+msgstr "A jelszót nem változtattam meg"
+
+#: ../modules/settings.module:152
+msgid "Password and password confirm must not be blank"
+msgstr "A jelszavakat nem hagyhatja üresen"
+
+#: ../modules/settings.module:157
+#, fuzzy, php-format
+msgid "Passwords must be all numbers and greater than %d digits"
+msgstr "A jelszó csak számból állhat és csak 4 karakteres lehet"
+
+#: ../modules/settings.module:162
+#, fuzzy, php-format
+msgid "Passwords must be all numbers and only %d digits"
+msgstr "A jelszó csak számból állhat és csak 4 karakteres lehet"
+
+#: ../modules/settings.module:167
+msgid "Password and password confirm do not match"
+msgstr "A két jelszó nem egyezik"
+
+#: ../modules/settings.module:177 ../modules/settings.module:182
+#: ../modules/settings.module:234 ../modules/settings.module:239
+#, fuzzy, php-format
+msgid "%s does not exist or is not writable"
+msgstr "nem létezik vagy nem írható"
+
+#: ../modules/settings.module:223
+#, fuzzy
+msgid "Voicemail email and pager address not changed"
+msgstr "A jelszót nem változtattam meg"
+
+#: ../modules/settings.module:233 ../modules/settings.module:238
+#, fuzzy
+msgid "Voicemail email settings not changed"
+msgstr "A jelszót nem változtattam meg"
+
+#: ../modules/settings.module:385
+msgid "Language:"
+msgstr "Nyelv"
+
+#: ../modules/settings.module:408
+#, fuzzy
+msgid "Call Routing"
+msgstr "Hangrögzítés beállításai"
+
+#: ../modules/settings.module:411
+#, fuzzy
+msgid "Call Forwarding:"
+msgstr "Hangrögzítés beállításai"
+
+#: ../modules/settings.module:419 ../modules/settings.module:507
+#, fuzzy
+msgid "Enable"
+msgstr "táblában"
+
+#: ../modules/settings.module:431
+#, fuzzy, php-format
+msgid "Passwords must be all numbers and only %s digits"
+msgstr "A jelszó csak számból állhat és csak 4 karakteres lehet"
+
+#: ../modules/settings.module:434
+#, fuzzy, php-format
+msgid "Passwords must be all numbers and at least %s digits"
+msgstr "A jelszó csak számból állhat és csak 4 karakteres lehet"
+
+#: ../modules/settings.module:439
+#, fuzzy
+msgid "Voicemail Password:"
+msgstr "Hangposta jelszó:"
+
+#: ../modules/settings.module:445
+msgid "Enter again to confirm:"
+msgstr "Irja be újra:"
+
+#: ../modules/settings.module:492
+#, fuzzy
+msgid "Email Voicemail To:"
+msgstr "Hangposta"
+
+#: ../modules/settings.module:498
+#, fuzzy
+msgid "Pager Voicemail To:"
+msgstr "Hangposta"
+
+#: ../modules/settings.module:558
+msgid "Audio Format:"
+msgstr "Hangformátum:"
+
+#: ../modules/settings.module:561
+msgid "Best Quality"
+msgstr "Legjobb minõség"
+
+#: ../modules/settings.module:562
+msgid "Smallest Download"
+msgstr "Legkisebb méret"
+
+#: ../modules/settings.module:570
+msgid "Voicemail Settings"
+msgstr "Hangposta beállítások"
+
+#: ../modules/settings.module:611
+msgid "Call Monitor Settings"
+msgstr "Hangrögzítés beállításai"
+
+#: ../modules/settings.module:614
+msgid "Record INCOMING:"
+msgstr "Hangrögzítés - Bejövõ:"
+
+#: ../modules/settings.module:616 ../modules/settings.module:624
+msgid "Always"
+msgstr "Mindíg"
+
+#: ../modules/settings.module:617 ../modules/settings.module:625
+msgid "Never"
+msgstr "Soha"
+
+#: ../modules/settings.module:618 ../modules/settings.module:626
+msgid "On-Demand"
+msgstr "Igény esetén"
+
+#: ../modules/settings.module:622
+msgid "Record OUTGOING:"
+msgstr "Hangrögzítés - Bejövõ:"
+
+#: ../modules/settings.module:669
+#, fuzzy, php-format
+msgid "Settings for %s (%s)"
+msgstr "Beállítások"
+
+#: ../modules/settings.module:705
+msgid "Update"
+msgstr "Frissít"
+
+#: ../modules/voicemail.module:45
+msgid "Voicemail"
+msgstr "Hangposta"
+
+#: ../modules/voicemail.module:164
+msgid "A folder must be selected before the message can be moved."
+msgstr "Ãthelyezés elõtt ki kell jelölni egy mappát."
+
+#: ../modules/voicemail.module:178
+msgid "An extension must be selected before the message can be forwarded."
+msgstr "Üzenet áthelyezése elõtt ki kell jelölni egy melléket."
+
+#: ../modules/voicemail.module:304
+msgid "move_to"
+msgstr "Ãthelyez"
+
+#: ../modules/voicemail.module:307
+#, fuzzy
+msgid "Folder"
+msgstr "Mappa"
+
+#: ../modules/voicemail.module:311
+msgid "forward_to"
+msgstr "Ãtirányít"
+
+#: ../modules/voicemail.module:328
+msgid "Priority"
+msgstr "Prioritás"
+
+#: ../modules/voicemail.module:330
+msgid "Orig Mailbox"
+msgstr "Eredeti Postafiók"
+
+#: ../modules/voicemail.module:362
+msgid "Message"
+msgstr ""
+
+#: ../modules/voicemail.module:377
+msgid "Voicemail recording(s) was not found."
+msgstr "Nem találok rögzítés(eke)t."
+
+#: ../modules/voicemail.module:378
+#, php-format
+msgid ""
+"On settings page, change voicemail audio format. It is currently set to %s"
+msgstr ""
+
+#: ../modules/voicemail.module:405
+#, fuzzy
+msgid "Voicemail Login not found."
+msgstr "Hangposta Azonosító nem található"
+
+#: ../modules/voicemail.module:406
+msgid "No access to voicemail"
+msgstr "Nincs hozzáférés a hangpostához"
+
+#: ../modules/voicemail.module:412
+msgid "No Voicemail Recordings for Admin"
+msgstr "Nincs hangfelvétel az Admin részére"
+
+#: ../modules/voicemail.module:428
+#, fuzzy, php-format
+msgid "Voicemail for %s (%s)"
+msgstr "Hangposta"
+
+#: ../modules/voicemail.module:678
+#, fuzzy, php-format
+msgid "Could not create mailbox folder %s on the server"
+msgstr "Nem tudom létrehozni a hangposta mappát"
+
+#: ../modules/voicemail.module:718
+#, fuzzy, php-format
+msgid "Permission denied on folder %s or %s"
+msgstr "Hozzáférés elutasítva"
+
+#: ../misc/recording_popup.php:39
+msgid "download"
+msgstr "letöltés"
+
+#~ msgid "Passwords must be all numbers and only 4 digits"
+#~ msgstr "A jelszó csak számból állhat és csak 4 karakteres lehet"
+
+#~ msgid "Folders"
+#~ msgstr "Mappák"
+
+#~ msgid "Login used"
+#~ msgstr "Azonosító használt"
+
+#, fuzzy
+#~ msgid "No Asterisk Manager Interface connection"
+#~ msgstr "Asterisk Call Manager nem válaszol"
+
+#~ msgid "not a directory or not readable"
+#~ msgstr "nem k&ouml;nyvtár vagy nem olvasható"
+
+#~ msgid "of"
+#~ msgstr "av"
+
+#~ msgid "Use your"
+#~ msgstr "Használja "
+
+#~ msgid "for"
+#~ msgstr " - "
+
+#~ msgid "Password must be all numbers and 4 digits"
+#~ msgstr "A jelszó csak számból állhat és 4 karakteres lehet"
+
+#~ msgid "on the server"
+#~ msgstr "a serveren"
+
+#~ msgid "No database connection"
+#~ msgstr "Nincs adatbázis kapcsolat"
diff --git a/fs_selfservice/fri/locale/it_IT/LC_MESSAGES/ari.mo b/fs_selfservice/fri/locale/it_IT/LC_MESSAGES/ari.mo
new file mode 100644
index 0000000..d5a7da8
--- /dev/null
+++ b/fs_selfservice/fri/locale/it_IT/LC_MESSAGES/ari.mo
Binary files differ
diff --git a/fs_selfservice/fri/locale/it_IT/LC_MESSAGES/ari.po b/fs_selfservice/fri/locale/it_IT/LC_MESSAGES/ari.po
new file mode 100644
index 0000000..db245f9
--- /dev/null
+++ b/fs_selfservice/fri/locale/it_IT/LC_MESSAGES/ari.po
@@ -0,0 +1,999 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: 1.1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-08-24 12:33+0200\n"
+"PO-Revision-Date: 2007-08-25 22:41-0600\n"
+"Last-Translator: Francesco Romano\n"
+"Language-Team: Italian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../includes/asi.php:46
+msgid "Asterisk Call Manager not responding"
+msgstr "Il Call Manager di Asterisk non risponde"
+
+#: ../includes/asi.php:54
+msgid "Asterisk authentication failed:"
+msgstr "Autenticazione Asterisk fallita:"
+
+#
+#: ../includes/asi.php:96 ../includes/asi.php:111 ../includes/asi.php:130
+#: ../includes/asi.php:144
+msgid "Asterisk command not understood"
+msgstr "comando reload di Asterisk non eseguito"
+
+#
+#: ../includes/bootstrap.php:123
+#, php-format
+msgid "To many directories in %s Not all files processed"
+msgstr "Troppe directory in %s Non tutti i files sono stati processati"
+
+#: ../includes/bootstrap.php:226
+#, fuzzy
+msgid "ARI requires a version of PHP 4.3 or later"
+msgstr "ARI richiede PHP 4.0 o superiore"
+
+#: ../includes/bootstrap.php:245
+msgid ""
+"PHP PEAR must be installed. Visit http://pear.php.net for help with "
+"installation."
+msgstr ""
+"PHP PEAR deve essere installato. Visitare http://pear.php.net per aiuto "
+"nell'installazione."
+
+#
+#: ../includes/common.php:180
+msgid "ARI does not appear to have access to the Asterisk Manager."
+msgstr "Impossibile connettersi all'Asterisk Manager"
+
+#: ../includes/common.php:181
+##, fuzzy
+msgid ""
+"Check the ARI 'main.conf.php' configuration file to set the Asterisk Manager "
+"Account."
+msgstr ""
+"Controllare il file di configurazione main.conf di ARI per l'impostazione "
+"sull'account dell'Asterisk Manager."
+
+#: ../includes/common.php:182
+msgid "Check /etc/asterisk/manager.conf for a proper Asterisk Manager Account"
+msgstr ""
+"Controllare /etc/asterisk/manager.conf per un valido account Asterisk Manager"
+
+#: ../includes/common.php:183
+msgid ""
+"make sure [general] enabled = yes and a 'permit=' line for localhost or the "
+"webserver."
+msgstr ""
+"assicurarsi che in [general] sia presente enable = yes e la riga 'permit=' "
+"con l'indirizzo localhost o il webserver."
+
+#
+#: ../includes/common.php:200 ../includes/common.php:215
+msgid "Check AMP installation, asterisk, and ARI main.conf"
+msgstr ""
+"Controllare l'installazione di AMP, il database di asterisk o il file main."
+"conf di ARI"
+
+#: ../includes/common.php:351
+msgid "Logout"
+msgstr "Esci"
+
+#: ../includes/common.php:356
+msgid "Page Not Found."
+msgstr "Pagina Non Trovata"
+
+#: ../includes/display.php:92
+msgid "Search"
+msgstr "Cerca"
+
+#: ../includes/display.php:135
+msgid "Searched for"
+msgstr "Ricerca per"
+
+#
+#: ../includes/display.php:139
+##, fuzzy, php-format
+msgid "Results %d - %d of %d"
+msgstr "Risultati %d - %d di %d"
+
+#
+#: ../includes/display.php:141
+#, php-format
+msgid "Results %d"
+msgstr "Risultati %d"
+
+#: ../includes/display.php:195
+msgid "First"
+msgstr "Prima"
+
+#: ../includes/display.php:208
+msgid "Last"
+msgstr "Ultima"
+
+#: ../includes/login.php:267
+msgid "Incorrect Password"
+msgstr "Password sbagliata"
+
+#: ../includes/login.php:279
+msgid "Incorrect Username or Password"
+msgstr "Nome Utente o Password sbagliati"
+
+#: ../includes/login.php:404 ../includes/login.php:413
+msgid "Login"
+msgstr "Login"
+
+#: ../includes/login.php:421
+msgid "Password"
+msgstr "Password"
+
+#: ../includes/login.php:430
+msgid "Submit"
+msgstr "Invia"
+
+#: ../includes/login.php:438
+msgid "Remember Password"
+msgstr "Ricorda Password"
+
+#
+#: ../includes/login.php:453
+msgid "Use your <b>Voicemail Mailbox and Password</b>"
+msgstr ""
+"Utilizzare come login il numero della <b>Casella Vocale e relativa "
+"Password</b>"
+
+#: ../includes/login.php:454
+msgid "This is the same password used for the phone"
+msgstr "Sono gli stessi utilizzati dal proprio telefono"
+
+#: ../includes/login.php:456
+msgid ""
+"For password maintenance or assistance, contact your Phone System "
+"Administrator."
+msgstr ""
+"Per assistenza o manutenzione, contattare l'amministratore del Centralino."
+
+#: ../includes/main.conf.php:150
+msgid "INBOX"
+msgstr "NUOVI"
+
+#: ../includes/main.conf.php:152
+msgid "Family"
+msgstr "Personali"
+
+#: ../includes/main.conf.php:154
+msgid "Friends"
+msgstr "Amici"
+
+#: ../includes/main.conf.php:156
+msgid "Old"
+msgstr "Vecchi"
+
+#: ../includes/main.conf.php:158
+msgid "Work"
+msgstr "Lavoro"
+
+#: ../includes/main.conf.php:237
+msgid "Call Forward All Activate"
+msgstr "Attivazione Trasferimento di Chiamata Incondizionato"
+
+#: ../includes/main.conf.php:238
+msgid "Call Forward All Deactivate"
+msgstr "Disattivazione Trasferimento di Chiamata Incondizionato"
+
+#: ../includes/main.conf.php:239
+msgid "Call Forward All Prompting Deactivate"
+msgstr "Disattivazione Trasferimento di Chiamata Incondizionato (chiede dettagli)"
+
+#: ../includes/main.conf.php:240
+msgid "Call Forward Busy Activate"
+msgstr "Attivazione Trasferimento di Chiamata su Occupato"
+
+#: ../includes/main.conf.php:241
+msgid "Call Forward Busy Deactivate"
+msgstr "Disattivazione Trasferimento di Chiamata su Occupato"
+
+#: ../includes/main.conf.php:242
+msgid "Call Forward Busy Prompting Deactivate"
+msgstr "Disattivazione Trasferimento di Chiamata su Occupato (chiede dettagli)"
+
+#: ../includes/main.conf.php:243
+msgid "Call Forward No Answer/Unavailable Activate"
+msgstr "Attivazione Trasferimento di Chiamata su nessuna risposta"
+
+#: ../includes/main.conf.php:244
+msgid "Call Forward No Answer/Unavailable Deactivate"
+msgstr "Disattivazione Trasferimento di Chiamata su nessuna risposta"
+
+#: ../includes/main.conf.php:245
+msgid "Call Waiting - Activate"
+msgstr "Attivazione Avviso di chiamata"
+
+#: ../includes/main.conf.php:247
+msgid "Do-Not-Disturb Activate"
+msgstr "Attivazione Non-Disturbare"
+
+#: ../includes/main.conf.php:248
+msgid "Do-Not-Disturb Deactivate"
+msgstr "Disattivazione Non-Disturbare"
+
+#: ../includes/main.conf.php:249
+msgid "My Voicemail"
+msgstr "Propria Casella Vocale"
+
+#: ../includes/main.conf.php:250
+msgid "Dial Voicemail"
+msgstr "Casella Vocale"
+
+#: ../includes/main.conf.php:303
+msgid "Email voicemail as attachment"
+msgstr "Invia messaggio vocale come allegato email"
+
+#: ../includes/main.conf.php:304
+msgid "Say caller id in recording emailed"
+msgstr "Riproduci ID chiamante nella registrazione inviata"
+
+#: ../includes/main.conf.php:305
+msgid "Say envelop (date/time) in recording emailed"
+msgstr "Riproduci data/ora nella registrazione inviata"
+
+#: ../includes/main.conf.php:306
+msgid "Delete voicemail when emailed"
+msgstr "Elimina messaggio vocale dopo aver spedito l'email"
+
+#: ../includes/main.conf.php:307
+msgid "Play next message after deleting current message"
+msgstr ""
+"Riproduci il messaggio seguente dopo aver eliminato il messaggio corrente"
+
+#: ../includes/main.conf.php:308
+msgid "Ask caller to review their voicemail before sending"
+msgstr ""
+
+#: ../includes/main.conf.php:309
+msgid "Maximum time in seconds a voicemail will record"
+msgstr ""
+
+#: ../modules/VmX.module:58
+msgid "VmX&#8482 Locator"
+msgstr "VmX&#8482 Locator"
+
+#: ../modules/VmX.module:115
+msgid ""
+"Your Premium VmX Locator service has been disabled, REFRESH your browser to "
+"remove this message"
+msgstr ""
+"Il proprio VmX Locator è stato disabilitato, AGGIORNARE la pagina per "
+"rimuovere questo messaggio"
+
+#: ../modules/VmX.module:116 ../modules/followme.module:101
+#, php-format
+msgid ""
+"Check with your Telephone System Administrator if you think there is a "
+"problem"
+msgstr ""
+"Contattare l'amministratore del Sistema Telefonico se ci sono dei problemi"
+
+#: ../modules/VmX.module:147
+msgid "Option 0 not changed"
+msgstr "Opzione 0 non cambiata"
+
+#
+#: ../modules/VmX.module:148 ../modules/VmX.module:181
+#: ../modules/VmX.module:201 ../modules/phonefeatures.module:302
+#, php-format
+msgid ""
+"Number %s must contain dial numbers (characters like '(', '-', and ')' are "
+"ok)"
+msgstr ""
+"Il numero %s deve contenere cifre valide (vanno benne caratteri come '(', "
+"'-' e ')')"
+
+#: ../modules/VmX.module:180
+msgid "Option 1 not changed"
+msgstr "Opzione 1 non cambiata"
+
+#: ../modules/VmX.module:200
+msgid "Option 2 not changed"
+msgstr "opzione 2 non cambiata"
+
+#: ../modules/VmX.module:300
+msgid "Use When:"
+msgstr "Utilizzare quando:"
+
+#: ../modules/VmX.module:300
+msgid ""
+"Menu options below are available during your personal voicemail greeting "
+"playback. <br/><br/>Check both to use at all times."
+msgstr ""
+"Le opzioni del menu disponibili qui sotto sono proposte durante il messaggio "
+"di benvenuto della casella vocale. <br/><br/>"
+
+#: ../modules/VmX.module:302
+msgid "unavailable"
+msgstr "non disponibile"
+
+#: ../modules/VmX.module:306
+msgid "busy"
+msgstr "occupato"
+
+#: ../modules/VmX.module:310
+msgid "Voicemail Instructions:"
+msgstr "Istruzioni Casella Vocale:"
+
+#: ../modules/VmX.module:310
+msgid "Uncheck to play a beep after your personal voicemail greeting."
+msgstr "Deselezionare per riprodurre un tono dopo il messaggio di benvenuto."
+
+#: ../modules/VmX.module:313
+msgid "Standard voicemail prompts."
+msgstr "Messaggi standard Casella Vocale"
+
+#: ../modules/VmX.module:321
+msgid "Press 0:"
+msgstr "Premere 0:"
+
+#: ../modules/VmX.module:321
+msgid ""
+"Pressing 0 during your personal voicemail greeing goes to the Operator. \n"
+"\t\t\t\t\tUncheck to enter another destination here."
+msgstr ""
+"Premendo 0 durante il messaggio di benvenuto della Casella Vocale, la "
+"chiamata sarà reindirizzata all'operatore. \n"
+"\t\t\t\t\tDeselezionare per inserire un'altra destinazione."
+
+#: ../modules/VmX.module:329
+msgid "Go To Operator"
+msgstr "Per andare all'Operatore"
+
+#: ../modules/VmX.module:333
+msgid "Press 1:"
+msgstr "Premere 1:"
+
+#: ../modules/VmX.module:336
+msgid ""
+"The remaining options can have internal extensions, ringgroups, queues and "
+"external numbers that may be rung. It is often used to include your cell "
+"phone. You should run a test to make sure that the number is functional any "
+"time a change is made so you don't leave a caller stranded or receiving "
+"invalid number messages."
+msgstr ""
+
+#: ../modules/VmX.module:338
+msgid ""
+"Enter an alternate number here, then change your personal voicemail greeting "
+"to let callers know to press 1 to reach that number. <br/><br/>If you'd like "
+"to use your Follow Me List, check \"Send to Follow Me\" and disable Follow "
+"Me above."
+msgstr ""
+"Immettere una destinazione alternativa, dopo, cambiare il messaggio di "
+"benvenuto per permettere ai chiamanti di premere 1 per raggiungere quella "
+"numerazione. <br/><br/> Se si vuole utilizzare la Lista Seguimi, selezionare "
+"\"Invia al Seguimi\" e disattivare sopra il Seguimi."
+
+#: ../modules/VmX.module:351
+msgid "Send to Follow-Me"
+msgstr "Invia al Seguimi"
+
+#: ../modules/VmX.module:359
+msgid "Press 2:"
+msgstr "Premere 2:"
+
+#: ../modules/VmX.module:359
+msgid ""
+"Use any extensions, ringgroups, queues or external numbers. <br/><br/"
+">Remember to re-record your personal voicemail greeting and include "
+"instructions. Run a test to make sure that the number is functional."
+msgstr ""
+"Utilizzare qualsiasi interno, gruppo di chiamata, coda o numero esterno. <br/"
+"><br/>Ricordarsi di ri-registrare il proprio messaggio di benvenuto e "
+"includere delle istruzioni. Fare dei test per assicurarsi che tutto funzioni."
+
+#
+#: ../modules/VmX.module:373
+##, fuzzy, php-format
+msgid "VmX Locator&#8482; Settings for %s (%s)"
+msgstr "Impostazioni di %s (%s)"
+
+#: ../modules/VmX.module:415 ../modules/followme.module:384
+#: ../modules/phonefeatures.module:180 ../modules/settings.module:625
+msgid "Update"
+msgstr "Aggiorna"
+
+#: ../modules/callmonitor.module:36 ../modules/callmonitor.module:256
+msgid "Call Monitor"
+msgstr "Registrazioni Chiamate"
+
+#
+#: ../modules/callmonitor.module:131
+#, php-format
+msgid "Path is not a directory: %s"
+msgstr "Il percorso non è una directory: %s"
+
+#: ../modules/callmonitor.module:140 ../modules/voicemail.module:318
+msgid "delete"
+msgstr "elimina"
+
+#
+#: ../modules/callmonitor.module:146
+msgid "duration"
+msgstr "durata"
+
+#
+#: ../modules/callmonitor.module:149
+msgid "ignore"
+msgstr "niente"
+
+#: ../modules/callmonitor.module:158 ../modules/voicemail.module:339
+msgid "Date"
+msgstr "Data"
+
+#: ../modules/callmonitor.module:160 ../modules/voicemail.module:341
+msgid "Time"
+msgstr "Ora"
+
+#: ../modules/callmonitor.module:162 ../modules/voicemail.module:343
+msgid "Caller ID"
+msgstr "ID Chiamante"
+
+#: ../modules/callmonitor.module:164
+msgid "Source"
+msgstr "Sorgente"
+
+#: ../modules/callmonitor.module:166
+msgid "Destination"
+msgstr "Destinazione"
+
+#: ../modules/callmonitor.module:168
+msgid "Context"
+msgstr "Contesto"
+
+#: ../modules/callmonitor.module:170 ../modules/voicemail.module:349
+msgid "Duration"
+msgstr "Durata"
+
+#: ../modules/callmonitor.module:201
+msgid "Monitor"
+msgstr "Registrazione"
+
+#: ../modules/callmonitor.module:221 ../modules/voicemail.module:390
+msgid "play"
+msgstr "riproduci"
+
+#
+#: ../modules/callmonitor.module:258
+#, php-format
+msgid "Call Monitor for %s (%s)"
+msgstr "Registrazioni Chiamate di %s (%s)"
+
+#: ../modules/callmonitor.module:310 ../modules/voicemail.module:492
+msgid "select"
+msgstr "seleziona"
+
+#: ../modules/callmonitor.module:311 ../modules/voicemail.module:493
+msgid "all"
+msgstr "tutto"
+
+#: ../modules/callmonitor.module:312 ../modules/voicemail.module:494
+msgid "none"
+msgstr "niente"
+
+#: ../modules/callmonitor.module:532
+msgid "Only deletes recording files, not cdr log"
+msgstr "Eliminati solo i file di registrazione, non i log delle chiamate"
+
+#: ../modules/featurecodes.module:36 ../modules/featurecodes.module:63
+##, fuzzy
+msgid "Feature Codes"
+msgstr "Codici Servizi"
+
+#
+#: ../modules/featurecodes.module:65
+##, fuzzy, php-format
+msgid " for %s (%s)"
+msgstr " per %s (%s)"
+
+#: ../modules/featurecodes.module:72
+msgid "Handset Feature Code"
+msgstr "Codice"
+
+#: ../modules/featurecodes.module:75
+msgid "Action"
+msgstr "Azione"
+
+#: ../modules/followme.module:43
+msgid "Follow Me"
+msgstr "Seguimi"
+
+#: ../modules/followme.module:100
+msgid ""
+"Your Follow-Me has been disabled, REFRESH your browser to remove this message"
+msgstr ""
+"Il Seguimi è disattivato, AGGIORNA la pagina per rimuovere questo messaggio"
+
+#: ../modules/followme.module:118
+msgid "Follow-Me pre-ring time not changed"
+msgstr "Tempo di pre-squillo per il Seguimi non cambiato"
+
+#: ../modules/followme.module:119 ../modules/followme.module:142
+#, php-format
+msgid "Number %s must be an interger number of seconds"
+msgstr "Il numero %s deve contenere numeri interi"
+
+#: ../modules/followme.module:141
+msgid "Follow-Me list ring time not changed"
+msgstr "Tempo di squillo Lista Seguimi non cambiato"
+
+#: ../modules/followme.module:185
+msgid "Follow-Me list must contain at least one valid number"
+msgstr "Il Seguimi deve contenere almeno un numero valido"
+
+#: ../modules/followme.module:186
+#, php-format
+msgid "The following: %s is not valid"
+msgstr "Il seguente: %s non è valido"
+
+#
+#: ../modules/followme.module:291 ../modules/followme.module:344
+#: ../modules/phonefeatures.module:335 ../modules/settings.module:420
+msgid "Enable"
+msgstr "Attiva"
+
+#: ../modules/followme.module:292
+msgid ""
+"Dial-by-name Directory, IVR, and internal \n"
+"\t\t\t\t\t\t\t\t\t\t\t\t\tcalls will ring the numbers in the FollowMe \n"
+"\t\t\t\t\t\t\t\t\t\t\t\t\tList. Any FreePBX routes that directly \n"
+"\t\t\t\t\t\t\t\t\t\t\t\t\treference a FollowMe are unaffected by this \n"
+"\t\t\t\t\t\t\t\t\t\t\t\t\tenable/disable setting."
+msgstr "L'Elenco Telefonico, l'IVR e le chiamate interne chiameranno i numeri definiti nella Lista Seguimi. Qualsiasi rotta che ha come referenza un Seguimi non sarà affetto dall'attivazione o dalla disattivazione di questa impostazione."
+
+#: ../modules/followme.module:304
+msgid "Follow Me List:"
+msgstr "Lista Seguimi:"
+
+#: ../modules/followme.module:305
+#, php-format
+msgid "Extensions and outside numbers to ring next."
+msgstr "Interni e numeri esterni da chiamare dopo."
+
+#: ../modules/followme.module:306
+#, php-format
+msgid "Include %s to keep it ringing."
+msgstr "Immettere %s per lasciar squillare."
+
+#: ../modules/followme.module:312
+#, php-format
+msgid "Ring %s First For:"
+msgstr "Chiama prima %s per:"
+
+#: ../modules/followme.module:313
+#, php-format
+msgid "Time to ring extension %s before ringing the %s Follow Me List %s"
+msgstr ""
+"Il tempo di chiamata per l'interno %s prima di far squillare la %s Lista "
+"Seguimi %s"
+
+#: ../modules/followme.module:323 ../modules/followme.module:336
+msgid "seconds"
+msgstr "secondi"
+
+#: ../modules/followme.module:326
+msgid "Ring Followme List for:"
+msgstr "Chiama la Lista Seguimi per:"
+
+#: ../modules/followme.module:326
+msgid "Time to ring the Follow Me List."
+msgstr "Il tempo di chiamata per la Lista Seguimi."
+
+#: ../modules/followme.module:341
+msgid "Use Confirmation:"
+msgstr "Utilizza Conferma:"
+
+#: ../modules/followme.module:341
+msgid ""
+"Outside lines that are part of the Follow Me List will be called and offered "
+"a menu:<br/><br/> \"You have an incoming call. Press 1 to accept or 2 to "
+"decline.\"<br/><br/> This keeps calls from ending up in external voicemail. "
+"Make sure that the List Ring Time is long enough to allow for you to hear "
+"and react to this message."
+msgstr ""
+"Ai Numeri esterni che fanno parte della Lista Seguimi sarà proposto un menu:"
+"<br/><br/> \"Hai una chiamata in arrivo. Premere 1 per accettare o 2 per "
+"rifiutare.\" Questo evita alle chiamate esterne di finire in una segreteria. "
+"Assicurarsi che il tempo di chiamata sia abbastanza lungo per rispondere a "
+"questo messaggio."
+
+#: ../modules/followme.module:356
+##, fuzzy
+msgid "Followme Settings"
+msgstr "Impostazioni Seguimi"
+
+#
+#: ../modules/followme.module:358
+##, fuzzy, php-format
+msgid "Followme Settings for %s (%s)"
+msgstr "Impostazioni Seguimi per %s (%s)"
+
+#: ../modules/phonefeatures.module:25 ../modules/phonefeatures.module:96
+#: ../modules/phonefeatures.module:163
+msgid "Phone Features"
+msgstr "Servizi Telefonici"
+
+#
+#: ../modules/phonefeatures.module:149
+##, fuzzy
+msgid "Call Forwarding"
+msgstr "Trasferimento di Chiamata"
+
+#
+#: ../modules/phonefeatures.module:165
+##, fuzzy, php-format
+msgid "Features for %s (%s)"
+msgstr "Impostazioni per %s (%s)"
+
+#: ../modules/phonefeatures.module:301
+msgid "Call forward number not changed"
+msgstr "Numero per il trasferimento di chiamata non cambiato"
+
+#: ../modules/settings.module:56
+msgid "Settings"
+msgstr "Impostazioni"
+
+#: ../modules/settings.module:118 ../modules/settings.module:123
+#: ../modules/settings.module:128 ../modules/settings.module:133
+#: ../modules/settings.module:143 ../modules/settings.module:148
+msgid "Voicemail password not changed"
+msgstr "Password Casella Vocale non cambiata"
+
+#: ../modules/settings.module:119
+msgid "Password and password confirm must not be blank"
+msgstr "Password e conferma password non possono essere vuoti"
+
+#
+#: ../modules/settings.module:124
+##, fuzzy, php-format
+msgid "Passwords must be all numbers and greater than %d digits"
+msgstr "La Password deve essere minimo di %d numeri"
+
+#
+#: ../modules/settings.module:129
+##, fuzzy, php-format
+msgid "Passwords must be all numbers and only %d digits"
+msgstr "La Password deve essere di %d numeri"
+
+#: ../modules/settings.module:134
+msgid "Password and password confirm do not match"
+msgstr "Password e Conferma password non corrispondono"
+
+#
+#: ../modules/settings.module:144 ../modules/settings.module:149
+#: ../modules/settings.module:200 ../modules/settings.module:205
+##, fuzzy, php-format
+msgid "%s does not exist or is not writable"
+msgstr "%s non esiste o non è scrivile"
+
+#
+#: ../modules/settings.module:189
+msgid "Voicemail email and pager address not changed"
+msgstr "Password Casella Vocale non cambiata"
+
+#
+#: ../modules/settings.module:199 ../modules/settings.module:204
+msgid "Voicemail email settings not changed"
+msgstr "Password Casella Vocale non cambiata"
+
+#: ../modules/settings.module:347
+msgid "Language:"
+msgstr "Lingua:"
+
+#
+#: ../modules/settings.module:357
+#, php-format
+msgid "Passwords must be all numbers and only %s digits"
+msgstr "La Password deve essere di solo numeri e %s cifre"
+
+#
+#: ../modules/settings.module:360
+##, fuzzy, php-format
+msgid "Passwords must be all numbers and at least %s digits"
+msgstr "La Password deve essere di solo numeri e minimo %s cifre"
+
+#
+#: ../modules/settings.module:365
+msgid "Voicemail Password:"
+msgstr "Password Casella Vocale:"
+
+#: ../modules/settings.module:371
+msgid "Enter again to confirm:"
+msgstr "Conferma password:"
+
+#
+#: ../modules/settings.module:419
+msgid "Email Notification"
+msgstr "Notifica Email"
+
+#
+#: ../modules/settings.module:423
+msgid "Email Voicemail To:"
+msgstr "Notifica Email a:"
+
+#
+#: ../modules/settings.module:429
+msgid "Pager Email Notification To:"
+msgstr "Invia Notifica Email al Pager:"
+
+#: ../modules/settings.module:485
+msgid "Audio Format:"
+msgstr "Formato Audio:"
+
+#: ../modules/settings.module:488
+msgid "Best Quality"
+msgstr "Migliore Qualità"
+
+#: ../modules/settings.module:489
+msgid "Smallest Download"
+msgstr "Download Veloci"
+
+#: ../modules/settings.module:497
+msgid "Voicemail Settings"
+msgstr "Impostazioni Casella Vocale"
+
+#: ../modules/settings.module:538
+msgid "Call Monitor Settings"
+msgstr "Impostazioni Registrazioni Chiamate"
+
+#: ../modules/settings.module:541
+msgid "Record INCOMING:"
+msgstr "Registra ENTRANTI:"
+
+#: ../modules/settings.module:543 ../modules/settings.module:551
+msgid "Always"
+msgstr "Sempre"
+
+#: ../modules/settings.module:544 ../modules/settings.module:552
+msgid "Never"
+msgstr "Mai"
+
+#: ../modules/settings.module:545 ../modules/settings.module:553
+msgid "On-Demand"
+msgstr "Su richiesta"
+
+#: ../modules/settings.module:549
+msgid "Record OUTGOING:"
+msgstr "Registra USCENTI:"
+
+#
+#: ../modules/settings.module:592
+##, fuzzy, php-format
+msgid "Settings for %s (%s)"
+msgstr "Impostazioni per %s (%s)"
+
+#: ../modules/voicemail.module:44
+msgid "Voicemail"
+msgstr "Casella Vocale"
+
+#: ../modules/voicemail.module:163
+msgid "A folder must be selected before the message can be moved."
+msgstr ""
+"Prima di spostare un messaggio, selezionare una cartella di destinazione"
+
+#: ../modules/voicemail.module:177
+msgid "An extension must be selected before the message can be forwarded."
+msgstr "Prima di inoltrare un messaggio, selezionare l'interno di destinazione"
+
+#: ../modules/voicemail.module:321
+msgid "move_to"
+msgstr "sposta_verso"
+
+#: ../modules/voicemail.module:324
+msgid "Folder"
+msgstr "Cartella"
+
+#: ../modules/voicemail.module:328
+msgid "forward_to"
+msgstr "inoltra_a"
+
+#: ../modules/voicemail.module:345
+msgid "Priority"
+msgstr "Priorità"
+
+#: ../modules/voicemail.module:347
+msgid "Orig Mailbox"
+msgstr "Casella Orig"
+
+#: ../modules/voicemail.module:379
+msgid "Message"
+msgstr "Messaggio"
+
+#: ../modules/voicemail.module:394
+msgid "Voicemail recording(s) was not found."
+msgstr "Registrazioni Casella Vocale non trovate."
+
+#
+#: ../modules/voicemail.module:395
+#, php-format
+msgid ""
+"On settings page, change voicemail audio format. It is currently set to %s"
+msgstr ""
+"Nella pagina delle impostazioni, cambiare il formato dei messaggi vocali. "
+"Adesso è impostato su %s"
+
+#
+#: ../modules/voicemail.module:422
+msgid "Voicemail Login not found."
+msgstr "Login Casella Vocale non trovato"
+
+#: ../modules/voicemail.module:423
+msgid "No access to voicemail"
+msgstr "Accesso alla Casella Vocale disabilitato"
+
+#: ../modules/voicemail.module:429
+msgid "No Voicemail Recordings for Admin"
+msgstr "Nessuna Casella Vocale per Admin"
+
+#
+#: ../modules/voicemail.module:445
+#, php-format
+msgid "Voicemail for %s (%s)"
+msgstr "Casella Vocale di %s (%s)"
+
+#
+#: ../modules/voicemail.module:695
+##, fuzzy, php-format
+msgid "Could not create mailbox folder %s on the server"
+msgstr "Non posso creare la cartella %s sul server"
+
+#
+#: ../modules/voicemail.module:735
+#, php-format
+msgid "Permission denied on folder %s or %s"
+msgstr "Permessi negati nella cartella %s o %s"
+
+#: ../misc/recording_popup.php:39
+msgid "download"
+msgstr "scarica"
+
+msgid "Unconditional:"
+msgstr "Incondizionato:"
+
+msgid "Unavailable:"
+msgstr "Non disponibile:"
+
+msgid "Busy:"
+msgstr "Occupato:"
+
+#
+##, fuzzy
+msgid "Call Waiting"
+msgstr "Avviso di Chiamata"
+
+##, fuzzy
+msgid "Do Not Disturb"
+msgstr " Non-Disturbare"
+
+#
+##, fuzzy
+msgid "Passwords must be all numbers and at least 3 digits"
+msgstr "La Password deve essere di solo numeri e minimo di 3 cifre"
+
+#~ msgid "Directory"
+#~ msgstr "Directory"
+
+#~ msgid "Echo Test"
+#~ msgstr "Test Echo"
+
+#~ msgid "Weather"
+#~ msgstr "Meteo"
+
+#~ msgid "Schedule wakeup call"
+#~ msgstr "Sveglia"
+
+#~ msgid "festival test (your extension is XXX)"
+#~ msgstr "Test Festival (il tuo interno è XXX)"
+
+#~ msgid "Deactivate Call Waiting"
+#~ msgstr "Disattiva Avviso di Chiamata"
+
+#~ msgid "Disable Call Forwarding"
+#~ msgstr "Disattiva Inoltro di Chiamata"
+
+#
+#~ msgid "IVR Recording"
+#~ msgstr "Registrazione IVR"
+
+#~ msgid "Disable Do-Not-Disturb"
+#~ msgstr "Disattiva Non-Disturbare"
+
+#~ msgid "Disable Call Forward on Busy"
+#~ msgstr "Disattiva Inoltro di Chiamata su Occupato"
+
+##, fuzzy
+#~ msgid "Message Center (does not ask for extension)"
+#~ msgstr "Centro Messaggi (non chiede l'interno)"
+
+#~ msgid "Enter Message Center"
+#~ msgstr "Centro Messaggi"
+
+#~ msgid "Playback IVR Recording"
+#~ msgstr "Riproduce Registrazione IVR"
+
+#~ msgid "Test Fax"
+#~ msgstr "Test Fax"
+
+#~ msgid "Simulate incoming call"
+#~ msgstr "Simula chiamata entrante"
+
+#
+##, fuzzy
+#~ msgid "Conference for %s (%s%s)"
+#~ msgstr "Conferenza per %s (%s%s)"
+
+#~ msgid "Help"
+#~ msgstr "Aiuto"
+
+#
+#~ msgid "Pager Voicemail To:"
+#~ msgstr "Casella Vocale"
+
+#~ msgid "Passwords must be all numbers and only 4 digits"
+#~ msgstr "La Password deve essere di solo numeri e 4 cifre"
+
+msgid "Folders"
+msgstr "Cartelle"
+
+#~ msgid "Login used"
+#~ msgstr "Login utilizzato"
+
+#~ msgid "No Asterisk Manager Interface connection"
+#~ msgstr "Impossibile connettersi all'Asterisk Manager Interface"
+
+#~ msgid "Cannot connect to the"
+#~ msgstr "Impossibile connettersi al"
+
+#~ msgid "database"
+#~ msgstr "database"
+
+#~ msgid "not a directory or not readable"
+#~ msgstr "non è una directory o non è leggibile"
+
+#~ msgid "of"
+#~ msgstr "di"
+
+#~ msgid "Use your"
+#~ msgstr "Utilizzare il "
+
+#~ msgid "for"
+#~ msgstr "di"
+
+#~ msgid "Password must be all numbers and 4 digits"
+#~ msgstr "La Password deve essere di 4 numeri"
+
+#~ msgid "Check voicemail audio format on settings page to change from"
+#~ msgstr "Controllare il formato audio nella pagina delle impostazioni"
+
+#~ msgid "on the server"
+#~ msgstr "nel server"
+
+#~ msgid "No database connection"
+#~ msgstr "Connessione al database fallita"
+
+msgid "Email a notification, including audio file if indicated below. "
+msgstr "Invia una notifica per posta elettronica, incluso il file audio se impostato sotto."
+
+msgid "Email a short notification "
+msgstr "Invia una breve notifica"
+
+msgid "Phone Features for %s (%s)"
+msgstr "Servizi Telefonici per %s (%s)"
+
+msgid "User Portal"
+msgstr "Portale Utente" \ No newline at end of file
diff --git a/fs_selfservice/fri/locale/locale.txt b/fs_selfservice/fri/locale/locale.txt
new file mode 100644
index 0000000..6b93e2e
--- /dev/null
+++ b/fs_selfservice/fri/locale/locale.txt
@@ -0,0 +1,37 @@
+// To create the .po (write your translations to this file):
+$ find *.php ../includes/* ../modules/*.module ../misc/*.php ../theme/* | xargs xgettext -L PHP -o ari.po --keyword=_ -
+
+// To create the utf-8 .po
+$ iconv -f iso-8859-1 -t utf-8 -o ari.utf-8.po ari.po
+
+// To create the .mo:
+$ msgfmt -v ari.utf-8.po -o ari.mo
+
+// To update (assume both files to be merged are utf-8)
+$ msgmerge es_ES/LC_MESSAGES/ari.po ari.utf-8.po --output-file=es_ES/LC_MESSAGES/ari.po
+$ msgfmt -v es_ES/LC_MESSAGES/ari.po -o es_ES/LC_MESSAGES/ari.mo
+
+
+// script
+// for this to work all translated files need to be converted to utf-8 (use iconv)
+//
+find ../*.php ../includes/* ../modules/*.module ../misc/*.php ../theme/*.css | xargs xgettext -L PHP -o ari.po --keyword=_ -
+iconv -f iso-8859-1 -t utf-8 -o ari.utf-8.po ari.po
+msgmerge el_GR/LC_MESSAGES/ari.po ari.utf-8.po --output-file=el_GR/LC_MESSAGES/ari.po
+msgfmt -v el_GR/LC_MESSAGES/ari.po -o el_GR/LC_MESSAGES/ari.mo
+msgmerge es_ES/LC_MESSAGES/ari.po ari.utf-8.po --output-file=es_ES/LC_MESSAGES/ari.po
+msgfmt -v es_ES/LC_MESSAGES/ari.po -o es_ES/LC_MESSAGES/ari.mo
+msgmerge fr_FR/LC_MESSAGES/ari.po ari.utf-8.po --output-file=fr_FR/LC_MESSAGES/ari.po
+msgfmt -v fr_FR/LC_MESSAGES/ari.po -o fr_FR/LC_MESSAGES/ari.mo
+msgmerge he_IL/LC_MESSAGES/ari.po ari.utf-8.po --output-file=he_IL/LC_MESSAGES/ari.po
+msgfmt -v he_IL/LC_MESSAGES/ari.po -o he_IL/LC_MESSAGES/ari.mo
+msgmerge hu_HU/LC_MESSAGES/ari.po ari.utf-8.po --output-file=hu_HU/LC_MESSAGES/ari.po
+msgfmt -v hu_HU/LC_MESSAGES/ari.po -o hu_HU/LC_MESSAGES/ari.mo
+msgmerge it_IT/LC_MESSAGES/ari.po ari.utf-8.po --output-file=it_IT/LC_MESSAGES/ari.po
+msgfmt -v ot_IT/LC_MESSAGES/ari.po -o it_IT/LC_MESSAGES/ari.mo
+msgmerge pt_BR/LC_MESSAGES/ari.po ari.utf-8.po --output-file=pt_BR/LC_MESSAGES/ari.po
+msgfmt -v pt_BR/LC_MESSAGES/ari.po -o pt_BR/LC_MESSAGES/ari.mo
+msgmerge sv_SE/LC_MESSAGES/ari.po ari.po --output-file=sv_SE/LC_MESSAGES/ari.po
+msgfmt -v sv_SE/LC_MESSAGES/ari.po -o sv_SE/LC_MESSAGES/ari.mo
+
+
diff --git a/fs_selfservice/fri/locale/pt_BR/LC_MESSAGES/ari.mo b/fs_selfservice/fri/locale/pt_BR/LC_MESSAGES/ari.mo
new file mode 100644
index 0000000..baa1a11
--- /dev/null
+++ b/fs_selfservice/fri/locale/pt_BR/LC_MESSAGES/ari.mo
Binary files differ
diff --git a/fs_selfservice/fri/locale/pt_BR/LC_MESSAGES/ari.po b/fs_selfservice/fri/locale/pt_BR/LC_MESSAGES/ari.po
new file mode 100644
index 0000000..0ab45fa
--- /dev/null
+++ b/fs_selfservice/fri/locale/pt_BR/LC_MESSAGES/ari.po
@@ -0,0 +1,647 @@
+# Brazilian portuguese translation
+# Copyright (C) 2005 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Arnaldo M. Pereira <arnaldo@ansi-c.org>, 2005.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-05-03 08:32-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Arnaldo M. Pereira <arnaldo@ansi-c.org>\n"
+"Language-Team: Brazilian Portuguese <arnaldo@ansi-c.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../includes/asi.php:46
+msgid "Asterisk Call Manager not responding"
+msgstr "Asterisk Call Manager não responde"
+
+#: ../includes/asi.php:54
+msgid "Asterisk authentication failed:"
+msgstr "Autenticação no Asterisk falhou:"
+
+#: ../includes/asi.php:96 ../includes/asi.php:111
+#, fuzzy
+msgid "Asterisk command not understood"
+msgstr "Comando reload do Asterisk não compreendido"
+
+#: ../includes/bootstrap.php:123
+#, php-format
+msgid "To many directories in %s Not all files processed"
+msgstr ""
+
+#: ../includes/bootstrap.php:226
+msgid "ARI requires a version of PHP 4.3 or later"
+msgstr ""
+
+#: ../includes/bootstrap.php:245
+msgid ""
+"PHP PEAR must be installed. Visit http://pear.php.net for help with "
+"installation."
+msgstr ""
+
+#: ../includes/common.php:173
+#, fuzzy
+msgid "ARI does not appear to have access to the Asterisk Manager."
+msgstr "Não foi possível conectar ao Asterisk Manager"
+
+#: ../includes/common.php:174
+msgid ""
+"Check the ARI 'main.conf.php' configuration file to set the Asterisk Manager "
+"Account."
+msgstr ""
+
+#: ../includes/common.php:175
+msgid "Check /etc/asterisk/manager.conf for a proper Asterisk Manager Account"
+msgstr ""
+
+#: ../includes/common.php:176
+msgid ""
+"make sure [general] enabled = yes and a 'permit=' line for localhost or the "
+"webserver."
+msgstr ""
+
+#: ../includes/common.php:193 ../includes/common.php:208
+#, fuzzy
+msgid "Check AMP installation, asterisk, and ARI main.conf"
+msgstr ""
+"Verifique a instalação do AMP, do banco de dados do asterisk ou do main.conf "
+"do ARI"
+
+#: ../includes/common.php:344
+msgid "Logout"
+msgstr ""
+
+#: ../includes/common.php:349
+msgid "Page Not Found."
+msgstr "Página não encontrada."
+
+#: ../includes/display.php:92
+#, fuzzy
+msgid "Search"
+msgstr "Procurado"
+
+#: ../includes/display.php:135
+msgid "Searched for"
+msgstr "Procurado"
+
+#: ../includes/display.php:139
+#, fuzzy, php-format
+msgid "Results %d - %d of %d"
+msgstr "Resultados"
+
+#: ../includes/display.php:141
+#, fuzzy, php-format
+msgid "Results %d"
+msgstr "Resultados"
+
+#: ../includes/display.php:195
+msgid "First"
+msgstr "Primeiro"
+
+#: ../includes/display.php:208
+msgid "Last"
+msgstr ""
+
+#: ../includes/login.php:267
+msgid "Incorrect Password"
+msgstr "Senha incorreta"
+
+#: ../includes/login.php:279
+#, fuzzy
+msgid "Incorrect Username or Password"
+msgstr "Senha incorreta"
+
+#: ../includes/login.php:402 ../includes/login.php:411
+msgid "Login"
+msgstr ""
+
+#: ../includes/login.php:419
+#, fuzzy
+msgid "Password"
+msgstr "Senha incorreta"
+
+#: ../includes/login.php:428
+msgid "Submit"
+msgstr ""
+
+#: ../includes/login.php:436
+#, fuzzy
+msgid "Remember Password"
+msgstr "Voicemail para"
+
+#: ../includes/login.php:451
+#, fuzzy
+msgid "Use your <b>Voicemail Mailbox and Password</b>"
+msgstr "Mailbox e senha do Voicemail"
+
+#: ../includes/login.php:452
+msgid "This is the same password used for the phone"
+msgstr "Esta é a mesma senha utilizada para o telefone"
+
+#: ../includes/login.php:454
+msgid ""
+"For password maintenance or assistance, contact your Phone System "
+"Administrator."
+msgstr ""
+"Para manutenção e assistência, entre em contato com o Administrador de seu "
+"Sistema de Telefonia"
+
+#: ../includes/main.conf.php:152
+msgid "INBOX"
+msgstr ""
+
+#: ../includes/main.conf.php:154
+msgid "Family"
+msgstr ""
+
+#: ../includes/main.conf.php:156
+msgid "Friends"
+msgstr ""
+
+#: ../includes/main.conf.php:158
+msgid "Old"
+msgstr ""
+
+#: ../includes/main.conf.php:160
+msgid "Work"
+msgstr ""
+
+#: ../includes/main.conf.php:229
+msgid "Directory"
+msgstr ""
+
+#: ../includes/main.conf.php:230
+msgid "Echo Test"
+msgstr ""
+
+#: ../includes/main.conf.php:231 ../modules/callmonitor.module:161
+#: ../modules/voicemail.module:324
+msgid "Time"
+msgstr ""
+
+#: ../includes/main.conf.php:232
+msgid "Weather"
+msgstr ""
+
+#: ../includes/main.conf.php:233
+msgid "Schedule wakeup call"
+msgstr ""
+
+#: ../includes/main.conf.php:234
+msgid "festival test (your extension is XXX)"
+msgstr ""
+
+#: ../includes/main.conf.php:235
+msgid "Activate Call Waiting (deactivated by default)"
+msgstr ""
+
+#: ../includes/main.conf.php:236
+msgid "Deactivate Call Waiting"
+msgstr ""
+
+#: ../includes/main.conf.php:237
+msgid "Call Forwarding System"
+msgstr ""
+
+#: ../includes/main.conf.php:238
+msgid "Disable Call Forwarding"
+msgstr ""
+
+#: ../includes/main.conf.php:239
+msgid "IVR Recording"
+msgstr ""
+
+#: ../includes/main.conf.php:240
+msgid "Enable Do-Not-Disturb"
+msgstr ""
+
+#: ../includes/main.conf.php:241
+msgid "Disable Do-Not-Disturb"
+msgstr ""
+
+#: ../includes/main.conf.php:242
+msgid "Call Forward on Busy"
+msgstr ""
+
+#: ../includes/main.conf.php:243
+msgid "Disable Call Forward on Busy"
+msgstr ""
+
+#: ../includes/main.conf.php:244
+msgid "Message Center (does not ask for extension)"
+msgstr ""
+
+#: ../includes/main.conf.php:245
+msgid "Enter Message Center"
+msgstr ""
+
+#: ../includes/main.conf.php:246
+msgid "Playback IVR Recording"
+msgstr ""
+
+#: ../includes/main.conf.php:247
+msgid "Test Fax"
+msgstr ""
+
+#: ../includes/main.conf.php:248
+msgid "Simulate incoming call"
+msgstr ""
+
+#: ../includes/main.conf.php:289
+msgid "Email voicemail as attachment"
+msgstr ""
+
+#: ../includes/main.conf.php:290
+msgid "Say caller id in recording emailed"
+msgstr ""
+
+#: ../includes/main.conf.php:291
+msgid "Say envelop (date/time) in recording emailed"
+msgstr ""
+
+#: ../includes/main.conf.php:292
+msgid "Delete voicemail when emailed"
+msgstr ""
+
+#: ../includes/main.conf.php:293
+msgid "Play next message after deleting current message"
+msgstr ""
+
+#: ../includes/main.conf.php:294
+msgid "Ask caller to review their voicemail before sending"
+msgstr ""
+
+#: ../includes/main.conf.php:295
+msgid "Maximum time in seconds a voicemail will record"
+msgstr ""
+
+#: ../modules/callmonitor.module:37 ../modules/callmonitor.module:257
+#, fuzzy
+msgid "Call Monitor"
+msgstr "Monitor de ligações para"
+
+#: ../modules/callmonitor.module:132
+#, php-format
+msgid "Path is not a directory: %s"
+msgstr ""
+
+#: ../modules/callmonitor.module:141 ../modules/voicemail.module:301
+msgid "delete"
+msgstr ""
+
+#: ../modules/callmonitor.module:147
+msgid "duration"
+msgstr ""
+
+#: ../modules/callmonitor.module:150
+msgid "ignore"
+msgstr ""
+
+#: ../modules/callmonitor.module:159 ../modules/voicemail.module:322
+msgid "Date"
+msgstr ""
+
+#: ../modules/callmonitor.module:163 ../modules/voicemail.module:326
+msgid "Caller ID"
+msgstr ""
+
+#: ../modules/callmonitor.module:165
+msgid "Source"
+msgstr ""
+
+#: ../modules/callmonitor.module:167
+msgid "Destination"
+msgstr ""
+
+#: ../modules/callmonitor.module:169
+msgid "Context"
+msgstr ""
+
+#: ../modules/callmonitor.module:171 ../modules/voicemail.module:332
+msgid "Duration"
+msgstr ""
+
+#: ../modules/callmonitor.module:202
+#, fuzzy
+msgid "Monitor"
+msgstr "Monitor de ligações para"
+
+#: ../modules/callmonitor.module:222 ../modules/voicemail.module:373
+msgid "play"
+msgstr ""
+
+#: ../modules/callmonitor.module:259
+#, fuzzy, php-format
+msgid "Call Monitor for %s (%s)"
+msgstr "Monitor de ligações para"
+
+#: ../modules/callmonitor.module:311 ../modules/voicemail.module:475
+msgid "select"
+msgstr ""
+
+#: ../modules/callmonitor.module:312 ../modules/voicemail.module:476
+msgid "all"
+msgstr ""
+
+#: ../modules/callmonitor.module:313 ../modules/voicemail.module:477
+msgid "none"
+msgstr ""
+
+#: ../modules/callmonitor.module:533
+msgid "Only deletes recording files, not cdr log"
+msgstr ""
+
+#: ../modules/conference.module:55
+msgid "My Conference room"
+msgstr ""
+
+#: ../modules/conference.module:78
+#, fuzzy, php-format
+msgid "Conference for %s (%s%s)"
+msgstr "Voicemail para"
+
+#: ../modules/help.module:39 ../modules/help.module:68
+msgid "Help"
+msgstr ""
+
+#: ../modules/help.module:70
+#, fuzzy, php-format
+msgid "Help for %s (%s)"
+msgstr "Configurações para"
+
+#: ../modules/help.module:77
+msgid "Handset Feature Code"
+msgstr ""
+
+#: ../modules/help.module:80
+msgid "Action"
+msgstr ""
+
+#: ../modules/settings.module:61 ../modules/settings.module:667
+msgid "Settings"
+msgstr "Configurações"
+
+#: ../modules/settings.module:125
+msgid "Call forward number not changed"
+msgstr ""
+
+#: ../modules/settings.module:126
+#, php-format
+msgid ""
+"Number %s must contain dial numbers (characters like '(', '-', and ')' are "
+"ok)"
+msgstr ""
+
+#: ../modules/settings.module:151 ../modules/settings.module:156
+#: ../modules/settings.module:161 ../modules/settings.module:166
+#: ../modules/settings.module:176 ../modules/settings.module:181
+msgid "Voicemail password not changed"
+msgstr "Senha do Voicemail não alterada"
+
+#: ../modules/settings.module:152
+msgid "Password and password confirm must not be blank"
+msgstr "Senha e confirmação de senha não pode ser não pode estar em branco"
+
+#: ../modules/settings.module:157
+#, fuzzy, php-format
+msgid "Passwords must be all numbers and greater than %d digits"
+msgstr "A senha deve conter apenas números e apenas 4 dígitos"
+
+#: ../modules/settings.module:162
+#, fuzzy, php-format
+msgid "Passwords must be all numbers and only %d digits"
+msgstr "A senha deve conter apenas números e apenas 4 dígitos"
+
+#: ../modules/settings.module:167
+msgid "Password and password confirm do not match"
+msgstr "Senha e confirmação de senha não batem"
+
+#: ../modules/settings.module:177 ../modules/settings.module:182
+#: ../modules/settings.module:234 ../modules/settings.module:239
+#, fuzzy, php-format
+msgid "%s does not exist or is not writable"
+msgstr "não existe ou não tem permissão de escrita"
+
+#: ../modules/settings.module:223
+#, fuzzy
+msgid "Voicemail email and pager address not changed"
+msgstr "Senha do Voicemail não alterada"
+
+#: ../modules/settings.module:233 ../modules/settings.module:238
+#, fuzzy
+msgid "Voicemail email settings not changed"
+msgstr "Senha do Voicemail não alterada"
+
+#: ../modules/settings.module:385
+msgid "Language:"
+msgstr ""
+
+#: ../modules/settings.module:408
+#, fuzzy
+msgid "Call Routing"
+msgstr "Monitor de ligações para"
+
+#: ../modules/settings.module:411
+#, fuzzy
+msgid "Call Forwarding:"
+msgstr "Monitor de ligações para"
+
+#: ../modules/settings.module:419 ../modules/settings.module:507
+msgid "Enable"
+msgstr ""
+
+#: ../modules/settings.module:431
+#, fuzzy, php-format
+msgid "Passwords must be all numbers and only %s digits"
+msgstr "A senha deve conter apenas números e apenas 4 dígitos"
+
+#: ../modules/settings.module:434
+#, fuzzy, php-format
+msgid "Passwords must be all numbers and at least %s digits"
+msgstr "A senha deve conter apenas números e apenas 4 dígitos"
+
+#: ../modules/settings.module:439
+#, fuzzy
+msgid "Voicemail Password:"
+msgstr "Voicemail para"
+
+#: ../modules/settings.module:445
+msgid "Enter again to confirm:"
+msgstr ""
+
+#: ../modules/settings.module:492
+#, fuzzy
+msgid "Email Voicemail To:"
+msgstr "Voicemail para"
+
+#: ../modules/settings.module:498
+#, fuzzy
+msgid "Pager Voicemail To:"
+msgstr "Voicemail para"
+
+#: ../modules/settings.module:558
+msgid "Audio Format:"
+msgstr ""
+
+#: ../modules/settings.module:561
+msgid "Best Quality"
+msgstr ""
+
+#: ../modules/settings.module:562
+msgid "Smallest Download"
+msgstr ""
+
+#: ../modules/settings.module:570
+#, fuzzy
+msgid "Voicemail Settings"
+msgstr "Voicemail para"
+
+#: ../modules/settings.module:611
+#, fuzzy
+msgid "Call Monitor Settings"
+msgstr "Monitor de ligações para"
+
+#: ../modules/settings.module:614
+msgid "Record INCOMING:"
+msgstr ""
+
+#: ../modules/settings.module:616 ../modules/settings.module:624
+msgid "Always"
+msgstr ""
+
+#: ../modules/settings.module:617 ../modules/settings.module:625
+msgid "Never"
+msgstr ""
+
+#: ../modules/settings.module:618 ../modules/settings.module:626
+msgid "On-Demand"
+msgstr ""
+
+#: ../modules/settings.module:622
+msgid "Record OUTGOING:"
+msgstr ""
+
+#: ../modules/settings.module:669
+#, fuzzy, php-format
+msgid "Settings for %s (%s)"
+msgstr "Configurações para"
+
+#: ../modules/settings.module:705
+msgid "Update"
+msgstr ""
+
+#: ../modules/voicemail.module:45
+#, fuzzy
+msgid "Voicemail"
+msgstr "Voicemail para"
+
+#: ../modules/voicemail.module:164
+msgid "A folder must be selected before the message can be moved."
+msgstr "Uma pasta deve ser selecionada antes que a mensagem possa ser movida."
+
+#: ../modules/voicemail.module:178
+msgid "An extension must be selected before the message can be forwarded."
+msgstr ""
+"Uma extensão deve ser selecionada antes que a mensagem possa ser repassada."
+
+#: ../modules/voicemail.module:304
+msgid "move_to"
+msgstr ""
+
+#: ../modules/voicemail.module:307
+msgid "Folder"
+msgstr ""
+
+#: ../modules/voicemail.module:311
+msgid "forward_to"
+msgstr ""
+
+#: ../modules/voicemail.module:328
+msgid "Priority"
+msgstr ""
+
+#: ../modules/voicemail.module:330
+msgid "Orig Mailbox"
+msgstr ""
+
+#: ../modules/voicemail.module:362
+msgid "Message"
+msgstr ""
+
+#: ../modules/voicemail.module:377
+msgid "Voicemail recording(s) was not found."
+msgstr "Gravação do(s) Voicemail(s) não encontrada."
+
+#: ../modules/voicemail.module:378
+#, php-format
+msgid ""
+"On settings page, change voicemail audio format. It is currently set to %s"
+msgstr ""
+
+#: ../modules/voicemail.module:405
+#, fuzzy
+msgid "Voicemail Login not found."
+msgstr "Login do Voicemail não encontrado, utilizado login SIP"
+
+#: ../modules/voicemail.module:406
+msgid "No access to voicemail"
+msgstr "Sem acesso ao voicemail"
+
+#: ../modules/voicemail.module:412
+msgid "No Voicemail Recordings for Admin"
+msgstr "Sem gravações para Admin"
+
+#: ../modules/voicemail.module:428
+#, fuzzy, php-format
+msgid "Voicemail for %s (%s)"
+msgstr "Voicemail para"
+
+#: ../modules/voicemail.module:678
+#, fuzzy, php-format
+msgid "Could not create mailbox folder %s on the server"
+msgstr "Não foi possível criar caixa de mensagens"
+
+#: ../modules/voicemail.module:718
+#, php-format
+msgid "Permission denied on folder %s or %s"
+msgstr ""
+
+#: ../misc/recording_popup.php:39
+msgid "download"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Passwords must be all numbers and only 4 digits"
+#~ msgstr "A senha deve conter apenas números e apenas 4 dígitos"
+
+#, fuzzy
+#~ msgid "No Asterisk Manager Interface connection"
+#~ msgstr "Asterisk Call Manager não responde"
+
+#~ msgid "not a directory or not readable"
+#~ msgstr "não é um diretório ou não pode ser lido"
+
+#~ msgid "of"
+#~ msgstr "de"
+
+#~ msgid "Use your"
+#~ msgstr "Use seu"
+
+#~ msgid "Password must be all numbers and 4 digits"
+#~ msgstr "A senha deve conter apenas números e apenas 4 dígitos"
+
+#~ msgid "Check voicemail audio format on settings page to change from"
+#~ msgstr ""
+#~ "Verifique o formato do audio do voicemail na página de configurações para "
+#~ "mudar de"
+
+#~ msgid "on the server"
+#~ msgstr "no servidor"
+
+#~ msgid "No database connection"
+#~ msgstr "Sem conexão com o banco de dados"
diff --git a/fs_selfservice/fri/locale/readme.txt b/fs_selfservice/fri/locale/readme.txt
new file mode 100644
index 0000000..2491865
--- /dev/null
+++ b/fs_selfservice/fri/locale/readme.txt
@@ -0,0 +1,37 @@
+// To create the .po (write your translations to this file):
+$ find *.php ../includes/* ../modules/*.module ../misc/*.php ../theme/* | xargs xgettext -L PHP -o ari.po --keyword=_ -
+
+// To create the utf-8 .po
+$ iconv -f iso-8859-1 -t utf-8 -o ari.utf-8.po ari.po
+
+// To create the .mo:
+$ msgfmt -v ari.utf-8.po -o ari.mo
+
+// To update (assume both files to be merged are utf-8)
+$ msgmerge es_ES/LC_MESSAGES/ari.po ari.utf-8.po --output-file=es_ES/LC_MESSAGES/ari.po
+$ msgfmt -v es_ES/LC_MESSAGES/ari.po -o es_ES/LC_MESSAGES/ari.mo
+
+
+// script
+// for this to work all translated files need to be converted to utf-8 (use iconv)
+//
+find *.php ../includes/* ../modules/*.module ../misc/*.php ../theme/* | xargs xgettext -L PHP -o ari.po --keyword=_ -
+iconv -f iso-8859-1 -t utf-8 -o ari.utf-8.po ari.po
+msgmerge el_GR/LC_MESSAGES/ari.po ari.utf-8.po --output-file=el_GR/LC_MESSAGES/ari.po
+msgfmt -v el_GR/LC_MESSAGES/ari.po -o el_GR/LC_MESSAGES/ari.mo
+msgmerge es_ES/LC_MESSAGES/ari.po ari.utf-8.po --output-file=es_ES/LC_MESSAGES/ari.po
+msgfmt -v es_ES/LC_MESSAGES/ari.po -o es_ES/LC_MESSAGES/ari.mo
+msgmerge fr_FR/LC_MESSAGES/ari.po ari.utf-8.po --output-file=fr_FR/LC_MESSAGES/ari.po
+msgfmt -v fr_FR/LC_MESSAGES/ari.po -o fr_FR/LC_MESSAGES/ari.mo
+msgmerge he_IL/LC_MESSAGES/ari.po ari.utf-8.po --output-file=he_IL/LC_MESSAGES/ari.po
+msgfmt -v he_IL/LC_MESSAGES/ari.po -o he_IL/LC_MESSAGES/ari.mo
+msgmerge hu_HU/LC_MESSAGES/ari.po ari.utf-8.po --output-file=hu_HU/LC_MESSAGES/ari.po
+msgfmt -v hu_HU/LC_MESSAGES/ari.po -o hu_HU/LC_MESSAGES/ari.mo
+msgmerge it_IT/LC_MESSAGES/ari.po ari.utf-8.po --output-file=it_IT/LC_MESSAGES/ari.po
+msgfmt -v ot_IT/LC_MESSAGES/ari.po -o it_IT/LC_MESSAGES/ari.mo
+msgmerge pt_BR/LC_MESSAGES/ari.po ari.utf-8.po --output-file=pt_BR/LC_MESSAGES/ari.po
+msgfmt -v pt_BR/LC_MESSAGES/ari.po -o pt_BR/LC_MESSAGES/ari.mo
+msgmerge sv_SE/LC_MESSAGES/ari.po ari.utf-8.po --output-file=sv_SE/LC_MESSAGES/ari.po
+msgfmt -v sv_SE/LC_MESSAGES/ari.po -o sv_SE/LC_MESSAGES/ari.mo
+
+
diff --git a/fs_selfservice/fri/locale/sv_SE/LC_MESSAGES/ari.mo b/fs_selfservice/fri/locale/sv_SE/LC_MESSAGES/ari.mo
new file mode 100644
index 0000000..c8ea152
--- /dev/null
+++ b/fs_selfservice/fri/locale/sv_SE/LC_MESSAGES/ari.mo
Binary files differ
diff --git a/fs_selfservice/fri/locale/sv_SE/LC_MESSAGES/ari.po b/fs_selfservice/fri/locale/sv_SE/LC_MESSAGES/ari.po
new file mode 100644
index 0000000..f8f0ad3
--- /dev/null
+++ b/fs_selfservice/fri/locale/sv_SE/LC_MESSAGES/ari.po
@@ -0,0 +1,678 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-05-03 08:32-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Niklas Larsson <pnsystem@comhem.se>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../includes/asi.php:46
+msgid "Asterisk Call Manager not responding"
+msgstr "Asterisk Call Manager svara ej"
+
+#: ../includes/asi.php:54
+msgid "Asterisk authentication failed:"
+msgstr "Ej godk&auml;nd autentisering mot Asterisk:"
+
+#: ../includes/asi.php:96 ../includes/asi.php:111
+#, fuzzy
+msgid "Asterisk command not understood"
+msgstr "Asterisk f&ouml;rstod ej omladdningskommandot"
+
+#: ../includes/bootstrap.php:123
+#, php-format
+msgid "To many directories in %s Not all files processed"
+msgstr "F&ouml;r m&aring;nga mappar i %s Alla filer har inte behandlats"
+
+#: ../includes/bootstrap.php:226
+#, fuzzy
+msgid "ARI requires a version of PHP 4.3 or later"
+msgstr "ARI kr&auml;ver version 4.0 eller h&ouml;gre av PHP"
+
+#: ../includes/bootstrap.php:245
+msgid ""
+"PHP PEAR must be installed. Visit http://pear.php.net for help with "
+"installation."
+msgstr ""
+"PHP PEAR m&aring;ste installeras. G&aring; till http://pear.php.net, och "
+"installera."
+
+#: ../includes/common.php:173
+#, fuzzy
+msgid "ARI does not appear to have access to the Asterisk Manager."
+msgstr "Kan ej ansluta till Asterisk Manager"
+
+#: ../includes/common.php:174
+#, fuzzy
+msgid ""
+"Check the ARI 'main.conf.php' configuration file to set the Asterisk Manager "
+"Account."
+msgstr ""
+"Kontrollera ARI 'main.conf' filen och inst&auml;llningarna f&ouml;r Asterisk "
+"Manager kontot."
+
+#: ../includes/common.php:175
+#, fuzzy
+msgid "Check /etc/asterisk/manager.conf for a proper Asterisk Manager Account"
+msgstr ""
+"Kontrollera /etc/asterisk/manager.conf, se till att det finns ett korrekt "
+"Asterisk Manager konto"
+
+#: ../includes/common.php:176
+#, fuzzy
+msgid ""
+"make sure [general] enabled = yes and a 'permit=' line for localhost or the "
+"webserver."
+msgstr ""
+" som bla har [general] enabled = yes och en 'permit=' f&ouml;r localhost "
+"eller ip nummret f&ouml;r webservern"
+
+#: ../includes/common.php:193 ../includes/common.php:208
+#, fuzzy
+msgid "Check AMP installation, asterisk, and ARI main.conf"
+msgstr "Kontrollera AMP installationen, asterisk databas eller ARI main.conf"
+
+#: ../includes/common.php:344
+msgid "Logout"
+msgstr "Logga ut"
+
+#: ../includes/common.php:349
+msgid "Page Not Found."
+msgstr "Sidan hittas ej."
+
+#: ../includes/display.php:92
+msgid "Search"
+msgstr "S&ouml;k"
+
+#: ../includes/display.php:135
+msgid "Searched for"
+msgstr "S&ouml;kte efter"
+
+#: ../includes/display.php:139
+#, fuzzy, php-format
+msgid "Results %d - %d of %d"
+msgstr "Resultat %d av %d"
+
+#: ../includes/display.php:141
+#, fuzzy, php-format
+msgid "Results %d"
+msgstr "Resultat %d"
+
+#: ../includes/display.php:195
+msgid "First"
+msgstr "F&ouml;rst"
+
+#: ../includes/display.php:208
+msgid "Last"
+msgstr "Sist"
+
+#: ../includes/login.php:267
+msgid "Incorrect Password"
+msgstr "Felaktigt l&ouml;senord"
+
+#: ../includes/login.php:279
+msgid "Incorrect Username or Password"
+msgstr "Felaktigt l&ouml;senord"
+
+#: ../includes/login.php:402 ../includes/login.php:411
+msgid "Login"
+msgstr "Anv&auml;ndarnamn"
+
+#: ../includes/login.php:419
+msgid "Password"
+msgstr "L&ouml;senord"
+
+#: ../includes/login.php:428
+msgid "Submit"
+msgstr "Logga in"
+
+#: ../includes/login.php:436
+msgid "Remember Password"
+msgstr "Kom ih&aring;g l&ouml;senord"
+
+#: ../includes/login.php:451
+#, fuzzy
+msgid "Use your <b>Voicemail Mailbox and Password</b>"
+msgstr ""
+"Anv&auml;nd din <b>R&ouml;stbrevl&aring;das nummer och l&ouml;senord</b>"
+
+#: ../includes/login.php:452
+msgid "This is the same password used for the phone"
+msgstr "Det &auml;r samma l&ouml;senord som till din telefon"
+
+#: ../includes/login.php:454
+msgid ""
+"For password maintenance or assistance, contact your Phone System "
+"Administrator."
+msgstr ""
+"Om du har problem med l&ouml;senord eller beh&ouml;ver hj&auml;lp ska du "
+"kontakta din v&auml;xel ansvarig"
+
+#: ../includes/main.conf.php:152
+msgid "INBOX"
+msgstr "Inbox"
+
+#: ../includes/main.conf.php:154
+msgid "Family"
+msgstr "Familj"
+
+#: ../includes/main.conf.php:156
+msgid "Friends"
+msgstr "V&auml;nner"
+
+#: ../includes/main.conf.php:158
+msgid "Old"
+msgstr "Gamla"
+
+#: ../includes/main.conf.php:160
+msgid "Work"
+msgstr "Arbete"
+
+#: ../includes/main.conf.php:229
+msgid "Directory"
+msgstr "Katalog"
+
+#: ../includes/main.conf.php:230
+msgid "Echo Test"
+msgstr "Eko test"
+
+#: ../includes/main.conf.php:231 ../modules/callmonitor.module:161
+#: ../modules/voicemail.module:324
+msgid "Time"
+msgstr "Tid"
+
+#: ../includes/main.conf.php:232
+msgid "Weather"
+msgstr "V&auml;der"
+
+#: ../includes/main.conf.php:233
+msgid "Schedule wakeup call"
+msgstr "Schemal&auml;gg v&auml;ckningssamtal"
+
+#: ../includes/main.conf.php:234
+msgid "festival test (your extension is XXX)"
+msgstr "Festival test (din anknytning &auml;r XXX)"
+
+#: ../includes/main.conf.php:235
+msgid "Activate Call Waiting (deactivated by default)"
+msgstr "Aktivera Samtal V&auml;ntar"
+
+#: ../includes/main.conf.php:236
+msgid "Deactivate Call Waiting"
+msgstr "Avaktivera Samtal V&auml;ntar"
+
+#: ../includes/main.conf.php:237
+msgid "Call Forwarding System"
+msgstr "Vidarekoppla"
+
+#: ../includes/main.conf.php:238
+msgid "Disable Call Forwarding"
+msgstr "Avaktivera vidarekoppling"
+
+#: ../includes/main.conf.php:239
+#, fuzzy
+msgid "IVR Recording"
+msgstr "R&ouml;stmeny inspelning"
+
+#: ../includes/main.conf.php:240
+msgid "Enable Do-Not-Disturb"
+msgstr "Aktivera St&ouml;r Ej"
+
+#: ../includes/main.conf.php:241
+msgid "Disable Do-Not-Disturb"
+msgstr "Avaktivera St&ouml;r Ej"
+
+#: ../includes/main.conf.php:242
+msgid "Call Forward on Busy"
+msgstr "Vidarekoppla vid upptaget"
+
+#: ../includes/main.conf.php:243
+msgid "Disable Call Forward on Busy"
+msgstr "Avaktivera vidarekoppla vid upptaget"
+
+#: ../includes/main.conf.php:244
+#, fuzzy
+msgid "Message Center (does not ask for extension)"
+msgstr "R&ouml;stbrevl&aring;da (fr&aring;ga ej efter anknytning)"
+
+#: ../includes/main.conf.php:245
+msgid "Enter Message Center"
+msgstr "G&aring; till r&ouml;stbrevl&aring;dan"
+
+#: ../includes/main.conf.php:246
+msgid "Playback IVR Recording"
+msgstr "Spela upp r&ouml;stmeny"
+
+#: ../includes/main.conf.php:247
+msgid "Test Fax"
+msgstr "Fax test"
+
+#: ../includes/main.conf.php:248
+msgid "Simulate incoming call"
+msgstr "Simulera inkommande samtal"
+
+#: ../includes/main.conf.php:289
+msgid "Email voicemail as attachment"
+msgstr "Bifoga meddeladen i E-Post"
+
+#: ../includes/main.conf.php:290
+msgid "Say caller id in recording emailed"
+msgstr "L&auml;ser upp nummret i meddelandet"
+
+#: ../includes/main.conf.php:291
+#, fuzzy
+msgid "Say envelop (date/time) in recording emailed"
+msgstr "L&auml;ser upp informationen i meddelandet"
+
+#: ../includes/main.conf.php:292
+msgid "Delete voicemail when emailed"
+msgstr "Radera meddelandet n&auml;r det e-postats"
+
+#: ../includes/main.conf.php:293
+msgid "Play next message after deleting current message"
+msgstr "Spelar upp n&auml;sta eftera att ha raderat nuvarande"
+
+#: ../includes/main.conf.php:294
+msgid "Ask caller to review their voicemail before sending"
+msgstr ""
+
+#: ../includes/main.conf.php:295
+msgid "Maximum time in seconds a voicemail will record"
+msgstr ""
+
+#: ../modules/callmonitor.module:37 ../modules/callmonitor.module:257
+msgid "Call Monitor"
+msgstr "Samtalsregister"
+
+#: ../modules/callmonitor.module:132
+#, php-format
+msgid "Path is not a directory: %s"
+msgstr "S&oulm;kv&auml;gen leder ej till en mapp: %s"
+
+#: ../modules/callmonitor.module:141 ../modules/voicemail.module:301
+msgid "delete"
+msgstr "Radera"
+
+#: ../modules/callmonitor.module:147
+#, fuzzy
+msgid "duration"
+msgstr "L&auml;ngd"
+
+#: ../modules/callmonitor.module:150
+#, fuzzy
+msgid "ignore"
+msgstr "ignorera"
+
+#: ../modules/callmonitor.module:159 ../modules/voicemail.module:322
+msgid "Date"
+msgstr "Datum"
+
+#: ../modules/callmonitor.module:163 ../modules/voicemail.module:326
+msgid "Caller ID"
+msgstr "Nummerpresentation"
+
+#: ../modules/callmonitor.module:165
+msgid "Source"
+msgstr "K&auml;lla"
+
+#: ../modules/callmonitor.module:167
+msgid "Destination"
+msgstr "M&aring;l"
+
+#: ../modules/callmonitor.module:169
+msgid "Context"
+msgstr "Sammanhang"
+
+#: ../modules/callmonitor.module:171 ../modules/voicemail.module:332
+msgid "Duration"
+msgstr "L&auml;ngd"
+
+#: ../modules/callmonitor.module:202
+msgid "Monitor"
+msgstr "Inspelning"
+
+#: ../modules/callmonitor.module:222 ../modules/voicemail.module:373
+msgid "play"
+msgstr "spela"
+
+#: ../modules/callmonitor.module:259
+#, fuzzy, php-format
+msgid "Call Monitor for %s (%s)"
+msgstr "Samtalsregister f&ouml;r %s (%s)"
+
+#: ../modules/callmonitor.module:311 ../modules/voicemail.module:475
+msgid "select"
+msgstr "Val"
+
+#: ../modules/callmonitor.module:312 ../modules/voicemail.module:476
+msgid "all"
+msgstr "alla"
+
+#: ../modules/callmonitor.module:313 ../modules/voicemail.module:477
+msgid "none"
+msgstr "inga"
+
+#: ../modules/callmonitor.module:533
+msgid "Only deletes recording files, not cdr log"
+msgstr "Raderar endast inspelade filer, inte samtalsloggen"
+
+#: ../modules/conference.module:55
+msgid "My Conference room"
+msgstr ""
+
+#: ../modules/conference.module:78
+#, fuzzy, php-format
+msgid "Conference for %s (%s%s)"
+msgstr "R&ouml;stbrevl&aring;da f&ouml;r %s (%s)"
+
+#: ../modules/help.module:39 ../modules/help.module:68
+msgid "Help"
+msgstr "Hj&auml;lp"
+
+#: ../modules/help.module:70
+#, php-format
+msgid "Help for %s (%s)"
+msgstr "Hj&auml;lp f&ouml;r %s (%s)"
+
+#: ../modules/help.module:77
+msgid "Handset Feature Code"
+msgstr "Kortkoder"
+
+#: ../modules/help.module:80
+msgid "Action"
+msgstr "Utf&ouml;r"
+
+#: ../modules/settings.module:61 ../modules/settings.module:667
+msgid "Settings"
+msgstr "Inst&auml;llningar"
+
+#: ../modules/settings.module:125
+msgid "Call forward number not changed"
+msgstr "Vidarekopplingsnummret ej &auml;ndrat"
+
+#: ../modules/settings.module:126
+#, php-format
+msgid ""
+"Number %s must contain dial numbers (characters like '(', '-', and ')' are "
+"ok)"
+msgstr ""
+"Nummer %s ska inneh&aring;lla nummer (tecknen; '(', '-' och ')' &auml;r "
+"till&aring;tna"
+
+#: ../modules/settings.module:151 ../modules/settings.module:156
+#: ../modules/settings.module:161 ../modules/settings.module:166
+#: ../modules/settings.module:176 ../modules/settings.module:181
+msgid "Voicemail password not changed"
+msgstr "L&ouml;senord f&ouml;r r&ouml;stbrevl&aring;dan har inte &auml;ndrats"
+
+#: ../modules/settings.module:152
+msgid "Password and password confirm must not be blank"
+msgstr ""
+"L&ouml;senord och bekr&auml;fta l&ouml;senord f&aring;r inte vara tomma"
+
+#: ../modules/settings.module:157
+#, fuzzy, php-format
+msgid "Passwords must be all numbers and greater than %d digits"
+msgstr "L&ouml;senordet m&aring;ste vara %d siffror"
+
+#: ../modules/settings.module:162
+#, fuzzy, php-format
+msgid "Passwords must be all numbers and only %d digits"
+msgstr "L&ouml;senordet m&aring;ste vara %d siffror"
+
+#: ../modules/settings.module:167
+msgid "Password and password confirm do not match"
+msgstr "L&ouml;senord och bekr&auml;ftat l&ouml;senord st&auml;mmer inte"
+
+#: ../modules/settings.module:177 ../modules/settings.module:182
+#: ../modules/settings.module:234 ../modules/settings.module:239
+#, fuzzy, php-format
+msgid "%s does not exist or is not writable"
+msgstr "%s finns ej eller &auml;r ej l&auml;sbar"
+
+#: ../modules/settings.module:223
+#, fuzzy
+msgid "Voicemail email and pager address not changed"
+msgstr "L&ouml;senord f&ouml;r r&ouml;stbrevl&aring;dan har inte &auml;ndrats"
+
+#: ../modules/settings.module:233 ../modules/settings.module:238
+#, fuzzy
+msgid "Voicemail email settings not changed"
+msgstr "L&ouml;senord f&ouml;r r&ouml;stbrevl&aring;dan har inte &auml;ndrats"
+
+#: ../modules/settings.module:385
+msgid "Language:"
+msgstr "Spr&aring;k:"
+
+#: ../modules/settings.module:408
+#, fuzzy
+msgid "Call Routing"
+msgstr "Inst&auml;llningar f&ouml;r Vidarekoppling"
+
+#: ../modules/settings.module:411
+#, fuzzy
+msgid "Call Forwarding:"
+msgstr "Vidarekoppling"
+
+#: ../modules/settings.module:419 ../modules/settings.module:507
+#, fuzzy
+msgid "Enable"
+msgstr "Aktivera"
+
+#: ../modules/settings.module:431
+#, fuzzy, php-format
+msgid "Passwords must be all numbers and only %s digits"
+msgstr "L&ouml;senordet m&aring;ste vara %s siffror"
+
+#: ../modules/settings.module:434
+#, fuzzy, php-format
+msgid "Passwords must be all numbers and at least %s digits"
+msgstr "L&ouml;senordet m&aring;ste vara %s siffror"
+
+#: ../modules/settings.module:439
+#, fuzzy
+msgid "Voicemail Password:"
+msgstr "L&ouml;senord f&ouml;r r&ouml;stbrevl&aring;da"
+
+#: ../modules/settings.module:445
+msgid "Enter again to confirm:"
+msgstr "Bekr&auml;fta:"
+
+#: ../modules/settings.module:492
+#, fuzzy
+msgid "Email Voicemail To:"
+msgstr "R&ouml;stbrevl&aring;da"
+
+#: ../modules/settings.module:498
+#, fuzzy
+msgid "Pager Voicemail To:"
+msgstr "R&ouml;stbrevl&aring;da"
+
+#: ../modules/settings.module:558
+msgid "Audio Format:"
+msgstr "Ljud format:"
+
+#: ../modules/settings.module:561
+msgid "Best Quality"
+msgstr "B&auml;sta kvaliten"
+
+#: ../modules/settings.module:562
+msgid "Smallest Download"
+msgstr "Minsta storlek"
+
+#: ../modules/settings.module:570
+msgid "Voicemail Settings"
+msgstr "Inst&auml;llningar f&ouml;r R&ouml;stbrevl&aring;da"
+
+#: ../modules/settings.module:611
+msgid "Call Monitor Settings"
+msgstr "Inst&auml;llningar f&ouml;r Samtalsregister"
+
+#: ../modules/settings.module:614
+msgid "Record INCOMING:"
+msgstr "Spela in inkommande samtal:"
+
+#: ../modules/settings.module:616 ../modules/settings.module:624
+msgid "Always"
+msgstr "Alltid"
+
+#: ../modules/settings.module:617 ../modules/settings.module:625
+msgid "Never"
+msgstr "Aldrig"
+
+#: ../modules/settings.module:618 ../modules/settings.module:626
+msgid "On-Demand"
+msgstr "Vid behov"
+
+#: ../modules/settings.module:622
+msgid "Record OUTGOING:"
+msgstr "Spela in utg&aring;ende samtal:"
+
+#: ../modules/settings.module:669
+#, fuzzy, php-format
+msgid "Settings for %s (%s)"
+msgstr "Inst&auml;llningar f&ouml;r %s (%s)"
+
+#: ../modules/settings.module:705
+msgid "Update"
+msgstr "Uppdatera"
+
+#: ../modules/voicemail.module:45
+msgid "Voicemail"
+msgstr "R&ouml;stbrevl&aring;da"
+
+#: ../modules/voicemail.module:164
+msgid "A folder must be selected before the message can be moved."
+msgstr "En mapp m&aring;sta v&auml;ljas innan meddelandet kan flyttas."
+
+#: ../modules/voicemail.module:178
+msgid "An extension must be selected before the message can be forwarded."
+msgstr ""
+"En anknytning m&aring;ste v&auml;ljas innan meddelandet kan vidarebefodras."
+
+#: ../modules/voicemail.module:304
+msgid "move_to"
+msgstr "Flytta till"
+
+#: ../modules/voicemail.module:307
+#, fuzzy
+msgid "Folder"
+msgstr "Mappar"
+
+#: ../modules/voicemail.module:311
+msgid "forward_to"
+msgstr "Vidarebefodra till"
+
+#: ../modules/voicemail.module:328
+msgid "Priority"
+msgstr "Prioritet"
+
+#: ../modules/voicemail.module:330
+msgid "Orig Mailbox"
+msgstr "Ursprunglig r&ouml;stbrevl&aring;da"
+
+#: ../modules/voicemail.module:362
+msgid "Message"
+msgstr "Meddelande"
+
+#: ../modules/voicemail.module:377
+msgid "Voicemail recording(s) was not found."
+msgstr "R&ouml;stmeddelande hittades inte."
+
+#: ../modules/voicemail.module:378
+#, php-format
+msgid ""
+"On settings page, change voicemail audio format. It is currently set to %s"
+msgstr ""
+"P&aring; inst&auml;llningssidan, &auml;ndra r&ouml;stbrevl&aring;dans "
+"ljudformat. Det &auml;r nu %s"
+
+#: ../modules/voicemail.module:405
+#, fuzzy
+msgid "Voicemail Login not found."
+msgstr "Hittar inte r&ouml;stbrevl&aring;da."
+
+#: ../modules/voicemail.module:406
+msgid "No access to voicemail"
+msgstr "Inget tilltr&auml;de till r&ouml;stbrevl&aring;dan"
+
+#: ../modules/voicemail.module:412
+msgid "No Voicemail Recordings for Admin"
+msgstr "Inga r&ouml;stmeddelande f&ouml;r Admin"
+
+#: ../modules/voicemail.module:428
+#, fuzzy, php-format
+msgid "Voicemail for %s (%s)"
+msgstr "R&ouml;stbrevl&aring;da f&ouml;r %s (%s)"
+
+#: ../modules/voicemail.module:678
+#, fuzzy, php-format
+msgid "Could not create mailbox folder %s on the server"
+msgstr "Kan inte skapa mapp f&ouml;r r&ouml;stbrevl&aring;da"
+
+#: ../modules/voicemail.module:718
+#, php-format
+msgid "Permission denied on folder %s or %s"
+msgstr "Saknar r&auml;ttigheter f&ouml;r mappen %s eller %s"
+
+#: ../misc/recording_popup.php:39
+msgid "download"
+msgstr "ladda ner"
+
+#~ msgid "Folders"
+#~ msgstr "Mappar"
+
+#~ msgid "Version"
+#~ msgstr "Version"
+
+#~ msgid "Passwords must be all numbers and only 4 digits"
+#~ msgstr "L&ouml;senordet m&aring;ste vara 4 siffror"
+
+#~ msgid "Unable to connect to Asterisk Manager"
+#~ msgstr "Kan ej ansluta till Asterisk Manager"
+
+#, fuzzy
+#~ msgid "No Asterisk Manager Interface connection"
+#~ msgstr "Asterisk Call Manager svara ej"
+
+#~ msgid "of"
+#~ msgstr "av"
+
+#~ msgid "Login used"
+#~ msgstr "Anv&auml;nd Login"
+
+#~ msgid "help"
+#~ msgstr "hj&auml;lp"
+
+#~ msgid "not a directory or not readable"
+#~ msgstr "inte en mapp eller ej l&auml;sbar"
+
+#~ msgid "Use your"
+#~ msgstr "Anv&auml;nd din"
+
+#~ msgid "for"
+#~ msgstr "f&ouml;r"
+
+#~ msgid "Password must be all numbers and 4 digits"
+#~ msgstr "L&ouml;senordet m&aring;ste vara 4 siffror"
+
+#~ msgid "Check voicemail audio format on settings page to change from"
+#~ msgstr ""
+#~ "&Auml;ndra inst&auml;llningar f&ouml;r r&ouml;stbrevl&aring;dans ljud "
+#~ "format f&ouml;r att &auml;ndra fr&aring;n"
+
+#~ msgid "on the server"
+#~ msgstr "p&aring; servern"
+
+#~ msgid "No database connection"
+#~ msgstr "Ingen kontakt med databasen"
diff --git a/fs_selfservice/fri/misc/audio.php b/fs_selfservice/fri/misc/audio.php
new file mode 100644
index 0000000..2dc355c
--- /dev/null
+++ b/fs_selfservice/fri/misc/audio.php
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * @file
+ * plays recording file
+ */
+
+
+
+if (isset($_GET['recording'])) {
+
+ chdir("..");
+ include_once("./includes/bootstrap.php");
+
+ global $ARI_CRYPT_PASSWORD;
+
+ $crypt = new Crypt();
+
+ $path = $crypt->decrypt($_GET['recording'],$ARI_CRYPT_PASSWORD);
+
+ // strip ".." from path for security
+ $path = preg_replace('/\.\./','',$path);
+
+ // See if the file exists
+ if (!is_file($path)) { die("<b>404 File not found!</b>"); }
+
+ // Gather relevent info about file
+ $size = filesize($path);
+ $name = basename($path);
+ $extension = strtolower(substr(strrchr($name,"."),1));
+
+ // This will set the Content-Type to the appropriate setting for the file
+ $ctype ='';
+ switch( $extension ) {
+ case "mp3": $ctype="audio/mpeg"; break;
+ case "wav": $ctype="audio/x-wav"; break;
+ case "Wav": $ctype="audio/x-wav"; break;
+ case "WAV": $ctype="audio/x-wav"; break;
+ case "gsm": $ctype="audio/x-gsm"; break;
+
+ // not downloadable
+ default: die("<b>404 File not found!</b>"); break ;
+ }
+
+ // need to check if file is mislabeled or a liar.
+ $fp=fopen($path, "rb");
+ if ($size && $ctype && $fp) {
+ header("Pragma: public");
+ header("Expires: 0");
+ header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
+ header("Cache-Control: public");
+ header("Content-Description: wav file");
+ header("Content-Type: " . $ctype);
+ header("Content-Disposition: attachment; filename=" . $name);
+ header("Content-Transfer-Encoding: binary");
+ header("Content-length: " . $size);
+ fpassthru($fp);
+ }
+}
+
+?> \ No newline at end of file
diff --git a/fs_selfservice/fri/misc/popup.css b/fs_selfservice/fri/misc/popup.css
new file mode 100644
index 0000000..7a53528
--- /dev/null
+++ b/fs_selfservice/fri/misc/popup.css
@@ -0,0 +1,10 @@
+/*
+ * popup
+ */
+
+.popup_download {
+ color: #105D90;
+ margin: 250px;
+ font-size: 12px;
+ text-align: right;
+} \ No newline at end of file
diff --git a/fs_selfservice/fri/misc/recording_popup.php b/fs_selfservice/fri/misc/recording_popup.php
new file mode 100644
index 0000000..1546adc
--- /dev/null
+++ b/fs_selfservice/fri/misc/recording_popup.php
@@ -0,0 +1,46 @@
+<?php
+
+/**
+ * @file
+ * popup window for playing recording
+ */
+
+chdir("..");
+include_once("./includes/bootstrap.php");
+
+?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <TITLE>ARI</TITLE>
+ <link rel="stylesheet" href="popup.css" type="text/css">
+ <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+ </head>
+ <body>
+
+<?php
+
+ global $ARI_CRYPT_PASSWORD;
+
+ $crypt = new Crypt();
+
+ $path = $crypt->encrypt($_GET['recording'],$ARI_CRYPT_PASSWORD);
+
+ if (isset($path)) {
+ if (isset($_GET['date'])) {
+ echo($_GET['date'] . "<br>");
+ }
+ if (isset($_GET['time'])) {
+ echo($_GET['time'] . "<br>");
+ }
+ echo("<br>");
+ echo("<embed src='audio.php?recording=" . $path . "' width=300, height=20 autoplay=true loop=false></embed><br>");
+ echo("<a class='popup_download' href=/recordings/misc/audio.php?recording=" . $path . ">" . _("download") . "</a><br>");
+ }
+
+?>
+
+ </body>
+</html>
+
diff --git a/fs_selfservice/fri/modules/VmX.module b/fs_selfservice/fri/modules/VmX.module
new file mode 100644
index 0000000..61ef653
--- /dev/null
+++ b/fs_selfservice/fri/modules/VmX.module
@@ -0,0 +1,661 @@
+<?php
+
+/**
+ * @file
+ * Functions for the interface to the call monitor recordings
+ */
+
+/**
+ * Class for Followme
+ */
+class VmX {
+
+ var $protocol_table;
+ var $protocol_config_files;
+
+ /*
+ * rank (for prioritizing modules)
+ */
+ function rank() {
+
+ $rank = 6;
+ return $rank;
+ }
+
+ /*
+ * init
+ */
+ function init() {
+
+ }
+
+ /*
+ * Adds menu item to nav menu
+ *
+ * @param $args
+ * Common arguments
+ */
+ function navMenu($args) {
+
+ global $SETTINGS_ALLOW_VMX_SETTINGS;
+ global $ARI_ADMIN_USERNAME;
+
+ $ret = "";
+
+ // We are only going to show the menu
+ // if VmX is allowed
+ if ($SETTINGS_ALLOW_VMX_SETTINGS) {
+
+ $exten = $_SESSION['ari_user']['extension'];
+
+ // and we are not logged in as admin
+ if ($exten!=$ARI_ADMIN_USERNAME) {
+
+ $vmx_enabled = $this->getVmxState($exten,'unavail');
+
+ // and vmx is enabled for this user
+ if ($vmx_enabled !== false)
+ $ret .= "<p><small><small><a href='" . $_SESSION['ARI_ROOT'] . "?m=VmX&f=display'>" . _("VmX&#8482 Locator") . "</a></small></small></p>";
+ }
+ }
+
+ return $ret;
+ }
+
+ /*
+ * Acts on the user settings
+ *
+ * @param $args
+ * Common arguments
+ * @param $a
+ * action
+ */
+ function action($args) {
+
+ global $STANDALONE;
+ global $ARI_ADMIN_USERNAME;
+ global $SETTINGS_ALLOW_VMX_SETTINGS;
+
+ // args
+ $m = getArgument($args,'m');
+ $a = getArgument($args,'a');
+
+ $follow_me_disabled = getArgument($args,'follow_me_disabled');
+
+ $vmx_option_0_number = getArgument($args, 'vmx_option_0_number');
+ $vmx_option_0_system_default = getArgument($args, 'vmx_option_0_system_default');
+ $vmx_option_1_number = getArgument($args, 'vmx_option_1_number');
+ $vmx_option_1_system_default = getArgument($args, 'vmx_option_1_system_default');
+ $vmx_option_2_number = getArgument($args, 'vmx_option_2_number');
+ $vmx_unavail_enabled = getArgument($args, 'vmx_unavail_enabled');
+ $vmx_busy_enabled = getArgument($args, 'vmx_busy_enabled');
+ $vmx_play_instructions = getArgument($args, 'vmx_play_instructions');
+ $vmx_disabled = getArgument($args, 'vmx_disabled');
+
+ $exten = $_SESSION['ari_user']['extension'];
+
+ // The action is 'update
+ if ($a=='update') {
+
+ $follow_me_disabled = ($this->getFollowMeListRingTime($exten) > 0)?0:1;
+
+
+ $vmx_disabled = $this->getVmxState($exten,'unavail');
+ if ($vmx_disabled === false) {
+ $vmx_disabled = true;
+ $SETTINGS_ALLOW_VMX_SETTINGS=false;
+ } else {
+ $vmx_disabled = false;
+ }
+ if ($vmx_disabled) {
+
+ setcookie("ari_vmx_disabled", $vmx_disabled, time()+365*24*60*60);
+ $vmx_disabled_delayed = $vmx_disabled;
+ $_SESSION['ari_error'] =
+ _("Your Premium VmX Locator service has been disabled, REFRESH your browser to remove this message") . "<br>" .
+ sprintf(_("Check with your Telephone System Administrator if you think there is a problem"));
+ }
+
+ if (! $vmx_disabled) {
+
+ // set database
+ $this->setVmxState($exten,'unavail',$vmx_unavail_enabled);
+ $this->setVmxState($exten,'busy',$vmx_busy_enabled);
+ $this->setVmxPlayInstructions($exten,'unavail',$vmx_play_instructions);
+ $this->setVmxPlayInstructions($exten,'busy',$vmx_play_instructions);
+
+ // store cookie
+ setcookie("ari_vmx_unavail_enabled", $vmx_unavail_enabled, time()+365*24*60*60);
+ setcookie("ari_vmx_busy_enabled", $vmx_busy_enabled, time()+365*24*60*60);
+ setcookie("ari_vmx_play_instructions", $vmx_play_instructions, time()+365*24*60*60);
+
+ $stripped_vmx_option_0_number = preg_replace('/-|\(|\)|\s/','',$vmx_option_0_number);
+
+ if ($vmx_option_0_system_default) {
+ $this->setVmxOptionNumber($exten,'0','unavail',"");
+ $this->setVmxOptionNumber($exten,'0','busy',"");
+ setcookie("ari_vmx_option_0_system_default", $vmx_option_0_system_default, time()+365*24*60*60);
+ if (is_numeric($stripped_vmx_option_0_number) || !$stripped_vmx_option_0_number) {
+ $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_vmx_option_0_number']);
+ if ($vmx_option_0_number && $stripped!=$stripped_vmx_option_0_number) {
+ setcookie("ari_vmx_option_0_number", $call_vmx_option_0_number, time()+365*24*60*60);
+ }
+ }
+ } else {
+ if (!is_numeric($stripped_vmx_option_0_number) && $stripped_vmx_option_0_number) {
+ $_SESSION['ari_error'] =
+ _("Option 0 not changed") . "<br>" .
+ sprintf(_("Number %s must contain dial numbers (characters like '(', '-', and ')' are ok)"),$vmx_option_0_number);
+ }
+ else {
+
+ // set database
+ $this->setVmxOptionNumber($exten,'0','unavail',$stripped_vmx_option_0_number);
+ $this->setVmxOptionNumber($exten,'0','busy',$stripped_vmx_option_0_number);
+
+ // store cookie
+ $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_vmx_option_0_number']);
+ if ($vmx_option_0_number && $stripped!=$stripped_vmx_option_0_number) {
+ setcookie("ari_vmx_option_0_number", $call_vmx_option_0_number, time()+365*24*60*60);
+ }
+ }
+ }
+
+ $stripped_vmx_option_1_number = preg_replace('/-|\(|\)|\s/','',$vmx_option_1_number);
+ if ($vmx_option_1_system_default && !$follow_me_disabled) {
+ $this->setVmxOptionFollowMe($exten,'1','unavail');
+ $this->setVmxOptionFollowMe($exten,'1','busy');
+ setcookie("ari_vmx_option_1_system_default", $vmx_option_1_system_default, time()+365*24*60*60);
+ if (is_numeric($stripped_vmx_option_1_number) || !$stripped_vmx_option_1_number) {
+ $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_vmx_option_1_number']);
+ if ($vmx_option_1_number && $stripped!=$stripped_vmx_option_1_number) {
+ setcookie("ari_vmx_option_1_number", $call_vmx_option_1_number, time()+365*24*60*60);
+ }
+ }
+ }
+ else {
+
+ if (!is_numeric($stripped_vmx_option_1_number) && $stripped_vmx_option_1_number) {
+ $_SESSION['ari_error'] =
+ _("Option 1 not changed") . "<br>" .
+ sprintf(_("Number %s must contain dial numbers (characters like '(', '-', and ')' are ok)"),$vmx_option_1_number);
+ }
+ else {
+
+ // set database
+ $this->setVmxOptionNumber($exten,'1','unavail',$stripped_vmx_option_1_number);
+ $this->setVmxOptionNumber($exten,'1','busy',$stripped_vmx_option_1_number);
+
+ // store cookie
+ $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_vmx_option_1_number']);
+ if ($vmx_option_1_number && $stripped!=$stripped_vmx_option_1_number) {
+ setcookie("ari_vmx_option_1_number", $call_vmx_option_1_number, time()+365*24*60*60);
+ }
+ }
+ }
+
+ $stripped_vmx_option_2_number = preg_replace('/-|\(|\)|\s/','',$vmx_option_2_number);
+ if (!is_numeric($stripped_vmx_option_2_number) && $stripped_vmx_option_2_number) {
+ $_SESSION['ari_error'] =
+ _("Option 2 not changed") . "<br>" .
+ sprintf(_("Number %s must contain dial numbers (characters like '(', '-', and ')' are ok)"),$vmx_option_2_number);
+ }
+ else {
+
+ // set database
+ $this->setVmxOptionNumber($exten,'2','unavail',$stripped_vmx_option_2_number);
+ $this->setVmxOptionNumber($exten,'2','busy',$stripped_vmx_option_2_number);
+
+ // store cookie
+ $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_vmx_option_2_number']);
+ if ($vmx_option_2_number && $stripped!=$stripped_vmx_option_2_number) {
+ setcookie("ari_vmx_option_2_number", $call_vmx_option_2_number, time()+365*24*60*60);
+ }
+ }
+ } // vmx_disabled false
+ }
+
+ // redirect to see updated page
+ $ret .= "
+ <head>
+ <script>
+ <!--
+ window.location = \"" . $_SESSION['ARI_ROOT'] . "?m=" . $m . "\"
+ // -->
+ </script>
+ </head>";
+
+ return $ret;
+ }
+
+ /*
+ * Displays stats page
+ *
+ * @param $args
+ * Common arguments
+ */
+ function display($args) {
+ global $SETTINGS_ALLOW_VMX_SETTINGS;
+
+ global $loaded_modules;
+
+ // args
+ $m = getArgument($args,'m');
+ $q = getArgument($args,'q');
+ $start = getArgument($args,'start');
+ $span = getArgument($args,'span');
+
+ $displayname = $_SESSION['ari_user']['displayname'];
+ $exten = $_SESSION['ari_user']['extension'];
+
+ $display = new DisplaySearch();
+
+ $follow_me_listring_time = $this->getFollowMeListRingTime($exten);
+
+ //TODO: Set this better than this?
+ $follow_me_disabled = ($follow_me_listring_time > 0)?0:1;
+ setcookie("ari_follow_me_disabled", $follow_me_disabled, time()+365*24*60*60);
+
+
+ $vmx_unavail_enabled=$this->getVmxState($exten,'unavail');
+ if ($vmx_unavail_enabled === false) {
+ $vmx_disabled = true;
+ setcookie("ari_vmx_disabled", $vmx_disabled, time()+365*24*60*60);
+ $SETTINGS_ALLOW_VMX_SETTINGS=false;
+ } else {
+ $vmx_disabled = false;
+ setcookie("ari_vmx_disabled", false, time()+365*24*60*60);
+ $vmx_busy_enabled=$this->getVmxState($exten,'busy');
+ $vmx_play_instructions=$this->getVmxPlayInstructions($exten);
+ $vmx_option_0_number=$this->getVmxOptionNumber($exten,'0');;
+ $vmx_option_1_number=$this->getVmxOptionNumber($exten,'1');;
+ $vmx_option_2_number=$this->getVmxOptionNumber($exten,'2');;
+
+ if (is_numeric($vmx_option_0_number)) {
+ $vmx_option_0_system_default='';
+ $vmx_option_0_number_text_box_options='';
+ } else {
+ $vmx_option_0_system_default='checked';
+ $vmx_option_0_number_text_box_options="disabled style='background: #DDD;'";
+ }
+
+ // if follow-me is enabled then the options are a numberic value (dial a phone number)
+ // or a followme target (FMnnn) which should not be displayed but means the box is checked
+ // or otherwise blank (or garbage in which case blank it)
+ //
+ if (!$follow_me_disabled) {
+ $vmx_option_1_system_default=$this->getVmxOptionFollowMe($exten,'1');
+ if ($vmx_option_1_system_default) {
+ $vmx_option_1_number = '';
+ $vmx_option_1_number_text_box_options="disabled style='background: #DDD;'";
+ }
+ }
+ }
+
+ $set_vmx_text .=
+ "
+ <br>
+ <table class='settings'>
+ <tr>
+ <td><a href='#' class='info'>" . _("Use When:") . "<span>" . _("Menu options below are available during your personal voicemail greeting playback. <br/><br/>Check both to use at all times.") . "<br></span></a></td> <td>
+ <input " . $vmx_unavail_enabled . " type=checkbox name='vmx_unavail_enabled' value='checked'>
+ <small>" . _("unavailable") . "</small>
+ </td>
+ <td>
+ <input " . $vmx_busy_enabled . " type=checkbox name='vmx_busy_enabled' value='checked'>
+ <small>" . _("busy") . "</small>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='#' class='info'>" . _("Voicemail Instructions:") ."<span>" . _("Uncheck to play a beep after your personal voicemail greeting.") . "<br></span></a></td>
+ <td>
+ <input " . $vmx_play_instructions . " type=checkbox name='vmx_play_instructions' value='checked'>
+ <small>" . _("Standard voicemail prompts.") . "</small>
+ </td>
+ </tr>
+ </table>
+ <br>
+ <br>
+ <table class='settings'>
+ <tr>
+ <td><a href='#' class='info'>" . _("Press 0:") . "<span>" . _("Pressing 0 during your personal voicemail greeing goes to the Operator.
+ Uncheck to enter another destination here.") . "<br></span></a>
+ </td>
+ <td>
+ <input " . $vmx_option_0_number_text_box_options . " name='vmx_option_0_number' type='text' size=24 value='" . $vmx_option_0_number . "'>
+ </td>
+ <td>
+ <input " . $vmx_option_0_system_default . " type=checkbox name='vmx_option_0_system_default' value='checked' OnClick=\"disable_fields(); return true;\">
+ <small>" . _("Go To Operator") . "</small>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='#' class='info'>" . _("Press 1:") . "<span>";
+
+ if ($follow_me_disabled)
+ $set_vmx_text .= _("The remaining options can have internal extensions, ringgroups, queues and external numbers that may be rung. It is often used to include your cell phone. You should run a test to make sure that the number is functional any time a change is made so you don't leave a caller stranded or receiving invalid number messages.");
+ else
+ $set_vmx_text .= _("Enter an alternate number here, then change your personal voicemail greeting to let callers know to press 1 to reach that number. <br/><br/>If you'd like to use your Follow Me List, check \"Send to Follow Me\" and disable Follow Me above.");
+
+
+ $set_vmx_text .=
+ " <br></span></a>
+ </td>
+ <td>
+ <input " . $vmx_option_1_number_text_box_options . " name='vmx_option_1_number' type='text' size=24 value='" . $vmx_option_1_number . "'>
+ </td>
+ <td>";
+
+
+ if (!$follow_me_disabled)
+ $set_vmx_text .= "<input " . $vmx_option_1_system_default . " type=checkbox name='vmx_option_1_system_default' value='checked' OnClick=\"disable_fields(); return true;\"><small>" . _("Send to Follow-Me") . "</small>";
+
+
+ $set_vmx_text .=
+ "
+ </td>
+ </tr>
+ <tr>
+ <td><a href='#' class='info'>" . _("Press 2:") . "<span>" . _("Use any extensions, ringgroups, queues or external numbers. <br/><br/>Remember to re-record your personal voicemail greeting and include instructions. Run a test to make sure that the number is functional.") . "<br></span></a></td>
+ <td>
+ <input " . $vmx_option_2_number_text_box_options . " name='vmx_option_2_number' type='text' size=24 value='" . $vmx_option_2_number . "'>
+ </td>
+ </tr>
+ </table>
+ <br>
+ <br>
+ ";
+
+
+ // Now we should be ready to build the page
+ $ret .= checkErrorMessage();
+
+ $headerText = sprintf(_("VmX Locator&#8482; Settings for %s (%s)"),$displayname,$exten);
+
+ $ret .= $display->displayHeaderText($headerText);
+ $ret .= $display->displayLine();
+
+ $ret .=
+ "<SCRIPT LANGUAGE='JavaScript'>
+ <!-- Begin
+ function disable_fields() {
+
+ if (document.ari_settings.vmx_option_0_system_default.checked) {
+ document.ari_settings.vmx_option_0_number.style.backgroundColor = '#DDD';
+ document.ari_settings.vmx_option_0_number.disabled = true;
+ }
+ else {
+ document.ari_settings.vmx_option_0_number.style.backgroundColor = '#FFF';
+ document.ari_settings.vmx_option_0_number.disabled = false;
+ }";
+
+ if (!$follow_me_disabled) {
+ $ret .= "
+ if (document.ari_settings.vmx_option_1_system_default.checked) {
+ document.ari_settings.vmx_option_1_number.style.backgroundColor = '#DDD';
+ document.ari_settings.vmx_option_1_number.disabled = true;
+ }
+ else {
+ document.ari_settings.vmx_option_1_number.style.backgroundColor = '#FFF';
+ document.ari_settings.vmx_option_1_number.disabled = false;
+ }";
+ }
+ $ret .=
+ "}
+ // End -->
+ </script>";
+
+ $ret .=
+ "<form class='settings' name='ari_settings' action='' method='GET'>
+ <input type=hidden name=m value=" . $m . ">
+ <input type=hidden name=f value='action'>
+ <input type=hidden name=a value='update'>
+ " . $set_vmx_text . "
+ <br>
+ <input name='submit' type='submit' value='" . _("Update") . "'>
+ </form>";
+
+ return $ret;
+ }
+
+ /*
+ * Gets VMX option FollowMe
+ *
+ * @param $exten
+ * Extension to get information about
+ * @param $digit
+ * Option number to get
+ * @param $mode
+ * Mode to get (unavail/busy)
+ * @return $response
+ * checked if set to got to extesion's follow-me on this option
+ */
+ function getVmxOptionFollowMe($exten, $digit, $mode='unavail') {
+
+ global $asterisk_manager_interface;
+
+ $digit = trim($digit);
+
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/vmx/$mode/$digit/ext\r\n\r\n");
+ return (($response == 'FM'.$exten) ? 'checked':'');
+ }
+
+ /*
+ * Sets VMX option FollowMe
+ *
+ * @param $exten
+ * Extension to set information about
+ * @param $digit
+ * Option number to set
+ * @param $mode
+ * Mode to set (unavail/busy)
+ * @param $context
+ * Context to set ext to (default from-findmefollow)
+ * @param $priority
+ * Priority to set ext to (default 1)
+ */
+ function setVmxOptionFollowMe($exten, $digit, $mode, $context='ext-findmefollow', $priority='1') {
+
+ global $asterisk_manager_interface;
+
+ $value_opt = "FM$exten";
+
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/vmx/$mode/$digit/ext $value_opt\r\n\r\n");
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/vmx/$mode/$digit/context $context\r\n\r\n");
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/vmx/$mode/$digit/pri $priority\r\n\r\n");
+ }
+
+ /*
+ * Gets VMX option number
+ *
+ * @param $exten
+ * Extension to get information about
+ * @param $digit
+ * Option number to get
+ * @param $mode
+ * Mode to get (unavail/busy)
+ * @return $number
+ * Number to use or blank if disabled
+ */
+ function getVmxOptionNumber($exten, $digit, $mode='unavail') {
+
+ global $asterisk_manager_interface;
+
+ $number = '';
+ $digit = trim($digit);
+
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/vmx/$mode/$digit/ext\r\n\r\n");
+ if (is_numeric($response)) {
+ $number = $response;
+ }
+
+ $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE["ari_vmx_option_${digit}_number"]);
+ if ($stripped==$number) {
+ $number = $_COOKIE["ari_vmx_option_${digit}_number"];
+ }
+
+ return $number;
+ }
+
+ /*
+ * Sets VMX option number
+ *
+ * @param $exten
+ * Extension to set information about
+ * @param $digit
+ * Option number to set
+ * @param $mode
+ * Mode to set (unavail/busy)
+ * @param $number
+ * Number to set ext to (blank will delete it)
+ * @param $context
+ * Context to set ext to (default from-internal)
+ * @param $priority
+ * Priority to set ext to (default 1)
+ */
+ function setVmxOptionNumber($exten, $digit, $mode, $number, $context='from-internal', $priority='1') {
+
+ global $asterisk_manager_interface;
+
+ $value_opt = trim($number);
+
+ if (is_numeric($value_opt)) {
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/vmx/$mode/$digit/ext $value_opt\r\n\r\n");
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/vmx/$mode/$digit/context $context\r\n\r\n");
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/vmx/$mode/$digit/pri $priority\r\n\r\n");
+ } else {
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database deltree AMPUSER $exten/vmx/$mode/$digit\r\n\r\n");
+ }
+ }
+
+ /*
+ * Sets VMX State
+ *
+ * @param $exten
+ * Extension to modify
+ * @param $mode
+ * Mode to set (unavail/busy)
+ * @param $vmx_state
+ * enabled/disabled state based on check box value
+ */
+ function setVmxState($exten,$mode,$vmx_state) {
+
+ global $asterisk_manager_interface;
+
+ $value_opt = ($vmx_state)?'enabled':'disabled';
+
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/vmx/$mode/state $value_opt\r\n\r\n");
+ }
+
+ /*
+ * Gets VMX State
+ *
+ * @param $exten
+ * Extension to get information about
+ * @param $mode
+ * Mode to get (unavail/busy)
+ * @return $data
+ * state of variable (checked/blank) or false if no poper value
+ */
+ function getVmxState($exten, $mode='unavail') {
+
+ global $asterisk_manager_interface;
+
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/vmx/$mode/state\r\n\r\n");
+
+ if (preg_match("/enabled/",$response)) {
+ $response='checked';
+ }
+ elseif (preg_match("/disabled/",$response)) {
+ $response='';
+ }
+ else {
+ $response = false;
+ }
+
+ //TODO: really need to check for a bogus response, see how other side does it
+ //
+ return $response;
+
+ }
+
+ /*
+ * Sets VMX Play Instructions
+ *
+ * @param $exten
+ * Extension to modify
+ * @param $vmx_play_instructions
+ * play instructions or just beep (checked, blank)
+ * @param $mode
+ * Mode to set (unavail/busy)
+ */
+ function setVmxPlayInstructions($exten,$mode,$vmx_play_instructions) {
+
+ global $asterisk_manager_interface;
+
+ $value_opt = ($vmx_play_instructions)?'""':'s';
+
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/vmx/$mode/vmxopts/timeout $value_opt\r\n\r\n");
+ }
+
+ /*
+ * Get VMX Play Instructions
+ *
+ * @param $exten
+ * Extension to get information about
+ * @param $mode
+ * Mode to get (unavail/busy)
+ * @return $data
+ * state of variable (checked/blank) or false if no poper value
+ */
+ function getVmxPlayInstructions($exten, $mode='unavail') {
+
+ global $asterisk_manager_interface;
+
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/vmx/$mode/vmxopts/timeout\r\n\r\n");
+
+ if (preg_match("/s/",$response)) {
+ $response='';
+ }
+ else {
+ $response='checked';
+ }
+
+ //TODO: really need to check for a bogus response, see how other side does it
+ //
+ return $response;
+
+ }
+
+
+ /*
+ * Gets Follow Me List-Ring Time if set
+ *
+ * @param $exten
+ * Extension to get information about
+ * @return $number
+ * follow me list-ring time returned if set
+ */
+ function getFollowMeListRingTime($exten) {
+
+ global $asterisk_manager_interface;
+
+ $number = '';
+
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/followme/grptime\r\n\r\n");
+ if (is_numeric($response)) {
+ $number = $response;
+ }
+
+ $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_follow_me_listring_time']);
+ if ($stripped==$number) {
+ $number = $_COOKIE['ari_follow_me_listring_time'];
+ }
+
+ return $number;
+ }
+
+
+} // class
+
+?>
diff --git a/fs_selfservice/fri/modules/callmonitor.module b/fs_selfservice/fri/modules/callmonitor.module
new file mode 100644
index 0000000..25924d5
--- /dev/null
+++ b/fs_selfservice/fri/modules/callmonitor.module
@@ -0,0 +1,675 @@
+<?php
+
+/**
+ * @file
+ * Functions for the interface to the call monitor recordings
+ */
+
+/**
+ * Class for Callmonitor
+ */
+class Callmonitor {
+
+ /*
+ * rank (for prioritizing modules)
+ */
+ function rank() {
+
+ $rank = 2;
+ return $rank;
+ }
+
+ /*
+ * init
+ */
+ function init() {
+ }
+
+ /*
+ * Adds menu item to nav menu
+ *
+ * @param $args
+ * Common arguments
+ */
+ function navMenu($args) {
+
+ $ret .= "<p><small><small><a href='" . $_SESSION['ARI_ROOT'] . "?m=Callmonitor&f=display'>" . _("Call Monitor") . "</a></small></small></p><br>";
+
+ return $ret;
+ }
+
+ /*
+ * Acts on the selected call monitor recordings in the method indicated by the action and updates page
+ *
+ * @param $args
+ * Common arguments
+ */
+ function recAction($args) {
+
+ // args
+ $m = getArgument($args,'m');
+ $a = getArgument($args,'a');
+ $q = getArgument($args,'q');
+ $start = getArgument($args,'start');
+ $span = getArgument($args,'span');
+ $order = getArgument($args,'order');
+ $sort = getArgument($args,'sort');
+ $duration_filter = getArgument($args,'duration_filter');
+
+ // get files
+ $files = array();
+ foreach($_REQUEST as $key => $value) {
+ if (preg_match('/selected/',$key)) {
+ array_push($files, $value);
+ }
+ }
+
+ if ($a=='delete') {
+ $this->deleteRecData($files);
+ }
+
+ if ($a=='ignore') {
+
+ $start = 0;
+
+ setcookie("ari_duration_filter", $duration_filter, time()+365*24*60*60);
+ }
+
+ // redirect to see updated page
+ $ret .= "
+ <head>
+ <script>
+ <!--
+ window.location = \"" . $_SESSION['ARI_ROOT'] . "?m=" . $m . "&q=" . $q . "&start=" . $start . "&span=" . $span . "&order=" . $order . "&sort=" . $sort . "&duration_filter=" . $duration_filter . "\"
+ // -->
+ </script>
+ </head>";
+
+ return $ret;
+ }
+
+ /*
+ * Displays stats page
+ *
+ * @param $args
+ * Common arguments
+ */
+ function display($args) {
+
+ global $ASTERISK_CALLMONITOR_PATH;
+ global $CALLMONITOR_ALLOW_DELETE;
+ global $AJAX_PAGE_REFRESH_ENABLE;
+
+ $display = new DisplaySearch();
+
+ // get the search string
+ $m = getArgument($args,'m');
+ $f = getArgument($args,'f');
+ $q = getArgument($args,'q');
+ $start = getArgument($args,'start');
+ $span = getArgument($args,'span');
+ $order = getArgument($args,'order');
+ $sort = getArgument($args,'sort');
+ $duration_filter = getArgument($args,'duration_filter');
+
+ $start = $start=='' ? 0 : $start;
+ $span = $span=='' ? 15 : $span;
+ $order = $order=='' ? 'calldate' : $order;
+ $sort = $sort=='' ? 'desc' : $sort;
+
+ $displayname = $_SESSION['ari_user']['displayname'];
+ $extension = $_SESSION['ari_user']['extension'];
+
+ // get data
+ $record_count = $this->getCdrCount($q,$duration_filter);
+ $data = $this->getCdrData($q,$duration_filter,$start,$span,$order,$sort);
+
+ // get the call monitor recording files
+ $paths = split(';',$ASTERISK_CALLMONITOR_PATH);
+ foreach($paths as $key => $path) {
+ if (!is_dir($path)) {
+ $_SESSION['ari_error'] .= sprintf(_("Path is not a directory: %s"),$path) . "<br>";
+ }
+ }
+ $recordings = $this->getRecordings($ASTERISK_CALLMONITOR_PATH,$data);
+
+ // build controls
+ if ($CALLMONITOR_ALLOW_DELETE) {
+ $controls .= "
+ <button class='infobar' type='submit' onclick=\"document.callmonitor_form.a.value='delete'\">
+ " . _("delete") . "
+ </button>
+ &nbsp;";
+ }
+
+ $controls .= "
+ <small>" . _("duration") . "</small>
+ <input name='duration_filter' type='text' size=4 maxlength=8 value='" . $_COOKIE['ari_duration_filter'] . "'>
+ <button class='infobar' type='submit' onclick=\"document.callmonitor_form.a.value='ignore'\">
+ " . _("ignore") . "
+ </button>";
+
+ // table header
+ if ($CALLMONITOR_ALLOW_DELETE) {
+ $recording_delete_header = "<th></th>";
+ }
+
+ $fields[0]['field'] = "calldate";
+ $fields[0]['text'] = _("Date");
+ $fields[1]['field'] = "calldate";
+ $fields[1]['text'] = _("Time");
+ $fields[2]['field'] = "clid";
+ $fields[2]['text'] = _("Caller ID");
+ $fields[3]['field'] = "src";
+ $fields[3]['text'] = _("Source");
+ $fields[4]['field'] = "dst";
+ $fields[4]['text'] = _("Destination");
+ $fields[5]['field'] = "dcontext";
+ $fields[5]['text'] = _("Context");
+ $fields[6]['field'] = "duration";
+ $fields[6]['text'] = _("Duration");
+
+ $i = 0;
+ while ($fields[$i]) {
+
+ $field = $fields[$i]['field'];
+ $text = $fields[$i]['text'];
+ if ($order==$field) {
+ if ($sort=='asc') {
+ $currentSort = 'desc';
+ $arrowImg = "<img src='theme/images/arrow-asc.gif' alt='sort'>";
+ }
+ else {
+ $currentSort = 'asc';
+ $arrowImg = "<img src='theme/images/arrow-desc.gif' alt='sort'>";
+ }
+
+ if ($i==1) {
+ $arrowImg = '';
+ }
+ }
+ else {
+ $arrowImg = '';
+ $currentSort = 'desc';
+ }
+
+ $unicode_q = urlencode($q);
+ $recording_header .= "<th><a href=" . $_SESSION['ARI_ROOT'] . "?m=" . $m . "&f=" . $f . "&q=" . $unicode_q . "&order=" . $field . "&sort=" . $currentSort . ">" . $text . $arrowImg . "</a></th>";
+
+ $i++;
+ }
+ $recording_header .= "<th>" . _("Monitor") . "</th>";
+
+ // table body
+ foreach($data as $key=>$value) {
+
+ // recording file
+ $recording = $recordings[$value['uniqueid'] . $value['calldate']];
+
+ // date and time
+ $buf = split(' ', $value[calldate]);
+ $date = $buf[0];
+ $time = $buf[1];
+
+ // recording delete checkbox
+ if ($CALLMONITOR_ALLOW_DELETE) {
+ $recording_delete_checkbox = "<td class='checkbox'><input type=checkbox name='selected" . ++$i . "' value=" . $recording . "></td>";
+ }
+
+ $recordingLink = '';
+ if (is_file($recordings[$value['uniqueid'] . $value['calldate']])) {
+ $recordingLink = "<a href='#' onClick=\"javascript:popUp('misc/recording_popup.php?recording=" . $recording . "&date=" . $date . "&time=" . $time . "'); return false;\">" . _("play") . "</a>";
+ }
+
+ $recording_body .= "<tr>
+ " . $recording_delete_checkbox . "
+ <td width=70>" . $date . "</td>
+ <td>" . $time . "</td>
+ <td>" . $value[clid] . "</td>
+ <td>" . $value[src] . "</td>
+ <td>" . $value[dst] . "</td>
+ <td>" . $value[dcontext] . "</td>
+ <td width=90>" . $value[duration] . " sec</td>
+ <td>" . $recordingLink . "</td>
+ </tr>";
+ }
+ if (!count($data)) {
+ $recording_body .= "<tr></tr>";
+ }
+
+ // options
+ $url_opts = array();
+ $url_opts['sort'] = $sort;
+ $url_opts['order'] = $order;
+ $url_opts['duration_filter'] = $duration_filter;
+
+ // build page content
+ $ret .= checkErrorMessage();
+
+ // ajax page refresh script
+ if ($AJAX_PAGE_REFRESH_ENABLE) {
+ // $ret .= ajaxRefreshScript($args);
+ }
+
+ // header
+ if ($_SESSION['ari_user']['admin_callmonitor']) {
+ $header_text = _("Call Monitor");
+ } else {
+ $header_text = sprintf(_("Call Monitor for %s (%s)"),$displayname,$extension);
+ }
+ $ret .= $display->displayHeaderText($header_text);
+ $ret .= $display->displaySearchBlock('left',$m,$q,$url_opts,true);
+
+ // start form
+ if ($CALLMONITOR_ALLOW_DELETE) {
+
+ $ret .= "
+ <form name='callmonitor_form' action='" . $_SESSION['ARI_ROOT'] . "' method='GET'>
+ <input type=hidden name=m value=" . $m . ">
+ <input type=hidden name=f value=recAction>
+ <input type=hidden name=a value=''>
+ <input type=hidden name=q value=" . $q . ">
+ <input type=hidden name=start value=" . $start . ">
+ <input type=hidden name=span value=" . $span . ">
+ <input type=hidden name=order value=" . $order . ">
+ <input type=hidden name=sort value=" . $sort . ">";
+ }
+
+ $ret .= $display->displayInfoBarBlock($controls,$q,$start,$span,$record_count);
+
+ // javascript for popup and message actions
+ $ret .= "
+ <SCRIPT LANGUAGE='JavaScript'>
+ <!-- Begin
+ function popUp(URL) {
+ eval(\"page = window.open(URL, 'play', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=1,width=324,height=110');\");
+ }
+
+ function checkAll(form,set) {
+ var elem = 0;
+ var i = 0;
+ while (elem = form.elements[i]) {
+ if (set) {
+ elem.checked = true;
+ } else {
+ elem.checked = false;
+ }
+ i++;
+ }
+ return true;
+ }
+ // End -->
+ </script>";
+
+ // call monitor delete recording controls
+ if ($CALLMONITOR_ALLOW_DELETE) {
+ $ret .= "
+ <table>
+ <tr>
+ <td>
+ <small>" . _("select") . ": </small>
+ <small><a href='' OnClick=\"checkAll(document.callmonitor_form,true); return false;\">" . _("all") . "</a></small>
+ <small><a href='' OnClick=\"checkAll(document.callmonitor_form,false); return false;\">" . _("none") . "</a></small>
+ </td>
+ </tr>
+ </table>";
+ }
+ else {
+ $ret .= "<br>";
+ }
+
+ // table
+ $ret .= "
+ <table class='callmonitor'>
+ <tr>
+ " . $recording_delete_header . "
+ " . $recording_header . "
+ </tr>
+ " . $recording_body . "
+ </table>";
+
+ $start = getArgument($args,'start');
+ $span = getArgument($args,'span');
+ $order = getArgument($args,'order');
+ $sort = getArgument($args,'sort');
+
+ // end form
+ if ($CALLMONITOR_ALLOW_DELETE) {
+ $ret .= "</form>";
+ }
+
+ $ret .= $display->displaySearchBlock('center',$m,$q,$url_opts,false);
+ $ret .= $display->displayNavigationBlock($m,$q,$url_opts,$start,$span,$record_count);
+
+ return $ret;
+ }
+
+ /*
+ * Checks for a recording file
+ *
+ * @param $asterisk_callmonitor_path
+ * path call monitor recording directory on the asterisk server
+ * @param $data
+ * current call monitor recordings on the asterisk server
+ * @return $recording
+ * returns an array of $recording file names if found
+ */
+ function getRecordings($asterisk_callmonitor_path,$data) {
+
+ global $CALLMONITOR_ONLY_EXACT_MATCHING;
+ global $CALLMONITOR_AGGRESSIVE_MATCHING;
+
+ $recordings = array();
+
+ $extension = $_SESSION['ari_user']['extension'];
+
+ $paths = split(';',$asterisk_callmonitor_path);
+ foreach($paths as $key => $path) {
+ $paths[$key] = fixPathSlash($paths[$key]);
+ }
+
+ $files = array();
+ if (!$CALLMONITOR_ONLY_EXACT_MATCHING) {
+ $filter = '';
+ $recursiveMax = 6;
+ $recursiveCount = 0;
+ foreach($paths as $key => $path) {
+ $path_files = getFiles($path,$filter,$recursiveMax,$recursiveCount);
+ if ($path_files) {
+ $files = array_merge($files,$path_files);
+ }
+ }
+ rsort($files);
+ }
+
+ foreach($data as $data_key => $data_value) {
+
+ $recording='';
+
+ $calldate = $data_value['calldate'];
+ $duration = $data_value['duration'];
+ $lastdata = $data_value['lastdata'];
+ $uniqueid = $data_value['uniqueid'];
+ $userfield = $data_value['userfield'];
+
+ // timestamps
+ $st = trim(strtotime($calldate));
+ $et = trim(strtotime($calldate) + $duration); // for on-demand call recordings
+
+ // unique file key
+ if ($uniqueid) {
+ $buf = preg_replace('/\-|\:/', '', $calldate);
+ $calldate_key = preg_replace('/\s+/', '-', $buf);
+ $unique_file_key = $calldate_key . "-" . $uniqueid;
+ }
+ if ($unique_file_key=='') {
+ $buf = preg_split("/\|/", $lastdata);
+ $unique_file_key = $buf[1];
+ }
+
+ $recordingLink = '';
+ foreach($paths as $callmonitor_key => $path) {
+
+ // try to find an exact match using the uniqueid
+ if (isset($uniqueid)) {
+
+ $check_files = array();
+ array_push($check_files,$path . $uniqueid . ".WAV");
+ array_push($check_files,$path . $uniqueid . ".wav");
+ array_push($check_files,$path . $uniqueid . ".gsm");
+
+ array_push($check_files,$path . $unique_file_key . ".WAV");
+ array_push($check_files,$path . $unique_file_key . ".wav");
+ array_push($check_files,$path . $unique_file_key . ".gsm");
+
+ array_push($check_files,$path . "g" . $extension . "-" . $unique_file_key . ".WAV");
+ array_push($check_files,$path . "g" . $extension . "-" . $unique_file_key . ".wav");
+ array_push($check_files,$path . "g" . $extension . "-" . $unique_file_key . ".gsm");
+
+ array_push($check_files,$path . "q" . $extension . "-" . $unique_file_key . ".WAV");
+ array_push($check_files,$path . "q" . $extension . "-" . $unique_file_key . ".wav");
+ array_push($check_files,$path . "q" . $extension . "-" . $unique_file_key . ".gsm");
+
+ array_push($check_files,$path . "OUT" . $extension . "-" . $unique_file_key . ".WAV");
+ array_push($check_files,$path . "OUT" . $extension . "-" . $unique_file_key . ".wav");
+ array_push($check_files,$path . "OUT" . $extension . "-" . $unique_file_key . ".gsm");
+
+ array_push($check_files,$path . $userfield);
+
+ // try to match
+ foreach($check_files as $check_file) {
+ if (is_file($check_file)) {
+ $recording = $check_file;
+ break;
+ }
+ }
+ }
+
+ // if found do not need to check the rest of the paths
+ if ($recording!='') {
+ break;
+ }
+ }
+
+ // get all the callmonitor recordings on server and try to find a non-exact match for this log entry
+ if (!$CALLMONITOR_ONLY_EXACT_MATCHING) {
+
+ // try to find a file using the uniqueid
+ if (!$recording) {
+
+ // try and match the unique id
+ if (!$recording) {
+ foreach($files as $key => $path) {
+ if (strlen($uniqueid)>1 && strpos($path,$uniqueid)!==FALSE) {
+ $recording = $path;
+ $files[$key] = ''; // remove it from the recording files so it will not be matched twice
+ break;
+ }
+ }
+ }
+ }
+
+ // try and match a file using the calldate (if no unique number from database)
+ if (!$recording) {
+
+ foreach($files as $key => $path) {
+ $parts = split("-", $path);
+ if (strlen($st)>1 &&
+ (strpos($path,$st)!==FALSE) ||
+ (strpos($path,"auto")!==FALSE && $parts[1] >= $st && $parts[1] <= $et)) {
+ $recording = $path;
+ $files[$key] = ''; // remove it from the recording files so it will not be matched twice
+ break;
+ }
+ }
+ }
+
+ if ($CALLMONITOR_AGGRESSIVE_MATCHING) {
+
+ // one last stab at finding a recording by adding one or two seconds to the call time
+ if (!$recording) {
+ $st_1 = trim($st+1);
+ $st_2 = trim($st+2);
+ $et_1 = trim($et+1);
+ $et_2 = trim($et+2);
+ foreach($files as $key => $path) {
+ $split = explode("-", $path);
+ if (strlen($st)>1
+ && ((strpos($path,$st_1)!==FALSE) ||
+ (strpos($path,$st_2)!==FALSE) ||
+ (strpos($path,"auto")!==FALSE && $parts[1] >= $st_1 && $parts[1] <= $et_1) ||
+ (strpos($path,"auto")!==FALSE && $parts[1] >= $st_2 && $parts[1] <= $et_2))) {
+ $recording = $path;
+ $files[$key] = ''; // remove it from the recording files so it will not be matched twice
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ // add to array to be returned
+ if ($recording) {
+ $recordings[$uniqueid . $calldate] = $recording;
+ }
+ }
+
+ return $recordings;
+ }
+
+ /*
+ * Deletes selected call monitor recordings
+ *
+ * @param $files
+ * Array of files to delete
+ */
+ function deleteRecData($files) {
+
+ foreach($files as $key => $file) {
+ if (is_writable($file)) {
+ unlink($file);
+ } else {
+ $_SESSION['ari_error'] = _("Only deletes recording files, not cdr log");
+ }
+ }
+ }
+
+ /*
+ * Gets cdr record count
+ *
+ * @param $q
+ * query text
+ */
+ function getSearchText($q,$duration_filter) {
+
+ // search text
+ if ($q!='*' && $q!=NULL) {
+ $searchText .= "WHERE ";
+ $tok = strtok($q," \n\t");
+ while ($tok) {
+ $searchText .= " (calldate regexp '" . $tok . "'
+ OR clid regexp '" . $tok . "'
+ OR src regexp '" . $tok . "'
+ OR dst regexp '" . $tok . "'
+ OR dstchannel regexp '" . $tok . "'
+ OR dcontext regexp '" . $tok . "'
+ OR duration regexp '" . $tok . "'
+ OR disposition regexp '" . $tok . "'
+ OR uniqueid regexp '" . $tok . "'
+ OR userfield regexp '" . $tok . "'
+ )";
+ $tok = strtok(" \n\t");
+ if ($tok) {
+ $searchText .= " AND";
+ }
+ }
+ }
+
+ // duration_filter
+ if ($duration_filter) {
+ if (!$searchText) {
+ $searchText .= "WHERE ";
+ } else {
+ $searchText .= "AND ";
+ }
+ $searchText .= "duration>" . $duration_filter . " ";
+ }
+
+ // admin
+ if (!$_SESSION['ari_user']['admin_callmonitor']) {
+ if (!$searchText) {
+ $searchText .= "WHERE ";
+ } else {
+ $searchText .= "AND ";
+ }
+
+ // allow entries to be viewed with users extension
+ $searchText .= "(src = '" . $_SESSION['ari_user']['extension'] . "'
+ OR dst = '" . $_SESSION['ari_user']['extension'] . "'
+
+ OR channel LIKE 'IAX2/" . $_SESSION['ari_user']['extension'] ."-%'
+ OR dstchannel LIKE 'IAX2/" . $_SESSION['ari_user']['extension'] ."-%'
+
+ OR channel LIKE 'SIP/" . $_SESSION['ari_user']['extension'] ."-%'
+ OR dstchannel LIKE 'SIP/" . $_SESSION['ari_user']['extension'] ."-%')";
+
+ // allow entries to be viewed with users outbound CID
+ if (isset($_SESSION['ari_user']['outboundCID']) && trim($_SESSION['ari_user']['outboundCID']) != '') {
+ $searchText .= "OR (src = '" . $_SESSION['ari_user']['outboundCID'] . "'
+ OR dst = '" . $_SESSION['ari_user']['outboundCID'] . "')";
+ }
+ }
+
+ return $searchText;
+ }
+
+ /*
+ * Gets cdr record count
+ *
+ * @param $q
+ * query text
+ * @return $count
+ * Number of cdr records counted
+ */
+ function getCdrCount($q,$duration_filter) {
+
+ global $ASTERISKCDR_DBTABLE;
+
+ $searchText = $this->getSearchText($q,$duration_filter);
+
+ $dbh = $_SESSION['dbh_cdr'];
+ $sql = "SELECT count(*)
+ FROM " . $ASTERISKCDR_DBTABLE . "
+ " . $searchText;
+
+ $result = $dbh->getAll($sql);
+ if (DB::isError($result)) {
+ $_SESSION['ari_error'] = $result->getMessage();
+ return;
+ }
+ $count = $result[0][0];
+
+ return $count;
+ }
+
+ /*
+ * Gets cdr data
+ *
+ * @param $q
+ * query text
+ * @param $start
+ * start record
+ * @param $span
+ * number of records to return
+ * @return $data
+ * cdr data to be returned
+ */
+ function getCdrData($q,$duration_filter,$start,$span,$order,$sort) {
+
+ global $ASTERISKCDR_DBTABLE;
+
+ $data = array();
+
+ $searchText = $this->getSearchText($q,$duration_filter);
+
+ $dbh = $_SESSION['dbh_cdr'];
+ $sql = "SELECT *
+ FROM " . $ASTERISKCDR_DBTABLE . "
+ " . $searchText . "
+ ORDER BY " . $order . " " . $sort . "
+ LIMIT " . $start . "," . $span;
+ $result = $dbh->getAll($sql,DB_FETCHMODE_ASSOC);
+ if (DB::isError($result)) {
+ $_SESSION['ari_error'] = $result->getMessage();
+ return;
+ }
+ $data = $result;
+
+ return $data;
+ }
+
+
+}
+
+
+?>
diff --git a/fs_selfservice/fri/modules/featurecodes.module b/fs_selfservice/fri/modules/featurecodes.module
new file mode 100644
index 0000000..75d1d5c
--- /dev/null
+++ b/fs_selfservice/fri/modules/featurecodes.module
@@ -0,0 +1,152 @@
+<?php
+
+/**
+ * @file
+ * Functions for the interface to the help page
+ */
+
+/**
+ * Class for help
+ */
+class featurecodes {
+
+ /*
+ * rank (for prioritizing modules)
+ */
+ function rank() {
+
+ $rank = 7;
+ return $rank;
+ }
+
+ /*
+ * init
+ */
+ function init() {
+ }
+
+ /*
+ * Adds menu item to nav menu
+ *
+ * @param $args
+ * Common arguments
+ */
+ function navMenu($args) {
+
+ $ret .= "<p><small><small><a href='" . $_SESSION['ARI_ROOT'] . "?m=featurecodes&f=display'>" . _("Feature Codes") . "</a></small></small></p><br>";
+
+ return $ret;
+ }
+
+ /*
+ * Displays stats page
+ *
+ * @param $args
+ * Common arguments
+ */
+ function display($args) {
+
+ global $ARI_HELP_FEATURE_CODES;
+
+ $display = new Display();
+
+ // args
+ $m = getArgument($args,'m');
+ $q = getArgument($args,'q');
+
+ $displayname = $_SESSION['ari_user']['displayname'];
+ $extension = $_SESSION['ari_user']['extension'];
+
+ // build page content
+ $ret .= checkErrorMessage();
+
+ $header_text = _("Feature Codes");
+ if (!$_SESSION['ari_user']['admin_help']) {
+ $header_text .= sprintf(_(" for %s (%s)"), $displayname, $extension);
+ }
+
+ // handset feature code header
+ $handset_feature_codes_header =
+ "<tr>
+ <th class='feature_codes'>
+ " . _("Handset Feature Code") . "
+ </th>
+ <th>
+ " . _("Action") . "
+ </th>
+ </tr>";
+
+ // handset feature code body
+ if (isset($_SESSION['dbh_asterisk'])) {
+
+ $sql = "
+ SELECT keycode, description
+ FROM (
+ SELECT modulename, description, defaultcode keycode
+ FROM featurecodes
+ WHERE customcode IS NULL
+ AND enabled = '1'
+ UNION ALL SELECT modulename, description, customcode keycode
+ FROM featurecodes
+ WHERE customcode IS NOT NULL
+ AND enabled = '1'
+ )c
+ WHERE modulename NOT
+ IN ( 'core', 'recordings', 'infoservices', 'polycomreassign')
+ ORDER BY modulename, keycode
+ ";
+
+ $results = $_SESSION['dbh_asterisk']->getAll($sql, DB_FETCHMODE_ASSOC);
+ if(DB::IsError($results)) {
+ $_SESSION['ari_error'] = $results->getMessage();
+ }
+ else {
+ foreach ($results as $item ) {
+ $handset_feature_codes_body .=
+ "<tr>
+ <td class='feature_codes'>
+ " . $item['keycode'] . "
+ </td>
+ <td>
+ " . $item['description'] . "
+ </td>
+ </tr>";
+ }
+ }
+ }
+ else {
+
+ // handset feature code body
+ foreach($ARI_HELP_FEATURE_CODES as $key => $feature_code) {
+
+ $handset_feature_codes_body .=
+ "<tr>
+ <td class='feature_codes'>
+ " . $key . "
+ </td>
+ <td>
+ " . $feature_code . "
+ </td>
+ </tr>";
+ }
+ }
+
+ // build page content
+ $ret .= checkErrorMessage();
+
+ $ret .= $display->displayHeaderText($header_text);
+ $ret .= $display->displayLine();
+
+ // table
+ $ret .= "
+ <table class='help'>
+ " . $handset_feature_codes_header . "
+ " . $handset_feature_codes_body . "
+ </table>";
+
+ return $ret;
+ }
+
+}
+
+?>
diff --git a/fs_selfservice/fri/modules/followme.module b/fs_selfservice/fri/modules/followme.module
new file mode 100644
index 0000000..85a1f37
--- /dev/null
+++ b/fs_selfservice/fri/modules/followme.module
@@ -0,0 +1,678 @@
+<?php
+
+/**
+ * @file
+ * Functions for the interface to the call monitor recordings
+ */
+
+/**
+ * Class for Followme
+ */
+class followme {
+
+ var $protocol_table;
+ var $protocol_config_files;
+
+ /*
+ * rank (for prioritizing modules)
+ */
+ function rank() {
+
+ $rank = 5;
+ return $rank;
+ }
+
+ /*
+ * init
+ */
+ function init() {
+
+ }
+
+ /*
+ * Adds menu item to nav menu
+ *
+ * @param $args
+ * Common arguments
+ */
+ function navMenu($args) {
+ global $ARI_ADMIN_USERNAME;
+
+ $exten = $_SESSION['ari_user']['extension'];
+ if ($exten!=$ARI_ADMIN_USERNAME) {
+ $ret .= "<p><small><small><a href='" . $_SESSION['ARI_ROOT'] . "?m=followme&f=display'>" . _("Follow Me") . "</a></small></small></p>";
+ }
+
+ return $ret;
+ }
+
+ /*
+ * Acts on the user settings
+ *
+ * @param $args
+ * Common arguments
+ * @param $a
+ * action
+ */
+ function action($args) {
+
+ global $STANDALONE;
+ global $ARI_ADMIN_USERNAME;
+ global $SETTINGS_ALLOW_VMX_SETTINGS;
+
+ // args
+ $m = getArgument($args,'m');
+ $a = getArgument($args,'a');
+
+ $lang_code = getArgument($args,'lang_code');
+
+ $follow_me_prering_time = getArgument($args,'follow_me_prering_time');
+ $follow_me_listring_time = getArgument($args,'follow_me_listring_time');
+ $follow_me_list = getArgument($args,'follow_me_list');
+ $follow_me_confirm = getArgument($args,'follow_me_confirm');
+ $follow_me_ddial = getArgument($args,'follow_me_ddial');
+ $follow_me_disabled = getArgument($args,'follow_me_disabled');
+
+ $language = new Language();
+
+ // Lets see if we can make heads or tails of this code?!?
+
+ // The action is 'update
+ if ($a=='update') {
+
+ // Get the extension and make sure we are not in
+ // admin mode
+ $exten = $_SESSION['ari_user']['extension'];
+ if ($exten!=$ARI_ADMIN_USERNAME) {
+
+
+ // Make sure Follow-Me setup has not been deleted for this user since the last refresh
+ $follow_me_disabled_delayed = $_COOKIE['ari_follow_me_disabled'];
+ if (! $_COOKIE['ari_follow_me_disabled']) {
+
+ $follow_me_disabled = ($this->getFollowMeListRingTime($exten) > 0)?0:1;
+
+ if ($follow_me_disabled) {
+
+ setcookie("ari_follow_me_disabled", $follow_me_disabled, time()+365*24*60*60);
+ $follow_me_disabled_delayed = $follow_me_disabled;
+ $_SESSION['ari_error'] =
+ _("Your Follow-Me has been disabled, REFRESH your browser to remove this message") . "<br>" .
+ sprintf(_("Check with your Telephone System Administrator if you think there is a problem"));
+ }
+ }
+
+
+
+ if (! $follow_me_disabled_delayed) {
+
+ // assume no errors, don't update SQL if errors occured
+ $follow_me_update_succeeded=1;
+
+ // update follow me pre-ring time
+ if (!$STANDALONE['use']) {
+
+ $stripped_follow_me_prering_time = preg_replace('/-|\s/','',$follow_me_prering_time);
+ if (!is_numeric($stripped_follow_me_prering_time)) {
+ $_SESSION['ari_error'] =
+ _("Follow-Me pre-ring time not changed") . "<br>" .
+ sprintf(_("Number %s must be an interger number of seconds"),$follow_me_prering_time);
+ $follow_me_update_succeeded=0;
+ }
+ else {
+
+ // set database
+ $this->setFollowMePreRingTime($exten,$stripped_follow_me_prering_time);
+
+ // store cookie
+ $stripped = preg_replace('/-|\s/','',$_COOKIE['ari_follow_me_prering_time']);
+ if ($follow_me_prering_time && $stripped!=$stripped_follow_me_prering_time) {
+ setcookie("ari_follow_me_prering_time", $follow_me_prering_time, time()+365*24*60*60);
+ }
+ }
+ }
+
+ // update follow me list ring time
+ if (!$STANDALONE['use']) {
+
+ $stripped_follow_me_listring_time = preg_replace('/-|\s/','',$follow_me_listring_time);
+ if (!is_numeric($stripped_follow_me_listring_time)) {
+ $_SESSION['ari_error'] =
+ _("Follow-Me list ring time not changed") . "<br>" .
+ sprintf(_("Number %s must be an interger number of seconds"),$follow_me_listring_time);
+ $follow_me_update_succeeded=0;
+ }
+ else {
+
+ // set database
+ $this->setFollowMeListRingTime($exten,$stripped_follow_me_listring_time);
+
+ // store cookie
+ $stripped = preg_replace('/-|\s/','',$_COOKIE['ari_follow_me_listring_time']);
+ if ($follow_me_listring_time && $stripped!=$stripped_follow_me_listring_time) {
+ setcookie("ari_follow_me_listring_time", $follow_me_listring_time, time()+365*24*60*60);
+ }
+ }
+ }
+
+ // update follow me list
+ if (!$STANDALONE['use']) {
+
+ $grplist = explode("\n", $follow_me_list);
+
+ if (!$grplist) {
+ $grplist = null;
+ }
+
+ foreach (array_keys($grplist) as $key) {
+ //trim it
+ $grplist[$key] = trim($grplist[$key]);
+
+ // Lookup the extension and append hash if not a user, and remove invalid chars
+ $grplist[$key] = $this->lookupSetExtensionFormat($grplist[$key]);
+
+ // remove blanks
+ if ($grplist[$key] == "") unset($grplist[$key]);
+ }
+
+ // check for duplicates, and re-sequence
+ $grplist = array_values(array_unique($grplist));
+
+ $stripped_follow_me_list = implode("-",$grplist);
+
+ if ($stripped_follow_me_list == "") {
+ $_SESSION['ari_error'] =
+ _("Follow-Me list must contain at least one valid number") . "<br>" .
+ sprintf(_("The following: %s is not valid"),$follow_me_list);
+ $follow_me_update_succeeded=0;
+ }
+ else {
+
+ // set database
+ $this->setFollowMeList($exten,$stripped_follow_me_list);
+
+ // store cookie
+ $stripped = preg_replace('/|\(|\)|\s/','',$_COOKIE['ari_follow_me_list']);
+ if ($follow_me_list && $stripped!=$stripped_follow_me_list) {
+ setcookie("ari_follow_me_list", $follow_me_list, time()+365*24*60*60);
+ }
+ }
+ }
+
+ // update follow me confirm
+ if (!$STANDALONE['use']) {
+
+ // set database
+ $this->setFollowMeConfirm($exten,$follow_me_confirm);
+ $this->setFollowMeDDial($exten,$follow_me_ddial);
+
+ // store cookie
+ setcookie("ari_follow_me_confirm", $follow_me_confirm, time()+365*24*60*60);
+ setcookie("ari_follow_me_ddial", $follow_me_ddial, time()+365*24*60*60);
+ }
+
+ //If no errors than update the SQL table to keep in sync
+ if ($follow_me_update_succeeded) {
+ $this->setFollowMeMySQL($exten, $follow_me_prering_time, $follow_me_listring_time, $follow_me_list, $follow_me_confirm);
+ }
+
+ } //if !follow_me_disabled
+ }
+ }
+
+ // redirect to see updated page
+ $ret .= "
+ <head>
+ <script>
+ <!--
+ window.location = \"" . $_SESSION['ARI_ROOT'] . "?m=" . $m . "\"
+ // -->
+ </script>
+ </head>";
+
+ return $ret;
+ }
+
+ /*
+ * Displays stats page
+ *
+ * @param $args
+ * Common arguments
+ */
+ function display($args) {
+
+ global $STANDALONE;
+ global $ARI_ADMIN_USERNAME;
+ global $SETTINGS_PRERING_LOW;
+ global $SETTINGS_PRERING_HIGH;
+ global $SETTINGS_LISTRING_LOW;
+ global $SETTINGS_LISTRING_HIGH;
+
+ global $SETTINGS_FOLLOW_ME_LIST_MAX;
+
+ global $loaded_modules;
+
+ // args
+ $m = getArgument($args,'m');
+ $q = getArgument($args,'q');
+ $start = getArgument($args,'start');
+ $span = getArgument($args,'span');
+
+ $displayname = $_SESSION['ari_user']['displayname'];
+ $exten = $_SESSION['ari_user']['extension'];
+
+ $language = new Language();
+ $display = new DisplaySearch();
+
+ // build controls
+ if ($exten!=$ARI_ADMIN_USERNAME) {
+
+ // call forward settings
+ if (!$STANDALONE['use']) {
+
+ $follow_me_prering_time = $this->getFollowMePreRingTime($exten);
+ $follow_me_listring_time = $this->getFollowMeListRingTime($exten);
+ $follow_me_list = explode("-", $this->getFollowMeList($exten) );
+ $follow_me_confirm = $this->getFollowMeConfirm($exten);
+ $follow_me_ddial = $this->getFollowMeDDial($exten);
+
+ $FOLLOW_ME_LIST_MAX = (count($follow_me_list) > $SETTINGS_FOLLOW_ME_LIST_MAX) ? count($follow_me_list):$SETTINGS_FOLLOW_ME_LIST_MAX;
+
+ //TODO: Set this better than this?
+ $follow_me_disabled = ($follow_me_listring_time > 0)?0:1;
+ setcookie("ari_follow_me_disabled", $follow_me_disabled, time()+365*24*60*60);
+
+ $followme_text.= "<table class='settings'>";
+
+ if (!$follow_me_disabled) {
+ // $followme_text .= "<tr><td><h3><br>" . _("Follow Me") . "</h3></td></tr>";
+ $followme_text .= "<tr><td>&nbsp;</td></tr>"; // Blank Line
+
+ $followme_text .= "<tr><td><a href='#' class='info'>" . _("Enable") . "<span>";
+ $followme_text .= _( "Dial-by-name Directory, IVR, and internal
+ calls will ring the numbers in the FollowMe
+ List. Any FreePBX routes that directly
+ reference a FollowMe are unaffected by this
+ enable/disable setting.");
+ $followme_text .= "<br></span></a></td>";
+
+ $followme_text .= "<td><input " . $follow_me_ddial . " type=checkbox name='follow_me_ddial' value='checked'></td></tr>";
+
+ $followme_text .= "<tr><td>&nbsp;</td></tr>"; // Blank Line
+ $followme_text .= "<tr><td valign='top'><a href='#' class='info'>" . _("Follow Me List:");
+ $followme_text .= "<span>" . sprintf(_("Extensions and outside numbers to ring next.")) ."<br/><br/>";
+ $followme_text .= sprintf(_("Include %s to keep it ringing."),"<strong>".$exten."</strong>") . "<br></span></a></td>";
+ $followme_text .= "<td><textarea " . $follow_me_list_options . " id='follow_me_list' name='follow_me_list' type='text' cols='20' rows='".$FOLLOW_ME_LIST_MAX."' value='' onKeyUp='rowCounter(this.form.follow_me_list, ".$FOLLOW_ME_LIST_MAX.");' onKeyDown='rowCounter(this.form.follow_me_list, ".$FOLLOW_ME_LIST_MAX.");'>".implode("\n",$follow_me_list)."</textarea>";
+ $followme_text .= "</td></tr>";
+
+ $followme_text .= "<tr><td>&nbsp;</td></tr>"; // Blank Line
+ $followme_text .= "<tr><td><a href='#' class='info'>";
+ $followme_text .= sprintf(_("Ring %s First For:"), $exten);
+ $followme_text .= "<span>" . sprintf( _("Time to ring extension %s before ringing the %s Follow Me List %s"), "<strong>".$exten."</strong>","<strong>","</strong>");
+ $followme_text .= "<br></span></a></td><td>";
+
+ $followme_text .= "<select " . $follow_me_prering_time_text_box_options . " name='follow_me_prering_time'/>";
+ $default_prering = $follow_me_prering_time;
+ for ($i=$SETTINGS_PRERING_LOW; $i <= $SETTINGS_PRERING_HIGH; $i++) {
+ $followme_text .= '<option value="'.$i.'" '.($i == $default_prering ? 'SELECTED' : '').'>'.$i.'</option>';
+ }
+ $followme_text .= "</select>";
+
+ $followme_text .= "<small>" . _("seconds") . "</small>";
+ $followme_text .= "</td></tr>";
+
+ $followme_text .= "<tr><td><a href='#' class='info'>" . _("Ring Followme List for:") . "<span>" . _("Time to ring the Follow Me List.") . "<br></span></a></td>";
+ $followme_text .= "<td>";
+
+ $followme_text .= "<select " . $follow_me_listring_time_text_box_options . " name='follow_me_listring_time'/>";
+ $default_listring = $follow_me_listring_time;
+ for ($i=$SETTINGS_LISTRING_LOW; $i <= $SETTINGS_LISTRING_HIGH; $i++) {
+ $followme_text .= '<option value="'.$i.'" '.($i == $default_listring ? 'SELECTED' : '').'>'.$i.'</option>';
+ }
+ $followme_text .= "</select>";
+
+ $followme_text .= "<small>" . _("seconds") . "</small></td></tr>";
+
+
+ $followme_text .= "<tr><td>&nbsp;</td></tr>"; // Blank Line
+
+ $followme_text .= "<tr><td><a href='#' class='info'>" . _("Use Confirmation:") . "<span>". _("Outside lines that are part of the Follow Me List will be called and offered a menu:<br/><br/> \"You have an incoming call. Press 1 to accept or 2 to decline.\"<br/><br/> This keeps calls from ending up in external voicemail. Make sure that the List Ring Time is long enough to allow for you to hear and react to this message.");
+ $followme_text .= "<br></span></a></td><td>";
+ $followme_text .= "<input " . $follow_me_confirm . " type=checkbox name='follow_me_confirm' value='checked'>";
+ $followme_text .= "<small>" . _("Enable") . "</small></td></tr>";
+ $followme_text .= "<tr><td>&nbsp;</td></tr>"; // Blank Line
+ $followme_text .= "</table>";
+ }
+ }
+
+ }
+
+ // build page content
+ $ret .= checkErrorMessage();
+
+ if ($_SESSION['ari_user']['admin_settings']) {
+ $headerText = _("Followme Settings");
+ } else {
+ $headerText = sprintf(_("Followme Settings for %s (%s)"),$displayname,$exten);
+ }
+
+ $ret .= $display->displayHeaderText($headerText);
+ $ret .= $display->displayLine();
+
+ $ret .=
+ "\n<SCRIPT LANGUAGE='JavaScript'>
+ <!-- Begin
+ function rowCounter(field, maxlimit) {
+ temp = field.value.split('\u000A',maxlimit+1)
+ field.value = temp.join('\u000A')
+ if (temp.length == maxlimit+1) {
+ field.value = field.value.substring(0, field.value.length-1)
+ }
+ }
+ // End -->
+ </script>\n";
+
+ $ret .=
+ "<form class='settings' name='ari_settings' action='' method='GET'>
+ <input type=hidden name=m value=" . $m . ">
+ <input type=hidden name=f value='action'>
+ <input type=hidden name=a value='update'>
+ " . $followme_text . "
+ <br>
+ <input name='submit' type='submit' value='" . _("Update") . "'>
+ </form>";
+
+ return $ret;
+ }
+
+
+ /*
+ * Sets Follow Me Pre-Ring Time
+ *
+ * @param $exten
+ * Extension to modify
+ * @param $follow_me_prering_time
+ * Pre-Ring Time to ring
+ */
+ function setFollowMePreRingTime($exten,$follow_me_prering_time) {
+
+ global $asterisk_manager_interface;
+
+ $value_opt = $follow_me_prering_time;
+
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/followme/prering $value_opt\r\n\r\n");
+ }
+
+ /*
+ * Gets Follow Me Pre-Ring Time if set
+ *
+ * @param $exten
+ * Extension to get information about
+ * @return $number
+ * follow me pre-ring time returned if set
+ */
+ function getFollowMePreRingTime($exten) {
+
+ global $asterisk_manager_interface;
+
+ $number = '';
+
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/followme/prering\r\n\r\n");
+ if (is_numeric($response)) {
+ $number = $response;
+ }
+
+ $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_follow_me_prering_time']);
+ if ($stripped==$number) {
+ $number = $_COOKIE['ari_follow_me_prering_time'];
+ }
+
+ return $number;
+ }
+
+ /*
+ * Sets Follow Me List Ring Time
+ *
+ * @param $exten
+ * Extension to modify
+ * @param $follow_me_listring_time
+ * List Ring Time to ring
+ */
+ function setFollowMeListRingTime($exten,$follow_me_listring_time) {
+
+ global $asterisk_manager_interface;
+
+ $value_opt = $follow_me_listring_time;
+
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/followme/grptime $value_opt\r\n\r\n");
+ }
+
+ /*
+ * Gets Follow Me List-Ring Time if set
+ *
+ * @param $exten
+ * Extension to get information about
+ * @return $number
+ * follow me list-ring time returned if set
+ */
+ function getFollowMeListRingTime($exten) {
+
+ global $asterisk_manager_interface;
+
+ $number = '';
+
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/followme/grptime\r\n\r\n");
+ if (is_numeric($response)) {
+ $number = $response;
+ }
+
+ $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_follow_me_listring_time']);
+ if ($stripped==$number) {
+ $number = $_COOKIE['ari_follow_me_listring_time'];
+ }
+
+ return $number;
+ }
+
+ /*
+ * Sets Follow Me List
+ *
+ * @param $exten
+ * Extension to modify
+ * @param $follow_me_list
+ * Follow Me List
+ */
+ function setFollowMeList($exten,$follow_me_list) {
+
+ global $asterisk_manager_interface;
+
+ $value_opt = $follow_me_list;
+
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/followme/grplist $value_opt\r\n\r\n");
+ }
+
+ /*
+ * Gets Follow Me List if set
+ *
+ * @param $exten
+ * Extension to get information about
+ * @return $data
+ * follow me list if set
+ */
+ function getFollowMeList($exten) {
+
+ global $asterisk_manager_interface;
+
+ $number = '';
+
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/followme/grplist\r\n\r\n");
+
+ //TODO: really need to check for a bogus response, see how other side does it
+ //
+ return preg_replace("/[^0-9*\-]/", "", $response);
+ }
+
+ /*
+ * Sets Follow Confirmation Setting
+ *
+ * @param $exten
+ * Extension to modify
+ * @param $follow_me_cofirm
+ * Follow Me Confirm Setting
+ */
+ function setFollowMeConfirm($exten,$follow_me_confirm) {
+
+ global $asterisk_manager_interface;
+
+ $value_opt = ($follow_me_confirm)?'ENABLED':'DISABLED';
+
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/followme/grpconf $value_opt\r\n\r\n");
+ }
+
+ /*
+ * Gets Follow Me Confirmation Setting
+ *
+ * @param $exten
+ * Extension to get information about
+ * @return $data
+ * follow me confirm setting
+ */
+ function getFollowMeConfirm($exten) {
+
+ global $asterisk_manager_interface;
+
+ $number = '';
+
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/followme/grpconf\r\n\r\n");
+
+ if (preg_match("/ENABLED/",$response)) {
+ $response='checked';
+ }
+ else {
+ $response='';
+ }
+
+ //TODO: really need to check for a bogus response, see how other side does it
+ //
+ return $response;
+
+ }
+
+ /*
+ * Sets Follow Ddial Setting
+ *
+ * @param $exten
+ * Extension to modify
+ * @param $follow_me_ddial
+ * Follow Me Ddial Setting
+ */
+ function setFollowMeDDial($exten,$follow_me_ddial) {
+
+ global $asterisk_manager_interface;
+
+ $value_opt = ($follow_me_ddial)?'DIRECT':'EXTENSION';
+
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/followme/ddial $value_opt\r\n\r\n");
+ }
+
+ /*
+ * Gets Follow Me Ddial Setting
+ *
+ * @param $exten
+ * Extension to get information about
+ * @return $data
+ * follow me ddial setting
+ */
+ function getFollowMeDDial($exten) {
+
+ global $asterisk_manager_interface;
+
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/followme/ddial\r\n\r\n");
+
+ if (preg_match("/EXTENSION/",$response)) {
+ $response='';
+ }
+ else {
+ $response='checked';
+ }
+
+ //TODO: really need to check for a bogus response, see how other side does it
+ //
+ return $response;
+
+ }
+
+
+
+
+
+ /*
+ * Gets FreePBX Version
+ */
+ function getFreePBXVersion() {
+
+ if (isset($_SESSION['dbh_asterisk'])) {
+ $sql = "SELECT * FROM admin WHERE variable = 'version'";
+ $results = $_SESSION['dbh_asterisk']->getAll($sql);
+ if(DB::IsError($results)) {
+ $_SESSION['ari_error'] = $results->getMessage();
+ }
+
+ return $results[0][1];
+ }
+ }
+
+ /*
+ * Sets Follow-Me Settings in FreePBX MySQL Database
+ *
+ * @param $exten
+ * Extension to modify
+ * @param $follow_me_prering_time
+ * Pre-Ring Time to ring
+ * @param $follow_me_listring_time
+ * List Ring Time to ring
+ * @param $follow_me_list
+ * Follow Me List
+ * @param $follow_me_list
+ * Follow Me Confirm Setting
+ *
+ */
+ function setFollowMeMySQL($exten, $follow_me_prering_time, $follow_me_listring_time, $follow_me_list, $follow_me_confirm) {
+
+ if (isset($_SESSION['dbh_asterisk'])) {
+
+ //format for SQL database
+ $follow_me_confirm = ($follow_me_confirm)?'CHECKED':'';
+
+ $sql = "UPDATE findmefollow SET grptime = '" . $follow_me_listring_time . "', grplist = '".
+ str_replace("'", "''", trim($follow_me_list)) . "', pre_ring = '" . $follow_me_prering_time .
+ "', needsconf = '" . $follow_me_confirm . "' WHERE grpnum = $exten LIMIT 1";
+ $results = $_SESSION['dbh_asterisk']->query($sql);
+
+ if(DB::IsError($results)) {
+ $_SESSION['ari_error'] = $results->getMessage();
+ }
+
+ return 1;
+ }
+ }
+
+ function lookupSetExtensionFormat($exten) {
+
+ if (trim($exten) == "") return $exten;
+
+ $exten = preg_replace("/[^0-9*]/", "", $exten);
+
+ $sql = "SELECT extension FROM users WHERE extension = '".$exten."'";
+ $asa = $_SESSION['dbh_asterisk']->getrow($sql, DB_FETCHMODE_ASSOC);
+ if (!is_array($asa)) {
+ return $exten.'#';
+ } else {
+ return $exten;
+ }
+ }
+
+
+} // class
+
+?>
diff --git a/fs_selfservice/fri/modules/phonefeatures.module b/fs_selfservice/fri/modules/phonefeatures.module
new file mode 100644
index 0000000..89dc903
--- /dev/null
+++ b/fs_selfservice/fri/modules/phonefeatures.module
@@ -0,0 +1,342 @@
+<?php
+//*****************************************************************************
+class PhoneFeatures {
+//*****************************************************************************
+ function rank() {
+
+ $rank = 4;
+ return $rank;
+ }
+
+//*****************************************************************************
+ function init() {
+ }
+//*****************************************************************************
+ function navMenu($args) {
+
+ global $ARI_NO_LOGIN;
+ global $SETTINGS_ALLOW_PHONE_SETTINGS;
+ global $SETTINGS_ALLOW_CALLFORWARD_SETTINGS;
+
+ // If we're not allowing call forwarding AND PHONE SETTINGS get out of here
+ if (!$SETTINGS_ALLOW_PHONE_SETTINGS && !$SETTINGS_ALLOW_CALLFORWARD_SETTINGS) return "";
+
+ $ret .= "
+ <p><small><small><a href='" . $_SESSION['ARI_ROOT'] . "?m=PhoneFeatures&f=display'>" . _("Phone Features") . "</a></small></small></p>";
+
+ return $ret;
+ }
+//*****************************************************************************
+ function action($args) {
+
+ global $ARI_ADMIN_USERNAME;
+ global $SETTINGS_ALLOW_PHONE_SETTINGS;
+ global $SETTINGS_ALLOW_CALLFORWARD_SETTINGS;
+
+ // args
+ $m = getArgument($args,'m');
+ $a = getArgument($args,'a');
+ $lang_code = getArgument( $args,'lang_code');
+ $exten = $_SESSION['ari_user']['extension'];
+
+ if ($a=='update') {
+
+ if ($SETTINGS_ALLOW_PHONE_SETTINGS) {
+ if ($exten!=$ARI_ADMIN_USERNAME) {
+ $this->storePhoneSetting( $args, $exten, 'call_waiting', 'CW', 'ENABLED');
+ $this->storePhoneSetting( $args, $exten, 'do_not_disturb', 'DND', 'YES');
+ }
+ }
+
+ if ($SETTINGS_ALLOW_CALLFORWARD_SETTINGS) {
+ if ($exten!=$ARI_ADMIN_USERNAME) {
+ $this->storeCallForwardNumber( $args, $exten, 'call_forward', 'CF');
+ $this->storeCallForwardNumber( $args, $exten, 'call_forward_busy', 'CFB');
+ $this->storeCallForwardNumber( $args, $exten, 'call_forward_unavailable', 'CFU');
+ }
+ }
+ }
+
+ // redirect to see updated page
+ $ret .= "
+ <head>
+ <script>
+ <!--
+ window.location = \"" . $_SESSION['ARI_ROOT'] . "?m=" . $m . "\"
+ // -->
+ </script>
+ </head>";
+
+ return $ret;
+ }
+//*****************************************************************************
+function display($args) {
+
+ global $STANDALONE;
+ global $ARI_ADMIN_USERNAME;
+ global $SETTINGS_ALLOW_PHONE_SETTINGS;
+ global $SETTINGS_ALLOW_CALLFORWARD_SETTINGS;
+
+ // args
+ $m = getArgument($args,'m');
+ $a = getArgument($args,'a');
+ $lang_code = getArgument( $args,'lang_code');
+ $exten = $_SESSION['ari_user']['extension'];
+
+ $displayname = $_SESSION['ari_user']['displayname'];
+ $exten = $_SESSION['ari_user']['extension'];
+
+ $display = new DisplaySearch();
+
+ // build controls
+ if ($exten!=$ARI_ADMIN_USERNAME) {
+
+ if ($SETTINGS_ALLOW_PHONE_SETTINGS) {
+ $dnd_cw_text = "<table class='settings'>";
+ $dnd_cw_text.= "<tr><td><h3>" . _("Phone Features") . "</h3></td></tr>";
+
+ $dnd_cw_text.= $this->displayPhoneControls( $exten, 'call_waiting', 'CW', "Call Waiting");
+ $dnd_cw_text.= $this->displayPhoneControls( $exten, 'do_not_disturb', 'DND', "Do Not Disturb");
+
+ $dnd_cw_text .= "</table>";
+ }
+
+ if ($SETTINGS_ALLOW_CALLFORWARD_SETTINGS) {
+
+ $set_call_forward_text .= "<SCRIPT LANGUAGE='JavaScript'>
+ <!-- Begin
+ function rowCounter(field, maxlimit) {
+ temp = field.value.split('\u000A',maxlimit+1)
+ field.value = temp.join('\u000A')
+ if (temp.length == maxlimit+1) {
+ field.value = field.value.substring(0, field.value.length-1)
+ }
+ }
+
+ function disable_fields() {
+
+ if (document.ari_settings.call_forward_enable.checked) {
+ document.ari_settings.call_forward_number.style.backgroundColor = '#FFF';
+ document.ari_settings.call_forward_number.disabled = false;
+ }
+ else {
+ document.ari_settings.call_forward_number.style.backgroundColor = '#DDD';
+ document.ari_settings.call_forward_number.disabled = true;
+ }
+
+ if (document.ari_settings.call_forward_busy_enable.checked) {
+ document.ari_settings.call_forward_busy_number.style.backgroundColor = '#FFF';
+ document.ari_settings.call_forward_busy_number.disabled = false;
+ }
+ else {
+ document.ari_settings.call_forward_busy_number.style.backgroundColor = '#DDD';
+ document.ari_settings.call_forward_busy_number.disabled = true;
+ }
+
+ if (document.ari_settings.call_forward_unavailable_enable.checked) {
+ document.ari_settings.call_forward_unavailable_number.style.backgroundColor = '#FFF';
+ document.ari_settings.call_forward_unavailable_number.disabled = false;
+ }
+ else {
+ document.ari_settings.call_forward_unavailable_number.style.backgroundColor = '#DDD';
+ document.ari_settings.call_forward_unavailable_number.disabled = true;
+ }
+ }
+ // End -->
+ </script>";
+
+ $set_call_forward_text.= "<table class='settings'>";
+ $set_call_forward_text.= "<tr><td><h3>" . _("Call Forwarding") . "</h3></td></tr>";
+
+ $set_call_forward_text.= $this->displayCallForwardControls( $exten, 'call_forward', 'CF', "Unconditional:");
+ $set_call_forward_text.= $this->displayCallForwardControls( $exten, 'call_forward_unavailable', 'CFU', "Unavailable:");
+ $set_call_forward_text.= $this->displayCallForwardControls( $exten, 'call_forward_busy', 'CFB', "Busy:");
+
+ $set_call_forward_text .= "</table>";
+ }
+ }
+
+ // build page content
+ $ret .= checkErrorMessage();
+
+ if ($_SESSION['ari_user']['admin_settings']) {
+ $headerText = _("Phone Features");
+ } else {
+ $headerText = sprintf(_("Phone Features for %s (%s)"),$displayname,$exten);
+ }
+
+ $ret .= $display->displayHeaderText($headerText);
+ $ret .= $display->displayLine();
+ $ret .= "
+ <form class='settings' name='ari_settings' action='' method='GET'>
+ <input type=hidden name=m value=" . $m . ">
+ <input type=hidden name=f value='action'>
+ <input type=hidden name=a value='update'>
+ <br>
+ " . $dnd_cw_text . "
+ <br>
+ " . $set_call_forward_text . "
+ <br>
+ <input name='submit' type='submit' value='" . _("Update") . "'>
+ </form>";
+
+return $ret;
+}
+//*****************************************************************************
+ function setPhoneSetting( $databaseCallFwdType, $exten, $state_value) {
+
+ global $asterisk_manager_interface;
+
+ $type_opt = ($state_value != "") ? "put":"del";
+
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database $type_opt $databaseCallFwdType $exten $state_value\r\n\r\n");
+ }
+
+//*****************************************************************************
+ function getPhoneSetting($exten, $databaseCallFwdType) {
+
+ global $asterisk_manager_interface;
+ $number = '';
+
+ $result = false;
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get $databaseCallFwdType $exten\r\n\r\n");
+ if (stristr($response, 'ENABLED')) {
+ $result = true;
+ }
+ elseif (stristr($response, 'YES')) {
+ $result = true;
+ }
+
+ return $result;
+ }
+//*****************************************************************************
+ function storePhoneSetting( $args, $exten, $settingType, $databaseCallFwdType, $state_value)
+ {
+ $setting_enable = getArgument( $args, $settingType . '_enable');
+
+ $this->setPhoneSetting( $databaseCallFwdType, $exten, ($setting_enable == 'checked')?$state_value:"");
+ }
+
+//*****************************************************************************
+ function displayPhoneControls( $exten, $callFwdType, $databaseCallFwdType, $title)
+ {
+
+ $phone_setting_enable = ($this->getPhoneSetting($exten, $databaseCallFwdType)) ? 'checked':'';
+
+ $ret = "\n<tr>";
+ $ret.= "<td>";
+ $ret.= "<label><input " . $phone_setting_enable . " type=checkbox name='" . $callFwdType . "_enable' value='checked' >";
+ $ret.= "<small>" . _($title) . "</small></label>";
+ $ret.= "</td>";
+ $ret.= "</tr>\n";
+
+ return $ret;
+ }
+//*****************************************************************************
+ /*
+ * Sets Asterisk call forward setting
+ *
+ * @param $exten
+ * Extension to modify
+ * @param $state
+ * Call forward enable or disable
+ * @param $call_forward_number
+ * Call forward number
+ * @param $variable_opt
+ * Call forward type (CF, CFU, CFB)
+ */
+ function setCallForward($exten,$state,$call_forward_number, $variable_opt = "CF") {
+
+ global $asterisk_manager_interface;
+
+ if ($state) {
+ $type_opt = "put";
+ $value_opt = $call_forward_number;
+ }
+ else {
+ $type_opt = "del";
+ }
+
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database $type_opt $variable_opt $exten $value_opt\r\n\r\n");
+ }
+
+ /*
+ * Gets call forward number if set
+ *
+ * @param $exten
+ * Extension to get information about
+ * @return $number
+ * call forward number returned if set
+ * @param $variable_opt
+ * Call forward type (CF, CFU, CFB)
+ */
+ function getCallForwardNumber($exten, $variable_opt = "CF") {
+
+ global $asterisk_manager_interface;
+
+ $number = '';
+
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get $variable_opt $exten\r\n\r\n");
+ if (is_numeric($response)) {
+ $number = $response;
+ }
+
+ $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_call_forward_number']);
+ if ($stripped==$number) {
+ $number = $_COOKIE['ari_call_forward_number'];
+ }
+
+ return $number;
+ }
+
+
+ function storeCallForwardNumber( $args, $exten, $callFwdType, $databaseCallFwdType)
+ {
+ $call_forward_enable = getArgument($args, $callFwdType . '_enable');
+ $call_forward_number = getArgument($args, $callFwdType . '_number');
+
+ $stripped_call_forward_number = preg_replace('/-|\(|\)|\s/','',$call_forward_number);
+
+ if ($call_forward_enable && !is_numeric($stripped_call_forward_number)) {
+ $_SESSION['ari_error'] = _("Call forward number not changed") . "<br>" .
+ sprintf(_("Number %s must contain dial numbers (characters like '(', '-', and ')' are ok)"), $call_forward_number);
+ }
+ else {
+ $this->setCallForward( $exten, $call_forward_enable, $stripped_call_forward_number, $databaseCallFwdType);
+
+ // store cookie
+ $stripped = preg_replace('/-|\(|\)|\s/','',$_COOKIE['ari_' . $callFwdType]);
+ if ($call_forward_number && $stripped!=$stripped_call_forward_number) {
+ setcookie('ari_' . $callFwdType, $call_forward_number, time()+365*24*60*60);
+ }
+ }
+ }
+
+ function displayCallForwardControls( $exten, $callFwdType, $databaseCallFwdType, $title)
+ {
+ $call_forward_number = $this->getCallForwardNumber($exten, $databaseCallFwdType);
+
+ // If we have a value, we want the item checked
+ if ($call_forward_number) {
+ $call_forward_enable = 'checked';
+ }
+ else {
+ $call_forward_number = $_COOKIE['ari_' . $callFwdType ];
+ $call_forward_text_box_options = "disabled style='background: #DDD;'";
+ }
+
+ $ret = "\n<tr>";
+ $ret.= "<td>" . _($title) . "</td>";
+ $ret.= "<td>";
+ $ret.= "<input " . $call_forward_text_box_options . " name='" . $callFwdType . "_number' type='text' size=24 value='" . $call_forward_number . "'>";
+ $ret.= "</td>";
+ $ret.= "<td>";
+ $ret.= "<input " . $call_forward_enable . " type=checkbox name='" . $callFwdType . "_enable' value='checked' OnClick=\"disable_fields(); return true;\">";
+ $ret.= "<small>" . _("Enable") . "</small>";
+ $ret.= "</td>";
+ $ret.= "</tr>\n";
+
+ return $ret;
+ }
+} // class
+?>
diff --git a/fs_selfservice/fri/modules/settings.module b/fs_selfservice/fri/modules/settings.module
new file mode 100644
index 0000000..314ce40
--- /dev/null
+++ b/fs_selfservice/fri/modules/settings.module
@@ -0,0 +1,813 @@
+<?php
+
+/**
+ * @file
+ * Functions for the interface to the call monitor recordings
+ */
+
+/**
+ * Class for settings
+ */
+class Settings {
+
+ var $protocol_table;
+ var $protocol_config_files;
+
+ /*
+ * rank (for prioritizing modules)
+ */
+ function rank() {
+
+ $rank = 9;
+ return $rank;
+ }
+
+ /*
+ * init
+ */
+ function init() {
+
+ // determine what protocol user is using
+ global $ASTERISK_PROTOCOLS;
+
+ foreach ($ASTERISK_PROTOCOLS as $protocol => $value) {
+ $data = $this->getProtocolRecordSettings($value['table'],$_SESSION['ari_user']['extension']);
+ if (count($data)) {
+ $this->protocol_table = $value['table'];
+ $this->protocol_config_files = $value['config_files'];
+ break;
+ }
+ }
+ }
+
+ /*
+ * Adds menu item to nav menu
+ *
+ * @param $args
+ * Common arguments
+ */
+ function navMenu($args) {
+
+ $ret = "";
+ $exten = $_SESSION['ari_user']['extension'];
+
+ // and we are not logged in as admin
+ if ($exten!=$ARI_ADMIN_USERNAME) {
+ $ret .= "<p><small><small><a href='" . $_SESSION['ARI_ROOT'] . "?m=Settings&f=display'>" . _("Settings") . "</a></small></small></p><br>";
+ }
+
+ return $ret;
+ }
+
+ /*
+ * Acts on the user settings
+ *
+ * @param $args
+ * Common arguments
+ * @param $a
+ * action
+ */
+ function action($args) {
+
+ global $ARI_ADMIN_USERNAME;
+ global $ASTERISK_VOICEMAIL_CONF;
+ global $SETTINGS_ALLOW_VOICEMAIL_SETTINGS;
+ global $SETTINGS_ALLOW_VOICEMAIL_PASSWORD_SET;
+ global $SETTINGS_VOICEMAIL_PASSWORD_LENGTH;
+ global $SETTINGS_VOICEMAIL_PASSWORD_EXACT;
+ global $SETTINGS_ALLOW_CALL_RECORDING_SET;
+
+ // args
+ $m = getArgument($args,'m');
+ $a = getArgument($args,'a');
+
+ $voicemail_password = getArgument($args,'voicemail_password');
+ $voicemail_password_confirm = getArgument($args,'voicemail_password_confirm');
+ $voicemail_email_address = getArgument($args,'voicemail_email_address');
+ $voicemail_pager_address = getArgument($args,'voicemail_pager_address');
+ $voicemail_email_enable = getArgument($args,'voicemail_email_enable');
+ $voicemail_audio_format = getArgument($args,'voicemail_audio_format');
+ $record_in = getArgument($args,'record_in');
+ $record_out = getArgument($args,'record_out');
+
+ if (isset($_SESSION['ari_user']['voicemail_email'])) {
+ foreach (array_keys($_SESSION['ari_user']['voicemail_email']) as $key) {
+ $var = "voicemail_email_$key";
+ $$var = getArgument($args,$var);
+ }
+ }
+
+ if ($a=='update') {
+
+ $exten = $_SESSION['ari_user']['extension'];
+ if ($exten!=$ARI_ADMIN_USERNAME) {
+
+ // Make sure Follow-Me setup has not been deleted for this user since the last refresh
+ $follow_me_disabled_delayed = $_COOKIE['ari_follow_me_disabled'];
+
+ // voicemail settings
+ if ($SETTINGS_ALLOW_VOICEMAIL_SETTINGS && $_SESSION['ari_user']['voicemail_enabled']==1) {
+
+
+ // update voicemail password
+ if ($SETTINGS_ALLOW_VOICEMAIL_PASSWORD_SET) {
+
+ // update voicemail password
+ if ($voicemail_password=='' || $voicemail_password_confirm=='') {
+ $_SESSION['ari_error'] =
+ _("Voicemail password not changed") . "<br>" .
+ _("Password and password confirm must not be blank");
+ }
+ else if ((strlen($voicemail_password)<$SETTINGS_VOICEMAIL_PASSWORD_LENGTH) || !is_numeric($voicemail_password)) {
+ $_SESSION['ari_error'] =
+ _("Voicemail password not changed") . "<br>" .
+ sprintf(_("Passwords must be all numbers and greater than %d digits"),$SETTINGS_VOICEMAIL_PASSWORD_LENGTH);
+ }
+ else if (strlen($voicemail_password)!=$SETTINGS_VOICEMAIL_PASSWORD_LENGTH && $SETTINGS_VOICEMAIL_PASSWORD_EXACT || !is_numeric($voicemail_password)) {
+ $_SESSION['ari_error'] =
+ _("Voicemail password not changed") . "<br>" .
+ sprintf(_("Passwords must be all numbers and only %d digits"),$SETTINGS_VOICEMAIL_PASSWORD_LENGTH);
+ }
+ else if ($voicemail_password!=$voicemail_password_confirm) {
+ $_SESSION['ari_error'] =
+ _("Voicemail password not changed") . "<br>" .
+ _("Password and password confirm do not match");
+ }
+ else {
+
+ // check for writable the files
+ $temp_file = $ASTERISK_VOICEMAIL_CONF . ".tmp";
+ $fp = fopen($temp_file, "w");
+ if (!$fp) {
+ $_SESSION['ari_error'] =
+ _("Voicemail password not changed") . "<br>" .
+ sprintf(_("%s does not exist or is not writable"),$temp_file);
+ }
+ else if (!is_writable($ASTERISK_VOICEMAIL_CONF)) {
+ $_SESSION['ari_error'] =
+ _("Voicemail password not changed") . "<br>" .
+ sprintf(_("%s does not exist or is not writable"),$ASTERISK_VOICEMAIL_CONF);
+ }
+ else {
+
+ // update session
+ $_SESSION['ari_user']['voicemail_password'] = $voicemail_password;
+
+ // save password
+ $lines = file($ASTERISK_VOICEMAIL_CONF);
+ foreach ($lines as $key => $line) {
+ unset($value);
+ list($var,$value) = split('=>',$line);
+ $var = trim($var);
+ if ($var==$exten && $value) {
+
+ // write out line with password change
+ $buf = split(',',$value);
+ $buf[0] = $voicemail_password;
+ $line = $var . " => " . join(',', $buf);
+
+ fwrite($fp, $line);
+ }
+ else {
+ // write out original line with no changes
+ fwrite($fp, $line);
+ }
+ }
+ fclose($fp);
+ unlink($ASTERISK_VOICEMAIL_CONF);
+ rename($temp_file,$ASTERISK_VOICEMAIL_CONF);
+
+ $voicemail_reload = 1;
+ }
+ }
+
+ // voicemail email address
+ if ($voicemail_email_enable &&
+ ($voicemail_email_address && !preg_match('/@/',$voicemail_email_address) ||
+ ($voicemail_pager_address && !preg_match('/@/',$voicemail_pager_address)))) {
+ $_SESSION['ari_error'] =
+ _("Voicemail email and pager address not changed") . "<br>" .
+ ("'$voicemail_email_address' and '$voicemail_pager_address' must be a valid email addresses");
+ }
+ else {
+
+ // check for writable the files
+ $temp_file = $ASTERISK_VOICEMAIL_CONF . ".tmp";
+ $fp = fopen($temp_file, "w");
+ if (!$fp) {
+ $_SESSION['ari_error'] =
+ _("Voicemail email settings not changed") . "<br>" .
+ sprintf(_("%s does not exist or is not writable"),$temp_file);
+ }
+ else if (!is_writable($ASTERISK_VOICEMAIL_CONF)) {
+ $_SESSION['ari_error'] =
+ _("Voicemail email settings not changed") . "<br>" .
+ sprintf(_("%s does not exist or is not writable"),$ASTERISK_VOICEMAIL_CONF);
+ }
+ else {
+
+ // store cookie
+ if ($voicemail_email_enable) {
+ setcookie("ari_voicemail_email_address", $voicemail_email_address, time()+365*24*60*60);
+ setcookie("ari_voicemail_pager_address", $voicemail_pager_address, time()+365*24*60*60);
+ foreach (array_keys($_SESSION['ari_user']['voicemail_email']) as $key) {
+ $var = "voicemail_email_$key";
+ $var_cookie = "ari_" . $var;
+ setcookie("$var_cookie", $$var, time()+365*24*60*60);
+ }
+ }
+
+ // update session
+ $_SESSION['ari_user']['voicemail_email_enable'] = $voicemail_email_enable;
+ if ($voicemail_email_enable) {
+ $_SESSION['ari_user']['voicemail_email_address'] = $voicemail_email_address;
+ $_SESSION['ari_user']['voicemail_pager_address'] = $voicemail_pager_address;
+ foreach (array_keys($_SESSION['ari_user']['voicemail_email']) as $key) {
+ $option = "voicemail_email_$key";
+ $_SESSION['ari_user']['voicemail_email'][$key] = $$option;
+ }
+ }
+
+ // save settings
+ if (!$voicemail_email_enable) {
+ $voicemail_email_address = '';
+ $voicemail_pager_address = '';
+ }
+
+ $lines = file($ASTERISK_VOICEMAIL_CONF);
+ foreach ($lines as $key => $line) {
+ unset($value);
+ list($var,$value) = split('=>',$line);
+ $var = trim($var);
+ if ($var==$exten && $value) {
+
+ // write out line with voicemail email change
+ $buf = split(',',$value);
+ $buf[2] = $voicemail_email_address;
+ $buf[3] = $voicemail_pager_address;
+
+ foreach ($_SESSION['ari_user']['voicemail_email'] as $key => $value) {
+ $option = "voicemail_email_$key";
+ if ($$option && $key) {
+ $options .= $key . "=" . $value;
+ }
+ else {
+ $options .= $key . "=no";
+ }
+ $options .= "|";
+ }
+ $buf[4] = substr($options, 0, -1);
+
+ $line = $var . " =>" . join(',', $buf);
+ if (substr($line, 0, -1)!="\n") {
+ $line .= "\n";
+ }
+
+ fwrite($fp, $line);
+ }
+ else {
+
+ // write out original line with no changes
+ fwrite($fp, $line);
+ }
+ }
+ fclose($fp);
+ unlink($ASTERISK_VOICEMAIL_CONF);
+ rename($temp_file,$ASTERISK_VOICEMAIL_CONF);
+
+ $voicemail_reload = 1;
+ }
+ }
+
+ // reload asterisk voicemail
+ if ($voicemail_reload) {
+ $this->reloadAsteriskVoicemail();
+ }
+ }
+
+ // update voicemail audio format setting
+ setcookie("ari_voicemail_audio_format", $voicemail_audio_format, time()+365*24*60*60);
+ }
+
+ // update call monitor record setting
+ if ($SETTINGS_ALLOW_CALL_RECORDING_SET) {
+ if ($record_in && $record_out) {
+ $this->setRecordSettings($exten,$record_in,$record_out);
+ }
+ }
+ }
+ }
+
+ // redirect to see updated page
+ $ret .= "
+ <head>
+ <script>
+ <!--
+ window.location = \"" . $_SESSION['ARI_ROOT'] . "?m=" . $m . "\"
+ // -->
+ </script>
+ </head>";
+
+ return $ret;
+ }
+
+ /*
+ * Displays stats page
+ *
+ * @param $args
+ * Common arguments
+ */
+ function display($args) {
+ global $SETTINGS_ALLOW_VOICEMAIL_SETTINGS;
+ global $SETTINGS_ALLOW_VOICEMAIL_PASSWORD_SET;
+ global $SETTINGS_VOICEMAIL_PASSWORD_LENGTH;
+ global $SETTINGS_VOICEMAIL_EMAIL_OPTION_DESCRIPTIONS;
+ global $ARI_VOICEMAIL_AUDIO_FORMAT_DEFAULT;
+ global $SETTINGS_ALLOW_CALL_RECORDING_SET;
+
+ global $loaded_modules;
+
+ // args
+ $m = getArgument($args,'m');
+ $q = getArgument($args,'q');
+ $start = getArgument($args,'start');
+ $span = getArgument($args,'span');
+
+ $displayname = $_SESSION['ari_user']['displayname'];
+ $exten = $_SESSION['ari_user']['extension'];
+
+ $language = new Language();
+ $display = new DisplaySearch();
+
+ // get data
+ $data = $this->getRecordSettings($_SESSION['ari_user']['extension']);
+
+ // lang setting options
+ if (extension_loaded('gettext')) {
+ $setLangText = "<p class='lang'>" . _("Language:") . " " . $language->GetForm() . "</p>";
+ }
+
+
+ // voicemail settings
+ if ($SETTINGS_ALLOW_VOICEMAIL_SETTINGS && $_SESSION['ari_user']['voicemail_enabled']==1 &&
+ in_array('voicemail',array_keys($loaded_modules))) {
+ if ($SETTINGS_ALLOW_VOICEMAIL_PASSWORD_SET) {
+
+ if ($SETTINGS_VOICEMAIL_PASSWORD_EXACT) {
+ $voicemail_password_length_message = sprintf(_("Passwords must be all numbers and only %s digits"),$SETTINGS_VOICEMAIL_PASSWORD_LENGTH);
+ }
+ else {
+ $voicemail_password_length_message = sprintf(_("Passwords must be all numbers and at least %s digits"),$SETTINGS_VOICEMAIL_PASSWORD_LENGTH);
+ }
+
+ $set_voicemail_password_text = "
+ <tr>
+ <td>" . _("Voicemail Password:") . "</td>
+ <td>
+ <input name='voicemail_password' type='password' size=16 value=" . $_SESSION['ari_user']['voicemail_password'] . ">
+ </td>
+ </tr>
+ <tr>
+ <td>" . _("Enter again to confirm:") . "</td>
+ <td>
+ <input name='voicemail_password_confirm' type='password' size=16 value=" . $_SESSION['ari_user']['voicemail_password'] . ">
+ </td>
+ </tr>
+ <tr>
+ <td class='note' colspan=2><small>" . $voicemail_password_length_message . "</small></td>
+ </tr>";
+ }
+
+ if (isset($_SESSION['ari_user']['voicemail_email'])) {
+
+ if ($_SESSION['ari_user']['voicemail_email_enable']) {
+ $voicemail_email_address = $_SESSION['ari_user']['voicemail_email_address'];
+ $voicemail_pager_address = $_SESSION['ari_user']['voicemail_pager_address'];
+ $voicemail_email_enable = 'checked';
+
+ foreach (array_keys($_SESSION['ari_user']['voicemail_email']) as $key) {
+ $var = "voicemail_email_$key";
+ $var_enable = $var . "enable";
+ if ($_SESSION['ari_user']['voicemail_email'][$key]=='yes') {
+ $$var_enable = 'checked';
+ }
+ }
+ }
+ else {
+
+ $voicemail_email_address = $_COOKIE['ari_voicemail_email_address'];
+ $voicemail_email_text_box_options = "disabled style='background: #DDD;'";
+ $voicemail_pager_address = $_COOKIE['ari_voicemail_pager_address'];
+ $voicemail_pager_text_box_options = "disabled style='background: #DDD;'";
+
+ foreach ($_SESSION['ari_user']['voicemail_email'] as $key => $value) {
+ $var = "voicemail_email_$key";
+ $var_cookie = "ari_" . $var;
+ $var_enable = $var . "enable";
+ $var_text_box_options = $var . "text_box_options";
+
+ $$var_text_box_options = "disabled";
+ if ($_COOKIE[$var_cookie]=='yes') {
+ $$var_enable = 'checked';
+ }
+ }
+ }
+
+ $set_voicemail_email_text = "
+
+ <tr>
+ <td> " . _("Email Notification") . " <input " . $voicemail_email_enable . " type=checkbox name='voicemail_email_enable' value='1' OnClick=\"disable_fields(); return true;\">
+ <small> " ._("Enable") . " </small>
+ </td>
+ </tr><tr>
+ <td><a href='#' class='info'>" . _("Email Voicemail To:") . "<span>" . ("Email a notification, including audio file if indicated below.") . " </span></a></td>
+ <td>
+ <input " . $voicemail_email_text_box_options . " name='voicemail_email_address' type='text' size=48 value='" . $voicemail_email_address . "'>
+ </td>
+ </tr>
+ <tr>
+ <td><a href='#' class='info'>" . _("Pager Email Notification To:") . "<span>" . ("Email a short notification") . " </span></a></td>
+ <td>
+ <input " . $voicemail_pager_text_box_options . " name='voicemail_pager_address' type='text' size=48 value='" . $voicemail_pager_address . "'>
+ </td>
+ </tr>
+ <tr>
+ <td></td>
+ </tr>";
+
+ foreach ($_SESSION['ari_user']['voicemail_email'] as $key => $value) {
+
+ $var = "voicemail_email_$key";
+ $var_enable = $var . "enable";
+ $var_text_box_options = $var . "text_box_options";
+ if ($SETTINGS_VOICEMAIL_EMAIL_OPTION_DESCRIPTIONS[$key]) {
+ $var_text = $SETTINGS_VOICEMAIL_EMAIL_OPTION_DESCRIPTIONS[$key];
+ }
+ else {
+ $var_text = $key;
+ }
+
+ if ($value != 'yes' && $value != 'no' && $value !='') {
+
+ $size = strlen($value) - 1;
+ $set_voicemail_email_text .= "
+ <tr>
+ <td></td>
+ <td>
+ <input type=text size='" . $size . "' name='" . $var . "' value='" . $value . "' OnClick=\"disable_fields(); return true;\">
+ <small>" . $var_text . "</small>
+ </td>
+ </tr>";
+ }
+ else {
+
+ $set_voicemail_email_text .= "
+ <tr>
+ <td></td>
+ <td>
+ <input " . $$var_enable . " " . $$var_text_box_options . " type=checkbox name='" . $var . "' value='yes' OnClick=\"disable_fields(); return true;\">
+ <small>" . $var_text . "</small>
+ </td>
+ </tr>";
+ }
+ }
+ }
+
+ $wav_enable = 'selected';
+ if ($_COOKIE['ari_voicemail_audio_format']=='.gsm'||
+ ($_COOKIE['ari_voicemail_audio_format']=='' && $ARI_VOICEMAIL_AUDIO_FORMAT_DEFAULT='.gsm')) {
+ $wav_enable = '';
+ $gsm_enable = 'selected';
+ }
+
+ $set_voicemail_audio_format_text = "
+ <tr>
+ <td>" . _("Audio Format:") . "</td>
+ <td>
+ <select name='voicemail_audio_format'>
+ <option value='.wav' " . $wav_enable . ">" . _("Best Quality") . " (.wav)</option>
+ <option value='.gsm' " . $gsm_enable . ">" . _("Smallest Download") . " (.gsm)</option>
+ </select>
+ </td>
+ </tr>";
+
+ $set_voicemail_text = "
+ <table class='settings'>
+ <tr>
+ <td><h3>" . _("Voicemail Settings") . "</h3></td>
+ </tr>
+ " . $set_voicemail_password_text . "
+ " . $set_voicemail_email_text . "
+ " . $set_voicemail_audio_format_text . "
+ </table>";
+ }
+
+ // call monitor settings
+ if ($this->getFreePBXVersion() &&
+ $SETTINGS_ALLOW_CALL_RECORDING_SET &&
+ in_array('callmonitor',array_keys($loaded_modules))) {
+
+ foreach($data as $key=>$value) {
+ if ($key=='record_in') {
+ if ($value=='Always') {
+ $ri_always = 'checked=checked';
+ }
+ elseif ($value=='Never') {
+ $ri_never = 'checked=checked';
+ }
+ elseif ($value=='Adhoc') {
+ $ri_on_demand = 'checked=checked';
+ }
+ }
+ if ($key=='record_out') {
+ if ($value=='Always') {
+ $ro_always = 'checked=checked';
+ }
+ elseif ($value=='Never') {
+ $ro_never = 'checked=checked';
+ }
+ elseif ($value=='Adhoc') {
+ $ro_on_demand = 'checked=checked';
+ }
+ }
+ }
+
+ $set_callmonitor_text = "
+ <table class='settings'>
+ <tr>
+ <td><h3>" . _("Call Monitor Settings") . "</h3></td>
+ </tr>
+ <tr>
+ <td>" . _("Record INCOMING:") . " </td>
+ <td>
+ <input type='radio' name='record_in' value='Always' " . $ri_always . "/> " . _("Always") . "
+ <input type='radio' name='record_in' value='Never' " . $ri_never . "/> " . _("Never") . "
+ <input type='radio' name='record_in' value='Adhoc' " . $ri_on_demand . "/> " . _("On-Demand") . "
+ </td>
+ </tr>
+ <tr>
+ <td>" . _("Record OUTGOING:") . " </td>
+ <td>
+ <input type='radio' name='record_out' value='Always' " . $ro_always . "/> " . _("Always") . "
+ <input type='radio' name='record_out' value='Never' " . $ro_never . "/> " . _("Never") . "
+ <input type='radio' name='record_out' value='Adhoc' " . $ro_on_demand . "/> " . _("On-Demand") . "
+ </td>
+ </tr>
+ </table>";
+ }
+
+ // javascript enable options
+ if (isset($_SESSION['ari_user']['voicemail_email']) &&
+ in_array('voicemail',array_keys($loaded_modules))) {
+ foreach ($_SESSION['ari_user']['voicemail_email'] as $key => $value) {
+ $var = "voicemail_email_$key";
+ $js_voicemail_email_disable .= "
+ document.ari_settings.$var.disabled = false;";
+ $js_voicemail_email_enable .= "
+ document.ari_settings.$var.disabled = true;";
+ }
+
+ $js_voicemail_script = "
+ if (document.ari_settings.voicemail_email_enable.checked) {
+ document.ari_settings.voicemail_email_address.style.backgroundColor = '#FFF';
+ document.ari_settings.voicemail_email_address.disabled = false;
+ document.ari_settings.voicemail_email_address.value='" . $voicemail_email_address . "';
+ document.ari_settings.voicemail_pager_address.style.backgroundColor = '#FFF';
+ document.ari_settings.voicemail_pager_address.disabled = false;
+ document.ari_settings.voicemail_pager_address.value='" . $voicemail_pager_address . "';
+ " . $js_voicemail_email_disable . "
+ }
+ else {
+ document.ari_settings.voicemail_email_address.style.backgroundColor = '#DDD';
+ document.ari_settings.voicemail_email_address.disabled = true;
+ document.ari_settings.voicemail_pager_address.style.backgroundColor = '#DDD';
+ document.ari_settings.voicemail_pager_address.disabled = true;
+ " . $js_voicemail_email_enable . "
+ }";
+ }
+
+ // build page content
+ $ret .= checkErrorMessage();
+
+ $headerText = sprintf(_("Settings for %s (%s)"),$displayname,$exten);
+
+ $ret .= $display->displayHeaderText($headerText);
+ $ret .= $display->displayLine();
+
+ $ret .= "
+ <SCRIPT LANGUAGE='JavaScript'>
+ <!-- Begin
+ function rowCounter(field, maxlimit) {
+ temp = field.value.split('\u000A',maxlimit+1)
+ field.value = temp.join('\u000A')
+ if (temp.length == maxlimit+1) {
+ field.value = field.value.substring(0, field.value.length-1)
+ }
+ }
+
+ function disable_fields() {";
+ $ret .= $js_voicemail_script . "
+ }
+ // End -->
+ </script>";
+
+ $ret .= "
+ " . $setLangText . "
+ <form class='settings' name='ari_settings' action='' method='GET'>
+ <input type=hidden name=m value=" . $m . ">
+ <input type=hidden name=f value='action'>
+ <input type=hidden name=a value='update'>
+ <br>
+ " . $set_voicemail_text . "
+ <br>
+ " . $set_callmonitor_text . "
+ <br>
+ <input name='submit' type='submit' value='" . _("Update") . "'>
+ </form>";
+
+ return $ret;
+ }
+
+
+
+
+
+
+ /*
+ * Sets Asterisk call recording setting
+ *
+ * @param $exten
+ * Extension to modify
+ * @param $direction
+ * Call direction
+ * @param $state
+ * State to set to
+ */
+ function setRecordSettings($exten,$state_in,$state_out) {
+
+ global $asterisk_manager_interface;
+
+ if (version_compare($this->getFreePBXVersion(), '1.10', '<')) {
+
+ if ($state_in=="Always") {
+ $type_opt = "put";
+ $value_opt = " " . "ENABLED";
+ }
+ elseif ($state_in=="Never") {
+ $type_opt = "put";
+ $value_opt = " " . "DISABLED";
+ }
+ else {
+ $type_opt = "del";
+ $value_opt = "";
+ }
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database $type_opt RECORD-IN $exten $value_opt\r\n\r\n");
+
+ if ($state_out=="Always") {
+ $type_opt = "put";
+ $value_opt = " " . "ENABLED";
+ }
+ elseif ($state_out=="Never") {
+ $type_opt = "put";
+ $value_opt = " " . "DISABLED";
+ }
+ else {
+ $type_opt = "del";
+ $value_opt = "";
+ }
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database $type_opt RECORD-OUT $exten $value_opt\r\n\r\n");
+ }
+ else {
+
+ $value_opt= "out=".$state_out."|in=".$state_in;
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database put AMPUSER $exten/recording $value_opt\r\n\r\n");
+ }
+ }
+
+ /*
+ * Gets record settings for a protocol
+ *
+ * @param $table
+ * Table to pull information from
+ * @param $exten
+ * Extension to get information about
+ * @return $data
+ * call monitor record settings
+ */
+ function getProtocolRecordSettings($table,$exten) {
+
+ global $asterisk_manager_interface;
+
+ $data = array();
+
+ if (version_compare($this->getFreePBXVersion(), '1.10', '<')) {
+
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get RECORD-IN $exten\r\n\r\n");
+ if (preg_match("/ENABLED/",$response)) {
+ $data['record_in'] = 'Always';
+ }
+ elseif (preg_match("/DISABLED/",$response)) {
+ $data['record_in'] = 'Never';
+ }
+ else {
+ $data['record_in'] = 'Adhoc';
+ }
+
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get RECORD-OUT $exten\r\n\r\n");
+ if (preg_match("/ENABLED/",$response)) {
+ $data['record_out'] = 'Always';
+ }
+ elseif (preg_match("/DISABLED/",$response)) {
+ $data['record_out'] = 'Never';
+ }
+ else {
+ $data['record_out'] = 'Adhoc';
+ }
+ }
+ else {
+
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: database get AMPUSER $exten/recording\r\n\r\n");
+ if (strstr($response,"in=Always")) {
+ $data['record_in'] = 'Always';
+ }
+ elseif (strstr($response,"in=Never")) {
+ $data['record_in'] = 'Never';
+ }
+ else {
+ $data['record_in'] = 'Adhoc';
+ }
+ if (strstr($response,"out=Always")) {
+ $data['record_out'] = 'Always';
+ }
+ elseif (strstr($response,"out=Never")) {
+ $data['record_out'] = 'Never';
+ }
+ else {
+ $data['record_out'] = 'Adhoc';
+ }
+ }
+
+ return $data;
+ }
+
+ /*
+ * Gets record settings
+ *
+ * @param $exten
+ * Extension to get information about
+ * @param $data
+ * Reference to the variable to store the data in
+ */
+ function getRecordSettings($exten) {
+
+ // check protocol tables first
+ $data = $this->getProtocolRecordSettings($this->protocol_table,$exten);
+
+ return $data;
+ }
+
+ /*
+ * Reloads Asterisk Configuration
+ */
+ function reloadAsteriskVoicemail() {
+
+ global $asterisk_manager_interface;
+
+ $response = $asterisk_manager_interface->Command("Action: Command\r\nCommand: Reload app_voicemail.so\r\n\r\n");
+ }
+
+ /*
+ * Gets FreePBX Version
+ */
+ function getFreePBXVersion() {
+
+ if (isset($_SESSION['dbh_asterisk'])) {
+ $sql = "SELECT * FROM admin WHERE variable = 'version'";
+ $results = $_SESSION['dbh_asterisk']->getAll($sql);
+ if(DB::IsError($results)) {
+ $_SESSION['ari_error'] = $results->getMessage();
+ }
+
+ return $results[0][1];
+ }
+ }
+
+ function lookupSetExtensionFormat($exten) {
+
+ if (trim($exten) == "") return $exten;
+
+ $exten = preg_replace("/[^0-9*]/", "", $exten);
+
+ $sql = "SELECT extension FROM users WHERE extension = '".$exten."'";
+ $asa = $_SESSION['dbh_asterisk']->getrow($sql, DB_FETCHMODE_ASSOC);
+ if (!is_array($asa)) {
+ return $exten.'#';
+ } else {
+ return $exten;
+ }
+ }
+
+
+} // class
+
+?>
diff --git a/fs_selfservice/fri/modules/voicemail.module b/fs_selfservice/fri/modules/voicemail.module
new file mode 100644
index 0000000..aad1456
--- /dev/null
+++ b/fs_selfservice/fri/modules/voicemail.module
@@ -0,0 +1,805 @@
+<?php
+
+/**
+ * @file
+ * Functions for the interface to the voicemail recordings
+ */
+
+/**
+ * Class for voicemail
+ */
+class Voicemail {
+
+ /*
+ * rank (for prioritizing modules)
+ */
+ function rank() {
+
+ $rank = 1;
+ return $rank;
+ }
+
+ /*
+ * init
+ */
+ function init() {
+ }
+
+ /*
+ * Adds menu item to nav menu
+ *
+ * @param $args
+ * Common arguments
+ */
+ function navMenu($args) {
+
+ global $ARI_NO_LOGIN;
+
+ // check logout
+ if ($_SESSION['ari_user'] && !$ARI_NO_LOGIN) {
+ $logout = 1;
+ }
+
+ if ($logout!='') {
+ $ret .= "<p><small><small><a href='" . $_SESSION['ARI_ROOT'] . "?m=Voicemail&f=display'>" . _("Voicemail") . "</a></small></small></p>";
+ }
+
+ return $ret;
+ }
+
+ /*
+ * Deletes selected voicemails and updates page
+ *
+ * @param $args
+ * Common arguments
+ */
+ function navSubMenu($args) {
+
+ global $ASTERISK_VOICEMAIL_PATH;
+ global $ASTERISK_VOICEMAIL_FOLDERS;
+
+ // args
+ $m = getArgument($args,'m');
+ $q = getArgument($args,'q');
+ $current_folder = getArgument($args,'folder');
+
+ $context = $_SESSION['ari_user']['context'];
+ $extension = $_SESSION['ari_user']['extension'];
+
+ // check for voicemail enabled or admin
+ if ($_SESSION['ari_user']['voicemail_enabled']!=1 ||
+ $extension=='admin') {
+ return;
+ }
+
+ // make folder list
+ $paths = split(';',$ASTERISK_VOICEMAIL_PATH);
+ $i = 0;
+ while ($ASTERISK_VOICEMAIL_FOLDERS[$i]) {
+
+ $f = $ASTERISK_VOICEMAIL_FOLDERS[$i]['folder'];
+ $fn = $ASTERISK_VOICEMAIL_FOLDERS[$i]['name'];
+
+ foreach($paths as $key => $path) {
+
+ $path = appendPath($path,$context);
+ $path = appendPath($path,$extension);
+
+ if (is_dir($path) && is_readable($path)) {
+ $dh = opendir($path);
+ while (false!== ($folder = readdir($dh))) {
+
+ $folder_path = AppendPath($path,$folder);
+
+ if($folder!="." && $folder!=".." &&
+ filetype($folder_path)=='dir') {
+
+ if ($f==$folder) {
+
+ // get message count
+ $indexes = $this->getVoicemailIndex($folder_path,$q,$order,$sort);
+ $record_count = 0;
+ $record_count += $this->getVoicemailCount($indexes);
+
+ // set current folder color
+ $class='';
+ if ($current_folder==$folder ||
+ ($current_folder=='' && $ASTERISK_VOICEMAIL_FOLDERS[0]['folder']==$folder)) {
+ $class = "class='current'";
+ }
+
+ // add folder to list
+ $ret .= "<p><small><small>
+ <a " . $class . " href='" . $_SESSION['ARI_ROOT'] . "?m=Voicemail&q=" . $q . "&folder=" . $f. "'>
+ " . $fn . " (" . $record_count . ")" . "
+ </a>
+ </small></small></p>";
+ }
+ }
+ }
+ }
+ }
+ $i++;
+ }
+
+ return $ret;
+ }
+
+ /*
+ * Acts on the selected voicemails in the method indicated by the action and updates page
+ *
+ * @param $args
+ * Common arguments
+ */
+ function msgAction($args) {
+
+ global $ASTERISK_VOICEMAIL_FOLDERS;
+
+ // args
+ $m = getArgument($args,'m');
+ $a = getArgument($args,'a');
+ $folder = getArgument($args,'folder');
+ $q = getArgument($args,'q');
+ $start = getArgument($args,'start');
+ $span = getArgument($args,'span');
+ $order = getArgument($args,'order');
+ $sort = getArgument($args,'sort');
+
+ // get files
+ $files = array();
+ foreach($_REQUEST as $key => $value) {
+ if (preg_match('/selected/',$key)) {
+ array_push($files, $value);
+ }
+ }
+
+ if ($a=='delete') {
+ $this->deleteVoicemailData($files);
+ }
+ else if ($a=='move_to') {
+ $folder_rx = getArgument($args,'folder_rx');
+ if ($folder_rx=='') {
+ $_SESSION['ari_error']
+ = _("A folder must be selected before the message can be moved.");
+ }
+ else {
+ $context = $_SESSION['ari_user']['context'];
+ $extension = $_SESSION['ari_user']['extension'];
+ $this->moveVoicemailData($files, $context, $extension, $folder_rx);
+ }
+ }
+ else if ($a=='forward_to') {
+
+ $mailbox_rx = getArgument($args,'mailbox_rx');
+ list($context_rx,$extension_rx) = split('/',$mailbox_rx);
+ if ($extension_rx=='') {
+ $_SESSION['ari_error']
+ = _("An extension must be selected before the message can be forwarded.");
+ }
+ else {
+ $folder_rx = $ASTERISK_VOICEMAIL_FOLDERS[0]['folder'];
+ $this->moveVoicemailData($files, $context_rx, $extension_rx, $folder_rx);
+ }
+ }
+
+ // redirect to see updated page
+ $ret .= "
+ <head>
+ <script>
+ <!--
+ window.location = \"" . $_SESSION['ARI_ROOT'] . "?m=" . $m . "&folder=" . $folder . "&q=" . $q . "&start=" . $start . "&span=" . $span . "&order=" . $order . "&sort=" . $sort . "\"
+ // -->
+ </script>
+ </head>";
+
+ return $ret;
+ }
+
+ /*
+ * Displays stats page
+ *
+ * @param $args
+ * Common arguments
+ */
+ function display($args) {
+
+ global $ASTERISK_VOICEMAIL_CONF;
+ global $ASTERISK_VOICEMAIL_PATH;
+ global $ASTERISK_VOICEMAIL_FOLDERS;
+ global $AJAX_PAGE_REFRESH_ENABLE;
+
+ $voicemail_audio_format = $_COOKIE['ari_voicemail_audio_format'];
+
+ $display = new DisplaySearch();
+
+ // args
+ $m = getArgument($args,'m');
+ $f = getArgument($args,'f');
+ $q = getArgument($args,'q');
+ $start = getArgument($args,'start');
+ $span = getArgument($args,'span');
+ $order = getArgument($args,'order');
+ $sort = getArgument($args,'sort');
+
+ $start = $start=='' ? 0 : $start;
+ $span = $span=='' ? 15 : $span;
+ $order = $order=='' ? 'calldate' : $order;
+ $sort = $sort=='' ? 'desc' : $sort;
+
+ $paths = split(';',$ASTERISK_VOICEMAIL_PATH);
+
+ $displayname = $_SESSION['ari_user']['displayname'];
+ $extension = $_SESSION['ari_user']['extension'];
+ $context = $_SESSION['ari_user']['context'];
+ $folder = getArgument($args,'folder');
+ if (!$folder) {
+ $folder = $ASTERISK_VOICEMAIL_FOLDERS[0]['folder'];
+ }
+
+ // get data
+ $data = array();
+ foreach($paths as $key => $path) {
+ $path = fixPathSlash($path);
+ $vm_path = $path . "$context/$extension/$folder";
+ $indexes = $this->getVoicemailIndex($vm_path,$q,$order,$sort);
+ $record_count += $this->getVoicemailCount($indexes);
+ $data = array_merge($data,$this->getVoicemailData($indexes,$start,$span));
+ }
+
+ // build controls
+
+ // get the recordings from the asterisk server
+ $filter = '';
+ $recursiveMax = 1;
+ $recursiveCount = 0;
+ $files = array();
+ foreach($paths as $key => $path) {
+ $path_files = GetFiles($path,$filter,$recursiveMax,$recursiveCount);
+ $files = array_merge($files,$path_files);
+ }
+
+ // move options
+ $i=0;
+ while ($ASTERISK_VOICEMAIL_FOLDERS[$i]) {
+ $cf = $ASTERISK_VOICEMAIL_FOLDERS[$i]['folder'];
+ $fn = $ASTERISK_VOICEMAIL_FOLDERS[$i]['name'];
+ if ($cf!=$folder) {
+ $move_options .= "<option VALUE='" . $cf . "'>&nbsp;&nbsp;&nbsp;&nbsp;" . $fn;
+ }
+ $i++;
+ }
+
+ // forward options
+ if (is_readable($ASTERISK_VOICEMAIL_CONF)) {
+ $lines = file($ASTERISK_VOICEMAIL_CONF);
+ $ext_array = array();
+ foreach ($lines as $key => $line) {
+
+ // get context for forward to mailbox
+ if (preg_match("/\[.*\]/i",$line)) {
+ $forwardContext = trim(preg_replace('/\[|\]/', '', $line));
+ }
+
+ // get username and add to options
+ if (preg_match("/\=\>/i",$line)) {
+ list($username,$value) = split('=>',$line);
+ $username = trim($username);
+ if ($username!=$_SESSION['ari_user']['extension']) {
+ //$ext_array[] = $username . "|" . $forwardContext;
+ list(,$real_name,) = split(",",$value,3);
+ $ext_array[] = $real_name . "|" . $username . "|" . $forwardContext;
+ }
+ }
+ } //foreach
+ //sort the array
+ sort($ext_array);
+
+ //get the size of the array
+ $array_size = count($ext_array) - 1;
+
+ //loop through the array and build the drop down list
+ foreach ($ext_array as $item)
+ {
+ //split the values apart
+ list($real_name,$username,$context) = explode("|",$item);
+
+ //add it to the drop down
+ $forward_options .= "<option VALUE='" . $context . "/" . $username . "'>" . substr($real_name,0,15) . " <" . $username . ">";
+ }
+ }
+ else {
+ $_SESSION['ari_error'] = "File not readable: " . $ASTERISK_VOICEMAIL_CONF;
+ return;
+ }
+
+ // table controls
+ $controls = "
+ <button class='infobar' type='submit' onclick=\"document.voicemail_form.a.value='delete'\">
+ " . _("delete") . "
+ </button>
+ <button class='infobar' type='submit' onclick=\"document.voicemail_form.a.value='move_to'\">
+ " . _("move_to") . "
+ </button>
+ <select name='folder_rx' style='width:124px;'>
+ <option VALUE=''>" . _("Folder") . "
+ " . $move_options . "
+ </select>
+ <button class='infobar' type='submit' onclick=\"document.voicemail_form.a.value='forward_to'\">
+ " . _("forward_to") . "
+ </button>
+ <select name='mailbox_rx'>
+ <option VALUE=''>
+ " . $forward_options . "
+ </select>";
+
+ // table header
+ $recording_delete_header = "<th></th>";
+
+ $fields[0]['field'] = "calldate";
+ $fields[0]['text'] = _("Date");
+ $fields[1]['field'] = "calldate";
+ $fields[1]['text'] = _("Time");
+ $fields[2]['field'] = "clid";
+ $fields[2]['text'] = _("Caller ID");
+ $fields[3]['field'] = "priority";
+ $fields[3]['text'] = _("Priority");
+ $fields[4]['field'] = "origmailbox";
+ $fields[4]['text'] = _("Orig Mailbox");
+ $fields[5]['field'] = "duration";
+ $fields[5]['text'] = _("Duration");
+ $i = 0;
+ while ($fields[$i]) {
+
+ $field = $fields[$i]['field'];
+ $text = $fields[$i]['text'];
+ if ($order==$field) {
+ if ($sort=='asc') {
+ $currentSort = 'desc';
+ $arrowImg = "<img src='theme/images/arrow-asc.gif' alt='sort'>";
+ }
+ else {
+ $currentSort = 'asc';
+ $arrowImg = "<img src='theme/images/arrow-desc.gif' alt='sort'>";
+ }
+
+ if ($i==1) {
+ $arrowImg = '';
+ }
+ }
+ else {
+ $arrowImg = '';
+ $currentSort = 'desc';
+ }
+
+ $unicode_q = urlencode($q);
+ $recording_header .= "<th><a href=" . $_SESSION['ARI_ROOT'] . "?m=" . $m . "&f=" . $f . "&q=" . $unicode_q . "&order=" . $field . "&sort=" . $currentSort . ">" . $text . $arrowImg . "</a></th>";
+
+ $i++;
+ }
+ $recording_header .= "<th>" . _("Message") . "</th>";
+
+ // table body
+ if (isset($data)) {
+ foreach($data as $file=>$value) {
+
+ // recording popup link
+ $voicemail_audio_format = $voicemail_audio_format=='' ? '.wav' : $voicemail_audio_format;
+ $recording = preg_replace('/.txt/', $voicemail_audio_format, $file);
+ if (is_file($recording)) {
+ $recordingLink = "<a href='#' onClick=\"javascript:popUp('misc/recording_popup.php?recording=" . $recording . "&date=" . $date . "&time=" . $time . "'); return false;\">
+ " . _("play") . "
+ </a>";
+ }
+ else {
+ $_SESSION['ari_error'] = _("Voicemail recording(s) was not found.") . "<br>" .
+ sprintf(_("On settings page, change voicemail audio format. It is currently set to %s"),$voicemail_audio_format);
+ }
+
+ $tableText .= "
+ <tr>
+ <td class='checkbox'><input type=checkbox name='selected" . ++$i . "' value=" . $file . "></td>
+ <td width=68>" . GetDateFormat($value['origtime']) . "</td>
+ <td>" . GetTimeFormat($value['origtime']) . "</td>
+ <td width=100>" . $value[callerid] . "</td>
+ <td>" . $value[priority] . "</td>
+ <td width=90>" . $value[origmailbox] . "</td>
+ <td>" . $value[duration] . " sec</td>
+ <td>" . $recordingLink . "</td>
+ </tr>";
+ }
+ }
+
+ // options
+ $url_opts = array();
+ $url_opts['folder'] = $folder;
+ $url_opts['sort'] = $sort;
+ $url_opts['order'] = $order;
+
+ $error = 0;
+
+ // check for voicemail enabled
+ if ($_SESSION['ari_user']['voicemail_enabled']!=1) {
+ $_SESSION['ari_error'] = _("Voicemail Login not found.") . "<br>" .
+ _("No access to voicemail");
+ $error = 1;
+ }
+
+ // check admin
+ if ($extension=='admin') {
+ $_SESSION['ari_error'] = _("No Voicemail Recordings for Admin");
+ $error = 1;
+ }
+
+ // build page content
+ $ret .= checkErrorMessage();
+ if ($error) {
+ return $ret;
+ }
+
+ // ajax page refresh script
+ if ($AJAX_PAGE_REFRESH_ENABLE) {
+// $ret .= ajaxRefreshScript($args);
+ }
+
+ // header
+ $ret .= $display->displayHeaderText(sprintf(_("Voicemail for %s (%s)"),$displayname,$extension));
+ $ret .= $display->displaySearchBlock('left',$m,$q,$url_opts,true);
+
+ // start form
+ $ret .= "
+ <form name='voicemail_form' action='" . $_SESSION['ARI_ROOT'] . "' method='GET'>
+ <input type=hidden name=m value=" . $m . ">
+ <input type=hidden name=f value=msgAction>
+ <input type=hidden name=a value=''>
+ <input type=hidden name=q value=" . $q . ">
+ <input type=hidden name=folder value=" . $folder . ">
+ <input type=hidden name=start value=" . $start . ">
+ <input type=hidden name=span value=" . $span . ">
+ <input type=hidden name=order value=" . $order . ">
+ <input type=hidden name=sort value=" . $sort . ">";
+
+ $ret .= $display->displayInfoBarBlock($controls,$q,$start,$span,$record_count);
+
+ // add javascript for popup and message actions
+ $ret .= "
+ <SCRIPT LANGUAGE='JavaScript'>
+ <!-- Begin
+ function popUp(URL) {
+ popup = window.open(URL, 'play', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=1,width=324,height=110');
+ }
+
+ function checkAll(form,set) {
+ var elem = 0;
+ var i = 0;
+ while (elem = form.elements[i]) {
+ if (set) {
+ elem.checked = true;
+ } else {
+ elem.checked = false;
+ }
+ i++;
+ }
+ return true;
+ }
+ // End -->
+ </script>";
+
+ // voicemail delete recording controls
+ $ret .= "
+ <table>
+ <tr>
+ <td>
+ <small>" . _("select") . ": </small>
+ <small><a href='' OnClick=\"checkAll(document.voicemail_form,true); return false;\">" . _("all") . "</a></small>
+ <small><a href='' OnClick=\"checkAll(document.voicemail_form,false); return false;\">" . _("none") . "</a></small>
+ </td>
+ </tr>
+ </table>";
+
+ // table
+ $ret .= "
+ <table class='voicemail'>
+ <tr>
+ " . $recording_delete_header . "
+ " . $recording_header . "
+ </tr>
+ " . $tableText . "
+ </table>";
+
+ // end form
+ $ret .= "</form>";
+
+ $ret .= $display->displaySearchBlock('center',$m,$q,$url_opts,false);
+ $ret .= $display->displayNavigationBlock($m,$q,$url_opts,$start,$span,$record_count);
+
+ return $ret;
+ }
+
+ /*
+ * Gets voicemail data
+ *
+ * @param $data
+ * Reference to the variable to store the data in
+ * @param $q
+ * search string
+ */
+ function getVoicemailIndex($path,$q,$order,$sort) {
+
+ $indexes = array();
+
+ $filter = '.txt';
+ $recursiveMax = 0;
+ $recursiveCount = 0;
+ $files = getFiles($path,$filter,$recursiveMax,$recursiveCount);
+
+ if (isset($files)) {
+
+ // ugly, but sorts array by time stamp
+ foreach ($files as $file) {
+
+ if (is_file($file)) {
+
+ $lines = file($file);
+ foreach ($lines as $key => $line) {
+ unset($value);
+ list($key,$value) = split('=',$line);
+ if ($value) {
+
+ if ($key=="origtime") {
+ $calldate = $value;
+ $date = GetDateFormat($value);
+ $time = GetTimeFormat($value);
+ }
+ if ($key=="callerid") {
+ $callerid = $value;
+ }
+ if ($key=="priority") {
+ $priority = $value;
+ }
+ if ($key=="origmailbox") {
+ $origmailbox = $value;
+ }
+ if ($key=="duration") {
+ $duration = (int)$value;
+ }
+ }
+ }
+
+ // search filter
+ $found = 1;
+ if ($q) {
+
+ $found = 0;
+
+ if (preg_match("/" . $q . "/", $origmailbox) ||
+ preg_match("/" . $q . "/", $callerid) ||
+ preg_match("/" . $q . "/", $date) ||
+ preg_match("/" . $q . "/", $time)) {
+ $found = 1;
+ }
+ }
+ }
+
+ // add to index
+ if ($found) {
+ $indexes[$file] = $$order;
+ }
+ }
+
+ if (count($indexes)) {
+ if ($sort=='desc') {
+ arsort($indexes);
+ }
+ else {
+ asort($indexes);
+ }
+ }
+ }
+
+ return $indexes;
+ }
+
+ /*
+ * Deletes selected voicemails
+ *
+ * @param $files
+ * Array of files to delete
+ */
+ function deleteVoicemailData($files) {
+
+ foreach($files as $key => $path) {
+
+ // get file parts for search
+ $path_parts = pathinfo($path);
+ $path = fixPathSlash($path_parts['dirname']);
+
+ list($name,$ext) = split("\.",$path_parts['basename']);
+
+ // delete all related files using a wildcard
+ if (is_dir($path)) {
+ $hdl = opendir($path);
+ while ($fn = readdir($hdl)) {
+ if (preg_match("/" . $name ."/",$fn)) {
+ $file = $path . $fn;
+ unlink($file);
+ }
+ }
+ closedir($hdl);
+ }
+ }
+ }
+
+ /*
+ * Moves selected voicemails to a specified folder
+ *
+ * @param $files
+ * Array of files to delete
+ * @param $extension_rx
+ * Mailbox to move message to
+ * @param $folder_rx
+ * Folder to move the messages to
+ */
+ function moveVoicemailData($files,$context_rx,$extension_rx,$folder_rx) {
+
+ global $ASTERISK_VOICEMAIL_PATH;
+
+ $perm = fileperms($ASTERISK_VOICEMAIL_PATH);
+ $uid = fileowner($ASTERISK_VOICEMAIL_PATH);
+ $gid = filegroup($ASTERISK_VOICEMAIL_PATH);
+
+ // recieving path
+ $paths = split(';',$ASTERISK_VOICEMAIL_PATH);
+ $path_rx = appendPath($paths[0],$context_rx);
+ if (!is_dir($path_rx)) {
+ mkdir($path_rx, $perm);
+ chown($path_rx,intval($uid));
+ chgrp($path_rx,intval($gid));
+ }
+ $path_rx = appendPath($path_rx,$extension_rx);
+ if (!is_dir($path_rx)) {
+ mkdir($path_rx, $perm);
+ chown($path_rx,intval($uid));
+ chgrp($path_rx,intval($gid));
+ }
+ $path_rx = appendPath($path_rx,$folder_rx);
+ if (!is_dir($path_rx)) {
+ mkdir($path_rx, $perm);
+ chown($path_rx,intval($uid));
+ chgrp($path_rx,intval($gid));
+ }
+
+ // get recieving folder last message number
+ if (is_dir($path_rx)) {
+
+ $lastNum = -1;
+ $lastNumLen = 4;
+
+ $dh = opendir($path_rx);
+ while (false != ($filename = readdir($dh))) {
+ if($filename!="." && $filename!="..") {
+
+ $msg_path = $path_rx;
+ $msg_path = appendPath($msg_path,$filename);
+ if (is_file($msg_path)) {
+ $path_parts = pathinfo($msg_path);
+ $num = preg_replace("/[a-zA-Z]|\./",'', $path_parts['basename']);
+ if ($num > $lastNum) {
+ $lastNum = $num;
+ $lastNumLen = strlen($lastNum);
+ }
+ }
+ }
+ }
+ }
+ else {
+ $_SESSION['ari_error'] = sprintf(_("Could not create mailbox folder %s on the server"),$folder_rx);
+ return;
+ }
+
+ // copy files to new location, incrementing each message number
+ asort($files);
+ foreach($files as $key => $path) {
+
+ // get file parts for search
+ $path_parts = pathinfo($path);
+ $path = $path_parts['dirname'];
+ $path = fixPathSlash($path);
+ list($name,$ext) = split("\.",$path_parts['basename']);
+ if (is_dir($path)) {
+
+ $lastNum++;
+ $hdl = opendir($path);
+ while ($fn = readdir($hdl)) {
+ if (preg_match("/" . $name . "/",$fn)) {
+ $src = $path . $fn;
+ $path_parts = pathinfo($src);
+ $folder_rx = preg_replace("/\d+/",sprintf("%0" . $lastNumLen . "d",$lastNum),$path_parts['basename']);
+ $dst = appendPath($path_rx,$folder_rx);
+ if (is_writable($src) && is_writable($path_rx)) {
+
+ $perm = fileperms($src);
+ $uid = fileowner($src);
+ $gid = filegroup($src);
+
+ copy($src,$dst);
+
+ if (is_writable($dst)) {
+ chmod($dst, $perm);
+ chown($dst,intval($uid));
+ chgrp($dst,intval($gid));
+ }
+
+ unlink($src);
+ }
+ else {
+ $_SESSION['ari_error'] = sprintf(_("Permission denied on folder %s or %s"),$src,$path_rx);
+ return;
+ }
+ }
+ }
+ closedir($hdl);
+ }
+ }
+ }
+
+ /*
+ * Gets voicemail record count
+ *
+ * @param $indexes
+ * array of files to be counted
+ * @return $count
+ * number of cdr records counted
+ */
+ function getVoicemailCount($indexes) {
+
+ $count = count($indexes);
+
+ return $count;
+ }
+
+ /*
+ * Gets voicemail data
+ *
+ * @param $indexes
+ * array of voicemail files
+ * @param $start
+ * message number to start page with
+ * @param $span
+ * number of messages to display on page
+ * @param $data
+ * Reference to the variable to store the data in
+ */
+ function getVoicemailData($indexes,$start,$span) {
+
+ $data = array();
+
+ if (!isset($indexes)) {
+ return;
+ }
+
+ // populate array
+ $i = 0;
+ foreach ($indexes as $file => $index) {
+ if ($i>$start-1+$span) {
+ return $data;
+ }
+ elseif ($i>$start-1 && $i<$start+$span) {
+ $lines = file($file);
+ foreach ($lines as $key => $line) {
+ unset($value);
+ list($key,$value) = split('=',$line);
+ if ($value) {
+ $data[$file][$key] = $value;
+ }
+ }
+ }
+ $i++;
+ }
+
+ return $data;
+ }
+
+}
+
+
+?> \ No newline at end of file
diff --git a/fs_selfservice/fri/theme/global.css b/fs_selfservice/fri/theme/global.css
new file mode 100644
index 0000000..cd97aa2
--- /dev/null
+++ b/fs_selfservice/fri/theme/global.css
@@ -0,0 +1,87 @@
+/*
+ * Global Styles
+ */
+
+body {
+ color: #333;
+ background-color: white;
+ font-family: Verdana, Helvetica, Arial, sans-serif;
+}
+
+div {
+ font-family: Verdana, Helvetica, Arial, sans-serif;
+}
+
+h2 {
+ font-size: 1.2em;
+ font-family: "Trebuchet MS", Arial, Helvetica, Tahoma, Verdana, sans-serif;
+ margin-top: 0;
+ margin-bottom: 0;
+ color: #555;
+}
+
+h3 {
+ font-size: 1em;
+ margin-top: 1.5em;
+ font-family: "Trebuchet MS", Arial, Helvetica, Tahoma, Verdana, sans-serif;
+ margin-top: 0;
+ margin-bottom: 0;
+ color: #555;
+}
+
+
+h4 {
+ font-family: "Trebuchet MS", Arial, Helvetica, Tahoma, Verdana, sans-serif;
+ margin-top: 0;
+ margin-bottom: 0;
+ color: #555;
+ margin-top: 1.5em
+}
+
+
+
+sup {
+ font-size: 9px
+}
+
+small small {
+ font-family: Verdana, Helvetica, Arial, sans-serif;
+ font-weight: bold;
+}
+
+
+
+/***** info popups *****/
+a.info {
+ position:relative;
+ color:black;
+ border-bottom:1px dashed #ccc;
+}
+/* Added to solve the z-order problem of IE
+*/
+a.info:hover {
+ background-color: #FFA178;
+ z-index:2;
+}
+/* End */
+a.info span{
+ display: none;
+ background-color: #FFA178;
+}
+a.info:hover span{
+ display:block;
+ position:absolute;
+ z-index:1;
+ top:2em;
+ left:-10em;
+ width:25em;
+ border:1px solid #F2AF1D;
+ background-color:#FDF1D5;
+ color:#000;
+ text-align:justify;
+ font-size:10px;
+ font-weight:normal;
+ padding:3px;
+ line-height:15px;
+}
+
diff --git a/fs_selfservice/fri/theme/header.css b/fs_selfservice/fri/theme/header.css
new file mode 100644
index 0000000..1c28e7a
--- /dev/null
+++ b/fs_selfservice/fri/theme/header.css
@@ -0,0 +1,83 @@
+/*
+ * Header
+ */
+
+/* Header */
+
+#ariHeader {
+ position: relative;
+ background: #105D90;
+ height: 72px;
+ margin: 0;
+ padding: 0;
+ clear: both;
+}
+
+#ariHeader span.left {
+ position: relative;
+ height: 72px;
+ border: 0px;
+ padding: 0px;
+ margin: 0px;
+ float: left;
+}
+
+#ariHeader img {
+ border: 0px;
+}
+
+#ariHeader span.right {
+ height: 72px;
+ border: 0px;
+ padding: 0px;
+ margin: 0px;
+ float: right;
+}
+
+#ariHeader img {
+ border: 0px;
+}
+
+/* Topnav */
+
+#topnav {
+ width: 100%;
+ height: 36px;
+ border: 0;
+ padding: 0;
+ margin-top: -1px; /* stupid browser hack */
+ color: #999;
+ background-color: #333;
+}
+
+#topnav span.left {
+ float: left;
+ text-align: left;
+ font-weight: bold;
+ color: #fff;
+ width: 49%;
+}
+
+#topnav span.right {
+ float: right;
+ text-align: right;
+ font-weight: bold;
+ color: #fff;
+ width: 49%;
+}
+
+.topnav small b {
+ font-family: Verdana, Helvetica, Arial, sans-serif;
+ font-weight: bold;
+ background-color: #105D90;
+}
+
+/* Headerspacer */
+
+#headerspacer {
+ border: 0;
+ padding: 0;
+ margin-top: -16px; /* stupid browser hack */
+ background-color: #fff;
+ height: 16px
+} \ No newline at end of file
diff --git a/fs_selfservice/fri/theme/iefixes.css b/fs_selfservice/fri/theme/iefixes.css
new file mode 100644
index 0000000..a7939a4
--- /dev/null
+++ b/fs_selfservice/fri/theme/iefixes.css
@@ -0,0 +1,16 @@
+/*
+ * IE Fixes
+ */
+
+/*Win IE fix \*/
+* html .minwidth { border-left: 760px solid #fff; position: relative; float: left; z-index: 1; }
+
+/*End Win IE fix*/
+
+/*Win IE fix \*/
+* html .container { margin-left: -760px; position: relative; float: left; z-index :2; }
+/*End Win IE fix*/
+
+
+
+
diff --git a/fs_selfservice/fri/theme/images/arrow-asc.gif b/fs_selfservice/fri/theme/images/arrow-asc.gif
new file mode 100644
index 0000000..46a5848
--- /dev/null
+++ b/fs_selfservice/fri/theme/images/arrow-asc.gif
Binary files differ
diff --git a/fs_selfservice/fri/theme/images/arrow-desc.gif b/fs_selfservice/fri/theme/images/arrow-desc.gif
new file mode 100644
index 0000000..6f4e5e6
--- /dev/null
+++ b/fs_selfservice/fri/theme/images/arrow-desc.gif
Binary files differ
diff --git a/fs_selfservice/fri/theme/layout.css b/fs_selfservice/fri/theme/layout.css
new file mode 100644
index 0000000..a398714
--- /dev/null
+++ b/fs_selfservice/fri/theme/layout.css
@@ -0,0 +1,420 @@
+/*
+ * Layout
+ */
+
+/* Page */
+
+#page {
+ background-color: white;
+ text-align: left;
+ min-width: 760px;
+}
+
+/* main */
+
+#main {
+ min-width: 760px;
+ float: left;
+}
+
+#main span.left {
+ float: left;
+}
+
+#main span.right {
+ float: left;
+}
+
+/* Center */
+
+#center {
+ float: left;
+ margin-bottom: 20px;
+}
+
+/* Login */
+
+#login {
+ margin: 0;
+ padding: 0;
+}
+#login p {
+ font-size: 0.7em;
+}
+table#login {
+ width: 600px;
+ border: 0px;
+}
+table#login td.right {
+ text-align: right;
+ width: 20%;
+}
+table#login td.left {
+ text-align: left;
+}
+table#login td.small {
+ font-size: 0.7em;
+}
+table#login_text {
+ margin-left: 60px;
+ font-size: 0.8em;
+ text-align: left;
+}
+
+/* i18n lang */
+
+.lang {
+ display: inline;
+ font-size: 0.8em;
+ margin: 0;
+ padding: 0;
+}
+.lang_code {
+ margin: 0;
+ padding: 0;
+ width: 10em;
+}
+
+/* Line */
+
+#line {
+ min-width: 604px;
+ border: 1px solid #333;
+ padding: 0;
+ margin: 0;
+ color: #999;
+ background-color: #333;
+ height: 1px;
+}
+#line span.left {
+ float: left;
+ text-align: left;
+ font-weight: bold;
+ color: #fff;
+ width: 49%;
+}
+#line span.right {
+ float: right;
+ text-align: right;
+ font-weight: bold;
+ color: #fff;
+ width: 49%;
+}
+
+/* Navbar */
+
+#navbar {
+ width: 604px;
+ height: 24px;
+ border: 1px;
+ padding: 0;
+ margin-bottom: 0;
+ color: #fff;
+ background-color: #333;
+}
+#navbar span.left {
+ margin: 2px;
+ float: left;
+ text-align: left;
+ font-weight: bold;
+ vertical-align: middle;
+ width: 49%;
+}
+#navbar span.right {
+ margin: 2px;
+ float: right;
+ text-align: right;
+ font-weight: bold;
+ vertical-align: middle;
+ width: 49%;
+}
+
+/* Info Bar */
+
+#info_bar {
+ min-width: 604px;
+ border: 1px solid #333;
+ padding: 3px;
+ margin-top: -1px; /* stupid browser hack */
+ color: #999;
+ background-color: #333;
+ height: 20px;
+}
+#info_bar span.left {
+ float: left;
+ text-align: left;
+ font-weight: bold;
+ color: #fff;
+ width: 49%;
+}
+#info_bar span.right {
+ float: right;
+ text-align: right;
+ font-weight: bold;
+ color: #fff;
+ width: 49%;
+}
+.info_bar a:link {
+ color: white;
+ text-decoration: none;
+}
+.info_bar a:active, a:link {
+ color: #105D90;
+}
+.info_bar a:hover {
+ color: #fc0;
+}
+.info_bar small b {
+ font-family: Verdana, Helvetica, Arial, sans-serif;
+ font-weight: bold;
+}
+input.infoBar {
+ font-size: 11px;
+ padding: 0px;
+ height: 22px;
+}
+
+/* bars */
+
+.bar {
+ margin: 0;
+}
+
+.bar_left {
+ width: 604px;
+ margin: 0 0 16px 0;
+ padding: 0;
+}
+
+.bar_center {
+ width: 604px;
+ text-align: center;
+ margin: 0 0 16px 0;
+ padding: 0;
+}
+.bar_center a:active, .bar_center a:hover {
+ color: red;
+}
+
+/* Subheader */
+
+#subheader {
+ padding: 0px;
+ margin: 0px;
+ margin-bottom: 16px;
+}
+
+/* servBodL */
+
+.servBodL {
+ border-left: 1px dotted #CEDCEA;
+}
+
+/* Callmonitor */
+
+table.callmonitor {
+ border: 1px #6699CC solid;
+ border-collapse: collapse;
+ border-spacing: 0px;
+ margin: 0 0 16px 0;
+ width: 604px;
+}
+table.callmonitor th {
+ background-color: #BEC8D1;
+ border: 1px solid #6699CC;
+ border-bottom: 2px solid #6699CC;
+ text-align: center;
+ font-family: Verdana;
+ font-weight: bold;
+ font-size: 0.7em;
+ color: #404040;
+}
+table.callmonitor th a {
+ color: #404040;
+}
+table.callmonitor img {
+ border: 0;
+}
+table.callmonitor td {
+ background-color: white;
+ border: 1px solid #6699CC;
+ color: #404040;
+ font-family: Verdana, sans-serif, Arial;
+ font-weight: normal;
+ font-size: 0.7em;
+ padding: 3px;
+ text-align: center;
+}
+table.callmonitor td.checkbox {
+ padding: 1px;
+}
+
+/* Voicemail */
+
+.voicemail {
+ margin: 0px;
+}
+table.voicemail {
+ border: 1px #6699CC solid;
+ border-collapse: collapse;
+ border-spacing: 0px;
+ margin: 0 0 16px 0;
+ width: 604px;
+}
+table.voicemail th {
+ background-color: #BEC8D1;
+ border: 1px solid #6699CC;
+ border-bottom: 2px solid #6699CC;
+ text-align: center;
+ font-family: Verdana;
+ font-weight: bold;
+ font-size: 0.7em;
+ color: #404040;
+}
+table.voicemail th a {
+ color: #404040;
+}
+table.voicemail img {
+ border: 0;
+}
+table.voicemail td {
+ background-color: white;
+ border: 1px solid #6699CC;
+ color: #404040;
+ font-family: Verdana, sans-serif, Arial;
+ font-weight: normal;
+ font-size: 0.7em;
+ padding: 3px;
+ text-align: center;
+}
+table.voicemail td.checkbox {
+ padding: 1px;
+}
+
+/* Help */
+
+.help {
+ margin: 0px;
+}
+table.help {
+ border: 1px #6699CC solid;
+ border-collapse: collapse;
+ border-spacing: 0px;
+ margin: 0 0 16px 0;
+}
+table.help th {
+ background-color: #BEC8D1;
+ border: 1px solid #6699CC;
+ border-bottom: 2px solid #6699CC;
+ font-family: Verdana;
+ font-weight: bold;
+ font-size: 0.7em;
+ color: #404040;
+}
+table.help th.feature_codes {
+ text-align: center;
+ width: 9em;
+}
+table.help th a {
+ color: #404040;
+}
+table.help img {
+ border: 0;
+}
+table.help td {
+ background-color: white;
+ border: 1px solid #6699CC;
+ color: #404040;
+ font-family: Verdana, sans-serif, Arial;
+ font-weight: normal;
+ font-size: 0.7em;
+ padding: 3px;
+}
+table.help td.feature_codes {
+ text-align: center;
+}
+table.help td.checkbox {
+ padding: 1px;
+}
+
+/* Settings */
+
+.settings {
+ font-family: Verdana, sans-serif, Arial;
+ font-weight: normal;
+ font-size: 0.9em;
+ padding: 0;
+ margin: 0;
+}
+table.settings {
+ font-family: Verdana;
+ color: #404040;
+ border-collapse: collapse;
+ border-spacing: 0px;
+ padding-bottom: 3px;
+}
+table.settings td {
+ color: #404040;
+ background-color: white;
+ padding: 3px;
+}
+table.settings td.note {
+ color: #105D90;
+}
+
+/* Footer */
+
+#ariFooter {
+ color: #999;
+ margin-left: 148px;
+ font-size: 10px;
+ overflow: auto;
+/* width: 100%; */
+ clear: both;
+}
+
+#ariFooter a {
+ text-decoration: none;
+ color: #999;
+}
+
+#ariFooter a:hover {
+ text-decoration: underline;
+ color: #105D90;
+}
+
+#ariFooter a:link {
+ text-decoration: none;
+ color: #999;
+}
+
+/* Misc */
+
+.ariClearBoth {
+ clear: both;
+ margin: 0;
+ padding: 0;
+}
+
+.ariBlockHide {
+ display: none;
+ height: 0;
+ width: 0;
+ overflow: hidden;
+ position: absolute; /* IE5 Mac */
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/fs_selfservice/fri/theme/logo.gif b/fs_selfservice/fri/theme/logo.gif
new file mode 100644
index 0000000..b2d23d7
--- /dev/null
+++ b/fs_selfservice/fri/theme/logo.gif
Binary files differ
diff --git a/fs_selfservice/fri/theme/main.css b/fs_selfservice/fri/theme/main.css
new file mode 100644
index 0000000..6b9ba94
--- /dev/null
+++ b/fs_selfservice/fri/theme/main.css
@@ -0,0 +1,13 @@
+/*
+ * Main
+ */
+
+@import url("global.css");
+@import url("text.css");
+@import url("layout.css");
+@import url("header.css");
+@import url("navigation.css");
+
+@import url("iefixes.css");
+
+
diff --git a/fs_selfservice/fri/theme/navigation.css b/fs_selfservice/fri/theme/navigation.css
new file mode 100644
index 0000000..907851b
--- /dev/null
+++ b/fs_selfservice/fri/theme/navigation.css
@@ -0,0 +1,166 @@
+/*
+ * Navigation
+ */
+
+/* Menu */
+
+#menu {
+ width: 148px;
+ float: left;
+}
+
+/* Nav */
+
+.nav {
+ font-weight: bold;
+ color: #105D90;
+ margin-right: 20px;
+}
+
+.nav p {
+ margin: 0px;
+ padding-top: 2px;
+ padding-bottom: 3px;
+ background: #FFF;
+}
+
+.nav a:visited {
+ color: #105D90;
+}
+
+.sub {
+ margin-left: 1em;
+}
+
+.navtext {
+ margin-left: 20px;
+}
+
+.nav_b1 {
+ height: 1px;
+ font-size: 1px;
+ overflow: hidden;
+ display: block;
+ background: #EEE;
+ margin:0 5px;
+}
+
+.nav_b2 {
+ height: 1px;
+ font-size: 1px;
+ overflow: hidden;
+ display: block;
+ background: #FFF;
+ border-right: 2px solid #EEE;
+ border-left: 2px solid #EEE;
+ margin:0 3px;
+}
+
+.nav_b3 {
+ height: 1px;
+ font-size: 1px;
+ overflow: hidden;
+ display:block;
+ background: #FFF;
+ border-right: 1px solid #EEE;
+ border-left: 1px solid #EEE;
+ margin: 0 2px;
+}
+
+.nav_b4 {
+ height: 2px;
+ font-size: 1px;
+ overflow: hidden;
+ display:block;
+ background: #FFF;
+ border-right: 1px solid #EEE;
+ border-left:1px solid #EEE;
+ margin:0 1px;
+}
+
+#nav_menu {
+ background: #FFF;
+ border-right: 1px solid #EEE;
+ border-left: 1px solid #EEE;
+ padding-left: 0.75em;
+}
+
+/* Subnav */
+
+.subnav {
+ font-weight: bold;
+ color: #105D90;
+ margin-right: 20px;
+}
+
+.subnav p {
+ margin: 0px;
+ padding-top: 2px;
+ padding-bottom: 3px;
+ background: #BEC8D1;
+}
+
+.subnav a:visited {
+ color: #105D90;
+}
+
+.subnav a.current, a:visited.current {
+ color: #404040;
+}
+
+.subnav_b1 {
+ height: 1px;
+ font-size: 1px;
+ overflow: hidden;
+ display: block;
+ background: #aaa;
+ margin:0 5px;
+}
+
+.subnav_b2 {
+ height: 1px;
+ font-size: 1px;
+ overflow: hidden;
+ display: block;
+ background: #BEC8D1;
+ border-right: 2px solid #aaa;
+ border-left: 2px solid #aaa;
+ margin:0 3px;
+}
+
+.subnav_b3 {
+ height: 1px;
+ font-size: 1px;
+ overflow: hidden;
+ display:block;
+ background: #BEC8D1;
+ border-right: 1px solid #aaa;
+ border-left: 1px solid #aaa;
+ margin: 0 2px;
+}
+
+.subnav_b4 {
+ height: 2px;
+ font-size: 1px;
+ overflow: hidden;
+ display:block;
+ background: #BEC8D1;
+ border-right: 1px solid #aaa;
+ border-left:1px solid #aaa;
+ margin:0 1px;
+}
+
+.subnav_title {
+ font-weight: normal;
+ color: #105D90;
+ font-size: 12px;
+ padding-left: 1em;
+}
+
+#subnav_menu {
+ background: #BEC8D1;
+ border-right: 1px solid #aaa;
+ border-left: 1px solid #aaa;
+ padding-left: 1.25em;
+}
+
diff --git a/fs_selfservice/fri/theme/page.tpl.php b/fs_selfservice/fri/theme/page.tpl.php
new file mode 100644
index 0000000..12b5a3b
--- /dev/null
+++ b/fs_selfservice/fri/theme/page.tpl.php
@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <TITLE>User Portal</TITLE>
+ <link rel="stylesheet" href="theme/main.css" type="text/css">
+ <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+ </head>
+ <body>
+ <div id="page">
+ <div class="minwidth">
+ <div class="container">
+ <div id="topnav">
+ <div class="spacer"></div>
+ <span class="left">
+ </span>
+ <div class="spacer"></div>
+ </div>
+ <div id="headerspacer"><img src="theme/spacer.gif" alt=""></div>
+ <div id="main">
+ <div class="minwidth">
+ <div class="container">
+ <div class="spacer"></div>
+ <span class="left">
+ <div id="menu">
+ <div><img height=4 src="theme/spacer.gif" alt=""></div>
+ <div class="nav">
+ <?php if ($nav_menu != '') { ?>
+ <b class='nav_b1'></b><b class='nav_b2'></b><b class='nav_b3'></b><b class='nav_b4'></b>
+ <div id='nav_menu'>
+ <?php print($nav_menu) ?>
+ </div>
+ <b class='nav_b4'></b><b class='nav_b3'></b><b class='nav_b2'></b><b class='nav_b1'></b>
+ <?php } ?>
+ </div>
+ <div><img height=14 src="theme/spacer.gif" alt=""></div>
+ <?php if ($subnav_menu != '') { ?>
+ <div class="subnav">
+ <div class="subnav_title"><?php echo _("Folders")?>:</div>
+ <b class='subnav_b1'></b><b class='subnav_b2'></b><b class='subnav_b3'></b><b class='subnav_b4'></b>
+ <div id='subnav_menu'>
+ <?php print($subnav_menu) ?>
+ </div>
+ <b class='subnav_b4'></b><b class='subnav_b3'></b><b class='subnav_b2'></b><b class='subnav_b1'></b>
+ </div>
+ <?php } ?>
+ </div>
+ </span>
+ <span class="right">
+ <div id="center">
+ <?php if ($login != "") { ?>
+ <?php print($login) ?>
+ <?php } ?>
+ <div id="content">
+ <!-- begin main content -->
+ <?php print($content) ?>
+ <!-- end main content -->
+ </div>
+ </div>
+ </span>
+ <div class="spacer"></div>
+ </div>
+ </div>
+ </div>
+ <!--begin footer-->
+ <div id="ariFooter">
+ <small>
+ &nbsp;&nbsp;<?php print($ari_version) ?> <?php echo _("Version")?><br>
+ &middot;&nbsp;<a href="http<?php print(isset($_SERVER['HTTPS'])&&$_SERVER['HTTPS']!=''?'s':''); ?>://www.littlejohnconsulting.com">Based on ARI from Littlejohn Consulting</a>
+ </small>
+ </div>
+ <!-- end footer -->
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
+
diff --git a/fs_selfservice/fri/theme/spacer.gif b/fs_selfservice/fri/theme/spacer.gif
new file mode 100644
index 0000000..8f09684
--- /dev/null
+++ b/fs_selfservice/fri/theme/spacer.gif
Binary files differ
diff --git a/fs_selfservice/fri/theme/text.css b/fs_selfservice/fri/theme/text.css
new file mode 100644
index 0000000..9625ca0
--- /dev/null
+++ b/fs_selfservice/fri/theme/text.css
@@ -0,0 +1,10 @@
+/*
+ * Text
+ */
+
+/* Error */
+
+.error {
+ color: #CC3333;
+}
+
diff --git a/fs_selfservice/fri/version.php b/fs_selfservice/fri/version.php
new file mode 100644
index 0000000..7f313a1
--- /dev/null
+++ b/fs_selfservice/fri/version.php
@@ -0,0 +1,10 @@
+<?php
+
+/**
+ * @file
+ * version
+ */
+
+$ARI_VERSION = 'FreePBX 2.3';
+
+?>