root/modules/branches/2.10/languages/functions.inc.php

Revision 12460, 11.7 kB (checked in by p_lindheimer, 2 years ago)

Merged revisions 12185,12190,12192,12194,12214-12215,12218,12256,12294,12305,12383-12384,12424,12434,12455 via svnmerge from
http://www.freepbx.org/v2/svn/modules/branches/2.9

................

r12185 | mickecarlsson | 2011-05-21 15:00:11 -0700 (Sat, 21 May 2011) | 1 line


Closes #5161 fixes bad validation code

................

r12190 | p_lindheimer | 2011-05-24 20:12:30 -0700 (Tue, 24 May 2011) | 1 line


fixes #5175 and fixes #5176 initialize state of feature code and allow enable/disable from within the gui, some sanity testing would be helpful before I publish this widely

................

r12192 | p_lindheimer | 2011-05-25 10:52:02 -0700 (Wed, 25 May 2011) | 1 line


display default code outside of tooltip re #5175 and re #5176

................

r12194 | GameGamer?43 | 2011-05-25 21:53:13 -0700 (Wed, 25 May 2011) | 1 line


closes #5182 - misspelling in tooltip

................

r12214 | mbrevda | 2011-06-06 07:42:06 -0700 (Mon, 06 Jun 2011) | 1 line


merge to 2.9 for #5127, #5054, #5049, #5140

................

r12215 | mbrevda | 2011-06-06 07:56:21 -0700 (Mon, 06 Jun 2011) | 1 line


merge to 2.9 re #5127, #5054, #5049, #5140, #5142

................

r12218 | mbrevda | 2011-06-06 08:16:19 -0700 (Mon, 06 Jun 2011) | 1 line


unervert the unrevert re #5127, #5054, #5049, #5140, #5142

................

r12256 | mbrevda | 2011-06-13 11:33:13 -0700 (Mon, 13 Jun 2011) | 1 line


revert 12255

................

r12294 | p_lindheimer | 2011-07-07 12:29:11 -0700 (Thu, 07 Jul 2011) | 1 line


fixes #5159 don't set to empty quotes, thanks spermega and Lantizia

................

r12305 | mbrevda | 2011-07-17 04:32:10 -0700 (Sun, 17 Jul 2011) | 1 line


re #5262 should resolve

................

r12383 | p_lindheimer | 2011-08-09 12:10:52 -0700 (Tue, 09 Aug 2011) | 9 lines


Merged revisions 12382 via svnmerge from
http://www.freepbx.org/v2/svn/modules/branches/2.8


........

r12382 | p_lindheimer | 2011-08-09 12:07:06 -0700 (Tue, 09 Aug 2011) | 1 line


fixes #5312 don't include in from-internal

........

................

r12384 | p_lindheimer | 2011-08-09 12:17:04 -0700 (Tue, 09 Aug 2011) | 1 line


fixes #5313 delete the record

................

r12424 | mbrevda | 2011-08-19 06:17:52 -0700 (Fri, 19 Aug 2011) | 1 line


closes #5320, call eval on mixmon_dir

................

r12434 | mickecarlsson | 2011-08-21 21:45:22 -0700 (Sun, 21 Aug 2011) | 1 line


Close #5187, add check for offline endpoints in macro-dial-one

................

r12455 | p_lindheimer | 2011-08-29 14:28:53 -0700 (Mon, 29 Aug 2011) | 9 lines


Merged revisions 11567-11569,11572,11754,11896-11897,11899,12018-12019,12233-12234,12382,12385,12387,12452,12454 via svnmerge from
http://www.freepbx.org/v2/svn/modules/branches/2.8


........

r12387 | p_lindheimer | 2011-08-09 15:12:07 -0700 (Tue, 09 Aug 2011) | 1 line


should fix custom trunk destination re #5314 pls test and provide feedback then will put in and merge up

........

................

  • Property svn:mime-type set to text/x-php
  • Property svn:eol-style set to native
  • Property svn:keywords set to Id Rev Date
Line 
1 <?php
2
3 function languages_destinations() {
4     global $module_page;
5
6     // it makes no sense to point at another queueprio (and it can be an infinite loop)
7     if ($module_page == 'languages') {
8         return false;
9     }
10
11     // return an associative array with destination and description
12     foreach (languages_list() as $row) {
13         $extens[] = array('destination' => 'app-languages,' . $row['language_id'] . ',1', 'description' => $row['description']);
14     }
15     return isset($extens)?$extens:null;
16 }
17
18 function languages_getdest($exten) {
19     return array('app-languages,'.$exten.',1');
20 }
21
22 function languages_getdestinfo($dest) {
23     global $active_modules;
24
25     if (substr(trim($dest),0,14) == 'app-languages,') {
26         $exten = explode(',',$dest);
27         $exten = $exten[1];
28         $thisexten = languages_get($exten);
29         if (empty($thisexten)) {
30             return array();
31         } else {
32             $type = isset($active_modules['languages']['type'])?$active_modules['languages']['type']:'setup';
33             return array('description' => sprintf(_("Language: %s"),$thisexten['description']),
34                          'edit_url' => 'config.php?display=languages&type='.$type.'&extdisplay='.urlencode($exten),
35                                   );
36         }
37     } else {
38         return false;
39     }
40 }
41
42 function languages_get_config($engine) {
43     global $ext;
44     switch ($engine) {
45         case 'asterisk':
46             foreach (languages_list() as $row) {
47                     $ext->add('app-languages',$row['language_id'], '', new ext_noop('Changing Channel to language: '.$row['lang_code'].' ('.$row['description'].')'));
48                     $ext->add('app-languages',$row['language_id'], '', new ext_setlanguage($row['lang_code']));
49                     $ext->add('app-languages',$row['language_id'], '', new ext_goto($row['dest']));
50             }
51         
52         break;
53     }
54 }
55
56 function languages_hookGet_config($engine) {
57     global $ext;
58     global $version;
59     switch($engine) {
60         case "asterisk":
61             $priority = 'report';
62             if (version_compare($version, "1.4", "ge")) {
63                 $ext->splice('macro-user-callerid', 's', $priority,new ext_execif('$["${DB(AMPUSER/${AMPUSER}/language)}" != ""]', 'Set', 'CHANNEL(language)=${DB(AMPUSER/${AMPUSER}/language)}'));
64             } else {
65                 $ext->splice('macro-user-callerid', 's', $priority,new ext_execif('$["${DB(AMPUSER/${AMPUSER}/language)}" != ""]', 'Set', 'LANGUAGE()=${DB(AMPUSER/${AMPUSER}/language)}'));
66             }
67             
68             $routes=languages_incoming_get();
69             foreach($routes as $current => $route){
70                 if($route['extension']=='' && $route['cidnum']){//callerID only
71                     $extension='s/'.$route['cidnum'];
72                     $context=$route['pricid']?'ext-did-0001':'ext-did-0002';
73                 }else{
74                     if(($route['extension'] && $route['cidnum'])||($route['extension']=='' && $route['cidnum']=='')){//callerid+did / any/any
75                         $context='ext-did-0001';
76                     }else{//did only
77                         $context='ext-did-0002';
78                     }
79                     $extension=($route['extension']!=''?$route['extension']:'s').($route['cidnum']==''?'':'/'.$route['cidnum']);
80                 }
81                 if(version_compare($version, "1.4", "ge")){
82                     $ext->splice($context, $extension, 1, new ext_setvar('CHANNEL(language)',$route['language']));
83                 }else{
84                     $ext->splice($context, $extension, 1, new ext_setvar('LANGUAGE',$route['language']));
85                 }
86         }
87         break;
88     }
89 }
90
91 /**  Get a list of all languages
92  */
93 function languages_list() {
94     global $db;
95     $sql = "SELECT language_id, description, lang_code, dest FROM languages ORDER BY description ";
96     $results = $db->getAll($sql, DB_FETCHMODE_ASSOC);
97     if(DB::IsError($results)) {
98         die_freepbx($results->getMessage()."<br><br>Error selecting from languages");   
99     }
100     return $results;
101 }
102
103 function languages_get($language_id) {
104     global $db;
105     $sql = "SELECT language_id, description, lang_code, dest FROM languages WHERE language_id = ".$db->escapeSimple($language_id);
106     $row = $db->getRow($sql, DB_FETCHMODE_ASSOC);
107     if(DB::IsError($row)) {
108         die_freepbx($row->getMessage()."<br><br>Error selecting row from languages");   
109     }
110     
111     return $row;
112 }
113
114 function languages_add($description, $lang_code, $dest) {
115     global $db;
116     $sql = "INSERT INTO languages (description, lang_code, dest) VALUES (".
117         "'".$db->escapeSimple($description)."', ".
118         "'".$db->escapeSimple($lang_code)."', ".
119         "'".$db->escapeSimple($dest)."')";
120     $result = $db->query($sql);
121     if(DB::IsError($result)) {
122         die_freepbx($result->getMessage().$sql);
123     }
124 }
125
126 function languages_delete($language_id) {
127     global $db;
128     $sql = "DELETE FROM languages WHERE language_id = ".$db->escapeSimple($language_id);
129     $result = $db->query($sql);
130     if(DB::IsError($result)) {
131         die_freepbx($result->getMessage().$sql);
132     }
133 }
134
135 function languages_edit($language_id, $description, $lang_code, $dest) {
136     global $db;
137     $sql = "UPDATE languages SET ".
138         "description = '".$db->escapeSimple($description)."', ".
139         "lang_code = '".$db->escapeSimple($lang_code)."', ".
140         "dest = '".$db->escapeSimple($dest)."' ".
141         "WHERE language_id = ".$db->escapeSimple($language_id);
142     $result = $db->query($sql);
143     if(DB::IsError($result)) {
144         die_freepbx($result->getMessage().$sql);
145     }
146 }
147
148 function languages_configpageinit($pagename) {
149     global $currentcomponent;
150
151     $action = isset($_REQUEST['action'])?$_REQUEST['action']:null;
152     $extdisplay = isset($_REQUEST['extdisplay'])?$_REQUEST['extdisplay']:null;
153     $extension = isset($_REQUEST['extension'])?$_REQUEST['extension']:null;
154     $tech_hardware = isset($_REQUEST['tech_hardware'])?$_REQUEST['tech_hardware']:null;
155
156     // We only want to hook 'users' or 'extensions' pages.
157     if ($pagename != 'users' && $pagename != 'extensions')
158         return true;
159     // On a 'new' user, 'tech_hardware' is set, and there's no extension. Hook into the page.
160     if ($tech_hardware != null || $pagename == 'users') {
161         language_applyhooks();
162         $currentcomponent->addprocessfunc('languages_configprocess', 8);
163     } elseif ($action=="add") {
164         // We don't need to display anything on an 'add', but we do need to handle returned data.
165         $currentcomponent->addprocessfunc('languages_configprocess', 8);
166     } elseif ($extdisplay != '') {
167         // We're now viewing an extension, so we need to display _and_ process.
168         language_applyhooks();
169         $currentcomponent->addprocessfunc('languages_configprocess', 8);
170     }
171 }
172
173 function language_applyhooks() {
174     global $currentcomponent;
175
176     // Add the 'process' function - this gets called when the page is loaded, to hook into
177     // displaying stuff on the page.
178     $currentcomponent->addguifunc('languages_configpageload');
179 }
180
181 // This is called before the page is actually displayed, so we can use addguielem().
182 function languages_configpageload() {
183     global $currentcomponent;
184
185     // Init vars from $_REQUEST[]
186     $action = isset($_REQUEST['action'])?$_REQUEST['action']:null;
187     $extdisplay = isset($_REQUEST['extdisplay'])?$_REQUEST['extdisplay']:null;
188     
189     // Don't display this stuff it it's on a 'This xtn has been deleted' page.
190     if ($action != 'del') {
191         $langcode = languages_user_get($extdisplay);
192
193         $section = _('Language');
194         $msgInvalidLanguage = _('Please enter a valid Language Code');
195         $currentcomponent->addguielem($section, new gui_textbox('langcode', $langcode, _('Language Code'), _('This will cause all messages and voice prompts to use the selected language if installed.'), "!isFilename()", $msgInvalidLanguage, true));
196     }
197 }
198
199 function languages_configprocess() {
200     //create vars from the request
201     $action = isset($_REQUEST['action'])?$_REQUEST['action']:null;
202     $ext = isset($_REQUEST['extdisplay'])?$_REQUEST['extdisplay']:null;
203     $extn = isset($_REQUEST['extension'])?$_REQUEST['extension']:null;
204     $langcode = isset($_REQUEST['langcode'])?$_REQUEST['langcode']:null;
205
206     if ($ext==='') {
207         $extdisplay = $extn;
208     } else {
209         $extdisplay = $ext;
210     }
211     if ($action == "add" || $action == "edit") {
212         if (!isset($GLOBALS['abort']) || $GLOBALS['abort'] !== true) {
213             languages_user_update($extdisplay, $langcode);
214         }
215     } elseif ($action == "del") {
216         languages_user_del($extdisplay);
217     }
218 }
219
220 function languages_user_get($xtn) {
221     global $astman;
222
223     // Retrieve the language configuraiton from this user from ASTDB
224     $langcode = $astman->database_get("AMPUSER",$xtn."/language");
225
226     return $langcode;
227 }
228
229 function languages_user_update($ext, $langcode) {
230     global $astman;
231     // Update the settings in ASTDB
232     $astman->database_put("AMPUSER",$ext."/language",$langcode);
233 }
234
235 function languages_user_del($ext) {
236     global $astman;
237
238     // Clean up the tree when the user is deleted
239     $astman->database_deltree("AMPUSER/$ext/language");
240 }
241
242     //inbound route language settings
243 function languages_hook_core($viewing_itemid, $target_menuid){
244     $extension    = isset($_REQUEST['extension'])        ? $_REQUEST['extension']    :'';
245     $cidnum        = isset($_REQUEST['cidnum'])        ? $_REQUEST['cidnum']        :'';
246     $extdisplay    = isset($_REQUEST['extdisplay'])    ? $_REQUEST['extdisplay']    :'';
247     $action        = isset($_REQUEST['action'])        ? $_REQUEST['action']        :'';
248     $language    = isset($_REQUEST['language'])        ? $_REQUEST['language']        :'';
249     //set $extension,$cidnum if we dont already have them
250     if(!$extension && !$cidnum){
251         $opts        = explode('/', $extdisplay);
252         $extension    = $opts['0'];
253         $cidnum        = isset($opts['1']) ? $opts['1'] : '';
254     }else{
255         $extension     = $extension;
256         $cidnum        = $cidnum;
257     }
258     
259     //update if we have enough info
260     if($action == 'edtIncoming' || ( $extension != '' || $cidnum != '') && $language != ''){
261         languages_incoming_update($language=$language,$extension,$cidnum);
262     }
263     if($action=='delIncoming'){
264         languages_incoming_delete($extension,$cidnum);
265     }
266     $html = '';
267     if ($target_menuid == 'did'){
268         $html.='<tr><td colspan="2"><h5>'._("Language").'<hr></h5></td></tr>';
269         $html.='<tr><td><a href="#" class="info">'._('Language').'<span>'._("Allows you to set the language for this DID.").'</span></a>:</td>';
270         $html.='<td><input type="text" name="language" value="'.languages_incoming_get($extension,$cidnum).'"></td></tr>';
271     }
272     return $html;
273 }
274
275 function languages_incoming_get($extension=null,$cidnum=null){
276     global $db;
277     if($extension || $cidnum || (isset($_REQUEST['extdisplay']) && $_REQUEST['extdisplay']=='/') || (isset($_REQUEST['display']) && $_REQUEST['display']=='did')){
278         $sql='SELECT language FROM language_incoming WHERE extension = ? AND cidnum = ?';
279         $lang=$db->getOne($sql, array($extension, $cidnum));
280     }else{
281         $sql='SELECT language_incoming.*,incoming.pricid FROM language_incoming, incoming WHERE language_incoming.cidnum=incoming.cidnum and language_incoming.extension=incoming.extension';
282         $lang=$db->getAll($sql, DB_FETCHMODE_ASSOC);
283     }
284     return $lang;
285 }
286
287 function languages_incoming_update($language=null,$extension=null,$cidnum=null){
288     global $db;
289     $sql='DELETE FROM language_incoming WHERE extension = ? AND cidnum = ?';
290     $db->query($sql,array($extension,$cidnum));
291     if(isset($language) && $language!=''){//no need to keep a record if were not setting the language
292         $sql='INSERT INTO language_incoming (extension,cidnum,language) VALUES (?, ?, ?)';
293         $db->query($sql,array($extension,$cidnum,$language));
294     };
295 }
296
297 function languages_incoming_delete($extension=null,$cidnum=null){
298     global $db;
299     $sql='DELETE FROM language_incoming WHERE extension = ? AND cidnum = ?';
300     $db->query($sql,array($extension,$cidnum));
301 }
302
303 function languages_check_destinations($dest=true) {
304     global $active_modules;
305
306     $destlist = array();
307     if (is_array($dest) && empty($dest)) {
308         return $destlist;
309     }
310     $sql = "SELECT language_id, dest, description FROM languages ";
311     if ($dest !== true) {
312         $sql .= "WHERE dest in ('".implode("','",$dest)."')";
313     }
314     $results = sql($sql,"getAll",DB_FETCHMODE_ASSOC);
315
316     $type = isset($active_modules['languages']['type'])?$active_modules['languages']['type']:'setup';
317
318     foreach ($results as $result) {
319         $thisdest = $result['dest'];
320         $thisid   = $result['language_id'];
321         $destlist[] = array(
322             'dest' => $thisdest,
323             'description' => sprintf(_("Language Change: %s"),$result['description']),
324             'edit_url' => 'config.php?display=languages&type='.$type.'&extdisplay='.urlencode($thisid),
325         );
326     }
327     return $destlist;
328 }
329
330 function languages_change_destination($old_dest, $new_dest) {
331     $sql = 'UPDATE languages SET dest = "' . $new_dest . '" WHERE dest = "' . $old_dest . '"';
332     sql($sql, "query");
333 }
334 ?>
335
Note: See TracBrowser for help on using the browser.