| 1 | | <? |
|---|
| | 1 | <?php |
|---|
| | 2 | /* $Id:$ */ |
|---|
| | 3 | |
|---|
| | 4 | function exportextensions_allusers() |
|---|
| | 5 | { |
|---|
| | 6 | |
|---|
| | 7 | global $db; |
|---|
| | 8 | $action = "edit"; |
|---|
| | 9 | $fname = "bulkext__" . (string) time() . ".csv"; |
|---|
| | 10 | $csv_header = "action,extension,name,cid_masquerade,sipname,directdid,didalert,mohclass,outboundcid,ringtimer,callwaiting,emergency_cid,tech,hardware,devinfo_secret,devinfo_channel,devinfo_dtmfmode,devinfo_canreinvite,devinfo_context,devinfo_host,devinfo_type,devinfo_nat,devinfo_port,devinfo_qualify,devinfo_callgroup,devinfo_pickupgroup,devinfo_disallow,devinfo_allow,devinfo_dial,devinfo_accountcode,devinfo_mailbox,faxexten,faxemail,answer,wait,privacyman,record_in,record_out,vm,vmpwd,email,pager,attach,saycid,envelope,delete,options,vmcontext,vmx_state,devicetype,password,noanswer,devinfo_immediate,devinfo_signalling,devinfo_echocancel,devinfo_echocancelwhenbridged,devinfo_echotraining,devinfo_busydetect,devinfo_busycount,devinfo_callprogress,devinfo_notransfer\n"; |
|---|
| | 11 | $data = $csv_header; |
|---|
| | 12 | $exts = get_all_exts(); |
|---|
| | 13 | |
|---|
| | 14 | foreach($exts as $ext) |
|---|
| | 15 | { |
|---|
| | 16 | $e = $ext[0]; |
|---|
| | 17 | $u_info = core_users_get($e); |
|---|
| | 18 | $d_info = core_devices_get($e); |
|---|
| | 19 | $voicemail = get_voicemail_info($e); |
|---|
| | 20 | if($voicemail == null) |
|---|
| | 21 | { |
|---|
| | 22 | $v_enabled = "disabled"; |
|---|
| | 23 | $v_context = ''; |
|---|
| | 24 | $v_pwd = ''; |
|---|
| | 25 | $v_email = ''; |
|---|
| | 26 | $v_pager = ''; |
|---|
| | 27 | $v_options = ''; |
|---|
| | 28 | $v_attach = ''; |
|---|
| | 29 | $v_saycid = ''; |
|---|
| | 30 | $v_envelope = ''; |
|---|
| | 31 | $v_delete = ''; |
|---|
| | 32 | } |
|---|
| | 33 | else |
|---|
| | 34 | { |
|---|
| | 35 | $v_enabled = "enabled"; |
|---|
| | 36 | $v_context = isset($voicemail['vmcontext'])?$voicemail['vmcontext']:''; |
|---|
| | 37 | $v_pwd = isset($voicemail['pwd'])?$voicemail['pwd']:''; |
|---|
| | 38 | $v_email = isset($voicemail['email'])?$voicemail['email']:''; |
|---|
| | 39 | $v_pager = isset($voicemail['pager'])?$voicemail['pager']:''; |
|---|
| | 40 | |
|---|
| | 41 | $x = isset($voicemail['options'])?$voicemail['options']:''; |
|---|
| | 42 | $p = 0; |
|---|
| | 43 | $first = true; |
|---|
| | 44 | $c = count($x); |
|---|
| | 45 | reset($x); |
|---|
| | 46 | |
|---|
| | 47 | while($p < $c) |
|---|
| | 48 | { |
|---|
| | 49 | if((key($x) != 'attach') && (key($x) != 'saycid') && (key($x) != 'envelope') && (key($x) != 'delete')) |
|---|
| | 50 | { |
|---|
| | 51 | if($first) |
|---|
| | 52 | { |
|---|
| | 53 | $vmopts_output = key($x) . "=" . $x[key($x)]; |
|---|
| | 54 | $first = false; |
|---|
| | 55 | } else |
|---|
| | 56 | { |
|---|
| | 57 | $vmopts_output = $vmopts_output . "|" . key($x) . "=" . $x[key($x)]; |
|---|
| | 58 | } |
|---|
| | 59 | } |
|---|
| | 60 | $p++; |
|---|
| | 61 | next($x); |
|---|
| | 62 | } |
|---|
| | 63 | $v_options = isset($vmopts_output)?$vmopts_output:''; |
|---|
| | 64 | $vmopts_output = ""; |
|---|
| | 65 | $v_attach = "attach=" . isset($x['attach'])?$x['attach']:'no'; |
|---|
| | 66 | $v_saycid = "saycid=" . isset($x['saycid'])?$x['saycid']:'no'; |
|---|
| | 67 | $v_envelope = "envelope=" . isset($x['envelope'])?$x['envelope']:'no'; |
|---|
| | 68 | $v_delete = "delete=" . isset($x['delete'])?$x['delete']:'no'; |
|---|
| | 69 | |
|---|
| | 70 | } |
|---|
| | 71 | |
|---|
| | 72 | $csv_line[0] = $action; |
|---|
| | 73 | $csv_line[1] = isset($u_info['extension'])?$u_info['extension']:''; |
|---|
| | 74 | $csv_line[2] = isset($u_info['name'])?$u_info['name']:''; |
|---|
| | 75 | $csv_line[3] = isset($u_info['cidnum'])?$u_info['cidnum']:''; |
|---|
| | 76 | $csv_line[4] = isset($u_info['sipname'])?$u_info['sipname']:''; |
|---|
| | 77 | $csv_line[5] = isset($u_info['directdid'])?$u_info['directdid']:''; |
|---|
| | 78 | $csv_line[6] = isset($u_info['didalert'])?$u_info['didalert']:''; |
|---|
| | 79 | $csv_line[7] = isset($u_info['mohclass'])?$u_info['mohclass']:''; |
|---|
| | 80 | $csv_line[8] = isset($u_info['outboundcid'])?$u_info['outboundcid']:''; |
|---|
| | 81 | $csv_line[9] = isset($u_info['ringtimer'])?$u_info['ringtimer']:''; |
|---|
| | 82 | $csv_line[10] = isset($u_info['callwaiting'])?$u_info['callwaiting']:''; |
|---|
| | 83 | $csv_line[11] = isset($d_info['emergency_cid'])?$d_info['emergency_cid']:''; |
|---|
| | 84 | $csv_line[12] = isset($d_info['tech'])?$d_info['tech']:''; |
|---|
| | 85 | $csv_line[13] = ''; //hardware |
|---|
| | 86 | $csv_line[14] = isset($d_info['secret'])?$d_info['secret']:''; |
|---|
| | 87 | $csv_line[15] = isset($d_info['channel'])?$d_info['channel']:''; |
|---|
| | 88 | $csv_line[16] = isset($d_info['dtmfmode'])?$d_info['dtmfmode']:''; |
|---|
| | 89 | $csv_line[17] = isset($d_info['canreinvite'])?$d_info['canreinvite']:''; |
|---|
| | 90 | $csv_line[18] = isset($d_info['context'])?$d_info['context']:''; |
|---|
| | 91 | $csv_line[19] = isset($d_info['host'])?$d_info['host']:''; |
|---|
| | 92 | $csv_line[20] = isset($d_info['type'])?$d_info['type']:''; |
|---|
| | 93 | $csv_line[21] = isset($d_info['nat'])?$d_info['nat']:''; |
|---|
| | 94 | $csv_line[22] = isset($d_info['port'])?$d_info['port']:''; |
|---|
| | 95 | $csv_line[23] = isset($d_info['qualify'])?$d_info['qualify']:''; |
|---|
| | 96 | $csv_line[24] = isset($d_info['callgroup'])?$d_info['callgroup']:''; |
|---|
| | 97 | $csv_line[25] = isset($d_info['pickupgroup'])?$d_info['pickupgroup']:''; |
|---|
| | 98 | $csv_line[26] = isset($d_info['disallow'])?$d_info['disallow']:''; |
|---|
| | 99 | $csv_line[27] = isset($d_info['allow'])?$d_info['allow']:''; |
|---|
| | 100 | $csv_line[28] = isset($d_info['accountcode'])?$d_info['accountcode']:''; |
|---|
| | 101 | $csv_line[28] = isset($d_info['dial'])?$d_info['dial']:''; |
|---|
| | 102 | $csv_line[29] = isset($d_info['accountcode'])?$d_info['accountcode']:''; |
|---|
| | 103 | $csv_line[30] = isset($d_info['mailbox'])?$d_info['mailbox']:''; |
|---|
| | 104 | $csv_line[31] = isset($u_info['faxexten'])?$u_info['faxexten']:''; |
|---|
| | 105 | $csv_line[32] = isset($u_info['faxemail'])?$u_info['faxemail']:''; |
|---|
| | 106 | $csv_line[33] = isset($u_info['answer'])?$u_info['answer']:''; |
|---|
| | 107 | $csv_line[34] = isset($u_info['wait'])?$u_info['wait']:''; |
|---|
| | 108 | $csv_line[35] = isset($u_info['privacyman'])?$u_info['privacyman']:''; |
|---|
| | 109 | $csv_line[36] = isset($d_info['record_in'])?$d_info['record_in']:''; |
|---|
| | 110 | $csv_line[37] = isset($d_info['record_out'])?$d_info['record_out']:''; |
|---|
| | 111 | $csv_line[38] = $v_enabled; |
|---|
| | 112 | $csv_line[39] = $v_pwd; |
|---|
| | 113 | $csv_line[40] = $v_email; |
|---|
| | 114 | $csv_line[41] = $v_pager; |
|---|
| | 115 | $csv_line[42] = $v_attach; |
|---|
| | 116 | $csv_line[43] = $v_saycid; |
|---|
| | 117 | $csv_line[44] = $v_envelope; |
|---|
| | 118 | $csv_line[45] = $v_delete; |
|---|
| | 119 | $csv_line[46] = $v_options; |
|---|
| | 120 | $csv_line[47] = $v_context; |
|---|
| | 121 | $csv_line[48] = isset($u_info['vmx_state'])?$u_info['vmx_state']:''; |
|---|
| | 122 | $csv_line[49] = isset($d_info['devicetype'])?$d_info['devicetype']:''; |
|---|
| | 123 | $csv_line[50] = isset($u_info['password'])?$u_info['password']:''; |
|---|
| | 124 | $csv_line[51] = isset($u_info['noanswer'])?$u_info['noanswer']:''; |
|---|
| | 125 | $csv_line[52] = isset($d_info['immediate'])?$d_info['immediate']:''; |
|---|
| | 126 | $csv_line[53] = isset($d_info['signalling'])?$d_info['signalling']:''; |
|---|
| | 127 | $csv_line[54] = isset($d_info['echocancel'])?$d_info['echocancel']:''; |
|---|
| | 128 | $csv_line[55] = isset($d_info['echocancelwhenbridged'])?$d_info['echocancelwhenbridged']:''; |
|---|
| | 129 | $csv_line[56] = isset($d_info['echotraining'])?$d_info['echotraining']:''; |
|---|
| | 130 | $csv_line[57] = isset($d_info['busydetect'])?$d_info['busydetect']:''; |
|---|
| | 131 | $csv_line[58] = isset($d_info['busycount'])?$d_info['busycount']:''; |
|---|
| | 132 | $csv_line[59] = isset($d_info['callprogress'])?$d_info['callprogress']:''; |
|---|
| | 133 | $csv_line[60] = isset($d_info['notransfer'])?$d_info['notransfer']:''; |
|---|
| | 134 | |
|---|
| | 135 | for($i = 0; $i < count($csv_line); $i++) |
|---|
| | 136 | { |
|---|
| | 137 | if($i != count($csv_line) - 1) |
|---|
| | 138 | { |
|---|
| | 139 | $data = $data . $csv_line[$i] . ","; |
|---|
| | 140 | } else |
|---|
| | 141 | { |
|---|
| | 142 | $data = $data . $csv_line[$i]; |
|---|
| | 143 | } |
|---|
| | 144 | |
|---|
| | 145 | } |
|---|
| | 146 | $data = $data . "\n"; |
|---|
| | 147 | |
|---|
| | 148 | unset($csv_line); |
|---|
| | 149 | |
|---|
| | 150 | } |
|---|
| | 151 | |
|---|
| | 152 | force_download($data, $fname); |
|---|
| | 153 | return; |
|---|
| | 154 | } |
|---|
| | 155 | |
|---|
| | 156 | function get_all_exts() |
|---|
| | 157 | { |
|---|
| | 158 | $sql = "SELECT extension FROM users ORDER BY extension"; |
|---|
| | 159 | |
|---|
| | 160 | $extens = sql($sql,"getAll"); |
|---|
| | 161 | |
|---|
| | 162 | if (isset($extens)) |
|---|
| | 163 | { |
|---|
| | 164 | return $extens; |
|---|
| | 165 | } else |
|---|
| | 166 | { |
|---|
| | 167 | return null; |
|---|
| | 168 | } |
|---|
| | 169 | } |
|---|
| | 170 | |
|---|
| | 171 | function get_voicemail_info($mbox) |
|---|
| | 172 | { |
|---|
| | 173 | global $amp_conf; |
|---|
| | 174 | |
|---|
| | 175 | $vmconf = null; |
|---|
| | 176 | $section = null; |
|---|
| | 177 | my_parse_voicemailconf(rtrim($amp_conf["ASTETCDIR"],"/")."/voicemail.conf", $vmconf, $section); |
|---|
| | 178 | if($vmconf == null) echo("Uh-oh"); |
|---|
| | 179 | //my_parse_voicemailconf("/etc/asterisk/voicemail.conf", $vmconf, $section); |
|---|
| | 180 | //$uservm = voicemail_getVoicemail(); |
|---|
| | 181 | $vmcontexts = array_keys($vmconf); |
|---|
| | 182 | |
|---|
| | 183 | foreach ($vmcontexts as $vmcontext) { |
|---|
| | 184 | //echo("$vmcontext<br/>"); |
|---|
| | 185 | //echo("$mbox<br/>"); |
|---|
| | 186 | if(isset($vmconf[$vmcontext][$mbox])){ |
|---|
| | 187 | $vmbox['vmcontext'] = $vmcontext; |
|---|
| | 188 | $vmbox['pwd'] = $vmconf[$vmcontext][$mbox]['pwd']; |
|---|
| | 189 | $vmbox['name'] = $vmconf[$vmcontext][$mbox]['name']; |
|---|
| | 190 | $vmbox['email'] = $vmconf[$vmcontext][$mbox]['email']; |
|---|
| | 191 | $vmbox['pager'] = $vmconf[$vmcontext][$mbox]['pager']; |
|---|
| | 192 | $vmbox['options'] = $vmconf[$vmcontext][$mbox]['options']; |
|---|
| | 193 | return $vmbox; |
|---|
| | 194 | } |
|---|
| | 195 | } |
|---|
| | 196 | |
|---|
| | 197 | return null; |
|---|
| | 198 | |
|---|
| | 199 | |
|---|
| | 200 | } |
|---|
| | 201 | |
|---|
| | 202 | |
|---|
| | 203 | /** Recursively read voicemail.conf (and any included files) |
|---|
| | 204 | * This function is called by get_voicemail_info() |
|---|
| | 205 | */ |
|---|
| | 206 | function my_parse_voicemailconf($filename, &$vmconf, &$section) { |
|---|
| | 207 | if (is_null($vmconf)) { |
|---|
| | 208 | $vmconf = array(); |
|---|
| | 209 | } |
|---|
| | 210 | if (is_null($section)) { |
|---|
| | 211 | $section = "general"; |
|---|
| | 212 | } |
|---|
| | 213 | |
|---|
| | 214 | if (file_exists($filename)) { |
|---|
| | 215 | $fd = fopen($filename, "r"); |
|---|
| | 216 | while ($line = fgets($fd, 1024)) { |
|---|
| | 217 | if (preg_match("/^\s*(\d+)\s*=>\s*(\d*),(.*),(.*),(.*),(.*)\s*([;#].*)?/",$line,$matches)) { |
|---|
| | 218 | // "mailbox=>password,name,email,pager,options" |
|---|
| | 219 | // this is a voicemail line |
|---|
| | 220 | $vmconf[$section][ $matches[1] ] = array("mailbox"=>$matches[1], |
|---|
| | 221 | "pwd"=>$matches[2], |
|---|
| | 222 | "name"=>$matches[3], |
|---|
| | 223 | "email"=>$matches[4], |
|---|
| | 224 | "pager"=>$matches[5], |
|---|
| | 225 | "options"=>array(), |
|---|
| | 226 | ); |
|---|
| | 227 | |
|---|
| | 228 | // parse options |
|---|
| | 229 | |
|---|
| | 230 | foreach (explode("|",$matches[6]) as $opt) { |
|---|
| | 231 | $temp = explode("=",$opt); |
|---|
| | 232 | //output($temp); |
|---|
| | 233 | if (isset($temp[1])) { |
|---|
| | 234 | list($key,$value) = $temp; |
|---|
| | 235 | $vmconf[$section][ $matches[1] ]["options"][$key] = $value; |
|---|
| | 236 | } |
|---|
| | 237 | } |
|---|
| | 238 | } else if (preg_match("/^\s*(\d+)\s*=>\s*dup,(.*)\s*([;#].*)?/",$line,$matches)) { |
|---|
| | 239 | // "mailbox=>dup,name" |
|---|
| | 240 | // duplace name line |
|---|
| | 241 | $vmconf[$section][ $matches[1] ]["dups"][] = $matches[2]; |
|---|
| | 242 | } else if (preg_match("/^\s*#include\s+(.*)\s*([;#].*)?/",$line,$matches)) { |
|---|
| | 243 | // include another file |
|---|
| | 244 | |
|---|
| | 245 | if ($matches[1][0] == "/") { |
|---|
| | 246 | // absolute path |
|---|
| | 247 | $filename = $matches[1]; |
|---|
| | 248 | } else { |
|---|
| | 249 | // relative path |
|---|
| | 250 | $filename = dirname($filename)."/".$matches[1]; |
|---|
| | 251 | } |
|---|
| | 252 | |
|---|
| | 253 | my_parse_voicemailconf($filename, $vmconf, $section); |
|---|
| | 254 | |
|---|
| | 255 | } else if (preg_match("/^\s*\[(.+)\]/",$line,$matches)) { |
|---|
| | 256 | // section name |
|---|
| | 257 | $section = strtolower($matches[1]); |
|---|
| | 258 | } else if (preg_match("/^\s*([a-zA-Z0-9-_]+)\s*=\s*(.*?)\s*([;#].*)?$/",$line,$matches)) { |
|---|
| | 259 | // name = value |
|---|
| | 260 | // option line |
|---|
| | 261 | $vmconf[$section][ $matches[1] ] = $matches[2]; |
|---|
| | 262 | } |
|---|
| | 263 | } |
|---|
| | 264 | fclose($fd); |
|---|
| | 265 | } |
|---|
| | 266 | } |
|---|
| | 267 | |
|---|
| | 268 | function force_download ($data, $name, $mimetype='', $filesize=false) { |
|---|
| | 269 | // File size not set? |
|---|
| | 270 | if ($filesize == false OR !is_numeric($filesize)) { |
|---|
| | 271 | $filesize = strlen($data); |
|---|
| | 272 | } |
|---|
| | 273 | |
|---|
| | 274 | // Mimetype not set? |
|---|
| | 275 | if (empty($mimetype)) { |
|---|
| | 276 | $mimetype = 'application/octet-stream'; |
|---|
| | 277 | } |
|---|
| | 278 | |
|---|
| | 279 | // Make sure there's not anything else left |
|---|
| | 280 | ob_clean_all(); |
|---|
| | 281 | |
|---|
| | 282 | // Start sending headers |
|---|
| | 283 | header("Pragma: public"); // required |
|---|
| | 284 | header("Expires: 0"); |
|---|
| | 285 | header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); |
|---|
| | 286 | header("Cache-Control: private",false); // required for certain browsers |
|---|
| | 287 | header("Content-Transfer-Encoding: binary"); |
|---|
| | 288 | header("Content-Type: " . $mimetype); |
|---|
| | 289 | header("Content-Length: " . $filesize); |
|---|
| | 290 | header("Content-Disposition: attachment; filename=\"" . $name . "\";" ); |
|---|
| | 291 | |
|---|
| | 292 | // Send data |
|---|
| | 293 | echo $data; |
|---|
| | 294 | die(); |
|---|
| | 295 | } |
|---|
| | 296 | |
|---|
| | 297 | function ob_clean_all () { |
|---|
| | 298 | $ob_active = ob_get_length () !== false; |
|---|
| | 299 | while($ob_active) { |
|---|
| | 300 | ob_end_clean(); |
|---|
| | 301 | $ob_active = ob_get_length () !== false; |
|---|
| | 302 | } |
|---|
| | 303 | |
|---|
| | 304 | return true; |
|---|
| | 305 | } |
|---|
| | 306 | |
|---|