root/contributed_modules/modules/bosssecretary/functions.inc.php

Revision 8394, 31.5 kB (checked in by Maikel, 4 years ago)

Boss secretary module

Line 
1 <?php
2
3
4 /********************************************************
5 *                                                        *
6 *                     API FUNCTIONS                        *
7 *                                                        *
8 ********************************************************/
9
10
11 define("BOSSSECRETARY_PARAM_PREFIX", "bsgroup-");
12 define("BOSSSECRETARY_LABEL_DEFAULT", "Group ");
13 define("BOSSSECRETARY_CONTEXT", "ext-bosssecretary");
14 define("BOSSSECRETARY_MACRO_LOCKED", "macro-bosssecretary-locked");
15 define("BOSSSECRETARY_MACRO_LOCKED_NAME", "bosssecretary-locked");
16 define("BOSSSECRETARY_TOGGLE", "app-bosssecretary-toggle");
17 define("BOSSSECRETARY_ON", "app-bosssecretary-on");
18 define("BOSSSECRETARY_OFF", "app-bosssecretary-off");
19 define("BOSSSECRETARY_HINTS", "app-bosssecretary-hints");
20
21
22 function bosssecretary_get_config($engine){
23     global $db;
24     global $ext;
25     global $amp_conf;
26     global $astman;
27
28     switch($engine) {
29         case "asterisk":
30
31
32
33
34             $fcc_toggle = bosssecretary_get_fcc_toggle();
35             $fcc_on  = bosssecretary_get_fcc_on();
36             $fcc_off  = bosssecretary_get_fcc_off();
37             $groups = bosssecretary_get_all_groups();
38
39             $ctx_app_toggle =   BOSSSECRETARY_TOGGLE;
40             $ctx_app_on     =   BOSSSECRETARY_ON;
41             $ctx_app_off    =   BOSSSECRETARY_OFF;
42             $ctx_app_hints    =    BOSSSECRETARY_HINTS;
43             $ctx_bsc        =    BOSSSECRETARY_CONTEXT;
44
45             $ext->addInclude('from-internal-additional', $ctx_bsc);
46             $ext->addInclude($ctx_bsc, $ctx_app_toggle);
47             $ext->addInclude($ctx_bsc, $ctx_app_on);
48             $ext->addInclude($ctx_bsc, $ctx_app_off);
49             $ext->addInclude($ctx_bsc, $ctx_app_hints);
50
51             if (!empty($groups))
52             {
53
54                 $astman->database_deltree("bosssecretary/group");
55                 $groups = bosssecretary_to_group($groups);
56
57
58
59                 foreach ($groups as $group)
60                 {
61                     $id_group = $group["id_group"];
62
63                     foreach ($group["bosses"] as $extension)
64                     {
65                         $astman->database_put("bosssecretary","group/$id_group/member/$extension", "boss");
66                         $astman->database_put("bosssecretary","group/member/$extension", $id_group);
67                     }
68                     foreach ($group["secretaries"] as $extension)
69                     {
70                         $astman->database_put("bosssecretary","group/$id_group/member/$extension", "secretary");
71                         $astman->database_put("bosssecretary","group/member/$extension", $id_group);
72                     }
73                     foreach ($group["chiefs"] as $extension)
74                     {
75                         $astman->database_put("bosssecretary","group/$id_group/member/$extension", "chief");
76                     }
77                 }
78                 // :::: BSC Off [app-bosssecretary-on] ::::
79
80                 $ext->add($ctx_app_on, $fcc_on, '', new ext_noop("Bosssecretary on starts..."));
81                 $ext->add($ctx_app_on, $fcc_on, '', new ext_answer());
82                 $ext->add($ctx_app_on, $fcc_on, '', new ext_macro ('user-callerid'));
83                 $ext->add($ctx_app_on, $fcc_on, '', new ext_wait ('2'));
84                 $ext->add($ctx_app_on, $fcc_on, '', new ext_gotoif('${DB_EXISTS(bosssecretary/group/member/${AMPUSER})}','on','exit'));
85                 $ext->add($ctx_app_on, $fcc_on, 'on', new ext_setvar('GROUP','${DB(bosssecretary/group/member/${AMPUSER})}'));
86                 $ext->add($ctx_app_on, $fcc_on, '', new ext_dbdel('bosssecretary/group/${GROUP}/locked'));
87                 $ext->add($ctx_app_on, $fcc_on, '', new ext_setvar('STATE','NOT_INUSE'));
88                 $ext->add($ctx_app_on, $fcc_on, '', new ext_gosub('1','sstate',$ctx_app_on));
89                 $ext->add($ctx_app_on, $fcc_on, '', new ext_playback('activated'));
90                 $ext->add($ctx_app_on, $fcc_on, '', new ext_hangup());
91                 $ext->add($ctx_app_on, $fcc_on, 'exit', new ext_noop('${AMPUSER} doesn\\\'t belongs bosssecretary group'));
92                 $ext->add($ctx_app_on, $fcc_on, '', new ext_hangup());
93                 $ext->add($ctx_app_on, 'sstate', '', new ext_setvar('DEVSTATE(Custom:BSC${GROUP})','${STATE}'));
94                 $ext->add($ctx_app_on, 'sstate', 'return', new ext_return());
95
96
97                 // :::: BSC Off [app-bosssecretary-off] ::::
98                 $ext->add($ctx_app_off, $fcc_off, '', new ext_noop("Bosssecretary off starts..."));
99                 $ext->add($ctx_app_off, $fcc_off, '', new ext_answer());
100                 $ext->add($ctx_app_off, $fcc_off, '', new ext_macro ('user-callerid'));
101                 $ext->add($ctx_app_off, $fcc_off, '', new ext_wait ('2'));
102                 $ext->add($ctx_app_off, $fcc_off, '', new ext_gotoif('${DB_EXISTS(bosssecretary/group/member/${AMPUSER})}','off','exit'));
103                 $ext->add($ctx_app_off, $fcc_off, 'off', new ext_setvar('GROUP','${DB(bosssecretary/group/member/${AMPUSER})}'));
104                 $ext->add($ctx_app_off, $fcc_off, "", new ext_setvar('DB(bosssecretary/group/${GROUP}/locked)',"1"));
105                 $ext->add($ctx_app_off, $fcc_off, '', new ext_setvar('STATE','BUSY'));
106                 $ext->add($ctx_app_off, $fcc_off, '', new ext_gosub('1','sstate',$ctx_app_off));
107                 $ext->add($ctx_app_off, $fcc_off, '', new ext_playback('de-activated'));
108                 $ext->add($ctx_app_off, $fcc_off, '', new ext_hangup());
109                 $ext->add($ctx_app_off, $fcc_off, 'exit', new ext_noop('${AMPUSER} doesn\\\'t belongs bosssecretary group'));
110                 $ext->add($ctx_app_off, $fcc_off, '', new ext_hangup());
111                 $ext->add($ctx_app_off, 'sstate', '', new ext_setvar('DEVSTATE(Custom:BSC${GROUP})','${STATE}'));
112                 $ext->add($ctx_app_off, 'sstate', 'return', new ext_return());
113
114                 // :::: BSC Toggle [app-bosssecretary-toggle] ::::
115                 $ext->add($ctx_app_toggle, $fcc_toggle, '', new ext_noop("Bosssecretary toggle starts..."));
116                 $ext->add($ctx_app_toggle, $fcc_toggle, '', new ext_answer());
117                 $ext->add($ctx_app_toggle, $fcc_toggle, '', new ext_macro ('user-callerid'));
118                 $ext->add($ctx_app_toggle, $fcc_toggle, '', new ext_wait ('2'));
119                 $ext->add($ctx_app_toggle, $fcc_toggle, '', new ext_gotoif('${DB_EXISTS(bosssecretary/group/member/${AMPUSER})}','check','exit' ));
120                 $ext->add($ctx_app_toggle, $fcc_toggle, 'check', new ext_setvar('GROUP','${DB(bosssecretary/group/member/${AMPUSER})}'));
121                 $ext->add($ctx_app_toggle, $fcc_toggle, '', new ext_gotoif('${DB_EXISTS(bosssecretary/group/${GROUP}/locked)}','unlock', 'lock'));
122                 $ext->add($ctx_app_toggle, $fcc_toggle, "lock", new ext_setvar('DB(bosssecretary/group/${GROUP}/locked)',"1"));
123                 $ext->add($ctx_app_toggle, $fcc_toggle, '', new ext_setvar('STATE','BUSY'));
124                 $ext->add($ctx_app_toggle, $fcc_toggle, '', new ext_gosub('1','sstate',$ctx_app_toggle));
125                 $ext->add($ctx_app_toggle, $fcc_toggle, '', new ext_playback('de-activated'));
126                 $ext->add($ctx_app_toggle, $fcc_toggle, '', new ext_hangup());
127                 $ext->add($ctx_app_toggle, $fcc_toggle, 'unlock', new ext_dbdel('bosssecretary/group/${GROUP}/locked'));
128                 $ext->add($ctx_app_toggle, $fcc_toggle, '', new ext_setvar('STATE','NOT_INUSE'));
129                 $ext->add($ctx_app_toggle, $fcc_toggle, '', new ext_gosub('1','sstate',$ctx_app_toggle));
130                 $ext->add($ctx_app_toggle, $fcc_toggle, '', new ext_playback('activated'));
131                 $ext->add($ctx_app_toggle, $fcc_toggle, '', new ext_hangup());
132                 $ext->add($ctx_app_toggle, $fcc_toggle, 'exit', new ext_noop('${AMPUSER} doesn\\\'t belongs bosssecretary group'));
133                 $ext->add($ctx_app_toggle, $fcc_toggle, '', new ext_hangup());
134                 $ext->add($ctx_app_toggle, 'sstate', '', new ext_setvar('DEVSTATE(Custom:BSC${GROUP})','${STATE}'));
135                 $ext->add($ctx_app_toggle, 'sstate', 'return', new ext_return());
136
137                 // :::: BSC Hints [app-bosssecretary-hints] ::::
138                 foreach ($groups as $group)
139                 {
140
141                     $id_group = $group["id_group"];
142                     foreach ($group["bosses"] as $extension)
143                     {
144                         $hint = "Custom:BSC$id_group";
145                         $ext_subscribed = $fcc_toggle . $extension;
146                         $ext->add($ctx_app_hints, $ext_subscribed, '', new ext_goto(1, $fcc_toggle, $ctx_app_toggle));
147                         $ext->addHint($ctx_app_hints, $ext_subscribed, $hint);
148
149                     }
150                     foreach ($group["secretaries"] as $extension)
151                     {
152                         $hint = "Custom:BSC$id_group";
153                         $ext_subscribed = $fcc_toggle . $extension;
154                         $ext->add($ctx_app_hints, $ext_subscribed, '', new ext_goto(1, $fcc_toggle, $ctx_app_toggle));
155                         $ext->addHint($ctx_app_hints, $ext_subscribed, $hint);
156                     }
157
158                 }
159
160                 // :::: BSC Context [ext-bosssecretary] ::::
161                 foreach ($groups as $group)
162                 {
163                     $AllExtensions = array_merge($group["bosses"], $group["secretaries"]);
164                     $id_group = $group["id_group"];
165
166                     foreach ($group["bosses"] as $extension)
167                     {
168                         $ext->add($ctx_bsc, $extension, '', new ext_noop("Bosssecretary: Checking  lock for $extension extension"));
169                         $ext->add($ctx_bsc, $extension, '', new ext_macro ('user-callerid'));
170                         $ext->add($ctx_bsc, $extension, '', new ext_setvar('CALLER','${CALLERID(num)}'));
171                         $ext->add($ctx_bsc, $extension, '', new ext_gotoif('${DB_EXISTS(bosssecretary/group/'.$id_group.'/member/${CALLER})}','exit_module'));
172                         $ext->add($ctx_bsc, $extension, '', new ext_gotoif('${DB_EXISTS(bosssecretary/group/'.$id_group.'/locked)}','exit_module','run_module'));
173                         $ext->add($ctx_bsc, $extension, 'run_module', new ext_noop("Bosssecretary: Executing module"));
174                         $ext->add($ctx_bsc, $extension, '', new ext_sipaddheader("Alert-Info", "<http://nohost>\;info=alert-group\;x-line-id=0"));
175                         $extensions = array();
176                         foreach ($group["secretaries"] as $sip_extension)
177                         {
178                             $extensions[] = "$sip_extension";
179                         }
180                         $extensions[] = "$extension";
181                         /*
182                         exten => 105,n,Dial(SIP/108&SIP/105,)
183                         exten => 105,n,Macro(dial,20,${DIAL_OPTIONS},108-105)
184                         */
185                         $args = '${RINGTIMER},${DIAL_OPTIONS},' . implode ("-", $extensions);
186                         $ext->add($ctx_bsc, $extension, '', new ext_macro ("dial", $args));
187                         $ext->add($ctx_bsc, $extension, 'exit_module', new ext_noop("Bosssecretary: Exit") );
188                         $ext->add($ctx_bsc, $extension, '', new ext_goto(1, $extension, "ext-local") );
189                         $extensions = "";
190                     }
191                 }
192             }
193
194             break;
195     }
196
197 }
198
199
200 /********************************************************
201 *                                                        *
202 *                     DATABASE FUNCTIONS                    *
203 *                                                        *
204 ********************************************************/
205
206 function bosssecretary_get_groups()
207 {
208     global $db;
209     $sql = "SELECT * from bosssecretary_group";
210     $results = $db->getAll($sql);
211     if(DB::IsError($results)) {
212         $results = null;
213     }
214     return $results;
215 }
216
217
218 function bosssecretary_get_fcc_toggle()
219 {
220     $fcc = new featurecode('bosssecretary', 'bsc_toggle');
221     $extLock = $fcc->getCodeActive();
222     unset($fcc);
223     return $extLock;
224 }
225
226 function bosssecretary_get_fcc_on()
227 {
228     $fcc = new featurecode('bosssecretary', 'bsc_on');
229     $extLock = $fcc->getCodeActive();
230     unset($fcc);
231     return $extLock;
232 }
233
234 function bosssecretary_get_fcc_off()
235 {
236     $fcc = new featurecode('bosssecretary', 'bsc_off');
237     $extLock = $fcc->getCodeActive();
238     unset($fcc);
239     return $extLock;
240 }
241
242
243
244 function bosssecretary_to_group($groups)
245 {
246     $newGroup = array();
247     foreach ($groups as $group)
248     {
249         if (!isset($newGroup[$group["id_group"]]))
250         {
251             $newGroup[$group["id_group"]] =  $group;
252             $newGroup[$group["id_group"]]["bosses"] = array();
253             // isset is so much faster than in_array ;)
254             $newGroup[$group["id_group"]]["bosses"][$group["boss_extension"]] = $group["boss_extension"];
255
256             $newGroup[$group["id_group"]]["secretaries"] = array();
257             // isset is so much faster than in_array ;)
258             $newGroup[$group["id_group"]]["secretaries"][$group["secretary_extension"]] = $group["secretary_extension"];
259
260             if (isset($group["chief_extension"]))
261             {
262                 $newGroup[$group["id_group"]]["chiefs"] = array();
263                 $newGroup[$group["id_group"]]["chiefs"][$group["chief_extension"]] = $group["chief_extension"];
264             }
265         }
266         else
267         {
268             // isset is so much faster than in_array ;)
269             if (!isset($newGroup[$group["id_group"]]["bosses"][$group["boss_extension"]]))
270             {
271                 $newGroup[$group["id_group"]]["bosses"][$group["boss_extension"]] = $group["boss_extension"];
272             }
273             // isset is so much faster than in_array ;)
274             if (!isset($newGroup[$group["id_group"]]["secretaries"][$group["secretary_extension"]]))
275             {
276                 $newGroup[$group["id_group"]]["secretaries"][$group["secretary_extension"]] = $group["secretary_extension"];
277             }
278             if (!isset($newGroup[$group["id_group"]]["chiefs"][$group["chief_extension"]]))
279             {
280                 $newGroup[$group["id_group"]]["chiefs"][$group["chief_extension"]] = $group["chief_extension"];
281             }
282         }
283     }
284     return $newGroup;
285 }
286
287 function bosssecretary_search($extensions)
288 {
289     global $db;
290     $extensions = explode(",", $extensions);
291     foreach ($extensions as $extension)
292     {
293         if (is_numeric($extension))
294         {
295             $valid[]= trim($extension);
296         }
297
298     }
299     if (!empty($valid))
300     {
301         $extensions = implode(",", $valid);
302         $sql = "SELECT boss_extension AS extension, 'boss' as `type`, g.* FROM bosssecretary_group as g INNER JOIN bosssecretary_boss as b ON b.id_group = g.id_group  WHERE boss_extension IN ($extensions)
303             UNION
304             SELECT secretary_extension AS extension, 'secretary' as `type`, g.* FROM bosssecretary_group as g INNER JOIN bosssecretary_secretary as s ON s.id_group = g.id_group  WHERE secretary_extension IN ($extensions)
305             UNION
306             SELECT chief_extension AS extension, 'chief' as `type`, g.* FROM bosssecretary_group as g INNER JOIN bosssecretary_chief as c ON c.id_group = g.id_group  WHERE chief_extension IN ($extensions)
307 ";
308         //echo $sql . "<br>";
309
310         $results = $db->getAll($sql, array(), DB_FETCHMODE_ASSOC);
311         if(DB::IsError($results)) {
312             $results = null;
313         }
314         return $results;
315     }
316     return null;
317
318 }
319
320
321 function bosssecretary_get_all_groups()
322 {
323     global $db;
324     $sql = "SELECT
325             g.id_group,
326             boss_extension,
327             secretary_extension,
328             chief_extension 
329         FROM bosssecretary_group AS g 
330         INNER JOIN bosssecretary_boss AS b ON g.id_group = b.id_group
331         INNER JOIN bosssecretary_secretary AS s ON g.id_group = s.id_group
332         LEFT JOIN bosssecretary_chief AS c ON g.id_group = c.id_group
333 ;";
334     $results = $db->getAll($sql, array(), DB_FETCHMODE_ASSOC);
335     if(DB::IsError($results)) {
336         $results = null;
337     }
338     return $results;
339 }
340
341 function bosssecretary_array_diff_with_db(array $exts, $group_number)
342 {
343     global $db;
344
345
346     if (!empty($exts))
347     {
348         if (bosssecretary_group_exists($group_number))
349         {
350             $sqlB = "AND id_group <> '" . $db->escapeSimple($group_number) . "'";
351             $sqlS = "AND id_group <> '" . $db->escapeSimple($group_number) . "'";
352         }
353         else
354         {
355             $sqlB = $sqlS = "";
356         }
357         $exts = array_unique($exts);
358         $strExts = bosssecretary_array_to_mysql_param_in($exts);
359
360         $sql = "SELECT `boss_extension` AS `extension` FROM `bosssecretary_boss` WHERE boss_extension IN ($strExts) $sqlB
361                 UNION
362                 SELECT `secretary_extension` AS `extension` FROM `bosssecretary_secretary` WHERE secretary_extension IN ($strExts) $sqlS";
363
364         $results = $db->getAll($sql, array(), DB_FETCHMODE_ASSOC);
365         if(DB::IsError($results))
366         {
367             $results = null;
368         }
369         else
370         {
371             foreach ($results as $record)
372             {
373                 if (($key = array_search($record['extension'], $exts)) !== FALSE)
374                 {
375                     unset($exts[$key]);
376                 }
377             }
378             $strExts = bosssecretary_array_to_mysql_param_in($exts);
379             $sql = "SELECT extension FROM `users` WHERE extension IN ($strExts)";
380             $results = $db->getAll($sql, array(), DB_FETCHMODE_ASSOC);
381             if(DB::IsError($results))
382             {
383                 $results = null;
384             }
385             else
386             {
387                 $exts = array();
388                 foreach ($results as $record)
389                 {
390                     array_push($exts, current($record));
391                 }
392             }
393
394         }
395     }
396     return $exts;
397 }
398
399
400
401
402 function bosssecretary_clean_remove_duplicates( $bosses, $secretaries , $group_number = "")
403 {
404     // Extraigo las extensiones de jefes del formulario
405     $arr_bosses_extensions = bosssecretary_str_extensions_to_array($bosses);
406
407     // Extraigo las extensiones de secretaria del formulario
408     $arr_secretaries_extensions = bosssecretary_str_extensions_to_array($secretaries);
409
410     // Quito de las extensiones de secretarias las extensiones que estan en los jefes
411     $arr_secretaries_extensions = bosssecretary_array_diff($arr_secretaries_extensions, $arr_bosses_extensions);
412
413
414     $extensionsCleaned = array();
415     // Ahora quito de las extensiones de secretarias las extensiones que ya son jefes o secretarias segun la BD
416     $extensionsCleaned["secretaries"] = bosssecretary_array_diff_with_db($arr_secretaries_extensions, $group_number);
417
418     // Ahora quito de las extensiones de jefes las extensiones que ya son jefes o secretarias segun la BD
419     $extensionsCleaned["bosses"] = bosssecretary_array_diff_with_db($arr_bosses_extensions, $group_number);
420     return $extensionsCleaned;
421 }
422
423 function bosssecretary_get_group_number_free()
424 {
425     global $db;
426     $sql = "SELECT MIN(group_number) AS Bottom FROM bosssecretary_group_numbers_free ORDER BY group_number ASC LIMIT 1";
427     $result = $db->getAll($sql, array(), DB_FETCHMODE_ASSOC);
428     if(DB::IsError($result)) {
429         $result = null;
430     }
431     if (!isset($result[0]["Bottom"]))
432     {
433         $sql = "SELECT MAX(id_group) AS Top FROM bosssecretary_group";
434         $result = $db->getAll($sql, array(), DB_FETCHMODE_ASSOC);
435         if(DB::IsError($result)) {
436             $result = null;
437         }
438         if (!isset($result[0]["Top"]))
439         {
440             $next = 1;
441         }
442         else
443         {
444             $next = $result[0]["Top"] + 1;
445         }
446     }
447     else
448     {
449         $next = $result[0]["Bottom"];
450     }
451     return $next;
452 }
453
454
455 function bosssecretary_set_group_number_free($number)
456 {
457     global $db;
458     $sql = "INSERT INTO bosssecretary_group_numbers_free VALUES ('$number')";
459     //$result = $db->getAll($sql);
460     return sql($sql);
461 }
462
463 function bosssecretary_remove_group_number_free($number)
464 {
465     global $db;
466     $sql = "DELETE FROM bosssecretary_group_numbers_free WHERE _rowid NOT IN (SELECT _rowid FROM bosssecretary_group) AND _rowid > (SELECT MAX(_rowid) FROM bosssecretary_group)";
467     sql($sql);
468     $sql = "DELETE FROM bosssecretary_group_numbers_free WHERE _rowid = '$number'";
469     return sql($sql);
470 }
471
472
473
474 function bosssecretary_group_add ( $group_number, $group_label,  array $bosses, array $secretaries, $chiefs)
475 {
476     global $db;
477     $errors= array();
478     if (is_numeric($group_number) or $group_number =="")
479     {
480         if (!bosssecretary_group_exists($group_number))
481         {
482             if (empty($bosses))
483             {
484                 array_push($errors, "You must put one boss extension at least");
485             }
486             if (empty($secretaries))
487             {
488                 array_push($errors, "You must put one secretary extension at least");
489             }
490
491
492             if (empty($errors))
493             {
494                 $sql = "INSERT INTO bosssecretary_group (`id_group`, `label`) VALUES('".$db->escapeSimple($group_number)."', '".$db->escapeSimple($group_label)."')";
495                 sql($sql);
496                 //$group_number = mysql_insert_id();
497                 bosssecretary_remove_group_number_free($group_number);
498
499                 foreach ($bosses as $boss)
500                 {
501                     $boss = trim($boss);
502                     if (!empty($boss) and !(bosssecretary_extension_in_bosses_group($boss)))
503                     {
504                         $sql = "INSERT INTO bosssecretary_boss VALUES ('$group_number', '$boss')";
505                         sql($sql);
506                     }
507                     else
508                     {
509                         array_push($errors, "($boss) Extension exists already in another group like boss");
510                     }
511                 }
512                 foreach ($secretaries as $secretary)
513                 {
514                     $secretary = trim($secretary);
515                     if (!empty($secretary) and !(bosssecretary_extension_in_secretaries_group($secretary)))
516                     {
517                         $sql = "INSERT INTO bosssecretary_secretary VALUES ('$group_number', '$secretary')";
518                         sql($sql);
519                     }
520                     else
521                     {
522                         array_push($errors, "($secretary) Extension exists already in another group like secretary");
523                     }
524
525                 }
526                 if (is_array($chiefs))
527                 {
528                     foreach ($chiefs as $chief)
529                     {
530                         $chief = trim($chief);
531                         if (!empty($chief))
532                         {
533                             $sql = "INSERT INTO bosssecretary_chief VALUES ('$group_number', '$chief')";
534                             sql($sql);
535                         }
536                     }
537                 }
538             }
539         }
540         else
541         {
542             array_push($errors, 'Group exists already');
543         }
544     }
545     else
546     {
547         array_push($errors, 'Group number must be a numeric value');
548     }
549     return $errors;
550
551
552 }
553
554
555 function bosssecretary_group_edit ( $group_number, $group_label,  array $bosses, array $secretaries, array $chiefs)
556 {
557     global $db;
558     $errors= array();
559     if (is_numeric($group_number))
560     {
561         if (bosssecretary_group_exists($group_number) )
562         {
563             if (empty($bosses))
564             {
565                 array_push($errors, "You must put one boss extension at least");
566             }
567             if (empty($secretaries))
568             {
569                 array_push($errors, "You must put one secretary extension at least");
570             }
571
572             if (empty($errors))
573             {
574                 $sql = "DELETE FROM `bosssecretary_group` WHERE id_group = $group_number";
575                 sql($sql);
576
577                 $sql = "DELETE FROM `bosssecretary_boss` WHERE id_group = $group_number";
578                 sql($sql);
579
580                 $sql = "DELETE FROM `bosssecretary_secretary` WHERE id_group = $group_number";
581                 sql($sql);
582
583                 $sql = "DELETE FROM `bosssecretary_chief` WHERE id_group = $group_number";
584                 sql($sql);
585
586                 $sql = "INSERT INTO bosssecretary_group (`id_group`, `label`) VALUES('".$db->escapeSimple($group_number)."', '".$db->escapeSimple($group_label)."')";
587                 sql($sql);
588                 foreach ($bosses as $boss)
589                 {
590                     $boss = trim($boss);
591                     if (!empty($boss))
592                     {
593                         $sql = "INSERT INTO bosssecretary_boss VALUES ('$group_number', '$boss')";
594                         sql($sql);
595                     }
596                 }
597                 foreach ($secretaries as $secretary)
598                 {
599                     $secretary = trim($secretary);
600                     if (!empty($secretary))
601                     {
602                         $sql = "INSERT INTO bosssecretary_secretary VALUES ('$group_number', '$secretary')";
603                         sql($sql);
604                     }
605                 }
606
607                 foreach ($chiefs as $chief)
608                 {
609                     $chief = trim($chief);
610                     if (!empty($chief))
611                     {
612                         $sql = "INSERT INTO bosssecretary_chief VALUES ('$group_number', '$chief')";
613                         sql($sql);
614                     }
615                 }
616
617             }
618         }
619         else
620         {
621             array_push($errors, "Group doesn't exists");
622         }
623     }
624     else
625     {
626         array_push($errors, 'Group number must be a value numeric');
627     }
628     return $errors;
629
630
631 }
632
633 function bosssecretary_group_delete($group_number)
634 {
635     global $db;
636     $sql = "DELETE FROM `bosssecretary_group` WHERE id_group = '$group_number'";
637     $group = sql($sql);
638
639
640     $sql = "DELETE FROM `bosssecretary_boss` WHERE id_group = '$group_number'";
641     $bosses = sql($sql);
642
643     $sql = "DELETE FROM `bosssecretary_secretary` WHERE id_group = '$group_number'";
644     $secretaries = sql($sql);
645
646     $sql = "DELETE FROM `bosssecretary_chief` WHERE id_group = '$group_number'";
647     $chiefs = sql($sql);
648
649     bosssecretary_set_group_number_free($group_number);
650     return (($group === $bosses) and ($group===$secretaries));
651 }
652
653 function bosssecretary_group_exists( $group)
654 {
655     global $db;
656
657     $sql = "SELECT 'true' from bosssecretary_group WHERE id_group='" . $db->escapeSimple($group). "' LIMIT 1";
658     $results = $db->getAll($sql);
659     if(DB::IsError($results)) {
660         $results = null;
661     }
662     return count($results) == 1;
663 }
664
665
666
667
668
669 function bosssecretary_extension_in_bosses_group( $ext)
670 {
671     global $db;
672     $sql = "SELECT 'true' from bosssecretary_boss WHERE boss_extension='" . $db->escapeSimple($ext) . "' LIMIT 1";
673     $results = $db->getAll($sql);
674     if(DB::IsError($results)) {
675         $results = null;
676     }
677     return count($results) == 1;
678 }
679
680
681 function bosssecretary_extension_in_secretaries_group( $ext)
682 {
683     global $db;
684     $sql = "SELECT 'true' from bosssecretary_secretary WHERE secretary_extension='" . $db->escapeSimple($ext) . "' LIMIT 1";
685     $results = $db->getAll($sql);
686     if(DB::IsError($results)) {
687         $results = null;
688     }
689     return count($results) == 1;
690 }
691
692
693
694 function bosssecretary_get_data_of_group($group)
695 {
696     global $db;
697
698     // we use LEFT JOIN because at least we wanna to know info group (id_group and label)!
699     $sql = "SELECT
700             g.id_group,
701             g.label,
702             b.boss_extension,
703             s.secretary_extension,
704             c.chief_extension 
705         FROM bosssecretary_group AS g
706         LEFT JOIN bosssecretary_boss AS b ON b.id_group = g.id_group
707         LEFT JOIN bosssecretary_secretary AS s ON s.id_group = g.id_group
708         LEFT JOIN bosssecretary_chief AS c ON c.id_group = g.id_group
709         WHERE g.id_group='" $db->escapeSimple($group) . "'";
710
711     $results = $db->getAll($sql, array(), DB_FETCHMODE_ASSOC);
712     if(DB::IsError($results)) {
713         $results = null;
714     }
715     return $results;
716 }
717
718
719
720 function bosssecretary_get_extension_data($ext){
721     global $db;
722     $sql = " SELECT extension, name FROM `users` u WHERE extension = '" $db->escapeSimple($ext) . "' LIMIT 1;";
723     $results = $db->getAll($sql);
724
725     if(DB::IsError($results)) {
726         $results = array();
727     }
728     else{
729         $results = current($results);
730     }
731     return $results;
732 }
733
734 function bosssecretary_extension_exists($ext){
735     global $db;
736     $sql = "SELECT 'true' FROM `users` WHERE extension = '" . $db->escapeSimple($ext) . "' LIMIT 1";
737     $result = $db->getAll($sql);
738     return count($result[0]) === 1;
739 }
740
741
742 /********************************************************
743 *                                                        *
744 *                     UTILS FUNCTIONS                        *
745 *                                                        *
746 ********************************************************/
747
748 /*
749
750 $haystack = array('a','b','c', 'd');
751 $needle = array('b','c', 'd','e');
752
753 $result = bosssecretary_array_diff($haystack, $needle);
754
755 $result is equal to array('a').
756
757 Yeah! I know! array_diff is a php function BUT is broken since v4.0.4 and we need it!
758 http://www.php.net/array_diff
759
760 */
761
762
763 function bosssecretary_array_diff(array $haystack, array $needle)
764 {
765     foreach ($needle as $value)
766     {
767         if (($key = array_search($value, $haystack)) !== FALSE)
768         {
769             unset($haystack[$key]);
770         }
771     }
772     return $haystack;
773 }
774
775 /*
776
777 $haystack = array('a', 'b', 1, 10);
778
779 echo  bosssecretary_array_to_mysql_param_in($haystack);
780
781 output is:
782 'a', 'b', '1', '10'
783
784 */
785
786
787 function bosssecretary_array_to_mysql_param_in(array $params)
788 {
789     global $db;
790     $arrParams = array();
791     foreach ($params as $value)
792     {
793         array_push($arrParams, "'" .$db->escapeSimple($value). "'");
794     }
795     return implode($arrParams, ", ");
796 }
797
798
799
800
801 function bosssecretary_str_extensions_to_array($strExtensions)
802 {
803     $strExtensions = trim($strExtensions);
804     $strExtensions = str_replace(" ", "\n", $strExtensions);
805     $arrExtensions = explode("\n", $strExtensions);
806     foreach ($arrExtensions as $key => &$ext)
807     {
808         $ext = str_replace('\n','', $ext);
809         $ext = trim($ext);
810         if (empty($ext) and $ext != '0') // 0 is considered an empty string by some versions of php
811         unset($arrExtensions[$key]);
812     }
813     return $arrExtensions;
814 }
815
816 function bosssecretary_create_nav_groups_links($groups, $dispnum)
817 {
818     $links = array();
819     $link["url"] = "config.php?display=$dispnum&bsgroupdisplay=".BOSSSECRETARY_PARAM_PREFIX. "add";
820     $link["text"] = "Add Group";
821     array_push($links, $link);
822     if (!empty($groups))
823     {
824         foreach ($groups as $group)
825         {
826             $link["url"] = "config.php?display=$dispnum&bsgroupdisplay=".BOSSSECRETARY_PARAM_PREFIX . $group[0];
827             if (trim($group[1]) == "" )
828             {
829                 $group[1] = BOSSSECRETARY_LABEL_DEFAULT . $group[0];
830             }
831             $link["text"] = $group[0] . " (". $group[1].")";
832             array_push($links, $link);
833         }
834     }
835     return $links;
836 }
837
838 function bosssecretary_extract_group_from_request( $param)
839 {
840     return ltrim($param, BOSSSECRETARY_PARAM_PREFIX); // easy, isn't it?
841 }
842
843
844 function bosssecretary_set_params_to_edit( $records)
845 {
846     $vars = array();
847     $first = current($records);
848     $vars["group_number"] =  $first["id_group"];
849     $vars["group_label"] =  $first["label"];
850
851     if (trim($vars["group_label"]) == "")
852     {
853         $vars["group_label"] = BOSSSECRETARY_LABEL_DEFAULT . $vars["group_number"];
854     }
855
856     $vars["bosses_extensions"] = "";
857     $vars["secretaries_extensions"] = "";
858     $vars["chiefs_extensions"] = "";
859     $s = array();
860     $b = array();
861     $c = array();
862     foreach ($records as $record)
863     {
864
865         if (!empty($record["boss_extension"]))
866         {
867             array_push($b, $record["boss_extension"]);
868         }
869         if (!empty($record["secretary_extension"]))
870         {
871             array_push($s, $record["secretary_extension"]);
872         }
873         if (!empty($record["chief_extension"]))
874         {
875             array_push($c, $record["chief_extension"]);
876         }
877     }
878     $vars["bosses"] = array_unique($b);
879     $vars["secretaries"] = array_unique($s);
880     $vars["chiefs"] = array_unique($c);
881     return $vars;
882 }
883
884 /********************************************************
885 *                                                        *
886 *                     GUI FUNCTIONS                        *
887 *                                                        *
888 ********************************************************/
889
890
891 function bosssecretary_content($title, $content, $messages){
892     echo <<<OUTPUT
893
894
895 <div class="content">
896     <h2>$title</h2>
897 <script>
898 // AJAX to the SubCategory DropDown
899 function getExtensions(extensions)
900 {
901     
902     var url = "config.php?sid=" + Math.random() + "&display=bosssecretary&extensions=" + extensions + "&ajax=true";
903     xmlHttp=GetXmlHttpObject(setExtensions);
904     xmlHttp.open("GET", url , true);
905     xmlHttp.send(null);
906     document.getElementById('divExtensions').innerHTML = "Searching";
907     return true;
908 }
909
910 function setExtensions()
911 {
912     if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
913     {
914         var datos;
915         datos = (xmlHttp.responseText);
916         document.getElementById('divExtensions').innerHTML = datos;
917     }
918 }
919
920
921 function GetXmlHttpObject(handler){
922     var objXmlHttp=null
923     if (navigator.userAgent.indexOf("Opera")>=0){
924         alert("This doesn't work in Opera")
925         return
926     }
927     if (navigator.userAgent.indexOf("MSIE")>=0){
928         var strName="Msxml2.XMLHTTP"
929         if (navigator.appVersion.indexOf("MSIE 5.5")>=0){
930             strName="Microsoft.XMLHTTP"
931         }
932         try{
933             objXmlHttp=new ActiveXObject(strName)
934             objXmlHttp.onreadystatechange=handler
935             return objXmlHttp
936         }catch(e){
937             alert("Error. Scripting for ActiveX might be disabled")
938             return
939         }
940     }
941     if (navigator.userAgent.indexOf("Mozilla")>=0){
942         objXmlHttp=new XMLHttpRequest()
943         objXmlHttp.onload=handler
944         objXmlHttp.onerror=handler
945         return objXmlHttp
946     }
947 }
948
949 </script>
950 <form method="post" name=searchbosssecretary action="config.php?display=bosssecretary" onsubmit="getExtensions(document.getElementById('extensions').value); return false;">
951 <table>
952             <tr>
953                 <td colspan="2"><h5>Buscar grupo</h5> <hr /> </td>
954             </tr>           
955             <tr>
956                 <td colspan="2"><label>Extension:</label> <input type="text" id="extensions" name= "extension" value=""/> <input type="button" name="submitSearch" onclick="getExtensions(document.getElementById('extensions').value);" value="Search" /></td>               
957             </tr>
958
959             <tr>
960                 <td colspan="2"><div id="divExtensions"></div></td>
961             </tr>
962             <tr>
963                 <td colspan="2"><hr /></td>
964             </tr>           
965 </table>
966 </form>
967
968     $messages
969     $content
970
971 </div>
972
973 OUTPUT;
974
975 }
976
977
978 function bosssecretary_get_form_add( array $params)
979 {
980     $vars["form_title"] = "Add Group";
981     $vars["form_url"] = "config.php?display=bosssecretary&bsgroupdisplay=".BOSSSECRETARY_PARAM_PREFIX. "add";
982     $vars["bosses_extensions"]         =    (isset($params["bosses"])) ? implode($params["bosses"], "\n") : '';
983     $vars["secretaries_extensions"]    =    (isset($params["secretaries"])) ? implode($params["secretaries"], "\n") : '';
984     $vars["chiefs_extensions"]    =    (isset($params["chiefs"])) ? implode($params["chiefs"], "\n") : '';
985     $vars["group_label"] = (isset($params["group_label"])) ? $params["group_label"] : '';
986     $vars["delete_button"] = "";
987     $vars["action"] = "Add";
988     $vars["message_details"] = $params["message_details"];
989     $vars["message_title"] = $params["message_title"];
990     return bosssecretary_get_form($vars);
991 }
992
993
994 function bosssecretary_get_form_edit( array $params)
995 {
996     $vars["form_title"] = "Edit Group";
997     $vars["form_url"] = "config.php?display=bosssecretary&bsgroupdisplay=".BOSSSECRETARY_PARAM_PREFIX. $params["group_number"];
998     $vars["bosses_extensions"] = (isset($params["bosses"])) ? implode($params["bosses"], "\n") : '';
999     $vars["secretaries_extensions"] = (isset($params["secretaries"])) ? implode($params["secretaries"], "\n") : '';
1000     $vars["chiefs_extensions"]    =    (isset($params["chiefs"])) ? implode($params["chiefs"], "\n") : '';
1001     $vars["group_number"] = $params["group_number"];
1002     $vars["group_label"] = $params["group_label"];
1003     $vars["delete_button"] = bosssecretary_get_delete_button();
1004     $vars["action"] = "Edit";
1005     $vars["message_details"] = $params["message_details"];
1006     $vars["message_title"] = $params["message_title"];
1007     $vars["delete_question"] = "Do you really to want delete " . $vars["group_number"] . " (" .$vars["group_label"] . ") group?";
1008     $vars["delete_url"] = "config.php?display=bosssecretary&bsgroupdelete=".BOSSSECRETARY_PARAM_PREFIX. $params["group_number"];
1009     return bosssecretary_get_form($vars);
1010 }
1011
1012
1013 function bosssecretary_get_form ( array $vars)
1014 {
1015     $sForm = file_get_contents(dirname(__FILE__). "/form_template.tpl");
1016
1017
1018     $vars["messages"] = "";
1019     if (!empty($vars["message_details"]))
1020     {
1021         $vars["messages"] = "<h5>".$vars["message_title"] . "</h5>";
1022         $vars["messages"] .= "<ul>";
1023         foreach ($vars["message_details"] as $details)
1024         {
1025             $vars["messages"] .= "<li>$details</li>";
1026         }
1027         $vars["messages"] .= "</ul>";
1028         unset($vars["message_details"]);
1029         unset($vars["message_title"]);
1030     }
1031
1032
1033     foreach ($vars as $var => $value)
1034     {
1035         $sForm = str_replace("{".$var. "}", $value, $sForm);
1036     }
1037     return $sForm;
1038 }
1039
1040
1041
1042
1043 function bosssecretary_get_delete_button()
1044 {
1045     $sForm = file_get_contents(dirname(__FILE__). "/delete_button.tpl");
1046     return str_replace("{delete_button_label}", "Delete Group", $sForm);
1047 }
1048
1049
1050
1051 function bosssecretary_show_nav_users($links){
1052     echo <<<OUTPUT
1053
1054 <div class="rnav">
1055     <ul>
1056
1057 OUTPUT;
1058     foreach ($links as $link){
1059         $url  = $link['url'];
1060         $text = $link['text'];
1061
1062         echo <<<OUTPUT
1063         <li><a href="{$url}">{$text}</a></li>
1064     
1065 OUTPUT;
1066 }
1067 echo <<<OUTPUT
1068     </ul>
1069 </div>
1070
1071 OUTPUT;
1072 }
1073
1074 ?>
1075
Note: See TracBrowser for help on using the browser.