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

Revision 8394, 31.5 kB (checked in by Maikel, 3 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 ?>
Note: See TracBrowser for help on using the browser.