Index: /modules/branches/2.10/fw_fopsvn.pl =================================================================== --- /modules/branches/2.10/fw_fopsvn.pl (revision 11509) +++ /modules/branches/2.10/fw_fopsvn.pl (revision 11509) @@ -0,0 +1,34 @@ +#!/usr/bin/perl + +# This script (sculpted from publish.pl) will check the last tarball (which must be there) +# based on the fw_fop xml version number and then run svn log against all updates since +# fw_fop was last published. +# +$rver = "2.9"; +$fwbranch = "branches/2.9"; +$fw_fop = "fw_fop"; + +$moddir = 'fw_fop'; + +my $reldir = "release/"; + + open FH, "$moddir/module.xml"; + $newxml = ""; + $vers = "unset"; + while () { + if ($vers == 'unset' && /(.+)<\/version>/) { $vers = $1; } + $newxml .= $_; + } + close FH; + + die "Don't know version of $moddir" if ($vers eq "unset"); + # Automatically check in any files that were modified but weren't checked into SVN + + # Now we know the version. Get the svnversion.txt from the last update. + $filename = "../../$reldir"."$rver/$fw_fop-$vers.tgz"; + print "CHECKING VERSION: ..... "; + #print "CHECKING VERSION WITH: tar -zxOf $filename $moddir/svnversion.txt: ... "; + system("tar -zxOf ".$filename." ".$moddir."/svnversion.txt"); + print "Geting svn log since that version for $rver : .... \n\n"; + $svnver = system("svn log http://svn.freepbx.org/freepbx/$fwbranch/amp_conf/htdocs_panel -r `tar -zxOf ".$filename." ".$moddir."/svnversion.txt | sed -e s/SVN\\\ VERSION:// | tr -cd '0-9'`:HEAD"); + $svnver = system("svn log http://svn.freepbx.org/freepbx/$fwbranch/amp_conf/bin/retrieve_op_conf_from_mysql.php -r `tar -zxOf ".$filename." ".$moddir."/svnversion.txt | sed -e s/SVN\\\ VERSION:// | tr -cd '0-9'`:HEAD"); Index: /modules/branches/2.10/findmefollow/i18n/sv_SE/LC_MESSAGES/findmefollow.po =================================================================== --- /modules/branches/2.10/findmefollow/i18n/sv_SE/LC_MESSAGES/findmefollow.po (revision 7250) +++ /modules/branches/2.10/findmefollow/i18n/sv_SE/LC_MESSAGES/findmefollow.po (revision 7250) @@ -0,0 +1,405 @@ +# 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 , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX findmefollow\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-11-08 18:34+0100\n" +"PO-Revision-Date: 2008-11-08 18:39+0100\n" +"Last-Translator: Mikael Carlsson \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Swedish\n" +"X-Poedit-Country: SWEDEN\n" + +#: functions.inc.php:385 +msgid "Edit Follow Me Settings" +msgstr "Redigera Följ-mig" + +#: functions.inc.php:388 +#: functions.inc.php:392 +msgid "Add Follow Me Settings" +msgstr "LÀgg till Följ-mig" + +#: functions.inc.php:420 +#, php-format +msgid "Follow-Me: %s (%s)" +msgstr "Följ-mig: %s (%s)" + +#: functions.inc.php:438 +#, php-format +msgid "Follow-Me User: %s" +msgstr "Följ-mig anvÀndare %s" + +#: install.php:4 +msgid "Findme Follow Toggle" +msgstr "StÀll om Följ-mig" + +#: install.php:141 +#: uninstall.php:31 +msgid "Cannot connect to Asterisk Manager with " +msgstr "Kan inte koppla upp mot Asterisk hanterare" + +#: install.php:159 +msgid "Checking if recordings need migration.." +msgstr "Kontrollerar om inspelningar behöver migreras.." + +#: install.php:165 +msgid "migrating" +msgstr "migrerar" + +#: install.php:166 +msgid "adding annmsg_id field.." +msgstr "lÀgger till fÀltet annmsg_id.." + +#: install.php:170 +#: install.php:179 +#: install.php:188 +#: install.php:200 +#: install.php:216 +#: install.php:226 +#: install.php:242 +#: install.php:252 +#: install.php:268 +msgid "fatal error" +msgstr "allvarligt fel" + +#: install.php:173 +#: install.php:182 +#: install.php:191 +#: install.php:282 +#: install.php:290 +#: install.php:298 +msgid "ok" +msgstr "ok" + +#: install.php:175 +msgid "adding remotealert_id field.." +msgstr "LÀgger till fÀltet remotealert_id.." + +#: install.php:184 +msgid "adding toolate_id field.." +msgstr "lÀgger till fÀltet toolate_id" + +#: install.php:196 +msgid "migrate annmsg to ids.." +msgstr "migrerar annsmg till ids..." + +#: install.php:220 +#: install.php:246 +#: install.php:272 +#, php-format +msgid "migrated %s entries" +msgstr "migrerat %s poster" + +#: install.php:222 +msgid "migrate remotealert to ids.." +msgstr "migrerar remotealerts till ids.." + +#: install.php:248 +msgid "migrate toolate to ids.." +msgstr "migrerar toolate till ids.." + +#: install.php:276 +msgid "dropping annmsg field.." +msgstr "kastar fÀltet annmsg" + +#: install.php:280 +msgid "no annmsg field???" +msgstr "inget annmsg fÀlt???" + +#: install.php:284 +msgid "dropping remotealert field.." +msgstr "kastar fÀltet remotealert" + +#: install.php:288 +msgid "no remotealert field???" +msgstr "inget remotealert fÀlt???" + +#: install.php:292 +msgid "dropping toolate field.." +msgstr "kastar fÀltet toolate.." + +#: install.php:296 +msgid "no toolate field???" +msgstr "inget toolate fÀlt???" + +#: install.php:302 +msgid "already migrated" +msgstr "redan migrerad" + +#: page.findmefollow.php:71 +msgid "Warning! Extension" +msgstr "Varning! Anknytning" + +#: page.findmefollow.php:71 +msgid "is not allowed for your account" +msgstr "Àr inte tillåtet för din anknytning" + +#: page.findmefollow.php:121 +#: page.findmefollow.php:124 +#: page.findmefollow.php:157 +msgid "Follow Me" +msgstr "Följ-mig" + +#: page.findmefollow.php:121 +msgid "Choose a user/extension:" +msgstr "VÀlj en anvÀndare/anknytning:" + +#: page.findmefollow.php:124 +msgid "deleted" +msgstr "borttagen" + +#: page.findmefollow.php:154 +msgid "Delete Entries" +msgstr "Ta bort val" + +#: page.findmefollow.php:164 +msgid "User" +msgstr "AnvÀndare" + +#: page.findmefollow.php:168 +msgid "Extension" +msgstr "Anknytning" + +#: page.findmefollow.php:171 +#, php-format +msgid "Edit %s" +msgstr "Redigera %s" + +#: page.findmefollow.php:171 +#, php-format +msgid "Edit %s %s" +msgstr "Redigera %s %s" + +#: page.findmefollow.php:180 +msgid "Edit Follow Me" +msgstr "Redigera Följ-mig" + +#: page.findmefollow.php:180 +msgid "Add Follow Me" +msgstr "LÀgg till Följ-mig" + +#: page.findmefollow.php:188 +msgid "group number" +msgstr "gruppnummer" + +#: page.findmefollow.php:188 +msgid "The number users will dial to ring extensions in this ring group" +msgstr "Nummer som ska anvÀndas för att ringa anknytningar i denna ringgrupp" + +#: page.findmefollow.php:194 +msgid "Disable" +msgstr "Avaktivera" + +#: page.findmefollow.php:194 +msgid "By default (not checked) any call to this extension will go to this Follow-Me instead, including directory calls by name from IVRs. If checked, calls will go only to the extension.
However, destinations that specify FollowMe will come here.
Checking this box is often used in conjunction with VmX Locater, where you want a call to ring the extension, and then only if the caller chooses to find you do you want it to come here." +msgstr "Som standard (inte aktiverad) kommer alla samtal till denna anknytning gå till Följ-mig. Om den Àr aktiverad kommer samtalen bara att gå till denna anknytning.
Men, destinationer som anger Följ-mig kommer hit.
Aktivering av detta val anvÀnds ofta i samband med VmX Lokatorn, nÀr du vill att samtalet ska ringa denna anknytning, och endast om uppringaren vÀljer att hitta dig kommer den hit." + +#: page.findmefollow.php:199 +msgid "Initial Ring Time:" +msgstr "Ringtid" + +#: page.findmefollow.php:200 +msgid "This is the number of seconds to ring the primary extension prior to proceeding to the follow-me list. The extension can also be included in the follow-me list. A 0 setting will bypass this." +msgstr "Det antal sekunder som det ska ringa den primÀra anknytningen innan det ringer på Följ-mig listan, sÀtt 0 för att hoppa över denna tid. Denna anknytning kan vara inkluderad i Följ-mig listan." + +#: page.findmefollow.php:217 +msgid "Ring Strategy:" +msgstr "Ringstrategi:" + +#: page.findmefollow.php:219 +msgid "ringallv2" +msgstr "ringallv2" + +#: page.findmefollow.php:219 +msgid "ring primary extension for initial ring time followed by all additional extensions until one answers" +msgstr "Ring på den primÀra anknytningen den tid som anges i Ringtid, dÀrefter alla Följ-mig anknytningarna tills någon av dom svarar" + +#: page.findmefollow.php:220 +msgid "ringall" +msgstr "ringall" + +#: page.findmefollow.php:220 +msgid "ring all available channels until one answers (default)" +msgstr "Ring alla tillgÀngliga nummer tills någon svarar (standard)" + +#: page.findmefollow.php:221 +msgid "hunt" +msgstr "hunt" + +#: page.findmefollow.php:221 +msgid "take turns ringing each available extension" +msgstr "Ring anknytningarna i tur och ordning" + +#: page.findmefollow.php:222 +msgid "memoryhunt" +msgstr "memoryhunt" + +#: page.findmefollow.php:222 +msgid "ring first extension in the list, then ring the 1st and 2nd extension, then ring 1st 2nd and 3rd extension in the list.... etc." +msgstr "Ring första numret i listan, sedan 1:a och 2:a, dÀrefter 1:a, 2:a och 3:e, ...... osv." + +#: page.findmefollow.php:223 +msgid "*-prim" +msgstr "*-prim" + +#: page.findmefollow.php:223 +msgid "these modes act as described above. However, if the primary extension (first in list) is occupied, the other extensions will not be rung. If the primary is FreePBX DND, it won't be rung. If the primary is FreePBX CF unconditional, then all will be rung" +msgstr "Gör som i lÀgena ovan. Men, om den primÀra anknytningen (första numret i listan) Àr upptagen, kommer inga andra nummer att ringas. Om den primÀra anknytningen Àr FreePBX Stör-ej kommer en inte att ringas. Om den primÀra FreePBX Konstant Vidarekopplad, kommer alla att ringas." + +#: page.findmefollow.php:224 +msgid "firstavailable" +msgstr "första tillgÀngliga" + +#: page.findmefollow.php:224 +msgid "ring only the first available channel" +msgstr "ring bara den första tillgÀngliga kanalen" + +#: page.findmefollow.php:225 +msgid "firstnotonphone" +msgstr "första-inte-upptagen" + +#: page.findmefollow.php:225 +msgid "ring only the first channel which is not off hook - ignore CW" +msgstr "ring bara den första kanalen som inte Àr upptagen - ignorera Samtal vÀntar" + +#: page.findmefollow.php:244 +msgid "Ring Time (max 60 sec)" +msgstr "Ringtid (max 60 sek)" + +#: page.findmefollow.php:246 +msgid "Time in seconds that the phones will ring. For all hunt style ring strategies, this is the time for each iteration of phone(s) that are rung" +msgstr "Tid i sekunder som telefonen kommer att ringa. För alla hunt-strategier Àr detta tiden för varje runda av telefoner som rings" + +#: page.findmefollow.php:254 +msgid "Follow-Me List" +msgstr "Följ-mig lista" + +#: page.findmefollow.php:254 +msgid "List extensions to ring, one per line, or use the Extension Quick Pick below.

You can include an extension on a remote system, or an external number by suffixing a number with a pound (#). ex: 2448089# would dial 2448089 on the appropriate trunk (see Outbound Routing)." +msgstr "Lista anknytningar att ringa, en per rad, eller vÀlj i snabblistan nedan.

Du kan inkludera en anknytning på ett fjÀrrsystem, eller ett externt nummer genom att lÀgga till en fyrkant (#) i slutet på numret. T.ex. 040592400# kommer att ringa 040592400." + +#: page.findmefollow.php:269 +msgid "Extension Quick Pick" +msgstr "Snabblista med anknytningar" + +#: page.findmefollow.php:271 +msgid "Choose an extension to append to the end of the extension list above." +msgstr "VÀlj en anknytning att lÀgga till sist i listan." + +#: page.findmefollow.php:277 +msgid "(pick extension)" +msgstr "(vÀlj anknytning)" + +#: page.findmefollow.php:290 +#: page.findmefollow.php:308 +msgid "Announcement:" +msgstr "Meddelande:" + +#: page.findmefollow.php:290 +msgid "Message to be played to the caller before dialing this group.

To add additional recordings please use the \"System Recordings\" MENU to the left" +msgstr "Meddelande som ska spelas upp för uppringaren innan det kommer att ringa denna grupp.

För att lÀgga till inspelningar, vÀlj \"Systeminspelningar\" i menyn till vÀnster." + +#: page.findmefollow.php:296 +msgid "None" +msgstr "Inget" + +#: page.findmefollow.php:308 +msgid "Message to be played to the caller before dialing this group.

You must install and enable the \"Systems Recordings\" Module to edit this option" +msgstr "Meddelande som kommer att spelas upp för uppringaren innan det ringer denna grupp.

Du måste ha installerat och aktiverat modulen \"Systeminspelningar\" för att redigera detta val." + +#: page.findmefollow.php:319 +msgid "Play Music On Hold?" +msgstr "Spela Pausmusik?" + +#: page.findmefollow.php:319 +msgid "If you select a Music on Hold class to play, instead of 'Ring', they will hear that instead of Ringing while they are waiting for someone to pick up." +msgstr "Om du valt Pausmusik i stÀllet för 'Ring' kommer uppringaren att höra musik i stÀllet för ringljud under tiden de vÀntar på att samtalet ska besvaras." + +#: page.findmefollow.php:325 +msgid "Ring" +msgstr "Ring" + +#: page.findmefollow.php:338 +msgid "CID Name Prefix" +msgstr "Prefix för nummerpresentation" + +#: page.findmefollow.php:338 +msgid "You can optionally prefix the Caller ID name when ringing extensions in this group. ie: If you prefix with \"Sales:\", a call from John Doe would display as \"Sales:John Doe\" on the extensions that ring." +msgstr "Du kan vÀlja att skriva in ett prefix för nummerpresentation för anknytningarna i denna grupp. Om du valt att skriva \"Support\", kommer det att för ett samtal från 040123456 att stå \"Support:040123456\" på alla uppringda anknytningars textfönster." + +#: page.findmefollow.php:343 +msgid "Alert Info" +msgstr "Alertinfo" + +#: page.findmefollow.php:343 +msgid "You can optionally include an Alert Info which can create distinctive rings on SIP phones." +msgstr "Du kan valfritt ange en Alertinfo som anvÀnds för att låta SIP-telefoner ringa annan signal." + +#: page.findmefollow.php:348 +msgid "Confirm Calls" +msgstr "BekrÀfta samtal" + +#: page.findmefollow.php:348 +msgid "Enable this if you're calling external numbers that need confirmation - eg, a mobile phone may go to voicemail which will pick up the call. Enabling this requires the remote side push 1 on their phone before the call is put through. This feature only works with the ringall/ringall-prim ring strategy" +msgstr "Aktivera detta om du ringer externa nummer som du vill ha bekrÀftelse från, t.ex. en mobiltelefon som ingen svarar i kommer att gå till röstbrevlådan som i sin tur kommer att svara på samtalet. Aktivering av detta val krÀver att den uppringda trycker siffran 1 innan samtalet kopplas upp. Denna funktion fungerar bara med ringall/ringall-prim strategierna." + +#: page.findmefollow.php:356 +msgid "Remote Announce:" +msgstr "FjÀrrmeddelande:" + +#: page.findmefollow.php:356 +msgid "Message to be played to the person RECEIVING the call, if 'Confirm Calls' is enabled.

To add additional recordings use the \"System Recordings\" MENU to the left" +msgstr "Meddelande att spela upp för den UPPRINGDE om 'BekrÀfta samtal' Àr aktiverat.

För att lÀgga till inspelningar vÀljer du \"Systeminspelningar\" i menyn till vÀnster." + +#: page.findmefollow.php:362 +#: page.findmefollow.php:379 +msgid "Default" +msgstr "Standard" + +#: page.findmefollow.php:373 +msgid "Too-Late Announce:" +msgstr "För-sent meddelande" + +#: page.findmefollow.php:373 +msgid "Message to be played to the person RECEIVING the call, if the call has already been accepted before they push 1.

To add additional recordings use the \"System Recordings\" MENU to the left" +msgstr "Meddelande att spela upp för den UPPRINGDE, om samtalet redan har besvarats av annan part, innan denna uppringda har tryckt 1.

För att lÀgga till inspelningar vÀljer du \"Systeminspelningar\"i menyn till vÀnster." + +#: page.findmefollow.php:391 +msgid "Destination if no answer" +msgstr "Destination vid inget svar" + +#: page.findmefollow.php:399 +msgid "Submit Changes" +msgstr "Spara Àndringar" + +#: page.findmefollow.php:426 +msgid "Invalid Group Number specified" +msgstr "Ogiltigt gruppnummer angivet" + +#: page.findmefollow.php:427 +msgid "Please enter an extension list." +msgstr "Skriv in en anknytningslista" + +#: page.findmefollow.php:428 +msgid "Invalid prefix. Valid characters: a-z A-Z 0-9 : _ -" +msgstr "Ogiltig prefix. GodkÀnda tecken Àr a-z A-Z 0-9 : _ -" + +#: page.findmefollow.php:429 +msgid "Invalid time specified" +msgstr "Ogiltig tid angiven" + +#: page.findmefollow.php:430 +msgid "Time must be between 1 and 60 seconds" +msgstr "Tiden mÃ¥ste vara mellan 1 till 60 sekunder" + +#: page.findmefollow.php:431 +msgid "Only ringall, ringallv2, hunt and the respective -prim versions are supported when confirmation is checked" +msgstr "Endast ringall, ringallv2, hunt och respektive -prim stöds nÀr bekrÀftelse krÀvs" + Index: /modules/branches/2.10/findmefollow/i18n/bg_BG/LC_MESSAGES/findmefollow.po =================================================================== --- /modules/branches/2.10/findmefollow/i18n/bg_BG/LC_MESSAGES/findmefollow.po (revision 7273) +++ /modules/branches/2.10/findmefollow/i18n/bg_BG/LC_MESSAGES/findmefollow.po (revision 7273) @@ -0,0 +1,411 @@ +# 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 , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX v2.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-10-05 23:10+0200\n" +"PO-Revision-Date: 2008-11-08 22:53+0200\n" +"Last-Translator: \n" +"Language-Team: Chavdar Iliev \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Bulgarian\n" +"X-Poedit-Country: BULGARIA\n" +"X-Poedit-SourceCharset: utf-8\n" + +#: functions.inc.php:385 +msgid "Edit Follow Me Settings" +msgstr "РеЎактОрай НастрПйкО Ма СлеЎвай Ме" + +#: functions.inc.php:388 +#: functions.inc.php:392 +msgid "Add Follow Me Settings" +msgstr "ДПбавО НастрПйкО Ма СлеЎвай Ме" + +#: functions.inc.php:420 +#, php-format +msgid "Follow-Me: %s (%s)" +msgstr "СлеЎвай Ме: %s (%s)" + +#: functions.inc.php:438 +#, php-format +msgid "Follow-Me User: %s" +msgstr "СлеЎвай Ме: %s" + +#: install.php:4 +msgid "Findme Follow Toggle" +msgstr "ПревключО СлеЎвай Ме" + +#: install.php:141 +#: uninstall.php:31 +msgid "Cannot connect to Asterisk Manager with " +msgstr "Не ЌПга Ўа се свържа с АстерОск Manager с" + +#: install.php:159 +msgid "Checking if recordings need migration.." +msgstr "ПрПверка ЎалО запОсОте ОЌат МужЎа Пт преЌестваМе.." + +#: install.php:165 +msgid "migrating" +msgstr "преЌестваМе" + +#: install.php:166 +msgid "adding annmsg_id field.." +msgstr "ЎПбаваМе Ма annmsg_id пПле.." + +#: install.php:170 +#: install.php:179 +#: install.php:188 +#: install.php:200 +#: install.php:216 +#: install.php:226 +#: install.php:242 +#: install.php:252 +#: install.php:268 +msgid "fatal error" +msgstr "фаталМа грешка" + +#: install.php:173 +#: install.php:182 +#: install.php:191 +#: install.php:282 +#: install.php:290 +#: install.php:298 +msgid "ok" +msgstr "ok" + +#: install.php:175 +msgid "adding remotealert_id field.." +msgstr "ЎПбаваМе Ма remotealert_id пПле.." + +#: install.php:184 +msgid "adding toolate_id field.." +msgstr "ЎПбаваМе Ма toolate_id пПле.." + +#: install.php:196 +msgid "migrate annmsg to ids.." +msgstr "преЌестваМе къЌ id Ма annmsg.." + +#: install.php:220 +#: install.php:246 +#: install.php:272 +#, php-format +msgid "migrated %s entries" +msgstr "преЌестеМО %s въвежЎаМОя" + +#: install.php:222 +msgid "migrate remotealert to ids.." +msgstr "преЌестваМе къЌ id Ма remotealert.." + +#: install.php:248 +msgid "migrate toolate to ids.." +msgstr "преЌестваМе къЌ id Ма toolate.." + +#: install.php:276 +msgid "dropping annmsg field.." +msgstr "Ð¿Ñ€ÐµÐŒÐ°Ñ +ваМе Ма пПле annmsg.." + +#: install.php:280 +msgid "no annmsg field???" +msgstr "МяЌа annmsg пПле???" + +#: install.php:284 +msgid "dropping remotealert field.." +msgstr "Ð¿Ñ€ÐµÐŒÐ°Ñ +ваМе Ма пПле remotealert.." + +#: install.php:288 +msgid "no remotealert field???" +msgstr "МяЌа remotealert пПле???" + +#: install.php:292 +msgid "dropping toolate field.." +msgstr "Ð¿Ñ€ÐµÐŒÐ°Ñ +ваМе Ма пПле toolate.." + +#: install.php:296 +msgid "no toolate field???" +msgstr "МяЌа toolate пПле???" + +#: install.php:302 +msgid "already migrated" +msgstr "вече са преЌестеМО" + +#: page.findmefollow.php:71 +msgid "Warning! Extension" +msgstr "ВМОЌаМОе! ВътрешМа ЛОМОя" + +#: page.findmefollow.php:71 +msgid "is not allowed for your account" +msgstr "Ме е разрешеМа за вашОя акауМт" + +#: page.findmefollow.php:121 +#: page.findmefollow.php:124 +#: page.findmefollow.php:157 +msgid "Follow Me" +msgstr "СлеЎвай Ме" + +#: page.findmefollow.php:121 +msgid "Choose a user/extension:" +msgstr "Изберете пПтребОтел/вътрешМа лОМОя:" + +#: page.findmefollow.php:124 +msgid "deleted" +msgstr "ОзтрОт" + +#: page.findmefollow.php:154 +msgid "Delete Entries" +msgstr "ИзтрОй ВъвежЎаМетП" + +#: page.findmefollow.php:164 +msgid "User" +msgstr "ППтребОтел" + +#: page.findmefollow.php:168 +msgid "Extension" +msgstr "ВътрешМа ЛОМОя" + +#: page.findmefollow.php:171 +#, php-format +msgid "Edit %s" +msgstr "РеЎактОрай %s" + +#: page.findmefollow.php:171 +#, php-format +msgid "Edit %s %s" +msgstr "РеЎактОрай %s %s" + +#: page.findmefollow.php:180 +msgid "Edit Follow Me" +msgstr "РеЎактОрай СлеЎвай Ме" + +#: page.findmefollow.php:180 +msgid "Add Follow Me" +msgstr "ДПбавО СлеЎвай Ме" + +#: page.findmefollow.php:188 +msgid "group number" +msgstr "МПЌера Ма групата" + +#: page.findmefollow.php:188 +msgid "The number users will dial to ring extensions in this ring group" +msgstr "НПЌерът кПйтП пПтребОтелОте ще ОзбОрат за звъМеМе Ма вътрешМОте лОМОО в тазО група." + +#: page.findmefollow.php:194 +msgid "Disable" +msgstr "ЗабраМО" + +#: page.findmefollow.php:194 +msgid "By default (not checked) any call to this extension will go to this Follow-Me instead, including directory calls by name from IVRs. If checked, calls will go only to the extension.
However, destinations that specify FollowMe will come here.
Checking this box is often used in conjunction with VmX Locater, where you want a call to ring the extension, and then only if the caller chooses to find you do you want it to come here." +msgstr "ПП-пПЎразбОраМе (МеЌаркОраМП) всОчкО ПбажЎаМОя къЌ тазО вътрешМа лОМОя ще ПтОват къЌ тПзО СлеЎвай Ме, включОтелМП ПбажЎаМОя в ЎОректПрОя пП ОЌе Пт IVR. АкП е ЌаркОраМП, ПбажЎаМОята ще ПтОват саЌП къЌ вътрешМата лОМОя.
Обаче, МаправлеМОята кПОтП са МасПчеМО къЌ СлеЎвай Ме ще ОЎват тук.
МаркОраМетП Ма тазО ПтЌетка честП се ОзпПлзва съвЌестМП с ГласПва ППща VmX НаЌерО Ме, прО кПетП Оскате ПбажЎаМетП Ўа звъМО Ма вътрешМата лОМОя, слеЎ кПетП саЌП акП ПбажЎащОят се Озбере Ўа вО МаЌерО ще се Ð¿Ñ€ÐµÑ +върлО тук." + +#: page.findmefollow.php:199 +msgid "Initial Ring Time:" +msgstr "ПървПМачалМП ВреЌе Ма ЗвъМеМе:" + +#: page.findmefollow.php:200 +msgid "This is the number of seconds to ring the primary extension prior to proceeding to the follow-me list. The extension can also be included in the follow-me list. A 0 setting will bypass this." +msgstr "КПлкП секуМЎО Ўа звъМО ПсМПвМата вътрешМа лОМОя преЎО Ўа прПЎължО къЌ слеЎвай Ќе спОсъка. ВътрешМата лОМОя ЌПже същП Ўа се ЎПбавО в слеЎвай Ќе спОсъка. УстаМПвяваМетП Ма 0 ще прескПчО тПва." + +#: page.findmefollow.php:217 +msgid "Ring Strategy:" +msgstr "СтратегОя Ма ЗвъМеМе:" + +#: page.findmefollow.php:219 +msgid "ringallv2" +msgstr "звъМО Ма всОчкО версОя 2" + +#: page.findmefollow.php:219 +msgid "ring primary extension for initial ring time followed by all additional extensions until one answers" +msgstr "ЗвъМО първПМачалМП Ма ПсМПвМата вътрешМа лОМОя пПслеЎваМП Пт звъМеМе Ма всОчкО ЎПстъпМО каМалО ЎПкатП ПтгПвПрят " + +#: page.findmefollow.php:220 +msgid "ringall" +msgstr "звъМО Ма всОчкО" + +#: page.findmefollow.php:220 +msgid "ring all available channels until one answers (default)" +msgstr "ЗвъМО Ма всОчкО ЎПстъпМО каМалО ЎПкатП ПтгПвПрят (пП-пПЎразбОраМе)" + +#: page.findmefollow.php:221 +msgid "hunt" +msgstr "преслеЎваМе" + +#: page.findmefollow.php:221 +msgid "take turns ringing each available extension" +msgstr "ВъртО звъМеМетП пП всОчкО ЎПстъпМО вътрешМО лОМОО" + +#: page.findmefollow.php:222 +msgid "memoryhunt" +msgstr "преслеЎваМе с запПЌМяМе" + +#: page.findmefollow.php:222 +msgid "ring first extension in the list, then ring the 1st and 2nd extension, then ring 1st 2nd and 3rd extension in the list.... etc." +msgstr "ЗвъМО Ма първата свПбПЎМа вътрешМа лОМОя Пт спОсъка, слеЎ тПва Ма 1-та О 2-та, слеЎ тПва Ма 1-та, 2-та О 3-та вътрешМа лОМОя в спОсъка... О т.М." + +#: page.findmefollow.php:223 +msgid "*-prim" +msgstr "*-ПсМПвМа" + +#: page.findmefollow.php:223 +msgid "these modes act as described above. However, if the primary extension (first in list) is occupied, the other extensions will not be rung. If the primary is FreePBX DND, it won't be rung. If the primary is FreePBX CF unconditional, then all will be rung" +msgstr "ТПзО режОЌ е катП ПпОсаМОя пП-гПре. СаЌП че акП ПсМПвМата вътрешМа лОМОя (първата в спОсъка) е заета, ЎругОте вътрешМО лОМОО МяЌа Ўа звъМят. АкП ПсМПвМата е FreePBX DND, МяЌа Ўа звъМО. АкП ПсМПвМата е безуслПвеМ FreePBX CF, тПгава всОчкО ще звъМят" + +#: page.findmefollow.php:224 +msgid "firstavailable" +msgstr "първОя свПбПЎеМ" + +#: page.findmefollow.php:224 +msgid "ring only the first available channel" +msgstr "звъМО саЌП Ма първОя свПбПЎеМ каМал" + +#: page.findmefollow.php:225 +msgid "firstnotonphone" +msgstr "първОя Ме Ма телефПМа" + +#: page.findmefollow.php:225 +msgid "ring only the first channel which is not off hook - ignore CW" +msgstr "звъМО саЌП Ма първОя каМал кПйтП Ме е ПтвПреМ - ОгМПрОра CW" + +#: page.findmefollow.php:244 +msgid "Ring Time (max 60 sec)" +msgstr "ВреЌе Ма ЗвъМеМе (max 60 секуМЎО):" + +#: page.findmefollow.php:246 +msgid "Time in seconds that the phones will ring. For all hunt style ring strategies, this is the time for each iteration of phone(s) that are rung" +msgstr "ВреЌетП в секуМЎО за кПетП телефПМа ще звъМО. За всОчкО тОпПве преслеЎваМе за стратегОО Ма звъМеМе, тПва е вреЌетП за всякП пПвтПреМОе Ма телефПМа(Оте) кПОтП звъМят" + +#: page.findmefollow.php:254 +msgid "Follow-Me List" +msgstr "СлеЎвай Ме СпОсък" + +#: page.findmefollow.php:254 +msgid "List extensions to ring, one per line, or use the Extension Quick Pick below.

You can include an extension on a remote system, or an external number by suffixing a number with a pound (#). ex: 2448089# would dial 2448089 on the appropriate trunk (see Outbound Routing)." +msgstr "СпОсък с вътрешМО лОМОО за звъМеМе, еЎМа Ма лОМОя, ОлО ОзпПлзвайте БързП ИзбОраМе Ма ВътрешМО ЛОМОО пП-ЎПлу за Ўа гО ЎПбавОте тук.

МПжете Ўа включОте вътрешМа лОМОя Пт ПтЎалечеМа сОстеЌа, ОлО въМшеМ МПЌер чрез ЎПбавяМе Ма Маставка '#'. НапрОЌер: 2448089# ще ОзбОра 2448089 Пт съПтветМата въМшМа лОМОя (вОж Ð˜Ð·Ñ +ПЎящО МаршрутО)" + +#: page.findmefollow.php:269 +msgid "Extension Quick Pick" +msgstr "БързП ИзбОраМе Ма ВътрешМО ЛОМОО" + +#: page.findmefollow.php:271 +msgid "Choose an extension to append to the end of the extension list above." +msgstr "Изберете вътрешМа лОМОя за пПставяМе в края Ма спОсъка пП-гПре." + +#: page.findmefollow.php:277 +msgid "(pick extension)" +msgstr "(ОзберО вътрешМа лОМОя)" + +#: page.findmefollow.php:290 +#: page.findmefollow.php:308 +msgid "Announcement:" +msgstr "СъПбщеМОе:" + +#: page.findmefollow.php:290 +msgid "Message to be played to the caller before dialing this group.

To add additional recordings please use the \"System Recordings\" MENU to the left" +msgstr "СъПбщеМОе кПетП ще се възпрПОзвеЎе Ма ПбажЎащОя се преЎО Ўа се Мабере групата.

За Ўа ЎПбавОте ЎПпълМОтелМО запОсО, ЌПля ОзпПлзвайте МеМю \"СОстеЌМО ЗапОсО\" ПтлявП" + +#: page.findmefollow.php:296 +msgid "None" +msgstr "НяЌа" + +#: page.findmefollow.php:308 +msgid "Message to be played to the caller before dialing this group.

You must install and enable the \"Systems Recordings\" Module to edit this option" +msgstr "СъПбщеМОе кПетП ще се възпрПОзвеЎе Ма ПбажЎащОя се преЎО Ўа се Мабере групата.

Трябва Ўа сте ОМсталОралО О разрешОлО МПЎул \"СОстеЌМО ЗапОсО\" за Ўа реЎактОрате тазО ПпцОя" + +#: page.findmefollow.php:319 +msgid "Play Music On Hold?" +msgstr "ПускаМе Ма МузОка прО ЗаЎържаМе?" + +#: page.findmefollow.php:319 +msgid "If you select a Music on Hold class to play, instead of 'Ring', they will hear that instead of Ringing while they are waiting for someone to pick up." +msgstr "АкП Озберете категПрОя Ма МузОка ПрО ЗаЎържаМе за възпрПОзвежЎаМе вЌестП ЗвъМеМе, те ще чуват тПва вЌестП ЗвъМеМе ЎПкатП чакат МякПй Ўа ПгПвПрО." + +#: page.findmefollow.php:325 +msgid "Ring" +msgstr "ЗвъМеМе" + +#: page.findmefollow.php:338 +msgid "CID Name Prefix" +msgstr "ПрефОкс Ма CID ИЌе" + +#: page.findmefollow.php:338 +msgid "You can optionally prefix the Caller ID name when ringing extensions in this group. ie: If you prefix with \"Sales:\", a call from John Doe would display as \"Sales:John Doe\" on the extensions that ring." +msgstr "МПжете Ўа ЎПбавОте префОкс Ма Caller ID ОЌетП кПгатП звъМОте Ма вътрешМОте лОМОО в тазО група. НапрОЌер: ПрефОкс \"ПрПЎажбО:\", ПбажЎаМетП Пт ИваМ ИваМПв ще се пПказва \"ПрПЎажбО:ИваМ ИваМПв\" Ма вътрешМОте лОМОО кПОтП звъМят." + +#: page.findmefollow.php:343 +msgid "Alert Info" +msgstr "ИМфПрЌацОя за СОгМал" + +#: page.findmefollow.php:343 +msgid "You can optionally include an Alert Info which can create distinctive rings on SIP phones." +msgstr "ALERT_INFO ЌПже Ўа се ОзпПлзва за разлОчМП звъМеМе прО МякПО SIP устрПйства." + +#: page.findmefollow.php:348 +msgid "Confirm Calls" +msgstr "ППтвърЎО ОбажЎаМОята" + +#: page.findmefollow.php:348 +msgid "Enable this if you're calling external numbers that need confirmation - eg, a mobile phone may go to voicemail which will pick up the call. Enabling this requires the remote side push 1 on their phone before the call is put through. This feature only works with the ringall/ringall-prim ring strategy" +msgstr "Разрешете акП вО се ПбажЎат въМшМО МПЌера кПОтП се МужЎаят Пт пПтвържЎеМОе - МапрОЌер ЌПбОлеМ телефПМ ЌПже Ўа ПтОЎе къЌ гласПвата пПща кПятП Ўа ПтгПвПрО Ма ПбажЎаМетП. РазрешаваМетП ОзОсква Пт ПтсрещМата страМа Ўа Маберат 1 преЎО ПбажЎаМетП Ўа се ЎПставО. ТазО услуга рабПтО саЌП със звъМО Ма всОчкО/звъМО Ма всОчкО - ПсМПвМа стратегОя." + +#: page.findmefollow.php:356 +msgid "Remote Announce:" +msgstr "КраткП СъПбщеМОе:" + +#: page.findmefollow.php:356 +msgid "Message to be played to the person RECEIVING the call, if 'Confirm Calls' is enabled.

To add additional recordings use the \"System Recordings\" MENU to the left" +msgstr "СъПбщеМОе кПетП ще се възпрПОзвеЎе Ма ПРИЕМАЩИЯ ПбажЎаМетП, акП ППтвърЎО ОбажЎаМОята е ЌаркОраМП.

За Ўа ЎПбавОте ЎПпълМОтелМО запОсО, ЌПля ОзпПлзвайте МеМю \"СОстеЌМО ЗапОсО\" ПтлявП" + +#: page.findmefollow.php:362 +#: page.findmefollow.php:379 +msgid "Default" +msgstr "ПП-ППЎразбОраМе" + +#: page.findmefollow.php:373 +msgid "Too-Late Announce:" +msgstr "ММПгП-КъсМП СъПбщеМОе:" + +#: page.findmefollow.php:373 +msgid "Message to be played to the person RECEIVING the call, if the call has already been accepted before they push 1.

To add additional recordings use the \"System Recordings\" MENU to the left" +msgstr "СъПбщеМОе кПетП ще се възпрПОзвеЎе Ма ПРИЕМАЩИЯ ПбажЎаМетП, акП ПбажЎаМетП вече е бОлП прОетП преЎО те Ўа МатОсМат 1.

За Ўа ЎПбавОте ЎПпълМОтелМО запОсО, ЌПля ОзпПлзвайте МеМю \"СОстеЌМО ЗапОсО\" ПтлявП" + +#: page.findmefollow.php:391 +msgid "Destination if no answer" +msgstr "НаправлеМОе акП Ме е ПтгПвПреМП" + +#: page.findmefollow.php:399 +msgid "Submit Changes" +msgstr "ПрОеЌО ПрПЌеМОте" + +#: page.findmefollow.php:426 +msgid "Invalid Group Number specified" +msgstr "НеправОлМП ПпреЎелеМ НПЌер Ма Група." + +#: page.findmefollow.php:427 +msgid "Please enter an extension list." +msgstr "МПля въвеЎете спОсъка с вътрешМО лОМОО." + +#: page.findmefollow.php:428 +msgid "Invalid prefix. Valid characters: a-z A-Z 0-9 : _ -" +msgstr "НеправОле префОкс. ППзвПлеМОте сОЌвПлО са: a-z A-Z 0-9 : _ -" + +#: page.findmefollow.php:429 +msgid "Invalid time specified" +msgstr "НеправОлМП въвеЎеМП вреЌе" + +#: page.findmefollow.php:430 +msgid "Time must be between 1 and 60 seconds" +msgstr "Трябва Ўа е ЌежЎу 1 О 60 секуМЎО" + +#: page.findmefollow.php:431 +msgid "Only ringall, ringallv2, hunt and the respective -prim versions are supported when confirmation is checked" +msgstr "СаЌП ringall, ringallv2, hunt О съПтветМОте - ПсМПвМа версОО се пПЎЎържат кПгатП е ЌаркОраМП пПтвържЎеМОетП" + Index: /modules/branches/2.10/findmefollow/i18n/he_IL/LC_MESSAGES/findmefollow.po =================================================================== --- /modules/branches/2.10/findmefollow/i18n/he_IL/LC_MESSAGES/findmefollow.po (revision 3441) +++ /modules/branches/2.10/findmefollow/i18n/he_IL/LC_MESSAGES/findmefollow.po (revision 3441) @@ -0,0 +1,209 @@ +# Hebrew version for Find Me Follow FreePBX Module. +# Copyright (C) 2006 +# This file is distributed under the same license as the PACKAGE package. +# Shimi , 2006. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: FreePBX 2.2.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2006-10-17 17:20+0300\n" +"PO-Revision-Date: 2006-10-17 17:30+0300\n" +"Last-Translator: Shimi \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: page.findmefollow.php:65 +msgid "Warning! Extension" +msgstr "אזה׹ה! שלוחה" + +#: page.findmefollow.php:65 +msgid "is not allowed for your account" +msgstr "אינה מוךשית עבוך חשבונך" + +#: page.findmefollow.php:101 +msgid "$gresult[1]" +msgstr "" + +#: page.findmefollow.php:112 page.findmefollow.php:115 +#: page.findmefollow.php:144 +msgid "Follow Me" +msgstr "עקוב אח׹י" + +#: page.findmefollow.php:115 +msgid "deleted" +msgstr "נמחק" + +#: page.findmefollow.php:141 +msgid "Delete Entries" +msgstr "מחק ךשומות" + +#: page.findmefollow.php:166 +msgid "Edit Follow Me" +msgstr "עךוך עקוב אח׹י" + +#: page.findmefollow.php:166 +msgid "Add Follow Me" +msgstr "הוסף עקוב אח׹י" + +#: page.findmefollow.php:174 +msgid "group number" +msgstr "מס׀ך קבושה" + +#: page.findmefollow.php:174 +msgid "The number users will dial to ring extensions in this ring group" +msgstr "המס׀ך שאליו משתמשים יחייגו כדי לחייג לשלוחות בקבו׊ת שלשול זו" + +#: page.findmefollow.php:180 +msgid "Initial Ring Time:" +msgstr "זמן שלשול ךאשוני:" + +#: page.findmefollow.php:181 +msgid "" +"This is the number of seconds to ring the primary extension prior to " +"proceeding to the follow-me list. The extension can also be included in the " +"follow-me list. A 0 setting will bypass this." +msgstr "מס׀ך השניות שיש לשלשל לשלוחה הךאשית ל׀ני שממשיכים לךשימת העקוב-אח׹י. השלוחה יכולה להיכלל גם בךשימת העקוב-אח׹י. הגדךת 0 תעקוף זאת." + +#: page.findmefollow.php:199 +msgid "ring strategy:" +msgstr "אסטךטגיית שלשול:" + +#: page.findmefollow.php:201 +msgid "ringall" +msgstr "שלשל בכל השלוחות" + +#: page.findmefollow.php:201 +msgid "ring all available channels until one answers (default)" +msgstr "שלשל בכל העךו׊ים הזמינים עד שמישהו יענה (בךיךת מחדל)" + +#: page.findmefollow.php:202 +msgid "hunt" +msgstr "שיד" + +#: page.findmefollow.php:202 +msgid "take turns ringing each available extension" +msgstr "עבוך בתוך ושלשל בכל שלוחה זמינה" + +#: page.findmefollow.php:203 +msgid "memoryhunt" +msgstr "שיד עם זיכ׹ון" + +#: page.findmefollow.php:203 +msgid "" +"ring first extension in the list, then ring the 1st and 2nd extension, then " +"ring 1st 2nd and 3rd extension in the list.... etc." +msgstr "שלשל לשלוחה הךאשונה בךשימה, לאח׹ מכן שלשל לךאשונה ולשנייה, לאח׹ מכן לךאשונה לשנייה ולשלישית, וכך הלאה." + +#: page.findmefollow.php:204 +msgid "*-prim" +msgstr "" + +#: page.findmefollow.php:204 +msgid "" +"these modes act as described above. However, if the primary extension (first " +"in list) is occupied, the other extensions will not be rung. If the primary " +"is freepbx DND, it won't be run. If the primary is freepbx CF unconditional, " +"then all will be rung" +msgstr "משבים אלו יתנהגו כמתואך לעיל. אך, אם השלוחה הךאשית (הךאשונה בךשימה) נמ׊את בשימוש, לא יהיה שלשול לשלוחות האחךות. אם השלוחה הךאשית מוגדךת במשב נא-לא-לה׀ךיע, כנ\"ל. אם השלוחה הךאשית מוגדךת במעךכת במשב עקוב-אח׹י-בכל-משב, אזי כל השלוחות ת׊ל׊לנה." + +#: page.findmefollow.php:220 +msgid "Alert Info" +msgstr "מידע התךאה" + +#: page.findmefollow.php:224 +msgid "Confirm Calls" +msgstr "אשך שיחות" + +#: page.findmefollow.php:225 +msgid "System Recordings not installed. Option Disabled" +msgstr "מודול הקלטות מעךכת לא מותקן. הא׀שךות מבוטלת" + +#: page.findmefollow.php:231 +msgid "Remote Announce:" +msgstr "הכ׹זה למ׹וחק:" + +#: page.findmefollow.php:231 +msgid "" +"Message to be played to the person RECEIVING the call, if 'Confirm Calls' is " +"enabled.

To add additional recordings use the \"System Recordings\" " +"MENU to the left" +msgstr "הודעה אשך תושמע לאדם שמקבל את השיחה, אם הא׀שךות 'אשך שיחות' מו׀עלת.

כדי להוסיף הקלטות נוס׀ות, השתמש בת׀ךיט \"הקלטות מעךכת\" שב׊ד שמאל" + +#: page.findmefollow.php:237 page.findmefollow.php:254 +#: page.findmefollow.php:298 +msgid "None" +msgstr "אין" + +#: page.findmefollow.php:248 +msgid "Too-Late Announce:" +msgstr "הכךזת יותך-מדי-מאוח׹:" + +#: page.findmefollow.php:248 +msgid "" +"Message to be played to the person RECEIVING the call, if the call has " +"already been accepted before they push 1.

To add additional " +"recordings use the \"System Recordings\" MENU to the left" +msgstr "הודעה שתושמע לאדם שמקבל את השיחה, אם השיחה כב׹ התקבלה ל׀ני שהוא לחץ 1.

כדי להוסיף הקלטות נוס׀ות, השתמש בת׀ךיט \"הקלטות מעךכת\" שב׊ד שמאל" + +#: page.findmefollow.php:266 +msgid "extension list" +msgstr "ךשימת שלוחות" + +#: page.findmefollow.php:266 +msgid "" +"List extensions to ring, one per line.

You can include an extension " +"on a remote system, or an external number by suffixing a number with a pound " +"(#). ex: 2448089# would dial 2448089 on the appropriate trunk (see " +"Outbound Routing)." +msgstr "ךשימת שלוחות שיש לשלשל אליהן, אחת בשוךה.

אתה יכול לכלול שלוחה על מעךכת מךוחקת, או מס׀ך חישוני, על ידי הקדמת המס׀ך בסולמית (#). לדוגמא: #2448089 יחייג למס׀ך 2448089 ד׹ך מסוף הישיאה המתאים (׹אה ניתוב החושה)" + +#: page.findmefollow.php:281 +msgid "CID name prefix" +msgstr "קידומת שם זיהוי שיחות" + +#: page.findmefollow.php:287 +msgid "ring time (max 60 sec)" +msgstr "זמן שלשול (מקס 60 שניות)" + +#: page.findmefollow.php:292 page.findmefollow.php:310 +msgid "announcement:" +msgstr "הכ׹זה:" + +#: page.findmefollow.php:292 +msgid "" +"Message to be played to the caller before dialing this group.

To add " +"additional recordings please use the \"System Recordings\" MENU to the left" +msgstr "הודעה שתושמע למתקשך ל׀ני החיוג לקבושה זו.

כדי להוסיף הקלטות נוס׀ות, אנא השתמש בת׀ךיט \"הודעות מעךכת\" אשך בשד שמאל" + +#: page.findmefollow.php:310 +msgid "" +"Message to be played to the caller before dialing this group.

You " +"must install and enable the \"Systems Recordings\" Module to edit this option" +msgstr "הודעה אשך תושמע למתקשך ל׀ני החיוג לקבושה זו.

אתה חייב להתקין ולה׀עיל את המודול \"הקלטות מעךכת\" כדי לעךוך א׀שךות זו" + +#: page.findmefollow.php:320 +msgid "Play Music On Hold?" +msgstr "נגן מוסיקת המתנה?" + +#: page.findmefollow.php:320 +msgid "" +"If you select a Music on Hold class to play, instead of 'Ring', they will " +"hear that instead of Ringing while they are waiting for someone to pick up. " +"Note this DOES NOT WORK with call confirmation, due to limitations of " +"Asterisk" +msgstr "אם תבחך סוג מוסיקה לנגינה, במקום 'שלשול', הם ישמעו מוסיקה זו במקום שלשול בזמן שהם ממתינים שמישהו י׹ים את הטל׀ון. שים לב שזה לא עובד עם אישוך שיחות, בגלל מגבלות של אסטךיסק" + +#: page.findmefollow.php:326 +msgid "Ring" +msgstr "שלשול" + +#: page.findmefollow.php:338 +msgid "Destination if no answer" +msgstr "יעד אם אין מענה" + +#: install.php:67 uninstall.php:31 +msgid "Cannot connect to Asterisk Manager with " +msgstr "לא משליח להתחבך למנהל האסטךיסק עם " Index: /modules/branches/2.10/findmefollow/i18n/zh_CN/LC_MESSAGES/findmefollow.po =================================================================== --- /modules/branches/2.10/findmefollow/i18n/zh_CN/LC_MESSAGES/findmefollow.po (revision 7440) +++ /modules/branches/2.10/findmefollow/i18n/zh_CN/LC_MESSAGES/findmefollow.po (revision 7440) @@ -0,0 +1,442 @@ +# 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 , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX 2.5 Chinese Translation\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-11-08 18:34+0100\n" +"PO-Revision-Date: 2009-01-31 11:58+0800\n" +"Last-Translator: 呚埁晟 \n" +"Language-Team: EdwardBadBoy \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Chinese\n" +"X-Poedit-Country: CHINA\n" +"X-Poedit-SourceCharset: utf-8\n" + +#: functions.inc.php:385 +msgid "Edit Follow Me Settings" +msgstr "猖蟑“跟我来”盞å +³è®Ÿçœ®" + +#: functions.inc.php:388 +#: functions.inc.php:392 +msgid "Add Follow Me Settings" +msgstr "添加“跟我来”盞å +³è®Ÿçœ®" + +#: functions.inc.php:420 +#, php-format +msgid "Follow-Me: %s (%s)" +msgstr "“跟我来”列衚%s (%s)" + +#: functions.inc.php:438 +#, php-format +msgid "Follow-Me User: %s" +msgstr "“跟我来”甚户%s" + +#: install.php:4 +msgid "Findme Follow Toggle" +msgstr "切换“跟我来”" + +#: install.php:141 +#: uninstall.php:31 +msgid "Cannot connect to Asterisk Manager with " +msgstr "无法连接到Asterisk管理噚" + +#: install.php:159 +msgid "Checking if recordings need migration.." +msgstr "正圚检查圕音是吊需芁迁移。。。" + +#: install.php:165 +msgid "migrating" +msgstr "正圚迁移" + +#: install.php:166 +msgid "adding annmsg_id field.." +msgstr "正圚添加annmsg_id字段。。。" + +#: install.php:170 +#: install.php:179 +#: install.php:188 +#: install.php:200 +#: install.php:216 +#: install.php:226 +#: install.php:242 +#: install.php:252 +#: install.php:268 +msgid "fatal error" +msgstr "臎呜错误" + +#: install.php:173 +#: install.php:182 +#: install.php:191 +#: install.php:282 +#: install.php:290 +#: install.php:298 +msgid "ok" +msgstr "完成" + +#: install.php:175 +msgid "adding remotealert_id field.." +msgstr "正圚添加remotealert_id字段。。。" + +#: install.php:184 +msgid "adding toolate_id field.." +msgstr "正圚添加toolate_id字段。。。" + +#: install.php:196 +msgid "migrate annmsg to ids.." +msgstr "正圚把annmsg迁移到ids。。。" + +#: install.php:220 +#: install.php:246 +#: install.php:272 +#, php-format +msgid "migrated %s entries" +msgstr "迁移了%s䞪项目" + +#: install.php:222 +msgid "migrate remotealert to ids.." +msgstr "正圚将remotealert迁移到ids。。。" + +#: install.php:248 +msgid "migrate toolate to ids.." +msgstr "正圚将toolate迁移到ids。。。" + +#: install.php:276 +msgid "dropping annmsg field.." +msgstr "正圚删陀annmsg字段。。。" + +#: install.php:280 +msgid "no annmsg field???" +msgstr "annmsg䞍存圚" + +#: install.php:284 +msgid "dropping remotealert field.." +msgstr "正圚删陀remotealert字段。。。" + +#: install.php:288 +msgid "no remotealert field???" +msgstr "remotealert字段䞍存圚" + +#: install.php:292 +msgid "dropping toolate field.." +msgstr "正圚删陀toolate字段。。。" + +#: install.php:296 +msgid "no toolate field???" +msgstr "toolate字段䞍存圚" + +#: install.php:302 +msgid "already migrated" +msgstr "已经迁移过了" + +#: page.findmefollow.php:71 +msgid "Warning! Extension" +msgstr "譊告䜠的垐户无法䜿甚分机" + +#: page.findmefollow.php:71 +msgid "is not allowed for your account" +msgstr " " + +#: page.findmefollow.php:121 +#: page.findmefollow.php:124 +#: page.findmefollow.php:157 +msgid "Follow Me" +msgstr "跟我来" + +#: page.findmefollow.php:121 +msgid "Choose a user/extension:" +msgstr "选择䞀䞪甚户/分机" + +#: page.findmefollow.php:124 +msgid "deleted" +msgstr "以删陀" + +#: page.findmefollow.php:154 +msgid "Delete Entries" +msgstr "删陀项目" + +#: page.findmefollow.php:164 +msgid "User" +msgstr "甚户" + +#: page.findmefollow.php:168 +msgid "Extension" +msgstr "譊告䜠的垐户无法䜿甚分机" + +#: page.findmefollow.php:171 +#, php-format +msgid "Edit %s" +msgstr "猖蟑 %s" + +#: page.findmefollow.php:171 +#, php-format +msgid "Edit %s %s" +msgstr "猖蟑 %s %s" + +#: page.findmefollow.php:180 +msgid "Edit Follow Me" +msgstr "猖蟑“跟我来”" + +#: page.findmefollow.php:180 +msgid "Add Follow Me" +msgstr "添加“跟我来”" + +#: page.findmefollow.php:188 +msgid "group number" +msgstr "组号码" + +#: page.findmefollow.php:188 +msgid "The number users will dial to ring extensions in this ring group" +msgstr "甚户拚打歀号码以呌叫这䞪拚号小组䞭的分机" + +#: page.findmefollow.php:194 +msgid "Disable" +msgstr "穁甹" + +#: page.findmefollow.php:194 +msgid "By default (not checked) any call to this extension will go to this Follow-Me instead, including directory calls by name from IVRs. If checked, calls will go only to the extension.
However, destinations that specify FollowMe will come here.
Checking this box is often used in conjunction with VmX Locater, where you want a call to ring the extension, and then only if the caller chooses to find you do you want it to come here." +msgstr "åœšé»˜è®€æƒ +å†µäž‹ïŒˆåŠ‚æžœäžé’©é€‰æ­€é¡¹ïŒ‰ïŒŒæ‰€æœ‰åˆ°è¿™äžªåˆ†æœºçš„å‘Œå«ïŒˆåŒ +括IVR按目圕䞭的名字蜬过来的呌叫郜䌚蜬到“跟我来”。劂果钩选了歀项呌叫只䌚蜬到分机。
然而以“跟我来”䜜䞺目的地的呌叫䌚被蜬到这里。
这䞪讟眮垞垞䞎VmXå®šäœå™šäž€èµ·äœ¿ç”šã€‚è¿™ç§æƒ +况䞋呌叫郜䌚打到分机去只有对方明确指定芁扟䜠才䌚被匕富到这里。" + +#: page.findmefollow.php:199 +msgid "Initial Ring Time:" +msgstr "初始振铃时闎" + +#: page.findmefollow.php:200 +msgid "This is the number of seconds to ring the primary extension prior to proceeding to the follow-me list. The extension can also be included in the follow-me list. A 0 setting will bypass this." +msgstr "è¿™æ˜¯åœšèœ¬åˆ°â€œè·Ÿæˆ‘æ¥â€åˆ—è¡šä¹‹å‰ïŒŒäž»åˆ†æœºå“é“ƒçš„ç§’æ•°ã€‚åˆ†æœºä¹Ÿå¯ä»¥è¢«åŒ +含圚“跟我来”列衚里。讟眮䞺0将応略歀功胜。" + +#: page.findmefollow.php:217 +msgid "Ring Strategy:" +msgstr "振铃策略" + +#: page.findmefollow.php:219 +msgid "ringallv2" +msgstr "å +šéƒšå“é“ƒ2" + +#: page.findmefollow.php:219 +msgid "ring primary extension for initial ring time followed by all additional extensions until one answers" +msgstr "驖å +ˆäœ¿äž»åˆ†æœºå“é“ƒïŒŒè¶ +过初试振铃时闎后所有的附加分机响铃盎到å +¶äž­äž€äžªæŽ¥å¬" + +#: page.findmefollow.php:220 +msgid "ringall" +msgstr "å +šéƒšå“é“ƒ" + +#: page.findmefollow.php:220 +msgid "ring all available channels until one answers (default)" +msgstr "å +šéƒšå¯ç”šé¢‘道郜响铃盎到å +¶äž­äž€äžªæŽ¥å¬ïŒˆé»˜è®€è®Ÿçœ®ïŒ‰" + +#: page.findmefollow.php:221 +msgid "hunt" +msgstr "搜寻" + +#: page.findmefollow.php:221 +msgid "take turns ringing each available extension" +msgstr "圚可甚的分机䞊蜮流响铃" + +#: page.findmefollow.php:222 +msgid "memoryhunt" +msgstr "记忆性搜寻" + +#: page.findmefollow.php:222 +msgid "ring first extension in the list, then ring the 1st and 2nd extension, then ring 1st 2nd and 3rd extension in the list.... etc." +msgstr "驖å +ˆäœ¿åˆ—衚䞭第䞀䞪分机响铃然后是第䞀䞪和第二䞪响接着是第䞀、二、䞉䞪响。。。以次类掚。" + +#: page.findmefollow.php:223 +msgid "*-prim" +msgstr "䟝从䞻分机策略名-prim" + +#: page.findmefollow.php:223 +msgid "these modes act as described above. However, if the primary extension (first in list) is occupied, the other extensions will not be rung. If the primary is FreePBX DND, it won't be rung. If the primary is FreePBX CF unconditional, then all will be rung" +msgstr "这些暡匏按䞊述的方匏工䜜。然而劂果䞻分机列衚䞭的第䞀䞪占线å +¶ä»–的分机就䞍䌚响铃。劂果䞻分机是讟眮了å +æ‰“扰它就䞍䌚振铃。劂果䞻分机讟眮了无条件蜬移呌叫那么所有的分机䌚响铃" + +#: page.findmefollow.php:224 +msgid "firstavailable" +msgstr "銖䞪可甚频道" + +#: page.findmefollow.php:224 +msgid "ring only the first available channel" +msgstr "只圚第䞀䞪可甚的频道响铃" + +#: page.findmefollow.php:225 +msgid "firstnotonphone" +msgstr "銖䞪未犻钩频道" + +#: page.findmefollow.php:225 +msgid "ring only the first channel which is not off hook - ignore CW" +msgstr "åªåœšç¬¬äž€äžªäžæ˜¯çŠ»é’©çŠ¶æ€äž‹çš„é¢‘é“å“é“ƒâ€”â€”å¿œç•¥å‘Œå«ç­‰åŸ +" + +#: page.findmefollow.php:244 +msgid "Ring Time (max 60 sec)" +msgstr "振铃时闎最倚60秒" + +#: page.findmefollow.php:246 +msgid "Time in seconds that the phones will ring. For all hunt style ring strategies, this is the time for each iteration of phone(s) that are rung" +msgstr "电话响铃的秒数。对于所有的搜寻匏的响铃策略这是每次搜寻出的电话的响铃的时闎。" + +#: page.findmefollow.php:254 +msgid "Follow-Me List" +msgstr "“跟我来”列衚" + +#: page.findmefollow.php:254 +msgid "List extensions to ring, one per line, or use the Extension Quick Pick below.

You can include an extension on a remote system, or an external number by suffixing a number with a pound (#). ex: 2448089# would dial 2448089 on the appropriate trunk (see Outbound Routing)." +msgstr "åˆ—å‡ºäº†èŠå“é“ƒçš„åˆ†æœºïŒŒäž€è¡Œäž€äžªïŒŒæˆ–è€ +䜿甚䞋面的“快速分机选取”功胜。

äœ å¯ä»¥åŒ +å«äž€äžªè¿œçš‹ç³»ç»ŸäžŠçš„åˆ†æœºïŒŒæˆ–è€ +圚分机号之后添加井号#ïŒ‰ä»¥åŒ +含䞀䞪倖郚分机。䟋劂2448089#䌚圚合适的䞭继可参考出局线路䞊拚打2448089。" + +#: page.findmefollow.php:269 +msgid "Extension Quick Pick" +msgstr "快速分机选取" + +#: page.findmefollow.php:271 +msgid "Choose an extension to append to the end of the extension list above." +msgstr "选择䞀䞪分机以添加到䞊面的分机列衚的末尟。" + +#: page.findmefollow.php:277 +msgid "(pick extension)" +msgstr "选取分机" + +#: page.findmefollow.php:290 +#: page.findmefollow.php:308 +msgid "Announcement:" +msgstr "通告" + +#: page.findmefollow.php:290 +msgid "Message to be played to the caller before dialing this group.

To add additional recordings please use the \"System Recordings\" MENU to the left" +msgstr "圚拚打这䞪小组之前芁播攟给䞻叫的消息。

芁添加额倖的圕音请䜿甚巊蟹的“系统圕音”菜单" + +#: page.findmefollow.php:296 +msgid "None" +msgstr "无" + +#: page.findmefollow.php:308 +msgid "Message to be played to the caller before dialing this group.

You must install and enable the \"Systems Recordings\" Module to edit this option" +msgstr "圚拚打这䞪小组之前芁播攟给䞻叫的消息。

è¯·å®‰è£ +并启甚“系统圕音”暡块以猖蟑这䞪选项" + +#: page.findmefollow.php:319 +msgid "Play Music On Hold?" +msgstr "æ’­æ”Ÿç­‰åŸ +音乐" + +#: page.findmefollow.php:319 +msgid "If you select a Music on Hold class to play, instead of 'Ring', they will hear that instead of Ringing while they are waiting for someone to pick up." +msgstr "åŠ‚æžœäœ é€‰æ‹©äº†äž€äžªç­‰åŸ +éŸ³ä¹ç±»åˆ«ïŒŒè€Œäžæ˜¯â€œæŒ¯é“ƒâ€ïŒŒå‘Œå«è€ +åœšç­‰åŸ +接听的时候䌚听到音乐。" + +#: page.findmefollow.php:325 +msgid "Ring" +msgstr "振铃" + +#: page.findmefollow.php:338 +msgid "CID Name Prefix" +msgstr "䞻叫ID名的前猀" + +#: page.findmefollow.php:338 +msgid "You can optionally prefix the Caller ID name when ringing extensions in this group. ie: If you prefix with \"Sales:\", a call from John Doe would display as \"Sales:John Doe\" on the extensions that ring." +msgstr "圚䞺这䞪小组的分机响铃时䜠可以䞺䞻叫ID名字添加可选的前猀。䟋劂劂果䜠添加了“销售”前猀从小王打来的电话圚响铃的分机䞊䌚星瀺䞺“销售小王”。" + +#: page.findmefollow.php:343 +msgid "Alert Info" +msgstr "譊告信息" + +#: page.findmefollow.php:343 +msgid "You can optionally include an Alert Info which can create distinctive rings on SIP phones." +msgstr "äœ å¯ä»¥åŒ +含䞀䞪可选的譊告信息甚来䞺SIP电话产生独特的铃声。" + +#: page.findmefollow.php:348 +msgid "Confirm Calls" +msgstr "呌叫确讀" + +#: page.findmefollow.php:348 +msgid "Enable this if you're calling external numbers that need confirmation - eg, a mobile phone may go to voicemail which will pick up the call. Enabling this requires the remote side push 1 on their phone before the call is put through. This feature only works with the ringall/ringall-prim ring strategy" +msgstr "劂果䜠芁呌叫需芁确讀的倖郚号码时就启甚歀项——比劂䞀䞪移劚电话䌚被蜬移而由语音邮箱接听。芁启甚这䞪选项需芁远端圚接通前圚电话䞊按䞋1。这䞪功胜只䌚圚 å +šéƒšå“é“ƒ/å +šéƒšå“é“ƒå¹¶äŸä»Žäž»åˆ†æœº 类的策略䞋起䜜甚。" + +#: page.findmefollow.php:356 +msgid "Remote Announce:" +msgstr "远皋å +¬å‘ŠïŒš" + +#: page.findmefollow.php:356 +msgid "Message to be played to the person RECEIVING the call, if 'Confirm Calls' is enabled.

To add additional recordings use the \"System Recordings\" MENU to the left" +msgstr "劂果“呌叫确讀”被启甚这是对接听呌叫的人播攟的消息。

芁添加额倖的圕音请䜿甚巊蟹的“系统圕音”菜单" + +#: page.findmefollow.php:362 +#: page.findmefollow.php:379 +msgid "Default" +msgstr "默讀" + +#: page.findmefollow.php:373 +msgid "Too-Late Announce:" +msgstr "按键倪晚å +¬å‘ŠïŒš" + +#: page.findmefollow.php:373 +msgid "Message to be played to the person RECEIVING the call, if the call has already been accepted before they push 1.

To add additional recordings use the \"System Recordings\" MENU to the left" +msgstr "劂果呌叫被接听华还没来埗及按䞋1é”®ïŒŒè¿™æ˜¯èŠå¯¹æŽ¥å¬è€ +播攟的消息

芁添加而倖的圕音请䜿甚巊蟹的“系统圕音”菜单" + +#: page.findmefollow.php:391 +msgid "Destination if no answer" +msgstr "无人接听时的目的地" + +#: page.findmefollow.php:399 +msgid "Submit Changes" +msgstr "提亀曎改" + +#: page.findmefollow.php:426 +msgid "Invalid Group Number specified" +msgstr "指定了无效的组号码" + +#: page.findmefollow.php:427 +msgid "Please enter an extension list." +msgstr "请蟓å +¥äž€äžªåˆ†æœºåˆ—衚。" + +#: page.findmefollow.php:428 +msgid "Invalid prefix. Valid characters: a-z A-Z 0-9 : _ -" +msgstr "无效的前猀。有效的字笊䞺a到z、A到Z、0到9、䞋划线_和减号-" + +#: page.findmefollow.php:429 +msgid "Invalid time specified" +msgstr "指定了无效的时闎" + +#: page.findmefollow.php:430 +msgid "Time must be between 1 and 60 seconds" +msgstr "æ—¶é—Žå¿ +须圚1到60秒之闎" + +#: page.findmefollow.php:431 +msgid "Only ringall, ringallv2, hunt and the respective -prim versions are supported when confirmation is checked" +msgstr "若“确讀”选项被启甚就只支持å +šéƒšå“é“ƒã€å +šéƒšå“é“ƒ2、搜寻和各自的䞻分机䟝从策略。" + Index: /modules/branches/2.10/findmefollow/i18n/findmefollow.pot =================================================================== --- /modules/branches/2.10/findmefollow/i18n/findmefollow.pot (revision 11797) +++ /modules/branches/2.10/findmefollow/i18n/findmefollow.pot (revision 11797) @@ -0,0 +1,416 @@ +# This file is part of FreePBX. +# +# FreePBX 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. +# +# FreePBX 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 FreePBX. If not, see . +# +# FreePBX language template for findmefollow +# Copyright (C) 2008, 2009, 2010, 2011 Bandwith.com +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-10 22:46+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Follow Me" +msgstr "" + +msgid "Inbound Call Control" +msgstr "" + +msgid "" +"Much like a ring group, but works on individual extensions. When someone " +"calls the extension, it can be setup to ring for a number of seconds before " +"trying to ring other extensions and/or external numbers, or to ring all at " +"once, or in other various 'hunt' configurations. Most commonly used to ring " +"someone's cell phone if they don't answer their extension." +msgstr "" + +msgid "Force Follow Me" +msgstr "" + +msgid "Edit Follow Me Settings" +msgstr "" + +msgid "Add Follow Me Settings" +msgstr "" + +#, php-format +msgid "Follow-Me: %s (%s)" +msgstr "" + +#, php-format +msgid "Follow-Me User: %s" +msgstr "" + +msgid "Findme Follow Toggle" +msgstr "" + +msgid "Cannot connect to Asterisk Manager with " +msgstr "" + +msgid "Checking if recordings need migration.." +msgstr "" + +msgid "migrating" +msgstr "" + +msgid "adding annmsg_id field.." +msgstr "" + +msgid "fatal error" +msgstr "" + +msgid "ok" +msgstr "" + +msgid "adding remotealert_id field.." +msgstr "" + +msgid "adding toolate_id field.." +msgstr "" + +msgid "migrate annmsg to ids.." +msgstr "" + +#, php-format +msgid "migrated %s entries" +msgstr "" + +msgid "migrate remotealert to ids.." +msgstr "" + +msgid "migrate toolate to ids.." +msgstr "" + +msgid "dropping annmsg field.." +msgstr "" + +msgid "no annmsg field???" +msgstr "" + +msgid "dropping remotealert field.." +msgstr "" + +msgid "no remotealert field???" +msgstr "" + +msgid "dropping toolate field.." +msgstr "" + +msgid "no toolate field???" +msgstr "" + +msgid "already migrated" +msgstr "" + +msgid "Warning! Extension" +msgstr "" + +msgid "is not allowed for your account" +msgstr "" + +msgid "Choose a user/extension:" +msgstr "" + +msgid "deleted" +msgstr "" + +msgid "Delete Entries" +msgstr "" + +msgid "User" +msgstr "" + +msgid "Extension" +msgstr "" + +#, php-format +msgid "Edit %s" +msgstr "" + +#, php-format +msgid "Edit %s %s" +msgstr "" + +msgid "Edit Follow Me" +msgstr "" + +msgid "Add Follow Me" +msgstr "" + +msgid "group number" +msgstr "" + +msgid "The number users will dial to ring extensions in this ring group" +msgstr "" + +msgid "Disable" +msgstr "" + +msgid "" +"By default (not checked) any call to this extension will go to this Follow-" +"Me instead, including directory calls by name from IVRs. If checked, calls " +"will go only to the extension.
However, destinations that specify " +"FollowMe will come here.
Checking this box is often used in conjunction " +"with VmX Locater, where you want a call to ring the extension, and then only " +"if the caller chooses to find you do you want it to come here." +msgstr "" + +msgid "Initial Ring Time:" +msgstr "" + +msgid "" +"This is the number of seconds to ring the primary extension prior to " +"proceeding to the follow-me list. The extension can also be included in the " +"follow-me list. A 0 setting will bypass this." +msgstr "" + +msgid "Ring Strategy:" +msgstr "" + +msgid "ringallv2" +msgstr "" + +msgid "" +"ring primary extension for initial ring time followed by all additional " +"extensions until one answers" +msgstr "" + +msgid "ringall" +msgstr "" + +msgid "ring all available channels until one answers (default)" +msgstr "" + +msgid "hunt" +msgstr "" + +msgid "take turns ringing each available extension" +msgstr "" + +msgid "memoryhunt" +msgstr "" + +msgid "" +"ring first extension in the list, then ring the 1st and 2nd extension, then " +"ring 1st 2nd and 3rd extension in the list.... etc." +msgstr "" + +msgid "*-prim" +msgstr "" + +msgid "" +"these modes act as described above. However, if the primary extension (first " +"in list) is occupied, the other extensions will not be rung. If the primary " +"is FreePBX DND, it won't be rung. If the primary is FreePBX CF " +"unconditional, then all will be rung" +msgstr "" + +msgid "firstavailable" +msgstr "" + +msgid "ring only the first available channel" +msgstr "" + +msgid "firstnotonphone" +msgstr "" + +msgid "ring only the first channel which is not off hook - ignore CW" +msgstr "" + +msgid "Ring Time (max 60 sec)" +msgstr "" + +msgid "" +"Time in seconds that the phones will ring. For all hunt style ring " +"strategies, this is the time for each iteration of phone(s) that are rung" +msgstr "" + +msgid "Follow-Me List" +msgstr "" + +msgid "" +"List extensions to ring, one per line, or use the Extension Quick Pick below." +"

You can include an extension on a remote system, or an external " +"number by suffixing a number with a pound (#). ex: 2448089# would dial " +"2448089 on the appropriate trunk (see Outbound Routing)." +msgstr "" + +msgid "Extension Quick Pick" +msgstr "" + +msgid "Choose an extension to append to the end of the extension list above." +msgstr "" + +msgid "(pick extension)" +msgstr "" + +msgid "Announcement:" +msgstr "" + +msgid "" +"Message to be played to the caller before dialing this group.

To add " +"additional recordings please use the \"System Recordings\" MENU to the left" +msgstr "" + +msgid "None" +msgstr "" + +msgid "" +"Message to be played to the caller before dialing this group.

You " +"must install and enable the \"Systems Recordings\" Module to edit this option" +msgstr "" + +msgid "Play Music On Hold?" +msgstr "" + +msgid "" +"If you select a Music on Hold class to play, instead of 'Ring', they will " +"hear that instead of Ringing while they are waiting for someone to pick up." +msgstr "" + +msgid "Ring" +msgstr "" + +msgid "CID Name Prefix" +msgstr "" + +msgid "" +"You can optionally prefix the Caller ID name when ringing extensions in this " +"group. ie: If you prefix with \"Sales:\", a call from John Doe would display " +"as \"Sales:John Doe\" on the extensions that ring." +msgstr "" + +msgid "Alert Info" +msgstr "" + +msgid "" +"You can optionally include an Alert Info which can create distinctive rings " +"on SIP phones." +msgstr "" + +msgid "Call Confirmation Configuration" +msgstr "" + +msgid "Confirm Calls" +msgstr "" + +msgid "" +"Enable this if you're calling external numbers that need confirmation - eg, " +"a mobile phone may go to voicemail which will pick up the call. Enabling " +"this requires the remote side push 1 on their phone before the call is put " +"through. This feature only works with the ringall/ringall-prim ring strategy" +msgstr "" + +msgid "Remote Announce:" +msgstr "" + +msgid "" +"Message to be played to the person RECEIVING the call, if 'Confirm Calls' is " +"enabled.

To add additional recordings use the \"System Recordings\" " +"MENU to the left" +msgstr "" + +msgid "Default" +msgstr "" + +msgid "Too-Late Announce:" +msgstr "" + +msgid "" +"Message to be played to the person RECEIVING the call, if the call has " +"already been accepted before they push 1.

To add additional " +"recordings use the \"System Recordings\" MENU to the left" +msgstr "" + +msgid "Change External CID Configuration" +msgstr "" + +msgid "Mode" +msgstr "" + +msgid "Transmits the Callers CID if allowed by the trunk." +msgstr "" + +msgid "Fixed CID Value" +msgstr "" + +msgid "Always transmit the Fixed CID Value below." +msgstr "" + +msgid "Outside Calls Fixed CID Value" +msgstr "" + +msgid "" +"Transmit the Fixed CID Value below on calls that come in from outside only. " +"Internal extension to extension calls will continue to operate in default " +"mode." +msgstr "" + +msgid "Use Dialed Number" +msgstr "" + +msgid "" +"Transmit the number that was dialed as the CID for calls coming from " +"outside. Internal extension to extension calls will continue to operate in " +"default mode. There must be a DID on the inbound route for this. This will " +"be BLOCKED on trunks that block foreign CallerID" +msgstr "" + +msgid "Force Dialed Number" +msgstr "" + +msgid "" +"Transmit the number that was dialed as the CID for calls coming from " +"outside. Internal extension to extension calls will continue to operate in " +"default mode. There must be a DID on the inbound route for this. This WILL " +"be transmitted on trunks that block foreign CallerID" +msgstr "" + +msgid "" +"Fixed value to replace the CID with used with some of the modes above. " +"Should be in a format of digits only with an option of E164 format using a " +"leading \"+\"." +msgstr "" + +msgid "Destination if no answer" +msgstr "" + +msgid "Submit Changes" +msgstr "" + +msgid "Please enter an extension list." +msgstr "" + +msgid "Invalid time specified" +msgstr "" + +msgid "Time must be between 1 and 60 seconds" +msgstr "" + +msgid "" +"Only ringall, ringallv2, hunt and the respective -prim versions are " +"supported when confirmation is checked" +msgstr "" + +msgid "" +"Invalid CID Number. Must be in a format of digits only with an option of " +"E164 format using a leading \"+\"" +msgstr "" Index: /modules/branches/2.10/findmefollow/i18n/it_IT/LC_MESSAGES/findmefollow.po =================================================================== --- /modules/branches/2.10/findmefollow/i18n/it_IT/LC_MESSAGES/findmefollow.po (revision 7250) +++ /modules/branches/2.10/findmefollow/i18n/it_IT/LC_MESSAGES/findmefollow.po (revision 7250) @@ -0,0 +1,411 @@ +# 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 , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: 2.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-10-05 23:10+0200\n" +"PO-Revision-Date: 2008-11-10 11:52+0100\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" +"X-Poedit-Language: Italian\n" +"X-Poedit-Country: ITALY\n" + +#: functions.inc.php:385 +msgid "Edit Follow Me Settings" +msgstr "Modifica impostazioni Seguimi" + +#: functions.inc.php:388 +#: functions.inc.php:392 +msgid "Add Follow Me Settings" +msgstr "Modifica impostazioni Seguimi" + +#: functions.inc.php:420 +#, php-format +msgid "Follow-Me: %s (%s)" +msgstr "Seguimi: %s (%s)" + +#: functions.inc.php:438 +#, php-format +msgid "Follow-Me User: %s" +msgstr "Utente Seguimi: %s" + +#: install.php:4 +msgid "Findme Follow Toggle" +msgstr "Attiva/Disattiva Seguimi" + +#: install.php:141 +#: uninstall.php:31 +msgid "Cannot connect to Asterisk Manager with " +msgstr "Impossibile connettersi al manager di Asterisk con " + +#: install.php:159 +msgid "Checking if recordings need migration.." +msgstr "Sto controllando se le registrazione necessitano di una migrazione.." + +#: install.php:165 +msgid "migrating" +msgstr "migrazione" + +#: install.php:166 +msgid "adding annmsg_id field.." +msgstr "sto aggiungendo il campo annmsg_id.." + +#: install.php:170 +#: install.php:179 +#: install.php:188 +#: install.php:200 +#: install.php:216 +#: install.php:226 +#: install.php:242 +#: install.php:252 +#: install.php:268 +msgid "fatal error" +msgstr "errore fatale" + +#: install.php:173 +#: install.php:182 +#: install.php:191 +#: install.php:282 +#: install.php:290 +#: install.php:298 +msgid "ok" +msgstr "ok" + +#: install.php:175 +msgid "adding remotealert_id field.." +msgstr "sto aggiungendo il campo remotealer_id.." + +#: install.php:184 +msgid "adding toolate_id field.." +msgstr "sto aggiungendo il campo toolate_id.." + +#: install.php:196 +msgid "migrate annmsg to ids.." +msgstr "migrazione annmsg verso ids.." + +#: install.php:220 +#: install.php:246 +#: install.php:272 +#, php-format +msgid "migrated %s entries" +msgstr "migrate %s voci" + +#: install.php:222 +msgid "migrate remotealert to ids.." +msgstr "migrazione remotealer verso ids.." + +#: install.php:248 +msgid "migrate toolate to ids.." +msgstr "migrazione toolate verso ids.." + +#: install.php:276 +msgid "dropping annmsg field.." +msgstr "sto scartando il campo annmsg..." + +#: install.php:280 +msgid "no annmsg field???" +msgstr "nessun campo annmsg???" + +#: install.php:284 +msgid "dropping remotealert field.." +msgstr "sto scartadno il campo remotealert" + +#: install.php:288 +msgid "no remotealert field???" +msgstr "nessun campo remotealert???" + +#: install.php:292 +msgid "dropping toolate field.." +msgstr "sto scartando il campo toolate.." + +#: install.php:296 +msgid "no toolate field???" +msgstr "nessun campo toolate???" + +#: install.php:302 +msgid "already migrated" +msgstr "gia migrato" + +#: page.findmefollow.php:71 +msgid "Warning! Extension" +msgstr "Attenzione! L'Interno" + +#: page.findmefollow.php:71 +msgid "is not allowed for your account" +msgstr "non possiede i permessi" + +#: page.findmefollow.php:121 +#: page.findmefollow.php:124 +#: page.findmefollow.php:157 +msgid "Follow Me" +msgstr "Seguimi" + +#: page.findmefollow.php:121 +msgid "Choose a user/extension:" +msgstr "Scegliere un utente/interno:" + +#: page.findmefollow.php:124 +msgid "deleted" +msgstr "Eliminato" + +#: page.findmefollow.php:154 +msgid "Delete Entries" +msgstr "Elimina voci" + +#: page.findmefollow.php:164 +msgid "User" +msgstr "Utente" + +#: page.findmefollow.php:168 +msgid "Extension" +msgstr "Interno" + +#: page.findmefollow.php:171 +#, php-format +msgid "Edit %s" +msgstr "Modifica %s" + +#: page.findmefollow.php:171 +#, php-format +msgid "Edit %s %s" +msgstr "Modifica %s %s" + +#: page.findmefollow.php:180 +msgid "Edit Follow Me" +msgstr "Modifica Seguimi" + +#: page.findmefollow.php:180 +msgid "Add Follow Me" +msgstr "Aggiungi Seguimi" + +#: page.findmefollow.php:188 +msgid "group number" +msgstr "Numero gruppo" + +#: page.findmefollow.php:188 +msgid "The number users will dial to ring extensions in this ring group" +msgstr "I numeri che saranno chiamati in questo gruppo" + +#: page.findmefollow.php:194 +msgid "Disable" +msgstr "Disattivato" + +#: page.findmefollow.php:194 +msgid "By default (not checked) any call to this extension will go to this Follow-Me instead, including directory calls by name from IVRs. If checked, calls will go only to the extension.
However, destinations that specify FollowMe will come here.
Checking this box is often used in conjunction with VmX Locater, where you want a call to ring the extension, and then only if the caller chooses to find you do you want it to come here." +msgstr "Nell'impostazione predefinita (non selezionato) tutte le chiamate su questo interno andranno al Seguimi, incluse le chiamate da un IVR. Se selezionato, le chiamate andranno solo all'interno.
Questa opzione Ú di solito usata insieme al VmX Locater, dove si puo' scegliere se inviare il chiamante al seguimi." + +#: page.findmefollow.php:199 +msgid "Initial Ring Time:" +msgstr "Tempo inziale di squillo:" + +#: page.findmefollow.php:200 +msgid "This is the number of seconds to ring the primary extension prior to proceeding to the follow-me list. The extension can also be included in the follow-me list. A 0 setting will bypass this." +msgstr "Questo Ú il numero di secondi di squillo per l'interno primario prima di far procedere la chiamata nella lista seguimi. L'interno può anche essere incluso nella lista. 0 per passarlo direttamente." + +#: page.findmefollow.php:217 +msgid "Ring Strategy:" +msgstr "Strategia di Squillo:" + +#: page.findmefollow.php:219 +msgid "ringallv2" +msgstr "ringallv2" + +#: page.findmefollow.php:219 +msgid "ring primary extension for initial ring time followed by all additional extensions until one answers" +msgstr "squilla l'interno primario per il tempo iniziale di squillo seguito dagli altri interni fino a quando uno non risponde" + +#: page.findmefollow.php:220 +msgid "ringall" +msgstr "ringall" + +#: page.findmefollow.php:220 +msgid "ring all available channels until one answers (default)" +msgstr "chiama tutti i canali disponibili fino a quando un interno non risponde (predefinito)" + +#: page.findmefollow.php:221 +msgid "hunt" +msgstr "hunt" + +#: page.findmefollow.php:221 +msgid "take turns ringing each available extension" +msgstr "chiama a circolo tutti gli interni disponibili" + +#: page.findmefollow.php:222 +msgid "memoryhunt" +msgstr "memoryhunt" + +#: page.findmefollow.php:222 +msgid "ring first extension in the list, then ring the 1st and 2nd extension, then ring 1st 2nd and 3rd extension in the list.... etc." +msgstr "chiama il primo interno della lista, poi il primo e il secondo, poi il primo, il secondo e il terzo... ecc." + +#: page.findmefollow.php:223 +msgid "*-prim" +msgstr "*-prim" + +#: page.findmefollow.php:223 +msgid "these modes act as described above. However, if the primary extension (first in list) is occupied, the other extensions will not be rung. If the primary is FreePBX DND, it won't be rung. If the primary is FreePBX CF unconditional, then all will be rung" +msgstr "queste modalità sono attuate come descritto sopra. Però, se l'interno primario (il primo della lista Ú occupato, gli altri interni non saranno chiamati. Se il primario ha attivato il Non-Disturbare di FreePBX, non andrà avanti. Se il primario Ú un Trasferimento di Chiamata incondizionato attivato su FreePBX, tutti squilleranno." + +#: page.findmefollow.php:224 +msgid "firstavailable" +msgstr "firstavailable" + +#: page.findmefollow.php:224 +msgid "ring only the first available channel" +msgstr "squilla solo il primo disponibile" + +#: page.findmefollow.php:225 +msgid "firstnotonphone" +msgstr "firstnotonphone" + +#: page.findmefollow.php:225 +msgid "ring only the first channel which is not off hook - ignore CW" +msgstr "squilla solo il primo che non Ú al telefono - ignora l'Avviso di Chiamata" + +#: page.findmefollow.php:244 +msgid "Ring Time (max 60 sec)" +msgstr "Tempo di squillo (max 60 sec)" + +#: page.findmefollow.php:246 +msgid "Time in seconds that the phones will ring. For all hunt style ring strategies, this is the time for each iteration of phone(s) that are rung" +msgstr "Il tempo in secondi che un telefono squilla. Per i gruppi di chiamata con strategia hunt, equivale allo squillo di ogni singolo interno" + +#: page.findmefollow.php:254 +msgid "Follow-Me List" +msgstr "Lista Seguimi" + +#: page.findmefollow.php:254 +msgid "List extensions to ring, one per line, or use the Extension Quick Pick below.

You can include an extension on a remote system, or an external number by suffixing a number with a pound (#). ex: 2448089# would dial 2448089 on the appropriate trunk (see Outbound Routing)." +msgstr "Inserire gli interni o numeri da chiamare, uno per riga, o utilizzare la Selezione Veloce degli Interni qui sotto.

Per includere numeri esterni, inserire cancelletto (#) alla fine del numero. Es.: per chiamare 06123456789 bisgona inserire 006123456789# (se nelle Rotte in uscita Ú stato inserito lo 0 per le chiamate esterne)." + +#: page.findmefollow.php:269 +msgid "Extension Quick Pick" +msgstr "Selezione Veloce Interno" + +#: page.findmefollow.php:271 +msgid "Choose an extension to append to the end of the extension list above." +msgstr "Scegliere un interno da aggiungere alla fine della lista qui sopra." + +#: page.findmefollow.php:277 +msgid "(pick extension)" +msgstr "(scegliere l'interno)" + +#: page.findmefollow.php:290 +#: page.findmefollow.php:308 +msgid "Announcement:" +msgstr "Annuncio:" + +#: page.findmefollow.php:290 +msgid "Message to be played to the caller before dialing this group.

To add additional recordings please use the \"System Recordings\" MENU to the left" +msgstr "Messaggio da riprodurre al chiamante prima di chiamare questo gruppo.

Per aggiungere ulteriori registrazioni utilizzare \"Registrazioni di Sistema\" nel MENU di sinistra" + +#: page.findmefollow.php:296 +msgid "None" +msgstr "Nessuno" + +#: page.findmefollow.php:308 +msgid "Message to be played to the caller before dialing this group.

You must install and enable the \"Systems Recordings\" Module to edit this option" +msgstr "Messaggio da rirprodurre al chiamante prima di chiamare questo gruppo.

Per utilizzare questa opzione, bisogna aver prima installato e attivato il modulo \"Registrazioni di Sistema\"" + +#: page.findmefollow.php:319 +msgid "Play Music On Hold?" +msgstr "Riproduci Musica di Attesa?" + +#: page.findmefollow.php:319 +msgid "If you select a Music on Hold class to play, instead of 'Ring', they will hear that instead of Ringing while they are waiting for someone to pick up." +msgstr "Se si seleziona una classe di Musica di Attesa, invece che 'Squillo', l'utente ascolterà questa mentre Ú in attesa di una risposta." + +#: page.findmefollow.php:325 +msgid "Ring" +msgstr "Squillo" + +#: page.findmefollow.php:338 +msgid "CID Name Prefix" +msgstr "Prefisso ID Chiamante" + +#: page.findmefollow.php:338 +msgid "You can optionally prefix the Caller ID name when ringing extensions in this group. ie: If you prefix with \"Sales:\", a call from John Doe would display as \"Sales:John Doe\" on the extensions that ring." +msgstr "Come opzione si puo' inserire un prefisso prima dell'identificativo chiamante. Es.: se si inserisce \"Commerciale:\", una chiamata per Mario Rossi sarà visualizzata come \"Commerciale:Mario Rossi\" sul display del telefono che squilla." + +#: page.findmefollow.php:343 +msgid "Alert Info" +msgstr "Alert Info" + +#: page.findmefollow.php:343 +msgid "You can optionally include an Alert Info which can create distinctive rings on SIP phones." +msgstr "Si può anche includere come opzione un messaggio Alert Info per distinguere le suonerie su apparati di tipo SIP." + +#: page.findmefollow.php:348 +msgid "Confirm Calls" +msgstr "Conferma Chiamate" + +#: page.findmefollow.php:348 +msgid "Enable this if you're calling external numbers that need confirmation - eg, a mobile phone may go to voicemail which will pick up the call. Enabling this requires the remote side push 1 on their phone before the call is put through. This feature only works with the ringall/ringall-prim ring strategy" +msgstr "Attivare questa opzione se si vogliono chiamare numeri esterni che hanno bisogno di conferma - es., un telefono cellulare potrebbe andare ad una segreteria, e in quel caso la chiamata sarà presa. Attivando questa opzione l'utente remoto dovrà digitare 1 sul proprio telefono per accettare la chiamata. Questa opzione funziona solo con le strategie di squillo ringall e ringall-prim." + +#: page.findmefollow.php:356 +msgid "Remote Announce:" +msgstr "Annuncio Remoto:" + +#: page.findmefollow.php:356 +msgid "Message to be played to the person RECEIVING the call, if 'Confirm Calls' is enabled.

To add additional recordings use the \"System Recordings\" MENU to the left" +msgstr "Il messaggio da riprodurre alla persona che RICEVE la chiamata, se Ú stato attivato 'Conferma Chiamate'

Per aggiungere ulteriori registrazioni utilizzare \"Registrazioni di Sistema\" nel MENU di sinistra" + +#: page.findmefollow.php:362 +#: page.findmefollow.php:379 +msgid "Default" +msgstr "Predefinito" + +#: page.findmefollow.php:373 +msgid "Too-Late Announce:" +msgstr "Annuncio Troppo-Tardi" + +#: page.findmefollow.php:373 +msgid "Message to be played to the person RECEIVING the call, if the call has already been accepted before they push 1.

To add additional recordings use the \"System Recordings\" MENU to the left" +msgstr "Il messaggio da riprodurre alla persona che RICEVE la chiamata, se la chiamata Ú già stata accettata prima di premere il tasto.

Per aggiungere ulteriori registrazioni utilizzare \"Registrazioni di Sistema\" nel MENU di sinistra" + +#: page.findmefollow.php:391 +msgid "Destination if no answer" +msgstr "Destinazione se nessuna risposta" + +#: page.findmefollow.php:399 +msgid "Submit Changes" +msgstr "Conferma Cambiamenti" + +#: page.findmefollow.php:426 +msgid "Invalid Group Number specified" +msgstr "Numero Gruppo non valido" + +#: page.findmefollow.php:427 +msgid "Please enter an extension list." +msgstr "Prego immettere la lista degli interni." + +#: page.findmefollow.php:428 +msgid "Invalid prefix. Valid characters: a-z A-Z 0-9 : _ -" +msgstr "Prefisso non valido. Caratteri validi: a-z A-Z 0-9 : _ -" + +#: page.findmefollow.php:429 +msgid "Invalid time specified" +msgstr "Tempo specificato non valido" + +#: page.findmefollow.php:430 +msgid "Time must be between 1 and 60 seconds" +msgstr "Il tempo deve essere compreso tra 1 e 60 secondi" + +#: page.findmefollow.php:431 +msgid "Only ringall, ringallv2, hunt and the respective -prim versions are supported when confirmation is checked" +msgstr "Solo ringall, ringallv2, hunt e le respettive versioni -prim sono supportate quando la conferma Ú attivata" + +msgid "(Add)" +msgstr "(Aggiungi)" + +msgid "(Edit)" +msgstr "(Modifica)" + Index: /modules/branches/2.10/findmefollow/i18n/ru_RU/LC_MESSAGES/findmefollow.po =================================================================== --- /modules/branches/2.10/findmefollow/i18n/ru_RU/LC_MESSAGES/findmefollow.po (revision 11983) +++ /modules/branches/2.10/findmefollow/i18n/ru_RU/LC_MESSAGES/findmefollow.po (revision 11983) @@ -0,0 +1,521 @@ +# Russian freePBX ver. translation +# Copyright (c) 2006-2011 PostMet Corporation +# This file is distributed under the same license as the freePBX package. +# Alexander Kozyrev , Sergey Nikolayev , 2006-2011. +# +# ИспПльзПвать iconv findmefollow.pot -f UTF-8 -t ISO-8859-5 -o findmefollow.po +# fuzzy +msgid "" +msgstr "" +"Project-Id-Version: 1.3\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-18 08:25+0100\n" +"PO-Revision-Date: 2011-04-08 15:15+0100\n" +"Last-Translator: Alexander Kozyrev \n" +"Language-Team: Russian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Follow Me" +msgstr "СлеЎуйте сюЎа" + +msgid "Inbound Call Control" +msgstr "КПМтрПль Ð²Ñ +ÐŸÐŽÑÑ‰ÐžÑ + вызПвПв" + +msgid "" +"Much like a ring group, but works on individual extensions. When someone " +"calls the extension, it can be setup to ring for a number of seconds before " +"trying to ring other extensions and/or external numbers, or to ring all at " +"once, or in other various 'hunt' configurations. Most commonly used to ring " +"someone's cell phone if they don't answer their extension." +msgstr "" +"РабПтает так же, как ЌОМО рОМг-группа, МП тПлькП ОМЎОвОЎуальМП Ўля кажЎПгП " +"вМутреММегП МПЌера. ЕслО пПступОт вызПв Ма какПй-лОбП вМутреММОй МПЌер, тП " +"пПсле указаММПгП вреЌеМО, в течеМОе кПтПрПгП буЎет вызываться этПт МПЌер " +"МепПсреЎствеММП, буЎет преЎпрОМята пПпытка вызПва слеЎующегП пП спОску " +"вМутреММегП ОлО вМешМегП МПЌера. ИлО, как варОаМт, буЎут звПМОть-все, ОлО " +"буЎут преЎпрОМяты ЎругОе сцеМарОО, МапрОЌер - серОйМПе ОскаМОе. НаОбПлее " +"частПе прОЌеМеМОе - Ўля переМаправлеМОя вызПва Ма ЌПбОльМый телефПМ, еслО " +"этПт МПЌер Ме Птвечает." + +msgid "Force Follow Me" +msgstr "" + +msgid "Edit Follow Me Settings" +msgstr "ИзЌеМОть устаМПвкО 'СлеЎуйте сюЎа'" + +msgid "Add Follow Me Settings" +msgstr "ДПбавОть МастрПйкО фуМкцОО СлеЎуйте сюЎа" + +#, fuzzy, php-format +msgid "Follow-Me: %s (%s)" +msgstr "СпОсПк" + +#, fuzzy, php-format +msgid "Follow-Me User: %s" +msgstr "СпОсПк" + +msgid "Findme Follow Toggle" +msgstr "ПереключеМОе НайтО ЌеМя тут" + +msgid "Cannot connect to Asterisk Manager with " +msgstr "НевПзЌПжМП сПеЎОМОтся с Asterisk Manager как " + +msgid "Checking if recordings need migration.." +msgstr "ПрПверяеЌ МужЎаются лО запОсО в ЌОграцОО.." + +msgid "migrating" +msgstr "переЌещеМОе" + +msgid "adding annmsg_id field.." +msgstr "ЎПбавляется пПле annmsg_id" + +msgid "fatal error" +msgstr "МеустраМОЌая ПшОбка" + +msgid "ok" +msgstr "Пк" + +msgid "adding remotealert_id field.." +msgstr "ЎПбавляется пПле remotealert_id.." + +msgid "adding toolate_id field.." +msgstr "ЎПбавляется пПле toolate_id.." + +msgid "migrate annmsg to ids.." +msgstr "переЌещаются annmsg в ids.." + +#, php-format +msgid "migrated %s entries" +msgstr "переЌещеМП %s запОсей" + +msgid "migrate remotealert to ids.." +msgstr "переЌещаются remotealert в ids.." + +msgid "migrate toolate to ids.." +msgstr "переЌещаются toolate в ids." + +msgid "dropping annmsg field.." +msgstr "сбрасывается зМачеМОе пПля annmsg" + +msgid "no annmsg field???" +msgstr "Мет пПля annmsg???" + +msgid "dropping remotealert field.." +msgstr "сбрасывается зМачеМОе пПля remotealert" + +msgid "no remotealert field???" +msgstr "Мет пПля remotealert???" + +msgid "dropping toolate field.." +msgstr "сбрасывается зМачеМОе пПля toolate.." + +msgid "no toolate field???" +msgstr "Мет пПля toolate???" + +msgid "already migrated" +msgstr "уже переЌещеМП" + +msgid "Warning! Extension" +msgstr "ВМОЌаМОе! ВМутреММОй МПЌер" + +msgid "is not allowed for your account" +msgstr "Ме разрешеМ к ОспПльзПваМОю в вашеЌ аккауМте" + +msgid "Choose a user/extension:" +msgstr "Выбрать пПльзПвателя/вМутреММОй МПЌер:" + +msgid "deleted" +msgstr "уЎалеМП" + +msgid "Delete Entries" +msgstr "УЎалОть запОсь" + +msgid "User" +msgstr "ППльзПватель" + +#, fuzzy +msgid "Extension" +msgstr "ВМутреММОй МПЌер" + +#, fuzzy, php-format +msgid "Edit %s" +msgstr "ИзЌеМОть" + +#, fuzzy, php-format +msgid "Edit %s %s" +msgstr "ИзЌеМОть МПЌер %s" + +msgid "Edit Follow Me" +msgstr "ИзЌеМОть указаМОе СлеЎуйте сюЎа" + +msgid "Add Follow Me" +msgstr "ДПбавОть указаМОе СлеЎуйте сюЎа" + +msgid "group number" +msgstr "группПвПй МПЌер" + +msgid "The number users will dial to ring extensions in this ring group" +msgstr "НПЌер, Ма кПтПрый ЌПжМП пПзвПМОть сразу вП всю группу вызПва" + +msgid "Disable" +msgstr "Не ОспПльзПвать" + +msgid "" +"By default (not checked) any call to this extension will go to this Follow-" +"Me instead, including directory calls by name from IVRs. If checked, calls " +"will go only to the extension.
However, destinations that specify " +"FollowMe will come here.
Checking this box is often used in conjunction " +"with VmX Locater, where you want a call to ring the extension, and then only " +"if the caller chooses to find you do you want it to come here." +msgstr "" +"ПП уЌПлчаМОю (Ме ПтЌечеМП) все звПМкО пПступают в ЌПЎуль 'СлеЎуйте сюЎа', " +"включая звПМкО с пПОскПЌ пП ОЌеМО в Ð˜ÐœÑ‚ÐµÑ€Ð°ÐºÑ‚ÐžÐ²ÐœÑ‹Ñ + ЌеМю. НП еслО ПтЌечеМП, " +"звПМПк пПступает пряЌП Ма указаМый МПЌер.
В любПЌ случае, МазМачеМОе, " +"указаММПе в 'СлеЎуйте сюЎа' буЎет ОспПлМяться. ИспПльзПваМОе этПй ПпцОО " +"частП ПправЎаМП вЌесте с VmX ЛПкатПрПЌ, гЎе ЌПжМП прПстП МаправОть звПМПк Ма " +"вМутреММОй МПЌер, пПльзПватель кПтПрПгП ЌПжет МепПсреЎствеММП саЌ указать, " +"Ñ +Пчет лО ПМ, штПбы пПступающОе звПМкО ÐœÐ°Ñ +ПЎОлО егП везЎе, ОлО Мет." + +msgid "Initial Ring Time:" +msgstr "НачальМПе вреЌя звПМка:" + +msgid "" +"This is the number of seconds to ring the primary extension prior to " +"proceeding to the follow-me list. The extension can also be included in the " +"follow-me list. A 0 setting will bypass this." +msgstr "" +"ВреЌя в ÑÐµÐºÑƒÐœÐŽÐ°Ñ +, в течеМОе кПтПрПгП звПМПк Птрабатывает Ма первПЌ " +"МазМачеМОО (вМутреММеЌ МПЌере), пПсле чегП слеЎует пП МаправлеМОю, заЎаММПЌу " +"указаМОеЌ СлеЎуйте сюЎа. ЗМачеМОе 0 буЎет прПпускать первый шаг." + +msgid "Ring Strategy:" +msgstr "СтратегОя ЎПзвПМа:" + +#, fuzzy +msgid "ringallv2" +msgstr "1-звПМят-все" + +msgid "" +"ring primary extension for initial ring time followed by all additional " +"extensions until one answers" +msgstr "" +"звеМОт первый вМутреММОй МПЌер втечеМОе указаММПгП вреЌеМО (выше), затеЌ все " +"вМутреММОе МПЌера Оз спОска, пПка ктП лОбП ПЎОМ Ме ПтветОт" + +msgid "ringall" +msgstr "звПМят-все" + +msgid "ring all available channels until one answers (default)" +msgstr "звПМят все ЎПступМые МПЌера Оз спОска, пПка ктП лОбП ПЎОМ Ме ПтветОт." + +msgid "hunt" +msgstr "серОйМПе-ОскаМОе" + +msgid "take turns ringing each available extension" +msgstr "звПМПк пПступает Ма любПй ЎПступМый Оз МПЌерПв пП спОску" + +msgid "memoryhunt" +msgstr "прПгресс-серОйМПе-ОскаМОе" + +msgid "" +"ring first extension in the list, then ring the 1st and 2nd extension, then " +"ring 1st 2nd and 3rd extension in the list.... etc." +msgstr "" +"ЗвПМОт первый вМутреММОй МПЌер в спОске, затеЌ первый О втПрПй, затеЌ " +"первый, втПрПй О третОй в спОске, О так Ўалее." + +msgid "*-prim" +msgstr "*-прОЌ" + +#, fuzzy +msgid "" +"these modes act as described above. However, if the primary extension (first " +"in list) is occupied, the other extensions will not be rung. If the primary " +"is FreePBX DND, it won't be rung. If the primary is FreePBX CF " +"unconditional, then all will be rung" +msgstr "" +"ЭтПт режОЌ рабПтает так же, как вышеПпОсаММые, за ОсключеМОеЌ тПгП, чтП еслО " +"первый вМутреММОй МПЌер Оз спОска заМят, слеЎующОе пП спОску Ме буЎут " +"звПМОть. Также завОсОт Пт устаМПвПк 'Не беспПкПОть' О 'ПереМаправлеМОе' Ма " +"первПЌ вМутреММеЌ МПЌере спОска. ЕслО DND, тП пПОск в группе Ма этПЌ " +"закаМчОвается. ЕслО CF (переМаправлеМОе) Ме переМаправОт, тП пПОск в группе " +"прПЎПлжОтся." + +msgid "firstavailable" +msgstr "первый-ЎПступМый" + +msgid "ring only the first available channel" +msgstr "звПМОт первый ЎПступМый каМал" + +msgid "firstnotonphone" +msgstr "первый-Ма-телефПМе" + +#, fuzzy +msgid "ring only the first channel which is not off hook - ignore CW" +msgstr "" +"звПМОт первый телефПМ, у кПтПрПгП Ме сМята трубка - фПрварЎОМг ОгМПрОруется" + +msgid "Ring Time (max 60 sec)" +msgstr "ВреЌя вызПва (Ќакс. 60 сек.)" + +msgid "" +"Time in seconds that the phones will ring. For all hunt style ring " +"strategies, this is the time for each iteration of phone(s) that are rung" +msgstr "" +"ВреЌя в ÑÐµÐºÑƒÐœÐŽÐ°Ñ +, в течеМОе кПтПрПгП телефПМы буЎут звПМОть. Для Ð²ÑÐµÑ + вОЎПв " +"стратегОй серОйМПгП ОскаМОя этП вреЌя звПМка пПвтПряется Ўля Ð²ÑÐµÑ + телефПМПв, " +"кПтПрые включеМы в серОю." + +msgid "Follow-Me List" +msgstr "СпОсПк" + +msgid "" +"List extensions to ring, one per line, or use the Extension Quick Pick below." +"

You can include an extension on a remote system, or an external " +"number by suffixing a number with a pound (#). ex: 2448089# would dial " +"2448089 on the appropriate trunk (see Outbound Routing)." +msgstr "" +"ЛОст МПЌерПв, пП ПЎМПЌу в стрПке, ОлО вПспПльзуйтесь ВыбПрПЌ Оз ЌеМю МОже " +"чтПбы ЎПбавОть в спОсПк

МПжМП включать МПЌера Оз ÐŽÑ€ÑƒÐ³ÐžÑ + ÑƒÐŽÐ°Ð»Ñ‘ÐœÐœÑ‹Ñ + " +"сОстеЌ, ОлО вМешМОе МПЌера, с ОспПльзПваМОеЌ зМака # в качестве суффОкса. " +"НапрОЌер: 2448089# Маберёт МПЌер 2448089 Ма любПЌ вМешМеЌ траМке, пПпаЎающеЌ " +"в правОла Ð˜ÑÑ +ПЎящей ЌаршрутОзацОО.

ЗаЎействуются тПлькП фактОческОе " +"вМутреММОе МПЌера. ЕслО Ñ +ПтОте ОспПльзПвать прО этПЌ пПстПрПММОе каМалы " +"(чтПбы звПМОть Ма follow-me ОлО в ЎругОе группы вызПва, ОлО ПчереЎО, прПстП " +"ставьте зМак # в кПМце МПЌера. НП буЎте ПстПрПжМы! ЭтП рекурсОя, О сОстеЌа " +"ЌПжет заЎушОться." + +msgid "Extension Quick Pick" +msgstr "Выбрать МПЌера" + +msgid "Choose an extension to append to the end of the extension list above." +msgstr "ВыберОте МПЌера Ўля ЎПбавлеМОя в кПМец спОска выше" + +#, fuzzy +msgid "(pick extension)" +msgstr "вМутреММОй МПЌер" + +msgid "Announcement:" +msgstr "ПрОветствОе:" + +msgid "" +"Message to be played to the caller before dialing this group.

To add " +"additional recordings please use the \"System Recordings\" MENU to the left" +msgstr "" +"СППбщеМОе, кПтПрПе вПспрПОзвПЎОтся пПзвПМОвшеЌу прежЎе, чеЌ звПМПк перйЎёт в " +"группу.

Для сПзЎаМОя такПгП сППбщеМОя ОспПльзуйте разЎел ЌеМю ЗапОсь " +"сППбщеМОй." + +msgid "None" +msgstr "Нет" + +msgid "" +"Message to be played to the caller before dialing this group.

You " +"must install and enable the \"Systems Recordings\" Module to edit this option" +msgstr "" +"СППбщеМОе, кПтПрПе вПспрПОзвПЎОтся пПзвПМОвшеЌу прежЎе, чеЌ звПМПк перйЎёт в " +"группу.

ÐÐµÐŸÐ±Ñ +ПЎОЌП ОМсталлОрПвать ЌПЎуль ЗапОсь сППбщеМОй чтПбы " +"ЌеМять чтП-лОбП в этПй ПпцОО." + +msgid "Play Music On Hold?" +msgstr "Музыку в ПжОЎаМОО?" + +msgid "" +"If you select a Music on Hold class to play, instead of 'Ring', they will " +"hear that instead of Ringing while they are waiting for someone to pick up." +msgstr "" +"ЕслО выбраМ класс МузыкО в ПжОЎаМОО вЌестП прПстПгП сОгМала вызПва, тП " +"пПзвПМОвшОй буЎет слушать Ќузыку, пПка ктП-тП Ме пПЎМОЌет трубку." + +msgid "Ring" +msgstr "ЗвПМПк" + +msgid "CID Name Prefix" +msgstr "ПрефОкс ИД ОЌеМО" + +msgid "" +"You can optionally prefix the Caller ID name when ringing extensions in this " +"group. ie: If you prefix with \"Sales:\", a call from John Doe would display " +"as \"Sales:John Doe\" on the extensions that ring." +msgstr "" +"ОпцОПМальМП, ЌПжМП ОспПльзПвать какПй-тП префОкс Ўля звПМка в эту группу. " +"НапрОЌер, еслО этП группа \"Sales:\", тП, устаМПвОв такПй префОкс Ўля этПй " +"группы, ЌПжМП вОЎеть, еслО звПМОт John Doe, тП Ќы увОЎОЌ Ма ЎОсплее Sales:" +"John Doe." + +msgid "Alert Info" +msgstr "ДПпПлМОтельМая ОМфПрЌацОя" + +msgid "" +"You can optionally include an Alert Info which can create distinctive rings " +"on SIP phones." +msgstr "" +"ДПпПлМОтельМая ОМфПрЌацОя ALERT_INFO ЌПжет быть ОспПльзПваМОя Ўля " +"распПзМаваМОя аЎресата чтПбы прОсвПОть разлОчМый тОп звПМкПв Ма SIP " +"ÑƒÑÑ‚Ñ€ÐŸÐ¹ÑÑ‚Ð²Ð°Ñ +." + +msgid "Call Confirmation Configuration" +msgstr "КПМфОгурацОя пПЎтвержЎеМОя звПМка" + +msgid "Confirm Calls" +msgstr "ППЎтвержЎать вызПвы" + +msgid "" +"Enable this if you're calling external numbers that need confirmation - eg, " +"a mobile phone may go to voicemail which will pick up the call. Enabling " +"this requires the remote side push 1 on their phone before the call is put " +"through. This feature only works with the ringall/ringall-prim ring strategy" +msgstr "" +"ИспПльзуйте этП, еслО звПМПк ОЎёт Ма вМешМОй МПЌер, кПтПрый МужЎается в " +"пПЎтвержЎеМОО. НапрОЌер, ЌПбОльМый телефПМ ЌПжет включОть гПлПвую пПчту, " +"кПтПрая Ð¿ÐµÑ€ÐµÑ +ватОт этПт вызПв. НажатОеЌ Ма 1 ЌПжМП заблПкОрПвать такОе " +"ЎействОя. ОпцОя ЎействОтельМа тПлькП прО стратегОО вызПва звПМят-все." + +msgid "Remote Announce:" +msgstr "УЎалёММПе прОветствОе:" + +msgid "" +"Message to be played to the person RECEIVING the call, if 'Confirm Calls' is " +"enabled.

To add additional recordings use the \"System Recordings\" " +"MENU to the left" +msgstr "" +"СППбщеМОе, кПтПрПе буЎет вПспрПОзвеЎеМП Ўля аЎресата звПМка, еслО " +"заЎействПваМа ПпцОя ППЎтвержЎеМОе вызПва.

ДПбавОть запОсь ЌПжМП в " +"секцОО ЗапОсь сППбщеМОй в ЌеМю слева." + +msgid "Default" +msgstr "ПП уЌПлчаМОю" + +msgid "Too-Late Announce:" +msgstr "СППбщеМОе Уже-пПзЎМП" + +msgid "" +"Message to be played to the person RECEIVING the call, if the call has " +"already been accepted before they push 1.

To add additional " +"recordings use the \"System Recordings\" MENU to the left" +msgstr "" +"СППбщеМОе вПспрПОзвПЎОтся Ўля прОМявшегП этПт звПМПк, еслО звПМПк уже прОМят " +"прежЎе чеЌ ПМ успел Мажать 1.

Для сПзЎаМОя такПгП сППбщеМОя " +"ОспПльзуйте разЎел ЌеМю ЗапОсь сППбщеМОй." + +msgid "Change External CID Configuration" +msgstr "ИзЌеМять кПМфОгурацОю вМешМегП НПЌера ИД" + +msgid "Mode" +msgstr "РежОЌ" + +msgid "Transmits the Callers CID if allowed by the trunk." +msgstr "ПереЎавать НПЌер ИД еслО пПзвПляет траМк." + +msgid "Fixed CID Value" +msgstr "ЀОксОрПваММПе зМачеМОе НПЌера ИД" + +msgid "Always transmit the Fixed CID Value below." +msgstr "ВсегЎа переЎавать фОксОрПваММПе зМачеМОе НПЌера ИД указаММПе МОже." + +msgid "Outside Calls Fixed CID Value" +msgstr "ЗМачеМОе НПЌера ИД Ўля Ð²ÐœÐµÑˆÐœÐžÑ + звПМкПв" + +msgid "" +"Transmit the Fixed CID Value below on calls that come in from outside only. " +"Internal extension to extension calls will continue to operate in default " +"mode." +msgstr "" +"ПереЎавать фОксОрПваММПе зМачеМОе НПЌера ИД указаММПе МОже тПлькП в случае " +"ÐžÑÑ +ÐŸÐŽÑÑ‰ÐžÑ + Ð²ÐœÐµÑˆÐœÐžÑ + звПМкПв. ВМутреММОе сПеЎОМеМОя Ме буЎут ОспПльзПвать этПт " +"НПЌер ИД." + +msgid "Use Dialed Number" +msgstr "ИспПльзПвать МабраММый МПЌер" + +msgid "" +"Transmit the number that was dialed as the CID for calls coming from " +"outside. Internal extension to extension calls will continue to operate in " +"default mode. There must be a DID on the inbound route for this. This will " +"be BLOCKED on trunks that block foreign CallerID" +msgstr "" +"ПереЎавать МабраММый МПЌер в качестве НПЌера ИД Ўля Ð¿ÐµÑ€ÐµÐœÐ°Ð¿Ñ€Ð°Ð²Ð»ÐµÐœÐœÑ‹Ñ + " +"звПМкПв, Ð¿Ñ€ÐžÑˆÐµÐŽÑˆÐžÑ + сМаружО. ВМутреММОе сПеЎОМеМОя буЎут переЎавать НПЌер " +"ИД в ПбычМПЌ режОЌе. Для этПгП преЎпПлагается Ð²Ñ +ПЎящОй Ќаршрут пП DID. ОМ " +"буЎет блПкОрПваться Ма траМке, гЎе прПвайЎеры блПкОруют чужОе НПЌера ИД." + +msgid "Force Dialed Number" +msgstr "ЀПрсОрПвать МабраММый МПЌер" + +msgid "" +"Transmit the number that was dialed as the CID for calls coming from " +"outside. Internal extension to extension calls will continue to operate in " +"default mode. There must be a DID on the inbound route for this. This WILL " +"be transmitted on trunks that block foreign CallerID" +msgstr "" +"ПереЎаёт МПЌер, кПтПрый был МабраМ как МазМачеМОе (DID) в качестве НПЌера " +"ИД, Ўля звПМкПв Ð¿Ñ€ÐžÑˆÐµÐŽÑˆÐžÑ + сМаружО. ВМутреММОе сПеЎОМеМОя буЎут переЎавать " +"НПЌер ИД в ПбычМПЌ режОЌе. Для этПгП преЎпПлагается Ð²Ñ +ПЎящОй Ќаршрут пП " +"DID. ОМ буЎет переЎаваться через траМк, гЎе прПвайЎеры блПкОруют чужОе " +"НПЌера ИД." + +msgid "" +"Fixed value to replace the CID with used with some of the modes above. " +"Should be in a format of digits only with an option of E164 format using a " +"leading \"+\"." +msgstr "" +"ЀОксОрПваММПе зМачеМОе Ўля заЌеМы НПЌера ИД в завОсОЌПстО Пт ПЎМПгП Оз " +"режОЌПв выше. ДПлжеМ быть тПлькП в цОфрПвПЌ фПрЌате, ОлО ПпцОПМальМП - в " +"фПрЌате Е164 с ОспПльзПваМОеЌ \"+\" впереЎО МПЌера." + +msgid "Destination if no answer" +msgstr "НазМачеМОе еслО Мет Птвета" + +msgid "Submit Changes" +msgstr "ПрОЌеМОть ОзЌеМеМОя" + +#, fuzzy +msgid "Please enter an extension list." +msgstr "спОсПк МПЌерПв" + +msgid "Invalid time specified" +msgstr "НеверМП указаМП вреЌя" + +msgid "Time must be between 1 and 60 seconds" +msgstr "ВреЌя ЎПлжМП быть указаМП Пт 1 ЎП 60 секуМЎ." + +msgid "" +"Only ringall, ringallv2, hunt and the respective -prim versions are " +"supported when confirmation is checked" +msgstr "" +"ППЎЎержОваются тПлькП сцеМарОО звПМят-все, звПМят-все-v2, серОйМПе-ОскаМОе, " +"О сПтветствующОе -prim варОаМты кПгЎа ОзЌеМеМОя прОМяты." + +msgid "" +"Invalid CID Number. Must be in a format of digits only with an option of " +"E164 format using a leading \"+\"" +msgstr "" +"НеверМый фПрЌат НПЌера ИД. ДПлжеМ быть указаМ тПлькП цОфраЌО, ОлО, " +"ПпцОПМальМП, в пПлМПЌ Е164 фПрЌате с ОспПльзПваМОеЌ \"+\" впереЎО МПЌера." Index: /modules/branches/2.10/findmefollow/i18n/es_ES/LC_MESSAGES/findmefollow.po =================================================================== --- /modules/branches/2.10/findmefollow/i18n/es_ES/LC_MESSAGES/findmefollow.po (revision 7479) +++ /modules/branches/2.10/findmefollow/i18n/es_ES/LC_MESSAGES/findmefollow.po (revision 7479) @@ -0,0 +1,401 @@ +msgid "" +msgstr "" +"Project-Id-Version: FreePBX - módulo findmefollow module spanish translation\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-11-08 18:34+0100\n" +"PO-Revision-Date: 2009-01-22 15:45+0100\n" +"Last-Translator: Juan Asensio Sánchez \n" +"Language-Team: Juan Asensio Sánchez \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Spanish\n" +"X-Poedit-Country: SPAIN\n" +"X-Poedit-SourceCharset: utf-8\n" + +#: functions.inc.php:385 +msgid "Edit Follow Me Settings" +msgstr "" + +#: functions.inc.php:388 +#: functions.inc.php:392 +msgid "Add Follow Me Settings" +msgstr "" + +#: functions.inc.php:420 +#, php-format +msgid "Follow-Me: %s (%s)" +msgstr "" + +#: functions.inc.php:438 +#, php-format +msgid "Follow-Me User: %s" +msgstr "" + +#: install.php:4 +msgid "Findme Follow Toggle" +msgstr "" + +#: install.php:141 +#: uninstall.php:31 +msgid "Cannot connect to Asterisk Manager with " +msgstr "" + +#: install.php:159 +msgid "Checking if recordings need migration.." +msgstr "" + +#: install.php:165 +msgid "migrating" +msgstr "" + +#: install.php:166 +msgid "adding annmsg_id field.." +msgstr "" + +#: install.php:170 +#: install.php:179 +#: install.php:188 +#: install.php:200 +#: install.php:216 +#: install.php:226 +#: install.php:242 +#: install.php:252 +#: install.php:268 +msgid "fatal error" +msgstr "" + +#: install.php:173 +#: install.php:182 +#: install.php:191 +#: install.php:282 +#: install.php:290 +#: install.php:298 +msgid "ok" +msgstr "" + +#: install.php:175 +msgid "adding remotealert_id field.." +msgstr "" + +#: install.php:184 +msgid "adding toolate_id field.." +msgstr "" + +#: install.php:196 +msgid "migrate annmsg to ids.." +msgstr "" + +#: install.php:220 +#: install.php:246 +#: install.php:272 +#, php-format +msgid "migrated %s entries" +msgstr "" + +#: install.php:222 +msgid "migrate remotealert to ids.." +msgstr "" + +#: install.php:248 +msgid "migrate toolate to ids.." +msgstr "" + +#: install.php:276 +msgid "dropping annmsg field.." +msgstr "" + +#: install.php:280 +msgid "no annmsg field???" +msgstr "" + +#: install.php:284 +msgid "dropping remotealert field.." +msgstr "" + +#: install.php:288 +msgid "no remotealert field???" +msgstr "" + +#: install.php:292 +msgid "dropping toolate field.." +msgstr "" + +#: install.php:296 +msgid "no toolate field???" +msgstr "" + +#: install.php:302 +msgid "already migrated" +msgstr "" + +#: page.findmefollow.php:71 +msgid "Warning! Extension" +msgstr "" + +#: page.findmefollow.php:71 +msgid "is not allowed for your account" +msgstr "" + +#: page.findmefollow.php:121 +#: page.findmefollow.php:124 +#: page.findmefollow.php:157 +msgid "Follow Me" +msgstr "" + +#: page.findmefollow.php:121 +msgid "Choose a user/extension:" +msgstr "" + +#: page.findmefollow.php:124 +msgid "deleted" +msgstr "" + +#: page.findmefollow.php:154 +msgid "Delete Entries" +msgstr "" + +#: page.findmefollow.php:164 +msgid "User" +msgstr "" + +#: page.findmefollow.php:168 +msgid "Extension" +msgstr "" + +#: page.findmefollow.php:171 +#, php-format +msgid "Edit %s" +msgstr "" + +#: page.findmefollow.php:171 +#, php-format +msgid "Edit %s %s" +msgstr "" + +#: page.findmefollow.php:180 +msgid "Edit Follow Me" +msgstr "" + +#: page.findmefollow.php:180 +msgid "Add Follow Me" +msgstr "" + +#: page.findmefollow.php:188 +msgid "group number" +msgstr "" + +#: page.findmefollow.php:188 +msgid "The number users will dial to ring extensions in this ring group" +msgstr "" + +#: page.findmefollow.php:194 +msgid "Disable" +msgstr "" + +#: page.findmefollow.php:194 +msgid "By default (not checked) any call to this extension will go to this Follow-Me instead, including directory calls by name from IVRs. If checked, calls will go only to the extension.
However, destinations that specify FollowMe will come here.
Checking this box is often used in conjunction with VmX Locater, where you want a call to ring the extension, and then only if the caller chooses to find you do you want it to come here." +msgstr "" + +#: page.findmefollow.php:199 +msgid "Initial Ring Time:" +msgstr "" + +#: page.findmefollow.php:200 +msgid "This is the number of seconds to ring the primary extension prior to proceeding to the follow-me list. The extension can also be included in the follow-me list. A 0 setting will bypass this." +msgstr "" + +#: page.findmefollow.php:217 +msgid "Ring Strategy:" +msgstr "" + +#: page.findmefollow.php:219 +msgid "ringallv2" +msgstr "" + +#: page.findmefollow.php:219 +msgid "ring primary extension for initial ring time followed by all additional extensions until one answers" +msgstr "" + +#: page.findmefollow.php:220 +msgid "ringall" +msgstr "" + +#: page.findmefollow.php:220 +msgid "ring all available channels until one answers (default)" +msgstr "" + +#: page.findmefollow.php:221 +msgid "hunt" +msgstr "" + +#: page.findmefollow.php:221 +msgid "take turns ringing each available extension" +msgstr "" + +#: page.findmefollow.php:222 +msgid "memoryhunt" +msgstr "" + +#: page.findmefollow.php:222 +msgid "ring first extension in the list, then ring the 1st and 2nd extension, then ring 1st 2nd and 3rd extension in the list.... etc." +msgstr "" + +#: page.findmefollow.php:223 +msgid "*-prim" +msgstr "" + +#: page.findmefollow.php:223 +msgid "these modes act as described above. However, if the primary extension (first in list) is occupied, the other extensions will not be rung. If the primary is FreePBX DND, it won't be rung. If the primary is FreePBX CF unconditional, then all will be rung" +msgstr "" + +#: page.findmefollow.php:224 +msgid "firstavailable" +msgstr "" + +#: page.findmefollow.php:224 +msgid "ring only the first available channel" +msgstr "" + +#: page.findmefollow.php:225 +msgid "firstnotonphone" +msgstr "" + +#: page.findmefollow.php:225 +msgid "ring only the first channel which is not off hook - ignore CW" +msgstr "" + +#: page.findmefollow.php:244 +msgid "Ring Time (max 60 sec)" +msgstr "" + +#: page.findmefollow.php:246 +msgid "Time in seconds that the phones will ring. For all hunt style ring strategies, this is the time for each iteration of phone(s) that are rung" +msgstr "" + +#: page.findmefollow.php:254 +msgid "Follow-Me List" +msgstr "" + +#: page.findmefollow.php:254 +msgid "List extensions to ring, one per line, or use the Extension Quick Pick below.

You can include an extension on a remote system, or an external number by suffixing a number with a pound (#). ex: 2448089# would dial 2448089 on the appropriate trunk (see Outbound Routing)." +msgstr "" + +#: page.findmefollow.php:269 +msgid "Extension Quick Pick" +msgstr "" + +#: page.findmefollow.php:271 +msgid "Choose an extension to append to the end of the extension list above." +msgstr "" + +#: page.findmefollow.php:277 +msgid "(pick extension)" +msgstr "" + +#: page.findmefollow.php:290 +#: page.findmefollow.php:308 +msgid "Announcement:" +msgstr "" + +#: page.findmefollow.php:290 +msgid "Message to be played to the caller before dialing this group.

To add additional recordings please use the \"System Recordings\" MENU to the left" +msgstr "" + +#: page.findmefollow.php:296 +msgid "None" +msgstr "" + +#: page.findmefollow.php:308 +msgid "Message to be played to the caller before dialing this group.

You must install and enable the \"Systems Recordings\" Module to edit this option" +msgstr "" + +#: page.findmefollow.php:319 +msgid "Play Music On Hold?" +msgstr "" + +#: page.findmefollow.php:319 +msgid "If you select a Music on Hold class to play, instead of 'Ring', they will hear that instead of Ringing while they are waiting for someone to pick up." +msgstr "" + +#: page.findmefollow.php:325 +msgid "Ring" +msgstr "" + +#: page.findmefollow.php:338 +msgid "CID Name Prefix" +msgstr "" + +#: page.findmefollow.php:338 +msgid "You can optionally prefix the Caller ID name when ringing extensions in this group. ie: If you prefix with \"Sales:\", a call from John Doe would display as \"Sales:John Doe\" on the extensions that ring." +msgstr "" + +#: page.findmefollow.php:343 +msgid "Alert Info" +msgstr "" + +#: page.findmefollow.php:343 +msgid "You can optionally include an Alert Info which can create distinctive rings on SIP phones." +msgstr "" + +#: page.findmefollow.php:348 +msgid "Confirm Calls" +msgstr "" + +#: page.findmefollow.php:348 +msgid "Enable this if you're calling external numbers that need confirmation - eg, a mobile phone may go to voicemail which will pick up the call. Enabling this requires the remote side push 1 on their phone before the call is put through. This feature only works with the ringall/ringall-prim ring strategy" +msgstr "" + +#: page.findmefollow.php:356 +msgid "Remote Announce:" +msgstr "" + +#: page.findmefollow.php:356 +msgid "Message to be played to the person RECEIVING the call, if 'Confirm Calls' is enabled.

To add additional recordings use the \"System Recordings\" MENU to the left" +msgstr "" + +#: page.findmefollow.php:362 +#: page.findmefollow.php:379 +msgid "Default" +msgstr "" + +#: page.findmefollow.php:373 +msgid "Too-Late Announce:" +msgstr "" + +#: page.findmefollow.php:373 +msgid "Message to be played to the person RECEIVING the call, if the call has already been accepted before they push 1.

To add additional recordings use the \"System Recordings\" MENU to the left" +msgstr "" + +#: page.findmefollow.php:391 +msgid "Destination if no answer" +msgstr "" + +#: page.findmefollow.php:399 +msgid "Submit Changes" +msgstr "" + +#: page.findmefollow.php:426 +msgid "Invalid Group Number specified" +msgstr "" + +#: page.findmefollow.php:427 +msgid "Please enter an extension list." +msgstr "" + +#: page.findmefollow.php:428 +msgid "Invalid prefix. Valid characters: a-z A-Z 0-9 : _ -" +msgstr "" + +#: page.findmefollow.php:429 +msgid "Invalid time specified" +msgstr "" + +#: page.findmefollow.php:430 +msgid "Time must be between 1 and 60 seconds" +msgstr "" + +#: page.findmefollow.php:431 +msgid "Only ringall, ringallv2, hunt and the respective -prim versions are supported when confirmation is checked" +msgstr "" + Index: /modules/branches/2.10/findmefollow/i18n/fr_FR/LC_MESSAGES/findmefollow.po =================================================================== --- /modules/branches/2.10/findmefollow/i18n/fr_FR/LC_MESSAGES/findmefollow.po (revision 8139) +++ /modules/branches/2.10/findmefollow/i18n/fr_FR/LC_MESSAGES/findmefollow.po (revision 8139) @@ -0,0 +1,493 @@ +# This file is part of FreePBX. +# +# FreePBX 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. +# +# FreePBX 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 FreePBX. If not, see . +# +# Copyright (C) 2009 Séverine GUTIERREZ, severine@medialsace.fr +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-11-08 18:34+0100\n" +"PO-Revision-Date: 2009-04-20 14:07+0100\n" +"Last-Translator: Séverine GUTIERREZ \n" +"Language-Team: Français \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: functions.inc.php:385 +msgid "Edit Follow Me Settings" +msgstr "Modifier les ParamÚtres Suivez-Moi" + +#: functions.inc.php:388 functions.inc.php:392 +msgid "Add Follow Me Settings" +msgstr "Ajouter des ParamÚtres Suivez-Moi" + +#: functions.inc.php:420 +#, php-format +msgid "Follow-Me: %s (%s)" +msgstr "Suivez-Moi : %s (%s)" + +#: functions.inc.php:438 +#, php-format +msgid "Follow-Me User: %s" +msgstr "Utilisateur Suivez-Moi : %s" + +#: install.php:4 +msgid "Findme Follow Toggle" +msgstr "Activer/Désactiver Suivez-Moi" + +#: install.php:141 uninstall.php:31 +msgid "Cannot connect to Asterisk Manager with " +msgstr "Impossible de se connecter à Asterisk Manager avec " + +#: install.php:159 +msgid "Checking if recordings need migration.." +msgstr "ContrÎle si les enregistrements ont besoin d'être migrés..." + +#: install.php:165 +msgid "migrating" +msgstr "migration en cours" + +#: install.php:166 +msgid "adding annmsg_id field.." +msgstr "ajout du champ annmsg_id" + +#: install.php:170 install.php:179 install.php:188 install.php:200 +#: install.php:216 install.php:226 install.php:242 install.php:252 +#: install.php:268 +msgid "fatal error" +msgstr "erreur fatale" + +#: install.php:173 install.php:182 install.php:191 install.php:282 +#: install.php:290 install.php:298 +msgid "ok" +msgstr "ok" + +#: install.php:175 +msgid "adding remotealert_id field.." +msgstr "ajout du champ remotealert_id" + +#: install.php:184 +msgid "adding toolate_id field.." +msgstr "ajout du champ toolate_id" + +#: install.php:196 +msgid "migrate annmsg to ids.." +msgstr "migration d'annmsg vers ids..." + +#: install.php:220 install.php:246 install.php:272 +#, php-format +msgid "migrated %s entries" +msgstr "%s entrées migrées" + +#: install.php:222 +msgid "migrate remotealert to ids.." +msgstr "migration de remotealert vers ids..." + +#: install.php:248 +msgid "migrate toolate to ids.." +msgstr "migration de toolate vers ids..." + +#: install.php:276 +msgid "dropping annmsg field.." +msgstr "suppression du champ annmsg..." + +#: install.php:280 +msgid "no annmsg field???" +msgstr "pas de champ annmsg ???" + +#: install.php:284 +msgid "dropping remotealert field.." +msgstr "supression du champ remotealert..." + +#: install.php:288 +msgid "no remotealert field???" +msgstr "pas de champ remotealert ???" + +#: install.php:292 +msgid "dropping toolate field.." +msgstr "suppression du champ toolate..." + +#: install.php:296 +msgid "no toolate field???" +msgstr "pas de champ toolate ???" + +#: install.php:302 +msgid "already migrated" +msgstr "déjà migré" + +#: page.findmefollow.php:71 +msgid "Warning! Extension" +msgstr "Attention ! L'Extension" + +#: page.findmefollow.php:71 +msgid "is not allowed for your account" +msgstr "n'est pas autorisée pour votre compte" + +#: page.findmefollow.php:121 page.findmefollow.php:124 +#: page.findmefollow.php:157 +msgid "Follow Me" +msgstr "Suivez-Moi" + +#: page.findmefollow.php:121 +msgid "Choose a user/extension:" +msgstr "Choisissez un utilisateur/une extension :" + +#: page.findmefollow.php:124 +msgid "deleted" +msgstr "supprimé" + +#: page.findmefollow.php:154 +msgid "Delete Entries" +msgstr "Supprimer Entrées" + +#: page.findmefollow.php:164 +msgid "User" +msgstr "Utilisateur" + +#: page.findmefollow.php:168 +msgid "Extension" +msgstr "Extension" + +#: page.findmefollow.php:171 +#, php-format +msgid "Edit %s" +msgstr "Editer %s" + +#: page.findmefollow.php:171 +#, php-format +msgid "Edit %s %s" +msgstr "Editer %s %s" + +#: page.findmefollow.php:180 +msgid "Edit Follow Me" +msgstr "Editer Suivez-Moi" + +#: page.findmefollow.php:180 +msgid "Add Follow Me" +msgstr "Ajouter Suivez-Moi" + +#: page.findmefollow.php:188 +msgid "group number" +msgstr "numéro de groupe" + +#: page.findmefollow.php:188 +msgid "The number users will dial to ring extensions in this ring group" +msgstr "Le numéro que les utilisateurs composeront pour faire sonner les extensions de ce groupe" + +#: page.findmefollow.php:194 +msgid "Disable" +msgstr "Désactiver" + +#: page.findmefollow.php:194 +msgid "" +"By default (not checked) any call to this extension will go to this Follow-" +"Me instead, including directory calls by name from IVRs. If checked, calls " +"will go only to the extension.
However, destinations that specify " +"FollowMe will come here.
Checking this box is often used in conjunction " +"with VmX Locater, where you want a call to ring the extension, and then only " +"if the caller chooses to find you do you want it to come here." +msgstr "" +"Par défaut (non coché) tous les appels pour cette extension iront vers ce " +"Suivez-Moi, incluant les appels d'IVRs. Si coché, les appels iront seulement " +"à l'extension.
Cependant, les destinations qui spécifient Suivez-Moi arriveront " +"ici.
Cocher cette case est souvent utilisé conjointement avec VmX Locater, où vous " +"voulez qu'un appel fasse sonner l'extension, et ensuite seulement si l'appelant choisit " +"de vous trouver, vous voulez que l'appel arrive ici." + +#: page.findmefollow.php:199 +msgid "Initial Ring Time:" +msgstr "Temps de Sonnerie Initial :" + +#: page.findmefollow.php:200 +msgid "" +"This is the number of seconds to ring the primary extension prior to " +"proceeding to the follow-me list. The extension can also be included in the " +"follow-me list. A 0 setting will bypass this." +msgstr "" +"Il s'agit du nombre de secondes à faire sonner l'extension primaire " +"avant de passer à la liste Suivez-Moi. L'extension peut aussi être incluse " +"dans la liste Suivez-Moi. Un paramÚtre 0 ignorera ceci." + +#: page.findmefollow.php:217 +msgid "Ring Strategy:" +msgstr "Stratégie de Sonnerie :" + +#: page.findmefollow.php:219 +msgid "ringallv2" +msgstr "Sonner Partout v2" + +#: page.findmefollow.php:219 +msgid "" +"ring primary extension for initial ring time followed by all additional " +"extensions until one answers" +msgstr "fait sonner l'extension primaire pendant le temps de sonnerie " +"initial suivi de toutes les extensions additionnelles jusqu'à qu'une réponde" + +#: page.findmefollow.php:220 +msgid "ringall" +msgstr "Sonner Partout" + +#: page.findmefollow.php:220 +msgid "ring all available channels until one answers (default)" +msgstr "fait sonner tous les canaux disponibles jusqu'à qu'un réponde (par défaut)" + +#: page.findmefollow.php:221 +msgid "hunt" +msgstr "Chasse" + +#: page.findmefollow.php:221 +msgid "take turns ringing each available extension" +msgstr "Fait sonner tour à tour chaque extension disponible" + +#: page.findmefollow.php:222 +msgid "memoryhunt" +msgstr "Chasse avec mémoire" + +#: page.findmefollow.php:222 +msgid "" +"ring first extension in the list, then ring the 1st and 2nd extension, then " +"ring 1st 2nd and 3rd extension in the list.... etc." +msgstr "" +"fait sonner la premiÚre extension dans la liste, puis fait sonner la " +"1e et la 2e extension, puis 1e, 2e et 3e extension de la liste, etc..." + +#: page.findmefollow.php:223 +msgid "*-prim" +msgstr "" + +#: page.findmefollow.php:223 +msgid "" +"these modes act as described above. However, if the primary extension (first " +"in list) is occupied, the other extensions will not be rung. If the primary " +"is FreePBX DND, it won't be rung. If the primary is FreePBX CF " +"unconditional, then all will be rung" +msgstr "" +"ces modes se agissent tel que décrit ci-dessus. Cependant, si l'extension " +"primaire (1e dans la liste) est occupée, les autres extensions ne sonneront pas. " +"Si la primaire est FreePBX Ne pas Déranger, elle ne sonnera pas. Si la primaire " +"est FreePBX Transfert d'Appel inconditionnel, alors toutes sonneront" + +#: page.findmefollow.php:224 +msgid "firstavailable" +msgstr "Premier Disponible" + +#: page.findmefollow.php:224 +msgid "ring only the first available channel" +msgstr "fait sonner uniquement le premier canal disponible" + +#: page.findmefollow.php:225 +msgid "firstnotonphone" +msgstr "Premier pas au téléphone" + +#: page.findmefollow.php:225 +msgid "ring only the first channel which is not off hook - ignore CW" +msgstr "fait sonner uniquement le premier canal qui n'est pas au téléphone - ignore les alertes d'appel " + +#: page.findmefollow.php:244 +msgid "Ring Time (max 60 sec)" +msgstr "Temps de Sonnerie (max 60 secondes)" + +#: page.findmefollow.php:246 +msgid "" +"Time in seconds that the phones will ring. For all hunt style ring " +"strategies, this is the time for each iteration of phone(s) that are rung" +msgstr "" +"Temps en secondes pendant lequel les téléphones sonneront. Pour toutes les " +"stratégies de styles de sonnerie \"Chasse\", c'est le temps pour chaque itération de téléphone qui sonne" + +#: page.findmefollow.php:254 +msgid "Follow-Me List" +msgstr "Liste Suivez-Moi" + +#: page.findmefollow.php:254 +msgid "" +"List extensions to ring, one per line, or use the Extension Quick Pick below." +"

You can include an extension on a remote system, or an external " +"number by suffixing a number with a pound (#). ex: 2448089# would dial " +"2448089 on the appropriate trunk (see Outbound Routing)." +msgstr "" +"Listez les extensions à faire sonner, une par ligne, ou utilisez l'Extension " +"Sélection Rapide ci-dessous.

Vous pouvez inclure une extension sur un " +"systÚme distant, ou un numéro externe en suffixant un numéro avec un diÚse (#). " +"exemple : 2448089# composera 2448089 sur le trunk approprié (voir Routes Sortantes)." + +#: page.findmefollow.php:269 +msgid "Extension Quick Pick" +msgstr "Extension de Sélection Rapide" + +#: page.findmefollow.php:271 +msgid "Choose an extension to append to the end of the extension list above." +msgstr "Choisissez une extension à placer à la fin de la liste d'extensions ci-dessous." + +#: page.findmefollow.php:277 +msgid "(pick extension)" +msgstr "(choisir extension)" + +#: page.findmefollow.php:290 page.findmefollow.php:308 +msgid "Announcement:" +msgstr "Annonce :" + +#: page.findmefollow.php:290 +msgid "" +"Message to be played to the caller before dialing this group.

To add " +"additional recordings please use the \"System Recordings\" MENU to the left" +msgstr "" +"Message qui sera joué à l'appelant avant de composer le numéro de ce groupe.

" +"Pour ajouter des enregistrements additionnels, veuillez utiliser le MENU \"Enregistrements " +"SystÚme\" sur la gauche" + +#: page.findmefollow.php:296 +msgid "None" +msgstr "Aucun" + +#: page.findmefollow.php:308 +msgid "" +"Message to be played to the caller before dialing this group.

You " +"must install and enable the \"Systems Recordings\" Module to edit this option" +msgstr "" +"Message qui sera joué à l'appelant avant de composer le numéro de ce groupe.

" +"Vous devez installer et activer le Module \"Enregistrements SystÚme\" pour éditer cette option" + +#: page.findmefollow.php:319 +msgid "Play Music On Hold?" +msgstr "Jouer la Musique d'Attente ?" + +#: page.findmefollow.php:319 +msgid "" +"If you select a Music on Hold class to play, instead of 'Ring', they will " +"hear that instead of Ringing while they are waiting for someone to pick up." +msgstr "" +"Si vous sélectionnez une classe de Musique d'Attente à jouer, à la place de 'Sonner', " +"ils entendront cela à la place de la Sonnerie pendant qu'ils attendent que quelqu'un " +"ne leur réponde." + +#: page.findmefollow.php:325 +msgid "Ring" +msgstr "Sonner" + +#: page.findmefollow.php:338 +msgid "CID Name Prefix" +msgstr "Préfixe de Nom CID" + +#: page.findmefollow.php:338 +msgid "" +"You can optionally prefix the Caller ID name when ringing extensions in this " +"group. ie: If you prefix with \"Sales:\", a call from John Doe would display " +"as \"Sales:John Doe\" on the extensions that ring." +msgstr "" +"Vous pouvez optionnellement préfixer le nom de l'identifiant de l'appelant " +"quand les extensions de ce groupe sonnent. Par exemple : Si vous préfixez " +"avec \"Ventes :\", un appel de John Doe affichera \"Ventes : John Doe\" sur " +"les extensions qui sonnent." + +#: page.findmefollow.php:343 +msgid "Alert Info" +msgstr "Info d'Alerte" + +#: page.findmefollow.php:343 +msgid "" +"You can optionally include an Alert Info which can create distinctive rings " +"on SIP phones." +msgstr "" +"Vous pouvez optionnellement inclure une Info d'Alerte qui peut créer des " +"sonneries différentes sur les téléphones SIP" + +#: page.findmefollow.php:348 +msgid "Confirm Calls" +msgstr "Confirmer les Appels" + +#: page.findmefollow.php:348 +msgid "" +"Enable this if you're calling external numbers that need confirmation - eg, " +"a mobile phone may go to voicemail which will pick up the call. Enabling " +"this requires the remote side push 1 on their phone before the call is put " +"through. This feature only works with the ringall/ringall-prim ring strategy" +msgstr "" +"Activez cette fonctionnalité si vous appelez des numéros extérieurs qui demandent " +"confirmation - ex : un téléphone portable ira peut-être vers la messagerie vocale " +"qui prendra l'appel. Activer ceci requiert qu'on appuye sur 1 de l'autre cÎté sur " +"les téléphones avant que l'appel ne soit transmis. Cette fonctionnalité ne fonctionne " +"qu'avec les stratégies de sonnerie Sonner Partout/Sonner Partout-prim" + +#: page.findmefollow.php:356 +msgid "Remote Announce:" +msgstr "Annonce Distante :" + +#: page.findmefollow.php:356 +msgid "" +"Message to be played to the person RECEIVING the call, if 'Confirm Calls' is " +"enabled.

To add additional recordings use the \"System Recordings\" " +"MENU to the left" +msgstr "" +"Message qui sera joué à la personne RECEVANT l'appel, si 'Confirmer les Appels' " +"est activé.

Pour ajouter des enregistrements additionnels, utilisez le " +"MENU \"Enregistrements SystÚme\" sur la gauche" + +#: page.findmefollow.php:362 page.findmefollow.php:379 +msgid "Default" +msgstr "Par Défaut" + +#: page.findmefollow.php:373 +msgid "Too-Late Announce:" +msgstr "Annonce Trop Tard :" + +#: page.findmefollow.php:373 +msgid "" +"Message to be played to the person RECEIVING the call, if the call has " +"already been accepted before they push 1.

To add additional " +"recordings use the \"System Recordings\" MENU to the left" +msgstr "" +"Message qui sera joué à la personnne RECEVANT l'appel, si l'appel a déjà " +"été accepté avant qu'ils n'appuyent sur 1.

Pour ajouter des " +"enregistrements additionnels, utilisez le MENU \"Enregistrements SystÚme\" sur la gauche" + +#: page.findmefollow.php:391 +msgid "Destination if no answer" +msgstr "Destination si pas de réponse" + +#: page.findmefollow.php:399 +msgid "Submit Changes" +msgstr "Appliquer les Modifications" + +#: page.findmefollow.php:426 +msgid "Invalid Group Number specified" +msgstr "Numéro de Groupe spécifié invalide" + +#: page.findmefollow.php:427 +msgid "Please enter an extension list." +msgstr "Veuillez entrer une liste d'extension" + +#: page.findmefollow.php:428 +msgid "Invalid prefix. Valid characters: a-z A-Z 0-9 : _ -" +msgstr "Préfixe Invalide. CaractÚres valides : a-z A-Z 0-9 : _ -" + +#: page.findmefollow.php:429 +msgid "Invalid time specified" +msgstr "Temps spécifié invalide" + +#: page.findmefollow.php:430 +msgid "Time must be between 1 and 60 seconds" +msgstr "Le temps doit être compris entre 1 et 60 secondes" + +#: page.findmefollow.php:431 +msgid "" +"Only ringall, ringallv2, hunt and the respective -prim versions are " +"supported when confirmation is checked" +msgstr "" +"Sonner Partout, Sonner Partout v2, Chasse et les versions -prim respectives " +"uniquement sont supportés lorsque confirmation est coché" Index: /modules/branches/2.10/findmefollow/uninstall.php =================================================================== --- /modules/branches/2.10/findmefollow/uninstall.php (revision 10606) +++ /modules/branches/2.10/findmefollow/uninstall.php (revision 10606) @@ -0,0 +1,34 @@ +database_deltree("AMPUSER/".$grpnum."/followme"); + } +} else { + echo _("Cannot connect to Asterisk Manager with ").$amp_conf["AMPMGRUSER"]."/".$amp_conf["AMPMGRPASS"]; +} + +sql('DROP TABLE IF EXISTS findmefollow'); + +?> Index: /modules/branches/2.10/findmefollow/module.xml =================================================================== --- /modules/branches/2.10/findmefollow/module.xml (revision 11951) +++ /modules/branches/2.10/findmefollow/module.xml (revision 11951) @@ -0,0 +1,63 @@ + + findmefollow + standard + Follow Me + 2.9.0.6 + FreePBX + GPLv2+ + + *2.9.0.6* #5011 + *2.9.0.5* #4977 + *2.9.0.4* #4815 + *2.9.0.3* #4799, #4801 + *2.9.0.2* #4758 + *2.9.0.1* #4651, #4701, #4655 + *2.9.0.0* #4646 + *2.8.0.4* #4484 + *2.8.0.3* #4383 + *2.8.0.2* #4324 + *2.8.0.1* #4294 + *2.8.0.0* version bump + *2.7.0.4* localizations + *2.7.0.3* #4051 (requires MoH 2.7.0.0 or above) + *2.7.0.2* debug statement removed + *2.7.0.1* #4026 + *2.7.0.0* #1718 + *2.6.0.1* #3780 + *2.6.0.0* localizations, misc + *2.5.1.7* #3274, localization string enclosures + *2.5.1.6* #3246, #3215, localization fixes + *2.5.1.5* #3222 sqlite3 + *2.5.1.4* localization, Swedish + *2.5.1.3* #3177 don't auto-add vmbox dest to users with novm + *2.5.1.2* #3152, #3165, set voicemail as default dest on new followme + *2.5.1.1* #2987, #3006, #3029 sqlite3 install, spelling, cidprefix missing fix + *2.5.1* #2065 Migrate recordings to recording ids + *2.5.0.1* #2391, #2908, #2845, #1791, added delete and add icons + *2.5.0* Add enable/disable featurecode with blf support, new confirmation sound file announces cid availability + *2.4.14.2* #2604, #2843 fix mal-formed html tags, Russian Translation + *2.4.14.1* added depends on 2.4.0 + *2.4.14* Extension/dest registry, extension quickpick, added hunt strategy with confirmation, it trans, formatting changes + *2.4.13.2* #2193 moh path hardcoded + *2.4.13.1* bump for rc1 + *2.4.13* added xml attribute needsenginedb, #1961 enabled to work with extension numbers leading with 0s + *2.4.12.3* #2057 don't strip CID prefix if no prefix is being added + *2.4.12.2* merge findmefollow/core extension destinations if any, and remove findmefollow destinations as a destination since they are handled by core + *2.4.12.1* #2002 IF() statement can't handle : in the string and can't escape them anyhow + *2.4.12* CHANGELOG TRUNCATED See SVN Repository + + + 2.5.0alpha1 + recordings ge 3.3.8 + + setup + Inbound Call Control + + Much like a ring group, but works on individual extensions. When someone calls the extension, it can be setup to ring for a number of seconds before trying to ring other extensions and/or external numbers, or to ring all at once, or in other various 'hunt' configurations. Most commonly used to ring someone's cell phone if they don't answer their extension. + + + Follow Me + + release/2.9/findmefollow-2.9.0.6.tgz + 7414c8711b168ec59270861770a10db9 + Index: /modules/branches/2.10/findmefollow/functions.inc.php =================================================================== --- /modules/branches/2.10/findmefollow/functions.inc.php (revision 11933) +++ /modules/branches/2.10/findmefollow/functions.inc.php (revision 11933) @@ -0,0 +1,602 @@ +escapeSimple($extdisplay)."'","getOne"); + + // return an associative array with destination and description + if ($grpnum != '') { + $extens[] = array('destination' => 'ext-findmefollow,FM'.$grpnum.',1', 'description' => _("Force Follow Me")); + return $extens; + } else { + return null; + } +} + +function findmefollow_get_config($engine) { + global $ext; // is this the best way to pass this? + global $amp_conf; + switch($engine) { + case "asterisk": + if ($amp_conf['USEDEVSTATE']) { + $ext->addGlobal('FMDEVSTATE','TRUE'); + } + + $fcc = new featurecode('findmefollow', 'fmf_toggle'); + $fmf_code = $fcc->getCodeActive(); + unset($fcc); + + if ($fmf_code != '') { + findmefollow_fmf_toggle($fmf_code); + } + + $ext->addInclude('from-internal-additional','ext-findmefollow'); + $ext->addInclude('from-internal-additional','fmgrps'); + $contextname = 'ext-findmefollow'; + + // Before creating all the contexts, let's make a list of hints if needed + // + if ($amp_conf['USEDEVSTATE'] && $fmf_code != '') { + $device_list = core_devices_list("all", 'full', true); + foreach ($device_list as $device) { + if ($device['tech'] == 'sip' || $device['tech'] == 'iax2') { + $ext->add($contextname, $fmf_code.$device['id'], '', new ext_goto("1",$fmf_code,"app-fmf-toggle")); + $ext->addHint($contextname, $fmf_code.$device['id'], "Custom:FOLLOWME".$device['id']); + } + } + } + + $ringlist = findmefollow_full_list(); + if (is_array($ringlist)) { + foreach($ringlist as $item) { + $grpnum = ltrim($item['0']); + $grp = findmefollow_get($grpnum); + + $strategy = $grp['strategy']; + $grptime = $grp['grptime']; + $grplist = $grp['grplist']; + $postdest = $grp['postdest']; + $grppre = (isset($grp['grppre'])?$grp['grppre']:''); + $annmsg_id = $grp['annmsg_id']; + $dring = $grp['dring']; + + $needsconf = $grp['needsconf']; + $remotealert_id = $grp['remotealert_id']; + $toolate_id = $grp['toolate_id']; + $ringing = $grp['ringing']; + $pre_ring = $grp['pre_ring']; + + if($ringing == 'Ring' || empty($ringing) ) { + $dialopts = '${DIAL_OPTIONS}'; + } else { + // We need the DIAL_OPTIONS variable + if (!isset($sops)) { + $sops = sql("SELECT value from globals where variable='DIAL_OPTIONS'", "getRow"); + } + $dialopts = "m(${ringing})".str_replace('r', '', $sops[0]); + } + + // Direct target to Follow-Me come here bypassing the followme/ddial conditional check + // + $ext->add($contextname, 'FM'.$grpnum, '', new ext_goto("FM$grpnum","$grpnum")); + + // + // If the followme is configured for extension dialing to go to the the extension and not followme then + // go there. This is often used in VmX Locater functionality when the user does not want the followme + // to automatically be called but only if chosen by the caller as an alternative to going to voicemail + // + $ext->add($contextname, $grpnum, '', new ext_gotoif('$[ "${DB(AMPUSER/'.$grpnum.'/followme/ddial)}" = "EXTENSION" ]', 'ext-local,'.$grpnum.',1')); + $ext->add($contextname, $grpnum, 'FM'.$grpnum, new ext_macro('user-callerid')); + $ext->add($contextname, $grpnum, '', new ext_set('__EXTTOCALL','${EXTEN}')); + $ext->add($contextname, $grpnum, '', new ext_set('__PICKUPMARK','${EXTEN}')); + + // block voicemail until phone is answered at which point a macro should be called on the answering + // line to clear this flag so that subsequent transfers can occur, if already set by a the caller + // then don't change. + // + $ext->add($contextname, $grpnum, '', new ext_macro('blkvm-setifempty')); + $ext->add($contextname, $grpnum, '', new ext_gotoif('$["${GOSUB_RETVAL}" = "TRUE"]', 'skipov')); + $ext->add($contextname, $grpnum, '', new ext_macro('blkvm-set','reset')); + $ext->add($contextname, $grpnum, '', new ext_setvar('__NODEST', '')); + + // Remember if NODEST was set later, but clear it in case the call is answered so that subsequent + // transfers work. + // + $ext->add($contextname, $grpnum, 'skipov', new ext_setvar('RRNODEST', '${NODEST}')); + $ext->add($contextname, $grpnum, 'skipvmblk', new ext_setvar('__NODEST', '${EXTEN}')); + + $ext->add($contextname, $grpnum, '', new ext_gosubif('$[${DB_EXISTS(AMPUSER/'.$grpnum.'/followme/changecid)} = 1 & "${DB(AMPUSER/'.$grpnum.'/followme/changecid)}" != "default" & "${DB(AMPUSER/'.$grpnum.'/followme/changecid)}" != ""]', 'sub-fmsetcid,s,1')); + + + // deal with group CID prefix + if ($grppre != '') { + $ext->add($contextname, $grpnum, '', new ext_macro('prepend-cid', $grppre)); + } + // recording stuff + $ext->add($contextname, $grpnum, '', new ext_setvar('RecordMethod','Group')); + // append the followme's extension to the grouplist. This may be redundant but will ensure recording if the extension itself is not part of + // the list + $ext->add($contextname, $grpnum, '', new ext_macro('record-enable','${DB(AMPUSER/'."$grpnum/followme/grplist)}-$grpnum".',${RecordMethod}')); + + // MODIFIED (PL) + // Add Alert Info if set but don't override and already set value (could be from ringgroup, directdid, etc.) + // + if ((isset($dring) ? $dring : '') != '') { + // If ALERTINFO is set, then skip to the next set command. This was modified to two lines because the previous + // IF() couldn't handle ':' as part of the string. The jump to PRIORITY+2 allows for now destination label + // which is needed in the 2.3 version. + $ext->add($contextname, $grpnum, '', new ext_gotoif('$["x${ALERT_INFO}"!="x"]','$[${PRIORITY}+2])}')); + $ext->add($contextname, $grpnum, '', new ext_setvar("__ALERT_INFO", str_replace(';', '\;', $dring) )); + } + // If pre_ring is set, then ring this number of seconds prior to moving on + if ((isset($strategy) ? substr($strategy,0,strlen('ringallv2')) : '') != 'ringallv2') { + $ext->add($contextname, $grpnum, '', new ext_gotoif('$[$[ "${DB(AMPUSER/'.$grpnum.'/followme/prering)}" = "0" ] | $[ "${DB(AMPUSER/'.$grpnum.'/followme/prering)}" = "" ]] ', 'skipsimple')); + $ext->add($contextname, $grpnum, '', new ext_macro('simple-dial',$grpnum.',${DB(AMPUSER/'."$grpnum/followme/prering)}")); + } + + // group dial + $ext->add($contextname, $grpnum, 'skipsimple', new ext_setvar('RingGroupMethod',$strategy)); + $ext->add($contextname, $grpnum, '', new ext_setvar('_FMGRP',$grpnum)); + + if ((isset($annmsg_id) ? $annmsg_id : '')) { + $annmsg = recordings_get_file($annmsg_id); + // should always answer before playing anything, shouldn't we ? + $ext->add($contextname, $grpnum, '', new ext_gotoif('$[$["${DIALSTATUS}" = "ANSWER"] | $["foo${RRNODEST}" != "foo"]]','DIALGRP')); + $ext->add($contextname, $grpnum, '', new ext_answer('')); + $ext->add($contextname, $grpnum, '', new ext_wait(1)); + $ext->add($contextname, $grpnum, '', new ext_playback($annmsg)); + } + + // Create the confirm target + $len=strlen($grpnum)+4; + $remotealert = recordings_get_file($remotealert_id); + $toolate = recordings_get_file($toolate_id); + $ext->add("fmgrps", "_RG-${grpnum}-.", '', new ext_macro('dial','${DB(AMPUSER/'."$grpnum/followme/grptime)},$dialopts" . "M(confirm^${remotealert}^${toolate}^${grpnum})".',${EXTEN:'.$len.'}')); + + // If grpconf == ENABLED call with confirmation ELSE call normal + $ext->add($contextname, $grpnum, 'DIALGRP', new + ext_gotoif('$[("${DB(AMPUSER/'.$grpnum.'/followme/grpconf)}"="ENABLED") | ("${FORCE_CONFIRM}"!="") ]', 'doconfirm')); + + // Normal call + if ((isset($strategy) ? substr($strategy,0,strlen('ringallv2')) : '') != 'ringallv2') { + $ext->add($contextname, $grpnum, '', new ext_macro('dial','${DB(AMPUSER/'."$grpnum/followme/grptime)},$dialopts,".'${DB(AMPUSER/'."$grpnum/followme/grplist)}")); + } else { + $ext->add($contextname, $grpnum, '', new ext_macro('dial','$[ ${DB(AMPUSER/'.$grpnum.'/followme/grptime)} + ${DB(AMPUSER/'.$grpnum.'/followme/prering)} ],'.$dialopts.',${DB(AMPUSER/'.$grpnum.'/followme/grplist)}')); + } + $ext->add($contextname, $grpnum, '', new ext_goto('nextstep')); + + // Call Confirm call + if ((isset($strategy) ? substr($strategy,0,strlen('ringallv2')) : '') != 'ringallv2') { + $ext->add($contextname, $grpnum, 'doconfirm', new ext_macro('dial-confirm','${DB(AMPUSER/'."$grpnum/followme/grptime)},$dialopts,".'${DB(AMPUSER/'."$grpnum/followme/grplist)},".$grpnum)); + } else { + $ext->add($contextname, $grpnum, 'doconfirm', new ext_macro('dial-confirm','$[ ${DB(AMPUSER/'.$grpnum.'/followme/grptime)} + ${DB(AMPUSER/'.$grpnum.'/followme/prering)} ],'.$dialopts.',${DB(AMPUSER/'.$grpnum.'/followme/grplist)},'.$grpnum)); + } + + $ext->add($contextname, $grpnum, 'nextstep', new ext_setvar('RingGroupMethod','')); + + // Did the call come from a queue or ringgroup, if so, don't go to the destination, just end and let + // the queue or ringgroup decide what to do next + // + $ext->add($contextname, $grpnum, '', new ext_gotoif('$["foo${RRNODEST}" != "foo"]', 'nodest')); + $ext->add($contextname, $grpnum, '', new ext_setvar('__NODEST', '')); + $ext->add($contextname, $grpnum, '', new ext_set('__PICKUPMARK','')); + $ext->add($contextname, $grpnum, '', new ext_macro('blkvm-clr')); + + // where next? + if ((isset($postdest) ? $postdest : '') != '') { + $ext->add($contextname, $grpnum, '', new ext_goto($postdest)); + } else { + $ext->add($contextname, $grpnum, '', new ext_hangup('')); + } + $ext->add($contextname, $grpnum, 'nodest', new ext_noop('SKIPPING DEST, CALL CAME FROM Q/RG: ${RRNODEST}')); + } + + /* + ASTDB Settings: + AMPUSER/nnn/followme/changecid default | did | fixed | extern + AMPUSER/nnn/followme/fixedcid XXXXXXXX + + changecid: + default - works as always, same as if not present + fixed - set to the fixedcid + extern - set to the fixedcid if the call is from the outside only + did - set to the DID that the call came in on or leave alone, treated as foreign + forcedid - set to the DID that the call came in on or leave alone, not treated as foreign + + EXTTOCALL - has the exten num called, hoaky if that goes away but for now use it + */ + if (count($ringlist)) { + $contextname = 'sub-fmsetcid'; + $exten = 's'; + $ext->add($contextname, $exten, '', new ext_goto('1','s-${DB(AMPUSER/${EXTTOCALL}/followme/changecid)}')); + + $exten = 's-fixed'; + $ext->add($contextname, $exten, '', new ext_execif('$["${REGEX("^[\+]?[0-9]+$" ${DB(AMPUSER/${EXTTOCALL}/followme/fixedcid)})}" = "1"]', 'Set', '__TRUNKCIDOVERRIDE=${DB(AMPUSER/${EXTTOCALL}/followme/fixedcid)}')); + $ext->add($contextname, $exten, '', new ext_return('')); + + $exten = 's-extern'; + $ext->add($contextname, $exten, '', new ext_execif('$["${REGEX("^[\+]?[0-9]+$" ${DB(AMPUSER/${EXTTOCALL}/followme/fixedcid)})}" == "1" & "${FROM_DID}" != ""]', 'Set', '__TRUNKCIDOVERRIDE=${DB(AMPUSER/${EXTTOCALL}/followme/fixedcid)}')); + $ext->add($contextname, $exten, '', new ext_return('')); + + $exten = 's-did'; + $ext->add($contextname, $exten, '', new ext_execif('$["${REGEX("^[\+]?[0-9]+$" ${FROM_DID})}" = "1"]', 'Set', '__REALCALLERIDNUM=${FROM_DID}')); + $ext->add($contextname, $exten, '', new ext_return('')); + + $exten = 's-forcedid'; + $ext->add($contextname, $exten, '', new ext_execif('$["${REGEX("^[\+]?[0-9]+$" ${FROM_DID})}" = "1"]', 'Set', '__TRUNKCIDOVERRIDE=${FROM_DID}')); + $ext->add($contextname, $exten, '', new ext_return('')); + + $exten = '_s-.'; + $ext->add($contextname, $exten, '', new ext_noop('Unknown value for AMPUSER/${EXTTOCALL}/followme/changecid of ${DB(AMPUSER/${EXTTOCALL}/followme/changecid)} set to "default"')); + $ext->add($contextname, $exten, '', new ext_setvar('DB(AMPUSER/${EXTTOCALL}/followme/changecid)', 'default')); + $ext->add($contextname, $exten, '', new ext_return('')); + } + } + break; + } +} + +function findmefollow_add($grpnum,$strategy,$grptime,$grplist,$postdest,$grppre='',$annmsg_id='',$dring,$needsconf,$remotealert_id,$toolate_id,$ringing,$pre_ring,$ddial,$changecid='default',$fixedcid='') { + global $amp_conf; + global $astman; + global $db; + + $sql = "INSERT INTO findmefollow (grpnum, strategy, grptime, grppre, grplist, annmsg_id, postdest, dring, needsconf, remotealert_id, toolate_id, ringing, pre_ring) VALUES ('".$db->escapeSimple($grpnum)."', '".$db->escapeSimple($strategy)."', ".$db->escapeSimple($grptime).", '".$db->escapeSimple($grppre)."', '".$db->escapeSimple($grplist)."', '".$db->escapeSimple($annmsg_id)."', '".$db->escapeSimple($postdest)."', '".$db->escapeSimple($dring)."', '$needsconf', '$remotealert_id', '$toolate_id', '$ringing', '$pre_ring')"; + $results = sql($sql); + + if ($astman) { + $astman->database_put("AMPUSER",$grpnum."/followme/prering",isset($pre_ring)?$pre_ring:''); + $astman->database_put("AMPUSER",$grpnum."/followme/grptime",isset($grptime)?$grptime:''); + $astman->database_put("AMPUSER",$grpnum."/followme/grplist",isset($grplist)?$grplist:''); + + $needsconf = isset($needsconf)?$needsconf:''; + $confvalue = ($needsconf == 'CHECKED')?'ENABLED':'DISABLED'; + $astman->database_put("AMPUSER",$grpnum."/followme/grpconf",$confvalue); + + $ddial = isset($ddial)?$ddial:''; + $ddialvalue = ($ddial == 'CHECKED')?'EXTENSION':'DIRECT'; + $astman->database_put("AMPUSER",$grpnum."/followme/ddial",$ddialvalue); + + $astman->database_put("AMPUSER",$grpnum."/followme/changecid",$changecid); + $fixedcid = preg_replace("/[^0-9\+]/" ,"", trim($fixedcid)); + $astman->database_put("AMPUSER",$grpnum."/followme/fixedcid",$fixedcid); + } else { + fatal("Cannot connect to Asterisk Manager with ".$amp_conf["AMPMGRUSER"]."/".$amp_conf["AMPMGRPASS"]); + } +} + +function findmefollow_del($grpnum) { + global $amp_conf; + global $astman; + global $db; + + $results = sql("DELETE FROM findmefollow WHERE grpnum = '".$db->escapeSimple($grpnum)."'","query"); + + if ($astman) { + $astman->database_deltree("AMPUSER/".$grpnum."/followme"); + } else { + fatal("Cannot connect to Asterisk Manager with ".$amp_conf["AMPMGRUSER"]."/".$amp_conf["AMPMGRPASS"]); + } +} + +function findmefollow_full_list() { + $results = sql("SELECT grpnum FROM findmefollow ORDER BY CAST(grpnum as UNSIGNED)","getAll",DB_FETCHMODE_ASSOC); + foreach ($results as $result) { + if (isset($result['grpnum']) && checkRange($result['grpnum'])) { + $grps[] = array($result['grpnum']); + } + } + if (isset($grps)) + return $grps; + else + return null; +} + +function findmefollow_list($get_all=false) { + + global $db; + $sql = "SELECT grpnum FROM findmefollow ORDER BY CAST(grpnum as UNSIGNED)"; + $results = $db->getCol($sql); + if(DB::IsError($results)) { + $results = null; + } + if (isset($results)) { + foreach($results as $result) { + if ($get_all || checkRange($result)){ + $grps[] = $result; + } + } + } + if (isset($grps)) { + return $grps; + } + else { + return null; + } +} + +// This gets the list of all active users so that the Find Me Follow display can limit the options to only created users. +// the returned arrays contain [0]:extension [1]:name +// +// This was pulled straight out of previous 1.x version, might need cleanup laster +// +function findmefollow_allusers() { + global $db; + $sql = "SELECT extension,name FROM users ORDER BY extension"; + $results = $db->getAll($sql); + if(DB::IsError($results)) { + $results = null; + } + foreach($results as $result){ + if (checkRange($result[0])){ + $users[] = array($result[0],$result[1]); + } + } + if (isset($users)) sort($users); + return $users; +} + +// Only check astdb if check_astdb is not 0. For some reason, this fails if the asterisk manager code +// is included (executed) by all calls to this function. This results in silently not generating the +// extensions_additional.conf file. page.findmefollow.php does set it to 1 which means that when running +// the GUI, any changes not reflected in SQL will be detected and written back to SQL so that they are +// in sync. Ideally, anything that changes the astdb should change SQL. (in some ways, these should both +// not be here but ... +// +// Need to go back and confirm at some point that the $check_astdb error is still there and deal with it. +// as variables like $ddial get introduced to only be in astdb, the result array will not include them +// if not able to get to astdb. (I suspect in 2.2 and beyond this may all be fixed). +// +function findmefollow_get($grpnum, $check_astdb=0) { + global $amp_conf; + global $astman; + global $db; + + $results = sql("SELECT grpnum, strategy, grptime, grppre, grplist, annmsg_id, postdest, dring, needsconf, remotealert_id, toolate_id, ringing, pre_ring, voicemail FROM findmefollow INNER JOIN `users` ON `extension` = `grpnum` WHERE grpnum = '".$db->escapeSimple($grpnum)."'","getRow",DB_FETCHMODE_ASSOC); + if (!isset($results['voicemail'])) { + $results['voicemail'] = sql("SELECT `voicemail` FROM `users` WHERE `extension` = '".$db->escapeSimple($grpnum)."'","getOne"); + } + + if ($check_astdb) { + if ($astman) { + $astdb_prering = $astman->database_get("AMPUSER",$grpnum."/followme/prering"); + $astdb_grptime = $astman->database_get("AMPUSER",$grpnum."/followme/grptime"); + $astdb_grplist = $astman->database_get("AMPUSER",$grpnum."/followme/grplist"); + $astdb_grpconf = $astman->database_get("AMPUSER",$grpnum."/followme/grpconf"); + + $astdb_changecid = strtolower($astman->database_get("AMPUSER",$grpnum."/followme/changecid")); + switch($astdb_changecid) { + case 'default': + case 'did': + case 'forcedid': + case 'fixed': + case 'extern': + break; + default: + $astdb_changecid = 'default'; + } + $results['changecid'] = $astdb_changecid; + $fixedcid = $astman->database_get("AMPUSER",$grpnum."/followme/fixedcid"); + $results['fixedcid'] = preg_replace("/[^0-9\+]/" ,"", trim($fixedcid)); + } else { + fatal("Cannot connect to Asterisk Manager with ".$amp_conf["AMPMGRUSER"]."/".$amp_conf["AMPMGRPASS"]); + } + $astdb_ddial = $astman->database_get("AMPUSER",$grpnum."/followme/ddial"); + // If the values are different then use what is in astdb as it may have been changed. + // + $changed=0; + if (!isset($results['pre_ring'])) { + $results['pre_ring'] = ''; + } + if (!isset($results['grptime'])) { + $results['grptime'] = ''; + } + if (!isset($results['grplist'])) { + $results['grplist'] = ''; + } + if (!isset($results['needsconf'])) { + $results['needsconf'] = ''; + } + if (($astdb_prering != $results['pre_ring']) && ($astdb_prering >= 0)) { + $results['pre_ring'] = $astdb_prering; + $changed=1; + } + if (($astdb_grptime != $results['grptime']) && ($astdb_grptime > 0)) { + $results['grptime'] = $astdb_grptime; + $changed=1; + } + if ((trim($astdb_grplist) != trim($results['grplist'])) && (trim($astdb_grplist) != '')) { + $results['grplist'] = $astdb_grplist; + $changed=1; + } + + if (trim($astdb_grpconf) == 'ENABLED') { + $confvalue = 'CHECKED'; + } elseif (trim($astdb_grpconf) == 'DISABLED') { + $confvalue = ''; + } else { + //Bogus value, should not get here but treat as disabled + $confvalue = ''; + } + if ($confvalue != trim($results['needsconf'])) { + $results['needsconf'] = $confvalue; + $changed=1; + } + + // Not in sql so no sanity check needed + // + if (trim($astdb_ddial) == 'EXTENSION') { + $ddial = 'CHECKED'; + } elseif (trim($astdb_ddial) == 'DIRECT') { + $ddial = ''; + } else { + //Bogus value, should not get here but treat as disabled + $ddial = ''; + } + $results['ddial'] = $ddial; + + if ($changed) { + $sql = "UPDATE findmefollow SET grptime = '".$results['grptime']."', grplist = '". + $db->escapeSimple(trim($results['grplist']))."', pre_ring = '".$results['pre_ring']. + "', needsconf = '".$results['needsconf']."' WHERE grpnum = '".$db->escapeSimple($grpnum)."' LIMIT 1"; + $sql_results = sql($sql); + } + } // if check_astdb + + return $results; +} + +function findmefollow_configpageinit($dispnum) { + global $currentcomponent; + + if ( ($dispnum == 'users' || $dispnum == 'extensions') ) { + $currentcomponent->addguifunc('findmefollow_configpageload'); + } +} + +function findmefollow_configpageload() { + global $currentcomponent; + + $viewing_itemid = isset($_REQUEST['extdisplay'])?$_REQUEST['extdisplay']:null; + $action = isset($_REQUEST['action'])?$_REQUEST['action']:null; + if ( $viewing_itemid != '' && $action != 'del') { + $set_findmefollow = findmefollow_list(); + $grpURL = $_SERVER['PHP_SELF'].'?'.'display=findmefollow&extdisplay=GRP-'.$viewing_itemid; + if (is_array($set_findmefollow)) { + if (in_array($viewing_itemid,$set_findmefollow)) { + $grpTEXT = _("Edit Follow Me Settings"); + $icon = "images/user_go.png"; + } else { + $grpTEXT = _("Add Follow Me Settings"); + $icon = "images/user_add.png"; + } + } else { + $grpTEXT = _("Add Follow Me Settings"); + $icon = "images/user_add.png"; + } + $label = ' '.$grpTEXT.''; + $currentcomponent->addguielem('_top', new gui_link('findmefollowlink', $label, $grpURL)); + } +} + +function findmefollow_check_destinations($dest=true) { + global $active_modules; + + $destlist = array(); + if (is_array($dest) && empty($dest)) { + return $destlist; + } + $sql = "SELECT grpnum, postdest, name FROM findmefollow INNER JOIN users ON grpnum = extension "; + if ($dest !== true) { + $sql .= "WHERE postdest in ('".implode("','",$dest)."')"; + } + $results = sql($sql,"getAll",DB_FETCHMODE_ASSOC); + + //$type = isset($active_modules['announcement']['type'])?$active_modules['announcement']['type']:'setup'; + + foreach ($results as $result) { + $thisdest = $result['postdest']; + $thisid = $result['grpnum']; + $destlist[] = array( + 'dest' => $thisdest, + 'description' => sprintf(_("Follow-Me: %s (%s)"),$thisid,$result['name']), + 'edit_url' => 'config.php?display=findmefollow&extdisplay=GRP-'.urlencode($thisid), + ); + } + return $destlist; +} + +function findmefollow_change_destination($old_dest, $new_dest) { + $sql = 'UPDATE findmefollow SET postdest = "' . $new_dest . '" WHERE postdest = "' . $old_dest . '"'; + sql($sql, "query"); +} + + +function findmefollow_recordings_usage($recording_id) { + global $active_modules; + + $results = sql("SELECT `grpnum` FROM `findmefollow` WHERE `annmsg_id` = '$recording_id' OR `remotealert_id` = '$recording_id' OR `toolate_id` = '$recording_id'","getAll",DB_FETCHMODE_ASSOC); + if (empty($results)) { + return array(); + } else { + //$type = isset($active_modules['ivr']['type'])?$active_modules['ivr']['type']:'setup'; + foreach ($results as $result) { + $usage_arr[] = array( + 'url_query' => 'config.php?display=findmefollow&extdisplay=GRP-'.urlencode($result['grpnum']), + 'description' => sprintf(_("Follow-Me User: %s"),$result['grpnum']), + ); + } + return $usage_arr; + } +} + +function findmefollow_fmf_toggle($c) { + global $ext; + global $amp_conf; + global $version; + + $id = "app-fmf-toggle"; // The context to be included + $ext->addInclude('from-internal-additional', $id); // Add the include from from-internal + + $ext->add($id, $c, '', new ext_goto('start','s',$id)); + $c = 's'; + + $ext->add($id, $c, 'start', new ext_answer('')); + $ext->add($id, $c, '', new ext_wait('1')); + $ext->add($id, $c, '', new ext_macro('user-callerid')); + + $ext->add($id, $c, '', new ext_gotoif('$["${DB(AMPUSER/${AMPUSER}/followme/ddial)}" = "EXTENSION"]', 'activate')); + $ext->add($id, $c, '', new ext_gotoif('$["${DB(AMPUSER/${AMPUSER}/followme/ddial)}" = "DIRECT"]', 'deactivate','end')); + + $ext->add($id, $c, 'deactivate', new ext_setvar('DB(AMPUSER/${AMPUSER}/followme/ddial)', 'EXTENSION')); + if ($amp_conf['USEDEVSTATE']) { + $ext->add($id, $c, '', new ext_setvar('STATE', 'NOT_INUSE')); + $ext->add($id, $c, '', new ext_gosub('1', 'sstate', $id)); + } + if ($amp_conf['FCBEEPONLY']) { + $ext->add($id, $c, 'hook_off', new ext_playback('beep')); // $cmd,n,Playback(...) + } else { + $ext->add($id, $c, 'hook_off', new ext_playback('followme&de-activated')); + } + $ext->add($id, $c, 'end', new ext_macro('hangupcall')); + + $ext->add($id, $c, 'activate', new ext_setvar('DB(AMPUSER/${AMPUSER}/followme/ddial)', 'DIRECT')); + if ($amp_conf['USEDEVSTATE']) { + $ext->add($id, $c, '', new ext_setvar('STATE', 'INUSE')); + $ext->add($id, $c, '', new ext_gosub('1', 'sstate', $id)); + } + if ($amp_conf['FCBEEPONLY']) { + $ext->add($id, $c, 'hook_on', new ext_playback('beep')); // $cmd,n,Playback(...) + } else { + $ext->add($id, $c, 'hook_on', new ext_playback('followme&activated')); + } + $ext->add($id, $c, '', new ext_macro('hangupcall')); + + if ($amp_conf['USEDEVSTATE']) { + $c = 'sstate'; + $ext->add($id, $c, '', new ext_dbget('DEVICES','AMPUSER/${AMPUSER}/device')); + $ext->add($id, $c, '', new ext_gotoif('$["${DEVICES}" = "" ]', 'return')); + $ext->add($id, $c, '', new ext_setvar('LOOPCNT', '${FIELDQTY(DEVICES,&)}')); + $ext->add($id, $c, '', new ext_setvar('ITER', '1')); + $ext->add($id, $c, 'begin', new ext_setvar($amp_conf['AST_FUNC_DEVICE_STATE'].'(Custom:FOLLOWME${CUT(DEVICES,&,${ITER})})','${STATE}')); + $ext->add($id, $c, '', new ext_setvar('ITER', '$[${ITER} + 1]')); + $ext->add($id, $c, '', new ext_gotoif('$[${ITER} <= ${LOOPCNT}]', 'begin')); + $ext->add($id, $c, 'return', new ext_return()); + } +} +?> Index: /modules/branches/2.10/findmefollow/page.findmefollow.php =================================================================== --- /modules/branches/2.10/findmefollow/page.findmefollow.php (revision 11785) +++ /modules/branches/2.10/findmefollow/page.findmefollow.php (revision 11785) @@ -0,0 +1,514 @@ +javascript:alert('". _("Warning! Extension")." ".$account." "._("is not allowed for your account").".');"; + } else { + //add group + if ($action == 'addGRP') { + findmefollow_add($account,$strategy,$grptime,implode("-",$grplist),$goto,$grppre,$annmsg_id,$dring,$needsconf,$remotealert_id,$toolate_id,$ringing,$pre_ring,$ddial,$changecid,$fixedcid); + + needreload(); + redirect_standard(); + } + + //del group + if ($action == 'delGRP') { + findmefollow_del($account); + needreload(); + redirect_standard(); + } + + //edit group - just delete and then re-add the extension + if ($action == 'edtGRP') { + findmefollow_del($account); + findmefollow_add($account,$strategy,$grptime,implode("-",$grplist),$goto,$grppre,$annmsg_id,$dring,$needsconf,$remotealert_id,$toolate_id,$ringing,$pre_ring,$ddial,$changecid,$fixedcid); + + needreload(); + redirect_standard('extdisplay'); + } + } +} +?> + + + + +
+

'._("Follow Me").'


'._('Choose a user/extension:').'








'; + } +elseif ($action == 'delGRP') { + echo '

'._("Follow Me").' '.$account.' '._("deleted").'!









'; +} else { + if ($extdisplay != "") { + // We need to populate grplist with the existing extension list. + $extdisplay = ltrim($extdisplay,'GRP-'); + + $thisgrp = findmefollow_get($extdisplay, 1); + $grpliststr = isset($thisgrp['grplist']) ? $thisgrp['grplist'] : ''; + $grplist = explode("-", $grpliststr); + + $strategy = isset($thisgrp['strategy']) ? $thisgrp['strategy'] : ''; + $grppre = isset($thisgrp['grppre']) ? $thisgrp['grppre'] : ''; + $grptime = isset($thisgrp['grptime']) ? $thisgrp['grptime'] : ''; + $annmsg_id = isset($thisgrp['annmsg_id']) ? $thisgrp['annmsg_id'] : ''; + $dring = isset($thisgrp['dring']) ? $thisgrp['dring'] : ''; + $remotealert_id = isset($thisgrp['remotealert_id']) ? $thisgrp['remotealert_id'] : ''; + $needsconf = isset($thisgrp['needsconf']) ? $thisgrp['needsconf'] : ''; + $toolate_id = isset($thisgrp['toolate_id']) ? $thisgrp['toolate_id'] : ''; + $ringing = isset($thisgrp['ringing']) ? $thisgrp['ringing'] : ''; + $pre_ring = isset($thisgrp['pre_ring']) ? $thisgrp['pre_ring'] : ''; + $ddial = isset($thisgrp['ddial']) ? $thisgrp['ddial'] : ''; + $changecid = isset($thisgrp['changecid']) ? $thisgrp['changecid'] : 'default'; + $fixedcid = isset($thisgrp['fixedcid']) ? $thisgrp['fixedcid'] : ''; + $goto = isset($thisgrp['postdest'])?$thisgrp['postdest']:((isset($thisgrp['voicemail']) && $thisgrp['voicemail'] != 'novm')?"ext-local,vmu$extdisplay,1":''); + unset($grpliststr); + unset($thisgrp); + + $delButton = " +
+ + + + +
"; + + echo "

"._("Follow Me").": ".$extdisplay."

"; + + + // Copied straight out of old code,let's see if it works? + // + if (isset($amp_conf["AMPEXTENSIONS"]) && ($amp_conf["AMPEXTENSIONS"] == "deviceanduser")) { + $editURL = $_SERVER['PHP_SELF'].'?display=users&extdisplay='.$extdisplay; + $EXTorUSER = _("User"); + } + else { + $editURL = $_SERVER['PHP_SELF'].'?display=extensions&extdisplay='.$extdisplay; + $EXTorUSER = _("Extension"); + } + + $label = ' '.sprintf(_("Edit %s %s"),$EXTorUSER, $extdisplay).''; + echo "

".$label."

"; + echo "

".$delButton."

"; + } + ?> +
+ + "> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

:
However, destinations that specify FollowMe will come here.
Checking this box is often used in conjunction with VmX Locater, where you want a call to ring the extension, and then only if the caller chooses to find you do you want it to come here.')?>
:
tabindex=""/>
+ + + + +
+ + + :
+ :
+ :
+ :
+ :
+ :
+ :
+
+
+
+ +
+ + + + + +
:

You can include an extension on a remote system, or an external number by suffixing a number with a pound (#). ex: 2448089# would dial 2448089 on the appropriate trunk (see Outbound Routing).")?>

+ 20) ? 20 : $rows); +?> + +
+ + + + + + + +

To add additional recordings please use the \"System Recordings\" MENU to the left")?>
+ +

You must install and enable the \"Systems Recordings\" Module to edit this option")?>
+ + +
+ +
:
:

: + tabindex=""/> +

To add additional recordings use the \"System Recordings\" MENU to the left")?>
+ +

To add additional recordings use the \"System Recordings\" MENU to the left")?>
+ +

+ : + + :
+ :
+ :
+ :
+ :
+
+
+
+ +
:>

:

" tabindex="">
+
+ + + Index: /modules/branches/2.10/findmefollow/install.php =================================================================== --- /modules/branches/2.10/findmefollow/install.php (revision 11109) +++ /modules/branches/2.10/findmefollow/install.php (revision 11109) @@ -0,0 +1,294 @@ +query($sql); +if(DB::IsError($check)) { + die_freepbx("Can not create annoucment table"); +} + +//TODO: Also need to create all the states if enabled + +$fcc = new featurecode('findmefollow', 'fmf_toggle'); +$fcc->setDescription('Findme Follow Toggle'); +$fcc->setDefault('*21'); +$fcc->update(); +unset($fcc); + +// Adding support for a pre_ring before follow-me group +$sql = "SELECT pre_ring FROM findmefollow"; +$check = $db->getRow($sql, DB_FETCHMODE_ASSOC); +if(DB::IsError($check)) { + // add new field + $sql = "ALTER TABLE findmefollow ADD pre_ring SMALLINT( 6 ) NOT NULL DEFAULT 0 ;"; + $result = $db->query($sql); + if(DB::IsError($result)) { die_freepbx($result->getDebugInfo()); } +} +// If there is no needsconf then this is a really old upgrade. We create the 2 old fields +// here and then the migration code below will change them as needed but will work properly +// since it now has the fields it is expecting +// +$sql = "SELECT needsconf FROM findmefollow"; +$check = $db->getRow($sql, DB_FETCHMODE_ASSOC); +if(DB::IsError($check)) { + // add new field + $sql = "ALTER TABLE findmefollow ADD remotealert VARCHAR( 80 ) NULL ;"; + $result = $db->query($sql); + if(DB::IsError($result)) { die_freepbx($result->getDebugInfo()); } + + $sql = "ALTER TABLE findmefollow ADD needsconf VARCHAR( 10 ) NULL ;"; + $result = $db->query($sql); + if(DB::IsError($result)) { die_freepbx($result->getDebugInfo()); } + + $sql = "ALTER TABLE findmefollow ADD toolate VARCHAR( 80 ) NULL ;"; + $result = $db->query($sql); + if(DB::IsError($result)) { die_freepbx($result->getDebugInfo()); } +} +// Version 2.1 upgrade. Add support for ${DIALOPTS} override, playing MOH +$sql = "SELECT ringing FROM findmefollow"; +$check = $db->getRow($sql, DB_FETCHMODE_ASSOC); +if(DB::IsError($check)) { + // add new field + $sql = "ALTER TABLE findmefollow ADD ringing VARCHAR( 80 ) NULL ;"; + $result = $db->query($sql); + if(DB::IsError($result)) { die_freepbx($result->getDebugInfo()); } +} +// increase size for older installs, ignore sqlite3, doesn't support ALTER...CHANGE syntax, table created properly above +if($amp_conf["AMPDBENGINE"] != "sqlite3") { + $db->query("ALTER TABLE findmefollow CHANGE dring dring VARCHAR( 255 ) NULL"); +} +$results = array(); +$sql = "SELECT grpnum, postdest FROM findmefollow"; +$results = $db->getAll($sql, DB_FETCHMODE_ASSOC); +if (!DB::IsError($results)) { // error - table must not be there + foreach ($results as $result) { + $old_dest = $result['postdest']; + $grpnum = $result['grpnum']; + + $new_dest = merge_ext_followme(trim($old_dest)); + if ($new_dest != $old_dest) { + $sql = "UPDATE findmefollow SET postdest = '$new_dest' WHERE grpnum = '$grpnum' AND postdest = '$old_dest'"; + $results = $db->query($sql); + if(DB::IsError($results)) { + die_freepbx($results->getMessage()); + } + } + } +} + +// this function builds the AMPUSER//followme tree for each user who has a group number +// it's purpose is to convert after an upgrade + + +// TODO, is this needed...? +// is this global...? what if we include this files +// from a function...? + +$sql = "SELECT * FROM findmefollow"; +$userresults = sql($sql,"getAll",DB_FETCHMODE_ASSOC); + +//add details to astdb +if ($astman) { + foreach($userresults as $usr) { + extract($usr); + + $astman->database_put("AMPUSER",$grpnum."/followme/prering",isset($pre_ring)?$pre_ring:''); + $astman->database_put("AMPUSER",$grpnum."/followme/grptime",isset($grptime)?$grptime:''); + $astman->database_put("AMPUSER",$grpnum."/followme/grplist",isset($grplist)?$grplist:''); + $confvalue = ($needsconf == 'CHECKED')?'ENABLED':'DISABLED'; + $astman->database_put("AMPUSER",$grpnum."/followme/grpconf",isset($needsconf)?$confvalue:''); + $ddial = $astman->database_get("AMPUSER",$grpnum."/followme/ddial"); + $ddial = ($ddial == 'EXTENSION' || $ddial == 'DIRECT')?$ddial:'DIRECT'; + $astman->database_put("AMPUSER",$grpnum."/followme/ddial",$ddial); + } +} else { + echo _("Cannot connect to Asterisk Manager with ").$amp_conf["AMPMGRUSER"]."/".$amp_conf["AMPMGRPASS"]; +} + +// Version 2.4.13 change (#1961) +// Ignore sqlite3, doesn't support ALTER...CHANGE syntax, table created properly above +if($amp_conf["AMPDBENGINE"] != "sqlite3") { + $sql = "ALTER TABLE `findmefollow` CHANGE `grpnum` `grpnum` VARCHAR( 20 ) NOT NULL"; + $results = $db->query($sql); + if(DB::IsError($results)) { + echo $results->getMessage(); + return false; + } +} + +// Version 2.5 migrate to recording ids +// +// Do not do upgrades for sqlite3. Assume full support begins in 2.5 and our CREATE syntax is correct +if($amp_conf["AMPDBENGINE"] != "sqlite3") { + outn(_("Checking if recordings need migration..")); + $sql = "SELECT annmsg_id FROM findmefollow"; + $check = $db->getRow($sql, DB_FETCHMODE_ASSOC); + if(DB::IsError($check)) { + // Add recording_id field + // + out(_("migrating")); + outn(_("adding annmsg_id field..")); + $sql = "ALTER TABLE findmefollow ADD annmsg_id INTEGER"; + $result = $db->query($sql); + if(DB::IsError($result)) { + out(_("fatal error")); + die_freepbx($result->getDebugInfo()); + } else { + out(_("ok")); + } + outn(_("adding remotealert_id field..")); + $sql = "ALTER TABLE findmefollow ADD remotealert_id INTEGER"; + $result = $db->query($sql); + if(DB::IsError($result)) { + out(_("fatal error")); + die_freepbx($result->getDebugInfo()); + } else { + out(_("ok")); + } + outn(_("adding toolate_id field..")); + $sql = "ALTER TABLE findmefollow ADD toolate_id INTEGER"; + $result = $db->query($sql); + if(DB::IsError($result)) { + out(_("fatal error")); + die_freepbx($result->getDebugInfo()); + } else { + out(_("ok")); + } + + // Get all the valudes and replace them with recording_id + // + outn(_("migrate annmsg to ids..")); + $sql = "SELECT `grpnum`, `annmsg` FROM `findmefollow`"; + $results = $db->getAll($sql, DB_FETCHMODE_ASSOC); + if(DB::IsError($results)) { + out(_("fatal error")); + die_freepbx($results->getDebugInfo()); + } + $migrate_arr = array(); + $count = 0; + foreach ($results as $row) { + if (trim($row['annmsg']) != '') { + $rec_id = recordings_get_or_create_id($row['annmsg'], 'findmefollow'); + $migrate_arr[] = array($rec_id, $row['grpnum']); + $count++; + } + } + if ($count) { + $compiled = $db->prepare('UPDATE `findmefollow` SET `annmsg_id` = ? WHERE `grpnum` = ?'); + $result = $db->executeMultiple($compiled,$migrate_arr); + if(DB::IsError($result)) { + out(_("fatal error")); + die_freepbx($result->getDebugInfo()); + } + } + out(sprintf(_("migrated %s entries"),$count)); + + outn(_("migrate remotealert to ids..")); + $sql = "SELECT `grpnum`, `remotealert` FROM `findmefollow`"; + $results = $db->getAll($sql, DB_FETCHMODE_ASSOC); + if(DB::IsError($results)) { + out(_("fatal error")); + die_freepbx($results->getDebugInfo()); + } + $migrate_arr = array(); + $count = 0; + foreach ($results as $row) { + if (trim($row['remotealert']) != '') { + $rec_id = recordings_get_or_create_id($row['remotealert'], 'findmefollow'); + $migrate_arr[] = array($rec_id, $row['grpnum']); + $count++; + } + } + if ($count) { + $compiled = $db->prepare('UPDATE `findmefollow` SET `remotealert_id` = ? WHERE `grpnum` = ?'); + $result = $db->executeMultiple($compiled,$migrate_arr); + if(DB::IsError($result)) { + out(_("fatal error")); + die_freepbx($result->getDebugInfo()); + } + } + out(sprintf(_("migrated %s entries"),$count)); + + outn(_("migrate toolate to ids..")); + $sql = "SELECT `grpnum`, `toolate` FROM `findmefollow`"; + $results = $db->getAll($sql, DB_FETCHMODE_ASSOC); + if(DB::IsError($results)) { + out(_("fatal error")); + die_freepbx($results->getDebugInfo()); + } + $migrate_arr = array(); + $count = 0; + foreach ($results as $row) { + if (trim($row['toolate']) != '') { + $rec_id = recordings_get_or_create_id($row['toolate'], 'findmefollow'); + $migrate_arr[] = array($rec_id, $row['grpnum']); + $count++; + } + } + if ($count) { + $compiled = $db->prepare('UPDATE `findmefollow` SET `toolate_id` = ? WHERE `grpnum` = ?'); + $result = $db->executeMultiple($compiled,$migrate_arr); + if(DB::IsError($result)) { + out(_("fatal error")); + die_freepbx($result->getDebugInfo()); + } + } + out(sprintf(_("migrated %s entries"),$count)); + + // Now remove the old recording field replaced by new id field + // + outn(_("dropping annmsg field..")); + $sql = "ALTER TABLE `findmefollow` DROP `annmsg`"; + $result = $db->query($sql); + if(DB::IsError($result)) { + out(_("no annmsg field???")); + } else { + out(_("ok")); + } + outn(_("dropping remotealert field..")); + $sql = "ALTER TABLE `findmefollow` DROP `remotealert`"; + $result = $db->query($sql); + if(DB::IsError($result)) { + out(_("no remotealert field???")); + } else { + out(_("ok")); + } + outn(_("dropping toolate field..")); + $sql = "ALTER TABLE `findmefollow` DROP `toolate`"; + $result = $db->query($sql); + if(DB::IsError($result)) { + out(_("no toolate field???")); + } else { + out(_("ok")); + } + + } else { + out(_("already migrated")); + } +} + +?> Index: /modules/branches/2.10/pinsets/i18n/sv_SE/LC_MESSAGES/pinsets.po =================================================================== --- /modules/branches/2.10/pinsets/i18n/sv_SE/LC_MESSAGES/pinsets.po (revision 11863) +++ /modules/branches/2.10/pinsets/i18n/sv_SE/LC_MESSAGES/pinsets.po (revision 11863) @@ -0,0 +1,149 @@ +# This file is part of FreePBX. +# +# FreePBX 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. +# +# FreePBX 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 FreePBX. If not, see . +# +# FreePBX Swedish language för pinsets +# Copyright (C) 2008, 2009, 2010, 2011 Mikael Carlsson +# +msgid "" +msgstr "" +"Project-Id-Version: Freeà +BX pinsets\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-18 08:25+0100\n" +"PO-Revision-Date: 2011-03-20 00:00+0100\n" +"Last-Translator: Mikael Carlsson \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Swedish\n" +"X-Poedit-Country: SWEDEN\n" + +msgid "Unnamed" +msgstr "Inget namn" + +msgid "PIN Set" +msgstr "PIN-kod" + +msgid "" +"Optional: Select a PIN set to use. If using this option, leave the Route " +"Password field blank." +msgstr "" +"Valfritt: VÀlj en PIN-kod. Om du vÀljer en PIN-kod, lÀmna dÃ¥ fÀltet " +"Lösenord för vÀg tomt" + +msgid "None" +msgstr "Ingen" + +msgid "checking if migration required.." +msgstr "kontrollerar om migrering behövs.." + +msgid "migrating.." +msgstr "migrerar.." + +msgid "unknown error fetching table data" +msgstr "okÀnt fel nÀr tabelldata skulle hÀmtas" + +msgid "migration aborted" +msgstr "migreringen avbruten" + +msgid "continuing.." +msgstr "fortsÀtter.." + +msgid "done" +msgstr "klar" + +msgid "dropping used_by field.." +msgstr "tar bort fÀltet used_by.." + +msgid "no used_by field???" +msgstr "inget fÀlt med namnet used_by???" + +msgid "ok" +msgstr "ok" + +msgid "already done" +msgstr "redan gjort" + +msgid "Add Password Set" +msgstr "LÀgg till PIN-kod(er)" + +msgid "PIN Set " +msgstr "PIN-kod" + +msgid "deleted" +msgstr "borttagen" + +msgid "Delete PIN Set" +msgstr "Ta bort PIN-kod" + +msgid "PIN Set:" +msgstr "PIN-kod:" + +msgid "Add PIN Set" +msgstr "LÀgg till PIN-kod" + +msgid "" +"PIN Sets are used to manage lists of PINs that can be used to access " +"restricted features such as Outbound Routes. The PIN can also be added to " +"the CDR record's 'accountcode' field." +msgstr "" +"PIN-koder hanterad de listor med koder som kan anvÀndas pÃ¥ diverse stÀlle i " +"FreePBX sÃ¥som UtgÃ¥ende vÀgar. PIN-koderna kan ocksÃ¥ visas i " +"samtalsregistret i fÀltet 'accountcode' om detta vÀljs." + +msgid "Edit PIN Set" +msgstr "Redigera PIN-koder" + +msgid "New PIN Set" +msgstr "Ny PIN-kod" + +msgid "PIN Set Description:" +msgstr "Beskrivning för PIN-kod:" + +msgid "Record In CDR?:" +msgstr "LÀgga till i CDR?:" + +msgid "" +"Select this box if you would like to record the PIN in the call detail " +"records when used" +msgstr "" +"Markera detta val om du vill lÀgga till i samtalsregistret vilken PIN.kod " +"som anvÀndes" + +msgid "PIN List:" +msgstr "PIN-kodlista:" + +msgid "Enter a list of one or more PINs. One PIN per line." +msgstr "Skriv in en eller flera PIN-koder. En PIN-kod per rad." + +msgid "Submit Changes" +msgstr "Spara Àndringar" + +msgid "Please enter a valid Description" +msgstr "Skriv in en giltig beskrivining" + +msgid "PIN Sets" +msgstr "PIN-koder" + +msgid "Internal Options & Configuration" +msgstr "Interna val och konfigurationer" + +msgid "" +"Allow creation of lists of PINs (numbers for passwords) that can be used by " +"other modules (eg, trunks)." +msgstr "" +"Ger möjlighet att skapa listor med PINs (nummer för lösenord) somkan " +"anvÀndas av andra moduler (trunkar)." Index: /modules/branches/2.10/pinsets/i18n/bg_BG/LC_MESSAGES/pinsets.po =================================================================== --- /modules/branches/2.10/pinsets/i18n/bg_BG/LC_MESSAGES/pinsets.po (revision 9952) +++ /modules/branches/2.10/pinsets/i18n/bg_BG/LC_MESSAGES/pinsets.po (revision 9952) @@ -0,0 +1,138 @@ +# 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 , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX v2.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-06-22 19:14+0200\n" +"PO-Revision-Date: 2008-11-03 11:12+0200\n" +"Last-Translator: \n" +"Language-Team: Chavdar Iliev \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Bulgarian\n" +"X-Poedit-Country: BULGARIA\n" +"X-Poedit-SourceCharset: utf-8\n" + +msgid "Unnamed" +msgstr "" + +msgid "PIN Set" +msgstr "PIN ВъвежЎаМе" + +msgid "" +"Optional: Select a PIN set to use. If using this option, leave the Route " +"Password field blank." +msgstr "" +"НезаЎължОтелМП: Изберете PIN ВъвежЎаМе за ОзпПлзваМе. АкП ОзпПлзвате тазО " +"ПпцОя, Пставете пПлетП ПарПла Ма Маршрут празМП." + +msgid "None" +msgstr "НяЌа" + +msgid "checking if migration required.." +msgstr "" + +msgid "migrating.." +msgstr "" + +msgid "unknown error fetching table data" +msgstr "" + +msgid "migration aborted" +msgstr "" + +msgid "continuing.." +msgstr "" + +msgid "done" +msgstr "" + +msgid "dropping used_by field.." +msgstr "" + +msgid "no used_by field???" +msgstr "" + +msgid "ok" +msgstr "" + +msgid "already done" +msgstr "" + +msgid "Add Password Set" +msgstr "ДПбавО ВъвежЎаМе Ма ПарПла" + +msgid "PIN Set " +msgstr "PIN ВъвежЎаМе" + +msgid "deleted" +msgstr "ОзтрОт" + +msgid "Delete PIN Set" +msgstr "ИзтрОй PIN ВъвежЎаМе" + +msgid "PIN Set:" +msgstr "PIN ВъвежЎаМе:" + +msgid "Add PIN Set" +msgstr "ДПбавО PIN ВъвежЎаМе" + +msgid "" +"PIN Sets are used to manage lists of PINs that can be used to access " +"restricted features such as Outbound Routes. The PIN can also be added to " +"the CDR record's 'accountcode' field." +msgstr "" +"PIN ВъвежЎаМОята се ОзпПлзват Ўа управлявате спОсъка с PIN-Пве, кПОтП ЌПгат " +"Ўа се ОзпПлзват за ПграМОчаваМе Ма фуМкцОО катП Ð˜Ð·Ñ +ПЎящО МаршрутО. СъщП така " +"PIN ЌПже Ўа се ЎПбавО в CDR запОсОте в пПлетП 'акауМт кПЎ'." + +msgid "Edit PIN Set" +msgstr "РеЎактОрай PIN ВъвежЎаМе" + +msgid "New PIN Set" +msgstr "НПвП PIN ВъвежЎаМе" + +msgid "PIN Set Description:" +msgstr "ОпОсаМОе Ма PIN ВъвежЎаМе" + +msgid "Record In CDR?:" +msgstr "ЗапОс в CDR?:" + +msgid "" +"Select this box if you would like to record the PIN in the call detail " +"records when used" +msgstr "" +"МаркОрайте акП Оскате Ўа запОсвате PIN-а в ЎетайлМО ПтчетО Ма разгПвПрОте " +"акП се ОзпПлзва." + +msgid "PIN List:" +msgstr "PIN ЛОст:" + +msgid "Enter a list of one or more PINs. One PIN per line." +msgstr "ВъвеЎете спОсък Пт еЎОМ ОлО пПвече PIN кПЎа. ЕЎОМ PIN Ма реЎ." + +msgid "Submit Changes" +msgstr "ПрОеЌО ПрПЌеМОте" + +msgid "Please enter a valid Description" +msgstr "МПля въвеЎете правОлМП ОпОсаМОе" + +msgid "PIN Sets" +msgstr "PIN ВъвежЎаМОя" + +msgid "" +"Internal Options \n" +"&\n" +" Configuration" +msgstr "" + +msgid "" +"Allow creation of lists of PINs (numbers for passwords) that can be used by " +"other modules (eg, trunks)." +msgstr "" Index: /modules/branches/2.10/pinsets/i18n/he_IL/LC_MESSAGES/pinsets.po =================================================================== --- /modules/branches/2.10/pinsets/i18n/he_IL/LC_MESSAGES/pinsets.po (revision 9952) +++ /modules/branches/2.10/pinsets/i18n/he_IL/LC_MESSAGES/pinsets.po (revision 9952) @@ -0,0 +1,131 @@ +# Hebrew version for PIN Sets FreePBX Module. +# Copyright (C) 2006 +# This file is distributed under the same license as the PACKAGE package. +# Shimi , 2006. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: FreePBX 2.2.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-06-22 19:14+0200\n" +"PO-Revision-Date: 2006-10-17 17:30+0300\n" +"Last-Translator: Shimi \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Unnamed" +msgstr "" + +msgid "PIN Set" +msgstr "" + +msgid "" +"Optional: Select a PIN set to use. If using this option, leave the Route " +"Password field blank." +msgstr "" + +msgid "None" +msgstr "" + +msgid "checking if migration required.." +msgstr "" + +msgid "migrating.." +msgstr "" + +msgid "unknown error fetching table data" +msgstr "" + +msgid "migration aborted" +msgstr "" + +msgid "continuing.." +msgstr "" + +msgid "done" +msgstr "" + +msgid "dropping used_by field.." +msgstr "" + +msgid "no used_by field???" +msgstr "" + +msgid "ok" +msgstr "" + +msgid "already done" +msgstr "" + +msgid "Add Password Set" +msgstr "הוסף סט סיסמאות" + +msgid "PIN Set " +msgstr "סט סיסמא " + +msgid "deleted" +msgstr "נמחק" + +msgid "Delete PIN Set" +msgstr "מחק סט סיסמא" + +msgid "PIN Set:" +msgstr "סט סיסמא:" + +msgid "Add PIN Set" +msgstr "הוסף סט סיסמא" + +msgid "" +"PIN Sets are used to manage lists of PINs that can be used to access " +"restricted features such as Outbound Routes. The PIN can also be added to " +"the CDR record's 'accountcode' field." +msgstr "" +"בסטי סיסמאות משתמשים כדי לנהל ךשימות של סיסמאות שבהן ניתן להשתמש בתכונות " +"מוגבלות, כמו למשל ניתוב שיחות יו׊אות. כמו כן, ניתן להוסיף את הסיסמא לשדה " +"'accountcode' בךישומי השיחות של המעךכת." + +msgid "Edit PIN Set" +msgstr "עךוך סט סיסמאות" + +msgid "New PIN Set" +msgstr "סט סיסמאות חדש" + +msgid "PIN Set Description:" +msgstr "תיאוך סט סיסמאות:" + +msgid "Record In CDR?:" +msgstr "ךשום בךישום שיחות?:" + +msgid "" +"Select this box if you would like to record the PIN in the call detail " +"records when used" +msgstr "" +"סמן תיבה זו אם ב׹שונך לךשום את הסיסמא ב׀יךוט ךישומי השיחות כאשך יש בה שימוש" + +msgid "PIN List:" +msgstr "ךשימת סיסמאות:" + +msgid "Enter a list of one or more PINs. One PIN per line." +msgstr "הכנס ךשימה של סיסמא אחת או יותך. סיסמא אחת בכל שוךה." + +msgid "Submit Changes" +msgstr "" + +msgid "Please enter a valid Description" +msgstr "" + +msgid "PIN Sets" +msgstr "" + +msgid "" +"Internal Options \n" +"&\n" +" Configuration" +msgstr "" + +msgid "" +"Allow creation of lists of PINs (numbers for passwords) that can be used by " +"other modules (eg, trunks)." +msgstr "" Index: /modules/branches/2.10/pinsets/i18n/zh_CN/LC_MESSAGES/pinsets.po =================================================================== --- /modules/branches/2.10/pinsets/i18n/zh_CN/LC_MESSAGES/pinsets.po (revision 9952) +++ /modules/branches/2.10/pinsets/i18n/zh_CN/LC_MESSAGES/pinsets.po (revision 9952) @@ -0,0 +1,137 @@ +# 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 , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX 2.5 Chinese Translation\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-06-22 19:14+0200\n" +"PO-Revision-Date: 2009-02-01 12:04+0800\n" +"Last-Translator: 呚埁晟 \n" +"Language-Team: EdwardBadBoy \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Chinese\n" +"X-Poedit-Country: CHINA\n" +"X-Poedit-SourceCharset: utf-8\n" + +msgid "Unnamed" +msgstr "" + +msgid "PIN Set" +msgstr "PIN码集合" + +msgid "" +"Optional: Select a PIN set to use. If using this option, leave the Route " +"Password field blank." +msgstr "" +"可选讟眮选择䞀䞪芁䜿甚的PINç é›†åˆã€‚åŠ‚æžœäœ¿ç”šäº†è¿™äžªé€‰é¡¹ïŒŒå°±è¯·æž +空线路密码字" +"段。" + +msgid "None" +msgstr "无" + +msgid "checking if migration required.." +msgstr "" + +msgid "migrating.." +msgstr "" + +msgid "unknown error fetching table data" +msgstr "" + +msgid "migration aborted" +msgstr "" + +msgid "continuing.." +msgstr "" + +msgid "done" +msgstr "" + +msgid "dropping used_by field.." +msgstr "" + +msgid "no used_by field???" +msgstr "" + +msgid "ok" +msgstr "" + +msgid "already done" +msgstr "" + +msgid "Add Password Set" +msgstr "添加密码集合" + +msgid "PIN Set " +msgstr "PIN码集合" + +msgid "deleted" +msgstr "已删陀" + +msgid "Delete PIN Set" +msgstr "删陀PIN码集合" + +msgid "PIN Set:" +msgstr "PIN码集合" + +msgid "Add PIN Set" +msgstr "添加PIN码集合" + +msgid "" +"PIN Sets are used to manage lists of PINs that can be used to access " +"restricted features such as Outbound Routes. The PIN can also be added to " +"the CDR record's 'accountcode' field." +msgstr "" +"PIN码集合是甚来管理PIN码列衚的这些PIN码可以甚来访问受限制的功胜比劂出局线" +"路。PIN码也可以添加到CDR记圕的“accountcode”字段。" + +msgid "Edit PIN Set" +msgstr "猖蟑PIN码集合" + +msgid "New PIN Set" +msgstr "新建PIN码集合" + +msgid "PIN Set Description:" +msgstr "PIN码集合的描述" + +msgid "Record In CDR?:" +msgstr "记圕到CDR䞭" + +msgid "" +"Select this box if you would like to record the PIN in the call detail " +"records when used" +msgstr "劂果䜠垌望将PIN记圕到呌叫诊细记圕䞭去就钩选歀项" + +msgid "PIN List:" +msgstr "PIN码列衚" + +msgid "Enter a list of one or more PINs. One PIN per line." +msgstr "请蟓å +¥äž€äžªæˆ–倚䞪PIN码䞀行蟓䞀䞪PIN码。" + +msgid "Submit Changes" +msgstr "提亀曎改" + +msgid "Please enter a valid Description" +msgstr "请蟓å +¥æœ‰æ•ˆçš„æè¿°" + +msgid "PIN Sets" +msgstr "PIN码管理" + +msgid "" +"Internal Options \n" +"&\n" +" Configuration" +msgstr "" + +msgid "" +"Allow creation of lists of PINs (numbers for passwords) that can be used by " +"other modules (eg, trunks)." +msgstr "" Index: /modules/branches/2.10/pinsets/i18n/pinsets.pot =================================================================== --- /modules/branches/2.10/pinsets/i18n/pinsets.pot (revision 11863) +++ /modules/branches/2.10/pinsets/i18n/pinsets.pot (revision 11863) @@ -0,0 +1,137 @@ +# This file is part of FreePBX. +# +# FreePBX 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. +# +# FreePBX 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 FreePBX. If not, see . +# +# FreePBX language template for pinsets +# Copyright (C) 2008, 2009, 2010, 2011 Bandwith.com +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-18 08:25+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Unnamed" +msgstr "" + +msgid "PIN Set" +msgstr "" + +msgid "" +"Optional: Select a PIN set to use. If using this option, leave the Route " +"Password field blank." +msgstr "" + +msgid "None" +msgstr "" + +msgid "checking if migration required.." +msgstr "" + +msgid "migrating.." +msgstr "" + +msgid "unknown error fetching table data" +msgstr "" + +msgid "migration aborted" +msgstr "" + +msgid "continuing.." +msgstr "" + +msgid "done" +msgstr "" + +msgid "dropping used_by field.." +msgstr "" + +msgid "no used_by field???" +msgstr "" + +msgid "ok" +msgstr "" + +msgid "already done" +msgstr "" + +msgid "Add Password Set" +msgstr "" + +msgid "PIN Set " +msgstr "" + +msgid "deleted" +msgstr "" + +msgid "Delete PIN Set" +msgstr "" + +msgid "PIN Set:" +msgstr "" + +msgid "Add PIN Set" +msgstr "" + +msgid "" +"PIN Sets are used to manage lists of PINs that can be used to access " +"restricted features such as Outbound Routes. The PIN can also be added to " +"the CDR record's 'accountcode' field." +msgstr "" + +msgid "Edit PIN Set" +msgstr "" + +msgid "New PIN Set" +msgstr "" + +msgid "PIN Set Description:" +msgstr "" + +msgid "Record In CDR?:" +msgstr "" + +msgid "" +"Select this box if you would like to record the PIN in the call detail " +"records when used" +msgstr "" + +msgid "PIN List:" +msgstr "" + +msgid "Enter a list of one or more PINs. One PIN per line." +msgstr "" + +msgid "Submit Changes" +msgstr "" + +msgid "Please enter a valid Description" +msgstr "" + +msgid "PIN Sets" +msgstr "" + +msgid "Internal Options & Configuration" +msgstr "" + +msgid "" +"Allow creation of lists of PINs (numbers for passwords) that can be used by " +"other modules (eg, trunks)." +msgstr "" Index: /modules/branches/2.10/pinsets/i18n/it_IT/LC_MESSAGES/pinsets.po =================================================================== --- /modules/branches/2.10/pinsets/i18n/it_IT/LC_MESSAGES/pinsets.po (revision 9952) +++ /modules/branches/2.10/pinsets/i18n/it_IT/LC_MESSAGES/pinsets.po (revision 9952) @@ -0,0 +1,137 @@ +# 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 , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-06-22 19:14+0200\n" +"PO-Revision-Date: 2008-11-06 14:53+0100\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" +"X-Poedit-Language: Italian\n" +"X-Poedit-Country: ITALY\n" + +msgid "Unnamed" +msgstr "" + +msgid "PIN Set" +msgstr "Gruppo PIN" + +msgid "" +"Optional: Select a PIN set to use. If using this option, leave the Route " +"Password field blank." +msgstr "" +"Opzionale: Selezionare un Gruppo PIN da utilizzare. Se si utilizza questa " +"opzione, lasciare la Password della Rotta vuota." + +msgid "None" +msgstr "Nessuno" + +msgid "checking if migration required.." +msgstr "" + +msgid "migrating.." +msgstr "" + +msgid "unknown error fetching table data" +msgstr "" + +msgid "migration aborted" +msgstr "" + +msgid "continuing.." +msgstr "" + +msgid "done" +msgstr "" + +msgid "dropping used_by field.." +msgstr "" + +msgid "no used_by field???" +msgstr "" + +msgid "ok" +msgstr "" + +msgid "already done" +msgstr "" + +msgid "Add Password Set" +msgstr "Aggiungi Gruppo PIN" + +msgid "PIN Set " +msgstr "Gruppo PIN" + +msgid "deleted" +msgstr "eliminato" + +msgid "Delete PIN Set" +msgstr "Elimina Gruppo PIN" + +msgid "PIN Set:" +msgstr "Gruppo PIN:" + +msgid "Add PIN Set" +msgstr "Aggiungi Gruppo PIN" + +msgid "" +"PIN Sets are used to manage lists of PINs that can be used to access " +"restricted features such as Outbound Routes. The PIN can also be added to " +"the CDR record's 'accountcode' field." +msgstr "" +"In questa pagina Ú possibile gestire i Gruppi PIN, utilizzati per " +"restringere l'accesso a particolari servizi come per esempio le Rotte in " +"Uscita. Il PIN può essere anche inserito nel campo CDR 'accountcode' " +"dell'utente." + +msgid "Edit PIN Set" +msgstr "Modifica Gruppo PIN" + +msgid "New PIN Set" +msgstr "Nuovo Gruppo PIN" + +msgid "PIN Set Description:" +msgstr "Descrizione Gruppo PIN" + +msgid "Record In CDR?:" +msgstr "Registra nel CDR?:" + +msgid "" +"Select this box if you would like to record the PIN in the call detail " +"records when used" +msgstr "" +"Spuntare questa casella se si vogliono registrare i PIN nel dettaglio delle " +"chiamate" + +msgid "PIN List:" +msgstr "Lista PIN:" + +msgid "Enter a list of one or more PINs. One PIN per line." +msgstr "Immettere in lista uno o più PIN. Uno per riga." + +msgid "Submit Changes" +msgstr "Conferma Cambiamenti" + +msgid "Please enter a valid Description" +msgstr "Prego immettere una Descrizione valida" + +msgid "PIN Sets" +msgstr "Gruppi PIN" + +msgid "" +"Internal Options \n" +"&\n" +" Configuration" +msgstr "" + +msgid "" +"Allow creation of lists of PINs (numbers for passwords) that can be used by " +"other modules (eg, trunks)." +msgstr "" Index: /modules/branches/2.10/pinsets/i18n/ru_RU/LC_MESSAGES/pinsets.po =================================================================== --- /modules/branches/2.10/pinsets/i18n/ru_RU/LC_MESSAGES/pinsets.po (revision 9952) +++ /modules/branches/2.10/pinsets/i18n/ru_RU/LC_MESSAGES/pinsets.po (revision 9952) @@ -0,0 +1,133 @@ +# Copyright (C) 2008 PostMet GmbH +# This file is distributed under the same license as the PACKAGE package. +# Alexander Kozyrev , 2008. +# +msgid "" +msgstr "" +"Project-Id-Version: 1.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-06-22 19:14+0200\n" +"PO-Revision-Date: 2008-10-13 15:07+0100\n" +"Last-Translator: Alexander Kozyrev\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-5\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Unnamed" +msgstr "" + +msgid "PIN Set" +msgstr "»Øáâ PIN-ÚÞÔÞÒ" + +msgid "" +"Optional: Select a PIN set to use. If using this option, leave the Route " +"Password field blank." +msgstr "" +"ŸßæØÞÝÐÛìÝÞ: ÒëÑàÐâì ÛØáâ PIN-ÚÞÔÞÒ. µáÛØ ØáßÞÛì×ãÕâáï íâÐ ÞßæØï - " +"ÝÕÞÑåÞÔØÜÞ ÞáâÐÒÛïâì ßÞÛÕ ¿ÐàÞÛì ÝÐ ÜÐàèàãâÕ ßãáâëÜ." + +msgid "None" +msgstr "œÕâ" + +msgid "checking if migration required.." +msgstr "" + +msgid "migrating.." +msgstr "" + +msgid "unknown error fetching table data" +msgstr "" + +msgid "migration aborted" +msgstr "" + +msgid "continuing.." +msgstr "" + +msgid "done" +msgstr "" + +msgid "dropping used_by field.." +msgstr "" + +msgid "no used_by field???" +msgstr "" + +msgid "ok" +msgstr "" + +msgid "already done" +msgstr "" + +msgid "Add Password Set" +msgstr "ŽÞÑÐÒØâì ÛØáâ PIN-ÚÞÔÞÒ" + +msgid "PIN Set " +msgstr "»Øáâ PIN-ÚÞÔÞÒ" + +msgid "deleted" +msgstr "ãÔÐÛÕÝÞ" + +msgid "Delete PIN Set" +msgstr "ÃÔÐÛØâì ÛØáâ PIN-ÚÞÔÞÒ" + +msgid "PIN Set:" +msgstr "œÐÑÞà PIN:" + +msgid "Add PIN Set" +msgstr "ŽÞÑÐÒØâì ÛØáâ PIN-ÚÞÔÞÒ" + +msgid "" +"PIN Sets are used to manage lists of PINs that can be used to access " +"restricted features such as Outbound Routes. The PIN can also be added to " +"the CDR record's 'accountcode' field." +msgstr "" +"ŒÞÔãÛì áߨáÚÞÒ PIN-ÚÞÔÞÒ ØáßÞÛì×ãÕâáï ÔÛï ÞàÓÐÝØ×ÐæØØ ÔÞáâãßÐ Ú áßÕæØÐÛìÝëÜ " +"ØáåÞÔïéØÜ ÜÐàèàãâÐÜ á ÞÓàÐÝØçÕÝÝëÜØ ßàÐÒÐÜØ. ÁÐÜ ÝÐÑØàÐÕÜëÙ PIN-ÚÞÔ ÜÞÖÝÞ " +"ÔÞÑÐÒÛïâì âÐÚÖÕ Ò Þâçñâ Þ ×ÒÞÝÚÐå Ò áßÕæØÐÛìÝÞÕ ßÞÛÕ 'accountcode'." + +msgid "Edit PIN Set" +msgstr "ž×ÜÕÝØâì ÛØáâ PIN-ÚÞÔÞÒ" + +msgid "New PIN Set" +msgstr "œÞÒëÙ ÛØáâ PIN-ÚÞÔÞÒ" + +msgid "PIN Set Description:" +msgstr "ŸßØáÐÝØÕ:" + +msgid "Record In CDR?:" +msgstr "·ÐߨáëÒÐâì Ò CDR?" + +msgid "" +"Select this box if you would like to record the PIN in the call detail " +"records when used" +msgstr "" +"²ëÑÕàØâÕ íâã ÞßæØî, ÕáÛØ ÝãÖÝÞ ×ÐߨáëÒÐâì PIN Ò ÖãàÝÐÛ ×ÒÞÝÚÞÒ ÔÛï " +"ÔÕâÐÛØ×ÐæØØ." + +msgid "PIN List:" +msgstr "ÁߨáÞÚ PIN:" + +msgid "Enter a list of one or more PINs. One PIN per line." +msgstr "²ÒÕÔØâÕ PIN-ÚÞÔë Ò áߨáÞÚ, ßÞ ÞÔÝÞÜã Ò áâàÞÚÕ." + +msgid "Submit Changes" +msgstr "¿àØÜÕÝØâì Ø×ÜÕÝÕÝØï" + +msgid "Please enter a valid Description" +msgstr "ÃÚÐÖØâÕ àÐ×àÕèÕÝÝÞÕ ÞߨáÐÝØÕ" + +msgid "PIN Sets" +msgstr "»Øáâë PIN-ÚÞÔÞÒ" + +msgid "" +"Internal Options \n" +"&\n" +" Configuration" +msgstr "" + +msgid "" +"Allow creation of lists of PINs (numbers for passwords) that can be used by " +"other modules (eg, trunks)." +msgstr "" Index: /modules/branches/2.10/pinsets/i18n/es_ES/LC_MESSAGES/pinsets.po =================================================================== --- /modules/branches/2.10/pinsets/i18n/es_ES/LC_MESSAGES/pinsets.po (revision 9952) +++ /modules/branches/2.10/pinsets/i18n/es_ES/LC_MESSAGES/pinsets.po (revision 9952) @@ -0,0 +1,125 @@ +msgid "" +msgstr "" +"Project-Id-Version: FreePBX - módulo pinsets module spanish translation\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-06-22 19:14+0200\n" +"PO-Revision-Date: 2009-01-21 16:10+0100\n" +"Last-Translator: Juan Asensio Sánchez \n" +"Language-Team: Juan Asensio Sánchez \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Spanish\n" +"X-Poedit-Country: SPAIN\n" +"X-Poedit-SourceCharset: utf-8\n" + +msgid "Unnamed" +msgstr "" + +msgid "PIN Set" +msgstr "" + +msgid "" +"Optional: Select a PIN set to use. If using this option, leave the Route " +"Password field blank." +msgstr "" + +msgid "None" +msgstr "" + +msgid "checking if migration required.." +msgstr "" + +msgid "migrating.." +msgstr "" + +msgid "unknown error fetching table data" +msgstr "" + +msgid "migration aborted" +msgstr "" + +msgid "continuing.." +msgstr "" + +msgid "done" +msgstr "" + +msgid "dropping used_by field.." +msgstr "" + +msgid "no used_by field???" +msgstr "" + +msgid "ok" +msgstr "" + +msgid "already done" +msgstr "" + +msgid "Add Password Set" +msgstr "" + +msgid "PIN Set " +msgstr "" + +msgid "deleted" +msgstr "" + +msgid "Delete PIN Set" +msgstr "" + +msgid "PIN Set:" +msgstr "" + +msgid "Add PIN Set" +msgstr "" + +msgid "" +"PIN Sets are used to manage lists of PINs that can be used to access " +"restricted features such as Outbound Routes. The PIN can also be added to " +"the CDR record's 'accountcode' field." +msgstr "" + +msgid "Edit PIN Set" +msgstr "" + +msgid "New PIN Set" +msgstr "" + +msgid "PIN Set Description:" +msgstr "" + +msgid "Record In CDR?:" +msgstr "" + +msgid "" +"Select this box if you would like to record the PIN in the call detail " +"records when used" +msgstr "" + +msgid "PIN List:" +msgstr "" + +msgid "Enter a list of one or more PINs. One PIN per line." +msgstr "" + +msgid "Submit Changes" +msgstr "" + +msgid "Please enter a valid Description" +msgstr "" + +msgid "PIN Sets" +msgstr "" + +msgid "" +"Internal Options \n" +"&\n" +" Configuration" +msgstr "" + +msgid "" +"Allow creation of lists of PINs (numbers for passwords) that can be used by " +"other modules (eg, trunks)." +msgstr "" Index: /modules/branches/2.10/pinsets/i18n/fr_FR/LC_MESSAGES/pinsets.po =================================================================== --- /modules/branches/2.10/pinsets/i18n/fr_FR/LC_MESSAGES/pinsets.po (revision 9952) +++ /modules/branches/2.10/pinsets/i18n/fr_FR/LC_MESSAGES/pinsets.po (revision 9952) @@ -0,0 +1,136 @@ +# 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 , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-06-22 19:14+0200\n" +"PO-Revision-Date: 2009-04-15 22:43+0100\n" +"Last-Translator: Séverine GUTIERREZ \n" +"Language-Team: Français \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Unnamed" +msgstr "" + +msgid "PIN Set" +msgstr "Jeu de PIN" + +msgid "" +"Optional: Select a PIN set to use. If using this option, leave the Route " +"Password field blank." +msgstr "" +"Optionnel : Sélectionnez un jeu de PIN à utiliser. Si vous utilisez cette " +"option, laissez le champ Mot de Passe de Route (Route Password) vide." + +msgid "None" +msgstr "Aucun" + +msgid "checking if migration required.." +msgstr "" + +msgid "migrating.." +msgstr "" + +msgid "unknown error fetching table data" +msgstr "" + +msgid "migration aborted" +msgstr "" + +msgid "continuing.." +msgstr "" + +msgid "done" +msgstr "" + +msgid "dropping used_by field.." +msgstr "" + +msgid "no used_by field???" +msgstr "" + +msgid "ok" +msgstr "" + +msgid "already done" +msgstr "" + +msgid "Add Password Set" +msgstr "Ajouter un jeu de mots de passe" + +msgid "PIN Set " +msgstr "Jeu de PIN " + +msgid "deleted" +msgstr "supprimé" + +msgid "Delete PIN Set" +msgstr "Supprimer le jeu de PIN" + +msgid "PIN Set:" +msgstr "Jeu de PIN :" + +msgid "Add PIN Set" +msgstr "Ajouter un jeu de PIN" + +msgid "" +"PIN Sets are used to manage lists of PINs that can be used to access " +"restricted features such as Outbound Routes. The PIN can also be added to " +"the CDR record's 'accountcode' field." +msgstr "" +"Les jeux de PIN sont utilisés pour gérer des listes de PINs qui peuvent être " +"utilisés pour accéder à des fonctionnalités restreintes comme les Routes " +"Sortantes. Le PIN peut également être ajouté au champ 'accountcode' de " +"l'enregistrement CDR." + +msgid "Edit PIN Set" +msgstr "Editer le jeu de PIN" + +msgid "New PIN Set" +msgstr "Nouveau jeu de PIN" + +msgid "PIN Set Description:" +msgstr "Description du jeu de PIN" + +msgid "Record In CDR?:" +msgstr "Enregistrer dans CDR ?" + +msgid "" +"Select this box if you would like to record the PIN in the call detail " +"records when used" +msgstr "" +"Cochez cette case si vous voulez enregistrer le PIN dans les enregistrements " +"détaillés de l'appel lorsqu'ils sont utilisés." + +msgid "PIN List:" +msgstr "Liste PIN :" + +msgid "Enter a list of one or more PINs. One PIN per line." +msgstr "Entrez une liste d'un ou plusieurs PINs. Un PIN par ligne." + +msgid "Submit Changes" +msgstr "Appliquer les modifications" + +msgid "Please enter a valid Description" +msgstr "Entrez une description valide" + +msgid "PIN Sets" +msgstr "Jeux de PIN" + +msgid "" +"Internal Options \n" +"&\n" +" Configuration" +msgstr "" + +msgid "" +"Allow creation of lists of PINs (numbers for passwords) that can be used by " +"other modules (eg, trunks)." +msgstr "" Index: /modules/branches/2.10/pinsets/uninstall.php =================================================================== --- /modules/branches/2.10/pinsets/uninstall.php (revision 9134) +++ /modules/branches/2.10/pinsets/uninstall.php (revision 9134) @@ -0,0 +1,21 @@ +\n"; +} + +echo "dropping table pinsets.."; +sql('DROP TABLE IF EXISTS `pinsets`'); +echo "done
\n"; + +echo "dropping table pinset_usage.."; +sql('DROP TABLE IF EXISTS `pinset_usage`'); +echo "done
\n"; + +?> Index: /modules/branches/2.10/pinsets/module.xml =================================================================== --- /modules/branches/2.10/pinsets/module.xml (revision 11171) +++ /modules/branches/2.10/pinsets/module.xml (revision 11171) @@ -0,0 +1,40 @@ + + pinsets + standard + PIN Sets + 2.9.0.1 + FreePBX + GPLv2+ + setup + Internal Options & Configuration + Allow creation of lists of PINs (numbers for passwords) that can be used by other modules (eg, trunks). + + *2.9.0.1* removed duplicate functions + *2.9.0.0* 2.9 Update + *2.8.0.5* #4431 + *2.8.0.4* localization updates + *2.8.0.3* #4197 + *2.8.0.2* #4141 + *2.8.0.1* #4131 + *2.8.0.0* #4124 (#4110) + *2.7.0.0* localizations + *2.6.0.0* misc + *2.5.0.1* #3240, #3258 + *2.5.0* #2845, #2764 tabindex + *2.4.0.1* #2843 Russian Translation + *2.4.0* bump for 2.4 + *1.2.3* #2393 add support for pinless dialing + *1.2.2.2* #2172 deprecated use of | + *1.2.2.1* bump for rc1 + *1.2.2* Put None label in menu hook + *1.2.1* #1770 added proper uninstall + *1.2* Add SQLite3 support, fixes http://freepbx.org/trac/ticket/1778 + *1.1* Add he_IL translation, add naftali5's fixes where pinsets were being lost when moved around. + *1.0.11* Stop potential error where a random pinset is appearing when creating a new trunk + + + PIN Sets + + release/2.9/pinsets-2.9.0.1.tgz + ea834b4d0632d510ffad57f01924b928 + Index: /modules/branches/2.10/pinsets/functions.inc.php =================================================================== --- /modules/branches/2.10/pinsets/functions.inc.php (revision 9477) +++ /modules/branches/2.10/pinsets/functions.inc.php (revision 9477) @@ -0,0 +1,285 @@ +_conf classes, +// which can be used in _get_conf below. +class pinsets_conf { + // return an array of filenames to write + // files named like pinset_N + var $_pinsets = array(); + + function get_filename() { + $files = array(); + foreach (array_keys($this->_pinsets) as $pinset) { + $files[] = 'pinset_'.$pinset; + } + return $files; + } + + function addPinsets($setid, $pins) { + $this->_pinsets[$setid] = $pins; + } + + // return the output that goes in each of the files + function generateConf($file) { + $setid = ltrim($file,'pinset_'); + $output = $this->_pinsets[$setid]; + return $output; + } +} + +/* Generates passwd files for pinsets + We call this with retrieve_conf +*/ +function pinsets_get_config($engine) { + global $ext; // is this the best way to pass this? + global $asterisk_conf; + global $pinsets_conf; // our pinsets object (created in retrieve_conf) + switch($engine) { + case "asterisk": + $allpinsets = pinsets_list(true); + if(is_array($allpinsets)) { + foreach($allpinsets as $item) { + // write our own pin list files + $pinsets_conf->addPinsets($item['pinsets_id'],$item['passwords']); + } + + // write out a macro that handles the authenticate + $ext->add('macro-pinsets', 's', '', new ext_gotoif('${ARG2} = 1','cdr,1')); + $ext->add('macro-pinsets', 's', '', new ext_execif('$["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]', 'Authenticate',$asterisk_conf['astetcdir'].'/pinset_${ARG1}')); + $ext->add('macro-pinsets', 's', '', new ext_execif('$["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]', 'ResetCDR')); + // authenticate with the CDR option (a) + $ext->add('macro-pinsets', 'cdr', '', new ext_execif('$["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]', 'Authenticate',$asterisk_conf['astetcdir'].'/pinset_${ARG1},a')); + $ext->add('macro-pinsets', 'cdr', '', new ext_execif('$["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]', 'ResetCDR')); + } + break; + } +} + +function pinsets_hookGet_config($engine) { + global $ext; + switch($engine) { + case "asterisk": + $usage_list = pinsets_list_usage('routing'); + if (is_array($usage_list) && count($usage_list)) { + $pinsets = pinsets_list(true); + $addtocdr = array(); + foreach ($pinsets as $pinset) { + $addtocdr[$pinset['pinsets_id']] = $pinset['addtocdr']; + } + foreach ($usage_list as $thisroute) { + $context = 'outrt-'.$thisroute['foreign_id']; + $patterns = core_routing_getroutepatternsbyid($thisroute['foreign_id']); + foreach ($patterns as $pattern) { + $fpattern = core_routing_formatpattern($pattern); + $exten = $fpattern['dial_pattern']; + $ext->splice($context, $exten, 1, new ext_macro('pinsets', $thisroute['pinsets_id'].','.$addtocdr[$thisroute['pinsets_id']])); + } + } + } + break; + } +} + +function pinsets_list_usage($dispname=true) { + $sql = 'SELECT * FROM `pinset_usage`'; + if ($dispname !== true) { + $sql .= " WHERE `dispname` = '$dispname'"; + } + return sql($sql,'getAll',DB_FETCHMODE_ASSOC); +} + +//get the existing meetme extensions +function pinsets_list($getAll=false) { + $results = sql("SELECT * FROM pinsets","getAll",DB_FETCHMODE_ASSOC); + if(is_array($results)){ + foreach($results as $result){ + // check to see if we have a dept match for the current AMP User. + if ($getAll || checkDept($result['deptname'])){ + // return this item's dialplan destination, and the description + $allowed[] = $result; + } + } + } + if (isset($allowed)) { + return $allowed; + } else { + return null; + } +} + +function pinsets_get($id){ + $results = sql("SELECT * FROM pinsets WHERE pinsets_id = '$id'","getRow",DB_FETCHMODE_ASSOC); + return $results; +} + +function pinsets_del($id){ + global $amp_conf; + + $filename = $amp_conf['ASTETCDIR'].'/pinset_'.$id; + if (file_exists($filename)) { + unlink($filename); + } + $results = sql("DELETE FROM pinsets WHERE pinsets_id = '$id'","query"); + $results = sql("DELETE FROM pinset_usage WHERE pinsets_id = '$id'","query"); +} + +function pinsets_add($post){ + if(!pinsets_chk($post)) + return false; + extract($post); + $passwords = pinsets_clean($passwords); + if(empty($description)) $description = _('Unnamed'); + $results = sql("INSERT INTO pinsets (description,passwords,addtocdr,deptname) values (\"$description\",\"$passwords\",\"$addtocdr\",\"$deptname\")"); +} + +function pinsets_edit($id,$post){ + if(!pinsets_chk($post)) + return false; + extract($post); + $passwords = pinsets_clean($passwords); + if(empty($description)) $description = _('Unnamed'); + $results = sql("UPDATE pinsets SET description = \"$description\", passwords = \"$passwords\", addtocdr = \"$addtocdr\", deptname = \"$deptname\" WHERE pinsets_id = \"$id\""); +} + +// clean and remove duplicates +function pinsets_clean($passwords) { + + $passwords = explode("\n",$passwords); + + if (!$passwords) { + $passwords = null; + } + + foreach (array_keys($passwords) as $key) { + //trim it + $passwords[$key] = trim($passwords[$key]); + + // remove invalid chars + $passwords[$key] = preg_replace("/[^0-9#*]/", "", $passwords[$key]); + + // remove blanks + if ($passwords[$key] == "") unset($passwords[$key]); + } + + // check for duplicates, and re-sequence + $passwords = array_values(array_unique($passwords)); + + if (is_array($passwords)) + return implode($passwords,"\n"); + else + return ""; +} + +// ensures post vars is valid +function pinsets_chk($post){ + return true; +} + +//removes a pinset from a route and shifts priority for all outbound routing pinsets +function pinsets_adjustroute($route_id,$action,$routepinset='') { + global $db; + $dispname = 'routing'; + $route_id = $db->escapeSimple($route_id); + $routepinset = $db->escapeSimple($routepinset); + + switch ($action) { + case 'delroute': + sql('DELETE FROM pinset_usage WHERE foreign_id ='.q($route_id)." AND dispname = '$dispname'"); + break; + case 'addroute'; + if ($routepinset != '') { + // we don't have the route_id yet, it hasn't been inserted yet :(, put it in the session + // and when returned it will be available on the redirect_standard + $_SESSION['pinsetsAddRoute'] = $routepinset; + } + break; + case 'delayed_insert_route'; + sql("INSERT INTO pinset_usage (pinsets_id, dispname, foreign_id) VALUES ($routepinset, '$dispname', '$route_id')"); + break; + case 'editroute'; + if ($routepinset != '') { + sql("REPLACE INTO pinset_usage (pinsets_id, dispname, foreign_id) VALUES ($routepinset, '$dispname', '$route_id')"); + } else { + sql('DELETE FROM pinset_usage WHERE foreign_id ='.q($route_id)." AND dispname = '$dispname'"); + } + break; + } +} + +// provide hook for routing +function pinsets_hook_core($viewing_itemid, $target_menuid) { + global $db; + + switch ($target_menuid) { + case 'routing': + //create a selection of available pinsets + $pinsets = pinsets_list(); + if ($viewing_itemid == '') { + $selected_pinset = ''; + } else { + // if this is set, we just added it so get it out of the session + if (isset($_SESSION['pinsetsAddRoute']) && $_SESSION['pinsetsAddRoute'] != '') { + $selected_pinset = $_SESSION['pinsetsAddRoute']; + } else { + $selected_pinset = $db->getOne("SELECT pinsets_id FROM pinset_usage WHERE dispname='routing' AND foreign_id='".$db->escapeSimple($viewing_itemid)."'"); + if(DB::IsError($selected_pinset)) { + die_freepbx($selected_pinset->getMessage()); + } + } + } + + $hookhtml = ' + + '._("PIN Set").''._('Optional: Select a PIN set to use. If using this option, leave the Route Password field blank.').': + + + + + '; + return $hookhtml; + break; + default: + return false; + break; + } +} + +function pinsets_hookProcess_core($viewing_itemid, $request) { + + // Record any hook selections made by target modules + // We'll add these to the pinset's "used_by" column in the format _ + // multiple targets could select a single pinset, so we'll comma delimiter them + + // this is really a crappy way to store things. + // Any module that is hooked by pinsets when submitted will result in all the "used_by" fields being re-written + switch ($request['display']) { + case 'routing': + $action = (isset($request['action']))?$request['action']:null; + $route_id = $viewing_itemid; + if (isset($request['Submit']) ) { + $action = (isset($action))?$action:'editroute'; + } + + // $action won't be set on the redirect but pinsetsAddRoute will be in the session + // + if (!$action && isset($_SESSION['pinsetsAddRoute']) && $_SESSION['pinsetsAddRoute'] != '') { + unset($_SESSION['pinsetsAddRoute']); + pinsets_adjustroute($route_id,'delayed_insert_route',$_SESSION['pinsetsAddRoute']); + } elseif ($action){ + pinsets_adjustroute($route_id,$action,$request['pinsets']); + } + break; + } +} +?> Index: /modules/branches/2.10/pinsets/page.pinsets.php =================================================================== --- /modules/branches/2.10/pinsets/page.pinsets.php (revision 9126) +++ /modules/branches/2.10/pinsets/page.pinsets.php (revision 9126) @@ -0,0 +1,139 @@ + + +
+ + +
+ +
+

'._("PIN Set ").' '.$itemid.' '._("deleted").'!

'; +} else { + if ($itemid){ + //get details for this time condition + $thisItem = pinsets_get($itemid); + } + + $delURL = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&action=delete'; + $delButton = " +
+ + + + +
"; + +?> + +

+ +

+ + + +
+ + + _deptname ?>"> + + + + + + + + + + + + + + + + + + + + + + + + +

tabindex="">
+ +

" tabindex="">
+ + +
+ Index: /modules/branches/2.10/pinsets/install.php =================================================================== --- /modules/branches/2.10/pinsets/install.php (revision 11109) +++ /modules/branches/2.10/pinsets/install.php (revision 11109) @@ -0,0 +1,101 @@ +query($q); + if(DB::IsError($check)) { + die_freepbx("Can not create pinset tables\n".$check->getDebugInfo()); + } +} +outn(_("checking if migration required..")); +$sql = "SELECT `used_by` FROM pinsets WHERE used_by != ''"; +$check = $db->getRow($sql, DB_FETCHMODE_ASSOC); +if(!DB::IsError($check)) { + outn(_("migrating..")); + /* We need to now migrate from from the old format of dispname_id where the only supported dispname + so far has been "routing" and the "id" used was the imperfect nnn-name. As it truns out, it was + possible to have the same route name perfiously so we will try to detect that. This was really ugly + so if we can't find stuff we will simply report errors and let the user go back and fix things. + */ + $sql = "SELECT * FROM pinsets"; + $pinsets = $db->getAll($sql, DB_FETCHMODE_ASSOC); + if(DB::IsError($result)) { + out(_("unknown error fetching table data")); + out(_("migration aborted")); + } else { + /* If there are any rows then lets get our route information. We will force this module to depend on + * the new core, so we can count on the APIs being available. If there are indentical names, then + * oh well... + */ + if (count($pinsets)) { + $routes = core_routing_list(); + $route_hash = array(); + foreach ($routes as $route) { + $route_hash[$route['name']] = $route['route_id']; + } + } + $pinset_usage = array(); + foreach ($pinsets as $pinset) { + $used_by = explode(',',$pinset['used_by']); + foreach ($used_by as $target) { + $parts = explode('_',$target,2); + // there should only be routing but just in case... + $dispname = $parts[0]; + if ($dispname == 'routing') { + $lookup = substr($parts[1],4); + $foreign_id = isset($route_hash[$lookup]) ? $route_hash[$lookup] : false; + } else { + $foreign_id = $parts[1]; + } + if ($foreign_id === false) { + out(); + out(_("FAILED migrating route $lookup NOT FOUND")); + outn(_("continuing..")); + } else { + $pinset_usage[] = array($pinset['pinsets_id'],$dispname,$foreign_id); + } + } + } + // We new have all the indices, so lets save them + // + $compiled = $db->prepare('INSERT INTO `pinset_usage` (`pinsets_id`, `dispname`, `foreign_id`) values (?,?,?)'); + $result = $db->executeMultiple($compiled,$pinset_usage); + if(DB::IsError($result)) { + out("FATAL: ".$result->getDebugInfo()."\n".'error inserting into pinsets_uage table'); + } else { + out(_("done")); + + outn(_("dropping used_by field..")); + $sql = "ALTER TABLE `pinsets` DROP `used_by`"; + $result = $db->query($sql); + if(DB::IsError($result)) { + out(_("no used_by field???")); + } else { + out(_("ok")); + } + } + } +} else { + out(_("already done")); +} + +?> Index: /modules/branches/2.10/conferences/i18n/sv_SE/LC_MESSAGES/conferences.po =================================================================== --- /modules/branches/2.10/conferences/i18n/sv_SE/LC_MESSAGES/conferences.po (revision 11845) +++ /modules/branches/2.10/conferences/i18n/sv_SE/LC_MESSAGES/conferences.po (revision 11845) @@ -0,0 +1,340 @@ +# This file is part of FreePBX. +# +# FreePBX 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. +# +# FreePBX 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 FreePBX. If not, see . +# +# Copyright (C) 2008, 2009, 2010 Mikael Carlsson, mickecamino@gmail.com +# +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX conferences\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-18 08:25+0100\n" +"PO-Revision-Date: 2011-03-19 00:00+0100\n" +"Last-Translator: Mikael Carlsson \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Swedish\n" +"X-Poedit-Country: SWEDEN\n" + +msgid "Conferences" +msgstr "Konferenser" + +msgid "Internal Options & Configuration" +msgstr "Interna val och konfigurationer" + +msgid "" +"Allow creation of conference rooms (meet-me) where multiple people can talk " +"together." +msgstr "Modulen ger möjlighet att skapa konferenser" + +#, php-format +msgid "Conference Room %s : %s" +msgstr "Konferensrum %s : %s" + +#, php-format +msgid "Conference: %s" +msgstr "Konferens: %s" + +msgid "Conference: " +msgstr "Konferens:" + +msgid "Checking if music field present.." +msgstr "Kontrollerar om musicfÀltet finns.." + +msgid "adding music field.." +msgstr "lÀgger till musicfÀltet" + +msgid "fatal error" +msgstr "allvarligt fel" + +msgid "ok" +msgstr "ok" + +msgid "already present" +msgstr "finns redan" + +msgid "Checking if recordings need migration.." +msgstr "Kontrollerar om inspelningar behöver migreras.." + +msgid "migrating" +msgstr "migrerar" + +msgid "adding joinmsg_id field.." +msgstr "lÀgger till fÀltet joinmsg_id.." + +msgid "migrate to recording ids.." +msgstr "migrerar till recording ids.." + +#, php-format +msgid "migrated %s entries" +msgstr "migrerade %s poster" + +msgid "dropping joinmsg field.." +msgstr "kastar fÀltet joinmsg.." + +msgid "no joinmsg field???" +msgstr "inget fÀlt som heter joinmsg???" + +msgid "already migrated" +msgstr "redan migrerad" + +msgid "Checking for users field.." +msgstr "Kontrollerar om fÀlet users finns.." + +msgid "adding.." +msgstr "lÀgger till.." + +msgid "FATAL error" +msgstr "ALLVARLIGT fel" + +msgid "Warning! Extension" +msgstr "Varning! Anknytning" + +msgid "is not allowed for your account." +msgstr "Àr inte tillåtet för ditt konto." + +msgid "Add Conference" +msgstr "LÀgg till konferens" + +msgid "Conference" +msgstr "Konferens" + +msgid "deleted" +msgstr "borttagen" + +msgid "Conference:" +msgstr "Konferens:" + +#, php-format +msgid "Delete Conference %s" +msgstr "Ta bort konferens %s" + +msgid "Conflicting Extensions" +msgstr "Anknytningarna Àr i konflikt" + +msgid "Edit Conference" +msgstr "Redigera konferens" + +msgid "Conference Number:" +msgstr "Konferensnummer:" + +msgid "Use this number to dial into the conference." +msgstr "AnvÀnd detta nummer för att ringa till konferensen." + +msgid "Conference Name:" +msgstr "Konferensnamn:" + +msgid "Give this conference a brief name to help you identify it." +msgstr "Ge konferensen ett kortfattat namn." + +msgid "User PIN:" +msgstr "AnvÀndarlösenord:" + +msgid "" +"You can require callers to enter a password before they can enter this " +"conference.

This setting is optional.

If either PIN is " +"entered, the user will be prompted to enter a PIN." +msgstr "" +"Du kan krÀva att uppringare anger ett lösenord innan de når konferensen." +"

Denna instÀllning Àr valfri.

Om ett lösenord (endast siffror) " +"skrivs in får uppringaren en fråga om att mata in ett lösenord." + +msgid "Admin PIN:" +msgstr "Administratörslösenord:" + +msgid "" +"Enter a PIN number for the admin user.

This setting is optional " +"unless the 'leader wait' option is in use, then this PIN will identify the " +"leader." +msgstr "" +"Skriv in ett lösenord (endast siffror) för administratören.
Denna " +"instÀllning Àr valfri om inte 'InvÀnta ledare' Àr valt, då kommer detta " +"lösenord att identifiera ledaren." + +msgid "Conference Options" +msgstr "Konferensval" + +msgid "Join Message:" +msgstr "Anslutningsmeddelande:" + +msgid "" +"Message to be played to the caller before joining the conference.

To " +"add additional recordings please use the \"System Recordings\" MENU to the " +"left" +msgstr "" +"Meddelande som ska spelas upp för uppringaren innan anslutning sker till " +"konferensen.

För att lÀgga till fler inspelningar vÀljer du " +"\"Systeminspelningar\" i menyn till vÀnster" + +msgid "None" +msgstr "Inget" + +msgid "" +"Message to be played to the caller before joining the conference.

You " +"must install and enable the \"Systems Recordings\" Module to edit this option" +msgstr "" +"Meddelande som ska spelas upp för uppringaren innan anslutning sker till " +"konferensen.

Du måste installera och aktivera modulen " +"\"Systeminspelningar\" för att kunna redigera detta val" + +msgid "Leader Wait:" +msgstr "VÀnta på ledaren:" + +msgid "" +"Wait until the conference leader (admin user) arrives before starting the " +"conference" +msgstr "" +"VÀnta till konferensledaren (administratören) ansluter innan konferensen " +"startas" + +msgid "No" +msgstr "Nej" + +msgid "Yes" +msgstr "Ja" + +msgid "Talker Optimization:" +msgstr "Taloptimering" + +msgid "" +"Turns on talker optimization. With talker optimization, Asterisk treats " +"talkers who\n" +"are not speaking as being muted, meaning that no encoding is done on " +"transmission\n" +"and that received audio that is not registered as talking is omitted, " +"causing no\n" +"buildup in background noise." +msgstr "" +"SÀtter på taloptimering. Med taloptimering Àr personer som inte pratar " +"betraktade som mikrofonavstÀngda. Detta betyder att ingen kodning sker och " +"mottaget ljud som inte detekteras som prat elimineras" + +msgid "Talker Detection:" +msgstr "Taldetektering" + +msgid "" +"Sets talker detection. Asterisk will sends events on the Manager Interface " +"identifying\n" +"the channel that is talking. The talker will also be identified on the " +"output of\n" +"the meetme list CLI command." +msgstr "" +"Tillåter taldetektering. Asterisk kommer att skicka hÀndelser i " +"Managerinterfacet dÀr identifiering av vilken kanal det Àr som innehåller " +"tal. Talaren kommer också att identifieras och visas på meete listan" + +msgid "Quiet Mode:" +msgstr "Tyst lÀge:" + +msgid "Quiet mode (do not play enter/leave sounds)" +msgstr "Tyst lÀge (spela inte upp ljud för anslut/lÀmna)" + +msgid "User Count:" +msgstr "RÀkna anvÀndare:" + +msgid "Announce user(s) count on joining conference" +msgstr "BerÀtta antalet anvÀndare nÀr anslutning till konferensen sker" + +msgid "User join/leave:" +msgstr "AnvÀndare ansluter/lÀmnar:" + +msgid "Announce user join/leave" +msgstr "Annonsera nÀr anvÀndare ansluter/lÀmnar" + +msgid "Music on Hold:" +msgstr "Pausmusik:" + +msgid "Enable Music On Hold when the conference has a single caller" +msgstr "Aktivera pausmusik nÀr det endast Àr en anvÀndare i konferensen" + +msgid "Music on Hold Class:" +msgstr "Klasser för pausmusik" + +msgid "" +"Music (or Commercial) played to the caller while they wait in line for the " +"conference to start. Choose \"inherit\" if you want the MoH class to be what " +"is currently selected, such as by the inbound route.

This music is " +"defined in the \"Music on Hold\" to the left." +msgstr "" +"Musik (eller reklam) som spelas upp för uppringaren nÀr dom vÀntar på att " +"konferensen ska starta. VÀlj \"Àrv\" om du vill att musikklassen ska vara " +"samma klass som redan Àr definierad i inkommande vÀg.

Musiken " +"definieras i \"Pausmusik\" i menyn till vÀnster" + +msgid "inherit" +msgstr "Àrv" + +msgid "default" +msgstr "standard" + +msgid "Allow Menu:" +msgstr "TillÃ¥t meny:" + +msgid "Present Menu (user or admin) when '*' is received ('send' to menu)" +msgstr "" +"Ge tillgÃ¥ng till en meny (anvÀndare eller administratör) nÀr '*' trycks pÃ¥ " +"telefonen" + +msgid "Record Conference:" +msgstr "Spela in konferens:" + +msgid "Record the conference call" +msgstr "VÀlj om konferensen ska spelas in" + +msgid "Maximum Participants:" +msgstr "Max antal deltagare" + +msgid "Maximum Number of users allowed to join this conference." +msgstr "Det maximala antalet deltagare som tillÃ¥ts i konferensen" + +msgid "No Limit" +msgstr "Ingen begrÀnsning" + +msgid "Mute on Join:" +msgstr "StÀng av ljud vid anslutning:" + +msgid "" +"Mute everyone when they initially join the conference. Please note that if " +"you do not have 'Leader Wait' set to yes you must have 'Allow Menu' set to " +"Yes to unmute yourself" +msgstr "" +"StÀng av ljudet för alla som ansluter till konferensen. Notera att om du inte " +"har 'VÀnta pÃ¥ ledare' aktiverad mÃ¥ste du ha 'TillÃ¥t meny' aktiverad för att " +"kunna slÃ¥ pÃ¥ ljudetför dig sjÀlv" + +msgid "Submit Changes" +msgstr "Spara Àndringar" + +msgid "Please enter a valid Conference Number" +msgstr "Skriv in ett giltig konferensnummer" + +msgid "Please enter a valid Conference Name" +msgstr "Skriv in ett giltigt konferensnamn" + +msgid "" +"You must set an admin PIN for the Conference Leader when selecting the " +"leader wait option" +msgstr "" +"Du mÃ¥ste sÀtta en administratörs-PIN för konferensledaren nÀr du vÀljer " +"VÀnta pÃ¥ ledare" + +msgid "" +"You must set Allow Menu to Yes when not using a Leader or Admin in your " +"conference, otherwise you will be unable to unmute yourself" +msgstr "" +"Du mÃ¥ste aktivera TillÃ¥t meny om du inte anvÀner Ledare eller Admin i din " +"konferens, annars kan du inte aktivera ljudet för dig sjÀlv" Index: /modules/branches/2.10/conferences/i18n/bg_BG/LC_MESSAGES/conferences.po =================================================================== --- /modules/branches/2.10/conferences/i18n/bg_BG/LC_MESSAGES/conferences.po (revision 9100) +++ /modules/branches/2.10/conferences/i18n/bg_BG/LC_MESSAGES/conferences.po (revision 9100) @@ -0,0 +1,319 @@ +# This file is part of FreePBX. +# +# FreePBX 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. +# +# FreePBX 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 FreePBX. If not, see . +# +# Copyright (C) 2008, 2009 Chavdar Iliev +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX v2.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-09 07:11+0100\n" +"PO-Revision-Date: 2010-01-23 00:00+0200\n" +"Last-Translator: \n" +"Language-Team: Chavdar Iliev \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Bulgarian\n" +"X-Poedit-Country: BULGARIA\n" +"X-Poedit-SourceCharset: utf-8\n" + +msgid "Conferences" +msgstr "КПМфереМцОО" + +msgid "" +"Internal Options \n" +"&\n" +" Configuration" +msgstr "" + +msgid "" +"Allow creation of conference rooms (meet-me) where multiple people can talk " +"together." +msgstr "" + +#, php-format +msgid "Conference Room %s : %s" +msgstr "Стая за КПМфереМцОО %s : %s" + +#, php-format +msgid "Conference: %s" +msgstr "КПМфереМцОя: %s" + +msgid "Conference: " +msgstr "КПМфереМцОя: " + +msgid "Checking if music field present.." +msgstr "" + +msgid "adding music field.." +msgstr "" + +msgid "fatal error" +msgstr "фаталМа грешка" + +msgid "ok" +msgstr "ok" + +msgid "already present" +msgstr "" + +msgid "Checking if recordings need migration.." +msgstr "ПрПверка ЎалО запОсОте ОЌат МужЎа Пт преЌестваМе.." + +msgid "migrating" +msgstr "преЌестваМе" + +msgid "adding joinmsg_id field.." +msgstr "ЎПбаваМе Ма joinmsg_id пПле.." + +msgid "migrate to recording ids.." +msgstr "преЌестваМе къЌ recording ids.." + +#, php-format +msgid "migrated %s entries" +msgstr "преЌестеМО %s въвежЎаМОя" + +msgid "dropping joinmsg field.." +msgstr "Ð¿Ñ€ÐµÐŒÐ°Ñ +ваМе Ма пПле joinmsg.." + +msgid "no joinmsg field???" +msgstr "МяЌа joinmsg пПле???" + +msgid "already migrated" +msgstr "вече са преЌестеМО" + +msgid "Checking for users field.." +msgstr "" + +msgid "adding.." +msgstr "" + +msgid "FATAL error" +msgstr "" + +msgid "Warning! Extension" +msgstr "ВМОЌаМОе! ВътрешМа ЛОМОя" + +msgid "is not allowed for your account." +msgstr "Ме е разрешеМа за вашОя акауМт." + +msgid "Add Conference" +msgstr "ДПбавО КПМфереМцОя" + +msgid "Conference" +msgstr "КПМфереМцОя" + +msgid "deleted" +msgstr "ОзтрОта" + +msgid "Conference:" +msgstr "КПМфереМцОя:" + +#, php-format +msgid "Delete Conference %s" +msgstr "ИзтрОй КПМфереМцОя %s" + +msgid "Conflicting Extensions" +msgstr "ВътрешМО ЛОМОО в КПМфлОкт" + +msgid "Edit Conference" +msgstr "РеЎактОрай КПМфереМцОя" + +msgid "Conference Number:" +msgstr "КПМфереМцОя НПЌер:" + +msgid "Use this number to dial into the conference." +msgstr "ИзпПлзва тПзО МПЌер за МабОраМе Ма кПМфереМцОята." + +msgid "Conference Name:" +msgstr "ИЌе Ма КПМфереМцОя:" + +msgid "Give this conference a brief name to help you identify it." +msgstr "" +"Дайте Ма тазО кПМфереМцОя ПпОсващП ОЌе за Ўа вО пПЌПгМе прО ОЎеМтОфОцОраМетП." + +msgid "User PIN:" +msgstr "ППтребОтелскО PIN:" + +msgid "" +"You can require callers to enter a password before they can enter this " +"conference.

This setting is optional.

If either PIN is " +"entered, the user will be prompted to enter a PIN." +msgstr "" +"МПжете Ўа ОзОсквате Пт ПбажЎащОте се Ўа въвеЎат парПла преЎО Ўа се " +"прОсъеЎОМят къЌ кПМфереМцОята.

ТазО МастрПйка Ме е заЎължОтелМа." +"

АкП е въвеЎеМ PIN, пПтребОтелОте ще бъЎат пПЌПлеМО Ўа въвеЎат PIN." + +msgid "Admin PIN:" +msgstr "АЎЌОМОстратПрскО PIN:" + +msgid "" +"Enter a PIN number for the admin user.

This setting is optional " +"unless the 'leader wait' option is in use, then this PIN will identify the " +"leader." +msgstr "" +"ВъвеЎете PIN МПЌер за пПтребОтел аЎЌОМ.

ТазО МастрПйка Ме е " +"заЎължОтелМа ПсвеМ акП 'ОзчакваМе Ма вПЎещОя' ПпцОята се ОзпПлзва, тПгава " +"тПзО PIN ще ОЎеМтОфОцОра вПЎещОя." + +msgid "Conference Options" +msgstr "ОпцОО Ма КПМфереМцОя" + +msgid "Join Message:" +msgstr "СъПбщеМОе прО ВлОзаМе:" + +msgid "" +"Message to be played to the caller before joining the conference.

To " +"add additional recordings please use the \"System Recordings\" MENU to the " +"left" +msgstr "" +"СъПбщеМОе кПетП ще се възпрПОзвеЎе Ма ПбажЎащОя се преЎО Ўа се прОсъеЎОМО " +"къЌ кПМфереМцОята.

За Ўа ЎПбавОте ЎПпълМОтелМО запОсО ОзпПлзвайте " +"ЌеМю \"СОстеЌМО ЗапОсО\" ПтлявП." + +msgid "None" +msgstr "НяЌа" + +msgid "" +"Message to be played to the caller before joining the conference.

You " +"must install and enable the \"Systems Recordings\" Module to edit this option" +msgstr "" +"СъПбщеМОе кПетП ще се възпрПОзвеЎе Ма ПбажЎащОя се преЎО Ўа се прОсъеЎОМО " +"къЌ кПМфереМцОята.

Трябва Ўа сте ОМсталОралО О разрешОлО МПЎул " +"\"СОстеЌМО ЗапОсО\" за Ўа реЎактОрате тазО ПпцОя." + +msgid "Leader Wait:" +msgstr "ИзчакваМе Ма ВПЎещОя:" + +msgid "" +"Wait until the conference leader (admin user) arrives before starting the " +"conference" +msgstr "" +"Изчаква ЎПкатП вПЎещОя Ма кПМфереМцОята (пПтребОтел аЎЌОМ) се включО преЎО " +"Ўа стартОра кПМфереМцОята." + +msgid "No" +msgstr "Не" + +msgid "Yes" +msgstr "Да" + +msgid "Talker Optimization:" +msgstr "" + +msgid "" +"Turns on talker optimization. With talker optimization, Asterisk treats " +"talkers who\n" +"are not speaking as being muted, meaning that no encoding is done on " +"transmission\n" +"and that received audio that is not registered as talking is omitted, " +"causing no\n" +"buildup in background noise." +msgstr "" + +msgid "Talker Detection:" +msgstr "" + +msgid "" +"Sets talker detection. Asterisk will sends events on the Manager Interface " +"identifying\n" +"the channel that is talking. The talker will also be identified on the " +"output of\n" +"the meetme list CLI command." +msgstr "" + +msgid "Quiet Mode:" +msgstr "Ð¢ÐžÑ + РежОЌ:" + +msgid "Quiet mode (do not play enter/leave sounds)" +msgstr "Ð¢ÐžÑ + режОЌ (Ме възпрПОзвежЎа влОзаМе/ОзлОзаМе съПбщеМОя)." + +msgid "User Count:" +msgstr "БреМе Ма ППтребОтелОте:" + +msgid "Announce user(s) count on joining conference" +msgstr "Известява за брПя Ма пПтребОтелОте прО влОзаМе в кПМфереМцОята." + +msgid "User join/leave:" +msgstr "ППтребОтел влОза/ОзлОза:" + +msgid "Announce user join/leave" +msgstr "Известява за влОзаМе/ОзлОзаМе Ма пПтребОтел" + +msgid "Music on Hold:" +msgstr "МузОка прО ЗаЎържаМе:" + +msgid "Enable Music On Hold when the conference has a single caller" +msgstr "" +"Разрешава МузОка прО ЗаЎържаМе кПгатП кПМфереМцОята ОЌа саЌП еЎОМ ПбажЎащ се." + +msgid "Music on Hold Class:" +msgstr "" + +msgid "" +"Music (or Commercial) played to the caller while they wait in line for the " +"conference to start. Choose \"inherit\" if you want the MoH class to be what " +"is currently selected, such as by the inbound route.

This music is " +"defined in the \"Music on Hold\" to the left." +msgstr "" + +msgid "inherit" +msgstr "" + +msgid "default" +msgstr "" + +msgid "Allow Menu:" +msgstr "ППзвПлО МеМю:" + +msgid "Present Menu (user or admin) when '*' is received ('send' to menu)" +msgstr "" +"ПреЎставя МеМю (пПтребОтел ОлО аЎЌОМОстратПр) кПгатП '*' е пПлучеМа " +"('ОзпратО' къЌ ЌеМю)." + +msgid "Record Conference:" +msgstr "ЗапОсвай КПМфереМцОя:" + +msgid "Record the conference call" +msgstr "ЗапОсва кПМфереМцОята." + +msgid "Maximum Participants:" +msgstr "" + +msgid "Maximum Number of users allowed to join this conference." +msgstr "" + +msgid "No Limit" +msgstr "" + +msgid "Submit Changes" +msgstr "ПрОеЌО ПрПЌеМОте" + +msgid "Please enter a valid Conference Number" +msgstr "МПля въвеЎете правОлеМ НПЌер Ма КПМфереМцОя." + +msgid "Please enter a valid Conference Name" +msgstr "МПля въвеЎете правОлМП ИЌе Ма КПМфереМцОя" + +msgid "" +"You must set an admin PIN for the Conference Leader when selecting the " +"leader wait option" +msgstr "" +"Трбва Ўа въвеЎете аЎЌОМОстратПрскО PIN за ВПЎещОя Ма КПМфереМцОята кПгатП " +"ОзбОрате ПпцОя ОзчакваМе Ма вПЎещОя" Index: /modules/branches/2.10/conferences/i18n/he_IL/LC_MESSAGES/conferences.po =================================================================== --- /modules/branches/2.10/conferences/i18n/he_IL/LC_MESSAGES/conferences.po (revision 9100) +++ /modules/branches/2.10/conferences/i18n/he_IL/LC_MESSAGES/conferences.po (revision 9100) @@ -0,0 +1,305 @@ +# This file is part of FreePBX. +# +# FreePBX 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. +# +# FreePBX 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 FreePBX. If not, see . +# +# Hebrew version for Asterisk Conferences FreePBX Module. +# Copyright (C) 2006 +# This file is distributed under the same license as the PACKAGE package. +# Shimi , 2006. +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX 2.2.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-09 07:11+0100\n" +"PO-Revision-Date: 2010-01-23 00:00+0300\n" +"Last-Translator: Shimi \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Conferences" +msgstr "" + +msgid "" +"Internal Options \n" +"&\n" +" Configuration" +msgstr "" + +msgid "" +"Allow creation of conference rooms (meet-me) where multiple people can talk " +"together." +msgstr "" + +#, php-format +msgid "Conference Room %s : %s" +msgstr "" + +#, php-format +msgid "Conference: %s" +msgstr "" + +msgid "Conference: " +msgstr "" + +msgid "Checking if music field present.." +msgstr "" + +msgid "adding music field.." +msgstr "" + +msgid "fatal error" +msgstr "" + +msgid "ok" +msgstr "" + +msgid "already present" +msgstr "" + +msgid "Checking if recordings need migration.." +msgstr "" + +msgid "migrating" +msgstr "" + +msgid "adding joinmsg_id field.." +msgstr "" + +msgid "migrate to recording ids.." +msgstr "" + +#, php-format +msgid "migrated %s entries" +msgstr "" + +msgid "dropping joinmsg field.." +msgstr "" + +msgid "no joinmsg field???" +msgstr "" + +msgid "already migrated" +msgstr "" + +msgid "Checking for users field.." +msgstr "" + +msgid "adding.." +msgstr "" + +msgid "FATAL error" +msgstr "" + +msgid "Warning! Extension" +msgstr "אזה׹ה! שלוחה" + +msgid "is not allowed for your account." +msgstr "אינה מוךשית עבוך החשבון שלך." + +msgid "Add Conference" +msgstr "הוסף ועידה" + +msgid "Conference" +msgstr "ועידה" + +msgid "deleted" +msgstr "נמחקה" + +msgid "Conference:" +msgstr "ועידה:" + +#, php-format +msgid "Delete Conference %s" +msgstr "מחק ועידה %s" + +msgid "Conflicting Extensions" +msgstr "" + +msgid "Edit Conference" +msgstr "עךוך ועידה" + +msgid "Conference Number:" +msgstr "מס׀ך ועידה:" + +msgid "Use this number to dial into the conference." +msgstr "השתמש במס׀ך זה כדי לחייג לתוך הועידה" + +msgid "Conference Name:" +msgstr "שם הועידה:" + +msgid "Give this conference a brief name to help you identify it." +msgstr "תן לועידה זו שם ק׊ך שיעזוך לך לזהות אותה." + +msgid "User PIN:" +msgstr "סיסמת משתמש:" + +msgid "" +"You can require callers to enter a password before they can enter this " +"conference.

This setting is optional.

If either PIN is " +"entered, the user will be prompted to enter a PIN." +msgstr "" +"אתה יכול לדךוש שמתקשךים ישט׹כו להכניס סיסמא ל׀ני שהם יכולים להיכנס לועידה זו." +"

הגד׹ה זו היא ךשות.

אם הוכנסה סיסמת משתמש כלשהיא, " +"המשתמש יתבקש לחייגה בכניסה." + +msgid "Admin PIN:" +msgstr "סיסמת מנהל:" + +msgid "" +"Enter a PIN number for the admin user.

This setting is optional " +"unless the 'leader wait' option is in use, then this PIN will identify the " +"leader." +msgstr "" +"הכנס סיסמא עבוך המשתמש המנהל.

א׀שךות זו היא ךשות אלא אם כן " +"הא׀שךות 'המתן למנהל' מסומנת, ובמק׹ה זה, סיסמא זו תזהה את המנהל." + +msgid "Conference Options" +msgstr "א׀שךויות ועידה" + +msgid "Join Message:" +msgstr "הודעת ה׊טך׀ות:" + +msgid "" +"Message to be played to the caller before joining the conference.

To " +"add additional recordings please use the \"System Recordings\" MENU to the " +"left" +msgstr "" +"הודעה שתושמע למתקשך ל׀ני הכניסה לועידה.

כדי להוסיף הודעות נוס׀ות, " +"אנא השתמש בת׀ךיט \"הקלטות מעךכת\" שב׊ד שמאל." + +msgid "None" +msgstr "אין" + +msgid "" +"Message to be played to the caller before joining the conference.

You " +"must install and enable the \"Systems Recordings\" Module to edit this option" +msgstr "" +"הודעה שתושמע למתקשך ל׀ני הכניסה לועידה.

אתה חייב להתקין ולה׀עיל " +"את המודול \"הקלטות מעךכת\" כדי לעךוך א׀שךות זאת" + +msgid "Leader Wait:" +msgstr "המתנה למנהל:" + +msgid "" +"Wait until the conference leader (admin user) arrives before starting the " +"conference" +msgstr "" +"המתן עד שמנהל הועידה (משתמש עם סיסמא מיוחדת) יגיע ל׀ני שתחבך את כולם לועידה" + +msgid "No" +msgstr "לא" + +msgid "Yes" +msgstr "כן" + +msgid "Talker Optimization:" +msgstr "" + +msgid "" +"Turns on talker optimization. With talker optimization, Asterisk treats " +"talkers who\n" +"are not speaking as being muted, meaning that no encoding is done on " +"transmission\n" +"and that received audio that is not registered as talking is omitted, " +"causing no\n" +"buildup in background noise." +msgstr "" + +msgid "Talker Detection:" +msgstr "" + +msgid "" +"Sets talker detection. Asterisk will sends events on the Manager Interface " +"identifying\n" +"the channel that is talking. The talker will also be identified on the " +"output of\n" +"the meetme list CLI command." +msgstr "" + +msgid "Quiet Mode:" +msgstr "משב שקט:" + +msgid "Quiet mode (do not play enter/leave sounds)" +msgstr "משב שקט (אל תשמיע שלילי כניסה/ישיאה)" + +msgid "User Count:" +msgstr "ס׀יךת משתמשים:" + +msgid "Announce user(s) count on joining conference" +msgstr "הכ׹ז על מס׀ך הנמשאים בועידה בזמן הכניסה לועידה" + +msgid "User join/leave:" +msgstr "כניסת/י׊יאת משתמש:" + +msgid "Announce user join/leave" +msgstr "הכ׹ז על כניסה/ישיאה של משתמשים" + +msgid "Music on Hold:" +msgstr "מוסיקה בהמתנה:" + +msgid "Enable Music On Hold when the conference has a single caller" +msgstr "ה׀על מוסיקה בהמתנה כאשך בועידה יש ךק מתקשך אחד" + +msgid "Music on Hold Class:" +msgstr "" + +msgid "" +"Music (or Commercial) played to the caller while they wait in line for the " +"conference to start. Choose \"inherit\" if you want the MoH class to be what " +"is currently selected, such as by the inbound route.

This music is " +"defined in the \"Music on Hold\" to the left." +msgstr "" + +msgid "inherit" +msgstr "" + +msgid "default" +msgstr "" + +msgid "Allow Menu:" +msgstr "א׀שך ת׀ךיט:" + +msgid "Present Menu (user or admin) when '*' is received ('send' to menu)" +msgstr "השג ת׀ךיט (משתמש או מנהל) כאשך לוחשים על כוכבית ('שליחה' אל הת׀ךיט)" + +msgid "Record Conference:" +msgstr "" + +msgid "Record the conference call" +msgstr "" + +msgid "Maximum Participants:" +msgstr "" + +msgid "Maximum Number of users allowed to join this conference." +msgstr "" + +msgid "No Limit" +msgstr "" + +msgid "Submit Changes" +msgstr "" + +msgid "Please enter a valid Conference Number" +msgstr "" + +msgid "Please enter a valid Conference Name" +msgstr "" + +msgid "" +"You must set an admin PIN for the Conference Leader when selecting the " +"leader wait option" +msgstr "" Index: /modules/branches/2.10/conferences/i18n/zh_CN/LC_MESSAGES/conferences.po =================================================================== --- /modules/branches/2.10/conferences/i18n/zh_CN/LC_MESSAGES/conferences.po (revision 9100) +++ /modules/branches/2.10/conferences/i18n/zh_CN/LC_MESSAGES/conferences.po (revision 9100) @@ -0,0 +1,328 @@ +# This file is part of FreePBX. +# +# FreePBX 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. +# +# FreePBX 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 FreePBX. If not, see . +# +# Copyright (C) 2008, 2009 EdwardBadBoy +# +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX 2.5 Chinese Translation\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-09 07:11+0100\n" +"PO-Revision-Date: 2010-01-23 00:00+0800\n" +"Last-Translator: 呚埁晟 \n" +"Language-Team: EdwardBadBoy \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Chinese\n" +"X-Poedit-Country: CHINA\n" +"X-Poedit-SourceCharset: utf-8\n" + +msgid "Conferences" +msgstr "" + +msgid "" +"Internal Options \n" +"&\n" +" Configuration" +msgstr "" + +msgid "" +"Allow creation of conference rooms (meet-me) where multiple people can talk " +"together." +msgstr "" + +#, php-format +msgid "Conference Room %s : %s" +msgstr "䌚议宀 %s%s" + +#, php-format +msgid "Conference: %s" +msgstr "䌚议%s" + +msgid "Conference: " +msgstr "䌚议" + +msgid "Checking if music field present.." +msgstr "" + +msgid "adding music field.." +msgstr "" + +msgid "fatal error" +msgstr "臎呜错误" + +msgid "ok" +msgstr "完成" + +msgid "already present" +msgstr "" + +msgid "Checking if recordings need migration.." +msgstr "检查是吊需芁迁移圕音。。" + +msgid "migrating" +msgstr "正圚迁移" + +msgid "adding joinmsg_id field.." +msgstr "正圚添加joinmsg_id字段。。" + +msgid "migrate to recording ids.." +msgstr "迁移到圕音ID。。" + +#, php-format +msgid "migrated %s entries" +msgstr "迁移了 %s 䞪项目" + +msgid "dropping joinmsg field.." +msgstr "正圚删陀joinmsg字段" + +msgid "no joinmsg field???" +msgstr "joinmsg字段䞍存圚" + +msgid "already migrated" +msgstr "已经迁移过了" + +msgid "Checking for users field.." +msgstr "" + +msgid "adding.." +msgstr "" + +msgid "FATAL error" +msgstr "" + +msgid "Warning! Extension" +msgstr "譊告圚䜠的垐号䞋无法䜿甚分机" + +msgid "is not allowed for your account." +msgstr "。" + +msgid "Add Conference" +msgstr "添加䌚议" + +msgid "Conference" +msgstr "䌚议" + +msgid "deleted" +msgstr "已删陀" + +msgid "Conference:" +msgstr "䌚议" + +#, php-format +msgid "Delete Conference %s" +msgstr "删陀䌚议 %s" + +msgid "Conflicting Extensions" +msgstr "分机号冲突" + +msgid "Edit Conference" +msgstr "猖蟑䌚议" + +msgid "Conference Number:" +msgstr "䌚议号码" + +msgid "Use this number to dial into the conference." +msgstr "拚打歀号码以参加䌚议。" + +msgid "Conference Name:" +msgstr "䌚议名称" + +msgid "Give this conference a brief name to help you identify it." +msgstr "䞺歀䌚议取䞀䞪简短的名称以垮助䜠标识它。" + +msgid "User PIN:" +msgstr "䜿甚PIN码" + +msgid "" +"You can require callers to enter a password before they can enter this " +"conference.

This setting is optional.

If either PIN is " +"entered, the user will be prompted to enter a PIN." +msgstr "" +"䜠可以芁求参加䌚议的人蟓å +¥å¯†ç ã€‚

这项讟眮是可选的。

䞍" +"管是甚户PIN码还是管理员PIN码只芁å +¶äž­æœ‰äž€æ é‡Œè®Ÿçœ®äº†PIN码甚户圚参加䌚议前䌚" +"被提瀺需芁蟓å +¥PIN。" + +msgid "Admin PIN:" +msgstr "管理员PIN码" + +msgid "" +"Enter a PIN number for the admin user.

This setting is optional " +"unless the 'leader wait' option is in use, then this PIN will identify the " +"leader." +msgstr "" +"䞺管理员甚户蟓å +¥PIN码。

é™€éžâ€œç­‰åŸ +䞻持人到来”选项被启甚吊则管理员" +"PINçš„è®Ÿçœ®æ˜¯å¯é€‰çš„ã€‚è‹¥â€œç­‰åŸ +䞻持人到来”选项被启甚歀PIN码就甚于鉎别䞻持人。" + +msgid "Conference Options" +msgstr "䌚议选项" + +msgid "Join Message:" +msgstr "å +¥äŒšæ¶ˆæ¯ïŒš" + +msgid "" +"Message to be played to the caller before joining the conference.

To " +"add additional recordings please use the \"System Recordings\" MENU to the " +"left" +msgstr "" +"圚䞻叫加å +¥äŒšè®®ä¹‹å‰èŠæ’­æ”Ÿçš„æ¶ˆæ¯ã€‚

芁添加额倖的消息请䜿甚巊䟧的“系" +"统圕音”菜单。" + +msgid "None" +msgstr "无" + +msgid "" +"Message to be played to the caller before joining the conference.

You " +"must install and enable the \"Systems Recordings\" Module to edit this option" +msgstr "" +"圚䞻叫加å +¥äŒšè®®ä¹‹å‰èŠæ’­æ”Ÿçš„æ¶ˆæ¯ã€‚

芁添加额倖的消息请䜿甚巊䟧的“系" +"统圕音”菜单以猖蟑歀选项。" + +msgid "Leader Wait:" +msgstr "ç­‰åŸ +䞻持人" + +msgid "" +"Wait until the conference leader (admin user) arrives before starting the " +"conference" +msgstr "ç­‰åŸ +䞻持人管理员甚户加å +¥åŽæ‰åŒ€å§‹äŒšè®®" + +msgid "No" +msgstr "吊" + +msgid "Yes" +msgstr "是" + +msgid "Talker Optimization:" +msgstr "" + +msgid "" +"Turns on talker optimization. With talker optimization, Asterisk treats " +"talkers who\n" +"are not speaking as being muted, meaning that no encoding is done on " +"transmission\n" +"and that received audio that is not registered as talking is omitted, " +"causing no\n" +"buildup in background noise." +msgstr "" + +msgid "Talker Detection:" +msgstr "" + +msgid "" +"Sets talker detection. Asterisk will sends events on the Manager Interface " +"identifying\n" +"the channel that is talking. The talker will also be identified on the " +"output of\n" +"the meetme list CLI command." +msgstr "" + +msgid "Quiet Mode:" +msgstr "安静暡匏" + +msgid "Quiet mode (do not play enter/leave sounds)" +msgstr "安静暡匏䞍播攟å +¥äŒš/犻䌚的提瀺音" + +msgid "User Count:" +msgstr "甚户数量" + +msgid "Announce user(s) count on joining conference" +msgstr "通告加å +¥äŒšè®®çš„甚户数量" + +msgid "User join/leave:" +msgstr "甚户加å +¥/犻匀" + +msgid "Announce user join/leave" +msgstr "通告甚户的加å +¥/犻匀" + +msgid "Music on Hold:" +msgstr "ç­‰åŸ +音乐" + +msgid "Enable Music On Hold when the conference has a single caller" +msgstr "åœšäŒšè®®åªæœ‰äž€äžªç”šæˆ·å‚åŠ æ—¶ïŒŒå¯ç”šç­‰åŸ +音乐" + +msgid "Music on Hold Class:" +msgstr "" + +msgid "" +"Music (or Commercial) played to the caller while they wait in line for the " +"conference to start. Choose \"inherit\" if you want the MoH class to be what " +"is currently selected, such as by the inbound route.

This music is " +"defined in the \"Music on Hold\" to the left." +msgstr "" + +msgid "inherit" +msgstr "" + +msgid "default" +msgstr "" + +msgid "Allow Menu:" +msgstr "启甚菜单" + +msgid "Present Menu (user or admin) when '*' is received ('send' to menu)" +msgstr "圚收到“*”“发送”菜单后向甚户或管理员展瀺菜单" + +msgid "Record Conference:" +msgstr "䌚议圕音" + +msgid "Record the conference call" +msgstr "䞺䌚议圕音" + +msgid "Maximum Participants:" +msgstr "" + +msgid "Maximum Number of users allowed to join this conference." +msgstr "" + +msgid "No Limit" +msgstr "" + +msgid "Submit Changes" +msgstr "提亀曎改" + +msgid "Please enter a valid Conference Number" +msgstr "请蟓å +¥æœ‰æ•ˆçš„䌚议号码" + +msgid "Please enter a valid Conference Name" +msgstr "请蟓å +¥æœ‰æ•ˆçš„䌚议名称" + +msgid "" +"You must set an admin PIN for the Conference Leader when selecting the " +"leader wait option" +msgstr "åŠ‚æžœäœ å¯ç”šçš„ç­‰åŸ +äž»æŒäººçš„é€‰é¡¹ïŒŒå°±å¿ +须䞺䌚议䞻持人讟眮䞀䞪管理员PIN码" Index: /modules/branches/2.10/conferences/i18n/pt_BR/LC_MESSAGES/conferences.po =================================================================== --- /modules/branches/2.10/conferences/i18n/pt_BR/LC_MESSAGES/conferences.po (revision 9100) +++ /modules/branches/2.10/conferences/i18n/pt_BR/LC_MESSAGES/conferences.po (revision 9100) @@ -0,0 +1,314 @@ +# This file is part of FreePBX. +# +# FreePBX 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. +# +# FreePBX 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 FreePBX. If not, see . +# +# Copyright (C) 2008, 2009 Marcelo Araujo +# MidiVTS team +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX Conference Module\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-09 07:11+0100\n" +"PO-Revision-Date: 2010-01-23 00:00-0300\n" +"Last-Translator: Marcelo Araujo \n" +"Language-Team: MidiVTS team \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Portuguese\n" +"X-Poedit-Country: BRAZIL\n" +"X-Poedit-SourceCharset: utf-8\n" + +msgid "Conferences" +msgstr "" + +msgid "" +"Internal Options \n" +"&\n" +" Configuration" +msgstr "" + +msgid "" +"Allow creation of conference rooms (meet-me) where multiple people can talk " +"together." +msgstr "" + +#, php-format +msgid "Conference Room %s : %s" +msgstr "Sala de conferência %s: %s" + +#, php-format +msgid "Conference: %s" +msgstr "Conferência: %s" + +msgid "Conference: " +msgstr "Conferência:" + +msgid "Checking if music field present.." +msgstr "" + +msgid "adding music field.." +msgstr "" + +msgid "fatal error" +msgstr "erro fatal" + +msgid "ok" +msgstr "ok" + +msgid "already present" +msgstr "" + +msgid "Checking if recordings need migration.." +msgstr "Verificando se as gravações precisam de migração" + +msgid "migrating" +msgstr "Migrando" + +msgid "adding joinmsg_id field.." +msgstr "Adicionando o campo joimsg_id." + +msgid "migrate to recording ids.." +msgstr "migrar para gravando os ids.." + +#, php-format +msgid "migrated %s entries" +msgstr "%s entradas migradas" + +msgid "dropping joinmsg field.." +msgstr "descartando o campo joinmsg" + +msgid "no joinmsg field???" +msgstr "nenhum campo joinmsg???" + +msgid "already migrated" +msgstr "já migrado" + +msgid "Checking for users field.." +msgstr "" + +msgid "adding.." +msgstr "" + +msgid "FATAL error" +msgstr "" + +msgid "Warning! Extension" +msgstr "Cuidado! Extensão" + +msgid "is not allowed for your account." +msgstr "não é permitido para a sua conta" + +msgid "Add Conference" +msgstr "Adicionar Conferência" + +msgid "Conference" +msgstr "Conferência" + +msgid "deleted" +msgstr "apagado" + +msgid "Conference:" +msgstr "Conferência" + +#, php-format +msgid "Delete Conference %s" +msgstr "Apagar a conferência %s" + +msgid "Conflicting Extensions" +msgstr "Extensões conflitantes" + +msgid "Edit Conference" +msgstr "Editar conferência" + +msgid "Conference Number:" +msgstr "Número da conferência" + +msgid "Use this number to dial into the conference." +msgstr "Use este número para discar para a conferência" + +msgid "Conference Name:" +msgstr "Nome da conferência" + +msgid "Give this conference a brief name to help you identify it." +msgstr "Dê a esta conferência um breve nome para ajudar a identificá-la" + +msgid "User PIN:" +msgstr "PIN do usuário" + +msgid "" +"You can require callers to enter a password before they can enter this " +"conference.

This setting is optional.

If either PIN is " +"entered, the user will be prompted to enter a PIN." +msgstr "" +"Você pode fazer com que a origem entre com uma senha antes que ela possa " +"entrar nesta conferência.

Esta configuração é opcional.

Se um " +"PIN for inserido, será pedido o PIN do usuário. " + +msgid "Admin PIN:" +msgstr "PIN do Admin" + +msgid "" +"Enter a PIN number for the admin user.

This setting is optional " +"unless the 'leader wait' option is in use, then this PIN will identify the " +"leader." +msgstr "" +"Entre com o número PIN do usuário administrador.

Esta configuração é " +"opcional a menos que a opção 'aguardar o líder\" esteja em uso, então este " +"PIN irá identificar o líder. " + +msgid "Conference Options" +msgstr "Opções da conferência" + +msgid "Join Message:" +msgstr "Mensagem de chegada:" + +msgid "" +"Message to be played to the caller before joining the conference.

To " +"add additional recordings please use the \"System Recordings\" MENU to the " +"left" +msgstr "" +"Mensagem a ser tocada para a origem antes que ela se junte na conferência." +"

Para adicionar novas gravações, por favor use o menu \"Gravações do " +"Sistema\" à esquerda. " + +msgid "None" +msgstr "Nenhum" + +msgid "" +"Message to be played to the caller before joining the conference.

You " +"must install and enable the \"Systems Recordings\" Module to edit this option" +msgstr "" +"Mensagem a ser tocada para a origem antes dela se juntar a conferência." +"

Você deve instalar e habilitar o módulo \"Gravações do Sistema\" " +"para editar esta opção" + +msgid "Leader Wait:" +msgstr "Aguarda o líder" + +msgid "" +"Wait until the conference leader (admin user) arrives before starting the " +"conference" +msgstr "" +"Espera até o líder(usuário admin) da conferência chegar antes de iniciar a " +"conferência." + +msgid "No" +msgstr "Não" + +msgid "Yes" +msgstr "Sim" + +msgid "Talker Optimization:" +msgstr "" + +msgid "" +"Turns on talker optimization. With talker optimization, Asterisk treats " +"talkers who\n" +"are not speaking as being muted, meaning that no encoding is done on " +"transmission\n" +"and that received audio that is not registered as talking is omitted, " +"causing no\n" +"buildup in background noise." +msgstr "" + +msgid "Talker Detection:" +msgstr "" + +msgid "" +"Sets talker detection. Asterisk will sends events on the Manager Interface " +"identifying\n" +"the channel that is talking. The talker will also be identified on the " +"output of\n" +"the meetme list CLI command." +msgstr "" + +msgid "Quiet Mode:" +msgstr "Modo silencioso:" + +msgid "Quiet mode (do not play enter/leave sounds)" +msgstr "Modo silencioso (não toca os sons de entrada e saída)" + +msgid "User Count:" +msgstr "Número de usuários" + +msgid "Announce user(s) count on joining conference" +msgstr "Anuncia o número de usuários ao se juntar a conferência" + +msgid "User join/leave:" +msgstr "entrada/saída de usuário" + +msgid "Announce user join/leave" +msgstr "Anuncia a entrada e saída de usuários" + +msgid "Music on Hold:" +msgstr "Música em espera" + +msgid "Enable Music On Hold when the conference has a single caller" +msgstr "Habilita música em espera quando a conferência tem apenas um usuário" + +msgid "Music on Hold Class:" +msgstr "" + +msgid "" +"Music (or Commercial) played to the caller while they wait in line for the " +"conference to start. Choose \"inherit\" if you want the MoH class to be what " +"is currently selected, such as by the inbound route.

This music is " +"defined in the \"Music on Hold\" to the left." +msgstr "" + +msgid "inherit" +msgstr "" + +msgid "default" +msgstr "" + +msgid "Allow Menu:" +msgstr "Menu de permissões" + +msgid "Present Menu (user or admin) when '*' is received ('send' to menu)" +msgstr "" +"Menu presentes(usuário/administrador) quando '*' é recebido (menu 'enviar')" + +msgid "Record Conference:" +msgstr "Gravar conferência" + +msgid "Record the conference call" +msgstr "Gravar a chamada em conferência" + +msgid "Maximum Participants:" +msgstr "" + +msgid "Maximum Number of users allowed to join this conference." +msgstr "" + +msgid "No Limit" +msgstr "" + +msgid "Submit Changes" +msgstr "Submeter mudanças" + +msgid "Please enter a valid Conference Number" +msgstr "Por favor, entre com um número válido de conferência" + +msgid "Please enter a valid Conference Name" +msgstr "Por favor, entre com um nome válido de conferência" + +msgid "" +"You must set an admin PIN for the Conference Leader when selecting the " +"leader wait option" +msgstr "" +"Você deve configurar um PIN de administrador para o líder da conferência " +"quando selecionar a opção aguarda o líder. " Index: /modules/branches/2.10/conferences/i18n/hu_HU/LC_MESSAGES/conferences.po =================================================================== --- /modules/branches/2.10/conferences/i18n/hu_HU/LC_MESSAGES/conferences.po (revision 9100) +++ /modules/branches/2.10/conferences/i18n/hu_HU/LC_MESSAGES/conferences.po (revision 9100) @@ -0,0 +1,309 @@ +# This file is part of FreePBX. +# +# FreePBX 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. +# +# FreePBX 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 FreePBX. If not, see . +# +# Copyright (C) 2008 Lónyai Gergely +# +msgid "" +msgstr "" +"Project-Id-Version: 2.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-09 07:11+0100\n" +"PO-Revision-Date: 2010-01-23 00:00+0100\n" +"Last-Translator: Lónyai Gergely \n" +"Language-Team: Magyar \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Hungarian\n" +"X-Poedit-Country: HUNGARY\n" +"X-Poedit-SourceCharset: utf-8\n" + +msgid "Conferences" +msgstr "" + +msgid "" +"Internal Options \n" +"&\n" +" Configuration" +msgstr "" + +msgid "" +"Allow creation of conference rooms (meet-me) where multiple people can talk " +"together." +msgstr "" + +#, php-format +msgid "Conference Room %s : %s" +msgstr "" + +#, php-format +msgid "Conference: %s" +msgstr "" + +msgid "Conference: " +msgstr "Konferencia:" + +msgid "Checking if music field present.." +msgstr "" + +msgid "adding music field.." +msgstr "" + +msgid "fatal error" +msgstr "" + +msgid "ok" +msgstr "" + +msgid "already present" +msgstr "" + +msgid "Checking if recordings need migration.." +msgstr "" + +msgid "migrating" +msgstr "" + +msgid "adding joinmsg_id field.." +msgstr "" + +msgid "migrate to recording ids.." +msgstr "" + +#, php-format +msgid "migrated %s entries" +msgstr "" + +msgid "dropping joinmsg field.." +msgstr "" + +msgid "no joinmsg field???" +msgstr "" + +msgid "already migrated" +msgstr "" + +msgid "Checking for users field.." +msgstr "" + +msgid "adding.." +msgstr "" + +msgid "FATAL error" +msgstr "" + +msgid "Warning! Extension" +msgstr "Figyelem! Mellék" + +msgid "is not allowed for your account." +msgstr "nem elfogadható a hozzáférés." + +msgid "Add Conference" +msgstr "Konferencia hozzásadása" + +msgid "Conference" +msgstr "Konferencia" + +msgid "deleted" +msgstr "törölt" + +msgid "Conference:" +msgstr "Konferencia:" + +#, php-format +msgid "Delete Conference %s" +msgstr "Konferencia törlése %s" + +msgid "Conflicting Extensions" +msgstr "Mellékek ÃŒtközése" + +msgid "Edit Conference" +msgstr "Konferencia szerkesztése" + +msgid "Conference Number:" +msgstr "Konferenciaszám:" + +msgid "Use this number to dial into the conference." +msgstr "A szám, amit a conferencia eléréséhez tárcsázni kell." + +msgid "Conference Name:" +msgstr "Konferencianév" + +msgid "Give this conference a brief name to help you identify it." +msgstr "Adj meg a konferenciának egy jellemző nevet." + +msgid "User PIN:" +msgstr "Felhasználó PIN:" + +msgid "" +"You can require callers to enter a password before they can enter this " +"conference.

This setting is optional.

If either PIN is " +"entered, the user will be prompted to enter a PIN." +msgstr "" +"A konferenciát hívó személynek ezt a jelszót kell megadnia." +"

Opcionális beállítás

Ha megadsz egy PIN számot, akkor a " +"felhasználónak ugyanezt a PIN-t kell majd a belépéshez megadnia." + +msgid "Admin PIN:" +msgstr "Admin PIN:" + +msgid "" +"Enter a PIN number for the admin user.

This setting is optional " +"unless the 'leader wait' option is in use, then this PIN will identify the " +"leader." +msgstr "" +"Az admin felhasználó PIN száma.

Ezzel a beállítással a 'Vezetőre " +"várakozás' opcióban megadható PIN számot lehet beállítani. Aki az említett " +"időben megadja a PIN-t, az lesz a konferencia vezetője." + +msgid "Conference Options" +msgstr "Konferencia opciók" + +msgid "Join Message:" +msgstr "Csatlakozó ÃŒzenet:" + +msgid "" +"Message to be played to the caller before joining the conference.

To " +"add additional recordings please use the \"System Recordings\" MENU to the " +"left" +msgstr "" +"Ez az Ìzenet lesz lejátszva a konferenciába csatlakozó hívóknak.

A " +"saját felvételeidet a \"Rendszerfelvételek\" bal oldali menÌpontban " +"rögzítheted." + +msgid "None" +msgstr "Nincs" + +msgid "" +"Message to be played to the caller before joining the conference.

You " +"must install and enable the \"Systems Recordings\" Module to edit this option" +msgstr "" +"Ez az Ìzenet lesz lejátszva a konferenciába csatlakozó hívóknak." +"

Használatához a \"Rendszerfelvételek\" modult telepítened, és " +"engedélyezed kell." + +msgid "Leader Wait:" +msgstr "Vezetőre várakozás:" + +msgid "" +"Wait until the conference leader (admin user) arrives before starting the " +"conference" +msgstr "" +"Wárakozás a konferencia elindítása előtt a konferencia vezetőjére (admin)." + +msgid "No" +msgstr "Nem" + +msgid "Yes" +msgstr "Igen" + +msgid "Talker Optimization:" +msgstr "" + +msgid "" +"Turns on talker optimization. With talker optimization, Asterisk treats " +"talkers who\n" +"are not speaking as being muted, meaning that no encoding is done on " +"transmission\n" +"and that received audio that is not registered as talking is omitted, " +"causing no\n" +"buildup in background noise." +msgstr "" + +msgid "Talker Detection:" +msgstr "" + +msgid "" +"Sets talker detection. Asterisk will sends events on the Manager Interface " +"identifying\n" +"the channel that is talking. The talker will also be identified on the " +"output of\n" +"the meetme list CLI command." +msgstr "" + +msgid "Quiet Mode:" +msgstr "Néma ÃŒzemmód:" + +msgid "Quiet mode (do not play enter/leave sounds)" +msgstr "Csendes mód (nem játszik le zenét ki- és belépéskor)" + +msgid "User Count:" +msgstr "Felhasználószámlálás:" + +msgid "Announce user(s) count on joining conference" +msgstr "Esemény a felhasználók csatlakozásakor" + +msgid "User join/leave:" +msgstr "Felhasználók fel/lecsatlakozása" + +msgid "Announce user join/leave" +msgstr "Esemény felhasználó fel/lecsatlakozásakor" + +msgid "Music on Hold:" +msgstr "Háttérzene:" + +msgid "Enable Music On Hold when the conference has a single caller" +msgstr "Háttérzene engedélyezése, ha csak egy tagja van a konferenciának" + +msgid "Music on Hold Class:" +msgstr "" + +msgid "" +"Music (or Commercial) played to the caller while they wait in line for the " +"conference to start. Choose \"inherit\" if you want the MoH class to be what " +"is currently selected, such as by the inbound route.

This music is " +"defined in the \"Music on Hold\" to the left." +msgstr "" + +msgid "inherit" +msgstr "" + +msgid "default" +msgstr "" + +msgid "Allow Menu:" +msgstr "Elfogadva menÌ:" + +msgid "Present Menu (user or admin) when '*' is received ('send' to menu)" +msgstr "menÌ megmutatása (felhasználónak vagy adminnak) amikor '*' érkezik" + +msgid "Record Conference:" +msgstr "Konferencia rögzítése:" + +msgid "Record the conference call" +msgstr "Rögzíti a teljes konferenciabeszélgetést" + +msgid "Maximum Participants:" +msgstr "" + +msgid "Maximum Number of users allowed to join this conference." +msgstr "" + +msgid "No Limit" +msgstr "" + +msgid "Submit Changes" +msgstr "" + +msgid "Please enter a valid Conference Number" +msgstr "" + +msgid "Please enter a valid Conference Name" +msgstr "" + +msgid "" +"You must set an admin PIN for the Conference Leader when selecting the " +"leader wait option" +msgstr "" Index: /modules/branches/2.10/conferences/i18n/it_IT/LC_MESSAGES/conferences.po =================================================================== --- /modules/branches/2.10/conferences/i18n/it_IT/LC_MESSAGES/conferences.po (revision 9100) +++ /modules/branches/2.10/conferences/i18n/it_IT/LC_MESSAGES/conferences.po (revision 9100) @@ -0,0 +1,314 @@ +# This file is part of FreePBX. +# +# FreePBX 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. +# +# FreePBX 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 FreePBX. If not, see . +# +# Copyright (C) 2008 Francesco Romano +# +msgid "" +msgstr "" +"Project-Id-Version: 2.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-09 07:11+0100\n" +"PO-Revision-Date: 2010-01-23 00:00+0100\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" +"X-Poedit-Language: Italian\n" +"X-Poedit-Country: ITALY\n" + +msgid "Conferences" +msgstr "Conferenze" + +msgid "" +"Internal Options \n" +"&\n" +" Configuration" +msgstr "" + +msgid "" +"Allow creation of conference rooms (meet-me) where multiple people can talk " +"together." +msgstr "" + +#, php-format +msgid "Conference Room %s : %s" +msgstr "Stanza di Conferenza %s: %s" + +#, php-format +msgid "Conference: %s" +msgstr "Conferenza: %s" + +msgid "Conference: " +msgstr "Conferenza:" + +msgid "Checking if music field present.." +msgstr "" + +msgid "adding music field.." +msgstr "" + +msgid "fatal error" +msgstr "errore fatale" + +msgid "ok" +msgstr "ok" + +msgid "already present" +msgstr "" + +msgid "Checking if recordings need migration.." +msgstr "Controllo se le registrazioni hanno bisogno della migrazione.." + +msgid "migrating" +msgstr "migrazione" + +msgid "adding joinmsg_id field.." +msgstr "sto aggiungendo il campo joinmsg_id.." + +msgid "migrate to recording ids.." +msgstr "sto migrando nelle id registrazioni.." + +#, php-format +msgid "migrated %s entries" +msgstr "migrate %s voci" + +msgid "dropping joinmsg field.." +msgstr "sto scartando il campo joinmsg.." + +msgid "no joinmsg field???" +msgstr "nessun campo joinmsg???" + +msgid "already migrated" +msgstr "già migrato" + +msgid "Checking for users field.." +msgstr "" + +msgid "adding.." +msgstr "" + +msgid "FATAL error" +msgstr "" + +msgid "Warning! Extension" +msgstr "Attenzione!" + +msgid "is not allowed for your account." +msgstr "Non hai i permessi." + +msgid "Add Conference" +msgstr "Aggiungi Conferenza" + +msgid "Conference" +msgstr "Conferenza" + +msgid "deleted" +msgstr "eliminata" + +msgid "Conference:" +msgstr "Conferenza:" + +#, php-format +msgid "Delete Conference %s" +msgstr "Elimina Conferenza %s" + +msgid "Conflicting Extensions" +msgstr "Interni in conflitto" + +msgid "Edit Conference" +msgstr "Modifica Conferenza" + +msgid "Conference Number:" +msgstr "Numero Conferenza:" + +msgid "Use this number to dial into the conference." +msgstr "Utilizzare questo numero per entrare nella conferenza." + +msgid "Conference Name:" +msgstr "Nome Conferenza:" + +msgid "Give this conference a brief name to help you identify it." +msgstr "Dare alla conferenza un nome breve per una facile identificazione." + +msgid "User PIN:" +msgstr "PIN utente:" + +msgid "" +"You can require callers to enter a password before they can enter this " +"conference.

This setting is optional.

If either PIN is " +"entered, the user will be prompted to enter a PIN." +msgstr "" +"Si può richiedere ai chiamanti di digitare una password prima di entrare in " +"conferenza.

Questa impostazione Ú opzionale.

Se nessun PIN Ú " +"stato inserito il sistema richiederà di digitarlo." + +msgid "Admin PIN:" +msgstr "PIN amministratore:" + +msgid "" +"Enter a PIN number for the admin user.

This setting is optional " +"unless the 'leader wait' option is in use, then this PIN will identify the " +"leader." +msgstr "" +"Inserire il numero PIN per l'utente amministratore.

Questa " +"impostazione Ú opzionale fino a quando non si seleziona 'Attendere " +"amministratore' che lo indentificherà tramite questo PIN." + +msgid "Conference Options" +msgstr "Opzioni Conferenza" + +msgid "Join Message:" +msgstr "Messaggio di ingresso:" + +msgid "" +"Message to be played to the caller before joining the conference.

To " +"add additional recordings please use the \"System Recordings\" MENU to the " +"left" +msgstr "" +"Selezionare il messaggio da riprodurre ai chiamanti prima di entrate in " +"conferenza.

Bisogna installare e attivare il modulo \"Registrazioni " +"di Sistema\" prima di modificare questa opzione." + +msgid "None" +msgstr "Nessuno" + +msgid "" +"Message to be played to the caller before joining the conference.

You " +"must install and enable the \"Systems Recordings\" Module to edit this option" +msgstr "" +"Selezionare il messaggio da riprodurre ai chiamanti prima di entrare in " +"conferenza.

Bisogna installare e attivare il modulo \"Registrazioni " +"di Sistema\" prima di modificare questa opzione." + +msgid "Leader Wait:" +msgstr "Attendere l'amministratore:" + +msgid "" +"Wait until the conference leader (admin user) arrives before starting the " +"conference" +msgstr "" +"Attende l'arrivo dell'amministratore (leader) prima di iniziare la conferenza" + +msgid "No" +msgstr "No" + +msgid "Yes" +msgstr "Sì" + +msgid "Talker Optimization:" +msgstr "" + +msgid "" +"Turns on talker optimization. With talker optimization, Asterisk treats " +"talkers who\n" +"are not speaking as being muted, meaning that no encoding is done on " +"transmission\n" +"and that received audio that is not registered as talking is omitted, " +"causing no\n" +"buildup in background noise." +msgstr "" + +msgid "Talker Detection:" +msgstr "" + +msgid "" +"Sets talker detection. Asterisk will sends events on the Manager Interface " +"identifying\n" +"the channel that is talking. The talker will also be identified on the " +"output of\n" +"the meetme list CLI command." +msgstr "" + +msgid "Quiet Mode:" +msgstr "Modalità silenziosa:" + +msgid "Quiet mode (do not play enter/leave sounds)" +msgstr "" +"Attiva la modalità silenziosa, non riproduce i suoni quando si entra o esce " +"dalla conferenza" + +msgid "User Count:" +msgstr "Conteggio Utente:" + +msgid "Announce user(s) count on joining conference" +msgstr "Annuncia il conteggio degli utenti quando entrano in conferenza" + +msgid "User join/leave:" +msgstr "Ingresso/uscita utenti:" + +msgid "Announce user join/leave" +msgstr "Annucia l'ingresso/uscita degli utenti" + +msgid "Music on Hold:" +msgstr "Musica di Attesa" + +msgid "Enable Music On Hold when the conference has a single caller" +msgstr "Attiva la Musica di Attesa quando c'Ú solo un utente nella conferenza" + +msgid "Music on Hold Class:" +msgstr "" + +msgid "" +"Music (or Commercial) played to the caller while they wait in line for the " +"conference to start. Choose \"inherit\" if you want the MoH class to be what " +"is currently selected, such as by the inbound route.

This music is " +"defined in the \"Music on Hold\" to the left." +msgstr "" + +msgid "inherit" +msgstr "" + +msgid "default" +msgstr "" + +msgid "Allow Menu:" +msgstr "Permetti Menu:" + +msgid "Present Menu (user or admin) when '*' is received ('send' to menu)" +msgstr "" +"Presenta il menu (utente o amministratore) quando si preme '*' ('invia' al " +"menu)" + +msgid "Record Conference:" +msgstr "Registrare Conferenza:" + +msgid "Record the conference call" +msgstr "Registra la conferenza" + +msgid "Maximum Participants:" +msgstr "" + +msgid "Maximum Number of users allowed to join this conference." +msgstr "" + +msgid "No Limit" +msgstr "" + +msgid "Submit Changes" +msgstr "Conferma Cambiamenti" + +msgid "Please enter a valid Conference Number" +msgstr "Prego immettere un Numero di Conferenza valido" + +msgid "Please enter a valid Conference Name" +msgstr "Prego immettere un Nome valdio per la Conferenza" + +msgid "" +"You must set an admin PIN for the Conference Leader when selecting the " +"leader wait option" +msgstr "" +"Devi impostare un PIN per il Leader della Conferenza quando si seleziona " +"l'opzione attesa amministratore" Index: /modules/branches/2.10/conferences/i18n/conferences.pot =================================================================== --- /modules/branches/2.10/conferences/i18n/conferences.pot (revision 11965) +++ /modules/branches/2.10/conferences/i18n/conferences.pot (revision 11965) @@ -0,0 +1,305 @@ +# This file is part of FreePBX. +# +# FreePBX 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. +# +# FreePBX 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 FreePBX. If not, see . +# +# FreePBX language template for conferences +# Copyright (C) 2008, 2009, 2010, 2011 Bandwith.com +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-18 08:25+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Conferences" +msgstr "" + +msgid "Internal Options & Configuration" +msgstr "" + +msgid "" +"Allow creation of conference rooms (meet-me) where multiple people can talk " +"together." +msgstr "" + +#, php-format +msgid "Conference Room %s : %s" +msgstr "" + +#, php-format +msgid "Conference: %s" +msgstr "" + +msgid "Conference: " +msgstr "" + +msgid "Checking if music field present.." +msgstr "" + +msgid "adding music field.." +msgstr "" + +msgid "fatal error" +msgstr "" + +msgid "ok" +msgstr "" + +msgid "already present" +msgstr "" + +msgid "Checking if recordings need migration.." +msgstr "" + +msgid "migrating" +msgstr "" + +msgid "adding joinmsg_id field.." +msgstr "" + +msgid "migrate to recording ids.." +msgstr "" + +#, php-format +msgid "migrated %s entries" +msgstr "" + +msgid "dropping joinmsg field.." +msgstr "" + +msgid "no joinmsg field???" +msgstr "" + +msgid "already migrated" +msgstr "" + +msgid "Checking for users field.." +msgstr "" + +msgid "adding.." +msgstr "" + +msgid "FATAL error" +msgstr "" + +msgid "Warning! Extension" +msgstr "" + +msgid "is not allowed for your account." +msgstr "" + +msgid "Add Conference" +msgstr "" + +msgid "Conference" +msgstr "" + +msgid "deleted" +msgstr "" + +msgid "Conference:" +msgstr "" + +#, php-format +msgid "Delete Conference %s" +msgstr "" + +msgid "Conflicting Extensions" +msgstr "" + +msgid "Edit Conference" +msgstr "" + +msgid "Conference Number:" +msgstr "" + +msgid "Use this number to dial into the conference." +msgstr "" + +msgid "Conference Name:" +msgstr "" + +msgid "Give this conference a brief name to help you identify it." +msgstr "" + +msgid "User PIN:" +msgstr "" + +msgid "" +"You can require callers to enter a password before they can enter this " +"conference.

This setting is optional.

If either PIN is " +"entered, the user will be prompted to enter a PIN." +msgstr "" + +msgid "Admin PIN:" +msgstr "" + +msgid "" +"Enter a PIN number for the admin user.

This setting is optional " +"unless the 'leader wait' option is in use, then this PIN will identify the " +"leader." +msgstr "" + +msgid "Conference Options" +msgstr "" + +msgid "Join Message:" +msgstr "" + +msgid "" +"Message to be played to the caller before joining the conference.

To " +"add additional recordings please use the \"System Recordings\" MENU to the " +"left" +msgstr "" + +msgid "None" +msgstr "" + +msgid "" +"Message to be played to the caller before joining the conference.

You " +"must install and enable the \"Systems Recordings\" Module to edit this option" +msgstr "" + +msgid "Leader Wait:" +msgstr "" + +msgid "" +"Wait until the conference leader (admin user) arrives before starting the " +"conference" +msgstr "" + +msgid "No" +msgstr "" + +msgid "Yes" +msgstr "" + +msgid "Talker Optimization:" +msgstr "" + +msgid "" +"Turns on talker optimization. With talker optimization, Asterisk treats " +"talkers who\n" +"are not speaking as being muted, meaning that no encoding is done on " +"transmission\n" +"and that received audio that is not registered as talking is omitted, " +"causing no\n" +"buildup in background noise." +msgstr "" + +msgid "Talker Detection:" +msgstr "" + +msgid "" +"Sets talker detection. Asterisk will sends events on the Manager Interface " +"identifying\n" +"the channel that is talking. The talker will also be identified on the " +"output of\n" +"the meetme list CLI command." +msgstr "" + +msgid "Quiet Mode:" +msgstr "" + +msgid "Quiet mode (do not play enter/leave sounds)" +msgstr "" + +msgid "User Count:" +msgstr "" + +msgid "Announce user(s) count on joining conference" +msgstr "" + +msgid "User join/leave:" +msgstr "" + +msgid "Announce user join/leave" +msgstr "" + +msgid "Music on Hold:" +msgstr "" + +msgid "Enable Music On Hold when the conference has a single caller" +msgstr "" + +msgid "Music on Hold Class:" +msgstr "" + +msgid "" +"Music (or Commercial) played to the caller while they wait in line for the " +"conference to start. Choose \"inherit\" if you want the MoH class to be what " +"is currently selected, such as by the inbound route.

This music is " +"defined in the \"Music on Hold\" to the left." +msgstr "" + +msgid "inherit" +msgstr "" + +msgid "default" +msgstr "" + +msgid "Allow Menu:" +msgstr "" + +msgid "Present Menu (user or admin) when '*' is received ('send' to menu)" +msgstr "" + +msgid "Record Conference:" +msgstr "" + +msgid "Record the conference call" +msgstr "" + +msgid "Maximum Participants:" +msgstr "" + +msgid "Maximum Number of users allowed to join this conference." +msgstr "" + +msgid "No Limit" +msgstr "" + +msgid "Mute on Join:" +msgstr "" + +msgid "" +"Mute everyone when they initially join the conference. Please note that if " +"you do not have 'Leader Wait' set to yes you must have 'Allow Menu' set to " +"Yes to unmute yourself" +msgstr "" + +msgid "Submit Changes" +msgstr "" + +msgid "Please enter a valid Conference Number" +msgstr "" + +msgid "Please enter a valid Conference Name" +msgstr "" + +msgid "" +"You must set an admin PIN for the Conference Leader when selecting the " +"leader wait option" +msgstr "" + +msgid "" +"You must set Allow Menu to Yes when not using a Leader or Admin in your " +"conference, otherwise you will be unable to unmute yourself" +msgstr "" Index: /modules/branches/2.10/conferences/i18n/ru_RU/LC_MESSAGES/conferences.po =================================================================== --- /modules/branches/2.10/conferences/i18n/ru_RU/LC_MESSAGES/conferences.po (revision 11965) +++ /modules/branches/2.10/conferences/i18n/ru_RU/LC_MESSAGES/conferences.po (revision 11965) @@ -0,0 +1,355 @@ +# This file is part of FreePBX. +# +# FreePBX 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. +# +# FreePBX 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 FreePBX. If not, see . +# +# Russian freePBX ver. translation +# Copyright (c) 2006-2008 PostMet Corporation +# This file is distributed under the same license as the freePBX package. +# Alexander Kozyrev , Sergey Nikolayev , 2006-2011. +# +# ИспПльзПвать iconv conferences.utf8.po -f UTF-8 -t ISO-8859-5 -o conferences.po +msgid "" +msgstr "" +"Project-Id-Version: 1.3\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-18 08:25+0100\n" +"PO-Revision-Date: 2011-04-06 14:11+0100\n" +"Last-Translator: Alexander Kozyrev \n" +"Language-Team: Russian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Conferences" +msgstr "КПМфереМцОО" + +msgid "Internal Options & Configuration" +msgstr "КПМфОгурацОя О ЎПпПлМОтельМые ПпцОО" + +msgid "" +"Allow creation of conference rooms (meet-me) where multiple people can talk " +"together." +msgstr "" +"РазрешОть сПзЎаМОе кПМфереМц-кПЌМат (meet-me) Ўля ПбщеМОя ÐŒÐœÐŸÐ³ÐžÑ + " +"пПльзПвателей " + +#, php-format +msgid "Conference Room %s : %s" +msgstr "КПМфереМц-кПЌМата %s : %s" + +#, php-format +msgid "Conference: %s" +msgstr "КПМфереМцОя: %s" + +msgid "Conference: " +msgstr "КПМфереМцОя: " + +msgid "Checking if music field present.." +msgstr "ПрПверяеЌ устаМПвлеМП лО зМачеМОе в пПле Музыка.." + +msgid "adding music field.." +msgstr "ЎПбавляеЌ пПле Музыка.." + +msgid "fatal error" +msgstr "МеустраМОЌая ПшОбка" + +msgid "ok" +msgstr "Пк" + +msgid "already present" +msgstr "уже существует" + +msgid "Checking if recordings need migration.." +msgstr "ПрПверяеЌ ÐœÐµÐŸÐ±Ñ +ПЎОЌПсть ЌОграцОО запОсей.." + +msgid "migrating" +msgstr "переМПсОЌ" + +msgid "adding joinmsg_id field.." +msgstr "ЎПбавляется пПле joinmsg_id.." + +msgid "migrate to recording ids.." +msgstr "переМПсОЌ ОЎеМтОфОкатПры запОсей.." + +#, php-format +msgid "migrated %s entries" +msgstr "переМесеМП %s запОсей" + +msgid "dropping joinmsg field.." +msgstr "ОгМПрОруется пПле joinmsg" + +msgid "no joinmsg field???" +msgstr "Мет пПля joinmsg???" + +msgid "already migrated" +msgstr "уже переМесеМП" + +msgid "Checking for users field.." +msgstr "ПрПверяеЌ пПле ППльзПвателО.." + +msgid "adding.." +msgstr "ЎПбавляеЌ.." + +msgid "FATAL error" +msgstr "НеустраМОЌая ПшОбка" + +msgid "Warning! Extension" +msgstr "ВМОЌаМОе! ВМутреММОй МПЌер" + +msgid "is not allowed for your account." +msgstr "Ме разрешёМ к ОспПльзПваМОю в в этПЌ аккауМте." + +msgid "Add Conference" +msgstr "ДПбавОть кПМфереМцОю" + +msgid "Conference" +msgstr "КПМфереМцОя" + +msgid "deleted" +msgstr "уЎалеМП" + +msgid "Conference:" +msgstr "КПМфереМцОя:" + +#, php-format +msgid "Delete Conference %s" +msgstr "УЎалОть кПМфереМцОю %s" + +msgid "Conflicting Extensions" +msgstr "КПМфлОкт Ð²ÐœÑƒÑ‚Ñ€ÐµÐœÐœÐžÑ + МПЌерПв" + +msgid "Edit Conference" +msgstr "ИзЌеМОть кПМфереМцОю" + +msgid "Conference Number:" +msgstr "НПЌер кПМфереМцОО:" + +msgid "Use this number to dial into the conference." +msgstr "ЧтПбы пПзвПМОть в кПМфереМцОю ОспПльзуйте этПт МПЌер." + +msgid "Conference Name:" +msgstr "НазваМОе кПМфереМцОО:" + +msgid "Give this conference a brief name to help you identify it." +msgstr "ПрОсвПйте кПМфереМцОО кПрПткПе ОЌя Ўля ОЎеМтОфОкацОО." + +msgid "User PIN:" +msgstr "PIN пПльзПвателя:" + +msgid "" +"You can require callers to enter a password before they can enter this " +"conference.

This setting is optional.

If either PIN is " +"entered, the user will be prompted to enter a PIN." +msgstr "" +"МПжМП требПвать ввестО парПль Ўля Ð²Ñ +ПЎя пПльзПвателей в кПМфереМцОю." +"

ЭтП МеПбязательМый параЌетр.

ЕслО указаМ PIN в этПЌ пПле, " +"пПльзПвателю буЎет преЎлПжеМП Мабрать егП." + +msgid "Admin PIN:" +msgstr "PIN аЎЌОМОстратПра:" + +msgid "" +"Enter a PIN number for the admin user.

This setting is optional " +"unless the 'leader wait' option is in use, then this PIN will identify the " +"leader." +msgstr "" +"УкажОте PIN Ўля аЎЌОМОстратПра.

ЭтП МеПбязательМый параЌетр, еслО " +"ОспПльзуется ПпцОя 'лОЎер жЎёт', тП этПт PIN ОЎеМтОфОцОрует лОЎера." + +msgid "Conference Options" +msgstr "ОпцОО кПМфереМцОО" + +msgid "Join Message:" +msgstr "СППбщеМОе П пПЎсПеЎОМеМОО?" + +msgid "" +"Message to be played to the caller before joining the conference.

To " +"add additional recordings please use the \"System Recordings\" MENU to the " +"left" +msgstr "" +"ПрО пПЎсПеЎОМеМОО к кПМфереМцОО пПльзПвателю буЎет вПспрПОзвеЎеМП этП " +"сППбщеМОе.

ЧтПбы сПзЎать сППбщеМОе вПспПьзуйтесь секцОей ЗапОсь " +"сППбщеМОй в ЌеМю слева." + +msgid "None" +msgstr "Нет" + +msgid "" +"Message to be played to the caller before joining the conference.

You " +"must install and enable the \"Systems Recordings\" Module to edit this option" +msgstr "" +"ПрО пПЎсПеЎОМеМОО к кПМфереМцОО пПльзПвателю буЎет вПспрПОзвеЎеМП сППбщеМОе." +"

ÐÐµÐŸÐ±Ñ +ПЎОЌП ОМсталлОрПвать О актОвОрПвать ЌПЎуль 'ЗапОсь сППбщеМОй' " +"Ўля ОзЌеМеМОя этПй ПпцОО." + +msgid "Leader Wait:" +msgstr "ЖЎать ПргаМОзатПра?" + +msgid "" +"Wait until the conference leader (admin user) arrives before starting the " +"conference" +msgstr "" +"ЖЎать ПргаМОзатПра кПМфереМцОО (пПльзПватель аЎЌОМОстратПр) пПка ПМ Ме " +"пПЎсПеЎОМОтся, чтПбы Мачать кПМфереМцОю." + +msgid "No" +msgstr "Нет" + +msgid "Yes" +msgstr "Да" + +msgid "Talker Optimization:" +msgstr "ОптОЌОзацОя Ўля выступающегП:" + +msgid "" +"Turns on talker optimization. With talker optimization, Asterisk treats " +"talkers who\n" +"are not speaking as being muted, meaning that no encoding is done on " +"transmission\n" +"and that received audio that is not registered as talking is omitted, " +"causing no\n" +"buildup in background noise." +msgstr "" +"Включает ПптОЌОзацОю Ўля выступающегП. ПрО включеМПй ПпцОО АстерОск " +"распПзМаёт Ð¿Ð°ÑÑÐžÐ²ÐœÑ‹Ñ + слушателей О прОглушает ОЌ ЌОкрПфПМ, теЌ саЌыЌ уЌеМьшая " +"Магрузку Ма ЎекПЎОрПваМОе ÐœÐµÐ·Ð°ÐŽÐµÐ¹ÑÑ‚Ð²ÐŸÐ²Ð°ÐœÐœÑ‹Ñ + каМалПв О сМОжая теЌ саЌыЌ ПбщОй " +"шуЌ заЎМегП плаМа." + +msgid "Talker Detection:" +msgstr "РаспПзМаваМОе выступающегП:" + +msgid "" +"Sets talker detection. Asterisk will sends events on the Manager Interface " +"identifying\n" +"the channel that is talking. The talker will also be identified on the " +"output of\n" +"the meetme list CLI command." +msgstr "" +"УстаМавлОвает распПзМаваМОе выступающегП ПратПра. АстерОск пПсылает " +"увеЎПЌлеМОя через AMI - Asterisk Manager Interface ОЎеМтОфОцОруя каМал пП " +"кПтПрПЌу ОЎёт актОвМПе выступлеМОе. ВыступающОй также ОЎеМтОфОцОруется в " +"кПЌаМЎМПЌ режОЌе CLI среЎО кПЌаМЎ ЌПЎуля meetme." + +msgid "Quiet Mode:" +msgstr "Ð¢ÐžÑ +Ой режОЌ:" + +msgid "Quiet mode (do not play enter/leave sounds)" +msgstr "" +"Ð¢ÐžÑ +Ой режОЌ (Ме вПспрПОзвПЎятся сППбщеМОя П тПЌ ктП вПшёл ОлО вышел Оз " +"кПМфереМцОО)" + +msgid "User Count:" +msgstr "КПлОчествП участМОкПв?" + +msgid "Announce user(s) count on joining conference" +msgstr "АМПМсОрПвать кПлОчествП участМОкПв кПМфереМцОО прО пПЎсПеЎОМеМОО?" + +msgid "User join/leave:" +msgstr "УчастМОк пПЎсПеЎОМОлся/ПтключОлся?" + +msgid "Announce user join/leave" +msgstr "АМПМсОрПвать пПЎсПеЎОМеМОе/ПтключеМОе участМОкПв?" + +msgid "Music on Hold:" +msgstr "Музыка в ПжОЎаМОО?" + +msgid "Enable Music On Hold when the conference has a single caller" +msgstr "ИспПльзПвать Ќузыку в ПжОЎаМОО, еслО в кПМфереМцОО пПка ПЎОМ участМОк?" + +msgid "Music on Hold Class:" +msgstr "Класс МузыкО в ПжОЎаМОО:" + +msgid "" +"Music (or Commercial) played to the caller while they wait in line for the " +"conference to start. Choose \"inherit\" if you want the MoH class to be what " +"is currently selected, such as by the inbound route.

This music is " +"defined in the \"Music on Hold\" to the left." +msgstr "" +"Музыка (ОлО реклаЌа) буЎет вПспрПОзвПЎОтся прОстутствующОЌ, пПка ПМО ПжОЎают " +"Мачала кПМфереМцОО. ВыбОрайте \"МаслеЎПваМый\" еслО Ñ +ПтОте ОспПльзПвать тПт " +"класс МПН, кПтПрый уже ОспПльзуется пП уЌПлчаМОю, МапрОЌер - Ма Ð²Ñ +ПЎящеЌ " +"Ќаршруте.

ЭтП кПМфОгурОруется в ЌПЎуле Музыка в ПжОЎаМОО слева." + +msgid "inherit" +msgstr "МаслеЎПваМый" + +msgid "default" +msgstr "пП уЌПлчаМОю" + +msgid "Allow Menu:" +msgstr "РазрешОть ЌеМю?" + +msgid "Present Menu (user or admin) when '*' is received ('send' to menu)" +msgstr "" +"ПреЎПставОть ЎПступ в ЌеМю (участМОку ОлО аЎЌОМОстратПру) прО МажатОО '*'?" + +msgid "Record Conference:" +msgstr "ЗапОсывать кПМфереМцОю?" + +msgid "Record the conference call" +msgstr "ЗапОсывать сПЎержаМОе кПМфереМцОО?" + +msgid "Maximum Participants:" +msgstr "МаксОЌальМП участМОкПв:" + +msgid "Maximum Number of users allowed to join this conference." +msgstr "" +"МаксОЌальМПе кПлОчествП пПльзПвателей Ð¿Ñ€ÐžÑÑƒÑ‚ÑÑ‚Ð²ÑƒÑŽÑ‰ÐžÑ + ПЎМПвреЌеММП в этПй " +"кПМфереМцОО." + +msgid "No Limit" +msgstr "Без ПграМОчеМОй" + +msgid "Mute on Join:" +msgstr "" + +msgid "" +"Mute everyone when they initially join the conference. Please note that if " +"you do not have 'Leader Wait' set to yes you must have 'Allow Menu' set to " +"Yes to unmute yourself" +msgstr "" + +msgid "Submit Changes" +msgstr "ПрОЌеМОть ОзЌеМеМОя" + +msgid "Please enter a valid Conference Number" +msgstr "ВвеЎОте ЎействОтельМый МПЌер Ўля кПМфереМцОО" + +msgid "Please enter a valid Conference Name" +msgstr "ВвеЎОте ЎействОтельМПе МазваМОе Ўля кПМфереМцОО" + +msgid "" +"You must set an admin PIN for the Conference Leader when selecting the " +"leader wait option" +msgstr "" +"Вы ЎПлжМы ввестО пОМ-кПЎ аЎЌОМОстратПра еслО Ñ +ПтОте ОспПльзПвать ПпцОю " +"ПжОЎаМОя ЌПЎератПра" + +msgid "" +"You must set Allow Menu to Yes when not using a Leader or Admin in your " +"conference, otherwise you will be unable to unmute yourself" +msgstr "" Index: /modules/branches/2.10/conferences/i18n/es_ES/LC_MESSAGES/conferences.po =================================================================== --- /modules/branches/2.10/conferences/i18n/es_ES/LC_MESSAGES/conferences.po (revision 9100) +++ /modules/branches/2.10/conferences/i18n/es_ES/LC_MESSAGES/conferences.po (revision 9100) @@ -0,0 +1,317 @@ +# This file is part of FreePBX. +# +# FreePBX 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. +# +# FreePBX 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 FreePBX. If not, see . +# +# Copyright (C) 2008, 2009 Juan Asensio Sánchez +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX - módulo conferences module spanish translation\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-09 07:11+0100\n" +"PO-Revision-Date: 2010-01-23 00:00+0100\n" +"Last-Translator: Juan Asensio Sánchez \n" +"Language-Team: Juan Asensio Sánchez \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Spanish\n" +"X-Poedit-Country: SPAIN\n" +"X-Poedit-SourceCharset: utf-8\n" + +msgid "Conferences" +msgstr "" + +msgid "" +"Internal Options \n" +"&\n" +" Configuration" +msgstr "" + +msgid "" +"Allow creation of conference rooms (meet-me) where multiple people can talk " +"together." +msgstr "" + +#, php-format +msgid "Conference Room %s : %s" +msgstr "Sala de conferencia %s: %s" + +#, php-format +msgid "Conference: %s" +msgstr "Conferencia: %s" + +msgid "Conference: " +msgstr "Conferencia:" + +msgid "Checking if music field present.." +msgstr "" + +msgid "adding music field.." +msgstr "" + +msgid "fatal error" +msgstr "Error fatal" + +msgid "ok" +msgstr "Correcto" + +msgid "already present" +msgstr "" + +msgid "Checking if recordings need migration.." +msgstr "Comprobando si las grabaciones necesitan migrarse..." + +msgid "migrating" +msgstr "Migrando" + +msgid "adding joinmsg_id field.." +msgstr "Añadiendo campo joinmsgid" + +msgid "migrate to recording ids.." +msgstr "Migrando a identificadores de grabación..." + +#, php-format +msgid "migrated %s entries" +msgstr "Migrados %s elementos" + +msgid "dropping joinmsg field.." +msgstr "Eliminando campo joinmsg..." + +msgid "no joinmsg field???" +msgstr "No existe el campo joinmsg" + +msgid "already migrated" +msgstr "Ya se ha migrado" + +msgid "Checking for users field.." +msgstr "" + +msgid "adding.." +msgstr "" + +msgid "FATAL error" +msgstr "" + +msgid "Warning! Extension" +msgstr "¡Atención! La extensión" + +msgid "is not allowed for your account." +msgstr "no está autorizada en su cuenta" + +msgid "Add Conference" +msgstr "Añadir conferencia" + +msgid "Conference" +msgstr "Conferencia" + +msgid "deleted" +msgstr "Eliminado" + +msgid "Conference:" +msgstr "Conferencia:" + +#, php-format +msgid "Delete Conference %s" +msgstr "Eliminar conferencia %s" + +msgid "Conflicting Extensions" +msgstr "Extensiones en conflicto" + +msgid "Edit Conference" +msgstr "Editar conferencia" + +msgid "Conference Number:" +msgstr "Número de conferencia" + +msgid "Use this number to dial into the conference." +msgstr "Use este número para llamar a la conferencia." + +msgid "Conference Name:" +msgstr "Nombre de la conferencia:" + +msgid "Give this conference a brief name to help you identify it." +msgstr "" +"Asigne a esta conferencia un nombre descriptivo para ayudarle a " +"identificarla." + +msgid "User PIN:" +msgstr "PIN de usuario:" + +msgid "" +"You can require callers to enter a password before they can enter this " +"conference.

This setting is optional.

If either PIN is " +"entered, the user will be prompted to enter a PIN." +msgstr "" +"Puede solicitar a los usuarios que introduzcan una contraseña antes de que " +"puedan entrar a esta conferencia.

Este parámetro es opcional." +"
7
Si se indica un valor en este campo, se le solicitará al usuario " +"que introduzca el PIN." + +msgid "Admin PIN:" +msgstr "PIN de administración:" + +msgid "" +"Enter a PIN number for the admin user.

This setting is optional " +"unless the 'leader wait' option is in use, then this PIN will identify the " +"leader." +msgstr "" +"Introduzca un PIN para el administrador.

Este parámetro es opcional " +"a menos que se seleccione la opción 'Esperar al administrador'." + +msgid "Conference Options" +msgstr "Opciones de conferencia" + +msgid "Join Message:" +msgstr "Mensaje de bienvenida:" + +msgid "" +"Message to be played to the caller before joining the conference.

To " +"add additional recordings please use the \"System Recordings\" MENU to the " +"left" +msgstr "" +"Mensaje que se reproducirá cuando un usuario se una a la conferencia.

Para añadir más grabaciones, use la opción 'Grabaciones del sistema' " +"del menú de la izquierad." + +msgid "None" +msgstr "Ninguno" + +msgid "" +"Message to be played to the caller before joining the conference.

You " +"must install and enable the \"Systems Recordings\" Module to edit this option" +msgstr "" +"ensaje que se reproducirá cuando un usuario se una a la conferencia.

Debe tener instalado y habilitado el módulo 'Grabaciones del sistema' para " +"editar esta opción." + +msgid "Leader Wait:" +msgstr "Esperar al administrador:" + +msgid "" +"Wait until the conference leader (admin user) arrives before starting the " +"conference" +msgstr "Esperar hasta que el administrador se una para iniciar la conferencia." + +msgid "No" +msgstr "No" + +msgid "Yes" +msgstr "Sí" + +msgid "Talker Optimization:" +msgstr "" + +msgid "" +"Turns on talker optimization. With talker optimization, Asterisk treats " +"talkers who\n" +"are not speaking as being muted, meaning that no encoding is done on " +"transmission\n" +"and that received audio that is not registered as talking is omitted, " +"causing no\n" +"buildup in background noise." +msgstr "" + +msgid "Talker Detection:" +msgstr "" + +msgid "" +"Sets talker detection. Asterisk will sends events on the Manager Interface " +"identifying\n" +"the channel that is talking. The talker will also be identified on the " +"output of\n" +"the meetme list CLI command." +msgstr "" + +msgid "Quiet Mode:" +msgstr "Modo silencioso:" + +msgid "Quiet mode (do not play enter/leave sounds)" +msgstr "" +"Modo silencioso (no reproducir sonidos cuando alguien entre o salga de la " +"conferencia)" + +msgid "User Count:" +msgstr "Contador de usuarios:" + +msgid "Announce user(s) count on joining conference" +msgstr "Dice el número de usuarios de la conferencia al entrar a la misma" + +msgid "User join/leave:" +msgstr "Entrada/Salida de usuario:" + +msgid "Announce user join/leave" +msgstr "Anuncia la entrada o salida de un usuario de la conferencia" + +msgid "Music on Hold:" +msgstr "Música en espera:" + +msgid "Enable Music On Hold when the conference has a single caller" +msgstr "" +"Habilita la música en espera mientras la conferencia sólo tiene un asistente" + +msgid "Music on Hold Class:" +msgstr "" + +msgid "" +"Music (or Commercial) played to the caller while they wait in line for the " +"conference to start. Choose \"inherit\" if you want the MoH class to be what " +"is currently selected, such as by the inbound route.

This music is " +"defined in the \"Music on Hold\" to the left." +msgstr "" + +msgid "inherit" +msgstr "" + +msgid "default" +msgstr "" + +msgid "Allow Menu:" +msgstr "Permitir menú:" + +msgid "Present Menu (user or admin) when '*' is received ('send' to menu)" +msgstr "" +"Permitir el acceso al menú al usuario o al administrador cuando se se pulsa " +"la tecla '*'." + +msgid "Record Conference:" +msgstr "Grabar conferencias:" + +msgid "Record the conference call" +msgstr "Graba las llamadas de la conferencia." + +msgid "Maximum Participants:" +msgstr "" + +msgid "Maximum Number of users allowed to join this conference." +msgstr "" + +msgid "No Limit" +msgstr "" + +msgid "Submit Changes" +msgstr "Enviar cambios" + +msgid "Please enter a valid Conference Number" +msgstr "Por favor, introduzca un número de conferencia válido" + +msgid "Please enter a valid Conference Name" +msgstr "Por favor, introduzca un nombre de conferencia válido" + +msgid "" +"You must set an admin PIN for the Conference Leader when selecting the " +"leader wait option" +msgstr "" +"Debe establecer un PIN de administración para el administrador de la " +"conferencia cuando se seleccione la opción 'Esperar al administrador'" Index: /modules/branches/2.10/conferences/i18n/fr_FR/LC_MESSAGES/conferences.po =================================================================== --- /modules/branches/2.10/conferences/i18n/fr_FR/LC_MESSAGES/conferences.po (revision 9100) +++ /modules/branches/2.10/conferences/i18n/fr_FR/LC_MESSAGES/conferences.po (revision 9100) @@ -0,0 +1,310 @@ +# This file is part of FreePBX. +# +# FreePBX 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. +# +# FreePBX 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 FreePBX. If not, see . +# +# Copyright (C) 2008, 2009 Jouniaux +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-09 07:11+0100\n" +"PO-Revision-Date: \n" +"Last-Translator: Jouniaux \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Conferences" +msgstr "Conférences" + +msgid "" +"Internal Options \n" +"&\n" +" Configuration" +msgstr "" + +msgid "" +"Allow creation of conference rooms (meet-me) where multiple people can talk " +"together." +msgstr "" + +#, php-format +msgid "Conference Room %s : %s" +msgstr "Chambre de conférence %s : %s" + +#, php-format +msgid "Conference: %s" +msgstr "Conférence: %s" + +msgid "Conference: " +msgstr "Conférence: " + +msgid "Checking if music field present.." +msgstr "" + +msgid "adding music field.." +msgstr "" + +msgid "fatal error" +msgstr "erreur fatale" + +msgid "ok" +msgstr "ok" + +msgid "already present" +msgstr "" + +msgid "Checking if recordings need migration.." +msgstr "Vérification si enregistrement a besoin d'une migration" + +msgid "migrating" +msgstr "migration" + +msgid "adding joinmsg_id field.." +msgstr "ajout du champ joinmsg_id..." + +msgid "migrate to recording ids.." +msgstr "migration des indentifiants enregistrements" + +#, php-format +msgid "migrated %s entries" +msgstr "migration %s entrées" + +msgid "dropping joinmsg field.." +msgstr "abandon champ joinmsg..." + +msgid "no joinmsg field???" +msgstr "Pas de champ joinmsg???" + +msgid "already migrated" +msgstr "déjà migré" + +msgid "Checking for users field.." +msgstr "" + +msgid "adding.." +msgstr "" + +msgid "FATAL error" +msgstr "" + +msgid "Warning! Extension" +msgstr "Attention! Extension" + +msgid "is not allowed for your account." +msgstr "n'est pas autorisé pour votre compte" + +msgid "Add Conference" +msgstr "Ajout Conférence" + +msgid "Conference" +msgstr "Conférence" + +msgid "deleted" +msgstr "supprimé" + +msgid "Conference:" +msgstr "Conférence:" + +#, php-format +msgid "Delete Conference %s" +msgstr "Suppression conférence %s" + +msgid "Conflicting Extensions" +msgstr "Conflit d'extensions" + +msgid "Edit Conference" +msgstr "Edition Conférence" + +msgid "Conference Number:" +msgstr "Numéro de conférence" + +msgid "Use this number to dial into the conference." +msgstr "Numéro pour appeler la conférence" + +msgid "Conference Name:" +msgstr "Nom de la conférence" + +msgid "Give this conference a brief name to help you identify it." +msgstr "Donnez un nom à cette conférence pour vous aider à l'identifier" + +msgid "User PIN:" +msgstr "PIN utilisateur" + +msgid "" +"You can require callers to enter a password before they can enter this " +"conference.

This setting is optional.

If either PIN is " +"entered, the user will be prompted to enter a PIN." +msgstr "" +"Vous pouvez demander un mot de passe aux appelants avant qu'ils entrent dans " +"la conférence.

Ce réglage est optionnel.

Si un code PIN est " +"entré, il sera demandé à l'utilisateur." + +msgid "Admin PIN:" +msgstr "PIN organisateur" + +msgid "" +"Enter a PIN number for the admin user.

This setting is optional " +"unless the 'leader wait' option is in use, then this PIN will identify the " +"leader." +msgstr "" +"Entrez un code PIN pour l'organisateur.

Ce réglage est optionnel sauf " +"si l'option \"Attente de l'organisateur' est utilisé, alors ce code PIN " +"identifiera l'organisateur." + +msgid "Conference Options" +msgstr "Options conférence" + +msgid "Join Message:" +msgstr "Message joint" + +msgid "" +"Message to be played to the caller before joining the conference.

To " +"add additional recordings please use the \"System Recordings\" MENU to the " +"left" +msgstr "" +"Message qui est joué à l'appelant avant de rejoindre la conférence." +"

Pour ajouter de nouveaux messages, utilisez le MENU " +"\"Enregistrements systÚme\" à gauche" + +msgid "None" +msgstr "Aucun" + +msgid "" +"Message to be played to the caller before joining the conference.

You " +"must install and enable the \"Systems Recordings\" Module to edit this option" +msgstr "" +"Message qui est joué à l'appelant avant de rejoindre la conférence." +"

Vous devez installer le module \"Enregistrements systÚme\" pour " +"utiliser cette option." + +msgid "Leader Wait:" +msgstr "Attente de l'organisateur" + +msgid "" +"Wait until the conference leader (admin user) arrives before starting the " +"conference" +msgstr "Attente jusqu'à ce que l'organisateur de la conférence se connecte" + +msgid "No" +msgstr "Non" + +msgid "Yes" +msgstr "Oui" + +msgid "Talker Optimization:" +msgstr "" + +msgid "" +"Turns on talker optimization. With talker optimization, Asterisk treats " +"talkers who\n" +"are not speaking as being muted, meaning that no encoding is done on " +"transmission\n" +"and that received audio that is not registered as talking is omitted, " +"causing no\n" +"buildup in background noise." +msgstr "" + +msgid "Talker Detection:" +msgstr "" + +msgid "" +"Sets talker detection. Asterisk will sends events on the Manager Interface " +"identifying\n" +"the channel that is talking. The talker will also be identified on the " +"output of\n" +"the meetme list CLI command." +msgstr "" + +msgid "Quiet Mode:" +msgstr "Mode silencieux" + +msgid "Quiet mode (do not play enter/leave sounds)" +msgstr "Ne joue pas les messages entrée/sortie" + +msgid "User Count:" +msgstr "Comptage utilisateurs" + +msgid "Announce user(s) count on joining conference" +msgstr "Annonce le nombre de personnes ayant rejoint la conférence" + +msgid "User join/leave:" +msgstr "Entrée/sortie utilisateur" + +msgid "Announce user join/leave" +msgstr "Annonce qu'un utilisateur arrive ou quitte la conférence" + +msgid "Music on Hold:" +msgstr "Musique d'attente" + +msgid "Enable Music On Hold when the conference has a single caller" +msgstr "" +"Active la musique d'attente quand il n'y a qu'une seule personne dans la " +"conférence" + +msgid "Music on Hold Class:" +msgstr "" + +msgid "" +"Music (or Commercial) played to the caller while they wait in line for the " +"conference to start. Choose \"inherit\" if you want the MoH class to be what " +"is currently selected, such as by the inbound route.

This music is " +"defined in the \"Music on Hold\" to the left." +msgstr "" + +msgid "inherit" +msgstr "" + +msgid "default" +msgstr "" + +msgid "Allow Menu:" +msgstr "Autorise menu" + +msgid "Present Menu (user or admin) when '*' is received ('send' to menu)" +msgstr "" +"Présentation du menu (utilisateur ou organisateur) quand la touche \"*\" est " +"reçue ('envoyé' au menu)" + +msgid "Record Conference:" +msgstr "Enregistrement conférence:" + +msgid "Record the conference call" +msgstr "Enregistrement de la conférence" + +msgid "Maximum Participants:" +msgstr "" + +msgid "Maximum Number of users allowed to join this conference." +msgstr "" + +msgid "No Limit" +msgstr "" + +msgid "Submit Changes" +msgstr "Soumettre changements" + +msgid "Please enter a valid Conference Number" +msgstr "Merci d'entrer un numéro de conférence valide" + +msgid "Please enter a valid Conference Name" +msgstr "SVP entrez un nom de conférence valide" + +msgid "" +"You must set an admin PIN for the Conference Leader when selecting the " +"leader wait option" +msgstr "" +"Vous devez créer un code PIN organisateur quand cette option est sélectionnée" Index: /modules/branches/2.10/conferences/module.xml =================================================================== --- /modules/branches/2.10/conferences/module.xml (revision 11680) +++ /modules/branches/2.10/conferences/module.xml (revision 11680) @@ -0,0 +1,52 @@ + + conferences + standard + Conferences + 2.9.0.2 + FreePBX + GPLv2+ + setup + Internal Options & Configuration + Allow creation of conference rooms (meet-me) where multiple people can talk together. + + *2.9.0.2* #4914 + *2.9.0.1* removed duplicate functions + *2.9.0.0* #4417, #4213, #4660, #4697, #4655, #4735 + *2.8.0.1* #4309 + *2.8.0.0* #3331 max participants option + *2.7.0.1* spelling fixes, localization updates + *2.7.0.0* #4051, #3967 add MoH class choice require MoH module 2.7.0.0+ + *2.6.0.2* #3126 + *2.6.0.1* tabindex init + *2.6.0.0* #3392, localizations + *2.5.1.6* #3392 and some localizations + *2.5.1.5* localization strings enclosed + *2.5.1.4* #3237 + *2.5.1.3* #3192 set dir for recordings, localization cleanup and Swedish + *2.5.1.2* #3135 variable initialization + *2.5.1.1* #3087 add hook to module code + *2.5.1* #2064 Migrate recordings to recording ids + *2.5.0* #2845, added blf hints, added delete and add icons + *2.4.0.2* #2604, #2843 fix mal-formed html tags, Russian Translation + *2.4.0.1* added depends on 2.4.0 + *2.4.0* #2158 add recording option, add support for Extension and Destination Registries, it translations + *1.2.2* don't ask for name confirmation when recording names on Asterisk 1.3 (new option I replaces i) + *1.2.1.3* move Macro(user-callerid) to be called with each conf to accomodate future language settings + *1.2.1.2* add call to Macro(user-callerid) to get proper CID in Meetme Conference + *1.2.1.1* bump for rc1 + *1.2.1* changed syntax error in meetme_additional.conf form '|' to ',' separator + *1.2* Fixed raising asterisk error on empty dialstatus #1708 + *1.1.2* Add he_IL translation + *1.1.1* Updated for 2.2.0RC1 + *1.1* First release for FreePBX 2.2 - Fixed compatibility issue with new UI + + + 2.5.0alpha1 + recordings ge 3.3.8 + + + Conferences + + release/2.9/conferences-2.9.0.2.tgz + 10c86306b7e3c093e5066fbc850b5a28 + Index: /modules/branches/2.10/conferences/functions.inc.php =================================================================== --- /modules/branches/2.10/conferences/functions.inc.php (revision 11676) +++ /modules/branches/2.10/conferences/functions.inc.php (revision 11676) @@ -0,0 +1,289 @@ +_meetmes[$room] = $userpin.($adminpin != '' ? ','.$adminpin : ''); + } + // return the output that goes in the file + function generateConf() { + $output = ""; + if (isset($this->_meetmes) && is_array($this->_meetmes)) { + foreach (array_keys($this->_meetmes) as $meetme) { + $output .= 'conf => '.$meetme.",".$this->_meetmes[$meetme]."\n"; + } + } + return $output; + } +} + +// returns a associative arrays with keys 'destination' and 'description' +function conferences_destinations() { + //get the list of meetmes + $results = conferences_list(); + + // return an associative array with destination and description + if (isset($results)) { + foreach($results as $result){ + $extens[] = array('destination' => 'ext-meetme,'.$result['0'].',1', 'description' => $result['1']." <".$result['0'].">"); + } + return $extens; + } else { + return null; + } +} + +function conferences_getdest($exten) { + return array('ext-meetme,'.$exten.',1'); +} + +function conferences_getdestinfo($dest) { + global $active_modules; + + if (substr(trim($dest),0,11) == 'ext-meetme,') { + $exten = explode(',',$dest); + $exten = $exten[1]; + $thisexten = conferences_get($exten); + if (empty($thisexten)) { + return array(); + } else { + //$type = isset($active_modules['announcement']['type'])?$active_modules['announcement']['type']:'setup'; + return array('description' => sprintf(_("Conference Room %s : %s"),$exten,$thisexten['description']), + 'edit_url' => 'config.php?display=conferences&extdisplay='.urlencode($exten), + ); + } + } else { + return false; + } +} + +function conferences_recordings_usage($recording_id) { + global $active_modules; + + $results = sql("SELECT `exten`, `description` FROM `meetme` WHERE `joinmsg_id` = '$recording_id'","getAll",DB_FETCHMODE_ASSOC); + if (empty($results)) { + return array(); + } else { + foreach ($results as $result) { + $usage_arr[] = array( + 'url_query' => 'config.php?display=conferences&extdisplay='.urlencode($result['exten']), + 'description' => sprintf(_("Conference: %s"),$result['description']), + ); + } + return $usage_arr; + } +} + +/* Generates dialplan for conferences + We call this with retrieve_conf +*/ +function conferences_get_config($engine) { + global $ext; // is this the best way to pass this? + global $conferences_conf; + global $version; + global $amp_conf; + global $astman; + + $ast_ge_162 = version_compare($version, '1.6.2', 'ge'); + // Default to conference meetme + $confapp = 'ext_meetme'; + if ($ast_ge_162 && $amp_conf['AMPENGINE'] == 'asterisk' && isset($astman) && $astman->connected()) { + //check for meetme application and fallback to confbridge if possible + $app = $astman->send_request('Command', array('Command' => 'module show like meetme')); + if (preg_match('/[1-9] modules loaded/', $app['data'])){ + $confapp='ext_meetme'; + } else { + $app = $astman->send_request('Command', array('Command' => 'module show like confbridge')); + if (preg_match('/[1-9] modules loaded/', $app['data'])){ + $confapp='ext_confbridge'; + } + } + } + + switch($engine) { + case "asterisk": + $ext->addInclude('from-internal-additional','ext-meetme'); + $contextname = 'ext-meetme'; + if(is_array($conflist = conferences_list())) { + + $ast_ge_14 = version_compare($version, "1.4","ge"); + + // Start the conference + if ($ast_ge_14) { + $ext->add($contextname, 'STARTMEETME', '', new ext_execif('$["${MEETME_MUSIC}" != ""]','Set','CHANNEL(musicclass)=${MEETME_MUSIC}')); + } else { + $ext->add($contextname, 'STARTMEETME', '', new ext_execif('$["${MEETME_MUSIC}" != ""]','SetMusicOnHold','${MEETME_MUSIC}')); + } + $ext->add($contextname, 'STARTMEETME', '', new ext_setvar('GROUP(meetme)','${MEETME_ROOMNUM}')); + $ext->add($contextname, 'STARTMEETME', '', new ext_gotoif('$[${MAX_PARTICIPANTS} > 0 && ${GROUP_COUNT(${MEETME_ROOMNUM}@meetme)}>${MAX_PARTICIPANTS}]','MEETMEFULL,1')); + if ($confapp != 'ext_confbridge') { + $ext->add($contextname, 'STARTMEETME', '', new ext_meetme('${MEETME_ROOMNUM}','${MEETME_OPTS}','${PIN}')); + } else { + $ext->add($contextname, 'STARTMEETME', '', new ext_confbridge('${MEETME_ROOMNUM}','${MEETME_OPTS}','${PIN}')); + } + $ext->add($contextname, 'STARTMEETME', '', new ext_hangup('')); + + //meetme full + $ext->add($contextname, 'MEETMEFULL', '', new ext_playback('im-sorry&conf-full&goodbye')); + $ext->add($contextname, 'MEETMEFULL', '', new ext_hangup('')); + + // hangup for whole context + $ext->add($contextname, 'h', '', new ext_hangup('')); + + foreach($conflist as $item) { + $room = conferences_get(ltrim($item['0'])); + + $roomnum = ltrim($item['0']); + $roomoptions = $room['options']; + if ($ast_ge_14) { + $roomoptions = str_replace('i','I',$roomoptions); + } + if (!$ast_ge_14) { + $roomoptions = str_replace('o','',$roomoptions); + $roomoptions = str_replace('T','',$roomoptions); + } + $roomuserpin = $room['userpin']; + $roomadminpin = $room['adminpin']; + $roomusers = $room['users']; + if(isset($room['music']) && $room['music'] !='' && $room['music']!='inherit') { + $music = $room['music']; + } else { + $music='${MOHCLASS}'; // inherit channel moh class + } + if (isset($room['joinmsg_id']) && $room['joinmsg_id'] != '') { + $roomjoinmsg = recordings_get_file($room['joinmsg_id']); + } else { + $roomjoinmsg = ''; + } + + // Add optional hint + if ($amp_conf['USEDEVSTATE']) { + $ext->addHint($contextname, $roomnum, "MeetMe:".$roomnum); + } + // entry point + $ext->add($contextname, $roomnum, '', new ext_macro('user-callerid')); + $ext->add($contextname, $roomnum, '', new ext_setvar('MEETME_ROOMNUM',$roomnum)); + $ext->add($contextname, $roomnum, '', new ext_setvar('MAX_PARTICIPANTS', $roomusers)); + $ext->add($contextname, $roomnum, '', new ext_setvar('MEETME_MUSIC',$music)); + if (strstr($room['options'],'r') !== false) { + $ext->add($contextname, $roomnum, '', new ext_setvar('MEETME_RECORDINGFILE','${ASTSPOOLDIR}/monitor/meetme-conf-rec-${MEETME_ROOMNUM}-${UNIQUEID}')); + } + $ext->add($contextname, $roomnum, '', new ext_gotoif('$["${DIALSTATUS}" = "ANSWER"]',($roomuserpin == '' && $roomadminpin == '' ? 'USER' : 'READPIN'))); + $ext->add($contextname, $roomnum, '', new ext_answer('')); + $ext->add($contextname, $roomnum, '', new ext_wait(1)); + + // Deal with PINs -- if exist + if ($roomuserpin != '' || $roomadminpin != '') { + $ext->add($contextname, $roomnum, '', new ext_setvar('PINCOUNT','0')); + $ext->add($contextname, $roomnum, 'READPIN', new ext_read('PIN','enter-conf-pin-number')); + + // userpin -- must do always, otherwise if there is just an adminpin + // there would be no way to get to the conference ! + $ext->add($contextname, $roomnum, '', new ext_gotoif('$[x${PIN} = x'.$roomuserpin.']','USER')); + + // admin pin -- exists + if ($roomadminpin != '') { + $ext->add($contextname, $roomnum, '', new ext_gotoif('$[x${PIN} = x'.$roomadminpin.']','ADMIN')); + } + + // pin invalid + $ext->add($contextname, $roomnum, '', new ext_setvar('PINCOUNT','$[${PINCOUNT}+1]')); + $ext->add($contextname, $roomnum, '', new ext_gotoif('$[${PINCOUNT}>3]', "h")); + $ext->add($contextname, $roomnum, '', new ext_playback('conf-invalidpin')); + $ext->add($contextname, $roomnum, '', new ext_goto('READPIN')); + + // admin mode -- only valid if there is an admin pin + if ($roomadminpin != '') { + $ext->add($contextname, $roomnum, 'ADMIN', new ext_setvar('MEETME_OPTS','aA'.str_replace('m','',$roomoptions))); + if ($roomjoinmsg != '') { // play joining message if one defined + $ext->add($contextname, $roomnum, '', new ext_playback($roomjoinmsg)); + } + $ext->add($contextname, $roomnum, '', new ext_goto('STARTMEETME,1')); + } + } + + // user mode + $ext->add($contextname, $roomnum, 'USER', new ext_setvar('MEETME_OPTS',$roomoptions)); + if ($roomjoinmsg != '') { // play joining message if one defined + $ext->add($contextname, $roomnum, '', new ext_playback($roomjoinmsg)); + } + $ext->add($contextname, $roomnum, '', new ext_goto('STARTMEETME,1')); + + // add meetme config + $conferences_conf->addMeetme($room['exten'],$room['userpin'],$room['adminpin']); + } + } + + break; + } +} + +function conferences_check_extensions($exten=true) { + $extenlist = array(); + if (is_array($exten) && empty($exten)) { + return $extenlist; + } + $sql = "SELECT exten, description FROM meetme "; + if (is_array($exten)) { + $sql .= "WHERE exten in ('".implode("','",$exten)."')"; + } + $sql .= " ORDER BY exten"; + $results = sql($sql,"getAll",DB_FETCHMODE_ASSOC); + + foreach ($results as $result) { + $thisexten = $result['exten']; + $extenlist[$thisexten]['description'] = _("Conference: ").$result['description']; + $extenlist[$thisexten]['status'] = 'INUSE'; + $extenlist[$thisexten]['edit_url'] = 'config.php?display=conferences&extdisplay='.urlencode($thisexten); + } + return $extenlist; +} + +//get the existing meetme extensions +function conferences_list() { + $results = sql("SELECT exten,description FROM meetme ORDER BY exten","getAll",DB_FETCHMODE_ASSOC); + foreach($results as $result){ + // check to see if we are in-range for the current AMP User. + if (isset($result['exten']) && checkRange($result['exten'])){ + // return this item's dialplan destination, and the description + $extens[] = array($result['exten'],$result['description']); + } + } + if (isset($extens)) { + return $extens; + } else { + return null; + } +} + +function conferences_get($account){ + global $db; + //get all the variables for the meetme + $results = sql("SELECT exten,options,userpin,adminpin,description,joinmsg_id,music,users FROM meetme WHERE exten = '".$db->escapeSimple($account)."'","getRow",DB_FETCHMODE_ASSOC); + return $results; +} + +function conferences_del($account){ + global $db; + $results = sql("DELETE FROM meetme WHERE exten = '".$db->escapeSimple($account)."'","query"); +} + +function conferences_add($account,$name,$userpin,$adminpin,$options,$joinmsg_id=null,$music='',$users=0){ + global $active_modules; + global $db; + $account = $db->escapeSimple($account); + $name = $db->escapeSimple($name); + $userpin = $db->escapeSimple($userpin); + $adminpin = $db->escapeSimple($adminpin); + $options = $db->escapeSimple($options); + $joinmsg_id = $db->escapeSimple($joinmsg_id); + $music = $db->escapeSimple($music); + $users = $db->escapeSimple($users); + $results = sql("INSERT INTO meetme (exten,description,userpin,adminpin,options,joinmsg_id,music,users) values (\"$account\",\"$name\",\"$userpin\",\"$adminpin\",\"$options\",\"$joinmsg_id\",\"$music\",\"$users\")"); +} +?> Index: /modules/branches/2.10/conferences/uninstall.sql =================================================================== --- /modules/branches/2.10/conferences/uninstall.sql (revision 842) +++ /modules/branches/2.10/conferences/uninstall.sql (revision 842) @@ -0,0 +1,2 @@ + +DROP TABLE IF EXISTS meetme; Index: /modules/branches/2.10/conferences/page.conferences.php =================================================================== --- /modules/branches/2.10/conferences/page.conferences.php (revision 10873) +++ /modules/branches/2.10/conferences/page.conferences.php (revision 10873) @@ -0,0 +1,484 @@ +javascript:alert('"._("Warning! Extension")." $account "._("is not allowed for your account.")."');"; +} else { + + //if submitting form, update database + switch ($action) { + case "add": + + $conflict_url = array(); + $usage_arr = framework_check_extension_usage($account); + if (!empty($usage_arr)) { + $conflict_url = framework_display_extension_usage_alert($usage_arr); + } elseif (conferences_add($account,$_REQUEST['name'],$_REQUEST['userpin'],$_REQUEST['adminpin'],$_REQUEST['options'],$_REQUEST['joinmsg_id'],$music,$users) !== false) { + needreload(); + redirect_standard(); + } + break; + case "delete": + conferences_del($extdisplay); + needreload(); + redirect_standard(); + break; + case "edit": //just delete and re-add + //check to see if the room number has changed + if ($orig_account != '' && $orig_account != $account) { + $conflict_url = array(); + $usage_arr = framework_check_extension_usage($account); + if (!empty($usage_arr)) { + $conflict_url = framework_display_extension_usage_alert($usage_arr); + break; + } else { + conferences_del($orig_account); + $_REQUEST['extdisplay'] = $account;//redirect to the new ext + $old = conferences_getdest($orig_account); + $new = conferences_getdest($account); + framework_change_destination($old[0], $new[0]); + } + } else { + conferences_del($account); + } + + conferences_add($account,$_REQUEST['name'],$_REQUEST['userpin'],$_REQUEST['adminpin'],$_REQUEST['options'],$_REQUEST['joinmsg_id'],$music,$users); + needreload(); + redirect_standard('extdisplay'); + break; + } +} + +//Check to see if conference application is only confbridge +global $amp_conf; +global $astman; +if ($astver === null) { + $engineinfo = engine_getinfo(); + $astver = $engineinfo['version']; +} +$ast_ge_162 = version_compare($astver, '1.6.2', 'ge'); +// Default to conference meetme +$confapp = 'ext_meetme'; +if ($ast_ge_162 && $amp_conf['AMPENGINE'] == 'asterisk' && isset($astman) && $astman->connected()) { + //check for meetme application and fallback to confbridge if possible + $app = $astman->send_request('Command', array('Command' => 'module show like meetme')); + if (preg_match('/[1-9] modules loaded/', $app['data'])){ + $confapp='ext_meetme'; + } else { + $app = $astman->send_request('Command', array('Command' => 'module show like confbridge')); + if (preg_match('/[1-9] modules loaded/', $app['data'])){ $confapp='ext_confbridge'; + } + } +} + +//get meetme rooms +//this function needs to be available to other modules (those that use goto destinations) +//therefore we put it in globalfunctions.php +$meetmes = conferences_list(); +?> + +
+ + +
+ + +
+

'._("Conference").' '.$extdisplay.' '._("deleted").'!









'; +} else { + if ($extdisplay != ""){ + //get details for this meetme + $thisMeetme = conferences_get($extdisplay); + $options = $thisMeetme['options']; + $userpin = $thisMeetme['userpin']; + $adminpin = $thisMeetme['adminpin']; + $description = $thisMeetme['description']; + $joinmsg_id = $thisMeetme['joinmsg_id']; + $music = $thisMeetme['music']; + $users = $thisMeetme['users']; + } else { + $options = ""; + $userpin = ""; + $adminpin = ""; + $description = ""; + $joinmsg_id = ""; + $music = ""; + $users = "0"; + } + +?> + +

+ '.$tlabel.''; +?> +
+ + : + + + +

+"._("Conflicting Extensions").""; + echo implode('
',$conflict_url); + } +?> +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +


This setting is optional.

If either PIN is entered, the user will be prompted to enter a PIN.")?>

This setting is optional unless the 'leader wait' option is in use, then this PIN will identify the leader.")?>



To add additional recordings please use the \"System Recordings\" MENU to the left")?>
+ +

You must install and enable the \"Systems Recordings\" Module to edit this option")?>
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +

This music is defined in the \"Music on Hold\" to the left.")?>
+ +
+ +
+ +
+ +
+ +
+hookHtml; +?> +
" tabindex="">
+ +
+ Index: /modules/branches/2.10/conferences/install.php =================================================================== --- /modules/branches/2.10/conferences/install.php (revision 11109) +++ /modules/branches/2.10/conferences/install.php (revision 11109) @@ -0,0 +1,117 @@ +query($sql); +if(DB::IsError($check)) { + die_freepbx("Can not create meetme table"); +} +outn(_("Checking if music field present..")); +$sql = "SELECT music FROM meetme"; +$check = $db->getRow($sql, DB_FETCHMODE_ASSOC); +if(DB::IsError($check)) { + outn(_("adding music field..")); + $sql = "ALTER TABLE meetme ADD music VARCHAR(80)"; + $result = $db->query($sql); + if(DB::IsError($result)) { + out(_("fatal error")); + die_freepbx($result->getDebugInfo()); + } else { + out(_("ok")); + } +} else { + out(_("already present")); +} + +// Version 2.5 migrate to recording ids +// +outn(_("Checking if recordings need migration..")); +$sql = "SELECT joinmsg_id FROM meetme"; +$check = $db->getRow($sql, DB_FETCHMODE_ASSOC); +if(DB::IsError($check)) { + // Add recording_id field + // + out(_("migrating")); + outn(_("adding joinmsg_id field..")); + $sql = "ALTER TABLE meetme ADD joinmsg_id INTEGER"; + $result = $db->query($sql); + if(DB::IsError($result)) { + out(_("fatal error")); + die_freepbx($result->getDebugInfo()); + } else { + out(_("ok")); + } + + // Get all the valudes and replace them with joinmsg_id + // + outn(_("migrate to recording ids..")); + $sql = "SELECT `exten`, `joinmsg` FROM `meetme`"; + $results = $db->getAll($sql, DB_FETCHMODE_ASSOC); + if(DB::IsError($results)) { + out(_("fatal error")); + die_freepbx($results->getDebugInfo()); + } + $migrate_arr = array(); + $count = 0; + foreach ($results as $row) { + if (trim($row['joinmsg']) != '') { + $rec_id = recordings_get_or_create_id($row['joinmsg'], 'conference'); + $migrate_arr[] = array($rec_id, $row['exten']); + $count++; + } + } + if ($count) { + $compiled = $db->prepare('UPDATE `meetme` SET `joinmsg_id` = ? WHERE `exten` = ?'); + $result = $db->executeMultiple($compiled,$migrate_arr); + if(DB::IsError($result)) { + out(_("fatal error")); + die_freepbx($result->getDebugInfo()); + } + } + out(sprintf(_("migrated %s entries"),$count)); + + // Now remove the old recording field replaced by new id field + // + outn(_("dropping joinmsg field..")); + $sql = "ALTER TABLE `meetme` DROP `joinmsg`"; + $result = $db->query($sql); + if(DB::IsError($result)) { + out(_("no joinmsg field???")); + } else { + out(_("ok")); + } + +} else { + out(_("already migrated")); +} +// Migration for Maximum Participant Count +outn(_("Checking for users field..")); +$sql = "SELECT users FROM meetme"; +$check = $db->getRow($sql, DB_FETCHMODE_ASSOC); +if(DB::IsError($check)) { + outn(_("adding..")); + $sql = "ALTER TABLE meetme ADD users TINYINT DEFAULT 0"; + $result = $db->query($sql); + if(DB::IsError($result)) { + out(_("FATAL error")); + out($result->getDebugInfo()); + } else { + out(_("ok")); + } +} else { + out(_("already present")); +} +?> Index: /modules/branches/2.10/customappsreg/i18n/sv_SE/LC_MESSAGES/customappsreg.po =================================================================== --- /modules/branches/2.10/customappsreg/i18n/sv_SE/LC_MESSAGES/customappsreg.po (revision 11851) +++ /modules/branches/2.10/customappsreg/i18n/sv_SE/LC_MESSAGES/customappsreg.po (revision 11851) @@ -0,0 +1,219 @@ +# This file is part of FreePBX. +# +# FreePBX 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. +# +# FreePBX 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 FreePBX. If not, see . +# +# FreePBX language for customappsreg +# Copyright (C) 2010, 2011 Mikael Carlsson +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX customappsreg\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-18 08:25+0100\n" +"PO-Revision-Date: 2011-03-19 00:00+0100\n" +"Last-Translator: Mikael Carlsson \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Swedish\n" +"X-Poedit-Country: SWEDEN\n" + +msgid "Custom Applications" +msgstr "Anpassade applikationer" + +msgid "Advanced Administration" +msgstr "Avancerade instÀllningar" + +msgid "" +"Registry to add custom extensions and destinations that may be created and " +"used so that the Extensions and Destinations Registry can include these." +msgstr "" +"LÀgg till anpassade anknytningar och destinationer i ett register som kan anvÀndas " +"av standardanknytningar och destinationer som ett valbart alternativ" + +msgid "Custom Extensions" +msgstr "Anpassade anknytningar" + +msgid "Custom Destinations" +msgstr "Anpassade destinationer" + +#, php-format +msgid "Custom Destination: %s" +msgstr "Anpassad destination: %s" + +msgid "Custom Extension: " +msgstr "Anpassad anknytning:" + +msgid "" +"Invalid Destination, must not be blank, must be formatted as: context,exten," +"pri" +msgstr "" +"Ogiltig destination, den kan inte vara tom och måste vara formaterad som: " +"context,exten,pri" + +msgid "Invalid description specified, must not be blank" +msgstr "Ogiltig beskrivning, den kan inte vara tom" + +msgid "DUPLICATE Destination: This destination is already in use" +msgstr "DUBLETT av destination: Denna destination finns redan" + +msgid "" +"DUPLICATE Destination: This destination is in use or potentially used by " +"another module" +msgstr "" +"DUBLETT av destination: Denna destination finns redan eller anvÀnds av annan " +"modul" + +msgid "Invalid Extension, must not be blank" +msgstr "Ogiltig anknytning, den kan inte vara tom" + +msgid "DUPLICATE Extension: This extension already in use" +msgstr "DUBLETT av anknytning: Denna anknytning anvÀnds redan" + +msgid "Add Custom Destination" +msgstr "LÀgg till anpassad destination" + +msgid "Edit: " +msgstr "Redigera:" + +msgid "" +"Custom Destinations allows you to register your custom destinations that " +"point to custom dialplans and will also 'publish' these destinations as " +"available destinations to other modules. This is an advanced feature and " +"should only be used by knowledgeable users. If you are getting warnings or " +"errors in the notification panel about CUSTOM destinations that are correct, " +"you should include them here. The 'Unknown Destinations' chooser will allow " +"you to choose and insert any such destinations that the registry is not " +"aware of into the Custom Destination field." +msgstr "" +"Anpassade destinationer ger dig möjlighet att registrera dina anpassningar i " +"nummerplanen och 'publicerar' dessa som tillgÀngliga destinationer för andra " +"moduler. Detta Àr en avancerad funktion och bör bara anvÀndas av personer " +"med insikt i Asterisk nummerplan. Om du får varningar eller felmeddelande i " +"\"Meddelanden från FreePBX\" om ANPASSADE destinationer, bör du inkludera " +"dom hÀr." + +msgid "Edit Custom Destination" +msgstr "Redigera anpassad anknytning" + +msgid "Custom Destination" +msgstr "Anpassad destination" + +msgid "" +"This is the Custom Destination to be published. It should be formatted " +"exactly as you would put it in a goto statement, with context, exten, " +"priority all included. An example might look like:
mycustom-app,s,1" +msgstr "" +"Detta Àr en Anpassad destination som ska publiceras. Formatet ska vara exakt " +"som du anvÀnder i en goto sats, med context, exten, priority. Ett exempel " +"kan se ut som detta:
min-anpassade-app,s,1" + +msgid "" +"READONLY WARNING: Because this destination is being used by other module " +"objects it can not be edited. You must remove those dependencies in order to " +"edit this destination, or create a new destination to use" +msgstr "" +"VARNING SKRIVSKYDDAD: Denna destination anvÀnds av andra moduler och kan " +"inte redigeras. Du mÃ¥ste ta bort ta bort dessa beroenden för att kunna " +"redigera denna destination, eller skapa en ny destination." + +msgid "Destination Quick Pick" +msgstr "Snabbval för destination" + +msgid "" +"Choose un-identified destinations on your system to add to the Custom " +"Destination Registry. This will insert the chosen entry into the Custom " +"Destination box above." +msgstr "" +"VÀlj en oidentifierad destination i ditt system för att lÀgga till den i " +"registret för Anpassad destinationer. Detta kommer att lÀgga till vÀrdet i " +"rutan Anpassad destination ovan." + +msgid "(pick destination)" +msgstr "(vÀlj destination)" + +msgid "Description" +msgstr "Beskrivning" + +msgid "" +"Brief Description that will be published to modules when showing " +"destinations. Example: My Weather App" +msgstr "" +"Kortfattad beskrivning som kommer att visas nÀr du vÀljer destination i " +"moduler. Exempel: Min Anpassade VÀg" + +msgid "Notes" +msgstr "Notering" + +msgid "" +"More detailed notes about this destination to help document it. This field " +"is not used elsewhere." +msgstr "" +"Mer detaljerad beskrivning om denna destination, för dokumentation. Detta " +"fÀlt anvÀnds bara hÀr." + +msgid "Submit Changes" +msgstr "Spara Àndringar" + +msgid "Delete" +msgstr "Ta bort" + +msgid "Add Custom Extension" +msgstr "LÀgg till anpassad anknytning" + +msgid "" +"Custom Extensions provides you with a facility to register any custom " +"extensions or feature codes that you have created in a custom file and " +"FreePBX doesn't otherwise know about them. This allows the Extension " +"Registry to be aware of your own extensions so that it can detect conflicts " +"or report back information about your custom extensions to other modules " +"that may make use of the information. You should not put extensions that you " +"create in the Misc Apps Module as those are not custom." +msgstr "" +"Anpassade anknytningar ger dig en möjlighet att registrera anpassade " +"anknytningar eller funktionskoder som du har skapat i en anpassad fil som " +"FreePBX inte kÀnner till. Detta ger en möjlighet för Anknytningsregistret " +"att kÀnna till dina anknytningar sÃ¥ att konflikter kan detekteras eller " +"rapporteras tillbaka till andra moduler som eventuellt anvÀnder " +"informationen. Du ska inte lÀgga till anknytningar hÀr som du skapar i " +"Övriga Applikationer dÃ¥ dom inte rÀknas som anpassade" + +msgid "Conflicting Extensions" +msgstr "Konfliktande anknytningar" + +msgid "Edit Custom Extension" +msgstr "Redigera anpassad anknytning" + +msgid "Custom Extension" +msgstr "Anpassad anknytning" + +msgid "" +"This is the Extension or Feature Code you are using in your dialplan that " +"you want the FreePBX Extension Registry to be aware of." +msgstr "" +"Detta Àr den anpassade anknytning eller funktionskod som du anvÀnder i din " +"nummerplan som FreePBX kommer att kÀnna till." + +msgid "" +"Brief description that will be published in the Extension Registry about " +"this extension" +msgstr "Kortfattad beskrivning som kommer att visas för övriga anknytningar" + +msgid "" +"More detailed notes about this extension to help document it. This field is " +"not used elsewhere." +msgstr "" +"Mer detaljerad beskrivning om denna anknytning för att underlÀtta " +"dokumentation. Detta anvÀnds bara hÀr." Index: /modules/branches/2.10/customappsreg/i18n/bg_BG/LC_MESSAGES/customappsreg.po =================================================================== --- /modules/branches/2.10/customappsreg/i18n/bg_BG/LC_MESSAGES/customappsreg.po (revision 7250) +++ /modules/branches/2.10/customappsreg/i18n/bg_BG/LC_MESSAGES/customappsreg.po (revision 7250) @@ -0,0 +1,178 @@ +# 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 , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX v2.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-10-05 22:57+0200\n" +"PO-Revision-Date: 2008-11-04 22:50+0200\n" +"Last-Translator: \n" +"Language-Team: Chavdar Iliev \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Bulgarian\n" +"X-Poedit-Country: BULGARIA\n" +"X-Poedit-SourceCharset: utf-8\n" + +#: functions.inc.php:29 +#, php-format +msgid "Custom Destination: %s" +msgstr "Custom НаправлеМОе: %s" + +#: functions.inc.php:52 +msgid "Custom Extension: " +msgstr "Custom ВътрешМа ЛОМОя: " + +#: functions.inc.php:103 +#: page.customdests.php:190 +msgid "Invalid Destination, must not be blank, must be formatted as: context,exten,pri" +msgstr "НеправОлМП НаправлеМОе, Ме ЌПже Ўа е празМП, трябва Ўа е фПрЌатОраМП така: context,exten,pri" + +#: functions.inc.php:107 +#: functions.inc.php:140 +#: page.customdests.php:191 +#: page.customextens.php:140 +msgid "Invalid description specified, must not be blank" +msgstr "НеправОлМП ПпОсаМОе, Ме ЌПже Ўа е празМП" + +#: functions.inc.php:112 +msgid "DUPLICATE Destination: This destination is already in use" +msgstr "ДУБЛИРАНО НаправлеМОе: НаправлеМОетП вече се ОзпПлзва" + +#: functions.inc.php:123 +#: functions.inc.php:186 +msgid "DUPLICATE Destination: This destination is in use or potentially used by another module" +msgstr "ДУБЛИРАНО НаправлеМОе: НаправлеМОетП се ОзпПлзва ОлО пПтеМцОалМП се ОзпПлзва Пт Ўруг ЌПЎул" + +#: functions.inc.php:136 +#: page.customextens.php:139 +msgid "Invalid Extension, must not be blank" +msgstr "НеправОлМа ВътрешМа ЛОМОя, пПлетП Ме ЌПже Ўа е празМП" + +#: functions.inc.php:151 +msgid "DUPLICATE Extension: This extension already in use" +msgstr "ДУБЛИРАНА ВътрешМа ЛОМОя: ТазО вътрешМа лОМОя вече се ОзпПлзва" + +#: page.customdests.php:54 +#: page.customdests.php:80 +#: page.customdests.php:92 +msgid "Add Custom Destination" +msgstr "ДПбавО Custom НаправлеМОе" + +#: page.customdests.php:78 +#: page.customextens.php:92 +msgid "Edit: " +msgstr "РеЎактОрай:" + +#: page.customdests.php:83 +msgid "Custom Destinations allows you to register your custom destinations that point to custom dialplans and will also 'publish' these destinations as available destinations to other modules. This is an advanced feature and should only be used by knowledgeable users. If you are getting warnings or errors in the notification panel about CUSTOM destinations that are correct, you should include them here. The 'Unknown Destinations' chooser will allow you to choose and insert any such destinations that the registry is not aware of into the Custom Destination field." +msgstr "Custom НаправлеМОя вО Ўават възЌПжМПста Ўа регОстрОрате вашОте custom МаправлеМОя, кПОтП Ўа МасПчват къЌ custom ÑÑ +еЌО Ма ОзбОраМе О Ўа 'преЎПставят' тезО МаправлеМОя катП възЌПжМО МаправлеМОя за ЎругОте ЌПЎулО. ТПва е слПжМа фуМкцОя О трябва Ўа се ОзпПлзва саЌП Пт зМаещО пПтребОтелО. АкП пПлучавате преЎупрежЎеМОя О грешкО в паМела за сОстеЌеМ статус за CUSTOM НаправлеМОя кПОтП са кПректМО, тПгава бО трябвалП Ўа гО включОте тук. 'БързП ИзбОраМе Ма НаправлеМОе' вО преЎлага Ўа Озберете О ЎПбавОте всОчкО МаправлеМОя за кПОтП регОстрОте Ме са ОзвестеМО в Custom НаправлеМОе пПлетП." + +#: page.customdests.php:92 +msgid "Edit Custom Destination" +msgstr "РеЎактОрай Custom НаправлеМОе" + +#: page.customdests.php:94 +msgid "Custom Destination" +msgstr "Custom НаправлеМОе" + +#: page.customdests.php:97 +msgid "This is the Custom Destination to be published. It should be formatted exactly as you would put it in a goto statement, with context, exten, priority all included. An example might look like:
mycustom-app,s,1" +msgstr "Custom НаправлеМОе за преЎПставяМе. Трябва Ўа е фПрЌатОраМП тПчМП кактП Ð±ÐžÑ +те гП МапОсалО в goto въвежЎаМе, с включеМО context, exten, priority. НапрОЌер:
mycustom-app,s,1" + +#: page.customdests.php:99 +msgid "READONLY WARNING: Because this destination is being used by other module objects it can not be edited. You must remove those dependencies in order to edit this destination, or create a new destination to use" +msgstr "ВНИМАНИЕ: Тъй катП тПва МаправлеМОе се ОзпПлзва Пт Ўруг ЌПЎул Ме ЌПже Ўа бъЎе реЎактОраМП. Трябва Ўа Ð¿Ñ€ÐµÐŒÐ°Ñ +МОте тазО завОЌПст за Ўа ЌПжете Ўа реЎактОрате МаправлеМОетП ОлО съзЎайте МПвП МаправлеМОе кПетП Ўа ОзпПлзвате" + +#: page.customdests.php:121 +msgid "Destination Quick Pick" +msgstr "БързП ИзбОраМе Ма НаправлеМОе" + +#: page.customdests.php:123 +msgid "Choose un-identified destinations on your system to add to the Custom Destination Registry. This will insert the chosen entry into the Custom Destination box above." +msgstr "ИзбОра МезвестМО МаправлеМОя във вашата сОстеЌа за Ўа гО ЎПбавО къЌ РегОстрОраМО Custom НаправлеМОя. ТПва ще пПставО ОзбраМПтП в Custom НаправлеМОе пПлетП пП-гПре." + +#: page.customdests.php:129 +msgid "(pick destination)" +msgstr "(ОзберО МаправлеМОе)" + +#: page.customdests.php:144 +#: page.customextens.php:118 +msgid "Description" +msgstr "ОпОсаМОе" + +#: page.customdests.php:144 +msgid "Brief Description that will be published to modules when showing destinations. Example: My Weather App" +msgstr "КраткП ПпОсаМОе кПетП ще се преЎПставО Ма ЌПЎулОте кПгатП пПказват МаправлеМОята. НапрОЌер: My Weather App" + +#: page.customdests.php:148 +#: page.customextens.php:122 +msgid "Notes" +msgstr "БележкО" + +#: page.customdests.php:148 +msgid "More detailed notes about this destination to help document it. This field is not used elsewhere." +msgstr "ПП ЎетайлМО бележкО за тПва МаправлеМОе. ТПва пПле Ме се ОзпПлзва МОкъЎе." + +#: page.customdests.php:153 +#: page.customextens.php:127 +msgid "Submit Changes" +msgstr "ПрОеЌО ПрПЌеМОте" + +#: page.customdests.php:154 +#: page.customextens.php:128 +msgid "Delete" +msgstr "ИзтрОй" + +#: page.customextens.php:70 +#: page.customextens.php:94 +#: page.customextens.php:111 +msgid "Add Custom Extension" +msgstr "ДПбавО Custom ВътрешМа ЛОМОя" + +#: page.customextens.php:97 +msgid "Custom Extensions provides you with a facility to register any custom extensions or feature codes that you have created in a custom file and FreePBX doesn't otherwise know about them. This allows the Extension Registry to be aware of your own extensions so that it can detect conflicts or report back information about your custom extensions to other modules that may make use of the information. You should not put extensions that you create in the Misc Apps Module as those are not custom." +msgstr "Custom ВътрешМО ЛОМОО вО Ўават възЌПжМПста Ўа регОстрОрате всОчкО custom вътрешМО лОМОО ОлО спецОалМО кПЎПве кПОтП сте съзЎалО в custom файл О FreePBX МяЌа как Ўа рабере за Ñ‚ÑÑ +. ТПва пПзвПлява Ма РегОстрОраМО ВътрешМО ЛОМОО Ўа МаучО за Ñ‚ÑÑ +, така че Ўа ЌПже Ўа ПткрОва кПМфлОктО ОлО Ўа връща ОМфПрЌацОя за вашОте custom вътрешМО лОМОО къЌ ЎругОте ЌПЎулО, кПОтП евеМтуалМП ЌПгат Ўа ОзпПлзват тазО ОМфПрЌацОя. Не трябва Ўа пПставяте вътрешМОте лОМОО кПОтП сте съзЎалО в МПЎул ДругО НаправлеМОя, тъй катП те Ме са custom." + +#: page.customextens.php:101 +msgid "Conflicting Extensions" +msgstr "ВътрешМО ЛОМОО в КПМфлОкт" + +#: page.customextens.php:111 +msgid "Edit Custom Extension" +msgstr "РеЎактОрай Custom ВътрешМа ЛОМОя" + +#: page.customextens.php:113 +msgid "Custom Extension" +msgstr "Custom ВътрешМа ЛОМОя" + +#: page.customextens.php:113 +msgid "This is the Extension or Feature Code you are using in your dialplan that you want the FreePBX Extension Registry to be aware of." +msgstr "ВътрешМа ЛОМОя ОлО СпецОалеМ КПЎ кПОтП ОзпПлзвате в вашОте ÑÑ +еЌО Ма ОзбОраМе за кПОтП Оскате FreePBX РегОстрОраМО ВътрешМО ЛОМОО Ўа се Озвестява." + +#: page.customextens.php:118 +msgid "Brief description that will be published in the Extension Registry about this extension" +msgstr "КраткП ПпОсаМОе кПетП ще се преЎставО в РегОстрОраМО ВътрешМО ЛОМОО за тазО вътрешМа лОМОя" + +#: page.customextens.php:122 +msgid "More detailed notes about this extension to help document it. This field is not used elsewhere." +msgstr "ПП ЎетайлМО бележкО за тазО вътрешМа лОМОя. ТПва пПле Ме се ОзпПлзва МОкъЎе." + +#: module.xml +msgid "Custom Destinations" +msgstr "Custom НаправлеМОя" + +#: module.xml +msgid "Custom Extensions" +msgstr "Custom ВътрешМО ЛОМОО" + Index: /modules/branches/2.10/customappsreg/i18n/zh_CN/LC_MESSAGES/customappsreg.po =================================================================== --- /modules/branches/2.10/customappsreg/i18n/zh_CN/LC_MESSAGES/customappsreg.po (revision 7440) +++ /modules/branches/2.10/customappsreg/i18n/zh_CN/LC_MESSAGES/customappsreg.po (revision 7440) @@ -0,0 +1,240 @@ +# 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 , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX 2.5 Chinese Translation\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-10-05 22:57+0200\n" +"PO-Revision-Date: 2009-01-30 17:41+0800\n" +"Last-Translator: 呚埁晟 \n" +"Language-Team: EdwardBadBoy \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Chinese\n" +"X-Poedit-Country: CHINA\n" +"X-Poedit-SourceCharset: utf-8\n" + +#: functions.inc.php:29 +#, php-format +msgid "Custom Destination: %s" +msgstr "自定义目的地%s" + +#: functions.inc.php:52 +msgid "Custom Extension: " +msgstr "自定义分机" + +#: functions.inc.php:103 +#: page.customdests.php:190 +msgid "Invalid Destination, must not be blank, must be formatted as: context,exten,pri" +msgstr "æ— æ•ˆçš„ç›®çš„åœ°ïŒŒäžå¯ä»¥äžºç©ºïŒŒæ ŒåŒå¿ +须䞺context,exten,pri" + +#: functions.inc.php:107 +#: functions.inc.php:140 +#: page.customdests.php:191 +#: page.customextens.php:140 +msgid "Invalid description specified, must not be blank" +msgstr "指定了无效的描述䞍胜䞺空" + +#: functions.inc.php:112 +msgid "DUPLICATE Destination: This destination is already in use" +msgstr "重倍的目的地歀目的地已被䜿甚" + +#: functions.inc.php:123 +#: functions.inc.php:186 +msgid "DUPLICATE Destination: This destination is in use or potentially used by another module" +msgstr "重倍的目的地歀目的地已被䜿甚或可胜圚被å +¶ä»–暡块䜿甚" + +#: functions.inc.php:136 +#: page.customextens.php:139 +msgid "Invalid Extension, must not be blank" +msgstr "无效的分机号䞍胜䞺空" + +#: functions.inc.php:151 +msgid "DUPLICATE Extension: This extension already in use" +msgstr "重倍的分机号歀分机已被䜿甚" + +#: page.customdests.php:54 +#: page.customdests.php:80 +#: page.customdests.php:92 +msgid "Add Custom Destination" +msgstr "添加自定义目的地" + +#: page.customdests.php:78 +#: page.customextens.php:92 +msgid "Edit: " +msgstr "猖蟑" + +#: page.customdests.php:83 +msgid "Custom Destinations allows you to register your custom destinations that point to custom dialplans and will also 'publish' these destinations as available destinations to other modules. This is an advanced feature and should only be used by knowledgeable users. If you are getting warnings or errors in the notification panel about CUSTOM destinations that are correct, you should include them here. The 'Unknown Destinations' chooser will allow you to choose and insert any such destinations that the registry is not aware of into the Custom Destination field." +msgstr "这向讟眮可以让䜠泚册指向自定义的拚号方案的自定义目的地并䞔䌚向å +¶ä»–暡块“发垃”这䞪目的地。这是䞀项高级功胜只有高端甚户才胜䜿甚。劂果䜠圚通告面版䞭发现了å +³äºŽæ˜Žæ˜Žæ˜¯æ­£ç¡®çš„è‡ªå®šä¹‰ç›®çš„è­Šå‘Šæˆ–é”™è¯¯ïŒŒé‚£ä¹ˆè¯·æŠŠå®ƒä»¬åŒ +含到这里的讟眮䞭去。“未知目的地”选择噚可以让䜠选择并插å +¥ä»»äœ•这样的目的地而泚册衚䞭没有å +³äºŽå®ƒä»¬çš„信息。" + +#: page.customdests.php:92 +msgid "Edit Custom Destination" +msgstr "猖蟑自定义目的地" + +#: page.customdests.php:94 +msgid "Custom Destination" +msgstr "自定义目的地" + +#: page.customdests.php:97 +msgid "This is the Custom Destination to be published. It should be formatted exactly as you would put it in a goto statement, with context, exten, priority all included. An example might look like:
mycustom-app,s,1" +msgstr "这是芁发垃的自定义目的地。他应该被栌匏化成圚gotoè¯­å¥äž­çš„é‚£ç§åœ¢åŒïŒŒèŠåŒ +括䞊䞋文、分机、䌘å +ˆçº§åˆ«ã€‚䞀䞪可胜的䟋子劂䞋
mycustom-app,s,1" + +#: page.customdests.php:99 +msgid "READONLY WARNING: Because this destination is being used by other module objects it can not be edited. You must remove those dependencies in order to edit this destination, or create a new destination to use" +msgstr "只读譊告由于歀目的地正圚被å +¶ä»–æš¡å—äœ¿ç”šïŒŒæ‰€ä»¥äžèƒœçŒ–èŸ‘ç›®çš„åœ°ã€‚äœ å¿ +é¡»ç§»é™€å¯¹å®ƒçš„äŸèµ–ïŒŒç„¶åŽæ‰èƒœçŒ–èŸ‘å®ƒã€‚æˆ–è€ +也可以创建新的目的地。" + +#: page.customdests.php:121 +msgid "Destination Quick Pick" +msgstr "快速选取目的地" + +#: page.customdests.php:123 +msgid "Choose un-identified destinations on your system to add to the Custom Destination Registry. This will insert the chosen entry into the Custom Destination box above." +msgstr "选择䜠的系统䞭的未标识的目的地以添加到自定义目的地的泚册衚䞭去。这将向䞊面的自定义目的地框插å +¥æ‰€é€‰æ‹©çš„项。" + +#: page.customdests.php:129 +msgid "(pick destination)" +msgstr "选取目的地" + +#: page.customdests.php:144 +#: page.customextens.php:118 +msgid "Description" +msgstr "描述" + +#: page.customdests.php:144 +msgid "Brief Description that will be published to modules when showing destinations. Example: My Weather App" +msgstr "圓向å +¶ä»–暡块发垃后芁星瀺的简短描述。䟋子我的倩气预报应甚皋序" + +#: page.customdests.php:148 +#: page.customextens.php:122 +msgid "Notes" +msgstr "倇泚" + +#: page.customdests.php:148 +msgid "More detailed notes about this destination to help document it. This field is not used elsewhere." +msgstr "曎诊细的å +³äºŽç›®çš„地的描述歀域䞍䌚圚å +¶ä»–地方甚到。" + +#: page.customdests.php:153 +#: page.customextens.php:127 +msgid "Submit Changes" +msgstr "提亀曎改" + +#: page.customdests.php:154 +#: page.customextens.php:128 +msgid "Delete" +msgstr "删陀" + +#: page.customextens.php:70 +#: page.customextens.php:94 +#: page.customextens.php:111 +msgid "Add Custom Extension" +msgstr "添加自定义分机" + +#: page.customextens.php:97 +msgid "Custom Extensions provides you with a facility to register any custom extensions or feature codes that you have created in a custom file and FreePBX doesn't otherwise know about them. This allows the Extension Registry to be aware of your own extensions so that it can detect conflicts or report back information about your custom extensions to other modules that may make use of the information. You should not put extensions that you create in the Misc Apps Module as those are not custom." +msgstr "自定义分机䞺䜠提䟛了䞀种可以泚册任䜕自定义分机或功胜代码的机制而这些自定义分机和功胜代码原来是䜠圚自己的é +çœ®æ–‡ä»¶äž­åˆ›å»ºçš„FreePBXå¹¶äžäº†è§£å®ƒä»¬ã€‚è¿™è®©åˆ†æœºæ³šå†Œè¡šæœ‰æœºäŒšçŸ¥é“äœ è‡ªå·±çš„åˆ†æœºå·ïŒŒè¿™æ ·å®ƒå¯ä»¥æŽ¢æµ‹å†²çªæˆ–è€ +向å +¶ä»–需芁分机信息暡块报告䜠自定义的分机号。请䜠䞍芁圚歀倄添加䜠圚Misc Apps暡块䞭创建的分机因䞺那些䞍算自定义的分机。" + +#: page.customextens.php:101 +msgid "Conflicting Extensions" +msgstr "分机冲突" + +#: page.customextens.php:111 +msgid "Edit Custom Extension" +msgstr "猖蟑自定义分机" + +#: page.customextens.php:113 +msgid "Custom Extension" +msgstr "自定义分机" + +#: page.customextens.php:113 +msgid "This is the Extension or Feature Code you are using in your dialplan that you want the FreePBX Extension Registry to be aware of." +msgstr "这是䜠圚䜠的拚号方案䞭䜿甚的分机和功胜代码而䜠垌望让FreePBX的分机泚册衚知道它们。" + +#: page.customextens.php:118 +msgid "Brief description that will be published in the Extension Registry about this extension" +msgstr "将圚分机泚册衚䞭发垃的å +³äºŽæ­€åˆ†æœºçš„简短描述" + +#: page.customextens.php:122 +msgid "More detailed notes about this extension to help document it. This field is not used elsewhere." +msgstr "曎倚的å +³äºŽæ­€åˆ†æœºçš„诊细信息歀域䞍䌚被甚圚别的地方。" + +#: module.xml +msgid "Custom Destinations" +msgstr "自定义目的地" + +#: module.xml +msgid "Custom Extensions" +msgstr "自定义分机" + +#~ msgid "" +#~ "Custom Destinations allows you to register your custom destinations that " +#~ "point to custom dialplans and will also 'publish' these destinations as " +#~ "available destinations to other modules. This is an advanced feature and " +#~ "should only be used by knowledgable users. If you are getting warnings or " +#~ "errors in the noticication panel about CUSTOM destinations that are " +#~ "correct, you should include them here. The 'Unknown Destinations' chooser " +#~ "will allow you to choose and insert any such destinations that the " +#~ "registry is not aware of into the Custom Destination field." +#~ msgstr "" +#~ "这向讟眮可以让䜠泚册指向自定义的拚号方案的自定义目的地并䞔䌚向å +¶ä»–æš¡" +#~ "块“发垃”这䞪目的地。这是䞀项高级功胜只有高端甚户才胜䜿甚。劂果䜠圚通告面" +#~ "版䞭发现了å +³äºŽæ˜Žæ˜Žæ˜¯æ­£ç¡®çš„è‡ªå®šä¹‰ç›®çš„è­Šå‘Šæˆ–é”™è¯¯ïŒŒé‚£ä¹ˆè¯·æŠŠå®ƒä»¬åŒ +含到这里的讟" +#~ "眮䞭去。“未知目的地”选择噚可以让䜠选择并插å +¥ä»»äœ•这样的目的地而泚册衚䞭没" +#~ "有å +³äºŽå®ƒä»¬çš„信息。" +#~ msgid "" +#~ "Choose un-identified destinations on your system to add to the Custom " +#~ "Destinaion Registry. This will insert the chosen entry into the Custom " +#~ "Destination box above." +#~ msgstr "" +#~ "选择䜠的系统䞭的未标识的目的地以添加到自定义目的地的泚册衚䞭去。这将向䞊面" +#~ "的自定义目的地框插å +¥æ‰€é€‰æ‹©çš„项。" +#~ msgid "" +#~ "Custom Extensions provides you with a facility to register any custom " +#~ "extenions or feature codes that you have created in a custom file and " +#~ "FreePBX doesn't otherwise know about them. This allows the Extension " +#~ "Registry to be aware of your own extensions so that it can detect " +#~ "conflicts or report back information about your custom extensions to " +#~ "other modules that may make use of the information. You should not put " +#~ "extensions that you create in the Misc Apps Module as those are not " +#~ "custom." +#~ msgstr "" +#~ "自定义分机䞺䜠提䟛了䞀种可以泚册任䜕自定义分机或功胜代码的机制而这些自定" +#~ "义分机和功胜代码原来是䜠圚自己的é +çœ®æ–‡ä»¶äž­åˆ›å»ºçš„FreePBX并䞍了解它们。这" +#~ "è®©åˆ†æœºæ³šå†Œè¡šæœ‰æœºäŒšçŸ¥é“äœ è‡ªå·±çš„åˆ†æœºå·ïŒŒè¿™æ ·å®ƒå¯ä»¥æŽ¢æµ‹å†²çªæˆ–è€ +向å +¶ä»–需芁分机" +#~ "信息暡块报告䜠自定义的分机号。请䜠䞍芁圚歀倄添加䜠圚Misc Apps暡块䞭创建的" +#~ "分机因䞺那些䞍算自定义的分机。" + Index: /modules/branches/2.10/customappsreg/i18n/pt_BR/LC_MESSAGES/customappsreg.po =================================================================== --- /modules/branches/2.10/customappsreg/i18n/pt_BR/LC_MESSAGES/customappsreg.po (revision 7759) +++ /modules/branches/2.10/customappsreg/i18n/pt_BR/LC_MESSAGES/customappsreg.po (revision 7759) @@ -0,0 +1,184 @@ +# This file is part of FreePBX. +# +# FreePBX 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. +# +# FreePBX 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 FreePBX. If not, see . +# +# Copyright 2009, Marcelo Araujo +# +msgid "" +msgstr "" +"Project-Id-Version: freePBX 2.5.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-10-05 22:57+0200\n" +"PO-Revision-Date: 2009-05-11 20:05-0300\n" +"Last-Translator: Marcelo Araujo \n" +"Language-Team: MidiVTS Team \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Portuguese\n" +"X-Poedit-Country: BRAZIL\n" +"X-Poedit-SourceCharset: utf-8\n" + +#: functions.inc.php:29 +#, php-format +msgid "Custom Destination: %s" +msgstr "Destino personalizado: %s" + +#: functions.inc.php:52 +msgid "Custom Extension: " +msgstr "Extensão personalizada:" + +#: functions.inc.php:103 +#: page.customdests.php:190 +msgid "Invalid Destination, must not be blank, must be formatted as: context,exten,pri" +msgstr "Destino inválido, não deve ser branco, deve ser formatado como: context, exten, pri" + +#: functions.inc.php:107 +#: functions.inc.php:140 +#: page.customdests.php:191 +#: page.customextens.php:140 +msgid "Invalid description specified, must not be blank" +msgstr "Descrição inválida especificada, não deve estar em branco" + +#: functions.inc.php:112 +msgid "DUPLICATE Destination: This destination is already in use" +msgstr "Destino duplicado: Este destino já está em uso" + +#: functions.inc.php:123 +#: functions.inc.php:186 +msgid "DUPLICATE Destination: This destination is in use or potentially used by another module" +msgstr "Destino duplicado: Este destino esta em uso ou potencialmente usado por outro módulo" + +#: functions.inc.php:136 +#: page.customextens.php:139 +msgid "Invalid Extension, must not be blank" +msgstr "Extensão inválida, não deve estar em branco" + +#: functions.inc.php:151 +msgid "DUPLICATE Extension: This extension already in use" +msgstr "Extensão duplicada: A extensão já está em uso" + +#: page.customdests.php:54 +#: page.customdests.php:80 +#: page.customdests.php:92 +msgid "Add Custom Destination" +msgstr "Adicionar um destino personalizado" + +#: page.customdests.php:78 +#: page.customextens.php:92 +msgid "Edit: " +msgstr "Editar:" + +#: page.customdests.php:83 +msgid "Custom Destinations allows you to register your custom destinations that point to custom dialplans and will also 'publish' these destinations as available destinations to other modules. This is an advanced feature and should only be used by knowledgeable users. If you are getting warnings or errors in the notification panel about CUSTOM destinations that are correct, you should include them here. The 'Unknown Destinations' chooser will allow you to choose and insert any such destinations that the registry is not aware of into the Custom Destination field." +msgstr "Permite a você registrar destinos personalizados que apontam para planos de discagem personalizados e também 'publicar' estes destinos como destinos disponíveis para outros módulos. Este é um recurso avançado e deveria ser usado apenas por usuários com bom conhecimento. Se você está recebendo avisos ou erros no painel de notificação sobre os destinos PERSONALIZADOS que estão corretos, você deveria incluí-los lá. A lista 'Destinos desconhecidos' irá permitir que você escolha e insira quaisquer destinos que o registro não está a par no campo Destino Personalizado. " + +#: page.customdests.php:92 +msgid "Edit Custom Destination" +msgstr "Editar destino personalizado" + +#: page.customdests.php:94 +msgid "Custom Destination" +msgstr "Destino personalizado" + +#: page.customdests.php:97 +msgid "This is the Custom Destination to be published. It should be formatted exactly as you would put it in a goto statement, with context, exten, priority all included. An example might look like:
mycustom-app,s,1" +msgstr "Este é um destino personalizado a ser publicado. Ele deve ser formatado exatamente como você colocaria em uma instrução goto, com contexto, extensão e prioridade incluídas. Algo como:
mycustom-app,s,1" + +#: page.customdests.php:99 +msgid "READONLY WARNING: Because this destination is being used by other module objects it can not be edited. You must remove those dependencies in order to edit this destination, or create a new destination to use" +msgstr "AVISO SOMENTE LEITURA: Este destino está sendo usado por outro módulo e não pode ser editado. Você deve remover estas dependências de forma a editar o destino ou criar um novo destino a ser usado" + +#: page.customdests.php:121 +msgid "Destination Quick Pick" +msgstr "Seleção rápida do Destino" + +#: page.customdests.php:123 +msgid "Choose un-identified destinations on your system to add to the Custom Destination Registry. This will insert the chosen entry into the Custom Destination box above." +msgstr "Escolha destinos não identificados no seu sistema para adicionar ao registro de destinos personalizados. ISto irá inserir a entrada escolhida dentro da caixa de destino personalizada acima. " + +#: page.customdests.php:129 +msgid "(pick destination)" +msgstr "(selecionar destino)" + +#: page.customdests.php:144 +#: page.customextens.php:118 +msgid "Description" +msgstr "Descrição " + +#: page.customdests.php:144 +msgid "Brief Description that will be published to modules when showing destinations. Example: My Weather App" +msgstr "Breve descrição que será publicada para os módulos quando mostrando os destinos. Exemplo: Minha Previsão do Tempo" + +#: page.customdests.php:148 +#: page.customextens.php:122 +msgid "Notes" +msgstr "Notas" + +#: page.customdests.php:148 +msgid "More detailed notes about this destination to help document it. This field is not used elsewhere." +msgstr "Notas mais detalhadas sobre o destino para ajudar a documentá-la. Este campo não é usado em nenhum outro lugar." + +#: page.customdests.php:153 +#: page.customextens.php:127 +msgid "Submit Changes" +msgstr "Submeter Mudanças" + +#: page.customdests.php:154 +#: page.customextens.php:128 +msgid "Delete" +msgstr "Remover" + +#: page.customextens.php:70 +#: page.customextens.php:94 +#: page.customextens.php:111 +msgid "Add Custom Extension" +msgstr "Adicionar extensão personalizada" + +#: page.customextens.php:97 +msgid "Custom Extensions provides you with a facility to register any custom extensions or feature codes that you have created in a custom file and FreePBX doesn't otherwise know about them. This allows the Extension Registry to be aware of your own extensions so that it can detect conflicts or report back information about your custom extensions to other modules that may make use of the information. You should not put extensions that you create in the Misc Apps Module as those are not custom." +msgstr "Extensões personalizadas permitem a você registar quaisquer extensões personalizadas ou códigos de recurso que você tenha criado no arquivo custom e o freePBX não saiba a respeito deles. Isto permite que o registro da extensão esteja a par das suas próprias extensões, de forma que ele possa detectar conflitos e relatar de volta as informações sobre as extensões personalizadas para outros módulos que podem fazer uso da informação. Você não deveria colocar as extensões que você criou no módulo Misc Apps como não customizada. " + +#: page.customextens.php:101 +msgid "Conflicting Extensions" +msgstr "Extensões conflitantes" + +#: page.customextens.php:111 +msgid "Edit Custom Extension" +msgstr "Editar extensão personalizada" + +#: page.customextens.php:113 +msgid "Custom Extension" +msgstr "Extensão personalizada" + +#: page.customextens.php:113 +msgid "This is the Extension or Feature Code you are using in your dialplan that you want the FreePBX Extension Registry to be aware of." +msgstr "Esta é a extensão ou código de recurso que você está usando no seu plano de discage, e que você quer que o registro de extensões do freePBX esteja a par. " + +#: page.customextens.php:118 +msgid "Brief description that will be published in the Extension Registry about this extension" +msgstr "Breve descrição que será publicada no registro de extensões sobre esta extensão" + +#: page.customextens.php:122 +msgid "More detailed notes about this extension to help document it. This field is not used elsewhere." +msgstr "Notas mais detalhadas sobre a extensão para ajudar a documentá-la. Este campo não é usado em mais nenhum lugar." + +#: module.xml +msgid "Custom Destinations" +msgstr "Destinos personalizados" + +#: module.xml +msgid "Custom Extensions" +msgstr "Extensões personalizadas" + Index: /modules/branches/2.10/customappsreg/i18n/it_IT/LC_MESSAGES/customappsreg.po =================================================================== --- /modules/branches/2.10/customappsreg/i18n/it_IT/LC_MESSAGES/customappsreg.po (revision 7250) +++ /modules/branches/2.10/customappsreg/i18n/it_IT/LC_MESSAGES/customappsreg.po (revision 7250) @@ -0,0 +1,166 @@ +msgid "" +msgstr "" +"Project-Id-Version: 2.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-10-05 22:57+0200\n" +"PO-Revision-Date: \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" +"X-Poedit-Language: Italian\n" +"X-Poedit-Country: ITALY\n" + +#: functions.inc.php:29 +#, php-format +msgid "Custom Destination: %s" +msgstr "Destinazione Personalizzata: %s" + +#: functions.inc.php:52 +msgid "Custom Extension: " +msgstr "Interno Personalizzato:" + +#: functions.inc.php:103 +#: page.customdests.php:190 +msgid "Invalid Destination, must not be blank, must be formatted as: context,exten,pri" +msgstr "Destinazione non valida, non può essere lasciata vuota, deve essere formattata come: contesto,exten,pri" + +#: functions.inc.php:107 +#: functions.inc.php:140 +#: page.customdests.php:191 +#: page.customextens.php:140 +msgid "Invalid description specified, must not be blank" +msgstr "Descrizione specificata non valida, non può essere lasciata vuota" + +#: functions.inc.php:112 +msgid "DUPLICATE Destination: This destination is already in use" +msgstr "Destinazione DUPLICATA: Questa destinazione Ú già in uso" + +#: functions.inc.php:123 +#: functions.inc.php:186 +msgid "DUPLICATE Destination: This destination is in use or potentially used by another module" +msgstr "Destinazione DUPLICATA: Questa destinazione Ú già in uso o potenzialmente utilizzata da un altro modulo" + +#: functions.inc.php:136 +#: page.customextens.php:139 +msgid "Invalid Extension, must not be blank" +msgstr "Interno non valido, non può essere lasciato vuoto" + +#: functions.inc.php:151 +msgid "DUPLICATE Extension: This extension already in use" +msgstr "Interno DUPLICATO: Questo interno Ú già in uso" + +#: page.customdests.php:54 +#: page.customdests.php:80 +#: page.customdests.php:92 +msgid "Add Custom Destination" +msgstr "Aggiungi Destinazione Personalizzata" + +#: page.customdests.php:78 +#: page.customextens.php:92 +msgid "Edit: " +msgstr "Modifica:" + +#: page.customdests.php:83 +msgid "Custom Destinations allows you to register your custom destinations that point to custom dialplans and will also 'publish' these destinations as available destinations to other modules. This is an advanced feature and should only be used by knowledgeable users. If you are getting warnings or errors in the notification panel about CUSTOM destinations that are correct, you should include them here. The 'Unknown Destinations' chooser will allow you to choose and insert any such destinations that the registry is not aware of into the Custom Destination field." +msgstr "Il modulo Destinazioni Personalizzate permette di registrare e aggiungere destinazioni che puntano ad un piano di chiamata personalizzato e pubblica queste destinazioni come disponibili in altri moduli. Questa Ú una funzione avanzata e andrebbe usata solo da utenti che conosco bene i comandi. Se ricevi errori o notifiche a proposito di destinazioni PERSONALIZZATE che invece sono corrette, dovresti includerle qui. Il selettore 'Destinazioni Sconosciute' permetterà di scegliere ed inserire qualsiasi destinazione che il registro non Ú a conoscenza nel campo Destinazioni Personalizzate." + +#: page.customdests.php:92 +msgid "Edit Custom Destination" +msgstr "Modifica Destinazione Personalizzata" + +#: page.customdests.php:94 +msgid "Custom Destination" +msgstr "Destinazione Personalizzata" + +#: page.customdests.php:97 +msgid "This is the Custom Destination to be published. It should be formatted exactly as you would put it in a goto statement, with context, exten, priority all included. An example might look like:
mycustom-app,s,1" +msgstr "Questa Ú la Destinazione Personalizzata che sarà pubblicata. Deve essere formattata esattamente come se fosse inserita dopo il comando goto, con contesto,exten,priorità tutto incluso. Esempio:
app-prova,s,1" + +#: page.customdests.php:99 +msgid "READONLY WARNING: Because this destination is being used by other module objects it can not be edited. You must remove those dependencies in order to edit this destination, or create a new destination to use" +msgstr "ATTENZIONE, SOLA LETTURA: siccome questa destinazione Ú utilizzata da altri moduli non può essere modificata. Devi prima eliminare queste dipendenze prima di rimuovere questa destinazione, o creare una nuova destinazione da utilizzare" + +#: page.customdests.php:121 +msgid "Destination Quick Pick" +msgstr "Selezione Rapida Destinazione" + +#: page.customdests.php:123 +msgid "Choose un-identified destinations on your system to add to the Custom Destination Registry. This will insert the chosen entry into the Custom Destination box above." +msgstr "Scegliere una destinazione" + +#: page.customdests.php:129 +msgid "(pick destination)" +msgstr "(seleziona destinazione)" + +#: page.customdests.php:144 +#: page.customextens.php:118 +msgid "Description" +msgstr "Descrizione" + +#: page.customdests.php:144 +msgid "Brief Description that will be published to modules when showing destinations. Example: My Weather App" +msgstr "Breve Descrizione che sarà pubblicata nei moduli quando si visualizzeranno le destinazioni. Esempio: Mia Applicazione Meteo" + +#: page.customdests.php:148 +#: page.customextens.php:122 +msgid "Notes" +msgstr "Note" + +#: page.customdests.php:148 +msgid "More detailed notes about this destination to help document it. This field is not used elsewhere." +msgstr "Ulteriori note descrittive a proposito di questa destinazione per aiutare a documentarla. Questo campo non Ú utilizzato da nessun'altra parte." + +#: page.customdests.php:153 +#: page.customextens.php:127 +msgid "Submit Changes" +msgstr "Conferma Cambiamenti" + +#: page.customdests.php:154 +#: page.customextens.php:128 +msgid "Delete" +msgstr "Elimina" + +#: page.customextens.php:70 +#: page.customextens.php:94 +#: page.customextens.php:111 +msgid "Add Custom Extension" +msgstr "Aggiungi Interno Personalizzato" + +#: page.customextens.php:97 +msgid "Custom Extensions provides you with a facility to register any custom extensions or feature codes that you have created in a custom file and FreePBX doesn't otherwise know about them. This allows the Extension Registry to be aware of your own extensions so that it can detect conflicts or report back information about your custom extensions to other modules that may make use of the information. You should not put extensions that you create in the Misc Apps Module as those are not custom." +msgstr "Il modulo Interni Personalizzati permette facilmente di registrare un interno (extension) personalizzato o codice di servizio precedentemente creato in un file custom. Questo permette a FreePBX di conoscerne l'esistenza. Il Registro Interni mette da parte questa numerazione in modo da rilevare eventuali conflitti e riportarli in caso di errori negli altri moduli. Qui non si dovrebbero inserire interni che sono stati creati con il modulo Applicazioni Varie perchÚ questi non sono interni (extension) personalizzati." + +#: page.customextens.php:101 +msgid "Conflicting Extensions" +msgstr "Interni in conflitto" + +#: page.customextens.php:111 +msgid "Edit Custom Extension" +msgstr "Modifica Interno Personalizzato" + +#: page.customextens.php:113 +msgid "Custom Extension" +msgstr "Interno Personalizzato" + +#: page.customextens.php:113 +msgid "This is the Extension or Feature Code you are using in your dialplan that you want the FreePBX Extension Registry to be aware of." +msgstr "Questo Ú l'Interno o il Codice Servizio che stai utilizzando nel tuo piano di chiamata e che vuoi che il Registro Interni di FreePBX sia a consoscenza." + +#: page.customextens.php:118 +msgid "Brief description that will be published in the Extension Registry about this extension" +msgstr "Breve descrizione che sarà pubblicata nel Registro Interni a proposito di questo interno" + +#: page.customextens.php:122 +msgid "More detailed notes about this extension to help document it. This field is not used elsewhere." +msgstr "Ulteriore nota descrittiva a proposito di questo interno per aiutare a documentarlo. Questo campo non Ú utilizzato da nessun'altra parte." + +#: module.xml +msgid "Custom Destinations" +msgstr "Destinazioni Personalizzate" + +#: module.xml +msgid "Custom Extensions" +msgstr "Interni Personalizzati" + Index: /modules/branches/2.10/customappsreg/i18n/ru_RU/LC_MESSAGES/customappsreg.po =================================================================== --- /modules/branches/2.10/customappsreg/i18n/ru_RU/LC_MESSAGES/customappsreg.po (revision 6975) +++ /modules/branches/2.10/customappsreg/i18n/ru_RU/LC_MESSAGES/customappsreg.po (revision 6975) @@ -0,0 +1,195 @@ +# Russian freePBX ver. translation +# Copyright (c) 2006-2008 PostMet Corporation +# This file is distributed under the same license as the freePBX package. +# Alexander Kozyrev , Sergey Nikolayev , 2006-2008. +# +# žáßÞÛì×ÞÒÐâì iconv amp.new -f UTF-8 -t ISO-8859-5 -o amp.po +# fuzzy +msgid "" +msgstr "" +"Project-Id-Version: 1.3\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-04-19 21:45+0100\n" +"PO-Revision-Date: 2008-01-16 16:38+0100\n" +"Last-Translator: Alexander Kozyrev \n" +"Language-Team: Russian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-5\n" +"Content-Transfer-Encoding: 8bit\n" + +#: functions.inc.php:52 +msgid "Custom Extension: " +msgstr "ŸáÞÑëÙ ÝÞÜÕà:" + +#: functions.inc.php:103 page.customdests.php:190 +msgid "" +"Invalid Destination, must not be blank, must be formatted as: context,exten," +"pri" +msgstr "œÕÒÕàÝÞÕ ÝÐ×ÝÐçÕÝØÕ, ÝÕ ÔÞÛÖÝÞ Ñëâì ßãáâëÜ, Ø ÔÞÛÖÝÞ Ñëâì Ò äÞàÜÐâÕ: ÚÞÝâÕÚáâ, íÚáâÕÝÑ ßàØÞàØâÕâ." + +#: functions.inc.php:107 functions.inc.php:140 page.customdests.php:191 +#: page.customextens.php:140 +msgid "Invalid description specified, must not be blank" +msgstr "œÕÒÕàÝÞÕ ÞߨáÐÝØÕ. œÕ ÔÞÛÖÝÞ Ñëâì ßãáâëÜ." + +#: functions.inc.php:112 +msgid "DUPLICATE Destination: This destination is already in use" +msgstr "ŽÃ±»žº°Â Ò ÝÐ×ÝÐçÕÝØØ: íâÞ ÝÐ×ÝÐçÕÝØÕ ãÖÕ ØáßÞÛì×ãÕâáï" + +#: functions.inc.php:123 functions.inc.php:186 +msgid "" +"DUPLICATE Destination: This destination is in use or potentially used by " +"another module" +msgstr "ŽÃ±»žº°Â Ò ÝÐ×ÝÐçÕÝØØ: íâÞ ÝÐ×ÝÐçÕÝØÕ ãÖÕ ØáßÞÛì×ãÕâáï ØÛØ ßÞâÕÝæØÐÛìÝÞ ÜÞÖÕâ Ñëâì ØáßÞÛì×ÞÒÐÝÞ Ò ÔàãÓÞÜ ÜÞÔãÛÕ" + +#: functions.inc.php:136 page.customextens.php:139 +msgid "Invalid Extension, must not be blank" +msgstr "œÕÒÕàÝëÙ ÒÝãâàÕÝÝØÙ ÝÞÜÕà, ÝÕ ÜÞÖÕâ Ñëâì ßãáâëÜ" + +#: functions.inc.php:151 +msgid "DUPLICATE Extension: This extension already in use" +msgstr "ŽÃ±»žº°Â ÒÝãâàÕÝÝÕÓÞ ÝÞÜÕàÐ: íâÞâ ÝÞÜÕà ãÖÕ ØáßÞÛì×ãÕâáï" + +#: page.customdests.php:76 page.customextens.php:92 +msgid "Edit: " +msgstr "ÀÕÔÐÚâØàÞÒÐâì:" + +#: page.customdests.php:78 page.customdests.php:90 +msgid "Add Custom Destination" +msgstr "ŽÞÑÐÒØâì áßÕæØÐÛìÝÞÕ ÝÐ×ÝÐçÕÝØÕ" + +#: page.customdests.php:81 +msgid "" +"Custom Destinations allows you to register your custom destinations that " +"point to custom dialplans and will also 'publish' these destinations as " +"available destinations to other modules. This is an advanced feature and " +"should only be used by knowledgeable users. If you are getting warnings or " +"errors in the notification panel about CUSTOM destinations that are correct, " +"you should include them here. The 'Unknown Destinations' chooser will allow " +"you to choose and insert any such destinations that the registry is not " +"aware of into the Custom Destination field." + +msgstr "" +"ÁßÕæØÐÛìÝÞÕ ÝÐ×ÝÐçÕÝØÕ ÔÐñâ ÒÞ×ÜÞÖÝÞáâì àÕÓØáâàØàÞÒÐâì áßÕæØÐÛìÝëÕ áæÕÝÐàØØ, ÚÞâÞàëÕ " +"ÒáâàÐØÒÐîâáï Ò ÒÐè ÔØÐÛ ßÛÐÝ Ø áâÐÝÞÒïâáï ÔÞáâãßÝëÜØ ÔÛï ßÕàÕÝÐßàÐÒÛÕÝØï ÝÐ ÝØå " +"Ø× ÔàãÓØå ÜÞÔãÛÕÙ. ÍâÞ âÐÚÐï ÞçÕÝì ßàÞÔÒØÝãâÐï ÞßæØï, Ø ÜÞÖÕâ ØáßÞÛì×ÞÒÐâìáï âÞÛìÚÞ " +"ÞßëâÝëÜØ ßÞÛì×ÞÒÐâÕÛïÜØ, ÚÞâÞàëÕ ßÞÝØÜÐîâ çâÞ ÞÝØ åÞâïâ áÔÕÛÐâì. µáÛØ ÒØÔÝë " +"ßàÕÔãßàÕÖÔÕÝØï ØÛØ áÞÞÑéÕÝØï Ò ßÐÝÕÛØ áÞáâÞïÝØï áØáâÕÜë ßÞ ßÞÒÞÔã CUSTOM " +"ÝÐßàÐÒÛÕÝØÙ, âÞ Òáñ Ò ßÞàïÔÚÕ, Òë ÔÞÛÖÝë ØÜØ ßàÞáâÞ ßÞÛì×ÞÒÐâìáï. ²ëÑÞà âÕàÜØÝÐæØØ " +"×ÒÞÝÚÐ Ò áæÕÝÐàØïå ÒåÞÔïéÕÙ ÜÐàèàãâØ×ÐæØØ ÑãÔÕâ ÒëÓÛïÔÕâì ÚÐÚ 'Custom Applications' " +"ÓÔÕ áÞ×ÔÐÝÝëÙ ÚÞÝâÕÚáâ ÜÞÖÝÞ ÒëÑàÐâì Ò 'ÃáâÐÝÞÒØâì ÝÐßàÐÒÛÕÝØÕ'" + +#: page.customdests.php:90 +msgid "Edit Custom Destination" +msgstr "ÀÕÔÐÚâØàÞÒÐâì áßÕæØÐÛìÝÞÕ ÝÐ×ÝÐçÕÝØÕ" + +#: page.customdests.php:92 +msgid "Custom Destination" +msgstr "ÁßÕæÝÐ×ÝÐçÕÝØÕ" + +#: page.customdests.php:92 +msgid "" +"This is the Custom Destination to be published. It should be formatted " +"exactly as you would put it in a goto statement, with context, exten, " +"priority all included. An example might look like:
mycustom-app,s,1" +msgstr "" +"ÍâÞ ÞÑêïÒÛÕÝØÕ ØáßÞÛì×ÞÒÐÝØï ÁßÕæØÐÛìÝÞÓÞ ÝÐ×ÝÐçÕÝØï. ¿àØ áÞ×ÔÐÝØØ ÝÕÞÑåÞÔØÜÞ ãÚÐ×ëÒÐâì " +"ÚÞÝâÕÚáâ, ÒÝãâàÕÝÝØÙ ÝÞÜÕà Ø ßàØÞàØâÕâ. œÐßàØÜÕà:
mycustom-app,s,1" + +#: page.customdests.php:98 +msgid "Destination Quick Pick" +msgstr "œÐ×ÝÐçÕÝØÕ ±ëâàëÙ ¿ÕàÕåÒÐâ" + +#: page.customdests.php:100 +msgid "" +"Choose un-identified destinations on your system to add to the Custom " +"Destinaion Registry. This will insert the chosen entry into the Custom " +"Destination box above." +msgstr "" +"²ëÑÕàØâÕ ÝÕØÔÕÝâØäØæØàÞÒÐÝÝëÕ ÝÐ×ÝÐçÕÝØï ÒÐèÕÙ áØáâÕÜë çâÞÑë ÔÞÑÐÒØâì Ò àÕÓØáâà " +"ÁßÕæÝÐ×ÝÐçÕÝØÙ. ¿àØ íâÞÜ ÒáÕ ãÚÐ×ÐÝëÕ ×ÐßØáØ ßÞïÒïâáï Ò ÞÚÝÕ ÁßÕæÝÐ×ÝÐçÕÝØï" + +#: page.customdests.php:106 +msgid "(pick destination)" +msgstr "(ÒëÑàÐâì ÝÐ×ÝÐçÕÝØÕ)" + +#: page.customdests.php:118 page.customextens.php:118 +msgid "Description" +msgstr "ŸßØáÐÝØÕ" + +#: page.customdests.php:118 +msgid "" +"Brief Description that will be published to modules when showing " +"destinations. Example: My Weather App" +msgstr "" +"ºÞàÞâÚÞÕ ÞߨáÐÝØÕ, ÚÞâÞàÞÕ ßÞïÒØâáï ßàØ ÒëÑÞàÕ íâÞÓÞ ÝÐ×ÝÐçÕÝØï. œÐßàØÜÕà: " +"ÁÛãÖÑÐ ŒÕÖÓÐÛÐÚâØçÕáÚØå ŽÞáâÐÒÞÚ" + +#: page.customdests.php:122 page.customextens.php:122 +msgid "Notes" +msgstr "¿àØÜÕçÐÝØï" + +#: page.customdests.php:122 +msgid "" +"More detailed notes about this destination to help document it. This field " +"is not used elsewhere." +msgstr "" +"±ÞÛÕÕ ÔÕâÐÛìÝëÕ ×ÐÜÕçÐÝØï, ÚÞâÞàëÕ ßÞÜÞÓãâ ÔÞÚãÜÕÝâØàÞÒÐâì íâØ ÝÐ×ÝÐçÕÝØï, ÚÞÓÔÐ " +"Øå ÜÝÞÓÞ. ÍâÞ ßÞÛÕ ÑÞÛìèÕ ÝØÓÔÕ ÝÕ ØáßÞÛì×ãÕâáï." + +#: page.customdests.php:128 page.customextens.php:128 +msgid "Delete" +msgstr "ÃÔÐÛØâì" + +#: page.customextens.php:94 page.customextens.php:111 +msgid "Add Custom Extension" +msgstr "ŽÞÑÐÒØâì ŸáÞÑëÙ ÝÞÜÕà" + +#: page.customdests.php:97 +msgid "This is the Custom Destination to be published. It should be formatted exactly as you would putit in a goto statement, with context, exten, priority all included. An example might look like:
mycustom-app,s,1" +msgstr "±ãÔÕâ áÞ×ÔÐÝÞ ÞáÞÑÞÕ ÝÐ×ÝÐçÕÝØÕ. ŸÝÞ ÔÞÛÖÝÞ ØÜÕâì äÞàÜÐâ ßÕàÕÝÐßàÐÒÛÕÝØï GoTo á ÞÑï×ÐâÕÛìÝëÜ ãÚÐ×ÐÝØÕÜ ÚÞÝâÕÚáâÐ, íÚáâÝÕÝèÝ, ßàØÞàØâÕâÐ. œÐßàØÜÕà:
mycustom-app,s,1" + +#: page.customextens.php:97 +msgid "Custom Extensions provides you with a facility to register any custom extensions or feature codes that you have created in a custom file and FreePBX doesn't otherwise know about them. This allows the Extension Registry to be aware of your own extensions so that it can detect conflicts or report back information about your custom extensions to other modules that may make use of the information. You should not put extensions that you create in the Misc Apps Module as those are not custom." +msgstr "" +"ŸáÞÑëÕ ÝÞÜÕàÐ ßÞÜÞÓÐîâ àÕÓØáâàØàÞÒÐâì ÚÐÚØÕ-ÛØÑÞ áßÕæØÐÛìÝëÕ ÝÞÜÕàÐ ÔÞÝÐÑÞàÐ, " +"ÚÞâÞàëÕ áÞ×ÔÐîâáï Ò custom äÐÙÛÐå, Ð FreePBX ÝÕ ØÜÕÕâ ßÞÝïâØï Þ ÝØå. ÍâÞ ÔÐñâ " +"ÒÞ×ÜÞÖÝÞáâì áÞÔÕàÖÐâì àÕÓØáâà ÒÝãâàÕÝÝØå ÝÞÜÕàÞÒ âÐÚØÜ ÞÑàÐ×ÞÜ, çâÞÑë ßàÕÔÞâÒàÐéÐâì " +"ÚÞÝäÛØÚâë á ÞÔØÝÐÚÞÒëÜØ ÝÞÜÕàÐÜØ (ØÛØ ÚÞÔÐÜØ ÔÞÝÐÑÞàÐ) Ø áÞÞÑéÐâì Þ ÝØå Ò ÔàãÓØÕ " +"ÜÞÔãÛØ, ÚÞâÞàëÕ ÜÞÓãâ ØáßÞÛì×ÞÒÐâì íâã ØÝäÞàÜÐæØî. ²ë ÝÕ ÔÞÛÖÝë áÞ×ÔÐÒÐâì íâØ " +"ÞáÞÑëÕ ÝÞÜÕàÐ Ò ÜÞÔãÛÕ Misc Apps âÐÚ ÚÐÚ ÞÝØ ÑãÔãâ ÔàãÓØÜØ." + +#: page.customextens.php:101 +msgid "Conflicting Extensions" +msgstr "ºÞÝäÛØÚâãîéØÕ ÝÞÜÕàÐ" + +#: page.customextens.php:111 +msgid "Edit Custom Extension" +msgstr "ÀÕÔÐÚâØàÞÒÐâì ŸáÞÑëÙ ÝÞÜÕà" + +#: page.customextens.php:113 +msgid "Custom Extension" +msgstr "ŸáÞÑëÙ œÞÜÕà" + +#: page.customextens.php:113 +msgid "" +"This is the Extension or Feature Code you are using in your dialplan that " +"you want the FreePBX Extension Registry to be aware of." +msgstr "" +"ÍâÞ ŸáÞÑëÙ ÝÞÜÕà ØÛØ ÚÞÔ ÔÞÝÐÑÞàÐ, ÚÞâÞàëÙ ÑãÔÕâ ØáßÞÛì×ÞÒÐâìáï Ò ÒÐèÕÜ ÔØÐÛ ßÛÐÝÕ, " +"ÔÛï ãçÕâÐ ÕÓÞ Ò ÞÑéÕÜ ÀÕÓØáâàÕ ÝÞÜÕàÞÒ FreePBX." + +#: page.customextens.php:118 +msgid "" +"Brief description that will be published in the Extension Registry about " +"this extension" +msgstr "" +"ºÞàÞâÚÞÕ ÞߨáÐÝØÕ íâÞÓÞ ÝÞÜÕàÐ, ÚÞâÞàÞÕ ÑãÔÕâ ØáßÞÛì×ÞÒÐâìáï Ò ÀÕÓØáâàÕ ÝÞÜÕàÞÒ." + +#: page.customextens.php:122 +msgid "" +"More detailed notes about this extension to help document it. This field is " +"not used elsewhere." +msgstr "" +"±ÞÛÕÕ ÔÕâÐÛìÝëÕ ßàØÜÕçÐÝØï ÞÑ íâÞÜ ÝÞÜÕàÕ, ÚÞâÞàÞÕ ßÞÜÞÖÕâ ÔÞÚãÜÕÝâØàÞÒÐâì ×ÐߨáØ, ÚÞÓÔÐ " +"Øå ÜÝÞÓÞ. ÍâÞ ßÞÛÕ ÑÞÛìèÕ ÝØÓÔÕ ÝÕ ØáßÞÛì×ãÕâáï." Index: /modules/branches/2.10/customappsreg/i18n/customappsreg.pot =================================================================== --- /modules/branches/2.10/customappsreg/i18n/customappsreg.pot (revision 11797) +++ /modules/branches/2.10/customappsreg/i18n/customappsreg.pot (revision 11797) @@ -0,0 +1,181 @@ +# This file is part of FreePBX. +# +# FreePBX 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. +# +# FreePBX 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 FreePBX. If not, see . +# +# FreePBX language template for customappsreg +# Copyright (C) 2008, 2009, 2010, 2011 Bandwith.com +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-10 22:46+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Custom Applications" +msgstr "" + +msgid "Advanced Administration" +msgstr "" + +msgid "" +"Registry to add custom extensions and destinations that may be created and " +"used so that the Extensions and Destinations Registry can include these." +msgstr "" + +msgid "Custom Extensions" +msgstr "" + +msgid "Custom Destinations" +msgstr "" + +#, php-format +msgid "Custom Destination: %s" +msgstr "" + +msgid "Custom Extension: " +msgstr "" + +msgid "" +"Invalid Destination, must not be blank, must be formatted as: context,exten," +"pri" +msgstr "" + +msgid "Invalid description specified, must not be blank" +msgstr "" + +msgid "DUPLICATE Destination: This destination is already in use" +msgstr "" + +msgid "" +"DUPLICATE Destination: This destination is in use or potentially used by " +"another module" +msgstr "" + +msgid "Invalid Extension, must not be blank" +msgstr "" + +msgid "DUPLICATE Extension: This extension already in use" +msgstr "" + +msgid "Add Custom Destination" +msgstr "" + +msgid "Edit: " +msgstr "" + +msgid "" +"Custom Destinations allows you to register your custom destinations that " +"point to custom dialplans and will also 'publish' these destinations as " +"available destinations to other modules. This is an advanced feature and " +"should only be used by knowledgeable users. If you are getting warnings or " +"errors in the notification panel about CUSTOM destinations that are correct, " +"you should include them here. The 'Unknown Destinations' chooser will allow " +"you to choose and insert any such destinations that the registry is not " +"aware of into the Custom Destination field." +msgstr "" + +msgid "Edit Custom Destination" +msgstr "" + +msgid "Custom Destination" +msgstr "" + +msgid "" +"This is the Custom Destination to be published. It should be formatted " +"exactly as you would put it in a goto statement, with context, exten, " +"priority all included. An example might look like:
mycustom-app,s,1" +msgstr "" + +msgid "" +"READONLY WARNING: Because this destination is being used by other module " +"objects it can not be edited. You must remove those dependencies in order to " +"edit this destination, or create a new destination to use" +msgstr "" + +msgid "Destination Quick Pick" +msgstr "" + +msgid "" +"Choose un-identified destinations on your system to add to the Custom " +"Destination Registry. This will insert the chosen entry into the Custom " +"Destination box above." +msgstr "" + +msgid "(pick destination)" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "" +"Brief Description that will be published to modules when showing " +"destinations. Example: My Weather App" +msgstr "" + +msgid "Notes" +msgstr "" + +msgid "" +"More detailed notes about this destination to help document it. This field " +"is not used elsewhere." +msgstr "" + +msgid "Submit Changes" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Add Custom Extension" +msgstr "" + +msgid "" +"Custom Extensions provides you with a facility to register any custom " +"extensions or feature codes that you have created in a custom file and " +"FreePBX doesn't otherwise know about them. This allows the Extension " +"Registry to be aware of your own extensions so that it can detect conflicts " +"or report back information about your custom extensions to other modules " +"that may make use of the information. You should not put extensions that you " +"create in the Misc Apps Module as those are not custom." +msgstr "" + +msgid "Conflicting Extensions" +msgstr "" + +msgid "Edit Custom Extension" +msgstr "" + +msgid "Custom Extension" +msgstr "" + +msgid "" +"This is the Extension or Feature Code you are using in your dialplan that " +"you want the FreePBX Extension Registry to be aware of." +msgstr "" + +msgid "" +"Brief description that will be published in the Extension Registry about " +"this extension" +msgstr "" + +msgid "" +"More detailed notes about this extension to help document it. This field is " +"not used elsewhere." +msgstr "" Index: /modules/branches/2.10/customappsreg/i18n/es_ES/LC_MESSAGES/customappsreg.po =================================================================== --- /modules/branches/2.10/customappsreg/i18n/es_ES/LC_MESSAGES/customappsreg.po (revision 7479) +++ /modules/branches/2.10/customappsreg/i18n/es_ES/LC_MESSAGES/customappsreg.po (revision 7479) @@ -0,0 +1,167 @@ +msgid "" +msgstr "" +"Project-Id-Version: FreePBX - customappsreg module spanish translation\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-10-05 22:57+0200\n" +"PO-Revision-Date: 2009-01-21 11:44+0100\n" +"Last-Translator: Juan Asensio Sánchez \n" +"Language-Team: Juan Asensio Sánchez \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Spanish\n" +"X-Poedit-Country: SPAIN\n" +"X-Poedit-SourceCharset: utf-8\n" + +#: functions.inc.php:29 +#, php-format +msgid "Custom Destination: %s" +msgstr "Destino personalizado: %s" + +#: functions.inc.php:52 +msgid "Custom Extension: " +msgstr "Extensión personalizada: %s" + +#: functions.inc.php:103 +#: page.customdests.php:190 +msgid "Invalid Destination, must not be blank, must be formatted as: context,exten,pri" +msgstr "Destino no válido; no debe estar vacía, y debe estar formateada del siguiente modo: contexto,extension,prioridad" + +#: functions.inc.php:107 +#: functions.inc.php:140 +#: page.customdests.php:191 +#: page.customextens.php:140 +msgid "Invalid description specified, must not be blank" +msgstr "Descripción no válida; no debe estar vacía" + +#: functions.inc.php:112 +msgid "DUPLICATE Destination: This destination is already in use" +msgstr "Destino duplicado; esta extensión ya está en uso" + +#: functions.inc.php:123 +#: functions.inc.php:186 +msgid "DUPLICATE Destination: This destination is in use or potentially used by another module" +msgstr "Destino duplicado; este destino está en uso o potencialmente usado por otro módulo" + +#: functions.inc.php:136 +#: page.customextens.php:139 +msgid "Invalid Extension, must not be blank" +msgstr "Extensión no válida; no debe estar vacía" + +#: functions.inc.php:151 +msgid "DUPLICATE Extension: This extension already in use" +msgstr "Extensión duplicada; esta extensión ya está en uso" + +#: page.customdests.php:54 +#: page.customdests.php:80 +#: page.customdests.php:92 +msgid "Add Custom Destination" +msgstr "Añadir destino personalizado" + +#: page.customdests.php:78 +#: page.customextens.php:92 +msgid "Edit: " +msgstr "Editar:" + +#: page.customdests.php:83 +msgid "Custom Destinations allows you to register your custom destinations that point to custom dialplans and will also 'publish' these destinations as available destinations to other modules. This is an advanced feature and should only be used by knowledgeable users. If you are getting warnings or errors in the notification panel about CUSTOM destinations that are correct, you should include them here. The 'Unknown Destinations' chooser will allow you to choose and insert any such destinations that the registry is not aware of into the Custom Destination field." +msgstr "Los destinos personalizados le permiten registrar sus destinos personalizados que apunten a planes de marcación personalizados, y poder \"publicarlos\" como posibles destinos para otros módulos. Ésta es una característica avanzada y sólo debería ser usada por usuarios experimentados. Si está obteniendo avisos o errores en el panel de notificación sobre destinos personalizados que son correctos, debería incluirlos aquí. El selector de \"Destinos desconocidos\" le permitirá seleccionar e insertar esos destinos que el registro o conoce en el campo de Destino personalizado." + +#: page.customdests.php:92 +msgid "Edit Custom Destination" +msgstr "Editar destino personalizado" + +#: page.customdests.php:94 +msgid "Custom Destination" +msgstr "Destino personalizado" + +#: page.customdests.php:97 +msgid "This is the Custom Destination to be published. It should be formatted exactly as you would put it in a goto statement, with context, exten, priority all included. An example might look like:
mycustom-app,s,1" +msgstr "Éste es el Destino personalizado que será publicado. Debería ser formateado exactamente igual que como se pondría en un sentencia \"goto\", con contexto, extensión y prioridad incluidas. Un ejemplo podría ser
\"mycustom-apps,s,1\"." + +#: page.customdests.php:99 +msgid "READONLY WARNING: Because this destination is being used by other module objects it can not be edited. You must remove those dependencies in order to edit this destination, or create a new destination to use" +msgstr "AVISO DE SOLO LECTURA: Ya que el destino está siendo usado por objetos de otro módulo, no puede ser editado. Debe eliminar estas dependencias econ el fin de editar este destino, o crear un nuevo destino" + +#: page.customdests.php:121 +msgid "Destination Quick Pick" +msgstr "Selección rápida de destino" + +#: page.customdests.php:123 +msgid "Choose un-identified destinations on your system to add to the Custom Destination Registry. This will insert the chosen entry into the Custom Destination box above." +msgstr "Seleccione un destino sin identificar en su sistema para añadirlo al registro de Destinos personalizados. Esto insertará la entrada selecciona en la lista de Destinos personalizados anterior." + +#: page.customdests.php:129 +msgid "(pick destination)" +msgstr "(Seleccione un destino)" + +#: page.customdests.php:144 +#: page.customextens.php:118 +msgid "Description" +msgstr "Descripción" + +#: page.customdests.php:144 +msgid "Brief Description that will be published to modules when showing destinations. Example: My Weather App" +msgstr "Breve descripción que será publicada a los módulos cuando se muestren los destinos. Por ejemplo: Aplicación meteorológica" + +#: page.customdests.php:148 +#: page.customextens.php:122 +msgid "Notes" +msgstr "Notas" + +#: page.customdests.php:148 +msgid "More detailed notes about this destination to help document it. This field is not used elsewhere." +msgstr "Notas más detalladas sobre este destino para ayudar a documentarlo. Este campo no se usa en ningún otro sitio." + +#: page.customdests.php:153 +#: page.customextens.php:127 +msgid "Submit Changes" +msgstr "Enviar cambios" + +#: page.customdests.php:154 +#: page.customextens.php:128 +msgid "Delete" +msgstr "Eliminar" + +#: page.customextens.php:70 +#: page.customextens.php:94 +#: page.customextens.php:111 +msgid "Add Custom Extension" +msgstr "Añadir extensión personalizada" + +#: page.customextens.php:97 +msgid "Custom Extensions provides you with a facility to register any custom extensions or feature codes that you have created in a custom file and FreePBX doesn't otherwise know about them. This allows the Extension Registry to be aware of your own extensions so that it can detect conflicts or report back information about your custom extensions to other modules that may make use of the information. You should not put extensions that you create in the Misc Apps Module as those are not custom." +msgstr "Las extensiones personalizadas le facilitan registrar cualquier extensión o código de característica que haya creado en un archivo personalizado, pero FreePBX desconoce de su existencia. Esto permite al Registro de extensiones ser consciente de que existe tal extensión y pueda detectar conflictos o informar de extensiones personalizadas a otros módulos para que puedan hacer uso de esa información. No debería poner aquí extensiones que cree con el módulo de Aplicaciones variasm ya que esas no son personalizadas." + +#: page.customextens.php:101 +msgid "Conflicting Extensions" +msgstr "Extensiones en conflicto" + +#: page.customextens.php:111 +msgid "Edit Custom Extension" +msgstr "Editar extensión personalizada" + +#: page.customextens.php:113 +msgid "Custom Extension" +msgstr "Extensión personalizada" + +#: page.customextens.php:113 +msgid "This is the Extension or Feature Code you are using in your dialplan that you want the FreePBX Extension Registry to be aware of." +msgstr "Esta es la extensión o código de característica que se usará en el plan de marcado que usará el registro de extensiones de FreePBX para poder usarla." + +#: page.customextens.php:118 +msgid "Brief description that will be published in the Extension Registry about this extension" +msgstr "Breve descripción que será publicada en el registro de extensiones acerca de esta extensión" + +#: page.customextens.php:122 +msgid "More detailed notes about this extension to help document it. This field is not used elsewhere." +msgstr "Notas más detalladas sobre esta extensión para ayudar a documentarla. Este campo no se usa en ningún otro sitio." + +#: module.xml +msgid "Custom Destinations" +msgstr "Destinos personalizados" + +#: module.xml +msgid "Custom Extensions" +msgstr "Extensiones personalizadas" + Index: /modules/branches/2.10/customappsreg/i18n/fr_FR/LC_MESSAGES/customappsreg.po =================================================================== --- /modules/branches/2.10/customappsreg/i18n/fr_FR/LC_MESSAGES/customappsreg.po (revision 8135) +++ /modules/branches/2.10/customappsreg/i18n/fr_FR/LC_MESSAGES/customappsreg.po (revision 8135) @@ -0,0 +1,247 @@ +# This file is part of FreePBX. +# +# FreePBX 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. +# +# FreePBX 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 FreePBX. If not, see . +# +# Copyright (C) 2009 Séverine GUTIERREZ, severine@medialsace.fr +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-10-05 22:57+0200\n" +"PO-Revision-Date: 2009-04-15 12:21+0100\n" +"Last-Translator: Séverine GUTIERREZ \n" +"Language-Team: Français \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: functions.inc.php:29 +#, php-format +msgid "Custom Destination: %s" +msgstr "Destination Personnalisée" + +#: functions.inc.php:52 +msgid "Custom Extension: " +msgstr "Extension Personnalisée" + +#: functions.inc.php:103 page.customdests.php:190 +msgid "" +"Invalid Destination, must not be blank, must be formatted as: context,exten," +"pri" +msgstr "" +"Destination invalide, ne doit pas être vide, doit être formatté comme suit : " +"context,exten,pri" + +#: functions.inc.php:107 functions.inc.php:140 page.customdests.php:191 +#: page.customextens.php:140 +msgid "Invalid description specified, must not be blank" +msgstr "Description spécifiée invalide, ne doit pas être vide" + +#: functions.inc.php:112 +msgid "DUPLICATE Destination: This destination is already in use" +msgstr "Destination DUPLIQUEE: Cette destination est déjà utilisée" + +#: functions.inc.php:123 functions.inc.php:186 +msgid "" +"DUPLICATE Destination: This destination is in use or potentially used by " +"another module" +msgstr "" +"Destination DUPLIQUEE: Cette destination est utilisée ou " +"potentiellement utilisée par un autre module" + +#: functions.inc.php:136 page.customextens.php:139 +msgid "Invalid Extension, must not be blank" +msgstr "Extension Invalide, ne doit pas être vide" + +#: functions.inc.php:151 +msgid "DUPLICATE Extension: This extension already in use" +msgstr "Extension DUPLIQUEE: Cette extension est déjà utilisée" + +#: page.customdests.php:54 page.customdests.php:80 page.customdests.php:92 +msgid "Add Custom Destination" +msgstr "Ajouter une Destination Personnalisée" + +#: page.customdests.php:78 page.customextens.php:92 +msgid "Edit: " +msgstr "Editer" + +#: page.customdests.php:83 +msgid "" +"Custom Destinations allows you to register your custom destinations that " +"point to custom dialplans and will also 'publish' these destinations as " +"available destinations to other modules. This is an advanced feature and " +"should only be used by knowledgeable users. If you are getting warnings or " +"errors in the notification panel about CUSTOM destinations that are correct, " +"you should include them here. The 'Unknown Destinations' chooser will allow " +"you to choose and insert any such destinations that the registry is not " +"aware of into the Custom Destination field." +msgstr "" +"Les Destinations Personnalisées vous permettent d'enregistrer vos destinations " +"pointant sur des plans de numérotation personnalisés et 'publieront' également " +"ces destinations en tant que destinations disponibles pour d'autres modules. Il " +"s'agit d'une fonctionnalité avancée qui devrait seulement être utlisée par les " +"utlisateurs experimentés. Si vous recevez des avertissements ou des erreurs dans " +"le panneau de notifications à propos de destinations PERSONNALISEES correctes, " +"vous devriez les inclure ici. Le sélecteur de 'Destinations Iconnues' vous permet " +"de choisir et d'insérer des destinations dont le registre ne connait pas l'existence " +"dans le champ 'Destination Personnalisée'" + +#: page.customdests.php:92 +msgid "Edit Custom Destination" +msgstr "Editer la Destination Personnalisée" + +#: page.customdests.php:94 +msgid "Custom Destination" +msgstr "Destination Personnalisée" + +#: page.customdests.php:97 +msgid "" +"This is the Custom Destination to be published. It should be formatted " +"exactly as you would put it in a goto statement, with context, exten, " +"priority all included. An example might look like:
mycustom-app,s,1" +msgstr "" +"Il s'agit de la Destination Personnalisée à publier. Elle devrait être " +"formatée de la même façon que si vous deviez la placer dans une déclaration " +"goto, avec context, exten, prority inclus. " +"Voici un exemple de ce à quoi cela doit ressembler :
mycustom-app,s,1" + +#: page.customdests.php:99 +msgid "" +"READONLY WARNING: Because this destination is being used by other module " +"objects it can not be edited. You must remove those dependencies in order to " +"edit this destination, or create a new destination to use" +msgstr "" +"Cette destination est actuellement utilisée par des objets d'autres modules " +"et ne peut pas être éditée. Vous devez supprimer ces dépendances pour pouvoir " +"éditer cette destination, ou créer une nouvelle destination à utiliser" + +#: page.customdests.php:121 +msgid "Destination Quick Pick" +msgstr "Sélection Rapide de Destination" + +#: page.customdests.php:123 +msgid "" +"Choose un-identified destinations on your system to add to the Custom " +"Destination Registry. This will insert the chosen entry into the Custom " +"Destination box above." +msgstr "" +"Choisissez des destinations non-identifiées sur votre systÚme pour " +"les ajouter au Registre de Destinations Personnalisées. Cela aura " +"pour effet d'insérer l'entrée sélectionnée dans la boite 'Destinations " +"Personnalisées' ci-dessus." + +#: page.customdests.php:129 +msgid "(pick destination)" +msgstr "(sélectionnez une destiation)" + +#: page.customdests.php:144 page.customextens.php:118 +msgid "Description" +msgstr "Description" + +#: page.customdests.php:144 +msgid "" +"Brief Description that will be published to modules when showing " +"destinations. Example: My Weather App" +msgstr "" +"BrÚve description qui sera publiée aux modules lors de l'affichage " +" des destinations. Exemple : My Weather App" + +#: page.customdests.php:148 page.customextens.php:122 +msgid "Notes" +msgstr "Notes" + +#: page.customdests.php:148 +msgid "" +"More detailed notes about this destination to help document it. This field " +"is not used elsewhere." +msgstr "" +"Notes plus détaillé à propos de cette destination pour aider à la documenter. " +"Ce champ n'est pas utilisé ailleurs." + +#: page.customdests.php:153 page.customextens.php:127 +msgid "Submit Changes" +msgstr "Appliquer les Modifications" + +#: page.customdests.php:154 page.customextens.php:128 +msgid "Delete" +msgstr "Supprimer" + +#: page.customextens.php:70 page.customextens.php:94 page.customextens.php:111 +msgid "Add Custom Extension" +msgstr "Ajouter une Extension Personnalisée" + +#: page.customextens.php:97 +msgid "" +"Custom Extensions provides you with a facility to register any custom " +"extensions or feature codes that you have created in a custom file and " +"FreePBX doesn't otherwise know about them. This allows the Extension " +"Registry to be aware of your own extensions so that it can detect conflicts " +"or report back information about your custom extensions to other modules " +"that may make use of the information. You should not put extensions that you " +"create in the Misc Apps Module as those are not custom." +msgstr "" +"Les Extensions Personnalisées vous permettent d'enregistrer facilement toutes " +"sortes d'extensions personnalisées ou de fonctions que vous avez créé dans un " +"fichier personnalisé et que FreePBX ne pourrait pas prendre en compte autrement. " +"Cela permet au Registre d'Extension de connaître vos propres extensions afin qu'il " +"puisse détecter des conflits ou reporter aux autres modules des informations à propos " +"de vos extensions personnalisées que ces modules pourraient utiliser. Vous ne devriez " +"pas mettre d'extensions que vous avez créé dans le Module Misc Apps car elles ne sont " +"pas personnalisées." + +#: page.customextens.php:101 +msgid "Conflicting Extensions" +msgstr "Extensions Conflictuelles" + +#: page.customextens.php:111 +msgid "Edit Custom Extension" +msgstr "Editer une Extension Personnalisée" + +#: page.customextens.php:113 +msgid "Custom Extension" +msgstr "Extension Personnalisée" + +#: page.customextens.php:113 +msgid "" +"This is the Extension or Feature Code you are using in your dialplan that " +"you want the FreePBX Extension Registry to be aware of." +msgstr "" +"Il s'agit de l'Extension ou Fonction que vous utilisez dans votre plan de numérotation " +"et dont vous voulez informer le Registre d'Extension." + +#: page.customextens.php:118 +msgid "" +"Brief description that will be published in the Extension Registry about " +"this extension" +msgstr "" +"BrÚve description qui sera publiée dans le Registre d'Extension à propos " +"de cette extension" + +#: page.customextens.php:122 +msgid "" +"More detailed notes about this extension to help document it. This field is " +"not used elsewhere." +msgstr "" +"Notes plus détaillées à propos de cette extension pour aider à la documenter. " +"Ce champ ne sera pas utilisé ailleurs." + +#: module.xml +msgid "Custom Destinations" +msgstr "Destinations Personnalisées" + +#: module.xml +msgid "Custom Extensions" +msgstr "Extensions Personnalisées" Index: /modules/branches/2.10/customappsreg/uninstall.php =================================================================== --- /modules/branches/2.10/customappsreg/uninstall.php (revision 5324) +++ /modules/branches/2.10/customappsreg/uninstall.php (revision 5324) @@ -0,0 +1,13 @@ +\n"; + +echo "dropping table custom_extensions.."; +sql("DROP TABLE IF EXISTS `custom_extensions`"); +echo "done
\n"; + +?> Index: /modules/branches/2.10/customappsreg/page.customextens.php =================================================================== --- /modules/branches/2.10/customappsreg/page.customextens.php (revision 10516) +++ /modules/branches/2.10/customappsreg/page.customextens.php (revision 10516) @@ -0,0 +1,158 @@ + +
+ +
    +'._('Add Custom Extension').''; + +foreach (customappsreg_customextens_list() as $row) { + $descr = $row['description'] != '' ? $row['description'] : '('.$row['custom_exten'].')'; + echo '
  • '.$descr.'
  • '; +} + +?> +
+ +
+ +"._("Edit: ")."$disp_description".""; +} else { + echo "

"._("Add Custom Extension")."

"; +} + +$helptext = _("Custom Extensions provides you with a facility to register any custom extensions or feature codes that you have created in a custom file and FreePBX doesn't otherwise know about them. This allows the Extension Registry to be aware of your own extensions so that it can detect conflicts or report back information about your custom extensions to other modules that may make use of the information. You should not put extensions that you create in the Misc Apps Module as those are not custom."); +echo $helptext; + +if (!empty($conflict_url)) { + echo "
"._("Conflicting Extensions")."
"; + echo implode('
',$conflict_url); +} +?> + +
+ + + + + + + + + + + + + + + + + + + + + + +

:
:
:

" tabindex=""> + '; } ?> +
+
+ + Index: /modules/branches/2.10/customappsreg/module.xml =================================================================== --- /modules/branches/2.10/customappsreg/module.xml (revision 11681) +++ /modules/branches/2.10/customappsreg/module.xml (revision 11681) @@ -0,0 +1,42 @@ + + customappsreg + standard + Custom Applications + 2.9.0.1 + FreePBX + GPLv2+ + tool + Advanced Administration + + Registry to add custom extensions and destinations that may be created and used so that the Extensions and Destinations Registry can include these. + + + Custom Extensions + Custom Destinations + + + *2.9.0.1* #4001 + *2.9.0.0* #4618 XSS patch + *2.8.0.0* published 2.8 version + *2.7.0.0* localizations + *2.6.0.2* localizations + *2.6.0.1* localizations, misc + *2.6.0.0* stoped harmless php warning msg + *2.5.0.4* #3263, localization fixes + *2.5.0.3* localizations fixes + *2.5.0.2* localization, Swedish + *2.5.0.1* #3003 spelling + *2.5.0* #2845 tabindex + *2.4.0.5* #2843 Russian Translation + *2.4.0.4* #2700 block editing of destination field when once other modules are using it + *2.4.0.3* added depends on 2.4.0 + *2.4.0.2* #2558 can't edit/del custom extension + *2.4.0.1* Fix typo in install script, non-existent primary key + *2.4.0* First release of module + + + 2.4.0 + + release/2.9/customappsreg-2.9.0.1.tgz + 337daeb1f9b1c9f2cbcef043f65c044e + Index: /modules/branches/2.10/customappsreg/functions.inc.php =================================================================== --- /modules/branches/2.10/customappsreg/functions.inc.php (revision 11663) +++ /modules/branches/2.10/customappsreg/functions.inc.php (revision 11663) @@ -0,0 +1,233 @@ + $row['custom_dest'], 'description' => $row['description'], 'category' => _("Custom Destinations")); + } + return isset($extens)?$extens:null; + +} + +/** the 'exten' is the same as the destination for this module + */ +function customappsreg_customdests_getdest($exten) { + return array($exten); +} + +/** If this is ours, we return it, otherwise we return false + * We use just use customappsreg and not the display because it + * is a per-module routine + */ +function customappsreg_getdestinfo($dest) { + global $active_modules; + + $thisexten = customappsreg_customdests_get($dest); + if (empty($thisexten)) { + return false; + } else { + $type = isset($active_modules['customappsreg']['type'])?$active_modules['customappsreg']['type']:'tool'; + return array('description' => sprintf(_("Custom Destination: %s"),$thisexten['description']), + 'edit_url' => 'config.php?display=customdests&type='.$type.'&extdisplay='.urlencode($dest), + ); + } +} + +function customappsreg_check_extensions($exten=true) { + global $active_modules; + + $extenlist = array(); + if (is_array($exten) && empty($exten)) { + return $extenlist; + } + $sql = "SELECT custom_exten, description FROM custom_extensions "; + if (is_array($exten)) { + $sql .= "WHERE custom_exten in ('".implode("','",$exten)."')"; + } + $results = sql($sql,"getAll",DB_FETCHMODE_ASSOC); + + $type = isset($active_modules['customappsreg']['type'])?$active_modules['customappsreg']['type']:'tool'; + + foreach ($results as $result) { + $thisexten = $result['custom_exten']; + $extenlist[$thisexten]['description'] = _("Custom Extension: ").$result['description']; + $extenlist[$thisexten]['status'] = 'INUSE'; + $extenlist[$thisexten]['edit_url'] = 'config.php?display=customextens&extdisplay='.urlencode($thisexten); + } + return $extenlist; +} + +function customappsreg_customdests_list() { + global $db; + $sql = "SELECT custom_dest, description, notes FROM custom_destinations ORDER BY description"; + $results = $db->getAll($sql, DB_FETCHMODE_ASSOC); + if(DB::IsError($results)) { + die_freepbx($results->getMessage()."

Error selecting from custom_destinations"); + } + return $results; +} + +function customappsreg_customextens_list() { + global $db; + $sql = "SELECT custom_exten, description, notes FROM custom_extensions ORDER BY custom_exten"; + $results = $db->getAll($sql, DB_FETCHMODE_ASSOC); + if(DB::IsError($results)) { + die_freepbx($results->getMessage()."

Error selecting from custom_extensions"); + } + return $results; +} + +function customappsreg_customdests_get($custom_dest) { + global $db; + $sql = "SELECT custom_dest, description, notes FROM custom_destinations WHERE custom_dest = ".q($custom_dest); + $row = $db->getRow($sql, DB_FETCHMODE_ASSOC); + if(DB::IsError($row)) { + die_freepbx($row->getMessage()."

Error selecting row from custom_destinations"); + } + return $row; +} + +function customappsreg_customextens_get($custom_exten) { + global $db; + $sql = "SELECT custom_exten, description, notes FROM custom_extensions WHERE custom_exten = ".q($custom_exten); + $row = $db->getRow($sql, DB_FETCHMODE_ASSOC); + if(DB::IsError($row)) { + die_freepbx($row->getMessage()."

Error selecting row from custom_extensions"); + } + return $row; +} + +function customappsreg_customdests_add($custom_dest, $description, $notes) { + global $db; + + if (!preg_match("/[^,]+,[^,]+,[^,]+/",$custom_dest)) { + echo ""; + return false; + } + if (trim($description) == '') { + echo ""; + return false; + } + $usage_list = framework_identify_destinations($custom_dest, $module_hash=false); + if (!empty($usage_list[$custom_dest])) { + echo ""; + return false; + } + + $custom_dest = sql_formattext($custom_dest); + $description = sql_formattext($description); + $notes = sql_formattext($notes); + $sql = "INSERT INTO custom_destinations (custom_dest, description, notes) VALUES ($custom_dest, $description, $notes)"; + $results = $db->query($sql); + if (DB::IsError($results)) { + if ($results->getCode() == DB_ERROR_ALREADY_EXISTS) { + echo ""; + return false; + } else { + die_freepbx($results->getMessage()."

".$sql); + } + } + return true; +} + +function customappsreg_customextens_add($custom_exten, $description, $notes) { + global $db; + + if ($custom_exten == '') { + echo ""; + return false; + } + if (trim($description) == '') { + echo ""; + return false; + } + + $custom_exten = sql_formattext($custom_exten); + $description = sql_formattext($description); + $notes = sql_formattext($notes); + $sql = "INSERT INTO custom_extensions (custom_exten, description, notes) VALUES ($custom_exten, $description, $notes)"; + $results = $db->query($sql); + if (DB::IsError($results)) { + if ($results->getCode() == DB_ERROR_ALREADY_EXISTS) { + echo ""; + return false; + } else { + die_freepbx($results->getMessage()."

".$sql); + } + } + return true; +} + +function customappsreg_customdests_delete($custom_dest) { + global $db; + + $sql = "DELETE FROM custom_destinations WHERE custom_dest = ".q($custom_dest); + $result = $db->query($sql); + if(DB::IsError($result)) { + die_freepbx($result->getMessage().$sql); + } +} + +function customappsreg_customextens_delete($custom_exten) { + global $db; + + $sql = "DELETE FROM custom_extensions WHERE custom_exten = ".q($custom_exten); + $result = $db->query($sql); + if(DB::IsError($result)) { + die_freepbx($result->getMessage().$sql); + } +} + +function customappsreg_customdests_edit($old_custom_dest, $custom_dest, $description, $notes) { + global $db; + + if ($old_custom_dest != $custom_dest) { + $usage_list = framework_identify_destinations($custom_dest, $module_hash=false); + if (!empty($usage_list[$custom_dest])) { + echo ""; + return false; + } + } + + $sql = "UPDATE custom_destinations SET ". + "custom_dest = ".sql_formattext($custom_dest).", ". + "description = ".sql_formattext($description).", ". + "notes = ".sql_formattext($notes)." ". + "WHERE custom_dest = ".sql_formattext($old_custom_dest); + $result = $db->query($sql); + if(DB::IsError($result)) { + die_freepbx($result->getMessage().$sql); + } +} + +function customappsreg_customextens_edit($old_custom_exten, $custom_exten, $description, $notes) { + global $db; + + $sql = "UPDATE custom_extensions SET ". + "custom_exten = ".sql_formattext($custom_exten).", ". + "description = ".sql_formattext($description).", ". + "notes = ".sql_formattext($notes)." ". + "WHERE custom_exten = ".sql_formattext($old_custom_exten); + $result = $db->query($sql); + if(DB::IsError($result)) { + die_freepbx($result->getMessage().$sql); + } +} + +function customappsreg_customdests_getunknown() { + + $results = array(); + + $my_probs = framework_list_problem_destinations($my_hash, false); + + if (!empty($my_probs)) { + foreach ($my_probs as $problem) { + if ($problem['status'] == 'CUSTOM') { + $results[] = $problem['dest']; + } + } + } + return array_unique($results); +} + +?> Index: /modules/branches/2.10/customappsreg/install.php =================================================================== --- /modules/branches/2.10/customappsreg/install.php (revision 5469) +++ /modules/branches/2.10/customappsreg/install.php (revision 5469) @@ -0,0 +1,33 @@ +query($sql); +if(DB::IsError($check)) { + die_freepbx("Can not create custom_destinations table\n"); +} + + +$sql = " + CREATE TABLE IF NOT EXISTS `custom_extensions` + ( + `custom_exten` varchar(80) NOT NULL default '', + `description` varchar(40) NOT NULL default '', + `notes` varchar(255) NOT NULL default '', + PRIMARY KEY (`custom_exten`) + )"; + +$check = $db->query($sql); +if(DB::IsError($check)) { + die_freepbx("Can not create custom_extensions table\n"); +} + +?> Index: /modules/branches/2.10/customappsreg/page.customdests.php =================================================================== --- /modules/branches/2.10/customappsreg/page.customdests.php (revision 10516) +++ /modules/branches/2.10/customappsreg/page.customdests.php (revision 10516) @@ -0,0 +1,210 @@ + +
+ +
    +'._('Add Custom Destination').''; + +foreach (customappsreg_customdests_list() as $row) { + $descr = $row['description'] != '' ? $row['description'] : '('.$row['custom_dest'].')'; + echo '
  • '.$descr.'
  • '; +} + +?> +
+ +
+ +"._("Edit: ")."$disp_description".""; +} else { + echo "

"._("Add Custom Destination")."

"; +} + +$helptext = _("Custom Destinations allows you to register your custom destinations that point to custom dialplans and will also 'publish' these destinations as available destinations to other modules. This is an advanced feature and should only be used by knowledgeable users. If you are getting warnings or errors in the notification panel about CUSTOM destinations that are correct, you should include them here. The 'Unknown Destinations' chooser will allow you to choose and insert any such destinations that the registry is not aware of into the Custom Destination field."); +echo $helptext; +?> + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

: + + mycustom-app,s,1"); + if (!empty($usage_list)) { + echo "
"._("READONLY WARNING: Because this destination is being used by other module objects it can not be edited. You must remove those dependencies in order to edit this destination, or create a new destination to use"); + } + ?> +
+ + + + + + + +
:
:

" tabindex=""> + '; } ?> +
+ : +
+
+ + Index: /modules/branches/2.10/sipstation/i18n/sipstation.pot =================================================================== --- /modules/branches/2.10/sipstation/i18n/sipstation.pot (revision 11797) +++ /modules/branches/2.10/sipstation/i18n/sipstation.pot (revision 11797) @@ -0,0 +1,611 @@ +# This file is part of FreePBX. +# +# FreePBX 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. +# +# FreePBX 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 FreePBX. If not, see . +# +# FreePBX language template for sipstation +# Copyright (C) 2008, 2009, 2010, 2011 Bandwith.com +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-10 22:46+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "An error was encountered updating DID destinations" +msgstr "" + +#, php-format +msgid "Successfully updated or created %s inbound routes for your DIDs" +msgstr "" + +#, php-format +msgid "" +"There are %s invalid entries, only updated or created %s inbound routes for " +"your DIDs" +msgstr "" + +#, php-format +msgid "" +"There were %s validation failures on the requested DIDs, no updates performed" +msgstr "" + +msgid "" +"No Free Ports in Asterisk RTP Port Range available for testing, you can try " +"later" +msgstr "" + +msgid "" +"The test timed out which means your firewall is probably configured wrong. " +"If subsequent tests fail, check your port forwarding on the firewall." +msgstr "" + +msgid "An unexpected token was returned, try the test again" +msgstr "" + +msgid "Checking routes for trunks.." +msgstr "" + +msgid "ok" +msgstr "" + +msgid "error detected" +msgstr "" + +#, php-format +msgid "" +"an erroneous entry, %s, was found in extensions table that should not be " +"there" +msgstr "" + +#, php-format +msgid "found %s" +msgstr "" + +msgid "checking for phantoms.." +msgstr "" + +#, php-format +msgid "removed %s phantoms" +msgstr "" + +msgid "none" +msgstr "" + +msgid "KEYS AND TRUNKS REMOVED!" +msgstr "" + +msgid "" +"Your SIPSTATION trunks and key have been removed from your system, make sure " +"to Apply Configuration Changes for this to take effect" +msgstr "" + +#, php-format +msgid "%s Account Access" +msgstr "" + +#, php-format +msgid "" +"This module requires %s trunking service available at %s or click on the " +"image above. Once you have service a key will be available in the portal. " +"Enter it below to use this module. The key is very long, use \"Copy\" & " +"\"Paste\" to copy it here. The key will be stored securely and can be " +"removed at any time to stop access. If the key is compromised, you can " +"contact customer support at voip@freepbx.com and have a new one re-generated." +"

Once active, this module will configure your trunks, routes and " +"DIDs and provide diagnostic tools to configure and monitor your service." +msgstr "" + +msgid "Account Key" +msgstr "" + +msgid "" +"In order to use this service you must have a SIPSTATION FreePBX.com portal " +"account and service (https://store.freepbx.com). From there you can obtain a " +"unique secure key which you should copy and paste into this key field. Once " +"entered, you can access your services from within this module without " +"exposing your account username and password. You can remove the key at any " +"time" +msgstr "" + +msgid "Add Key" +msgstr "" + +#, php-format +msgid "" +"To disable account access, click %s. The auto generated trunk, route and DID " +"configurations will remain active even if the key is removed. To also remove " +"the Trunks, chose the %s options instead" +msgstr "" + +msgid "Remove Key" +msgstr "" + +msgid "Remove Key & Delete Trunks" +msgstr "" + +msgid "System Status" +msgstr "" + +msgid "WARNING" +msgstr "" + +msgid "" +"Your key is no longer valid. Click below to remove the current key. To " +"obtain a new key and use this module, visit the portal at https://store." +"freepbx.com and log into your account." +msgstr "" + +msgid "" +"The server is currently unavailable and we can not process your request. " +"Please check back with us later. We apologize for the inconvenience." +msgstr "" + +msgid "" +"The server is currently not responding. It is either unavailable or access " +"is being blocked. If the server is unavailable, please try again later." +msgstr "" + +#, php-format +msgid "" +"To disable account access, click %s. To update account information, click %" +"s. If port forwarding is configured on your firewall/router, you can test it " +"with the %s button. Port forwarding can provide more reliable service and " +"better quality and we recommend setting it up. The test sends a packet to an " +"unused Asterisk RTP port at your WAN address and results in a PASS if the " +"packet is properly received." +msgstr "" + +msgid "Update Account Info" +msgstr "" + +msgid "Run Firewall Test" +msgstr "" + +msgid "Get Account Info" +msgstr "" + +msgid "Reset Trunks" +msgstr "" + +msgid "Trunk Status" +msgstr "" + +msgid "" +"Provides Gateway Side and Client side realtime status information on your " +"trunks and SIP registrations. Also provides a quick link to the FreePBX " +"trunk configurations page. More details on the tooltips below." +msgstr "" + +msgid "Primary" +msgstr "" + +msgid "Secondary" +msgstr "" + +msgid "Asterisk Reg." +msgstr "" + +msgid "Status of Registration as reported by Asterisk on your local system." +msgstr "" + +#, php-format +msgid "" +"Warning: The Asterisk configuration: %s, is set wrong. Change this to 0 to " +"continually retry registrations until successful. You can use the Asterisk " +"SIP Settings module to set this." +msgstr "" + +msgid "Contact IP" +msgstr "" + +msgid "" +"This is the contact IP as seen on the gateway and provides warnings if " +"errors are detected. These SHOULD be your external IP as seen on the WAN " +"side of your router. If they are not, or if they do not match your Network " +"IP, you should configure your NAT settings in the Asterisk SIP Settings " +"module or in sip_nat.conf if not using that module." +msgstr "" + +msgid "Network IP" +msgstr "" + +msgid "" +"This is the network IP as seen on the gateway and provides warnings if " +"errors are detected. These SHOULD be your external IP as seen on the WAN " +"side of your router. If they are not, or if they do not match your Network " +"IP, you should configure your NAT settings in the Asterisk SIP Settings " +"module or in sip_nat.conf if not using that module." +msgstr "" + +msgid "" +"Warning: The SIP Contact header is not set to your WAN IP. It is set to your " +"internal private IP behind NAT. The gateway will attempt to decipher your " +"proper address but your configuration is incorrect. You should review the " +"NAT settings in the Asterisk SIP Settings module, or sip_nat.conf if not " +"using that module." +msgstr "" + +msgid "" +"ERROR: Your SIP Contact header is a non-private IP address that does not " +"match your network IP. Your system will probably fail typically resulting in " +"one way audio issues. This is usually caused because of an externip setting " +"that is not the same as you WAN IP, or an externhost setting with dynamic " +"DNS information that is not updated. You should check the Asterisk SIP " +"Settings Module or your sip_nat.conf file for the proper settings." +msgstr "" + +msgid "SIP Ping" +msgstr "" + +msgid "" +"Roundtrip signaling delay to SIP server as determined by the Asterisk " +"'qualify' command. This is only signaling delay. The voice connections (RTP " +"media streams) are routed from your system to the closest POP (point of " +"presence) where the call enters the PSTN. This assures the optimal minimum " +"latency but can't be reported because it's dependent on each call." +msgstr "" + +msgid "Not Available" +msgstr "" + +msgid "Codec Priorities" +msgstr "" + +msgid "" +"Codec Priority Asterisk reports for these trunks. This is filtered to only " +"show codecs supported by the gateways. The Codecs can be edited on the trunk " +"page to make changes to priority or available codecs." +msgstr "" + +msgid "Firewall Test" +msgstr "" + +#, php-format +msgid "" +"Status result of Firewall Test. If %s, it means we successfully received the " +"RTP packet that was sent from the remote server. If %s, it means the packet " +"sent from the remote server was blocked by your firewall or lost in the " +"Internet. You can retry the test." +msgstr "" + +msgid "PASS" +msgstr "" + +msgid "FAIL" +msgstr "" + +msgid "Status:" +msgstr "" + +msgid "External IP:" +msgstr "" + +msgid "Account Settings" +msgstr "" + +msgid "SIP Credentials" +msgstr "" + +msgid "" +"The SIP Username and Password (secret) for this account. You can change the " +"password in the SIPSTATION(TM) portal at https://store.freepbx.com" +msgstr "" + +msgid "Username:" +msgstr "" + +msgid "Password:" +msgstr "" + +msgid "Gateways" +msgstr "" + +msgid "" +"Primary and Secondary servers to send SIP traffic to. These are used in the " +"automatic trunk configuration." +msgstr "" + +msgid "Services" +msgstr "" + +msgid "" +"The number of concurrent calls that have been purchased and are configured " +"for your service. Sometimes called trunks and similar to the number of PRI " +"channels or POTS lines in a traditional telco environment.
Your " +"monthly charge includes all costs for DIDs and unlimited trunks.
The " +"Caller ID Number can be configured in the https://store.freepbx.com portal " +"to send either standard 10 Digit NPA (for North American Numbers) or the " +"E164 standard which is +1NXXNXXXXXX for NPA numbers and +NN XXXXXX.. for " +"other countries where +NN is the Country Code." +msgstr "" + +msgid "Channels" +msgstr "" + +msgid "Monthly Cost" +msgstr "" + +msgid "CID Format" +msgstr "" + +msgid "E911 Location" +msgstr "" + +msgid "" +"This the E911 registered address. It is critical the E911 information is " +"accurate and a valid US address, or leave it blank. You are responsible for " +"the accuracy of this information and there may be substantial penalties by " +"your local authorities if it is not accurate when E911 service is used. The " +"settings can be changed from the https://store.freepbx.com account portal." +"
The E911 Caller ID will be transmitted to the E911 operator for ALL " +"calls made to 911 Emergency Services and any CID you set will be ignored, " +"whether it is one of your account DIDs or any other CID. You must have E911 " +"address information entered to use E911 services." +msgstr "" + +msgid "E911 Caller ID" +msgstr "" + +msgid "Address 1" +msgstr "" + +msgid "Address 2" +msgstr "" + +msgid "City" +msgstr "" + +msgid "State" +msgstr "" + +msgid "Zip" +msgstr "" + +msgid "Route and Trunk Configuration" +msgstr "" + +msgid "" +"Check/Uncheck the boxes and submit to add/remove this service as the primary " +"trunks to any listed route. Both gateways should be configured to allow for " +"redundancy. If gateways are already configured in the route, the box will be " +"checked, even if they are not the primary trunks for that route. Click on " +"the route name to link directly to the Outbound Routes page for any route." +"
An Area Code can be set to enable 7 digit dialing for any route " +"configured to pass 7 digits." +msgstr "" + +#, php-format +msgid "" +"Check Primary (%s) and Secondary (%s) Trunk for each route that should be " +"configured with the %s service. The trunks will be inserted into the " +"corresponding routes upon clicking the %s button. You can enable 7 digit " +"dialing with the trunk by entering your area code as well." +msgstr "" + +msgid "Update Route/Trunk Configurations" +msgstr "" + +msgid "Area Code" +msgstr "" + +msgid "" +"Provide your 3 digit area code if you would like your trunks to allow 7 " +"digit dialing and automatically prepend your area code. This requires the " +"route to be configured to send a 7 digit number." +msgstr "" + +#, php-format +msgid "Edit: %s" +msgstr "" + +msgid "DID Configuration" +msgstr "" + +msgid "" +"You can assign each DID to any of your extensions on this screen to generate " +"a route to that extension with default settings. If you check the \"Set CID" +"\" box you will set the extension's outbound CID to this DID also. (Note the " +"Outbound CID on an extension will not be deleted if you subsequently change " +"the assignment of that DID, unless another DID is assigned with the box " +"checked. You will need to go to the extension and modify it otherwise.) If " +"the DID is already assigned to something other than an extension, the " +"destination will be listed and can be changed here. To assign to other " +"destination types, click the DID link to go direct to the Inbound route for " +"that DID or to create a new one." +msgstr "" + +msgid "DID" +msgstr "" + +msgid "Failover #" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Route To" +msgstr "" + +msgid "Set CID" +msgstr "" + +msgid "Update DID Configurations" +msgstr "" + +msgid "" +"A valid key is required to perform this action and the server must be " +"available. Error:" +msgstr "" + +msgid "ERROR" +msgstr "" + +msgid "NO CODECS" +msgstr "" + +msgid "An Error occurred trying to contact the server for account settings." +msgstr "" + +msgid "SERVER ERROR" +msgstr "" + +msgid "FIREWALL TEST WARNING" +msgstr "" + +msgid "An Error occurred trying run firewall test" +msgstr "" + +msgid "FIREWALL TEST ERROR" +msgstr "" + +msgid "An Error occurred trying Submit" +msgstr "" + +msgid "UPDATES" +msgstr "" + +msgid "NOTICE" +msgstr "" + +msgid "" +"You will no longer have access to your account unless you re-enter your key. " +"It will be removed from the system. Your configured trunks will still remain " +"active. Do you want to continue?" +msgstr "" + +msgid "" +"This will delete the trunks from your configuration and you will no longer " +"have access to your account unless you re-enter your key. Do you really want " +"to continue and delete your trunks?" +msgstr "" + +msgid "Add: " +msgstr "" + +msgid "Edit: " +msgstr "" + +msgid "Not Created" +msgstr "" + +msgid "Generated Primary Trunk: " +msgstr "" + +msgid "Generated Secondary Trunk: " +msgstr "" + +msgid "Trunks can be added to routes below." +msgstr "" + +msgid "Account DIDs can be configured below." +msgstr "" + +msgid "" +"There are trunks configured with identical credentials. They must be removed " +"to use this module for Routing and Trunk Configuration." +msgstr "" + +msgid "Trunk: " +msgstr "" + +msgid "" +"Trunk settings have been updated or you have made changes. You may want to " +"press the \"Reset Trunks\" button. The effected trunks are listed and you " +"can click to edit them:" +msgstr "" + +msgid "Primary Trunk" +msgstr "" + +msgid "Secondary Trunk" +msgstr "" + +msgid "UPDATE" +msgstr "" + +msgid "" +"Trunks have been reset to the default configuration. All codecs and other " +"setups have been preserved." +msgstr "" + +msgid "Primary Trunk Reset" +msgstr "" + +msgid "Secondary Trunk Reset" +msgstr "" + +msgid "You did not enter a key, Please enter a key to add." +msgstr "" + +msgid "" +"You have entered an invalid key. You can find your key in the portal and " +"should copy and paste it below." +msgstr "" + +#, php-format +msgid "" +"%s: This module can not reach the server to obtain your account information. " +"If you can navigate to https://store." +"freepbx.com from a browser then there is an issue with your firewall or " +"DNS resolution. If this is a first time install you might be able to reboot " +"to rectify the issue. If you have an aggressive firewall with content " +"filtering or equivalent, you may have to disable that feature for this " +"server or white list the store.freepbx.com site if possible." +msgstr "" + +#, php-format +msgid "There is a problem with your key: %s" +msgstr "" + +msgid "Not Registered" +msgstr "" + +#, php-format +msgid "" +"The prefix you entered, %s, is not a proper prefix or the wrong length. It " +"should be a 3 digit prefix." +msgstr "" + +#, php-format +msgid "Successfully configured %s routes to use your SIP trunks" +msgstr "" + +#, php-format +msgid "Your Area Code was updated to %s" +msgstr "" + +msgid "No updates were required, no routes or areacode were changed" +msgstr "" + +#, php-format +msgid "" +"Your trunks are not configured. Click on the Get Account Info button in " +"order to re-pull your account information and generate the required trunks " +"and then try again." +msgstr "" + +#, php-format +msgid "" +"Your module version is not compatible with the current API requirements and " +"needs to be updated. Expecting XML version %s and received version %s." +msgstr "" + +msgid "Not Set" +msgstr "" Index: /modules/branches/2.10/sipstation/uninstall.php =================================================================== --- /modules/branches/2.10/sipstation/uninstall.php (revision 9438) +++ /modules/branches/2.10/sipstation/uninstall.php (revision 9438) @@ -0,0 +1,11 @@ + true, + 'sip_password' => true, + 'gateways' => true, + 'asterisk_settings' => true, +); +$current_config = sipstation_get_config("xxx", false, $filter); + +$need_reload = false; + +$sip_user = $current_config['sip_username']; +$sip_pass = $current_config['sip_password']; + +$tlist = core_trunks_list(true); +$tech = 'sip'; + +$peer_array = array(); +foreach ($current_config['asterisk_settings']['peer'] as $param) { + $peerdetails .= trim($param)."\n"; + $parts = explode('=',$param,2); + $peer_array[$parts[0]] = $parts[1]; +} +$peerdetails .= "username=$sip_user\nsecret=$sip_pass\nhost="; +$register = "$sip_user:$sip_pass@"; + +for ($i=1;$i<3;$i++) { + $gidx = "gw$i"; + $channelid = "fpbx-$i-$sip_user"; + $gw = $current_config['gateways'][$gidx]; + if (isset($tlist["SIP/$channelid"])) { + $json_array['status'] = 'success'; + if (!isset($_POST[$gidx]) || $_POST[$gidx] != 'yes') { + continue; + } + $globalvar = $tlist["SIP/$channelid"]['globalvar']; + $trunknum = ltrim($globalvar,'OUT_'); + $trunk_details = core_trunks_getDetails($trunknum); + $userconfig = core_trunks_getTrunkUserConfig($trunknum); + $old_peerdetails = explode("\n",core_trunks_getTrunkPeerDetails($trunknum)); + foreach ($old_peerdetails as $param) { + $parts = explode('=',$param,2); + switch (strtolower(trim($parts[0]))) { + case 'allow': + $allow = "allow=".$parts[1]."\n"; + break; + case 'disallow': + $disallow = "disallow=".$parts[1]."\n"; + break; + } + } + $peer_stuff = $peerdetails.$gw."\n".$disallow.$allow; + $reg = $register.$gw; + + /* Extract the allow/disallow now + */ + $tech = $trunk_details['tech']; + $outcid = $trunk_details['outcid']; + $maxchans = $trunk_details['maxchans']; + $dialoutprefix = $trunk_details['dialoutprefix']; + $keepcid = $trunk_details['keepcid']; + $failtrunk = $trunk_details['failscript']; + $disabletrunk = $trunk_details['disabled']; + + // TODO: trunk_name, provider with 2.6 + /* + $provider = $trunk_details['provider']; + $trunk_name = $trunk_details['name']; + */ + core_trunks_edit($trunknum, $channelid, $dialoutprefix, $maxchans, $outcid, $peer_stuff, $usercontext, $userconfig, $reg, $keepcid, $failtrunk, $disabletrunk); + $need_reload = true; + $json_array['status'] = 'success'; + $json_array['trunk_updated'][$gidx] = $trunknum; + } +} + +/* + if we made changes then we have to set the needsreload status and send back the reload bar to be inserted +*/ +if ($need_reload) { + needreload(); + if ($_POST['send_reload'] == 'yes') { + ob_start(); + if (!@include ('views/freepbx_reloadbar.php')) { + @include ('../../views/freepbx_reloadbar.php'); //TODO for debugging + } + $json_array['reload_bar'] = ob_get_clean(); + ob_start(); + if (!@include ('views/freepbx_reload.php')) { + @include ('../../views/freepbx_reload.php'); //TODO for debugging + } + $json_array['reload_header'] = ob_get_clean(); + } + $json_array['show_reload'] = 'yes'; +} else { + $json_array['show_reload'] = 'no'; +} + +$json = new Services_JSON(); +$value = $json->decode($_POST); + +header("Content-type: application/json"); +echo $json->encode($json_array); Index: /modules/branches/2.10/sipstation/module.xml =================================================================== --- /modules/branches/2.10/sipstation/module.xml (revision 11214) +++ /modules/branches/2.10/sipstation/module.xml (revision 11214) @@ -0,0 +1,42 @@ + + sipstation + standard + SIPSTATION + 2.9.0.1 + setup + Basic + + SIPSTATION + + + This module is used to configure, manage and troubleshoot your SIPSTATION(tm) FreePBX.com SIP trunks and DIDs. The license on this source code is NOT GPL Open Source, it is a proprietary Free to Use license. + + Bandwidth.com + COMMERCIAL + + *2.9.0.1* #4543, Allows dtmfmode to be set to other valid values, qualify, qualifyfreq, and context to be set/removed differently without errors reported + *2.9.0.0* 2.9 Update + *2.8.0.7* Add remove Trunks and Keys option to SIPSTATION + *2.8.0.6* #4448 + *2.8.0.5* #4310 undefined variables and spelling errors + *2.8.0.4* increase ajax and CURL TIMEOUT + *2.8.0.3* redefine core_routing_trunk_del and only if extension table is still there + *2.8.0.2* switch to new trunk dialrule apis + *2.8.0.1* report proper TEMPNOTAVAIL status when server replies with that, minor changes to install script + *2.8.0.0* update to use new Outbound Route APIs + *2.7.0.0* spelling, localizations + *2.6.0.3* add better error warnings when Contact/Network IP are different and not from private IP range + *2.6.0.2* bug fix that was not showing warning when Contact IP and Network IP were yellow + *2.6.0.1* add more details to noserver error + *2.6.0.0* tooltip edits, first release + *2.6.0RC1.0* Changed to gw1/gw2 separate registrations + *2.6.0beta1.6* collapsable section mods, added failover fields for future use, curl changes + *2.6.0beta1.5* css mods, new URL for xml access + *2.6.0beta1.4* many more bug fixes and tweaks + *2.6.0beta1.3* more status, lots of bug fixes + *2.6.0beta1.2* added install script to cleanup potential phantom trunks + *2.6.0beta1.1* first release + + release/2.9/sipstation-2.9.0.1.tgz + 71b875c78fa13c89d87c8901625b27c8 + Index: /modules/branches/2.10/sipstation/sipstation.css =================================================================== --- /modules/branches/2.10/sipstation/sipstation.css (revision 9438) +++ /modules/branches/2.10/sipstation/sipstation.css (revision 9438) @@ -0,0 +1,84 @@ +input.validation-error { + border:2px solid #FF3333; +} +div.sipstation-errors { + border:3px solid #FF3333; + background-repeat: repeat-x; +} +div.sipstation-errors p { + text-align:center; + color:#FF3333; + font-weight:bold; + text-decoration:underline; +} +div.sipstation-messages { + border:3px solid #00CC00; + background-repeat: repeat-x; +} +div.sipstation-messages p { + text-align:center; + color:#00CC00; + font-weight:bold; + text-decoration:underline; +} +input.ips-mismatch { + background-color:#FF3333; + border:1px solid #FFFF66; +} +input.ips-private { + background-color:#FFFF66; + border:1px solid #FFFF66; +} +input.ips-match { + background-color:#00CC00; + border:1px solid #00CC00; +} +input.ast-registered-no { + background-color:#FF3333; + border:1px solid #FF3333; +} +input.ast-registered-yes { + background-color:#00CC00; + border:2px solid #00CC00; +} +input.registered-no { + background-color:#FF3333; + border:1px solid #FF3333; +} +input.registered-yes { + background-color:#00CC00; + border:2px solid #00CC00; +} +tr.did-header td { + color:gray; + font-weight:bold; +} +.firewall-fail, .firewall-fail input { + background-color:#FF3333; + border:1px solid #FF3333; +} +.firewall-pass, .firewall-pass input { + background-color:#00CC00; + border:1px solid #00CC00; +} +input.changed_trunks { + background-color:#FFFF66; + border:1px solid #FFFF66; +} +input.no_codecs { + background-color:#FF3333; + border:1px solid #FF3333; +} +.warning-messages { + color:gray; + font-style:italic; + font-size:small; +} +/* +.account-access, #asterisk-stregisterattempts-msg, #gateway-reginfo-msg, .firewall-test-fields, #reset-trunks-button +{ + visibility:hidden; +} +*/ +.toggle-minus{background:url('images/toggle_minus.png') center no-repeat; padding: 3px 3px;cursor: pointer} +.toggle-plus{background:url('images/toggle_plus.png') center no-repeat; padding: 3px 3px;cursor: pointer} Index: /modules/branches/2.10/sipstation/sipstation.utility.php =================================================================== --- /modules/branches/2.10/sipstation/sipstation.utility.php (revision 11105) +++ /modules/branches/2.10/sipstation/sipstation.utility.php (revision 11105) @@ -0,0 +1,650 @@ + 'G.723.1', + 'gsm' => 'GSM', + 'ulaw' => 'G.711.U', + 'alaw' => 'G.711.A', + 'g722aal2' => 'G.726.AAl2', + 'adpcm' => 'ADPCM', + 'slin' => 'SLIN', + 'lpc10' => 'LPC10', + 'g729' => 'G.729.A', + 'speex' => 'SpeeX', + 'ilbc' => 'iLBC', + 'g726' => 'G.726', + 'g722' => 'G.722', +); + +/* callback to filer out codecs not supported + */ +function sipstation_codec_filter($codec) { + global $ast_codec_hash; + + $codec_split = explode(':',$codec,2); + if (array_key_exists($codec_split[0],$ast_codec_hash)) { + return $codec_split[0]; + } else { + return false; + } +} +function sipstation_supported_codecs($codec) { + global $codec_array; + return in_array($codec,$codec_array) ? $codec : false; +} + +/* Returns a hash of settings from 'sip show peers' +*/ +function sipstation_get_peer_status($peer) { + global $astman; + $sip_peer['sipstation_status'] = 'ok'; + $response = $astman->send_request('Command',array('Command'=>"sip show peer $peer")); + $buf = explode("\n",$response['data']); + foreach ($buf as $res) { + if (preg_match("/$peer\s*not\s+found\.{0,1}\s*$/",$res)) { + $sip_peer['sipstation_status'] = 'no_peer'; + } elseif (preg_match("/^\s*(.*?)\s*:\s*(.*)$/",$res,$match)) { + $sip_peer[$match[1]] = $match[2]; + } + } + return $sip_peer; +} + +/* Returns a hash of settings from 'sip show settings' +*/ +function sipstation_get_sip_settings() { + global $astman; + $sip_peer['sipstation_status'] = 'ok'; + $response = $astman->send_request('Command',array('Command'=>"sip show settings")); + $buf = explode("\n",$response['data']); + foreach ($buf as $res) { + if (preg_match("/$peer\s*not\s+found\.{0,1}\s*$/",$res)) { + $sip_peer['sipstation_status'] = 'no_peer'; + } elseif (preg_match("/^\s*(.*?)\s*:\s*(.*)$/",$res,$match)) { + $sip_peer[$match[1]] = $match[2]; + } + } + return $sip_peer; +} + +/* Returns a filtered array of currently configured codecs, filtered + against the list of supported codecs +*/ +function sipstation_get_configured_codecs($peer, $peer_status=false) { + if (!is_array($peer_status) || empty($peer_status)) { + $peer_status = sipstation_get_peer_status($peer); + } + if ($peer_status['sipstation_status'] = 'ok') { + if (preg_match("/^\s*\((.*)\)\s*$/",$peer_status['Codec Order'],$match)) { + $codecs = explode(',',$match[1]); + return array_filter(array_map('sipstation_codec_filter',$codecs)); + } + } +} + +function sipstation_get_key() { + global $db; + $sql = "SELECT * FROM module_xml WHERE id = 'sipstation_key'"; + $result = sql($sql,'getRow',DB_FETCHMODE_ASSOC); + if (!isset($result['data']) || trim($result['data']) == "") { + return false; + } else { + return $result['data']; + } +} + +/* Check if there is a valid key + * Returns: nokey, valid, invalid, noserver (if server can't be contacted) + */ +function sipstation_check_key() { + $sql = "SELECT * FROM `module_xml` WHERE `id` = 'sipstation_key'"; + $result = sql($sql,'getRow',DB_FETCHMODE_ASSOC); + + // if not set so this is a first time install + // get a new hash to account for first time install + // + if (!isset($result['data']) || trim($result['data']) == "") { + return 'nokey'; + } else { + // TODO: should really encrypt/decrypt key + // + return sipstation_confirm_key($result['data']); + } +} + +/* deleted saved configuration if confirmation determines it is stale + */ +function sipstation_confirm_key($key) { + $xml_array = sipstation_get_config(trim($key)); + if ($xml_array['status'] == 'success') { + switch ($xml_array['query_status']) { + case 'SUCCESS': + return 'valid'; + case 'TEMPNOTAVAIL': + return 'tempnotavail'; + case 'BADKEY': + sipstation_remove_key(); + default: + return 'invalid'; + } + } else { + return $xml_array['status']; + } +} + +function sipstation_set_key($key) { + global $db; + $status = sipstation_confirm_key($key); + if ($status == 'valid' || $status == 'tempnotavail') { + $data4sql = $db->escapeSimple($key); + sql("DELETE FROM `module_xml` WHERE `id` = 'sipstation_key'"); + sql("INSERT INTO `module_xml` (`id`,`time`,`data`) VALUES ('sipstation_key',".time().",'".$data4sql."')"); + } + return $status; +} + +function sipstation_remove_key() { + sql("DELETE FROM `module_xml` WHERE `id` = 'sipstation_key'"); + return $status; +} + +/* save the retrieved configuration information into the db to be used to configure trunks and what not + */ +function sipstation_save_config($xml) { + global $db; + $data4sql = $db->escapeSimple($xml); + sql("DELETE FROM `module_xml` WHERE `id` = 'sipstation_config'"); + sql("INSERT INTO `module_xml` (`id`,`time`,`data`) VALUES ('sipstation_config',".time().",'".$data4sql."')"); +} + +function sipstation_del_saved_config() { + global $db; + sql("DELETE FROM `module_xml` WHERE `id` = 'sipstation_config'"); +} + +function sipstation_retrieve_saved_config($format='') { + global $db; + $sql = "SELECT `data` FROM `module_xml` WHERE `id` = 'sipstation_config'"; + $xml_data = sql($sql, "getOne"); + if ($format == 'xml') { + return $xml_data; + } else { + $parser = new xml2Array($xml_data); + return $parser; + } +} + +function sipstation_get_settings($key, $online=true) { + global $amp_conf; + + if ($online) { + $xml_data = sipstation_curl_xml($key); + + sipstation_save_config($xml_data); // cache the latest + $parser = new xml2Array($xml_data); + + return $parser; + } else { + return sipstation_retrieve_saved_config(); + } +} + +// TODO: handle timeouts, other issues. +// TODO: make more general for any post, make generic RESTFUL function +function sipstation_curl_xml($keycode) { + + // TODO: TEST + /* would be better to serialize the array and send it + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); + $params = "keycode=".urlencode($keycode); + curl_setopt($ch, CURLOPT_POSTFIELDS, $params); + */ + + $url = "https://store.freepbx.com/store/myaccount.xml"; + //$params = "keycode=".urlencode($keycode); + $params = array("keycode" => urlencode($keycode)); + $user_agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"; + + $ch = curl_init(); + //curl_setopt ($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); + curl_setopt($ch, CURLOPT_POSTFIELDS, $params); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); + curl_setopt($ch, CURLOPT_USERAGENT, $user_agent); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // return results to string + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_COOKIEJAR, '/tmp/cookie.txt'); // imitate classic browser behavior + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); + + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20); + // TODO: deal with timeout! + + $xml = curl_exec ($ch); + + // TODO: curl info back from request, check return code + // freepbx_debug(curl_getinfo($ch)); + + // TODO: if ($xml === false) handle it, retry, etc. + // TODO: or at least toss in some error xml response + curl_close ($ch); + + return $xml; +} + +//TODO: refactor with above to combine common parts + +function sipstation_put_dids($dids) { + if (empty($dids)) { + return true; + } + $keycode = sipstation_get_key(); + $xml = ' + + +1.0.0'; + $xml .= " +$keycode +"; + foreach ($dids as $did => $failover) { + $xml .= "\n$did"; + } + $xml .= " + + +"; + + // TODO: different URL for putting just dids + $url = "https://store.freepbx.com/store/myaccount.xml"; + $user_agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"; + + $ch = curl_init(); + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); + curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); + + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); + curl_setopt($ch, CURLOPT_USERAGENT, $user_agent); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // print results to string and not STDOUT + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_COOKIEJAR, '/tmp/cookie.txt'); // IMITATE CLASSIC BROWSER'S BEHAVIOUR + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); + + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20); + // TODO: deal with timeout! + + $xml = curl_exec ($ch); + + // curl info back from request + $return_status = curl_getinfo($ch); + // freepbx_debug($return_status); + + // TODO: if ($xml === false) { handle it, retry, etc. + // TODO: or at least toss in some error xml response + curl_close ($ch); + + return $xml; +} + +function sipstation_get_or_create_trunks(&$json_array,&$globalvar1,&$trunknum1,&$globalvar2,&$trunknum2) { + // now check on trunk config + // fpbx-1-$sip_user / fpbx-2-$sip_user + // TODO: 2.6 has trunkname, provider options that should be used + // + global $ast_codec_hash; + $sip_user = $json_array['sip_username']; + $sip_pass = $json_array['sip_password']; + $default_did = $json_array['e911_address']['default_did']; + $need_reload = false; + + $tlist = core_trunks_list(true); + $tech = 'sip'; + $keepcid = 'off'; + $disabletrunk= 'off'; + + $peerdetails = "disallow=all\nallow=".implode('&',array_keys($ast_codec_hash))."\n"; + $peer_array = array(); + foreach ($json_array['asterisk_settings']['peer'] as $param) { + $peerdetails .= trim($param)."\n"; + $parts = explode('=',$param,2); + $peer_array[$parts[0]] = $parts[1]; + } + + $peerdetails .= "username=$sip_user\nsecret=$sip_pass\nhost="; + $register = "$sip_user:$sip_pass@"; + + for ($i=1;$i<3;$i++) { + $gidx = "gw$i"; + $channelid = "fpbx-$i-$sip_user"; + $gw = $json_array['gateways'][$gidx]; + if (isset($tlist["SIP/$channelid"])) { + $globalvar = $tlist["SIP/$channelid"]['globalvar']; + $trunknum = ltrim($globalvar,'OUT_'); + // Now get some trunk status info + $trunk_status = sipstation_get_peer_status($channelid); + if ($trunk_status['sipstation_status'] == 'ok') { + $json_array['trunk_qualify'][$gidx] = $trunk_status['Status']; + $json_array['trunk_codecs'][$gidx] = implode(' | ',sipstation_get_configured_codecs($channelid,$trunk_status)); + } else { + //TODO: probably nothing + } + $json_array['trunk_name'][$gidx] = core_trunks_getTrunkTrunkName($trunknum); + } else { + $trunknum = core_trunks_add($tech, $channelid, '', '', $default_did, $peerdetails.$gw, '', '', $register.$gw, $keepcid, '', $disabletrunk); + $globalvar = "OUT_".$trunknum; + $need_reload = true; + $json_array['created_trunks'][$gidx] = $channelid; + // TODO: 2.6 should be name + $json_array['trunk_name'][$gidx] = "SIP/$channelid"; + } + // We need these next and need them past back up + $gv = "globalvar$i"; + $tn = "trunknum$i"; + $$gv = $globalvar; + $$tn = $trunknum; + } + + $peer_array['username'] = $sip_user; + $peer_array['secret'] = $sip_pass; + + $trunk_check = array($trunknum1, $trunknum2); + $cnt = 1; + foreach ($trunk_check as $tr) { + $json_array['trunk_id']["gw$cnt"] = $tr; // need to get this set for both anyhow + $gw = $json_array['gateways']["gw$cnt"]; + $peer_array['host'] = $gw; + $peer_stuff = array(); + $tr_reg = core_trunks_getTrunkRegister($tr); + foreach (explode("\n",core_trunks_getTrunkPeerDetails($tr)) as $elem) { + $temp = explode("=",$elem,2); + if ($temp[0] == 'allow') { + $peer_stuff[$temp[0]] = explode('&',$temp[1]); + } elseif ($temp[0] != '') { + $peer_stuff[$temp[0]] = $temp[1]; + } + } + // Unset some settings that do not hurt to change and might help + // + if (isset($peer_stuff['allow'])) { + unset($peer_stuff['allow']); + } + + if (isset($peer_stuff['disallow'])) { + unset($peer_stuff['disallow']); + } + + unset($peer_array['qualify']); + if (isset($peer_stuff['qualify'])) { + unset($peer_stuff['qualify']); + } + unset($peer_array['qualify']); + + if (isset($peer_stuff['context'])) { + unset($peer_stuff['context']); + } + unset($peer_array['context']); + + if (isset($peer_stuff['qualifyfreq'])) { + unset($peer_stuff['qualifyfreq']); + } + + if (isset($peer_stuff['dtmfmode'])) { + switch($peer_stuff['dtmfmode']) { + case 'inband': + case 'rfc2833': + case 'auto': + unset($peer_stuff['dtmfmode']); + unset($peer_array['dtmfmode']); + break; + } + } + + if ($peer_array != $peer_stuff || $tr_reg != $register.$gw) { + $json_array['changed_trunks']["gw$cnt"] = $tr; + } + $cnt++; + } + return $need_reload; +} + +/* +Current format of 'sip show registry' with various possible states +Host Username Refresh State Reg.Time +trunk1.freepbx.com:5060 b04c1dsr 585 Registered Sat, 27 Jun 2009 00:33:47 +trunk2.freepbx.com:5060 b04c1dsr 585 Registered Sat, 27 Jun 2009 00:33:48 +phonebooth.bandwidth.com:5060 9192221234 585 Timeout Sat, 27 Jun 2009 00:33:47 +67.131.62.22:5060 myusername 585 Auth.Sent. Sat, 27 Jun 2009 00:33:47 +*/ +function sipstation_get_registration_status($sip_user) { + global $astman; + $status_arr = array(); + if (!isset($astman)) { + return $status_arr; + } + $response = $astman->send_request('Command',array('Command'=>"sip show registry")); + $buf = explode("\n",$response['data']); + $state_pos = false; + foreach ($buf as $line) { + if (trim($line) != '') { + if ($state_pos===false) { + // find the positions of the header columns so we can parse + if ($state_pos = strpos($line,"State")) { + $user_pos = strpos($line,"Username"); + $reg_pos = strpos($line,"Reg.Time"); + $host_pos = strpos($line,"Host"); + + // Asterisk 1.2 does not have Reg. Time + if ($reg_pos === false) { + $reg_pos = strlen($line); + } + } + } else { + // get the username and if ours, trunk (host) and State of reg + preg_match("/^([^\s]+)\s*/",substr($line,$user_pos),$matches); + if ($sip_user == $matches[1]) { + $trunk = trim(substr($line,$host_pos,($user_pos-$host_pos))); + $trunk = preg_match("/^([^\s:]+)[:]{0,1}[\d]{0,5}\s*/",$trunk,$matches) ? $matches[1] : $trunk;; + $state = trim(substr($line,$state_pos,($reg_pos-$state_pos))); + $status_arr[$trunk] = $state; + } + } + } + } + return $status_arr; +} + +/* Very simple function to determine if an IP address is in the private range. This would + include: + 192.168.*.*, 172.16-31.*.* and 10.*.*.* + */ +function is_private_ip($address) { + if (preg_match('/^(192|172|10)\.(\d{1,3})\.\d{1,3}\.\d{1,3}$/',$address,$match)) { + switch($match[1]) { + case '10': + return true; + break; + case '192': + if ($match[2] == '168') { + return true; + } else { + return false; + } + break; + case '172': + if ($match[2] >= 16 && $match[2] <= 31) { + return true; + } else { + return false; + } + break; + } + } else { + return false; + } +} + +function sipstation_get_config($account_key, $online=true, $filter_sections=array()) { + global $db; + global $ast_codec_hash; + global $codec_array; + + if (!empty($account_key)) { + $json_array = array(); + $xml_parser = sipstation_get_settings($account_key, $online); + + if (!empty($xml_parser->data)) foreach ($xml_parser->data['xml'] as $key => $value) { + switch ($key) { + case 'xml_version': + case 'query_status': + case 'query_status_message': + case 'sip_username': + case 'sip_password': + case 'num_trunks': + case 'monthly_cost': + case 'cid_format': + case 'nat_troubleshooting': + if (!empty($filter_sections) && (!isset($filter_sections[$key]) || !$filter_sections[$key])) { continue; } + $json_array[$key] = trim("$value"); + break; + case 'gateways': + case 'e911_address': + case 'registered_status': + if (!empty($filter_sections) && (!isset($filter_sections[$key]) || !$filter_sections[$key])) { continue; } + foreach ($value as $key2 => $value2) { + if (is_array($value2)) { + foreach ($value2 as $gw => $value3){ + $json_array[$key][$key2][$gw] = $value3 ? trim($value3) : ''; + } + } else { + $json_array[$key][$key2] = $value2 ? trim($value2) : ''; + } + } + if ($key == 'registered_status') { + foreach ($value as $key2 => $value2) { + if (is_array($value2)) { + if ($value2['contact_ip'] == $value2['network_ip']) { + $json_array[$key][$key2]['ips_match'] = 'yes'; + } else { + $json_array[$key][$key2]['ips_match'] = is_private_ip($value2['contact_ip']) ? 'private' : 'no'; + } + } else { + if ($key2 != 'registered') continue; + if ($json_array[$key]['contact_ip'] == $json_array[$key]['network_ip'] && $value2 == 'yes') { + $json_array[$key]['ips_match'] = 'yes'; + } else { + $json_array[$key]['ips_match'] = 'no'; + $json_array[$key]['ips_match'] = is_private_ip($json_array[$key]['contact_ip']) ? 'private' : 'no'; + } + } + } + } + break; + case 'dids': + if (!empty($filter_sections) && (!isset($filter_sections[$key]) || !$filter_sections[$key])) { continue; } + if (!empty($value['did']) && !is_array($value['did'])) { + $tmp = $value['did']; + unset($value['did']); + $value['did'][] = $tmp; + $single = true; + } else { + $single = false; + } + + $idx = 0; + foreach ($value['did'] as $did) { + + $path = $single ? "/xml/dids/did" : "/xml/dids/did/$idx"; + $idx++; + $failover = $xml_parser->attributes[$path]['failover']; + + $did = trim($did); + $exten = core_did_get($did); + if (empty($exten)) { + $json_array[$key][$did] = array('destination' => 'blank', 'desc' => _("Not Set"), 'description' => '', 'failover' => "$failover"); + } else { + $dest_results = framework_identify_destinations($exten['destination']); + if (is_array($dest_results[$exten['destination']])) { + /* This is really bad but the calls to core_users get are so heavy and core_users_list don't give details + that we will do this for now and deal with it later. + */ + $user_cid_hash = array(); + $sql = "SELECT `extension`, `outboundcid` FROM `users`"; + $user_cids = $db->getAll($sql,DB_FETCHMODE_ASSOC); + if(DB::IsError($user_cids)) { + freepbx_debug("Failed trying to get user cids"); + freepbx_debug($user_cids->getMessage()); + $user_cids = array(); + } + foreach ($user_cids as $item) { + $user_cid_hash[$item['extension']] = $item['outboundcid']; + } + foreach ($dest_results[$exten['destination']] as $mod => $info) { + //$destination = (substr($exten['destination'],0,15) == 'from-did-direct' ? $exten['destination'] : 'assigned'); + $is_checked = 0; + if (substr($exten['destination'],0,15) == 'from-did-direct') { + $destination = $exten['destination']; + $exten_arr = explode(',',$destination); + if (isset($exten_arr[1]) && isset($user_cid_hash[$exten_arr[1]])) { + $is_checked = preg_match('/^\s*[<]?('.$did.')[>]?\s*$|^\s*"[^"]*"\s*<('.$did.')>\s*$/',$user_cid_hash[$exten_arr[1]]); + } else { + $is_checked = 0; + } + } else { + $destination = 'assigned'; + } + $json_array[$key][$did] = array('destination' => $destination, 'desc' => $info['description'], 'description' => $exten['description'], 'outboundcid' => $is_checked, 'failover' => "$failover"); + break; + } + } else { + $json_array[$key][$did] = array('destination' => 'blank', 'desc' => _("Not Set"), 'description' => '', 'failover' => "$failover"); + } + } + } + break; + case 'asterisk_settings': + if (!empty($filter_sections) && (!isset($filter_sections[$key]) || !$filter_sections[$key])) { continue; } + $json_array['asterisk_settings']['peer'] = $value['peer']['setting']; + break; + case 'codecs': + if (!empty($filter_sections) && (!isset($filter_sections[$key]) || !$filter_sections[$key])) { continue; } + $codec_array = $value['codec']; + /* filter the Asterisk codec hash to only those that we are told are supported + */ + $ast_codec_hash = array_filter(array_map('sipstation_supported_codecs',$ast_codec_hash)); + break; + default: + } + $json_array['status'] = 'success'; + } else { + $json_array['status'] = 'noserver'; + } + } else { + $json_array['status'] = 'nokey'; + } +return $json_array; +} Index: /modules/branches/2.10/sipstation/sipstation.html.php =================================================================== --- /modules/branches/2.10/sipstation/sipstation.html.php (revision 10970) +++ /modules/branches/2.10/sipstation/sipstation.html.php (revision 10970) @@ -0,0 +1,202 @@ +connect("127.0.0.1:".$amp_conf["ASTMANAGERPROXYPORT"], $amp_conf["AMPMGRUSER"] , $amp_conf["AMPMGRPASS"], 'off')) { + if (!$res = $astman->connect("127.0.0.1:".$amp_conf["ASTMANAGERPORT"], $amp_conf["AMPMGRUSER"] , $amp_conf["AMPMGRPASS"], 'off')) { + unset( $astman ); + } + } + include_once("/var/www/html/admin/common/db_connect.php"); + include_once("/var/www/html/admin/modules/core/functions.inc.php"); + if (!isset($active_modules)) { + $active_modules = array(); + } +} +global $db; +global $sipstation_xml_version; +/* For testing: +*//* +include_once("common/json.inc.php"); +*/ + + +//TODO: mockup, would need to do error checking +// + +$json_array = sipstation_get_config( sipstation_get_key() ); + +/* Check if we have trunks configured with the same credentials + and if so, skip the trunk creation mode + + Note: there are some ugly queries below. We don't like to do that + but the APIs are not ideal and very heavy. This turns out + to be much more efficient to detect these trunks. + */ +$trunk_conflict = array(); +if ($json_array['query_status'] == 'SUCCESS') { + $sip_user = $json_array['sip_username']; + $gateways = implode("','",$json_array['gateways']); + + $sql = " + SELECT `id` FROM `sip` WHERE `keyword` = 'username' + AND `data` = '$sip_user' AND `id` IN ( + SELECT `id` FROM `sip` WHERE `keyword` = 'host' + AND `data` IN ('$gateways') + )"; + $results = $db->getCol($sql); + if(DB::IsError($results)) { + $results = array(); + } + + $sql = "SELECT `id` FROM `sip` WHERE `keyword` = 'register' AND ("; + foreach ($json_array['gateways'] as $gw) { + $sql .= "(`data` LIKE '$sip_user:%@$gw%') OR "; + } + $sql = rtrim($sql,' OR').")"; + $results2 = $db->getCol($sql); + if(DB::IsError($results)) { + $results2 = array(); + } + $results2 = array_merge($results, $results2); + + /* Now we have to find the trunk, looking at the pre-2.6 and post + 2.6 account id formats + */ + $existing_trunks = array(); + $existing_trunk_hash = array(); + foreach ($results2 as $tr) { + if (preg_match('/^9999([\d]{1,2})$|^99999([\d]{1,2})$|^9999999([\d]{1,2})$|^tr-peer-([\d]+)$|^tr-user-([\d]+)$|^tr-reg-([\d]+)$/',$tr,$match)) { + $existing_trunks[$match[count($match)-1]][] = $tr; + $existing_trunk_hash[$tr] = $match[count($match)-1]; + } + } + $sql = "SELECT `data` name, `id` FROM `sip` WHERE `keyword` = 'account' AND `id` IN ('".implode("','",array_keys($existing_trunk_hash))."')"; + $results = $db->getAll($sql,DB_FETCHMODE_ASSOC); + if(DB::IsError($results)) { + $results = array(); + } + + foreach ($results as $trunk_name) { + if ($trunk_name['name'] != "fpbx-1-$sip_user" && $trunk_name['name'] != "fpbx-2-$sip_user") { + $tname = core_trunks_getTrunkTrunkName($existing_trunk_hash[$trunk_name['id']]); + if ($tname != $trunk_name['name']) { + $tname .= " ({$trunk_name['name']})"; + } + $trunk_conflict[] = array('name' => $tname, 'href' => 'OUT_'.$existing_trunk_hash[$trunk_name['id']]); + } + } +} + +/* If we detected trunk conflicts then we don't bother with the Trunk and Routing + section, just report and be done. + */ +if (!empty($trunk_conflict)) { + unset($json_array['query_status_message']); + unset($json_array['query_status']); + $json_array['trunk_conflict'] = $trunk_conflict; + +} elseif ($json_array['query_status'] == 'SUCCESS' && $json_array['xml_version'] == $sipstation_xml_version) { // TODO: This needs to be checking that there was no failure + $need_reload = sipstation_get_or_create_trunks($json_array,$globalvar1,$trunknum1,$globalvar2,$trunknum2); + if ($need_reload) { + needreload(); + if ($_POST['send_reload'] == 'yes') { + ob_start(); + if (!@include ('views/freepbx_reloadbar.php')) { + @include ('../../views/freepbx_reloadbar.php'); //TODO for debugging + } + $json_array['reload_bar'] = ob_get_clean(); + ob_start(); + if (!@include ('views/freepbx_reload.php')) { + @include ('../../views/freepbx_reload.php'); //TODO for debugging + } + $json_array['reload_header'] = ob_get_clean(); + } + $json_array['show_reload'] = 'yes'; + } else { + $json_array['show_reload'] = 'no'; + } + + // Check trunknum1 for a prefix and use it since it is the primary trunk + // hopefully they will be the same + // + $json_array['areacode'] = ""; + $dialrules = core_trunks_get_dialrules($trunknum1); + if (is_array($dialrules) && count($dialrules)) { + foreach ($dialrules as $rule) { + if (preg_match('/^1{0,1}(\d{3})$/',$rule['prepend_digits'],$matches)) { + $json_array['areacode'] = $matches[1]; + break; + } + } + } + $settings = sipstation_get_sip_settings(); + $json_array['asterisk_registerattempts'] = $settings['Outbound reg. attempts']; + + // Get the Asterisk Registration Status, retry once if bumping into Auth. Sent. + // + $try_again = false; + $cnt = 0; + do { + if ($try_again) { + sleep(1); + } + $cnt++; + $trunk_status = sipstation_get_registration_status($json_array['sip_username']); + foreach ($json_array['gateways'] as $gw => $trunk) { + if (isset($trunk_status[$trunk])) { + $json_array['asterisk_registry'][$gw] = $trunk_status[$trunk]; + $try_again = $trunk_status[$trunk] == 'Auth. Sent' ? true : $try_again; + } else { + $json_array['asterisk_registry'][$gw] = _("Not Registered"); + } + } + } while ($try_again && $cnt < 2); + + $routes = core_routing_list(); + + foreach($routes as $route) { + $route_name = $route['name'].$route['route_id']; + $trunks = core_routing_getroutetrunksbyid($route['route_id']); + + $gw1 = array_search($trunknum1,$trunks); + $gw1 = ($gw1 === false ? 0 : $gw1+1); + + $gw2 = array_search($trunknum2,$trunks); + $gw2 = ($gw2 === false ? 0 : $gw2+1); + $json_array['routes'][$route_name] = array('gw1' => $gw1, 'gw2' => $gw2); + } +} elseif ($json_array['query_status'] == 'SUCCESS' && $json_array['xml_version'] != $sipstation_xml_version) { + $json_array['status'] = sprintf(_("Your module version is not compatible with the current API requirements and needs to be updated. Expecting XML version %s and received version %s."),$sipstation_xml_version, $json_array['xml_version']); + unset($json_array['query_status_message']); + unset($json_array['query_status']); +} else { + $json_array['status'] = $json_array['query_status_message']; + unset($json_array['query_status_message']); + unset($json_array['query_status']); +} + +$json = new Services_JSON(); +header("Content-type: application/json"); +echo $json->encode($json_array); Index: /modules/branches/2.10/sipstation/refresh.html.php =================================================================== --- /modules/branches/2.10/sipstation/refresh.html.php (revision 10970) +++ /modules/branches/2.10/sipstation/refresh.html.php (revision 10970) @@ -0,0 +1,70 @@ +connect("127.0.0.1:".$amp_conf["ASTMANAGERPROXYPORT"], $amp_conf["AMPMGRUSER"] , $amp_conf["AMPMGRPASS"], 'off')) { + if (!$res = $astman->connect("127.0.0.1:".$amp_conf["ASTMANAGERPORT"], $amp_conf["AMPMGRUSER"] , $amp_conf["AMPMGRPASS"], 'off')) { + unset( $astman ); + } + } + include_once("/var/www/html/admin/common/db_connect.php"); + include_once("/var/www/html/admin/modules/core/functions.inc.php"); + if (!isset($active_modules)) { + $active_modules = array(); + } +} +/* For testing: +*//* +include_once("common/json.inc.php"); +*/ + +/* We can use the cached config data as we were just told that + trunk params have changed and chose to update + */ + +$sip_username = $_POST['sip_username']; +$gateways['gw1'] = $_POST['gw1']; +$gateways['gw2'] = $_POST['gw2']; + +$json_array['status'] = 'success'; +// Get the Asterisk Registration Status +$trunk_status = sipstation_get_registration_status($sip_username); +foreach ($gateways as $gw => $trunk) { + if (isset($trunk_status[$trunk])) { + $json_array['asterisk_registry'][$gw] = $trunk_status[$trunk]; + } else { + $json_array['asterisk_registry'][$gw] = _("Not Registered"); + } +} + +for ($i=1;$i<3;$i++) { + $channelid = "fpbx-$i-$sip_username"; + $trunk_status = sipstation_get_peer_status($channelid); + if ($trunk_status['sipstation_status'] == 'ok') { + $json_array['trunk_qualify']["gw$i"] = $trunk_status['Status']; + } +} + +$json = new Services_JSON(); +$value = $json->decode($_POST); + +header("Content-type: application/json"); +echo $json->encode($json_array); Index: /modules/branches/2.10/sipstation/routes.html.php =================================================================== --- /modules/branches/2.10/sipstation/routes.html.php (revision 9438) +++ /modules/branches/2.10/sipstation/routes.html.php (revision 9438) @@ -0,0 +1,169 @@ + $prefix, 'match_pattern_pass' => $match, 'prepend_digits' => $prepend); + if ($match != 'NXXXXXX' || $prepend != $areacode || $prefix != '') { + $dialrules_2[] = array('match_pattern_prefix' => $prefix, 'match_pattern_pass' => $match, 'prepend_digits' => $prepend); + } + } + } else { + $dialrules_2 = array(); + $dialrules_tmp = array(); + } + array_unshift($dialrules_2, array('match_pattern_prefix' => '', 'match_pattern_pass' => 'NXXXXXX', 'prepend_digits' => $areacode)); + + if ($dialrules_2 != $dialrules_tmp) { + core_trunks_update_dialrules($trunk, $dialrules_2, true); + $need_reload = true; + } + unset($dialrules_2); + unset($dialrules_tmp); + unset($dialrules); + } + } else { + $json_array['areacode_status'] = sprintf(_("The prefix you entered, %s, is not a proper prefix or the wrong length. It should be a 3 digit prefix."),$_POST['areacode']); + } + } + + $routes = core_routing_list(); + foreach($routes as $route) { + $route_name = $route['name'].$route['route_id']; + $trunks = core_routing_getroutetrunksbyid($route['route_id']); + + $gw1 = array_search($trunknum1,$trunks); + $gw2 = array_search($trunknum2,$trunks); + $gw1_change = ($gw1 !== false XOR $_POST[$route_name.'_id1'] == 'yes'); + $gw2_change = ($gw2 !== false XOR $_POST[$route_name.'_id2'] == 'yes'); + if ($gw1_change || $gw2_change) { + /* + Determine which one or both need to change then do them at the same time. + They should all be created at this point from above, gw1 should be last + so that trunk always ends up first. + */ + $cnt++; + if ($gw2_change) { + if ($gw2===false) { + array_unshift($trunks,$trunknum2); + } else { + unset($trunks[$gw2]); + } + } + if ($gw1_change) { + if ($gw1===false) { + array_unshift($trunks,$trunknum1); + } else { + unset($trunks[$gw1]); + } + } + foreach ($trunks as $trunk) { + $new_trunks[] = $trunk; + } + // Now get all the route settings, then update with these new trunks + // + core_routing_updatetrunks($route['route_id'], $new_trunks, true); + unset($new_trunks); + } + } + $json_array['update_count'] = $cnt; + if ($cnt) { + $json_array['status_message'] = sprintf(_("Successfully configured %s routes to use your SIP trunks"),$cnt); + } elseif ($need_reload) { + $json_array['status_message'] = sprintf(_("Your Area Code was updated to %s"),$areacode); + } else { + $json_array['status_message'] = _("No updates were required, no routes or areacode were changed"); + } +} else { + $json_array['update_count'] = 0; + $json_array['status_message'] = sprintf(_("Your trunks are not configured. Click on the Get Account Info button in order to re-pull your account information and generate the required trunks and then try again.")); +} + +/* + if we made changes then we have to set the needsreload status and send back the reload bar to be inserted +*/ +if ($cnt || $need_reload) { + needreload(); + if ($_POST['send_reload'] == 'yes') { + ob_start(); + if (!@include ('views/freepbx_reloadbar.php')) { + @include ('../../views/freepbx_reloadbar.php'); //TODO for debugging + } + $json_array['reload_bar'] = ob_get_clean(); + ob_start(); + if (!@include ('views/freepbx_reload.php')) { + @include ('../../views/freepbx_reload.php'); //TODO for debugging + } + $json_array['reload_header'] = ob_get_clean(); + } + $json_array['show_reload'] = 'yes'; +} else { + $json_array['show_reload'] = 'no'; +} + +$json = new Services_JSON(); +$value = $json->decode($_POST); + +header("Content-type: application/json"); +echo $json->encode($json_array); Index: /modules/branches/2.10/sipstation/install.php =================================================================== --- /modules/branches/2.10/sipstation/install.php (revision 11109) +++ /modules/branches/2.10/sipstation/install.php (revision 11109) @@ -0,0 +1,81 @@ +query($sql); +} + +/* A long standing bug resulted in routes with trunk numbers that had been deleted. Because trunk numbers are recycled (something that + should be removed in the future), this can result in a new trunk being created and then silently inserted as part of a route that is + not intended. This will find all phantom trunks and remove them from routes. + + The following code should no longer be required with the new outbound routes stuff. However, it's remotely possible that this module + could get loaded on an upgrade scenario where core hasn't done a migration yet. Setting this module to depend on core makes for a + more painful upgrade process so we will simply leave this code in place since it checks for the extensions table and if not found + it does nothing. If found, it just manipulates that table which could still help in a subsequent migration to the new outbound routes. +*/ + +/* Get a list of all trunks being used + */ +outn(_("Checking routes for trunks..")); +$sql = "SELECT DISTINCT `args` FROM `extensions` WHERE `context` LIKE 'outrt-%' AND `application` = 'Macro' AND `args` LIKE 'dialout-%'"; +$results = $db->getCol($sql); +if(DB::IsError($results)) { + $results = array(); + out(_("ok")); +} else { + $trunks = array(); + $trunks_hash = array(); + foreach ($results as $trunk_call) { + if (preg_match('/^dialout-(?:trunk|enum|dundi),([\d]+),.*$/',$trunk_call,$match) != 1) { + out(_("error detected")); + out(sprintf(_("an erroneous entry, %s, was found in extensions table that should not be there"),$trunk_call)); + } else { + $trunks_hash[$match[1]] = "OUT_".$match[1]; + } + } + $num_trunks = count($trunks_hash); + out(sprintf(_("found %s"),$num_trunks)); + + outn(_("checking for phantoms..")); + + require_once($amp_conf['AMPWEBROOT'].'/admin/modules/core/functions.inc.php'); + $trunks = core_trunks_list(true); + + $bad_trunks = array(); + $cnt = 0; + foreach ($trunks_hash as $trunknum => $globalvar) { + $bad = true; + foreach ($trunks as $trunk) { + if ($trunk['globalvar'] == $globalvar) { + $bad = false; + break; + } + } + if ($bad) { + $cnt++; + outn("$trunknum.."); + __core_routing_trunk_del($trunknum); + } + } + if ($cnt) { + out(sprintf(_("removed %s phantoms"),$cnt)); + } else { + out(_("none")); + } +} +?> Index: /modules/branches/2.10/sipstation/destinations.html.php =================================================================== --- /modules/branches/2.10/sipstation/destinations.html.php (revision 8659) +++ /modules/branches/2.10/sipstation/destinations.html.php (revision 8659) @@ -0,0 +1,200 @@ +escapeSimple(isset($did_vars['extension']) ? $did_vars['extension'] : ''); + $cidnum = $db->escapeSimple(isset($did_vars['cidnum']) ? $did_vars['cidnum'] : ''); + $sql = ""; + foreach ($did_vars as $key => $value) { + switch ($key) { + case 'faxexten': + case 'faxemail': + case 'answer': + case 'wait': + case 'privacyman': + case 'alertinfo': + case 'ringing': + case 'mohclass': + case 'description': + case 'grppre': + case 'delay_answer': + case 'pricid': + case 'destination': + $sql_value = $db->escapeSimple($value); + $sql .= " `$key` = '$sql_value',"; + break; + default: + } + } + if ($sql == '') { + return false; + } + $sql = substr($sql,0,(strlen($sql)-1)); //strip off tailing ',' + $sql_update = "UPDATE `incoming` SET"."$sql WHERE `extension` = '$extension' AND `cidnum` = '$cidnum'"; + return sql($sql_update); + } +} + +function sipstation_set_outboundcid($target, $cid) { + global $db; + global $astman; + $exten = explode(',',$target); + $extension = $exten[1]; + if ($astman) { + $astman->database_put("AMPUSER",$extension."/outboundcid","$cid"); + } else { + freepbx_debug("could not get to manager"); + } + $extension = $db->escapeSimple($extension); // not reall necessary but ... + + /* This is really bad practice, but until we can get a decent API that is able + to update extensions without extreme pain, this will have to do. + */ + sql("UPDATE `users` SET `outboundcid` = '$cid' WHERE `extension` = '$extension'"); +} + +$json_array['status'] = 'success'; +$exten_cids = array(); +$cnt = 0; +if (isset($_POST['dids'])) { + + $filter = array('dids' => true,); + $dids_to_update = array(); + $dids_validation_fail = array(); + + $current_dids = sipstation_get_config("xxx", false, $filter); + $dids = unserialize($_POST['dids']); + foreach ($dids as $did) { + $did_parts = unserialize($did); + if (isset($did_parts['did'])) { + $update = false; + //TODO: $failover flag tmp here + if ($failover && $did_parts['failover'] != $current_dids['dids'][$did_parts['did']]['failover']) { + if (preg_match('/^\s*([1]{0,1}[2-9]{1}\d{2}[2-9]{1}\d{6})\s*$/', $did_parts['failover'], $match)) { + $dids_to_update[$did_parts['did']] = $match[1]; + $update = true; + } else { + $dids_validation_fail[$did_parts['did']] = $did_parts['failover']; + continue; + } + } + if ($did_parts['dest'] != 'blank' && $did_parts['dest'] != 'assigned') { + $did_vars['extension'] = $did_parts['did']; + $did_vars['destination'] = $did_parts['dest']; + $did_vars['description'] = $did_parts['desc']; + core_did_create_update($did_vars); + if ($did_parts['setcid']) { + sipstation_set_outboundcid($did_vars['destination'],$did_vars['extension']); + } + $update = true; + } + if ($update) { + $cnt++; + } + } else { + $json_array['status'] = _("An error was encountered updating DID destinations");; + } + } + if ($failover) sipstation_put_dids($dids_to_update); +} + +if (empty($dids_validation_fail)) { + $json_array['update_count'] = $cnt; + $json_array['status_message'] = sprintf(_("Successfully updated or created %s inbound routes for your DIDs"),$cnt); +} elseif ($cnt) { + $json_array['status'] = 'validation_failures'; + $json_array['update_count'] = $cnt; + $json_array['validation_failures'] = $dids_validation_fail; + $validation_failures = count($dids_validation_fail); + $json_array['status_message'] = sprintf(_("There are %s invalid entries, only updated or created %s inbound routes for your DIDs"),$validation_failures, $cnt); +} else { + $json_array['status'] = 'validation_failures'; + $json_array['update_count'] = 0; + $json_array['validation_failures'] = $dids_validation_fail; + $json_array['status_message'] = sprintf(_("There were %s validation failures on the requested DIDs, no updates performed"),$validation_failures); +} + +/* + if we made changes then we have to set the needsreload status and send back the reload bar to be inserted +*/ +if ($cnt) { + needreload(); + if ($_POST['send_reload'] == 'yes') { + ob_start(); + if (!@include ('views/freepbx_reloadbar.php')) { + @include ('../../views/freepbx_reloadbar.php'); //TODO for debugging + } + $json_array['reload_bar'] = ob_get_clean(); + ob_start(); + if (!@include ('views/freepbx_reload.php')) { + @include ('../../views/freepbx_reload.php'); //TODO for debugging + } + $json_array['reload_header'] = ob_get_clean(); + } + $json_array['show_reload'] = 'yes'; +} else { + $json_array['show_reload'] = 'no'; +} + +$json = new Services_JSON(); +$value = $json->decode($_POST); + +header("Content-type: application/json"); +echo $json->encode($json_array); Index: /modules/branches/2.10/sipstation/firewall.html.php =================================================================== --- /modules/branches/2.10/sipstation/firewall.html.php (revision 11105) +++ /modules/branches/2.10/sipstation/firewall.html.php (revision 11105) @@ -0,0 +1,119 @@ + $port_end) { + $json_array['status'] = 'no_ports'; + $json_array['status_message'] = _("No Free Ports in Asterisk RTP Port Range available for testing, you can try later"); + } else { + // Setup the receive end before ping the server to get started + $listen_port = (int)$port_start; + $listen_sock = socket_create(AF_INET, SOCK_DGRAM, 0); + + if (@socket_bind($listen_sock, $listen_address, $listen_port) === false) { + $json_array['status'] = 'socket_bind_listen_failed'; + $json_array['status_message'] = socket_strerror(socket_last_error($listen_sock)).". Could not bind to intended listen port ($listen_address:$listen_port) to receive test tocken."; + } else { + socket_set_nonblock($listen_sock); + + // OK, now we are listening so lets tell the server to send us something + // + $send_port = (string)$port_start; + $token = md5($send_port*rand()); + $fn = "http://mirror.freepbx.org/whatismyip.php?"; + $fn .= "port=$send_port&token=".urlencode($token); + + // Now build the token we will get back, to look like a g711u payload I hope + // this gets around any potential firewall issues though it is a stray packet + // + $header = "\x80\x80\x5a\x1d\xac\xe1\x37\xab\x3b\xb7\x59\xc8"; + $token = $header.$token.$token.$token.$token.$token; + + $ip_xml = file_get_contents_url($fn); + //TODO: check for === false and deal with detected error + + preg_match('|^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$|',$ip_xml,$matches); + if (isset($matches[1])) { + $json_array['externip'] = $matches[1]; + } + + // OK, now we fired off our request and it returned, which means it should have fired off our + // packet which should be buffered and waiting for us to read + // + $res = false; + $count = 5; + $string = $string2 = ""; + while ($res === false && $count > 0) { + $res = @socket_recv($listen_sock, $string, 1024, 0); + if ($res === false) { + sleep(1); + } + $count--; + } + sleep(1); + $res = @socket_recv($listen_sock, $string2, 1024, 0); + socket_close($listen_sock); + if ($res) { + $string += $string2; + } + } + } + if ($json_array['status'] != 'success') { + // Already filled in + } elseif ($count <= 0 && $string != $token) { + $json_array['status'] = 'timeout'; + $json_array['status_message'] = _("The test timed out which means your firewall is probably configured wrong. If subsequent tests fail, check your port forwarding on the firewall."); + } elseif ($string != $token) { + $json_array['status'] = 'bad_token'; + $json_array['status_message'] = _("An unexpected token was returned, try the test again"); + } + $json = new Services_JSON(); + sleep(0); + header("Content-type: application/json"); + echo $json->encode($json_array); Index: /modules/branches/2.10/sipstation/page.sipstation.php =================================================================== --- /modules/branches/2.10/sipstation/page.sipstation.php (revision 10424) +++ /modules/branches/2.10/sipstation/page.sipstation.php (revision 10424) @@ -0,0 +1,1291 @@ + +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+


+
+

+
    + +
+
+
+
+ +   + + +
+
+
+
+ +

+
Once active, this module will configure your trunks, routes and DIDs and provide diagnostic tools to configure and monitor your service."),'SIPSTATION™','https://store.freepbx.com') ?> +

+
+

+
" tabindex="">
+

+
+

+
    + +
+
+

+ +
+ +
+ +
+ + + + +
+   + +   +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ "$('#".$error['id']."').addClass('validation-error');\n", + 'div' => $error['message'], + ); + } + return $error_display; +} + +/************ AJAX FUNCTIONS ***********/ + +function ajax_get($post) { + include_once("sipstation.html.php"); + return true; +} +function dest_post($post) { + include_once("destinations.html.php"); + return true; +} +function route_post($post) { + include_once("routes.html.php"); + return true; +} +function reset_trunk($post) { + include_once("edittrunk.html.php"); + return true; +} +function refresh_display($post) { + include_once("refresh.html.php"); + return true; +} +?> Index: /modules/branches/2.10/framework/module.xml =================================================================== --- /modules/branches/2.10/framework/module.xml (revision 12083) +++ /modules/branches/2.10/framework/module.xml (revision 12083) @@ -0,0 +1,114 @@ + + framework + framework + standard + framework + FreePBX Framework + 2.9.0.2 + FreePBX + GPLv2+ + no + no + + *2.9.0.2* #5122 + *2.9.0.1* #5027 + *2.9.0.0* #5124 + *2.9.0rc1.5* #5077, #5086, #5096, #5095, #5111 + *2.9.0rc1.4* #5080 + *2.9.0rc1.3* #5038, #5059 + *2.9.0rc1.2* #5041, #4871, #5053, + *2.9.0rc1.1* #5009, #5028, #5035, typos + *2.9.0rc1.0* #4983, #4952, #5000, #4988 + *2.9.0beta2.4* #4959, #4951, #4958, #4970, #4977, #4981, #4940, #4942 + *2.9.0beta2.3* #4951, #4958, #4959 + *2.9.0beta2.2* #4939, #4951, #4958, #4959 + *2.9.0beta2.1* #4935 + *2.9.0beta2.0* #4926, #4910, #4929, #4932, #4933 + *2.9.0beta1.10* add distro info + *2.9.0beta1.9* #4001, #4913, #4914, #4404 + *2.9.0beta1.8* #4903 + *2.9.0beta1.7* #4869, #4401, #4887, #4894, #4889, #2110 + *2.9.0beta1.6* #4867, #4868 + *2.9.0beta1.5* #4858, #4861, #4854 + *2.9.0beta1.4* #4844, #4846, #4847, #4845, #4857 + *2.9.0beta1.3* #4842, #4802, #4838, #4840 + *2.9.0beta1.2* #4835, #4836, fix localization issue, make views configurable + *2.9.0beta1.1* define functions needed for 2.8 -> 2.9 upgrade module + *2.9.0beta1.0* #4776, #4325 #4780, #778, #4773, #4784, #4806, #4811, #4812, #3893 + *2.9.0alpha1.5* #4780, #778, #4773, #4784 + *2.9.0alpha1.4* #4776, #4325, #4780 + *2.9.0alpha1.3* #4734, #4733, #4740, #4741, #4742, #4720, #4962 #4752, #4729, #4756, #4758, #4762, #4543, #4760, #4937, #4771, #4693 + *2.9.0alpha1.2* #4469,#4494,#4526,#4527,#3209,#4509,#4501,#4447,#4545,#1963,#4427,#4566,#4580,#4582,#4583,#4536,#4585,#4587,#4602,#4636,#4643,#4645,#4665,#4667,#4603,#4615,#4616,#4299,#4652,#4682,#4697,#4641,#4621,#4401,#4719,#4482,#4655,#4541,#4680,#4732, + *2.9.0alpha1.1* #4245, #4461 + *2.9.0alpha1.0* bump to 2.9 + *2.8.0.1* #4385 + *2.8.0.0* #4400, #4388, #4185, #4403, #3963, #4411, #4413, #4418 + *2.8.0rc1.3* #4388, #4389 cleanup + *2.8.0rc1.2* #4389 + *2.8.0rc1.1* #4376, #4381, #4382, #4386 + *2.8.0rc1.0* #4366, #4354 + *2.8.0beta2.4* #4179, #4345, #4331, #4339 + *2.8.0beta2.3* #4307, #4253, #4311 + *2.8.0beta2.2* #4307, revert #4306 + *2.8.0beta2.1* #4256, #4299, #4306 + *2.8.0beta2.0* #4247, #4264, #4242, #4086, #4183, #4292 + *2.8.0beta1.3* #4164, #4163, #4106, #4172, #3981, #3914, #3552, #3708, #4134, #4127, #4207, #4188, #4223 Security Vulnerability + *2.8.0beta1.2* #4164 + *2.8.0beta1.1* #4071, #4152, #4158, misc CSS changes + *2.8.0beta1.0* bumping to beta + *2.8.0.0alpha2.1* #4109, #3375, jquery update to 1.4.2 + *2.8.0.0alpha2.0* #4110, #4138, #4135, #1798, #4143, #4144 + *2.8.0.0alpha1.0* #2181, #4110, #3375, #4109, #4123, #4121, #4125, #4126, add jquery.toggleval.js to FreePBX + *2.7.0.0* localizations + *2.7.0RC1.2* #4068 + *2.7.0RC1.1* #4057 + *2.7.0RC1.0* #2839, #3980, #3992, #4024, #4051, #3575 + *2.7.0beta1.0* #3707, #4007, #3940, #3929, #3974 + *2.6.0.1* #3971, #3977, #3900, #3987 + *2.6.0.0* #3885, #3878, #3295, #3883, #3903, #3889 + *2.6.0RC2.1* #3870 + *2.6.0RC2.0* #3854 + *2.6.0RC1.1* #3807, #3843, #3856, #3857 + *2.6.0RC1.0* #3850, #3837, #3858, #3861, #3678 + *2.6.0beta2.2* #3840, misc warning fixes + *2.6.0beta2.1* #2880, #3291, #3835 + *2.6.0beta2.0* #3075, #3780, #3559, #3606, #3599, #3642, #3608, #3581, #3266, #3562, #3639, #3305 + *2.6.0beta1.4* added param to featurecode class function + *2.6.0beta1.3* rename moduleauthor to modulepublisher class in css, update CHANGES + *2.6.0beta1.2* add sql() def to migration table + *2.6.0beta1.1* add trunk migration code to tables.php + *2.6.0beta1.0* renamed to beta1 + *2.6.0beta0.2* packed js library updated + *2.6.0beta0.1* changed to pull from 2.6 branch + *2.6.0beta0.0* #1957, #3673, #1380, #3680, #3694, #3696, #3698 + *2.6.0alpha1.2* fix bug introduced from #3660 + *2.6.0alpha1.1* Friendly Warning re: #3660 + *2.6.0alpha1.0* Security Vulnerability: #3660; #3324, #3327, #3368, #3380, #3224, #3462, #3446, #3469, #3588, #3592, r7324, #3271, #3449, #3556, #3641, #3513, #3525, #3658, #3490, #3582, #3570, #3264 + *2.5.1.0* #3271, #3309, localization fixes + *2.5.0.1* #2792, #3223, #3225, #3235, #3234, #3242, #3246, #3247, #3248, #3221 + *2.5.0.0* #3176, #3191, #3204, #3209 - fixes SECURITY VULNERABILITY in CDR Reporting + *2.5.0rc3.0* #3145, #3151, #3154, #3155, #3156, #3164, #3166, #3165, #3077, #3170 (DAHDI Support) + *2.5.0rc2.4* #3131, #3137 several changes to better cache module data and boost performance of page loads + *2.5.0rc2.3* #2750, #3128, #3124, #3134, #3131 + *2.5.0rc2.2* #3107, #3093, #3090, #3113, $3117 + *2.5.0rc2.1* #3104 fix some urlencoding/decoding re: #3102 changes + *2.5.0rc2.0* #3067, #3086, #3082, #3102 + *2.5.0rc1.1* published wrong, including rc1.0 additions + *2.5.0rc1.0* #2913, #3052 delay_answer schema and CSS fix + *2.5.0beta1.2* #3014, #3030, #2992, #3026, #3027 + *2.5.0beta1.1* #2635, #2792 CDR Reporting pie chart errors, and fix bug introduced by #2963 + *2.5.0beta1.0* #2854, #2978, #2980, #2981, #2982, #2963, #2985 + *2.5.0alpha1.2* #2957 fix fatal failure in retrieve_conf from change to splice + *2.5.0alpha1.1* #2941, #2924, #1539, #2950, #2944, #2945, #2699, #2686, #2946, #2606, #2772, #2565, #1679 + *2.5.0alpha1.0* #1628, #1715, #1843, #2497, #2604, #2606, #2609, #2686, #2701, #2703, #2739, #2766, #2777, #2782, #2784, #2793, #2798, #2799, #2809, #2818, #2829, #2843, #2845, #2855, #2862, #2881, #2890, #2891, #2897, #2903, #2910, #2911, #2921, #2924 + *2.4.0.1* #2843, #2701, #2818, #2784, #2604, #2766, #2798, #2809, #2799, #2685, #2676 + *2.4.0.0* CHANGELOG TRUNCATED See SVN Repository + + + This module provides a facility to install bug fixes to the framework code that is not otherwise housed in a module + + setup + Basic + release/2.9/framework-2.9.0.2.tgz + af1370405b574969e2c07c42221a00b8 + Index: /modules/branches/2.10/framework/install.php =================================================================== --- /modules/branches/2.10/framework/install.php (revision 11484) +++ /modules/branches/2.10/framework/install.php (revision 11484) @@ -0,0 +1,128 @@ +'cp -rf' from src: '$src' to dst: '$dst'...details follow
"; + foreach ($errors as $error) { + echo "$error
"; + } +} + +// These are need to handle 2.8 to 2.9 upgrades +// +if (! function_exists('out')) { + function out($text) { + echo $text."
"; + } +} + +if (! function_exists('outn')) { + function outn($text) { + echo $text; + } +} + +if (! function_exists('error')) { + function error($text) { + echo "[ERROR] ".$text."
"; + } +} + +if (! function_exists('fatal')) { + function fatal($text) { + echo "[FATAL] ".$text."
"; + exit(1); + } +} + +if (! function_exists('debug')) { + function debug($text) { + global $debug; + + if ($debug) echo "[DEBUG-preDB] ".$text."
"; + } +} + +include dirname(__FILE__)."/libfreepbx.install.php"; + +global $amp_conf; +global $asterisk_conf; + +$debug = false; +$dryrun = false; + +/** verison_compare that works with freePBX version numbers + * included here because there are some older versions of functions.inc.php that do not have + * it included as it was added during 2.3.0beta1 + */ +if (!function_exists('version_compare_freepbx')) { + function version_compare_freepbx($version1, $version2, $op = null) { + $version1 = str_replace("rc","RC", strtolower($version1)); + $version2 = str_replace("rc","RC", strtolower($version2)); + if (!is_null($op)) { + return version_compare($version1, $version2, $op); + } else { + return version_compare($version1, $version2); + } + } +} + +/* + * Framework install script + */ + + $htdocs_source = dirname(__FILE__)."/htdocs/*"; + $bin_source = dirname(__FILE__)."/bin/*"; + $agibin_source = dirname(__FILE__)."/agi-bin/*"; + + if (!file_exists(dirname($htdocs_source))) { + out(sprintf(_("No directory %s, install script not needed"),dirname($htdocs_source))); + return true; + } + + // These are required by libfreepbx.install.php library for upgrade routines + // + define("UPGRADE_DIR", dirname(__FILE__)."/upgrades/"); + define("MODULE_DIR", $amp_conf['AMPWEBROOT'].'/modules/'); + + $htdocs_dest = $amp_conf['AMPWEBROOT']; + $bin_dest = isset($amp_conf['AMPBIN']) ? $amp_conf['AMPBIN'] : '/var/lib/asterisk/bin'; + $agibin_dest = isset($asterisk_conf['astagidir']) ? $asterisk_conf['astagidir']:'/var/lib/asterisk/agi-bin'; + + exec("cp -rf $htdocs_source $htdocs_dest 2>&1",$out,$ret); + if ($ret != 0) { + framework_print_errors($htdocs_source, $htdocs_dest, $out); + } + + exec("cp -rf $bin_source $bin_dest 2>&1",$out,$ret); + if ($ret != 0) { + framework_print_errors($bin_source, $bin_dest, $out); + } + + exec("cp -rf $agibin_source $agibin_dest 2>&1",$out,$ret); + if ($ret != 0) { + framework_print_errors($agibin_source, $agibin_dest, $out); + } + + /*TODO: (Requirment for #4733) + * + * 1. Update publish.pl to grab a copy of amportal and put it somehwere. + * 2. If we have access to do an md5sum on AMPSBIN/amportal do it and + * compare to the local copy. + * 3. If the md5sum is different or we couldn't check, put amportal in AMPBIN + * 4. If we decided they need a new one, then write out a message that they + * should run amportal to update it. + */ + + if (function_exists('upgrade_all')) { + upgrade_all(getversion()); + // We run this each time so that we can add settings if need be + // without requiring a major version bump + // + freepbx_settings_init(true); + } else { + echo ("[ERROR] Function: 'upgrade_all' not present, libfreepbx.install.php seems not to be installed
"); + } + +?> Index: /modules/branches/2.10/frameworksvn.pl =================================================================== --- /modules/branches/2.10/frameworksvn.pl (revision 11509) +++ /modules/branches/2.10/frameworksvn.pl (revision 11509) @@ -0,0 +1,33 @@ +#!/usr/bin/perl + +# This script (sculpted from publish.pl) will check the last tarball (which must be there) +# based on the framework xml version number and then run svn log against all updates since +# framework was last published. +# +$rver = "2.9"; +$fwbranch = "branches/2.9"; +$framework = "framework"; + +$moddir = 'framework'; + +my $reldir = "release/"; + + open FH, "$moddir/module.xml"; + $newxml = ""; + $vers = "unset"; + while () { + if ($vers == 'unset' && /(.+)<\/version>/) { $vers = $1; } + $newxml .= $_; + } + close FH; + + die "Don't know version of $moddir" if ($vers eq "unset"); + # Automatically check in any files that were modified but weren't checked into SVN + + # Now we know the version. Get the svnversion.txt from the last update. + $filename = "../../$reldir"."$rver/$framework-$vers.tgz"; + print "CHECKING VERSION: ..... "; + #print "CHECKING VERSION WITH: tar -zxOf $filename $moddir/svnversion.txt: ... "; + system("tar -zxOf ".$filename." ".$moddir."/svnversion.txt"); + print "Geting svn log since that version for $rver : .... \n\n"; + $svnver = system("svn log http://svn.freepbx.org/freepbx/$fwbranch -r `tar -zxOf ".$filename." ".$moddir."/svnversion.txt | sed -e s/SVN\\\ VERSION:// | tr -cd '0-9'`:HEAD"); Index: /modules/branches/2.10/dahdiconfig/uninstall.php =================================================================== --- /modules/branches/2.10/dahdiconfig/uninstall.php (revision 9981) +++ /modules/branches/2.10/dahdiconfig/uninstall.php (revision 9981) @@ -0,0 +1,41 @@ + + * + * This program is free software, distributed under the terms of + * the GNU General Public License Version 2. + * + * 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +global $db; +global $asterisk_conf; + +$tables = array('dahdi_advanced', 'dahdi_configured_locations', 'dahdi_spans', 'dahdi_scans', 'dahdi_analog'); +foreach ($tables as $table) { + $sql = "DROP TABLE IF EXISTS {$table}"; + $result = $db->query($sql); + if (DB::IsError($result)) { + die_freepbx($result->getDebugInfo()); + } + unset($result); +} + +// TODO: make this use $asterisk_conf +`rm -rf /etc/asterisk/chan_dahdi.conf`; +`rm -rf /etc/asterisk/chan_dahdi_groups.conf`; +`rm -rf /etc/asterisk/chan_dahdi_general.conf`; + +// end of file Index: /modules/branches/2.10/dahdiconfig/module.xml =================================================================== --- /modules/branches/2.10/dahdiconfig/module.xml (revision 11729) +++ /modules/branches/2.10/dahdiconfig/module.xml (revision 11729) @@ -0,0 +1,34 @@ + + dahdiconfig + unsupported + setup + Basic + DAHDi Config + 2.9.0.1 + Digium + GPLv2 + yes + yes + + *2.9.0.1* #4921 + *2.9.0.0* #4914, #4915 + *2.8.0.1* dependency set to 2.8 because of dahdi tables + *2.8.0.0* adds hooks into extensions and trunks pages and other fixes and tweaks + *0.1* initial commit + + + 5.1.0 + 2.8.0beta1 + + + /usr/sbin/asterisk + /usr/sbin/dahdi_scan + /usr/sbin/dahdi_genconf + /usr/sbin/dahdi_cfg + + + DAHDi + + release/2.9/dahdiconfig-2.9.0.1.tgz + 2ac53181c4430b2ccaac552097e9e7d9 + Index: /modules/branches/2.10/dahdiconfig/functions.inc.php =================================================================== --- /modules/branches/2.10/dahdiconfig/functions.inc.php (revision 11758) +++ /modules/branches/2.10/dahdiconfig/functions.inc.php (revision 11758) @@ -0,0 +1,1656 @@ + + * + * This program is free software, distributed under the terms of + * the GNU General Public License Version 2. + * + * 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +global $db; + +/** + * DAHDI CONF + * + * This class contains all the functions to configure asterisk via freepbx + */ + class dahdiconfig_conf { + var $cards; + + public function dahdiconfig_conf() { + $this->cards = new dahdi_cards(); + + $this->cards->dahdi_cfg(); + $this->cards->write_modprobe(); + } + + public function get_filename() { + return array('chan_dahdi_general.conf', 'chan_dahdi_groups.conf'); + } + + public function generateConf($file) { + switch($file) { + case 'chan_dahdi_general.conf': + $output = array(); + + if ( ! $this->cards->get_advanced('mwi_checkbox')) { + return ''; + } + + if ($this->cards->get_advanced('mwi') == 'fsk') { + $output[] = "mwimonitor=fsk"; + $output[] = "mwilevel=512"; + $output[] = "mwimonitornotify=__builtin__"; + } else if ($this->cards->get_advanced('mwi') == 'neon') { + $output[] = "mwimonitor=neon"; + $output[] = "mwimonitornotify=__builtin__"; + } + + return implode("\n", $output); + case 'chan_dahdi_groups.conf': + $output = array(); + + foreach ($this->cards->get_spans() as $key=>$span) { + if ($span['signalling'] == '') { + continue; + } + + $output[] = ""; + $output[] = "; [span_{$key}]"; + $output[] = "signalling={$span['signalling']}"; + $output[] = "switchtype={$span['switchtype']}"; + $output[] = "pridialplan={$span['pridialplan']}"; + $output[] = "prilocaldialplan={$span['prilocaldialplan']}"; + $output[] = "group={$span['group']}"; + $output[] = "context={$span['context']}"; + $output[] = "channel=".$this->cards->calc_bchan_fxx($key); + } + + foreach ($this->cards->get_analog_ports() as $num=>$port) { + if ($port['type'] == '') { + continue; + } + + $output[] = ""; + $output[] = "signalling=".(($port['type']=='fxo')?'fxs':'fxo')."_{$port['signalling']}"; + $output[] = "context={$port['context']}"; + if (isset($port['group']) && $port['group'] != 0) { + $output[] = "group={$port['group']}"; + } + $output[] = "channel=>{$num}"; + } + + return implode("\n", $output); + default: + return ''; + } + } + + } + +/** + * DAHDI CARDS + * + * This class contains all the functions necessary to manage DAHDi hardware. + */ +class dahdi_cards { + private $analog_ports = array(); // stores all analog port info + private $advanced = array( // advanced array of values + 'module_name'=>'wctdm24xxp', + 'tone_region'=>'us', + 'opermode_checkbox'=>0, + 'opermode'=>'USA', + 'alawoverride_checkbox'=>0, + 'alawoverride'=>0, + 'fxs_honor_mode_checkbox'=>0, + 'fxs_honor_mode'=>0, + 'boostringer_checkbox'=>0, + 'boostringer'=>0, + 'fastringer_checkbox'=>0, + 'fastringer'=>0, + 'lowpower_checkbox'=>0, + 'lowpower'=>0, + 'ringdetect_checkbox'=>0, + 'ringdetect'=>0, + 'mwi_checkbox'=>0, + 'mwi'=>'none', + 'neon_voltage'=>'', + 'neon_offlimit'=>'', + 'echocan_nlp_type'=>0, + 'echocan_nlp_threshold'=>'', + 'echocan_nlp_max_supp'=>'' ); + private $configured_hdwr = array(); // The hardware already configured + private $channels = array(); + private $chan_dahdi_conf; // /etc/asterisk/chan_dahdi_additional.conf + private $dahdi_scan; // The output of a DAHDi scan + private $detected_hdwr = array(); // Existing hardware on the sys + private $drivers_list = array( // List of available drivers + 'tor2', + 'wcb4xxp', + 'wcfxo', + 'wct1xxp', + 'wct4xxp', + 'wctc4xxp', + 'wctdm24xxp', + 'wctdm', + 'wcte11xp', + 'wcte12xp', + 'wcusb', + 'xpp_usb' ); + private $echocans = array( // List of possible echo cancellers + 'mg2'=>0, + 'kb1'=>1, + 'sec'=>2, + 'sec2'=>3, + 'hpec'=>4 ); + private $error_msg = ''; // The latest error message + private $fxo_ports = array(); + private $fxs_ports = array(); + private $groups = array(); // DAHDi Groups + private $hardware = array(); + private $has_analog_hdwr = FALSE; // If the sys has analog hardware + private $has_vpm = FALSE; // If the sys has echo can + private $has_digital_hdwr = FALSE; // If the sys has digital hardware + private $hdwr_changes = FALSE; // If hardware has changed since last configure + private $module_name = 'wctdm24xxp'; // The module used + private $ports_signalling = array( // The ports signalling + 'ls' => array(), + 'ks' => array() ); + private $spancount = array(); // Per location + private $spans = array(); // The current spans + private $system_conf; // /etc/dahdi/system.conf + + /** + * Constructor + */ + public function dahdi_cards () { + if (!is_file('/etc/dahdi/system.conf')) { + $this->dahdi_genconf(); + } + + $this->load(); + } + + /** + * Calc Bchan Fxx + * + * Calculates the bchan and fxx strings for a given span + */ + public function calc_bchan_fxx($num) { + $span = $this->spans[$num]; + $y = $span['min_ch']; + + if ($span['totchans'] == 3) { + return "$y-".($y+1); + } + + $z = $span['definedchans']; + if ($z === 1) { + return $y; + } + + if (isset($span['signalling']) && $span['signalling'] != "" && (substr($span['signalling'],0,3) !== 'pri')) { + return "$y-".($y+$z); + } + + if ($span['totchans'] <= 24) { + return "$y-".($y+$z-1); + } + + if ($z == 16) { + return "$y-".($y+14).",".($y+16); + } else if ($z < 16) { + return "$y-".($y+$z-1); + } else { + return "$y-".($y+14).",".($y+16)."-".($y+$z-1); + } + } + + /** + * DAHDi Gen Conf + * + * Run dahdi_genconf to generate system.conf + */ + public function dahdi_genconf() { + return `/usr/sbin/dahdi_genconf`; + } + + /** + * DAHDi Config + * + * Run dahdi_cfg + */ + public function dahdi_cfg() { + return `/usr/sbin/dahdi_cfg`; + } + + /** + * Detect Hardware Changes + * + * Compare the known hardware with the current sys hardware and report + * if there are any changes + * + * @access public + * @return bool + */ + public function detect_hdwr_changes() { + if ( count($this->detected_hdwr) != count($this->configured_hdwr)) { + return TRUE; + } + + foreach ($this->detected_hdwr as $location=>$detected) { + if ( ! isset($this->configured_hdwr[$location])) { + return TRUE; + } + + $configured = $this->configured_hdwr[$location]; + + $fields = array('device', 'basechan', 'type'); + foreach ($fields as $fld) { + if ($configured[$fld] == $detected[$fld]) { + continue; + } + + if ($fld == 'analog' && $detected[$fld] == 'analog') { + if (gettype($configured[$fld]) != gettype($detected[$fld])) { + return TRUE; + } else if (count($configured[$fld]) != count($detected[$fld])) { + return TRUE; + } + + + for($i=0; $iadvanced[$param]; + } + + /** + * Get All Advanced + * + * Get all advanced parameters + */ + public function get_all_advanced() { + return $this->advanced; + } + + /** + * Get Analog Ports + * + * Get all analog port info + */ + public function get_analog_ports() { + return $this->analog_ports; + } + + /** + * Get Channels + * + * Get the channels array + * + * @access public + * @return array + */ + public function get_channels() { + return $this->channels; + } + + /** + * Get Hardware + * + * Get the hardware array + * + * @access public + * @return array + */ + public function get_hardware() { + return $this->hardware; + } + + /** + * Get FXO Ports + * + * Get the FXO ports + * + * @access public + * @return array + */ + public function get_fxo_ports() { + return $this->fxo_ports; + } + + /** + * Get FXS Ports + * + * Get the FXS ports + * + * @access public + * @return array + */ + public function get_fxs_ports() { + return $this->fxs_ports; + } + + /** + * Get FX(O|S)LS ports + * + * Get all the FXO and FXS ports with loop start signalling + * + * @access public + * @return array + */ + public function get_ls_ports() { + return $this->ports_signalling['ls']; + } + + /** + * Get Port + * + * Get the Analog Port assoc array that is associated + * with the given port number + */ + public function get_port($num) { + return $this->analog_ports[$num]; + } + + /** + * Get Span Count + * + * Get the span count per location + * + * @access public + * @return array + */ + public function get_span_count($loc) { + return $this->spancount[$loc]; + } + + /** + * Get Spans + * + * Get the digital spans + * + * @access public + * @return array + */ + public function get_spans() { + return $this->spans; + } + + /** + * Get Span + * + * Get a digital span and all its info + */ + public function get_span($num) { + return $this->spans[$num]; + } + + /** + * Has VPM + * + * Return if the cards have a vpm module + */ + public function has_vpm() { + return $this->has_vpm; + } + + /** + * Hardware Changes + * + * Return if hdwr has changed or not + * + * @access public + * @return bool + */ + public function hdwr_changes() { + return $this->hdwr_changes; + } + + /** + * Load + * + * Load all the information the various locations (database, system.conf, chan_dahdi.conf) + */ + public function load() { + global $db; + + $this->read_configured_hdwr(); + $this->read_dahdi_scan(); + + $this->hdwr_changes = $this->detect_hdwr_changes(); + if ($this->hdwr_changes) { + $this->dahdi_genconf(); + $this->dahdi_cfg(); + $this->read_dahdi_scan(); + $this->write_detected(); + $this->write_spans(); + $this->write_analog_signalling(); + } + + $this->read_system_conf(); + $this->read_chan_dahdi_conf(); + $this->read_dahdi_advanced(); + $this->read_dahdi_analog(); + $this->read_dahdi_spans(); + } + + /** + * Read Configured Hardware + * + * Go check out the database and read in the configured hardware + */ + public function read_configured_hdwr() { + global $db; + + $sql = "SELECT * FROM dahdi_configured_locations ORDER BY basechan"; + + $results = $db->getAll($sql, DB_FETCHMODE_ASSOC); + if (DB::IsError($results)) { + die_freepbx($results->getDebugInfo()); + return false; + } + + foreach ($results as $row) { + if ( ! isset($this->configured_hdwr[$row['location']])) { + $this->configured_hdwr[$row['location']] = array(); + } + + $this->configured_hdwr[$row['location']]['device'] = $row['device']; + $this->configured_hdwr[$row['location']]['basechan'] = $row['basechan']; + $this->configured_hdwr[$row['location']]['type'] = $row['type']; + } + } + + /** + * Read DAHDi Advanced + * + * Load all the configuration information in /etc/dahdi/system.conf + */ + public function read_dahdi_advanced() { + global $db; + + $sql = 'SELECT * FROM dahdi_advanced'; + + $results = $db->getAll($sql, DB_FETCHMODE_ASSOC); + if (DB::IsError($results)) { + die_freepbx($results->getDebugInfo()); + return false; + } + + foreach($results as $result) { + $this->advanced[$result['keyword']] = ($result['val']) ? $result['val'] : $result['default_val']; + } + } + + /** + * + * + */ + public function read_dahdi_analog() { + global $db; + + $sql = 'SELECT * FROM dahdi_analog'; + + $results = $db->getAll($sql, DB_FETCHMODE_ASSOC); + if (DB::IsError($results)) { + die_freepbx($results->getDebugInfo()); + return false; + } + + foreach($results as $res) { + $this->analog_ports[$res['port']] = $res; + if ($res['signalling'] == 'ls') { + $this->ports_signalling['ls'][] = $res['port']; + } else { + $this->ports_signalling['ks'][] = $res['port']; + } + } + } + + /** + * Read DAHDi Spans + * + * Read in all the dahdi_spans info from the database + */ + public function read_dahdi_spans() { + global $db; + + $sql = 'SELECT * FROM dahdi_spans'; + + $results = $db->getAll($sql, DB_FETCHMODE_ASSOC); + if (DB::IsError($results)) { + die_freepbx($results->getDebugInfo()); + return false; + } + + foreach ($results as $span) { + foreach ($span as $key=>$val) { + if ($val == '') { + continue; + } + + $this->spans[$span['span']][$key] = $val; + } + } + } + + /** + * Read System Conf + * + * Load all the configuration information in /etc/dahdi/system.conf + */ + public function read_system_conf() { + + $nomore = false; + $ctr = 0; + do { + $this->system_conf = file_get_contents('/etc/dahdi/system.conf'); + if (! $this->system_conf) { + return FALSE; + } + + $lines = explode("\n", $this->system_conf); + + $hasaline = false; + foreach ($lines as $line) { + // its a comment, like this line + if (substr($line,0,1) == '#' || trim($line) == '') { + continue; + } + $hasaline = true; + break; + } + + if ( ! $hasaline) { + $this->dahdi_genconf(); + } + + $ctr++; + if ($ctr > 2) { + $nomore = true; + } + } while ( !$hasaline || $nomore); + + if ( ! $hasaline) { + return false; + } + + for($i=0;$iports_signalling['ks'] = array_merge($this->ports_signalling['ks'], dahdi_chans2array($ks_ports)); + break; + case 'fxols': + case 'fxsls': + $ls_ports = explode('=',$line); + $ls_ports = $ls_ports[1]; + $this->ports_signalling['ls'] = array_merge($this->ports_signalling['ls'], dahdi_chans2array($ls_ports)); + break; + case 'echoc': //echocanceller + $this->has_echo_can = true; + break; + case 'span=': + $info = explode('=', $line); + list($num, $timing, $lbo, $framing, $coding, $yellow) = explode(',', $info[1]); + $this->spans[$num]['timing'] = $timing; + $this->spans[$num]['lbo'] = $lbo; + $this->spans[$num]['framing'] = $framing; + $this->spans[$num]['coding'] = $coding.(($yellow)?"/$yellow":""); + break; + default: + } + } + + // write echo can if it doesn't exist, for ABE only ??? + } + + /** + * Read Chan Dahdi Conf + * + * Read from chan_dahdi_additional.conf and get any useful information + */ + public function read_chan_dahdi_conf() { + global $db; + + $sql = 'SELECT * FROM dahdi WHERE id = -1 AND keyword != "account" AND flags != 1'; + $results = $db->getAll($sql, DB_FETCHMODE_ASSOC); + if (DB::IsError($results)) { + return($results->getMessage()); + } + + $additional = array(); + foreach ($results as $result) { + $additional[$result['keyword']] = $result['data']; + } + + unset($results); + unset($result); + + $sql = 'SELECT * FROM dahdi WHERE keyword != "account" and flags != 1'; + $results = $db->getAll($sql, DB_FETCHMODE_ASSOC); + if (DB::IsError($results)) { + return($results->getMessage()); + } + + $accounts = array(); + foreach ($results as $result) { + if ( ! isset($accounts[$result['id']])) { + $accounts[$result['id']] = array(); + } + + switch($result['keyword']) { + case 'record_in': + case 'record_out': + case 'dial': + break; + default: + $accounts[$result['id']][$result['keyword']] = $result['data']; + } + } + + unset($results); + unset($result); + unset($sql); + + foreach ($accounts as $account) { + $account = array_merge($account, $additional); + $this->channels[$account['channel']] = $account; + } + + $sql = 'SELECT * FROM dahdi_spans'; + $results = $db->getAll($sql, DB_FETCHMODE_ASSOC); + if (DB::IsError($results)) { + die_freepbx($results->getDebugInfo()); + } + + $flds = array('framing', 'signalling', 'coding', 'definedchans', 'switchtype', 'syncsrc', 'lbo', 'pridialplan', 'prilocaldialplan'); + foreach ($results as $span) { + foreach ($flds as $fld) { + if ( ! $span[$fld]) { + continue; + } + + $this->spans[$span['span']][$fld] = $span[$fld]; + } + } + + return true; + } + + /** + * Read DAHDi Scan + * + * Read all the information given in the DAHDi Scan script + */ + public function read_dahdi_scan() { + $this->dahdi_scan = `/usr/sbin/dahdi_scan`; + unset($this->fxo_ports); + unset($this->fxs_ports); + $this->fxo_ports = array(); + $this->fxs_ports = array(); + + $lines = explode("\n", $this->dahdi_scan); + foreach ($lines as $line) { + if ($line == '') { + continue; + } else if (preg_match('/^\[([-a-zA-Z0-9_][-a-zA-Z0-9_]*)\]/', $line, $matches)) { + $cxt = $matches[1]; + $cxts[$cxt] = array(); + continue; + } + + list($var, $val) = explode('=', $line); + + if ($var == 'port' && strpos($val, 'FXO')) { + $num = explode(',',$val); + $num = $num[0]; + $this->fxo_ports[] = $num; + } else if ($var == 'port' && strpos($val, 'FXS')) { + $num = explode(',',$val); + $num = $num[0]; + $this->fxs_ports[] = $num; + } + + if ($var == 'type' && strpos($val,'analog')) { + $this->has_analog_hdwr = TRUE; + } else if ($var == 'type' && strpos($val, 'digital')) { + $this->has_digital_hdwr = TRUE; + } + } + + /* If there is a DAHDI_Dummy then there is no hardware to parse */ + if (isset($cxts)) foreach ($cxts as $cxt) { + if (strpos($cxt['description'],'DAHDI_DUMMY') === false) { + continue; + } + + return; + } + + $spans = dahdi_config2array($this->dahdi_scan); + + if (count($spans) == 0) { + $this->has_digital_hdwr = FALSE; + $this->has_analog_hdwr = FALSE; + return; + } + + foreach ($spans as $key=>$span) { + if (strpos($span['devicetype'], 'VPMADT032') !== FALSE) { + $this->has_vpm = true; + } + + if ($span['type'] == 'analog') { + $this->hardware[$span['location']] = array(); + $this->hardware[$span['location']]['device'] = $span['devicetype']; + $this->hardware[$span['location']]['basechan'] = $span['basechan']; + $this->hardware[$span['location']]['type'] = $span['type']; + + $this->detected_hdwr[$span['location']] = $this->hardware[$span['location']]; + continue; + } + + if (strpos($span['description'], 'ztdummy') !== false) { + continue; + } + + $this->spans[$key] = array(); + foreach ($span as $attr=>$val) { + $this->spans[$key][$attr] = $span[$attr]; + + switch($attr) { + case 'location': + if ( ! isset($this->spancount[$val]) ) { + $this->spancount[$val] = 0; + } + + $this->spancount[$val]++; + + if (!isset($this->hardware[$val]) ) { + $this->hardware[$val] = array(); + $this->hardware[$val]['device'] = $span['devicetype']; + $this->hardware[$val]['basechan'] = $span['basechan']; + $this->hardware[$val]['type'] = $span['type']; + $this->detected_hdwr[$span['location']] = $this->hardware[$span['location']]; + } + break; + case 'totchans': + list($dummy, $this->spans[$key]['spantype']) = explode('-',$span['type']); + $this->spans[$key]['min_ch'] = $span['basechan']; + $this->spans[$key]['max_ch'] = $span['basechan'] + $span['totchans'] - 1; + + switch ($span['totchans']) { + case 3: + $this->spans[$key]['definedchans'] = 2; + $this->spans[$key]['reserved_ch'] = $span['basechan'] + 2; + break; + case 24: + $this->spans[$key]['definedchans'] = 23; + $this->spans[$key]['reserved_ch'] = $span['basechan'] + 23; + break; + case 31: + $this->spans[$key]['definedchans'] = 31; + $this->spans[$key]['reserved_ch'] = $span['basechan'] + 15; + break; + default: + $this->spans[$key]['definedchans'] = 0; + break; + } + break; + case 'lbo': + switch($val){ + case '0 db (CSU)/0-133 feet (DSX-1)': + $this->spans[$key]['lbo'] = 0; + break; + case '133-266 feet (DSX-1)': + $this->spans[$key]['lbo'] = 1; + break; + case '266-399 feet (DSX-1)': + $this->spans[$key]['lbo'] = 2; + break; + case '399-533 feet (DSX-1)': + $this->spans[$key]['lbo'] = 3; + break; + case '533-655 feet (DSX-1)': + $this->spans[$key]['lbo'] = 4; + break; + case '-7.5db (CSU)': + $this->spans[$key]['lbo'] = 5; + break; + case '-15db (CSU)': + $this->spans[$key]['lbo'] = 6; + break; + case '-22.5db (CSU)': + $this->spans[$key]['lbo'] = 7; + break; + default: + $this->spans[$key]['lbo'] = 0; + break; + } + break; + default: + break; + } + } + } + } + + /** + * Set Analog Signalling + * + * Take the port number and signalling (ls/ks) and update the + * ports_signalling array + */ + public function set_analog_signalling($num, $port) { + $opp = ($port['signalling'] == 'ks') ? 'ls' : 'ks'; + $key = array_search($num, $this->ports_signalling[$opp]); + if ($key) { + unset($this->ports_signalling[$opp][$key]); + } + + if ( ! in_array($num, $this->ports_signalling[$port['signalling']])) { + $this->ports_signalling[$port['signalling']][] = $num; + } + + $this->analog_ports[$num]['group'] = $port['group']; + $this->analog_ports[$num]['context'] = $port['context']; + + needreload(); + } + + /** + * Update DAHDi Advanced + * + * Update the database for dahdi advanced and then update the proper files + * + * @access public + * @param array $params An array of parameters + * @return bool + */ + public function update_dahdi_advanced($params) { + global $db; + + foreach ($params as $keyword=>$val) { + if ($val === null) { + $sql = "UPDATE dahdi_advanced SET val=null WHERE keyword=\"{$keyword}\""; + $this->advanced[$keyword] = null; + } else { + $sql = "UPDATE dahdi_advanced SET val=\"{$val}\" WHERE keyword=\"{$keyword}\""; + $this->advanced[$keyword] = $val; + } + $result = $db->query($sql); + if (DB::IsError($result)) { + echo $result->getDebugInfo(); + return false; + } + unset($result); + } + + needreload(); + } + + /** + * Update Span + * + * Update the span info and write it to the appropriate files + */ + public function update_span($editspan) { + $num = $editspan['span']; + + if ($editspan['fac'] == 'CCS/HDB3/CRC4') { + $this->spans[$num]['framing'] = 'CCS/HDB3'; + $this->spans[$num]['coding'] = 'CRC4'; + } else { + list($framing, $coding) = explode('/',$editspan['fac']); + $this->spans[$num]['framing'] = $framing; + $this->spans[$num]['coding'] = $coding; + } + + $this->spans[$num]['fac'] = $editspan['fac']; + $this->spans[$num]['signalling'] = $editspan['signalling']; + $this->spans[$num]['syncsrc'] = $editspan['syncsrc']; + $this->spans[$num]['channels'] = $editspan['channels']; + $this->spans[$num]['switchtype'] = $editspan['switchtype']; + $this->spans[$num]['lbo'] = $editspan['lbo']; + $this->spans[$num]['pridialplan'] = $editspan['pridialplan']; + $this->spans[$num]['prilocaldialplan'] = $editspan['prilocaldialplan']; + $this->spans[$num]['group'] = $editspan['group']; + $this->spans[$num]['context'] = $editspan['context']; + $this->spans[$num]['definedchans'] = $editspan['definedchans']; + + $this->write_spans(); + $this->write_system_conf(); + + needreload(); + } + + /** + * Write Analog Signalling + * + * Take the analog ports and write them to the dahdi_analog table + */ + public function write_analog_signalling() { + global $db; + + $sql = 'TRUNCATE dahdi_analog'; + + $result = $db->query($sql); + if (DB::IsError($result)) { + die_freepbx($result->getDebugInfo()); + } + unset($result); + + $ports = array(); + foreach ($this->fxo_ports as $fxo) { + if (in_array($fxo, $this->ports_signalling['ls'])) { + $sig = 'ls'; + } else { + $sig = 'ks'; + } + + $group = (isset($this->analog_ports[$fxo]['group']))?$this->analog_ports[$fxo]['group']:0; + $context = (isset($this->analog_ports[$fxo]['context']))?$this->analog_ports[$fxo]['context']:'from-analog'; + + $ports[] = "($fxo, 'fxo', '$sig', $group, '$context')"; + } + + foreach ($this->fxs_ports as $fxs) { + if (in_array($fxs, $this->ports_signalling['ls'])) { + $sig = 'ls'; + } else { + $sig = 'ks'; + } + + $group = (isset($this->analog_ports[$fxs]['group']))?$this->analog_ports[$fxs]['group']:0; + $context = (isset($this->analog_ports[$fxs]['context']))?$this->analog_ports[$fxs]['context']:'from-analog'; + + $ports[] = "($fxs, 'fxs', '$sig', $group, '$context')"; + } + + if (sizeof($ports) <= 0) { + return true; + } + + $sql = 'INSERT INTO dahdi_analog (port, type, signalling, `group`, context) VALUES '.implode(', ',$ports); + + $result = $db->query($sql); + if (DB::IsError($result)) { + die_freepbx($result->getDebugInfo()); + } + + $this->write_system_conf(); + + return true; + } + + /** + * Write Detected + * + * Write the detected hardware to the dahdi_configured_locations table + */ + public function write_detected() { + global $db; + + $sql = "TRUNCATE TABLE dahdi_configured_locations"; + $result = $db->query($sql); + if (DB::IsError($result)) { + die_freepbx($result->getDebugInfo()); + } + unset($result); + + $flds = array('location', 'device', 'basechan', 'type'); + $inserts = array(); + foreach ($this->detected_hdwr as $loc=>$hdwr) { + $insert = array(); + foreach ($flds as $fld) { + if ($fld == 'location') { + $insert[] = "'$loc'"; + } else { + $insert[] = "'{$hdwr[$fld]}'"; + } + } + + $inserts[] = '('.implode(', ',$insert).')'; + } + $sql = 'INSERT INTO dahdi_configured_locations ('.implode(', ',$flds).') VALUES '.implode(', ',$inserts); + + $result = $db->query($sql); + if (DB::IsError($result)) { + die_freepbx($result->getDebugInfo()); + } + + return true; + } + + /** + * Write Spans + * + * Write the current spans to the database + */ + public function write_spans() { + global $db; + + $sql = "TRUNCATE dahdi_spans"; + $result = $db->query($sql); + if (DB::IsError($result)) { + die_freepbx($result); + } + unset($result); + + $flds = array('span', 'framing', 'definedchans', 'coding', 'signalling', 'switchtype', 'syncsrc', 'lbo', 'pridialplan', 'prilocaldialplan', 'group', 'context'); + + $sql = 'INSERT INTO dahdi_spans (`'.implode('`, `',$flds).'`) VALUES '; + $inserts = array(); + foreach ($this->spans as $key=>$span) { + $values = array(); + + foreach ($flds as $fld) { + if ($fld == 'span') { + $values[] = "'$key'"; + } else { + $values[] = "'{$span[$fld]}'"; + } + } + + $inserts[] = '('.implode(', ',$values).')'; + unset($values); + } + $sql .= implode(', ', $inserts); + + $result = $db->query($sql); + if (DB::IsError($result)) { + die_freepbx($result->getDebugInfo()); + } + unset($result); + } + + /** + * Write System Conf + * + * Take all the information received and write a new /etc/dahdi/system.conf + */ + public function write_system_conf() { + $fxx = array(); + $output = array(); + $bchan = ''; + $dchan = ''; + $hardhdlc = ''; + + foreach ($this->spans as $num=>$span) { + if ( ! $span['signalling']) { + continue; + } + + $span['fac'] = str_replace('/',',',$span['framing']).','.$span['coding']; + $span['lbo'] = ($span['lbo']) ? $span['lbo'] : 0; + $span['syncsrc'] = (isset($span['syncsrc'])) ? $span['syncsrc'] : 1; + + $spanline = "{$num},{$span['syncsrc']},{$span['lbo']},{$span['fac']}"; + + $output[] = "span={$spanline}"; + + $chan = $this->calc_bchan_fxx($num); + + if ( substr($span['signalling'],0,3) != 'pri' && substr($span['signalling'],0,3) != 'bri') { + if (substr($span['signalling'],0,2) == 'fx') { + $fx = str_replace('_','',$span['signalling']); + } else { + $fx = 'e&m'; + } + + if ($fxx[$fx]) { + $fxx[$fx] .= ",{$chan}"; + } else { + $fxx[$fx] = $chan; + } + } else if (substr($span['signalling'],0,3) == 'pri') { + $bchan .= ($bchan) ? ",$chan" : "$chan"; + $dchan .= ($dchan) ? ",{$span['reserved_ch']}" : "{$span['reserved_ch']}"; + } else { + $bchan .= ($bchan) ? ",$chan" : "$chan"; + $hardhdlc .= ($hardhdlc) ? ",{$span['reserved_ch']}" : "{$span['reserved_ch']}"; + } + + $this->spans[$num]['dahdichanstring'] = $chan; + } + + foreach ($fxx as $e=>$val) { + $output[] = "$e={$val}"; + } + + if ($bchan) { + $output[] = "bchan={$bchan}"; + } + + if ($dchan) { + $output[] = "dchan={$dchan}"; + } + + if ($hardhdlc) { + $output[] = "hardhdlc={$hardhdlc}"; + } + + $fxols = array(); + $fxoks = array(); + $fxsls = array(); + $fxsks = array(); + + foreach ($this->fxo_ports as $fxo) { + if (in_array($fxo, $this->ports_signalling['ls'])) { + $fxols[] = $fxo; + } else { + $fxoks[] = $fxo; + } + } + + foreach ($this->fxs_ports as $fxs) { + if (in_array($fxs, $this->ports_signalling['ls'])) { + $fxsls[] = $fxs; + } else { + $fxsks[] = $fxs; + } + } + + if ($fxols) { + $output[] = "fxsls=".dahdi_array2chans($fxols); + } + if ($fxoks) { + $output[] = "fxsks=".dahdi_array2chans($fxoks); + } + if ($fxsls) { + $output[] = "fxols=".dahdi_array2chans($fxsls); + } + if ($fxsks) { + $output[] = "fxoks=".dahdi_array2chans($fxsks); + } + + $output[] = "loadzone={$this->advanced['tone_region']}"; + $output[] = "defaultzone={$this->advanced['tone_region']}"; + + $fh = fopen('/etc/dahdi/system.conf', 'w'); + $output = implode("\n", $output); + fwrite($fh, $output); + fclose(); + } + + /** + * Write Modprobe + * + * Write all the modprob options to modprobe.conf + */ + public function write_modprobe() { + $file = "/etc/modprobe.d/dahdi.conf"; + + if ( ! is_writable($file)) { + echo "not writable"; + } + + $fh = fopen($file, 'w'); + + fwrite($fh, "#******************************************#\n"); + fwrite($fh, "#* Auto-generated by FreePBX, do not edit *#\n"); + fwrite($fh, "#******************************************#\n"); + + $options = "options {$this->advanced['module_name']}"; + + $opts = array('opermode'=>'opermode', 'alawoverride'=>'alawoverride', 'boostringer'=>'boostringer', 'lowpower'=>'lowpower', 'fastringer'=>'fastringer', 'ringdetect'=>'fwringdetect', 'fxs_honor_mode'=>'fxshonormode'); + foreach ($opts as $opt=>$name) { + if ( ! $this->advanced["{$opt}_checkbox"]) { + continue; + } + + $options .= " {$name}={$this->advanced[$opt]}"; + } + + if ($this->advanced["mwi_checkbox"]) { + if ($this->advanced['mwi'] == 'neon') { + $options .= " neonmwi_monitor=1"; + if ($this->advanced['neon_voltage']) { + $options .= " neonmwi_level={$this->advanced['neon_voltage']}"; + } + if ($this->advanced['neon_offlimit']) { + $options .= " neonmwi_offlimit={$this->advanced['neon_offlimit']}"; + } + } else { + $options .= " neonmwi_monitor=0"; + } + } + + $opts = array('echocan_nlp_type'=>'vpmnlptype', 'echocan_nlp_threshold'=>'vpmnlpthresh', 'echocan_nlp_max_supp'=>'vpmnlpmaxsupp'); + foreach ($opts as $adv=>$opt) { + if ( ! $this->advanced[$adv]) { + continue; + } + + $options .= " {$opt}={$this->advanced[$adv]}"; + } + + fwrite($fh,$options); + fclose($fh); + } +} + +function dahdi_config2array ($config) { + if (! is_array($config)) { + $config = explode("\n", $config); + } + + $cxts = array(); + $cxt = ''; + + unset($config[count($config)-1]); + + for($i=0;$i 0) { + $chans[] = "{$arr[$i-1-$seq]}-{$arr[$i-1]}"; + $seq = 0; + } else if ($i != 0) { + $chans[] = "$arr[$i]"; + } + + if ( !$last_write && $i+1 == count($arr)) { + $chans[] = "$arr[$i]"; + } + } + + return implode(',',$chans); +} + +// list unused DAHDI fxs channels that can be configured for extensions +// +function dahdiconfig_get_unused_fxs_channels($current_device='') { + $all_channels = sql('SELECT * FROM dahdi_analog WHERE type = "fxs"','getAll',DB_FETCHMODE_ASSOC); + $used_channels = sql('SELECT id device, data port FROM dahdi WHERE keyword = "channel"','getAll',DB_FETCHMODE_ASSOC); + $used_channels_hash = array(); + foreach ($used_channels as $chan) { + $used_channels_hash[$chan['port']] = $chan['device']; + } + + $avail_channels = array(); + foreach ($all_channels as $chan) { + if (isset($used_channels_hash[$chan['port']])) { + if ($current_device == $used_channels_hash[$chan['port']]) { + $selected = true; + } else { + continue; + } + } else { + $selected = false; + } + $avail_channels[] = array('channel' => $chan['port'], 'signalling' => 'fxo_'.$chan['signalling'], 'selected' => $selected); + } + return $avail_channels; +} + +function _dahdiconfig_gsort($a, $b) { + $gn_a = substr($a,1); + $gn_b = substr($b,1); + if ($gn_a == $gn_b) { + return ($b > $a); + } else { + return ($gn_a > $gn_b); + } +} + +function dahdiconfig_get_unused_trunk_options($current_identifier='') { + global $amp_conf; + $avail_group = array(); + $analog_chan = array(); + $digital_chan = array(); + + $dahdi_cards = new dahdi_cards(); + $analog_ports = $dahdi_cards->get_fxo_ports(); + + // Get Analog Groups and Channels for FXO + // + foreach ($analog_ports as $port) { + $port_details = $dahdi_cards->get_port($port); + $grp = $port_details['group']; + $chan = (string) $port_details['port']; + $avail_group["g$grp"] = array('identifier' => "g$grp",'name' => "Group $grp Ascending",'alarms' => '','selected' => ($current_identifier == "g$grp")); + $avail_group["G$grp"] = array('identifier' => "G$grp",'name' => "Group $grp Descending",'alarms' => '','selected' => ($current_identifier == "G$grp")); + $analog_chan[$chan] = array('identifier' => $chan, 'name' => "Analog Channel $chan",'alarms' => '','selected' => ($current_identifier == $chan)); + } + // Get Digital Groups and Channels. Channels are not that useful + // but can be helpful when testing bad channels + // + $digital_spans = $dahdi_cards->get_spans(); + foreach ($digital_spans as $span) { + if (!$span['active']) { + continue; + } + $grp = $span['group']; + $alarms = $span['alarms']; + if (!isset($avail_group["g$grp"])) { + $avail_group["g$grp"] = array('identifier' => "g$grp",'name' => "Group $grp Ascending",'alarms' => $alarms,'selected' => ($current_identifier == "g$grp")); + $avail_group["G$grp"] = array('identifier' => "G$grp",'name' => "Group $grp Descending",'alarms' => $alarms,'selected' => ($current_identifier == "G$grp")); + } else { + //TODO: figure out the possible alarms and the create proper hiearchy of what to report + // + if ($alarms == 'RED' || $avail_group["g$grp"]['alarms'] == '') { + $avail_group["g$grp"]['alarms'] = $alarms; + $avail_group["G$grp"]['alarms'] = $alarms; + } + } + if ($amp_conf['DAHDISHOWDIGITALCHANS']) { + $basechan = $span['basechan']; + $definedchans = $span['definedchans']; + $topchan = $basechan + $definedchans; + for ($port = $basechan; $port < $topchan; $port++) { + $digital_chan["$port"] = array('identifier' => "$port", 'name' => "Digital Channel $port",'alarms' => $alarms,'selected' => ($current_identifier == "$port")); + } + } + } + uksort($avail_group,'_dahdiconfig_gsort'); + ksort($analog_chan); + if ($amp_conf['DAHDISHOWDIGITALCHANS']) { + ksort($digital_chan); + $avail_identifiers = $avail_group + $analog_chan + $digital_chan; + } else { + $avail_identifiers = $avail_group + $analog_chan; + } + $trunk_list = core_trunks_listbyid(); + foreach ($trunk_list as $trunk) { + if ($trunk['tech'] != 'dahdi' || $trunk['channelid'] == $current_identifier) { + continue; + } + unset($avail_identifiers[$trunk['channelid']]); + } + return ($avail_identifiers); +} + +function dahdiconfig_configpageinit($dispnum) { +global $currentcomponent; +switch ($dispnum) { + case 'devices': + case 'extensions': + // if tech_hardware set, this is an initial extension/device creation + // otherwise, determine if the target extension/device is DAHDI + // + if (isset($_REQUEST['tech_hardware']) && $_REQUEST['tech_hardware'] == 'dahdi_generic') { + $extdisplay = ''; + } else { + if (!isset($_REQUEST['extdisplay']) || $_REQUEST['extdisplay'] == '') { + return true; + } + $extdisplay = $_REQUEST['extdisplay']; + $device_info = core_devices_get($extdisplay); + if (empty($device_info) || $device_info['tech'] != 'dahdi') { + return true; + } + } + + $channel_select = dahdiconfig_get_unused_fxs_channels($extdisplay); + $currentcomponent->addoptlistitem('dahdi_channel_select', '', _('==Choose==')); + foreach ($channel_select as $val) { + $currentcomponent->addoptlistitem('dahdi_channel_select', $val['channel'].':'.$val['signalling'], $val['channel']); + } + $currentcomponent->setoptlistopts('dahdi_channel_select', 'sort', false); + break; + case 'trunks': + if (isset($_REQUEST['tech']) && strtolower($_REQUEST['tech']) == 'dahdi') { + $extdisplay = ''; + $_REQUEST['dahdi_current_channel'] = ''; + } else { + if (!isset($_REQUEST['extdisplay']) || $_REQUEST['extdisplay'] == '') { + return true; + } + $extdisplay = $_REQUEST['extdisplay']; + $trunknum = ltrim($extdisplay,'OUT_'); + $trunk_details = core_trunks_getDetails($trunknum); + $tech = $trunk_details['tech']; + if ($tech != 'dahdi') { + return true; + } + $_REQUEST['dahdi_current_channel'] = $trunk_details['channelid']; + } + // dahdiconfig_hook_core will see this and create the needed selelect structure + // + $_REQUEST['display_dahdi_select'] = 'true'; + break; + default; + return true; + break; + } + $currentcomponent->addguifunc("dahdiconfig_{$dispnum}_configpageload"); +} + +function dahdiconfig_hook_core($viewing_itemid, $target_menuid) { + global $tabindex; + $html = ''; + if ($target_menuid == 'trunks' && isset($_REQUEST['display_dahdi_select']) && $_REQUEST['display_dahdi_select'] == 'true') { + + // TODO: If list is exhausted, write message that no options left + // + $avail_trunks = dahdiconfig_get_unused_trunk_options($_REQUEST['dahdi_current_channel']); + if (!empty($avail_trunks)) { + $html = ' + + + ' . _("DAHDI Trunks") . '' . _("Available DAHDI Groups and Channels configued in the DAHDI Configuration Module") . ': + + + + + + "; + } else { + $html .= ' + + + ' . _("No Available Groups or Channels") . '' . _("There are no DAHDI Groups or Channels available to be configured. Check the DAHDI module (linked below) to configure any un-used cards") . ' + + + '; + } + + $URL = $_SERVER['PHP_SELF'].'?'.'display=dahdi'; + $html .= ' + + + + ' . _("Configure/Edit DAHDI Cards") . '' . _("Configure/Edit DAHDI Card settings in DAHDi Module") . ' + + + '; + } + return $html; +} + +//hook gui function +// +function dahdiconfig_devices_configpageload() { + dahdiconfig_configpageload('device'); +} +function dahdiconfig_extensions_configpageload() { + dahdiconfig_configpageload('extension'); +} +function dahdiconfig_configpageload($mode) { + global $currentcomponent; + + $extdisplay = isset($_REQUEST['extdisplay'])?$_REQUEST['extdisplay']:null; + + $dahdi_channel_select = $currentcomponent->getoptlist('dahdi_channel_select'); + if (!empty($dahdi_channel_select)) { + // Generate Channel Select, on submit populuate device channel, dial and signalling fields + $currentcomponent->addguielem('Device Options', new gui_selectbox( + 'dahdi_channel', + $dahdi_channel_select, + '', + _('Channel'), + sprintf(_('Choose the FXS channel for this %s'),$mode), + false, + "javascript:if (document.frm_{$mode}s.dahdi_channel.value) {parts = document.frm_{$mode}s.dahdi_channel.value.split(':');document.frm_{$mode}s.devinfo_channel.value = parts[0];document.frm_{$mode}s.devinfo_dial.value = 'DAHDI/'+parts[0];document.frm_{$mode}s.devinfo_signalling.value = parts[1]; } else { document.frm_{$mode}s.devinfo_channel.value = ''}" + )); + + // On pageload hide channel, signalling and dial fields and select dahdi_channel based on channel field's contents + $js = ''; + $currentcomponent->addguielem('Device Options', new guielement('dahdi-chan-html', $js, '')); + } else { + // No available channels so display that and hide channel, signalling and dial fields + $currentcomponent->addguielem('Device Options', new gui_label('no_dahdi_channel', _('No Unused DAHDi Channels Available'))); + $js = ''; + $currentcomponent->addguielem('Device Options', new guielement('dahdi-chan-html', $js, '')); + } +} + +function dahdiconfig_trunks_configpageload() { + global $currentcomponent; + $extdisplay = isset($_REQUEST['extdisplay'])?$_REQUEST['extdisplay']:null; + + $js = ' + '; + $currentcomponent->addguielem('_top', new guielement('dahdi-chan-html', $js, '')); +} +// End of File Index: /modules/branches/2.10/dahdiconfig/page.dahdi.php =================================================================== --- /modules/branches/2.10/dahdiconfig/page.dahdi.php (revision 9982) +++ /modules/branches/2.10/dahdiconfig/page.dahdi.php (revision 9982) @@ -0,0 +1,167 @@ + + * + * This program is free software, distributed under the terms of + * the GNU General Public License Version 2. + * + * 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +$dahdi_cards = new dahdi_cards(); + +$page = $_GET['dahdi_form']; +$reboot = ((isset($_GET['reboot'])) ? $_GET['reboot'] : false ); +$error = array(); + +/** + * The following if statements check for when a form has been submitted. There + * are 3 possible forms: advanced, analog, and digital (span). These conditions + * check for each form's submit button value. If none are true, then no form + * has been submitted. Depending on if the information and updating are + * successful, $_GET['dahdi_form'] will be changed to reflect which page to + * load. Properly submitted forms that update properly will result in returning + * to the default dahdi page. Errors with values or updating will result in + * returning to the form page with the submitted information auto-filled. + */ +if ($_POST['advanced_submit']) { + + $adv = array(); + foreach ($dahdi_cards->get_all_advanced() as $k=>$v) { + if ( ! isset($_POST[$k])) { + if (strpos($k, 'checkbox')) { + $adv[$k] = 0; + } else { + $adv[$k] = $v; + } + continue; + } + + $adv[$k] = $_POST[$k]; + } + + $g2g = true; + if (preg_match('/\w\w*/', $adv['module_name']) == 0) { + $error['module_name'] = "Module name is invalid."; + $g2g = false; + } + + if ($g2g) { + $dahdi_cards->update_dahdi_advanced($adv); + $dahdi_cards->read_dahdi_advanced(); + $dahdi_cards->write_modprobe(); + $dahdi_cards->write_system_conf(); + $page = ''; + } + +} else if ($_POST['editanalog_submit']) { + $type = $_POST['type']; + + $spans = ($type == 'fxo') ? $dahdi_cards->get_fxo_ports() : $dahdi_cards->get_fxs_ports(); + foreach ($spans as $span) { + $port = array(); + $port['signalling'] = $_POST["port_{$span}"]; + $port['group'] = ($_POST["port_{$span}_group"])?$_POST["port_{$span}_group"]:0; + $port['context'] = $_POST["port_{$span}_context"]; + $dahdi_cards->set_analog_signalling($span, $port); + unset($port); + } + + $dahdi_cards->write_analog_signalling(); + + $page = ''; + +} else if ($_POST['editspan_submit']) { + + $editspan = array(); + + $vars = array('span', 'fac', 'channels', 'signalling', 'switchtype', 'syncsrc', 'lbo', 'pridialplan', 'prilocaldialplan', 'group', 'context', 'definedchans'); + foreach ($vars as $var) { + $editspan[$var] = $_POST['editspan_'.$var]; + } + + $dahdi_cards->update_span($editspan); + + + $page = ''; + +} else if (isset($_POST['advanced_cancel']) || isset($_POST['editanalog_cancel']) || isset($_POST['editspan_cancel'])) { + $page = ''; +} +?> + + + + +
For your hardware changes to take effect, you need to reboot your system!
+ + +

No Span specified

+ get_span($_GET['span']); + require 'modules/dahdiconfig/views/dahdi_digital_span_form.php'; + break; +case 'analog_signalling': + require 'modules/dahdiconfig/views/dahdi_analog_signalling_form.php'; + break; +default: + if ($dahdi_cards->hdwr_changes()): ?> +
You have new hardware! Please configure your new hardware using the Edit button(s).
+ +
+ +
+
+ +
+
+ +
+ + * + * This program is free software, distributed under the terms of + * the GNU General Public License Version 2. + * + * 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +global $db; +global $amp_conf; +global $asterisk_conf; + +if (! function_exists('out')) { + function out ($text) { + echo $text."
"; + } +} + +if (! function_exists('outn')) { + function outn ($text) { + echo $text; + } +} + +$sql = "CREATE TABLE IF NOT EXISTS dahdi_advanced ( + `keyword` VARCHAR(50) NOT NULL PRIMARY KEY, + `val` VARCHAR(255), + `default_val` VARCHAR(255) +);"; + +$result = $db->query($sql); +if (DB::IsError($result)) { + die_freepbx($result->getDebugInfo()); +} +unset($result); + +$entries = array( + 'module_name'=>'wctdm24xxp', + 'tone_region'=>'us', + 'opermode_checkbox'=>0, + 'opermode'=>'USA', + 'alawoverride_checkbox'=>0, + 'alawoverride'=>0, + 'fxs_honor_mode_checkbox'=>0, + 'fxs_honor_mode'=>0, + 'boostringer_checkbox'=>0, + 'boostringer'=>0, + 'lowpower_checkbox'=>0, + 'lowpower'=>0, + 'fastringer_checkbox'=>0, + 'fastringer'=>0, + 'ringdetect_checkbox'=>0, + 'ringdetect'=>0, + 'mwi_checkbox'=>0, + 'mwi'=>'none', + 'neon_voltage'=>'', + 'neon_offlimit'=>'', + 'echocan_nlp_type'=>0, + 'echocan_nlp_threshold'=>'', + 'echocan_nlp_max_supp'=>'' +); + +foreach ($entries as $entry=>$default_val) { + $sql = "INSERT INTO dahdi_advanced (keyword, default_val) VALUES ('{$entry}', '{$default_val}')"; + + $result = $db->query($sql); + if (DB::IsError($result)) { + unset($result); + continue; + } + + unset($result); +} + +$sql = "CREATE TABLE IF NOT EXISTS dahdi_spans ( + `id` INT UNSIGNED NOT NULL PRIMARY KEY auto_increment, + `span` INT UNSIGNED NOT NULL, + `active` BOOL DEFAULT 1, + `alarms` VARCHAR(15), + `basechan` INT UNSIGNED, + `coding` VARCHAR(10), + `coding_opts` VARCHAR(255), + `context` VARCHAR(255), + `definedchans` INT UNSIGNED, + `description` VARCHAR (255), + `devicetype` VARCHAR(255), + `framing` VARCHAR(10), + `framing_opts` VARCHAR(255), + `group` INT UNSIGNED, + `irq` VARCHAR(10), + `lbo` INT UNSIGNED, + `location` VARCHAR(255), + `name` VARCHAR(25), + `manufacturer` VARCHAR (25) DEFAULT 'Digium', + `max_ch` INT UNSIGNED, + `min_ch` INT UNSIGNED, + `pridialplan` VARCHAR(25), + `prilocaldialplan` VARCHAR(25), + `reserved_ch` INT UNSIGNED, + `signalling` VARCHAR(50), + `spantype` VARCHAR(10), + `switchtype` VARCHAR(50), + `syncsrc` INT UNSIGNED, + `timing` INT UNSIGNED, + `totchans` INT UNSIGNED, + `type` VARCHAR(25) +);"; + +$result = $db->query($sql); +if (DB::IsError($result)) { + die_freepbx($result->getDebugInfo()); +} +unset($result); + +$sql = "CREATE TABLE IF NOT EXISTS dahdi_analog ( + `port` INT UNIQUE, + `type` ENUM ('fxo', 'fxs'), + `signalling` ENUM ('ks', 'ls'), + `group` INT UNSIGNED, + `context` VARCHAR(255) +);"; + +$result = $db->query($sql); +if (DB::IsError($result)) { + die_freepbx($result->getDebugInfo()); +} +unset($result); + +$sql = "CREATE TABLE IF NOT EXISTS dahdi_configured_locations ( + `location` VARCHAR(50), + `device` VARCHAR(50), + `basechan` INT, + `type` VARCHAR(25) +);"; + +$result = $db->query($sql); +if (DB::IsError($result)) { + die_freepbx($result->getDebugInfo()); +} +unset($result); + +$freepbx_conf =& freepbx_conf::create(); + +// DAHDISHOWDIGITALCHANS +// +$set['value'] = false; +$set['defaultval'] =& $set['value']; +$set['readonly'] = 0; +$set['hidden'] = 0; +$set['level'] = 0; +$set['module'] = 'dahdiconfig'; +$set['category'] = 'DAHDi Configuration Module'; +$set['emptyok'] = 0; +$set['name'] = 'Allow PRI Discrete Channels'; +$set['description'] = 'DAHDi trunk configuration is normally done using groups for PRI configuration. If there is a need to configure trunks to specific channels, setting this to true will allow each channel to be configured. This can be useful when troubleshooting a PRI and trying to isolate a bad B Channel.'; +$set['type'] = CONF_TYPE_BOOL; +$freepbx_conf->define_conf_setting('DAHDISHOWDIGITALCHANS',$set,true); + +//end of file Index: /modules/branches/2.10/dahdiconfig/views/dahdi_digital_span_form.php =================================================================== --- /modules/branches/2.10/dahdiconfig/views/dahdi_digital_span_form.php (revision 9981) +++ /modules/branches/2.10/dahdiconfig/views/dahdi_digital_span_form.php (revision 9981) @@ -0,0 +1,145 @@ +
+

Span:

+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+ + +
+ +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + + From: + Reserved: +
+
+ + +
+
+ Index: /modules/branches/2.10/dahdiconfig/views/dahdi_advanced_settings.php =================================================================== --- /modules/branches/2.10/dahdiconfig/views/dahdi_advanced_settings.php (revision 9981) +++ /modules/branches/2.10/dahdiconfig/views/dahdi_advanced_settings.php (revision 9981) @@ -0,0 +1,265 @@ +

Advanced Settings

+
+
+ + + +
+ + +
+
+ + get_advanced('opermode_checkbox'))?'checked':''?> /> + +
+ +
+ + get_advanced('fxs_honor_mode_checkbox'))?'checked':''?> /> + +
+ + + + + +
get_advanced['mwi'] != 'neon') ? ' style="display:none;"' : "")?>> + +
+ + +
+
has_vpm())? ' style="display:none;"': "")?>> + + + +
+
+ + +
+
+ + Index: /modules/branches/2.10/dahdiconfig/views/dahdi_digital_hardware.php =================================================================== --- /modules/branches/2.10/dahdiconfig/views/dahdi_digital_hardware.php (revision 9981) +++ /modules/branches/2.10/dahdiconfig/views/dahdi_digital_hardware.php (revision 9981) @@ -0,0 +1,32 @@ +

Digital Hardware

+
+ + + + + + + + + + + + + get_spans() as $key=>$span) { + $name_split = explode('/', $span['name']); + $devicetype = $span['devicetype']; + $name = "{$devicetype}, Card ".($name_split[1]+1)." - Port {$name_split[2]} (span_{$key})"; + ?> + "> + + + + + + + + + +
SpanAlarmsFraming/CodingChannels Used/TotalSignallingAction
Edit
Index: /modules/branches/2.10/dahdiconfig/views/dahdi_analog_signalling_form.php =================================================================== --- /modules/branches/2.10/dahdiconfig/views/dahdi_analog_signalling_form.php (revision 9981) +++ /modules/branches/2.10/dahdiconfig/views/dahdi_analog_signalling_form.php (revision 9981) @@ -0,0 +1,37 @@ +

Analog Ports

+
+
+ +
+get_fxo_ports() : $dahdi_cards->get_fxs_ports(); + foreach ($spans as $p): ?> + get_port($p); ?> +
+ Port : + + Group: + + + Context: + + +
+ +
+
+ + +
+
+ Index: /modules/branches/2.10/dahdiconfig/views/dahdi_analog_hardware.php =================================================================== --- /modules/branches/2.10/dahdiconfig/views/dahdi_analog_hardware.php (revision 9981) +++ /modules/branches/2.10/dahdiconfig/views/dahdi_analog_hardware.php (revision 9981) @@ -0,0 +1,27 @@ +

Analog Hardware

+
+ + + + + + + + + + get_fxo_ports(); + $fxs = $dahdi_cards->get_fxs_ports(); + ?> + + + + + + + + + + + +
TypePortsAction
FXO PortsEdit':'')?>
FXS PortsEdit':'')?>
Index: /modules/branches/2.10/fw_langpacks/i18n/sv_SE/LC_MESSAGES/fw_langpacks.po =================================================================== --- /modules/branches/2.10/fw_langpacks/i18n/sv_SE/LC_MESSAGES/fw_langpacks.po (revision 9947) +++ /modules/branches/2.10/fw_langpacks/i18n/sv_SE/LC_MESSAGES/fw_langpacks.po (revision 9947) @@ -0,0 +1,67 @@ +# This file is part of FreePBX. +# +# FreePBX 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. +# +# FreePBX 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 FreePBX. If not, see . +# +# FreePBX Swedish language for fw_langpacks +# Copyright (C) 2009, 2010 Mikael Carlsson +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-06-22 19:14+0200\n" +"PO-Revision-Date: 2008-09-13 23:07+0100\n" +"Last-Translator: Mikael Carlsson \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Swedish\n" +"X-Poedit-Country: SWEDEN\n" + +msgid "FreePBX Localization Updates" +msgstr "FreePBX sprÃ¥kuppdatering" + +msgid "Basic" +msgstr "AllmÀnt" + +msgid "" +"This module provides a facility to install new and updated localization " +"translations for all components in FreePBX. Localization i18n translations " +"are still kept with each module and other components such as the User Portal " +"(ARI). This provides an easy ability to bring all components up-to-date " +"without the need of publishing dozens of modules for every minor change. The " +"localization updates used will be the latest available for all modules and " +"will not consider the current version you are running." +msgstr "" +"Denna modul installerar nya och uppdaterade översÀttningar för alla komponeneter " +"i FreePBX. ÖversÀttningar finns fortfarande i varje modul och i andra komponenter " +"sÃ¥som ARI. Denna modul gör det enkelt att uppdatera översÀttningar utan att publicera " +"uppdatering för moduler" + +#, php-format +msgid "No directory %s, install script not needed" +msgstr "Ingen katalog %s, installationsskriptet behövs ej" + +#, php-format +msgid "Preparing to copy %s to %s" +msgstr "Förbereder att kopiera %s till %s" + +#, php-format +msgid "No destination directory %s to copy %s to" +msgstr "Ingen destionationsmapp %s att kopiera %s till" + +#, php-format +msgid "Updated %s" +msgstr "Uppdaterade %s" Index: /modules/branches/2.10/fw_langpacks/i18n/bg_BG/LC_MESSAGES/fw_langpacks.po =================================================================== --- /modules/branches/2.10/fw_langpacks/i18n/bg_BG/LC_MESSAGES/fw_langpacks.po (revision 9947) +++ /modules/branches/2.10/fw_langpacks/i18n/bg_BG/LC_MESSAGES/fw_langpacks.po (revision 9947) @@ -0,0 +1,51 @@ +# 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 , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX v2.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-06-22 19:14+0200\n" +"PO-Revision-Date: 2008-11-08 17:56+0200\n" +"Last-Translator: \n" +"Language-Team: Chavdar Iliev \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Bulgarian\n" +"X-Poedit-Country: BULGARIA\n" +"X-Poedit-SourceCharset: utf-8\n" + +msgid "FreePBX Localization Updates" +msgstr "ОбМПвяваМе Ма ПревПЎО" + +msgid "Basic" +msgstr "" + +msgid "" +"This module provides a facility to install new and updated localization " +"translations for all components in FreePBX. Localization i18n translations " +"are still kept with each module and other components such as the User Portal " +"(ARI). This provides an easy ability to bring all components up-to-date " +"without the need of publishing dozens of modules for every minor change. The " +"localization updates used will be the latest available for all modules and " +"will not consider the current version you are running." +msgstr "" + +#, php-format +msgid "No directory %s, install script not needed" +msgstr "" + +#, php-format +msgid "Preparing to copy %s to %s" +msgstr "ППЎгПтПвка за кПпОраМе Ма %s в %s" + +#, php-format +msgid "No destination directory %s to copy %s to" +msgstr "НяЌа такава ЎОректПрОя %s за кПпОраМе Ма %s" + +#, php-format +msgid "Updated %s" +msgstr "ОбМПвеМО %s" Index: /modules/branches/2.10/fw_langpacks/i18n/fw_langpacks.pot =================================================================== --- /modules/branches/2.10/fw_langpacks/i18n/fw_langpacks.pot (revision 11797) +++ /modules/branches/2.10/fw_langpacks/i18n/fw_langpacks.pot (revision 11797) @@ -0,0 +1,61 @@ +# This file is part of FreePBX. +# +# FreePBX 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. +# +# FreePBX 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 FreePBX. If not, see . +# +# FreePBX language template for fw_langpacks +# Copyright (C) 2008, 2009, 2010, 2011 Bandwith.com +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-10 22:46+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "FreePBX Localization Updates" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "" +"This module provides a facility to install new and updated localization " +"translations for all components in FreePBX. Localization i18n translations " +"are still kept with each module and other components such as the User Portal " +"(ARI). This provides an easy ability to bring all components up-to-date " +"without the need of publishing dozens of modules for every minor change. The " +"localization updates used will be the latest available for all modules and " +"will not consider the current version you are running." +msgstr "" + +#, php-format +msgid "No directory %s, install script not needed" +msgstr "" + +#, php-format +msgid "Preparing to copy %s to %s" +msgstr "" + +#, php-format +msgid "No destination directory %s to copy %s to" +msgstr "" + +#, php-format +msgid "Updated %s" +msgstr "" Index: /modules/branches/2.10/fw_langpacks/i18n/it_IT/LC_MESSAGES/fw_langpacks.po =================================================================== --- /modules/branches/2.10/fw_langpacks/i18n/it_IT/LC_MESSAGES/fw_langpacks.po (revision 9947) +++ /modules/branches/2.10/fw_langpacks/i18n/it_IT/LC_MESSAGES/fw_langpacks.po (revision 9947) @@ -0,0 +1,50 @@ +# 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 , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: 2.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-06-22 19:14+0200\n" +"PO-Revision-Date: 2008-11-10 14:36+0100\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" +"X-Poedit-Language: Italian\n" +"X-Poedit-Country: ITALY\n" + +msgid "FreePBX Localization Updates" +msgstr "" + +msgid "Basic" +msgstr "" + +msgid "" +"This module provides a facility to install new and updated localization " +"translations for all components in FreePBX. Localization i18n translations " +"are still kept with each module and other components such as the User Portal " +"(ARI). This provides an easy ability to bring all components up-to-date " +"without the need of publishing dozens of modules for every minor change. The " +"localization updates used will be the latest available for all modules and " +"will not consider the current version you are running." +msgstr "" + +#, php-format +msgid "No directory %s, install script not needed" +msgstr "" + +#, php-format +msgid "Preparing to copy %s to %s" +msgstr "Preparazione della copia di %s su %s" + +#, php-format +msgid "No destination directory %s to copy %s to" +msgstr "Nessuna directory di destinazione %s per copiarci %s" + +#, php-format +msgid "Updated %s" +msgstr "Aggiornato %s" Index: /modules/branches/2.10/fw_langpacks/i18n/ru_RU/LC_MESSAGES/fw_langpacks.po =================================================================== --- /modules/branches/2.10/fw_langpacks/i18n/ru_RU/LC_MESSAGES/fw_langpacks.po (revision 11966) +++ /modules/branches/2.10/fw_langpacks/i18n/ru_RU/LC_MESSAGES/fw_langpacks.po (revision 11966) @@ -0,0 +1,58 @@ +# Russian freePBX ver. translation +# Copyright (c) 2006-2008 PostMet Corporation +# This file is distributed under the same license as the freePBX package. +# Alexander Kozyrev , Sergey Nikolayev , 2006-2011. +# +# iconv fw_langpacks.new -f UTF-8 -t ISO-8859-5 -o fw_langpacks.po +# fuzzy +msgid "" +msgstr "" +"Project-Id-Version: 1.3\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-06-22 19:14+0200\n" +"PO-Revision-Date: 2011-04-06 16:38+0100\n" +"Last-Translator: Alexander Kozyrev \n" +"Language-Team: Russian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-5\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "FreePBX Localization Updates" +msgstr "ŸÑÝÞÒÛÕÝØï ÛÞÚÐÛØ×ÐæØØ ÔÛï FreePBX" + +msgid "Basic" +msgstr "±Ð×Ð" + +msgid "" +"This module provides a facility to install new and updated localization " +"translations for all components in FreePBX. Localization i18n translations " +"are still kept with each module and other components such as the User Portal " +"(ARI). This provides an easy ability to bring all components up-to-date " +"without the need of publishing dozens of modules for every minor change. The " +"localization updates used will be the latest available for all modules and " +"will not consider the current version you are running." +msgstr "" +"ÍâÞâ ÜÞÔãÛì ßÞÜÞÓÐÕâ ÞÑÝÞÒÛïâì ÛÞÚÐÛØ×ÐæØî ØÝâÕàäÕÙáÐ - ßÕàÕÒÞÔë ÝÞÒëå ÞßæØÙ ÒáÕå " +"ÚÞÜßÞÝÕÝâÞÒ ÒÞ FreePBX. »ÞÚÐÛØ×ÐæØï ßÕàÕÒÞÔÞÒ ßÞÔÔÕàÖØÒÐÕâáï Ò äÐÙÛÞÒÞÙ áâàãÚâãàÕ " +"ÔØàÕÚâÞàØØ i18n ÔÛï ÚÐÖÔÞÓÞ ÜÞÔãÛï Ø ÚÞÜßÞÝÕÝâÐ ÞâÔÕÛìÝÞ, âÐÚÞÓÞ ÚÐÚ ¿ÞàâÐÛ ßÞÛì×ÞÒÐâÕÛï " +"(ARI). ÍâÞ ÔÐñâ ÒÞ×ÜÞÖÝÞáâì ÔÕàÖÐâì ÒáÕ ÚÞÜßÞÝÕÝâë Ò \"áÒÕÖÕÜ\" ÞÑÝÞÒÛïÕÜÞÜ áÞáâÞïÝØØ " +"ÑÕ× ÝÕÞÑåÞÔØÜÞáâØ ÞÑÝÞÒÛÕÝØï ÚÐÖÔÞÓÞ ÜÞÔãÛï ßàØ ÝÕ×ÝÐçØâÕÛìÝëå Ø×ÜÕÝÕÝØïå. ŸÑÝÞÒÛÕÝØï " +"ÛÞÚÐÛØ×ÐæØØ ØáßÞÛì×ãîâ áÒÕÖØÕ ßÞáÛÕÔÝØÕ âÕÚãéØÕ ÞÑÝÞÒÛÕÝØï ÒáÕå ÜÞÔãÛÕÙ Ø ÝÕ ×ÐâàÐÓØÒÐîâ " +"áÐÜØ ÒÕàáØØ ÜÞÔãÛÕÙ." + +#, php-format +msgid "No directory %s, install script not needed" +msgstr "œÕâ ÔØàÕÚâÞàØØ %s, ÝÕâ ÝÕÞÑåÞÔØÜÞáâØ ØÝáâÐÛÛØàÞÒÐâì áÚàØßâ" + + +#, php-format +msgid "Preparing to copy %s to %s" +msgstr "¿ÞÔÓÞâÞÒÚÐ Ú ÚÞߨàÞÒÐÝØî %s Ò %s" + +#, php-format +msgid "No destination directory %s to copy %s to" +msgstr "œÕ ÒëÑàÐÝÐ ÔØàÕÚâÞàØï ÝÐ×ÝÐçÕÝØï %s ÔÛï ÚÞߨàÞÒÐÝØï %s" + +#, php-format +msgid "Updated %s" +msgstr "ŸÑÝÞÒÛÕÝÞ %s" Index: /modules/branches/2.10/fw_langpacks/i18n/fr_FR/LC_MESSAGES/fw_langpacks.po =================================================================== --- /modules/branches/2.10/fw_langpacks/i18n/fr_FR/LC_MESSAGES/fw_langpacks.po (revision 9947) +++ /modules/branches/2.10/fw_langpacks/i18n/fr_FR/LC_MESSAGES/fw_langpacks.po (revision 9947) @@ -0,0 +1,62 @@ +# This file is part of FreePBX. +# +# FreePBX 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. +# +# FreePBX 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 FreePBX. If not, see . +# +# Copyright (C) 2009 Séverine GUTIERREZ, severine@medialsace.fr +# +msgid "" +msgstr "" +"Project-Id-Version: 2.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-06-22 19:14+0200\n" +"PO-Revision-Date: 2008-11-10 14:36+0100\n" +"Last-Translator: Séverine GUTIERREZ \n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: French\n" +"X-Poedit-Country: FRANCE\n" + +msgid "FreePBX Localization Updates" +msgstr "MAJ d'internationalisation FreePBX" + +msgid "Basic" +msgstr "" + +msgid "" +"This module provides a facility to install new and updated localization " +"translations for all components in FreePBX. Localization i18n translations " +"are still kept with each module and other components such as the User Portal " +"(ARI). This provides an easy ability to bring all components up-to-date " +"without the need of publishing dozens of modules for every minor change. The " +"localization updates used will be the latest available for all modules and " +"will not consider the current version you are running." +msgstr "" + +#, php-format +msgid "No directory %s, install script not needed" +msgstr "" + +#, php-format +msgid "Preparing to copy %s to %s" +msgstr "Prépare la copie de %s vers %s" + +#, php-format +msgid "No destination directory %s to copy %s to" +msgstr "Pas de répertoire de destination %s pour copier %s" + +#, php-format +msgid "Updated %s" +msgstr "%s mis à jour" Index: /modules/branches/2.10/fw_langpacks/module.xml =================================================================== --- /modules/branches/2.10/fw_langpacks/module.xml (revision 12084) +++ /modules/branches/2.10/fw_langpacks/module.xml (revision 12084) @@ -0,0 +1,33 @@ + + fw_langpacks + framework + extended + FreePBX Localization Updates + 2.9.0.1 + FreePBX + GPLv2+ + + *2.9.0.1* #4404 + *2.9.0.0* language updates + *2.8.0.1* language updates + *2.8.0.0* more language updates + *2.7.0.1* more language updates + *2.7.0.0* more language updates + *2.6.0.3* more language updates + *2.6.0.2* french and other updates + *2.6.0.1* updates + *2.6.0.0* localization updates + *2.5.1.1* Spanish, Italian, Bulgarian, Hungarian updates + *2.5.1* Swedish, Russian updates + *2.5.0.2* Swedish updates, Russian + *2.5.0.1* Swedish + *2.5.0* First release + + + This module provides a facility to install new and updated localization translations for all components in FreePBX. Localization i18n translations are still kept with each module and other components such as the User Portal (ARI). This provides an easy ability to bring all components up-to-date without the need of publishing dozens of modules for every minor change. The localization updates used will be the latest available for all modules and will not consider the current version you are running. + + setup + Basic + release/2.9/fw_langpacks-2.9.0.1.tgz + e0df05684910eb0c2864727e89d1c405 + Index: /modules/branches/2.10/fw_langpacks/install.php =================================================================== --- /modules/branches/2.10/fw_langpacks/install.php (revision 11109) +++ /modules/branches/2.10/fw_langpacks/install.php (revision 11109) @@ -0,0 +1,82 @@ +'cp -rf' from src: '$src' to dst: '$dst'...details follow
"; + foreach ($errors as $error) { + echo "$error
"; + } +} +global $amp_conf; + +$debug = false; +$dryrun = false; + +/** verison_compare that works with freePBX version numbers + * included here because there are some older versions of functions.inc.php that do not have + * it included as it was added during 2.3.0beta1 + */ +if (!function_exists('version_compare_freepbx')) { + function version_compare_freepbx($version1, $version2, $op = null) { + $version1 = str_replace("rc","RC", strtolower($version1)); + $version2 = str_replace("rc","RC", strtolower($version2)); + if (!is_null($op)) { + return version_compare($version1, $version2, $op); + } else { + return version_compare($version1, $version2); + } + } +} + +/* + * fw_langpacks install script + * + * for each installed component on the target system, copy localization files using the -u option + * on copy which will only copy them if our copy is newer then the destination which protects + * from overwriting destination files that have been updated by the user. + */ + $htdocs_source = dirname(__FILE__)."/htdocs"; + $htdocs_dest = $amp_conf['AMPWEBROOT']; + + if (!file_exists($htdocs_source)) { + out(sprintf(_("No directory %s, install script not needed"),$htdocs_source)); + return true; + } + + // Always copy main FreePBX amp.po/mo files + // + out(sprintf(_("Preparing to copy %s to %s"),'i18n',"$htdocs_dest/admin")); + $htdocs_copy[] = array("source" => "$htdocs_source/admin/i18n", "dest" => "$htdocs_dest/admin"); + + // If ARI is there copy those + // + if (is_dir("$htdocs_dest/recordings")) { + $htdocs_copy[] = array("source" => "$htdocs_source/recordings", "dest" => "$htdocs_dest"); + out(sprintf(_("Preparing to copy %s to %s"),'recordings',"$htdocs_dest")); + } else { + out(sprintf(_("No destination directory %s to copy %s to"),"$htdocs_dest/recordings","recordings")); + } + + // Now for each module we have, make sure the module is in the destination as we don't want to create + // empty destinatino folders with just i18n directories. + // + $dir = opendir($htdocs_source.'/admin/modules'); + while ($file = readdir($dir)) { + if (is_dir("$htdocs_dest/admin/modules/$file") && ($file != ".") && ($file != "..")) { + out(sprintf(_("Preparing to copy %s to %s"),"$file","$htdocs_dest/admin/modules")); + $htdocs_copy[] = array("source" => "$htdocs_source/admin/modules/$file", "dest" => "$htdocs_dest/admin/modules"); + } else if ($file != "." && $file != "..") { + out(sprintf(_("No destination directory %s to copy %s to"),"$htdocs_dest/modules/$file","$file")); + } + } + + foreach ($htdocs_copy as $translations) { + exec("cp -ru ".$translations['source']." ".$translations['dest']." 2>&1",$out,$ret); + if ($ret != 0) { + fw_langpacks_print_errors($translations['source'], $translations['dest'], $out); + } else { + out(sprintf(_("Updated %s"),basename($translations['source']))); + } + } +?> Index: /modules/branches/2.10/infoservices/i18n/sv_SE/LC_MESSAGES/infoservices.po =================================================================== --- /modules/branches/2.10/infoservices/i18n/sv_SE/LC_MESSAGES/infoservices.po (revision 11866) +++ /modules/branches/2.10/infoservices/i18n/sv_SE/LC_MESSAGES/infoservices.po (revision 11866) @@ -0,0 +1,61 @@ +# This file is part of FreePBX. +# +# FreePBX 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. +# +# FreePBX 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 FreePBX. If not, see . +# +# FreePBX language for infoservice +# Copyright (C) 2009, 2010, 2011 Mikael Carlsson +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX infoservice\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-18 08:25+0100\n" +"PO-Revision-Date: 2011-03-20 00:00+0100\n" +"Last-Translator: Mikael Carlsson \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Swedish\n" +"X-Poedit-Country: SWEDEN\n" + +msgid "Info Services" +msgstr "InformationstjÀnster" + +msgid "Internal Options & Configuration" +msgstr "Interna val och konfigurationer" + +msgid "" +"Provides a number of applications accessible by feature codes: company " +"directory, call trace (last call information), echo test, speaking clock, " +"and speak current extension number." +msgstr "" +"Ger tillgÃ¥ng till ett flertal applikationer som kan nÃ¥s med funktionskod: " +"telefonkatalog, samtalsspÃ¥rning (sista samtalet), talande klocka och upplÀsning " +"av anknytningsnummer" + +msgid "Directory" +msgstr "Katalog" + +msgid "Call Trace" +msgstr "SamtalsspÃ¥rning" + +msgid "Echo Test" +msgstr "Eko-test" + +msgid "Speaking Clock" +msgstr "Talande klocka" + +msgid "Speak Your Exten Number" +msgstr "LÀs upp din anknytning" Index: /modules/branches/2.10/infoservices/i18n/bg_BG/LC_MESSAGES/infoservices.po =================================================================== --- /modules/branches/2.10/infoservices/i18n/bg_BG/LC_MESSAGES/infoservices.po (revision 7250) +++ /modules/branches/2.10/infoservices/i18n/bg_BG/LC_MESSAGES/infoservices.po (revision 7250) @@ -0,0 +1,45 @@ +# 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 , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX v2.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-09-17 11:16+0200\n" +"PO-Revision-Date: 2008-11-03 02:03+0200\n" +"Last-Translator: \n" +"Language-Team: Chavdar Iliev \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Bulgarian\n" +"X-Poedit-Country: BULGARIA\n" +"X-Poedit-SourceCharset: utf-8\n" + +#: install.php:2 +msgid "Directory" +msgstr "ДОректПрОя" + +#: install.php:9 +msgid "Call Trace" +msgstr "ПрПслеЎяваМе Ма РазгПвПр" + +#: install.php:16 +msgid "Echo Test" +msgstr "Ð•Ñ +П Тест" + +#: install.php:23 +msgid "Speaking Clock" +msgstr "Казва Часа" + +#: install.php:30 +msgid "Speak Your Exten Number" +msgstr "ПрПЎОктува ВашОя ВътрешеМ НЌер" + +#: module.xml +msgid "Info Services" +msgstr "ИМфПрЌацОПММО УслугО" + Index: /modules/branches/2.10/infoservices/i18n/infoservices.pot =================================================================== --- /modules/branches/2.10/infoservices/i18n/infoservices.pot (revision 11866) +++ /modules/branches/2.10/infoservices/i18n/infoservices.pot (revision 11866) @@ -0,0 +1,56 @@ +# This file is part of FreePBX. +# +# FreePBX 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. +# +# FreePBX 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 FreePBX. If not, see . +# +# FreePBX language template for infoservices +# Copyright (C) 2008, 2009, 2010, 2011 Bandwith.com +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-18 08:25+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Info Services" +msgstr "" + +msgid "Internal Options & Configuration" +msgstr "" + +msgid "" +"Provides a number of applications accessible by feature codes: company " +"directory, call trace (last call information), echo test, speaking clock, " +"and speak current extension number." +msgstr "" + +msgid "Directory" +msgstr "" + +msgid "Call Trace" +msgstr "" + +msgid "Echo Test" +msgstr "" + +msgid "Speaking Clock" +msgstr "" + +msgid "Speak Your Exten Number" +msgstr "" Index: /modules/branches/2.10/infoservices/i18n/zh_CN/LC_MESSAGES/infoservices.po =================================================================== --- /modules/branches/2.10/infoservices/i18n/zh_CN/LC_MESSAGES/infoservices.po (revision 7440) +++ /modules/branches/2.10/infoservices/i18n/zh_CN/LC_MESSAGES/infoservices.po (revision 7440) @@ -0,0 +1,44 @@ +# 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 , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX 2.5 Chinese Translation\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-09-17 11:16+0200\n" +"PO-Revision-Date: 2009-01-31 11:58+0800\n" +"Last-Translator: 呚埁晟 \n" +"Language-Team: EdwardBadBoy \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Chinese\n" +"X-Poedit-Country: CHINA\n" +"X-Poedit-SourceCharset: utf-8\n" + +#: install.php:2 +msgid "Directory" +msgstr "目圕" + +#: install.php:9 +msgid "Call Trace" +msgstr "呌叫远螪" + +#: install.php:16 +msgid "Echo Test" +msgstr "回送测试" + +#: install.php:23 +msgid "Speaking Clock" +msgstr "语音时钟" + +#: install.php:30 +msgid "Speak Your Exten Number" +msgstr "播攟䜠的分机号" + +#: module.xml +msgid "Info Services" +msgstr "信息服务" + Index: /modules/branches/2.10/infoservices/i18n/pt_BR/LC_MESSAGES/infoservices.po =================================================================== --- /modules/branches/2.10/infoservices/i18n/pt_BR/LC_MESSAGES/infoservices.po (revision 7759) +++ /modules/branches/2.10/infoservices/i18n/pt_BR/LC_MESSAGES/infoservices.po (revision 7759) @@ -0,0 +1,56 @@ +# This file is part of FreePBX. +# +# FreePBX 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. +# +# FreePBX 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 FreePBX. If not, see . +# +# Copyright 2009, Marcelo Araujo +# +msgid "" +msgstr "" +"Project-Id-Version: freePBX 2.5.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-09-17 11:16+0200\n" +"PO-Revision-Date: 2009-05-11 20:08-0300\n" +"Last-Translator: Marcelo Araujo \n" +"Language-Team: MidiVTS Team \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Portuguese\n" +"X-Poedit-Country: BRAZIL\n" +"X-Poedit-SourceCharset: utf-8\n" + +#: install.php:2 +msgid "Directory" +msgstr "Diretório" + +#: install.php:9 +msgid "Call Trace" +msgstr "Rastreamento de Chamadas" + +#: install.php:16 +msgid "Echo Test" +msgstr "Teste de Eco" + +#: install.php:23 +msgid "Speaking Clock" +msgstr "Falar o horário" + +#: install.php:30 +msgid "Speak Your Exten Number" +msgstr "Faler número de seu ramal" + +#: module.xml +msgid "Info Services" +msgstr "Serviços de informação" + Index: /modules/branches/2.10/infoservices/i18n/it_IT/LC_MESSAGES/infoservices.po =================================================================== --- /modules/branches/2.10/infoservices/i18n/it_IT/LC_MESSAGES/infoservices.po (revision 7250) +++ /modules/branches/2.10/infoservices/i18n/it_IT/LC_MESSAGES/infoservices.po (revision 7250) @@ -0,0 +1,38 @@ +msgid "" +msgstr "" +"Project-Id-Version: 2.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-09-17 11:16+0200\n" +"PO-Revision-Date: \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" +"X-Poedit-Language: Italian\n" +"X-Poedit-Country: ITALY\n" + +#: install.php:2 +msgid "Directory" +msgstr "Elenco Telefonico (Directory)" + +#: install.php:9 +msgid "Call Trace" +msgstr "Ultima Chiamata" + +#: install.php:16 +msgid "Echo Test" +msgstr "Test Eco" + +#: install.php:23 +msgid "Speaking Clock" +msgstr "Data e Ora" + +#: install.php:30 +msgid "Speak Your Exten Number" +msgstr "Riproduce il Numero d'Interno" + +#: module.xml +msgid "Info Services" +msgstr "Servizi Aggiuntivi" + Index: /modules/branches/2.10/infoservices/i18n/es_ES/LC_MESSAGES/infoservices.po =================================================================== --- /modules/branches/2.10/infoservices/i18n/es_ES/LC_MESSAGES/infoservices.po (revision 7479) +++ /modules/branches/2.10/infoservices/i18n/es_ES/LC_MESSAGES/infoservices.po (revision 7479) @@ -0,0 +1,39 @@ +msgid "" +msgstr "" +"Project-Id-Version: FreePBX - infoservices module spanish translation\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-09-17 11:16+0200\n" +"PO-Revision-Date: 2009-01-21 00:48+0100\n" +"Last-Translator: Juan Asensio Sánchez \n" +"Language-Team: Juan Asensio Sánchez \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Spanish\n" +"X-Poedit-Country: SPAIN\n" +"X-Poedit-SourceCharset: utf-8\n" + +#: install.php:2 +msgid "Directory" +msgstr "Directorio" + +#: install.php:9 +msgid "Call Trace" +msgstr "Traza de la llamada" + +#: install.php:16 +msgid "Echo Test" +msgstr "Prueba de eco" + +#: install.php:23 +msgid "Speaking Clock" +msgstr "Decir fecha y hora" + +#: install.php:30 +msgid "Speak Your Exten Number" +msgstr "Decir número de extensión" + +#: module.xml +msgid "Info Services" +msgstr "Servicios de información" + Index: /modules/branches/2.10/infoservices/i18n/fr_FR/LC_MESSAGES/infoservices.po =================================================================== --- /modules/branches/2.10/infoservices/i18n/fr_FR/LC_MESSAGES/infoservices.po (revision 8141) +++ /modules/branches/2.10/infoservices/i18n/fr_FR/LC_MESSAGES/infoservices.po (revision 8141) @@ -0,0 +1,53 @@ +# This file is part of FreePBX. +# +# FreePBX 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. +# +# FreePBX 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 FreePBX. If not, see . +# +# Copyright (C) 2009 Séverine GUTIERREZ, severine@medialsace.fr +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-09-17 11:16+0200\n" +"PO-Revision-Date: 2009-04-20 17:23+0100\n" +"Last-Translator: Séverine GUTIERREZ \n" +"Language-Team: Français \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: install.php:2 +msgid "Directory" +msgstr "Répertoire" + +#: install.php:9 +msgid "Call Trace" +msgstr "Trace d'Appel" + +#: install.php:16 +msgid "Echo Test" +msgstr "Test d'Echo" + +#: install.php:23 +msgid "Speaking Clock" +msgstr "Horloge Parlante" + +#: install.php:30 +msgid "Speak Your Exten Number" +msgstr "Dit votre Numéro d'Extension" + +#: module.xml +msgid "Info Services" +msgstr "Services d'Informations" Index: /modules/branches/2.10/infoservices/module.xml =================================================================== --- /modules/branches/2.10/infoservices/module.xml (revision 10883) +++ /modules/branches/2.10/infoservices/module.xml (revision 10883) @@ -0,0 +1,33 @@ + + infoservices + standard + Info Services + 2.9.0.0 + FreePBX + GPLv2+ + no + no + setup + Internal Options & Configuration + Provides a number of applications accessible by feature codes: company directory, call trace (last call information), echo test, speaking clock, and speak current extension number. + + *2.9.0.0* #4653 + *2.8.0.0* #4396 + *2.7.0.0* spelling errors, localizations + *2.6.0.1* localizations + *2.6.0.0* localizations, misc + *2.5.0.1* localization fixes + *2.5.0* localization, Swedish + *2.4.0.1* #2731 fix press 0 for operator in directory + *2.4.0* bumped for 2.4 + *1.3.5.2* changed categories + *1.3.5.1* bump for rc1 + *1.3.5* #2145 add waitexten while waiting for user input, and make uninstallable + *1.3.4* changed ${CALLERID(number)} to ${AMPUSER} to accomodate CID number masquerading + *1.3.3* Fixed SpeakExtension - replaced depricated ${CALLERID} variable + *1.3.2* Fixed SpeakExtension - add macro-user-callerid + *1.3.1* Improved accuracy of speaking clock + + release/2.9/infoservices-2.9.0.0.tgz + fa89456cfe1c82af518697ec1be3257d + Index: /modules/branches/2.10/infoservices/functions.inc.php =================================================================== --- /modules/branches/2.10/infoservices/functions.inc.php (revision 10020) +++ /modules/branches/2.10/infoservices/functions.inc.php (revision 10020) @@ -0,0 +1,155 @@ +getCodeActive(); + unset($fcc); + + if ($fc != '') + $fname($fc); + } else { + $ext->add('from-internal-additional', 'debug', '', new ext_noop($modulename.": No func $fname")); + var_dump($item); + } + } + } + break; + } +} + +function infoservices_directory($c) { + global $ext; + global $db; + + $oxtn = $db->getOne("SELECT value from globals where variable='OPERATOR_XTN'"); //this needs to be here! + + $id = "app-directory"; // The context to be included. This must be unique. + + // Start creating the dialplan + $ext->addInclude('from-internal-additional', $id); // Add the include from from-internal + // Build the context + $ext->add($id, $c, '', new ext_answer('')); + $ext->add($id, $c, '', new ext_wait('1')); // $cmd,1,Wait(1) + $ext->add($id, $c, '', new ext_agi('directory,${DIR-CONTEXT},from-did-direct,${DIRECTORY:0:1}${DIRECTORY_OPTS}'.($oxtn != '' ? 'o' : '') )); + $ext->add($id, $c, '', new ext_playback('vm-goodbye')); // $cmd,n,Playback(vm-goodbye) + $ext->add($id, $c, '', new ext_hangup('')); // hangup + if ($oxtn != '') { + $ext->add($id, 'o', '', new ext_goto('from-internal,${OPERATOR_XTN},1')); + } else { + $ext->add($id, 'o', '', new ext_playback('privacy-incorrect')); + } +} + +function infoservices_calltrace($c) { + global $ext; + + $id = "app-calltrace"; // The context to be included + + $ext->addInclude('from-internal-additional', $id); // Add the include from from-internal + + $ext->add($id, $c, '', new ext_goto('1', 's', 'app-calltrace-perform')); + + // Create the calltrace application, which we are doing a 'Goto' to above. + // I just reset these for ease of copying and pasting. + $id = 'app-calltrace-perform'; + $c = 's'; + $ext->add($id, $c, '', new ext_answer('')); + $ext->add($id, $c, '', new ext_wait('1')); + $ext->add($id, $c, '', new ext_macro('user-callerid')); + $ext->add($id, $c, '', new ext_playback('info-about-last-call&telephone-number')); + $ext->add($id, $c, '', new ext_setvar('lastcaller', '${DB(CALLTRACE/${AMPUSER})}')); + $ext->add($id, $c, '', new ext_gotoif('$[ $[ "${lastcaller}" = "" ] | $[ "${lastcaller}" = "unknown" ] ]', 'noinfo')); + $ext->add($id, $c, '', new ext_saydigits('${lastcaller}')); + $ext->add($id, $c, '', new ext_setvar('TIMEOUT(digit)', '3')); + $ext->add($id, $c, '', new ext_setvar('TIMEOUT(response)', '7')); + $ext->add($id, $c, '', new ext_background('to-call-this-number&press-1')); + $ext->add($id, $c, '', new ext_goto('fin')); + $ext->add($id, $c, 'noinfo', new ext_playback('from-unknown-caller')); + $ext->add($id, $c, '', new ext_macro('hangupcall')); + $ext->add($id, $c, 'fin', new ext_noop('Waiting for input')); + $ext->add($id, $c, '', new ext_waitexten(60)); + $ext->add($id, $c, '', new ext_Playback('sorry-youre-having-problems&goodbye')); + $ext->add($id, '1', '', new ext_goto('1', '${lastcaller}', 'from-internal')); + $ext->add($id, 'i', '', new ext_playback('vm-goodbye')); + $ext->add($id, 'i', '', new ext_macro('hangupcall')); + $ext->add($id, 't', '', new ext_playback('vm-goodbye')); + $ext->add($id, 't', '', new ext_macro('hangupcall')); + +} + +function infoservices_echotest($c) { + global $ext; + + $id = "app-echo-test"; // The context to be included + + $ext->addInclude('from-internal-additional', $id); // Add the include from from-internal + + $ext->add($id, $c, '', new ext_answer('')); // $cmd,1,Answer + $ext->add($id, $c, '', new ext_wait('1')); // $cmd,n,Wait(1) + $ext->add($id, $c, '', new ext_playback('demo-echotest')); // $cmd,n,Macro(user-callerid) + $ext->add($id, $c, '', new ext_echo('')); + $ext->add($id, $c, '', new ext_playback('demo-echodone')); // $cmd,n,Playback(...) + $ext->add($id, $c, '', new ext_hangup('')); // $cmd,n,Macro(user-callerid) +} + +function infoservices_speakingclock($c) { + global $ext; + + $id = "app-speakingclock"; // The context to be included + + $ext->addInclude('from-internal-additional', $id); // Add the include from from-internal + + $ext->add($id, $c, '', new ext_answer('')); // $cmd,1,Answer + $ext->add($id, $c, '', new ext_wait('1')); // $cmd,n,Wait(1) + $ext->add($id, $c, '', new ext_setvar('NumLoops','0')); + + $ext->add($id, $c, 'start', new ext_setvar('FutureTime','$[${EPOCH} + 11]')); // 10 seconds to try this out + $ext->add($id, $c, '', new ext_playback('at-tone-time-exactly')); + $ext->add($id, $c, '', new ext_gotoif('$["${TIMEFORMAT}" = "kM"]','hr24format')); + $ext->add($id, $c, '', new ext_sayunixtime('${FutureTime},,IM \\\'and\\\' S \\\'seconds\\\' p')); + $ext->add($id, $c, '', new ext_goto('waitloop')); + $ext->add($id, $c, 'hr24format', new ext_sayunixtime('${FutureTime},,kM \\\'and\\\' S \\\'seconds\\\'')); + $ext->add($id, $c, 'waitloop', new ext_set('TimeLeft', '$[${FutureTime} - ${EPOCH}]')); + $ext->add($id, $c, '', new ext_gotoif('$[${TimeLeft} < 1]','playbeep')); + //$ext->add($id, $c, '', new ext_saynumber('${TimeLeft}')); + $ext->add($id, $c, '', new ext_wait(1)); + $ext->add($id, $c, '', new ext_goto('waitloop')); + $ext->add($id, $c, 'playbeep', new ext_playback('beep')); + $ext->add($id, $c, '', new ext_wait(5)); + + $ext->add($id, $c, '', new ext_setvar('NumLoops','$[${NumLoops} + 1]')); + $ext->add($id, $c, '', new ext_gotoif('$[${NumLoops} < 5]','start')); // 5 is maximum number of times to repeat + $ext->add($id, $c, '', new ext_playback('goodbye')); + $ext->add($id, $c, '', new ext_hangup('')); +} + +function infoservices_speakextennum($c) { + global $ext; + + $id = "app-speakextennum"; + + $ext->addInclude('from-internal-additional', $id); // Add the include from from-internal + + $ext->add($id, $c, '', new ext_answer('')); // $cmd,1,Answer + $ext->add($id, $c, '', new ext_wait('1')); // $cmd,n,Wait(1) + $ext->add($id, $c, '', new ext_macro('user-callerid')); // $cmd,n,Macro(user-callerid) + $ext->add($id, $c, '', new ext_playback('your')); + $ext->add($id, $c, '', new ext_playback('extension')); + $ext->add($id, $c, '', new ext_playback('number')); + $ext->add($id, $c, '', new ext_playback('is')); + $ext->add($id, $c, '', new ext_saydigits('${AMPUSER}')); + $ext->add($id, $c, '', new ext_wait('2')); // $cmd,n,Wait(1) + $ext->add($id, $c, '', new ext_hangup('')); +} +?> Index: /modules/branches/2.10/infoservices/install.php =================================================================== --- /modules/branches/2.10/infoservices/install.php (revision 10609) +++ /modules/branches/2.10/infoservices/install.php (revision 10609) @@ -0,0 +1,45 @@ +setDescription('Directory'); +$fcc->setDefault('#'); +$fcc->setProvideDest(); +$fcc->update(); +unset($fcc); + +$fcc = new featurecode('infoservices', 'calltrace'); +$fcc->setDescription('Call Trace'); +$fcc->setDefault('*69'); +$fcc->update(); +unset($fcc); + +$fcc = new featurecode('infoservices', 'echotest'); +$fcc->setDescription('Echo Test'); +$fcc->setDefault('*43'); +$fcc->setProvideDest(); +$fcc->update(); +unset($fcc); + +$fcc = new featurecode('infoservices', 'speakingclock'); +$fcc->setDescription('Speaking Clock'); +$fcc->setDefault('*60'); +$fcc->setProvideDest(); +$fcc->update(); +unset($fcc); + +$fcc = new featurecode('infoservices', 'speakextennum'); +$fcc->setDescription('Speak Your Exten Number'); +$fcc->setDefault('*65'); +$fcc->update(); +unset($fcc); + +?> Index: /modules/branches/2.10/javassh/i18n/sv_SE/LC_MESSAGES/javassh.po =================================================================== --- /modules/branches/2.10/javassh/i18n/sv_SE/LC_MESSAGES/javassh.po (revision 6743) +++ /modules/branches/2.10/javassh/i18n/sv_SE/LC_MESSAGES/javassh.po (revision 6743) @@ -0,0 +1,31 @@ +# 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 , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX javassh\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-09-16 10:50+0200\n" +"PO-Revision-Date: 2008-09-16 11:00+0100\n" +"Last-Translator: Mikael Carlsson \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Swedish\n" +"X-Poedit-Country: SWEDEN\n" + +#: page.javassh.php:17 +msgid "Java SSH" +msgstr "Java SSH" + +#: page.javassh.php:18 +msgid "If necessary re-enter the maint user and password. Once the applet has opened enter the IP address of your PBX.
" +msgstr "Om det behövs skriver du in namn och lösenord. NÀr java applikationen har startar skriver du in adressen till din vÀxel.
" + +#: page.javassh.php:19 +msgid "You will then connect to the FreePBX server. You can then login as 'root' or 'asterisk', or whatever user you have created." +msgstr "Du kommer då att koppla upp dig mot din FreePBX server. Du kan logga in som 'root' eller 'asterisk' eller någon annan anvÀndare som finns i ditt system." + Index: /modules/branches/2.10/javassh/i18n/bg_BG/LC_MESSAGES/javassh.po =================================================================== --- /modules/branches/2.10/javassh/i18n/bg_BG/LC_MESSAGES/javassh.po (revision 7250) +++ /modules/branches/2.10/javassh/i18n/bg_BG/LC_MESSAGES/javassh.po (revision 7250) @@ -0,0 +1,33 @@ +# 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 , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX v2.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-09-16 10:50+0200\n" +"PO-Revision-Date: 2008-11-03 02:13+0200\n" +"Last-Translator: \n" +"Language-Team: Chavdar Iliev \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Bulgarian\n" +"X-Poedit-Country: BULGARIA\n" +"X-Poedit-SourceCharset: utf-8\n" + +#: page.javassh.php:17 +msgid "Java SSH" +msgstr "Java SSH" + +#: page.javassh.php:18 +msgid "If necessary re-enter the maint user and password. Once the applet has opened enter the IP address of your PBX.
" +msgstr "АкП е ÐœÐµÐŸÐ±Ñ +ПЎОЌП пПвтПрете главМОте пПтребОтелскП ОЌе О парПла. СлеЎ катП се ПтвПрО кПМзПлата въвеЎете IP аЎреса Ма вашОя сървър.
" + +#: page.javassh.php:19 +msgid "You will then connect to the FreePBX server. You can then login as 'root' or 'asterisk', or whatever user you have created." +msgstr "ТПгава ще се свържете с FreePBX сървъра. СлеЎ тПва ЌПжете Ўа се лПгМете катП 'root' ОлО 'asterisk', ОлО какъвтП пПтребОтел сте съзЎалО." + Index: /modules/branches/2.10/javassh/i18n/javassh.pot =================================================================== --- /modules/branches/2.10/javassh/i18n/javassh.pot (revision 11797) +++ /modules/branches/2.10/javassh/i18n/javassh.pot (revision 11797) @@ -0,0 +1,51 @@ +# This file is part of FreePBX. +# +# FreePBX 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. +# +# FreePBX 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 FreePBX. If not, see . +# +# FreePBX language template for javassh +# Copyright (C) 2008, 2009, 2010, 2011 Bandwith.com +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-10 22:46+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Java SSH" +msgstr "" + +msgid "System Administration" +msgstr "" + +msgid "" +"Provides a Java applet to access the system shell using SSH. SSH client is " +"provided by Appgate (www.appgate.com) and licensed is Free Limited Use, " +"http://www.appgate.com/index/products/mindterm/mindterm_end_user_lic.html" +msgstr "" + +msgid "" +"If necessary re-enter the maint user and password. Once the applet has " +"opened enter the IP address of your PBX.
" +msgstr "" + +msgid "" +"You will then connect to the FreePBX server. You can then login as 'root' or " +"'asterisk', or whatever user you have created." +msgstr "" Index: /modules/branches/2.10/javassh/i18n/zh_CN/LC_MESSAGES/javassh.po =================================================================== --- /modules/branches/2.10/javassh/i18n/zh_CN/LC_MESSAGES/javassh.po (revision 7440) +++ /modules/branches/2.10/javassh/i18n/zh_CN/LC_MESSAGES/javassh.po (revision 7440) @@ -0,0 +1,36 @@ +# 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 , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX 2.5 Chinese Translation\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-09-16 10:50+0200\n" +"PO-Revision-Date: 2009-02-01 14:52+0800\n" +"Last-Translator: 呚埁晟 \n" +"Language-Team: EdwardBadBoy \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Chinese\n" +"X-Poedit-Country: CHINA\n" +"X-Poedit-SourceCharset: utf-8\n" + +#: page.javassh.php:17 +msgid "Java SSH" +msgstr "Java SSH远皋登圕" + +#: page.javassh.php:18 +msgid "If necessary re-enter the maint user and password. Once the applet has opened enter the IP address of your PBX.
" +msgstr "劂果需芁的话请重新蟓å +¥äœ çš„管理员甚户名以及密码。圚小应甚皋序启劚后请蟓å +¥äœ çš„PBX服务噚的IP地址。
" + +#: page.javassh.php:19 +msgid "You will then connect to the FreePBX server. You can then login as 'root' or 'asterisk', or whatever user you have created." +msgstr "接着䜠就䌚连接到FreePBX服务噚。䜠可以以“rootâ€æˆ–è€ +“asteriskâ€èº«ä»œç™»åœ•ïŒŒæˆ–è€ +以䜠创建的甚户身仜登圕。" + Index: /modules/branches/2.10/javassh/i18n/it_IT/LC_MESSAGES/javassh.po =================================================================== --- /modules/branches/2.10/javassh/i18n/it_IT/LC_MESSAGES/javassh.po (revision 7250) +++ /modules/branches/2.10/javassh/i18n/it_IT/LC_MESSAGES/javassh.po (revision 7250) @@ -0,0 +1,26 @@ +msgid "" +msgstr "" +"Project-Id-Version: 2.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-09-16 10:50+0200\n" +"PO-Revision-Date: \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" +"X-Poedit-Language: Italian\n" +"X-Poedit-Country: ITALY\n" + +#: page.javassh.php:17 +msgid "Java SSH" +msgstr "SSH Java" + +#: page.javassh.php:18 +msgid "If necessary re-enter the maint user and password. Once the applet has opened enter the IP address of your PBX.
" +msgstr "Se necessario reinserire la password dell'utente amministratore. Appena l'applet si aprirà, digitare l'indirizzo IP del PBX.
" + +#: page.javassh.php:19 +msgid "You will then connect to the FreePBX server. You can then login as 'root' or 'asterisk', or whatever user you have created." +msgstr "Sarai connesso al server FreePBX e potrai entrare utilizzando come login 'root' o 'asterisk', o qualsiasi altro utente presente nel sistema." + Index: /modules/branches/2.10/javassh/i18n/es_ES/LC_MESSAGES/javassh.po =================================================================== --- /modules/branches/2.10/javassh/i18n/es_ES/LC_MESSAGES/javassh.po (revision 7479) +++ /modules/branches/2.10/javassh/i18n/es_ES/LC_MESSAGES/javassh.po (revision 7479) @@ -0,0 +1,27 @@ +msgid "" +msgstr "" +"Project-Id-Version: FreePBX - módulo javassh module spanish translation\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-09-16 10:50+0200\n" +"PO-Revision-Date: 2009-01-22 01:24+0100\n" +"Last-Translator: Juan Asensio Sánchez \n" +"Language-Team: Juan Asensio Sánchez \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Spanish\n" +"X-Poedit-Country: SPAIN\n" +"X-Poedit-SourceCharset: utf-8\n" + +#: page.javassh.php:17 +msgid "Java SSH" +msgstr "Java SSH" + +#: page.javassh.php:18 +msgid "If necessary re-enter the maint user and password. Once the applet has opened enter the IP address of your PBX.
" +msgstr "Si fuera necesario, vuelva a introducir el usuario y la contraseña. Una vez que se haya abierto la ventana de conexión, introduzca la IP de su servidor.
" + +#: page.javassh.php:19 +msgid "You will then connect to the FreePBX server. You can then login as 'root' or 'asterisk', or whatever user you have created." +msgstr "Entonces se conectará a su servidor FreePBX. Puede iniciar sesión como usuario 'root', 'asterisk' o cualquier otro que haya creado." + Index: /modules/branches/2.10/javassh/i18n/fr_FR/LC_MESSAGES/javassh.po =================================================================== --- /modules/branches/2.10/javassh/i18n/fr_FR/LC_MESSAGES/javassh.po (revision 8144) +++ /modules/branches/2.10/javassh/i18n/fr_FR/LC_MESSAGES/javassh.po (revision 8144) @@ -0,0 +1,49 @@ +# This file is part of FreePBX. +# +# FreePBX 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. +# +# FreePBX 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 FreePBX. If not, see . +# +# Copyright (C) 2009 Séverine GUTIERREZ, severine@medialsace.fr +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-09-16 10:50+0200\n" +"PO-Revision-Date: 2009-04-20 21:37+0100\n" +"Last-Translator: Séverine GUTIERREZ \n" +"Language-Team: Français \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: page.javassh.php:17 +msgid "Java SSH" +msgstr "Java SSH" + +#: page.javassh.php:18 +msgid "" +"If necessary re-enter the maint user and password. Once the applet has " +"opened enter the IP address of your PBX.
" +msgstr "" +"Si nécessaire entrez à nouveau l'utilisateur principal et le mot de passe. " +"Une fois l'applet ouvert, entrez l'adresse IP de votre PBX.
" + +#: page.javassh.php:19 +msgid "" +"You will then connect to the FreePBX server. You can then login as 'root' or " +"'asterisk', or whatever user you have created." +msgstr "" +"Vous vous connecterez ensuite au serveur FreePBX. Vous pouvez alors vous loguer " +"en tant que 'root' ou 'asterisk', ou tout autre utilisateur que vous avez créé." Index: /modules/branches/2.10/javassh/page.javassh.php =================================================================== --- /modules/branches/2.10/javassh/page.javassh.php (revision 7469) +++ /modules/branches/2.10/javassh/page.javassh.php (revision 7469) @@ -0,0 +1,36 @@ + "._("Java SSH")." "; +echo _("If necessary re-enter the maint user and password. Once the applet has opened enter the IP address of your PBX.
"); +echo _("You will then connect to the FreePBX server. You can then login as 'root' or 'asterisk', or whatever user you have created."); + +?> + + + + + + + + + + + + + + Index: /modules/branches/2.10/javassh/module.xml =================================================================== --- /modules/branches/2.10/javassh/module.xml (revision 10940) +++ /modules/branches/2.10/javassh/module.xml (revision 10940) @@ -0,0 +1,29 @@ + + javassh + extended + Java SSH + 2.9.0.0 + FreePBX + FREEUSE + tool + System Administration + Provides a Java applet to access the system shell using SSH. SSH client is provided by Appgate (www.appgate.com) and licensed is Free Limited Use, http://www.appgate.com/index/products/mindterm/mindterm_end_user_lic.html + + Java SSH + + + *2.9.0.0* 2.9 Update + *2.8.0.1* #4473 + *2.8.0.0* published 2.8 version + *2.7.0.0* localizations + *2.6.0.0* localizations, misc + *2.5.0.2* security setting updates: r7432 + *2.5.0.1* localization updates + *2.5.0* localization fixes, Swedish + *2.4.0* bump for 2.4 + *1.0.1.1* bump for rc1 + *1.0.1* First Changelog + + release/2.9/javassh-2.9.0.0.tgz + 96a0089e7a0f24488a9da2777ff788c5 + Index: /modules/branches/2.10/fw_langpackssvn.pl =================================================================== --- /modules/branches/2.10/fw_langpackssvn.pl (revision 11509) +++ /modules/branches/2.10/fw_langpackssvn.pl (revision 11509) @@ -0,0 +1,41 @@ +#!/usr/bin/perl + +# This script (sculpted from publish.pl) will check the last tarball (which must be there) +# based on the fw_langpacks xml version number and then run svn log against all updates since +# fw_langpacks was last published. +# +$rver = "2.9"; +$fwbranch = "branches/2.9"; +$fw_langpacks = "fw_langpacks"; + +$moddir = 'fw_langpacks'; + +my $reldir = "release/"; + + open FH, "$moddir/module.xml"; + $newxml = ""; + $vers = "unset"; + while () { + if ($vers == 'unset' && /(.+)<\/version>/) { $vers = $1; } + $newxml .= $_; + } + close FH; + + die "Don't know version of $moddir" if ($vers eq "unset"); + # Automatically check in any files that were modified but weren't checked into SVN + + # Now we know the version. Get the svnversion.txt from the last update. + $filename = "../../$reldir"."$rver/$fw_langpacks-$vers.tgz"; + print "CHECKING VERSION: ..... "; + #print "CHECKING VERSION WITH: tar -zxOf $filename $moddir/svnversion.txt: ... "; + system("tar -zxOf ".$filename." ".$moddir."/svnversion.txt"); + print "Geting svn log of language updates since that version for $rver : .... \n\n"; + system("svn log http://svn.freepbx.org/freepbx/$fwbranch/amp_conf/htdocs/recordings/locale -v -r `tar -zxOf ".$filename." ".$moddir."/svnversion.txt | sed -e s/SVN\\\ VERSION:// | tr -cd '0-9'`:HEAD | grep 'htdocs/recordings/locale'"); + system("svn log http://svn.freepbx.org/freepbx/$fwbranch/amp_conf/htdocs/admin -v -r `tar -zxOf ".$filename." ".$moddir."/svnversion.txt | sed -e s/SVN\\\ VERSION:// | tr -cd '0-9'`:HEAD | grep 'i18n/' | grep 'htdocs/admin'"); + system("svn log http://svn.freepbx.org/modules/branches/$rver -v -r `tar -zxOf ".$filename." ".$moddir."/svnversion.txt | sed -e s/SVN\\\ VERSION:// | tr -cd '0-9'`:HEAD | grep 'i18n/' | grep 'modules/branches'"); + + + # Test calls + # system("svn log http://svn.freepbx.org/freepbx/branches/$rver/amp_conf/htdocs/recordings/locale -v -r 4000:HEAD | grep 'htdocs/recordings/locale'"); + # system("svn log http://svn.freepbx.org/freepbx/branches/$rver/amp_conf/htdocs/admin -v -r 4000:HEAD | grep 'i18n/' | grep 'htdocs/admin'"); + # system("svn log http://svn.freepbx.org/modules/branches/$rver -v -r 4000:HEAD | grep 'i18n/' | grep 'modules/branches'"); Index: /modules/branches/2.10/dundicheck/i18n/sv_SE/LC_MESSAGES/dundicheck.po =================================================================== --- /modules/branches/2.10/dundicheck/i18n/sv_SE/LC_MESSAGES/dundicheck.po (revision 6871) +++ /modules/branches/2.10/dundicheck/i18n/sv_SE/LC_MESSAGES/dundicheck.po (revision 6871) @@ -0,0 +1,59 @@ +# 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 , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX dundicheck\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-09-13 22:06+0200\n" +"PO-Revision-Date: 2008-09-28 12:10+0100\n" +"Last-Translator: Mikael Carlsson \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Swedish\n" +"X-Poedit-Country: SWEDEN\n" + +#: functions.inc.php:63 +msgid "DUNDi: " +msgstr "DUNDi:" + +#: page.dundicheck.php:25 +#, php-format +msgid "DUNDi Information: %s" +msgstr "DUNDIi information: %s" + +#: page.dundicheck.php:27 +#, php-format +msgid "The number you are trying to use, %s, is currently available from one of the DUNDi routes you have configured on your system. As a result you cannot use this number on this system. Even if the route configuration does not pass this number you will still be blocked from creating it. If this is not an error, then you will have to un-publish this number on your remote DUNDi setup, disable the DUNDi trunk in question, or disable this module to avoid the checks. Otherwise, remove %s from the remote system before creating this one." +msgstr "Numret du försöker anvÀnda, %s, Àr för nÀrvarande tillgÀngligt frÃ¥n en av de DUNDi-vÀgarna du har konfigurerat. Du kan dÃ¥ inte anvÀnda detta nummer i ditt system. Även om vÀgkonfigurationen inte skickar detta nummer kommer inte att kunna skapa det. Om detta inte Àr ett fel mÃ¥ste du ta bort numret frÃ¥n din fjÀrr-DUNDi, avaktivera trunken i frÃ¥ga eller avaktivera denna modul för att undvika kontrollen. Annars tar du bort %s frÃ¥n ditt fjÀrrsystem innan du skapar det hÀr." + +#: page.dundicheck.php:31 +msgid "No matches found" +msgstr "Inga resultat" + +#: page.dundicheck.php:34 +#, php-format +msgid "Results from DUNDi trunk: %s" +msgstr "Resultat frÃ¥n DUNDi-trunk: %s" + +#: page.dundicheck.php:46 +#, php-format +msgid "DUNDi Lookup" +msgstr "DUNDi-uppslag" + +#: page.dundicheck.php:55 +msgid "Lookup Number:" +msgstr "SlÃ¥ upp nummer:" + +#: page.dundicheck.php:55 +msgid "Lookup Another Number:" +msgstr "SlÃ¥ upp ett annat nummer:" + +#: page.dundicheck.php:58 +msgid "Lookup" +msgstr "SlÃ¥ upp" + Index: /modules/branches/2.10/dundicheck/i18n/bg_BG/LC_MESSAGES/dundicheck.po =================================================================== --- /modules/branches/2.10/dundicheck/i18n/bg_BG/LC_MESSAGES/dundicheck.po (revision 7479) +++ /modules/branches/2.10/dundicheck/i18n/bg_BG/LC_MESSAGES/dundicheck.po (revision 7479) @@ -0,0 +1,66 @@ +# 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 , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX v2.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-09-28 02:52+0200\n" +"PO-Revision-Date: 2009-02-14 16:19+0200\n" +"Last-Translator: \n" +"Language-Team: Chavdar Iliev \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Bulgarian\n" +"X-Poedit-Country: BULGARIA\n" +"X-Poedit-SourceCharset: utf-8\n" + +#: functions.inc.php:63 +msgid "DUNDi: " +msgstr "DUNDi: " + +#: page.dundicheck.php:25 +#, php-format +msgid "DUNDi Information: %s" +msgstr "DUNDi ИМфПрЌацОя: %s" + +#: page.dundicheck.php:27 +#, php-format +msgid "The number you are trying to use, %s, is currently available from one of the DUNDi routes you have configured on your system. As a result you cannot use this number on this system. Even if the route configuration does not pass this number you will still be blocked from creating it. If this is not an error, then you will have to un-publish this number on your remote DUNDi setup, disable the DUNDi trunk in question, or disable this module to avoid the checks. Otherwise, remove %s from the remote system before creating this one." +msgstr "НПЌера кПйтП се ПпОтвате Ўа ОзпПлзвате, %s, в ЌПЌеМта е МастрПеМ в еЎОМ Пт DUNDi ЌаршрутОте кПОтП сте кПМфОгурОралО. КатП резултат вОе Ме ЌПжете Ўа ОзпПлзвате МПЌера в тазО сОстеЌа. ДПрО кПМфОгурацОята Ма Ќаршрута Ўа Ме съвпаЎа с тПзО МПЌер вОе все пак ще бъЎете блПкОраМО Пт съзЎаваМетП Ќу. АкП тПва Ме е грешка, тПгава трябва Ўа ÐŒÐ°Ñ +Мете тПзО МПЌер Пт ПтсрещМата DUNDi МастрПйка, забраМете DUNDi въМшМата лОМОя в запОтваМетП, ОлО забраМете тПзО ЌПЎул за Ўа ОзбегМете прПверкОте. ИМаче, Ð¿Ñ€ÐµÐŒÐ°Ñ +Мете %s Пт ПтсрещМата сОстеЌа преЎО Ўа съзЎаЎете тазО." + +#: page.dundicheck.php:31 +msgid "No matches found" +msgstr "Не са МаЌереМО съвпаЎеМОя" + +#: page.dundicheck.php:34 +#, php-format +msgid "Results from DUNDi trunk: %s" +msgstr "РезултатО Пт DUNDi въМшМО лОМОО: %s" + +#: page.dundicheck.php:46 +#, php-format +msgid "DUNDi Lookup" +msgstr "DUNDi ТърсеМе" + +#: page.dundicheck.php:55 +msgid "Lookup Number:" +msgstr "ТърсеМ НПЌер:" + +#: page.dundicheck.php:55 +msgid "Lookup Another Number:" +msgstr "ТърсО Друг НПЌер:" + +#: page.dundicheck.php:58 +msgid "Lookup" +msgstr "ТърсО" + +#: module.xml +msgid "DUNDi Lookup Registry" +msgstr "DUNDi ТърсеМе" + Index: /modules/branches/2.10/dundicheck/i18n/zh_CN/LC_MESSAGES/dundicheck.po =================================================================== --- /modules/branches/2.10/dundicheck/i18n/zh_CN/LC_MESSAGES/dundicheck.po (revision 7440) +++ /modules/branches/2.10/dundicheck/i18n/zh_CN/LC_MESSAGES/dundicheck.po (revision 7440) @@ -0,0 +1,64 @@ +# 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 , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX 2.5 Chinese Translation\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-09-28 02:52+0200\n" +"PO-Revision-Date: 2009-02-01 14:46+0800\n" +"Last-Translator: 呚埁晟 \n" +"Language-Team: EdwardBadBoy \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Chinese\n" +"X-Poedit-Country: CHINA\n" +"X-Poedit-SourceCharset: utf-8\n" + +#: functions.inc.php:63 +msgid "DUNDi: " +msgstr "DUNDi" + +#: page.dundicheck.php:25 +#, php-format +msgid "DUNDi Information: %s" +msgstr "DUNDi信息%s" + +#: page.dundicheck.php:27 +#, php-format +msgid "The number you are trying to use, %s, is currently available from one of the DUNDi routes you have configured on your system. As a result you cannot use this number on this system. Even if the route configuration does not pass this number you will still be blocked from creating it. If this is not an error, then you will have to un-publish this number on your remote DUNDi setup, disable the DUNDi trunk in question, or disable this module to avoid the checks. Otherwise, remove %s from the remote system before creating this one." +msgstr "䜠正尝试䜿甚的号码%s已被䜠系统䞊的å +¶äž­äž€æ¡DUNDi线路䜿甚了。因歀䜠无法圚系统䞊䜿甚歀号码。即䜿圚线路é +çœ®äž­å¹¶æ²¡æœ‰æ”Ÿè¡Œæ­€å·ç ïŒŒäœ ä¹Ÿäžèƒœåœšæ­€åˆ›å»ºå®ƒã€‚劂果这䞍是䞀䞪错误那么䜠需芁取消圚䜠的远皋DUNDi讟眮䞭对歀号码的发垃犁甚那䞪DUNDiäž­ç»§ïŒŒæˆ–è€ +犁甚歀暡块以避匀检查。吊则䜠需芁圚创建这䞪号码之前从远皋系统䞭移陀%s。" + +#: page.dundicheck.php:31 +msgid "No matches found" +msgstr "未扟到匹é +é¡¹" + +#: page.dundicheck.php:34 +#, php-format +msgid "Results from DUNDi trunk: %s" +msgstr "从DUNDi䞭继䞊获取的结果%s" + +#: page.dundicheck.php:46 +#, php-format +msgid "DUNDi Lookup" +msgstr "DUNDi查询" + +#: page.dundicheck.php:55 +msgid "Lookup Number:" +msgstr "查询号码" + +#: page.dundicheck.php:55 +msgid "Lookup Another Number:" +msgstr "查询及䞀䞪号码" + +#: page.dundicheck.php:58 +msgid "Lookup" +msgstr "查询" + Index: /modules/branches/2.10/dundicheck/i18n/dundicheck.pot =================================================================== --- /modules/branches/2.10/dundicheck/i18n/dundicheck.pot (revision 11797) +++ /modules/branches/2.10/dundicheck/i18n/dundicheck.pot (revision 11797) @@ -0,0 +1,82 @@ +# This file is part of FreePBX. +# +# FreePBX 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. +# +# FreePBX 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 FreePBX. If not, see . +# +# FreePBX language template for dundicheck +# Copyright (C) 2008, 2009, 2010, 2011 Bandwith.com +# +msgid "" +msgstr "" +"Project-Id-Version: FreePBX\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-10 22:46+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "DUNDi Lookup Registry" +msgstr "" + +msgid "System Administration" +msgstr "" + +msgid "" +"This module will check all configured and enabled DUNDi trunks as part of " +"the extension registry function, and report back conflicts if\t\tother sites " +"have the same extensions. This does not filter against the route patterns - " +"it will take any number being created and\t\treport a conflict if that trunk " +"could be used to call that number." +msgstr "" + +#, php-format +msgid "DUNDi Lookup" +msgstr "" + +msgid "DUNDi: " +msgstr "" + +#, php-format +msgid "DUNDi Information: %s" +msgstr "" + +#, php-format +msgid "" +"The number you are trying to use, %s, is currently available from one of the " +"DUNDi routes you have configured on your system. As a result you cannot use " +"this number on this system. Even if the route configuration does not pass " +"this number you will still be blocked from creating it. If this is not an " +"error, then you will have to un-publish this number on your remote DUNDi " +"setup, disable the DUNDi trunk in question, or disable this module to avoid " +"the checks. Otherwise, remove %s from the remote system before creating this " +"one." +msgstr "" + +msgid "No matches found" +msgstr "" + +#, php-format +msgid "Results from DUNDi trunk: %s" +msgstr "" + +msgid "Lookup Number:" +msgstr "" + +msgid "Lookup Another Number:" +msgstr "" + +msgid "Lookup" +msgstr "" Index: /modules/branches/2.10/dundicheck/i18n/it_IT/LC_MESSAGES/dundicheck.po =================================================================== --- /modules/branches/2.10/dundicheck/i18n/it_IT/LC_MESSAGES/dundicheck.po (revision 7250) +++ /modules/branches/2.10/dundicheck/i18n/it_IT/LC_MESSAGES/dundicheck.po (revision 7250) @@ -0,0 +1,54 @@ +msgid "" +msgstr "" +"Project-Id-Version: 2.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-09-28 02:52+0200\n" +"PO-Revision-Date: \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" +"X-Poedit-Language: Italian\n" +"X-Poedit-Country: ITALY\n" + +#: functions.inc.php:63 +msgid "DUNDi: " +msgstr "DUNDi: " + +#: page.dundicheck.php:25 +#, php-format +msgid "DUNDi Information: %s" +msgstr "Informazioni DUNDi: %s" + +#: page.dundicheck.php:27 +#, php-format +msgid "The number you are trying to use, %s, is currently available from one of the DUNDi routes you have configured on your system. As a result you cannot use this number on this system. Even if the route configuration does not pass this number you will still be blocked from creating it. If this is not an error, then you will have to un-publish this number on your remote DUNDi setup, disable the DUNDi trunk in question, or disable this module to avoid the checks. Otherwise, remove %s from the remote system before creating this one." +msgstr "La numerazione che stai cercando di usare, %s, Ú resa disponibile da una delle rotte DUNDi che sono state configurate nel sistema. Quindi questo numerazione non può essere utilizzata su questo sistema. Anche se la configurazione della rotta non passa questa numerazione, sarà impedita la creazione. Se questo non Ú un errore, devi rimuovere la pubblicazione di questa numerazione dall'impostazione remota DUNDi, disattivare il fascio DUNDi in questione, o disattivare questo modulo per evitare i controlli. Altrimenti, rimuovi %s dal sistema remoto prima di creare questa nuova numerazione." + +#: page.dundicheck.php:31 +msgid "No matches found" +msgstr "Nessun risultato trovato" + +#: page.dundicheck.php:34 +#, php-format +msgid "Results from DUNDi trunk: %s" +msgstr "Risultati dal fascio DUNDi: %s" + +#: page.dundicheck.php:46 +#, php-format +msgid "DUNDi Lookup" +msgstr "Ricerca DUNDi" + +#: page.dundicheck.php:55 +msgid "Lookup Number:" +msgstr "Numero da trovare:" + +#: page.dundicheck.php:55 +msgid "Lookup Another Number:" +msgstr "Trova un altro numero:" + +#: page.dundicheck.php:58 +msgid "Lookup" +msgstr "Trova" + Index: /modules/branches/2.10/dundicheck/i18n/es_ES/LC_MESSAGES/dundicheck.po =================================================================== --- /modules/branches/2.10/dundicheck/i18n/es_ES/LC_MESSAGES/dundicheck.po (revision 7479) +++ /modules/branches/2.10/dundicheck/i18n/es_ES/LC_MESSAGES/dundicheck.po (revision 7479) @@ -0,0 +1,55 @@ +msgid "" +msgstr "" +"Project-Id-Version: FreePBX - módulo dundicheck module spanish translation\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-09-28 02:52+0200\n" +"PO-Revision-Date: 2009-01-22 01:15+0100\n" +"Last-Translator: Juan Asensio Sánchez \n" +"Language-Team: Juan Asensio Sánchez \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Spanish\n" +"X-Poedit-Country: SPAIN\n" +"X-Poedit-SourceCharset: utf-8\n" + +#: functions.inc.php:63 +msgid "DUNDi: " +msgstr "DUNDi:" + +#: page.dundicheck.php:25 +#, php-format +msgid "DUNDi Information: %s" +msgstr "Información de DUNDi: %s" + +#: page.dundicheck.php:27 +#, php-format +msgid "The number you are trying to use, %s, is currently available from one of the DUNDi routes you have configured on your system. As a result you cannot use this number on this system. Even if the route configuration does not pass this number you will still be blocked from creating it. If this is not an error, then you will have to un-publish this number on your remote DUNDi setup, disable the DUNDi trunk in question, or disable this module to avoid the checks. Otherwise, remove %s from the remote system before creating this one." +msgstr "" + +#: page.dundicheck.php:31 +msgid "No matches found" +msgstr "" + +#: page.dundicheck.php:34 +#, php-format +msgid "Results from DUNDi trunk: %s" +msgstr "" + +#: page.dundicheck.php:46 +#, php-format +msgid "DUNDi Lookup" +msgstr "" + +#: page.dundicheck.php:55 +msgid "Lookup Number:" +msgstr "" + +#: page.dundicheck.php:55 +msgid "Lookup Another Number:" +msgstr "" + +#: page.dundicheck.php:58 +msgid "Lookup" +msgstr "" + Index: /modules/branches/2.10/dundicheck/page.dundicheck.php =================================================================== --- /modules/branches/2.10/dundicheck/page.dundicheck.php (revision 6053) +++ /modules/branches/2.10/dundicheck/page.dundicheck.php (revision 6053) @@ -0,0 +1,67 @@ + +
+
+ +".sprintf(_("DUNDi Information: %s"),$extdisplay).""; + if ($dundiconflict == 'true') { + echo sprintf(_("The number you are trying to use, %s, is currently available from one of the DUNDi routes you have configured on your system. As a result you cannot use this number on this system. Even if the route configuration does not pass this number you will still be blocked from creating it. If this is not an error, then you will have to un-publish this number on your remote DUNDi setup, disable the DUNDi trunk in question, or disable this module to avoid the checks. Otherwise, remove %s from the remote system before creating this one."),$extdisplay,$extdisplay); + } + $list = dundicheck_lookup_all($extdisplay); + if (empty($list)) { + echo "
"._("No matches found")."
"; + } else { + foreach ($list as $map => $line) { + echo "
".sprintf(_("Results from DUNDi trunk: %s"),$map)."
"; + $output = explode("\n",$line); + unset($output[0]); + foreach ($output as $item) { + echo $item."
"; + } + } + } +?> + +".sprintf(_("DUNDi Lookup")).""; +} + +?> +
+ + + + + + + + + + + + + +
+ "> +
+
Index: /modules/branches/2.10/dundicheck/module.xml =================================================================== --- /modules/branches/2.10/dundicheck/module.xml (revision 11175) +++ /modules/branches/2.10/dundicheck/module.xml (revision 11175) @@ -0,0 +1,31 @@ + + dundicheck + unsupported + DUNDi Lookup Registry + 2.9.0.1 + FreePBX + GPLv2+ + + *2.9.0.1* set repo + *2.9.0.0* 2.9 Update + *2.8.0.0* published 2.8 version + *2.7.0.0* spelling errors, localizations + *2.6.0.0* localizations + *2.5.0* #2918 First release + + + This module will check all configured and enabled DUNDi trunks as part of the extension registry function, and report back conflicts if + other sites have the same extensions. This does not filter against the route patterns - it will take any number being created and + report a conflict if that trunk could be used to call that number. + + tool + + DUNDi Lookup + + + 2.4.0 + + System Administration + release/2.9/dundicheck-2.9.0.1.tgz + 5caf2ac7255e3de518f769ce84fb4bd4 + Index: /modules/branches/2.10/dundicheck/functions.inc.php =================================================================== --- /modules/branches/2.10/dundicheck/functions.inc.php (revision 6053) +++ /modules/branches/2.10/dundicheck/functions.inc.php (revision 6053) @@ -0,0 +1,123 @@ + $num, + 'description' => $foundone + ); + } + } + + $type = isset($active_modules['customappsreg']['type'])?$active_modules['customappsreg']['type']:'tool'; + + foreach ($results as $result) { + $thisexten = $result['exten']; + $extenlist[$thisexten]['description'] = _("DUNDi: ").$result['description']; + $extenlist[$thisexten]['status'] = 'INUSE'; + $extenlist[$thisexten]['edit_url'] = 'config.php?display=dundicheck&dundiconflict=true&extdisplay='.urlencode($thisexten); + } + return $extenlist; + } else { + return array(); + } +} + +function dundicheck_lookup($num, $map) { + global $astman; + if ($astman) { + foreach ($map as $lookup) { + $response = $astman->send_request('Command',array('Command'=>"dundi lookup $num@$lookup")); + if (strstr($response['data'],$num.' (EXISTS)')) { + $parser = explode("@",$response['data']); + $parser = explode("\n",$parser[1]); + return $parser[0]; + } + } + // if sound would have returned so return null + return null; + } +} + +function dundicheck_lookup_all($num) { + global $astman; + + $dundimap = array(); + + $trunklist = core_trunks_list(true); + if (is_array($trunklist)) { + foreach ($trunklist as $trunkprops) { + if (trim($trunkprops['value']) == 'on') { + // value of on is disabled and for zap we don't create a context + continue; + } + switch ($trunkprops['tech']) { + case 'DUNDI': + $dundimap[] = $trunkprops['name']; + break; + default: + } + } + } + + $results = array(); + if ($astman) { + foreach ($dundimap as $lookup) { + $response = $astman->send_request('Command',array('Command'=>"dundi lookup $num@$lookup")); + if (strstr($response['data'],$num.' (EXISTS)')) { + $results[$lookup] = $response['data']; + } + } + // if sound would have returned so return null + return $results; + } +} + +?> Index: /modules/branches/2.10/bulkdids/table.csv =================================================================== --- /modules/branches/2.10/bulkdids/table.csv (revision 11286) +++ /modules/branches/2.10/bulkdids/table.csv (revision 11286) @@ -0,0 +1,15 @@ +action,,"add, del, edit",,"Add, Delete, or Edit an Extension.", +DID,,,DID Number,The incoming DID to match, +description,,,Description,"The caller id name for calls from this user will be set to this name. Only enter the name, NOT the number.", +destination,,,Destination,"The context, extension, priority to go to when this DID is matched. Example: app-daynight,0,1"," if different from the extension number. This is used to masquerade as a different user. A common example is a team of support people who would like their internal callerid to display the general support number (a ringgroup or queue). There will be no effect on external calls."" " +cidnum,,,Caller ID Number,"Define the Caller ID Number to be matched on incoming calls. Leave this field blank to match any or no CID info. In addition to standard dial sequences, you can also put Private, Blocked, Unknown, Restricted, Anonymous and Unavailable in order to catch these special cases if the Telco transmits them.", +pricid,,CHECKED,CID Priority Route,"This effects CID ONLY routes where no DID is specified. If checked, calls with this CID will be routed to this route, even if there is a route to the DID that was called. Normal behavior is for the DID route to take the calls. If there is a specific DID/CID route for this CID, that route will still take the call when that DID is called", +alertinfo,,,Alert Info,ALERT_INFO can be used for distinctive ring with SIP devices., +grppre,,,CID Name Prefix,"You can optionally prefix the Caller ID name. ie: If you prefix with ""Sales:"", a call from John Doe would display as ""Sales:John Doe"" on the extensions that ring.", +mohclass,default,,Music On Hold Class,"Defaults to ""default""", +ringing,,CHECKED,Signal Ringing,"Some devices or providers require RINGING to be sent before ANSWER. You'll notice this happening if you can send calls directly to a phone, but if you send it to an IVR, it won't connect the call.", +delay_answer,,,Pause Before Answer,"An optional delay to wait before processing this route. Setting this value will delay the channel from answering the call. This may be handy if external fax equipment or security systems are installed in parallel and you would like them to be able to seize the line", +privacyman,,1 to enable,Privacy Manager,"If no Caller ID is sent, Privacy Manager will asks the caller to enter their 10 digit phone number. The caller is given 3 attempts. The number of digits and attempts can be defined in privacy.conf. If a user has Call Screening enabled, the incoming caller will be asked to enter their CallerId here if enabled, and then to say their name once determined that the called user requires it.", +pmmaxretries,,1 to 10,Max attempts,"Number of attempts the caller has to enter a valid callerID, only valid if privacyman is set to 1", +pmminlength,,1 to 15,Min Length,"Minimum amount of digits callerID needs to contain in order to be considered valid, only valid if privacyman is set to 1" + Index: /modules/branches/2.10/bulkdids/page.bulkdids.php =================================================================== --- /modules/branches/2.10/bulkdids/page.bulkdids.php (revision 11634) +++ /modules/branches/2.10/bulkdids/page.bulkdids.php (revision 11634) @@ -0,0 +1,268 @@ +. +// +// Copyright 2006 Seth Sargent, Steven Ward +// Portions Copyright 2009 Mikael Carlsson, mickecamino@gmail.com +// Portions Copyright 2009 Schmooze Communications LLC +// +set_time_limit(3000); + +function bdid_fatal($text) { + $clean = str_replace("","",str_replace("