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

Revision 8393, 8.8 kB (checked in by Maikel, 3 years ago)

Keylock Module

Line 
1 <?php
2
3
4 /********************************************************
5  *                            *
6  *          API FUNCTIONS           *
7  *                            *
8  ********************************************************/
9
10
11
12 function keylock_get_config($engine)
13 {
14     global $db;
15     global $ext;
16
17     switch($engine) {
18   case "asterisk":
19       $modulename = "keylock";
20
21   $lock_label = "keylock_lock";
22   $unlock_label = "keylock_unlock";
23   $toggle_label = "keylock_toggle";
24   $setpass_label = "keylock_setpass";
25
26   $fcl = new featurecode($modulename, $lock_label);
27   $fcu = new featurecode($modulename, $unlock_label);
28   $fct = new featurecode($modulename, $toggle_label);
29   $fcs = new featurecode($modulename, $setpass_label);
30
31   $lock = $fcl->getCodeActive();
32   $lock_rgxp = "_" . $lock . ".";
33   $unlock = $fcu->getCodeActive();
34   $unlock_rgxp = "_" . $unlock . ".";
35   $toggle = $fct->getCodeActive();
36   $setpass = $fcs->getCodeActive();
37   $unknown = "s"; //unknown extension
38
39   $ctx_toggle = "keylock-toggle";
40   $ctx_lock = "keylock-lock";
41   $ctx_unlock = "keylock-unlock";
42   $ctx_hints = "keylock-hints";
43   $macro_check = "macro-keylock-check";
44   $macro_setpass = "macro-keylock-setpass";
45   $macro_setpass_name = "keylock-setpass";
46   $ctx_keylock = "ext-keylock";
47   $ctx_setpass = "keylock-setpass";
48
49   //Macro check
50   $ext->add($macro_check, $unknown, '', new ext_noop("Checking block..."));
51   $ext->add($macro_check, $unknown, '', new ext_set("me", '${CALLERID(num)}'));
52   $ext->add($macro_check, $unknown, '', new ext_gotoif('${DB(KEYLOCK/${me}/locked)}', "blocked", "unblocked"));
53   $ext->add($macro_check, $unknown, 'blocked', new ext_noop("Blocked..."));
54   $ext->add($macro_check, $unknown, '', new ext_answer());
55   $ext->add($macro_check, $unknown, '', new ext_playback("security"));
56   $ext->add($macro_check, $unknown, '', new ext_playback("activated"));
57   $ext->add($macro_check, $unknown, '', new ext_macro ('hangupcall'));
58   $ext->add($macro_check, $unknown, 'unblocked', new ext_noop("Calling..."));
59
60   //Locking context
61   //Unconditionally set caller/locked to 1 in AstDB
62   $ext->add($ctx_lock, $lock, '', new ext_answer());
63   $ext->add($ctx_lock, $lock, '', new ext_set("me", '${CALLERID(num)}'));
64   $ext->add($ctx_lock, $lock, '', new ext_gotoif('${DB_EXISTS(KEYLOCK/${me}/password)}', "exists", "not_exists"));
65   $ext->add($ctx_lock, $lock, 'not_exists', new ext_macro($macro_setpass_name));
66   $ext->add($ctx_lock, $lock, '', new ext_goto('authenticated'));
67   $ext->add($ctx_lock, $lock, 'exists', new ext_set('PASSWORD','${DB(KEYLOCK/${me}/password)}'));
68   $ext->add($ctx_lock, $lock, '', new ext_authenticate('${PASSWORD}'));
69   $ext->add($ctx_lock, $lock, '', new ext_goto('authenticated'));
70   $ext->add($ctx_lock, $lock, 'authenticated', new ext_set('DB(KEYLOCK/${me}/locked)', '1'));
71   $ext->add($ctx_lock, $lock, '', new ext_set('STATE', 'BUSY'));
72   $ext->add($ctx_lock, $lock, '', new ext_gosub(1, 'sstate',$ctx_lock));
73   $ext->add($ctx_lock, $lock, '', new ext_playback("security"));
74   $ext->add($ctx_lock, $lock, '', new ext_playback("now"));
75   $ext->add($ctx_lock, $lock, '', new ext_playback("activated"));
76   $ext->add($ctx_lock, $lock, '', new ext_hangup());
77   $ext->add($ctx_lock, 'sstate', '', new ext_setvar('DEVSTATE(Custom:KLC${me})','${STATE}'));
78   $ext->add($ctx_lock, 'sstate', 'return', new ext_return());
79
80
81  
82   $rgxp_length = strlen($lock);
83   $ext->add($ctx_lock, $lock_rgxp, '', new ext_answer());
84   $ext->add($ctx_lock, $lock_rgxp, '', new ext_set("ME", '${CALLERID(num)}'));
85   $ext->add($ctx_lock, $lock_rgxp, '', new ext_set('PASSWORD','${DB(KEYLOCK/${ME}/password)}'));
86   $ext->add($ctx_lock, $lock_rgxp, '', new ext_noop("\${EXTEN:$rgxp_length}"));
87   $ext->add($ctx_lock, $lock_rgxp, '', new ext_gotoif("\$[ \${PASSWORD} = \${EXTEN:$rgxp_length}]", "$lock,authenticated"));
88   $ext->add($ctx_lock, $lock_rgxp, '', new ext_playback("vm-invalidpassword"));
89   $ext->add($ctx_lock, $lock_rgxp, '', new ext_hangup());
90  
91  
92   //Unlocking context
93   $ext->add($ctx_unlock, $unlock, '', new ext_answer());
94   $ext->add($ctx_unlock, $unlock, '', new ext_set("ME", '${CALLERID(num)}'));
95   $ext->add($ctx_unlock, $unlock, '', new ext_gotoif('${DB(KEYLOCK/${ME}/locked)}', "locked", "unlocked"));
96   $ext->add($ctx_unlock, $unlock, 'locked', new ext_playback("security"));
97   $ext->add($ctx_unlock, $unlock, '', new ext_playback("activated"));
98   $ext->add($ctx_unlock, $unlock, '', new ext_set('PASSWORD','${DB(KEYLOCK/${ME}/password)}'));
99   $ext->add($ctx_unlock, $unlock, '', new ext_authenticate('${PASSWORD}'));
100   $ext->add($ctx_unlock, $unlock, '', new ext_goto('authenticated'));
101   $ext->add($ctx_unlock, $unlock, 'authenticated', new ext_dbdel('KEYLOCK/${ME}/locked'));
102   $ext->add($ctx_unlock, $unlock, '', new ext_set('STATE', 'NOT_INUSE'));
103   $ext->add($ctx_unlock, $unlock, '', new ext_gosub(1, 'sstate',$ctx_unlock));
104   $ext->add($ctx_unlock, $unlock, '', new ext_goto('unlocked'));
105   $ext->add($ctx_unlock, $unlock, 'unlocked', new ext_playback("security"));
106   $ext->add($ctx_unlock, $unlock, '', new ext_playback("now"));
107   $ext->add($ctx_unlock, $unlock, '', new ext_playback("de-activated"));
108   $ext->add($ctx_unlock, $unlock, '', new ext_hangup());
109   $ext->add($ctx_unlock, 'sstate', '', new ext_setvar('DEVSTATE(Custom:KLC${ME})','${STATE}'));
110   $ext->add($ctx_unlock, 'sstate', 'return', new ext_return());
111
112   $rgxp_length = strlen($unlock);
113   $ext->add($ctx_unlock, $unlock_rgxp, '', new ext_answer());
114   $ext->add($ctx_unlock, $unlock_rgxp, '', new ext_set("ME", '${CALLERID(num)}'));
115   $ext->add($ctx_unlock, $unlock_rgxp, '', new ext_set('PASSWORD','${DB(KEYLOCK/${ME}/password)}'));
116   $ext->add($ctx_unlock, $unlock_rgxp, '', new ext_noop("\${EXTEN:$rgxp_length}"));
117   $ext->add($ctx_unlock, $unlock_rgxp, '', new ext_gotoif("\$[ \${PASSWORD} = \${EXTEN:$rgxp_length}]", "$unlock,authenticated"));
118   $ext->add($ctx_unlock, $unlock_rgxp, '', new ext_playback("vm-invalidpassword"));
119   $ext->add($ctx_unlock, $unlock_rgxp, '', new ext_hangup());
120
121   //Toggle context [keylock-toggle]
122   $ext->add($ctx_toggle, $toggle, '', new ext_macro('user-callerid'));
123   $ext->add($ctx_toggle, $toggle, '', new ext_set("me",'${CALLERID(num)}'));
124   $ext->add($ctx_toggle, $toggle, '', new ext_gotoif('${DB(KEYLOCK/${me}/locked)}',"keylock-unlock,$unlock,locked","keylock-lock,$lock,1"));
125
126   //Setpass Macro
127   $ext->add($macro_setpass, $unknown, '', new ext_set('ME','${CALLERID(num)}'));
128   $ext->add($macro_setpass, $unknown, '', new ext_gotoif('${DB(KEYLOCK/${ME}/password)}','set','read'));
129   $ext->add($macro_setpass, $unknown, 'set', new ext_set('PASSWORD','${DB(KEYLOCK/${ME}/password)}'));
130   $ext->add($macro_setpass, $unknown, '', new ext_authenticate('${PASSWORD}'));
131   $ext->add($macro_setpass, $unknown, '', new ext_goto('notset'));
132   $ext->add($macro_setpass, $unknown, 'read', new ext_read('PASSWORD','vm-newpassword'));
133   $ext->add($macro_setpass, $unknown, '', new ext_gotoif('$["${PASSWORD}"!=""]','notset','read'));
134   $ext->add($macro_setpass, $unknown, 'notset', new ext_set('DB(KEYLOCK/${ME}/password)','${PASSWORD}'));
135   $ext->add($macro_setpass, $unknown, '', new ext_playback("vm-passchanged"));
136
137   //Setpass context [keylock-setpass]
138   $ext->add($ctx_setpass, $setpass, '', new ext_answer());
139   $ext->add($ctx_setpass, $setpass, '', new ext_macro($macro_setpass_name));
140   $ext->add($ctx_setpass, $setpass, '', new ext_hangup());
141
142   //keylock context [ext-keylock]
143   $patterns = explode("\n", keylock_get_patterns());
144   foreach ($patterns as &$pattern)
145   {
146       $pattern = trim($pattern);
147   }
148   unset($pattern); // fixing php bug!
149   foreach ($patterns as $pattern)
150   {     
151       if (!empty($pattern))
152       {       
153     $ext->add($ctx_keylock, "_".$pattern, '', new ext_macro('keylock-check'));
154       }
155   }
156
157
158
159   //keylock hints [keylock-hints]
160   $users = keylock_get_users();
161   foreach ($users as $user)
162   {
163       $extension = $toggle . $user["extension"];
164       $hint = "SIP/" . $user["extension"] . "&" . "CUSTOM:KLC". $user["extension"];
165       $ext->add($ctx_hints, $extension, '', new ext_goto(1, $toggle, $ctx_toggle));
166       $ext->addHint($ctx_hints, $extension, $hint);
167   }
168   $ext->addInclude($ctx_keylock,$ctx_hints);
169   $ext->addInclude($ctx_keylock,$ctx_toggle);
170   $ext->addInclude($ctx_keylock,$ctx_lock);
171   $ext->addInclude($ctx_keylock,$ctx_unlock);
172   $ext->addInclude($ctx_keylock,$ctx_setpass);
173   $ext->addInclude('from-internal-additional',$ctx_keylock);
174   break;
175     }
176 }
177
178
179
180
181 function keylock_get_users()
182 {
183     global $db;
184     $sql = "SELECT extension FROM users";
185     $results = $db->getAll($sql, array(), DB_FETCHMODE_ASSOC);
186     if(DB::IsError($results)) {
187   $results = null;
188     }
189     return $results;
190 }
191
192 function keylock_get_patterns()
193 {
194     global $db;
195
196     $sql = "SELECT patterns FROM keylock_patterns WHERE id_patterns = 1 LIMIT 1";
197     $results = $db->getAll($sql, array(), DB_FETCHMODE_ASSOC);
198     if(DB::IsError($results)) {
199   $results = null;
200     }
201     return $results[0]["patterns"];
202 }
203
204 function keylock_set_patterns($patterns)
205 {
206     global $db;
207     $patterns = $db->escapeSimple($patterns);
208     $sql = "UPDATE keylock_patterns SET patterns = '$patterns'  WHERE id_patterns = 1 LIMIT 1";
209     sql($sql);
210     return TRUE;
211 }
212
213
214
215
216
217 ?>
Note: See TracBrowser for help on using the browser.