function getExtensionById($id, $domain = null) { global $arrConf; $arrExtension = array(); $where = ""; if (!preg_match('/^[[:digit:]]+$/', "{$id}")) { $this->errMsg = "Extension ID must be numeric"; return false; } $param = array($id); if (isset($domain)) { if (!preg_match("/^(([[:alnum:]-]+)\\.)+([[:alnum:]])+\$/", $domain)) { $this->errMsg = "Invalid domain format"; return false; } else { $where = " and organization_domain=?"; $param[] = $domain; } } $query = "SELECT tech, exten, outboundcid, rt, record_in, record_out, organization_domain, voicemail, device, clid_name, clid_number,alias,elxweb_device,enable_chat from extension where id=? {$where}"; $result = $this->_DB->getFirstRowQuery($query, true, $param); if ($result === false) { $this->errMsg = $this->_DB->errMsg; return false; } elseif (count($result) > 0) { //get organization_code $org_code = $this->getOrganizationCode($result["organization_domain"]); if ($org_code === false) { return false; } $arrExtension["technology"] = $result["tech"]; $arrExtension["exten"] = $result["exten"]; $arrExtension["clid_name"] = $result["clid_name"]; $arrExtension["clid_number"] = $result["clid_number"]; $arrExtension["ring_timer"] = $result["rt"]; $arrExtension["record_in"] = $result["record_in"]; $arrExtension["record_out"] = $result["record_out"]; $arrExtension["out_clid"] = $result["outboundcid"]; $arrExtension["alias"] = $result["alias"]; $arrExtension["elxweb_device"] = $result["elxweb_device"]; $arrExtension["enable_chat"] = $result["enable_chat"]; //obtenemos las caracteristicas de voicemail de la extension en caso de que este tenga creada uno if (isset($result["voicemail"]) && $result["voicemail"] != "novm") { $query = "SELECT * from voicemail where mailbox=? and organization_domain=?"; $voicemail = $this->_DB->getFirstRowQuery($query, true, array($result["exten"], $result["organization_domain"])); if ($voicemail == false) { $arrExtension["create_vm"] = "no"; if ($voicemail === false) { $this->errMsg .= _tr("Error getting voicemail") . $this->_DB->errMsg; } } else { $arrExtension["create_vm"] = "yes"; $option = ""; foreach ($voicemail as $key => $value) { switch ($key) { case "password": $arrExtension["vmpassword"] = $value; break; case "email": $arrExtension["vmemail"] = $value; break; case "attach": $arrExtension["vmattach"] = $value; break; case "saycid": $arrExtension["vmsaycid"] = $value; break; case "deletevoicemail": $arrExtension["vmdelete"] = $value; break; case "envelope": $arrExtension["vmenvelope"] = $value; break; case "context": $arrExtension["vmcontext"] = substr_replace($value, '', 0, strlen($org_code) + 1); //eliminamos la parte del string que contiene el codigo de la organization break; case "emailsubject": $arrExtension["vmemailsubject"] = $value; break; case "emailbody": $arrExtension["vmemailbody"] = $value; break; case "mailbox": break; case "fullname": break; default: if (isset($value)) { if ($key != "uniqueid" && $key != "organization_domain" && $key != "stamp" && $key != "dialout" && $key != "callback") { $option .= "{$key}={$value}|"; } if ($key == "dialout" || $key == "callback" || $key == "exitcontext") { $option .= "{$key}=" . substr($arrExten["vmcontext"], 16) . "|"; } } } $arrExtension["vmoptions"] = empty($option) ? "" : substr($option, 0, -1); } } } //obtenemos las otras caracticas de la configuracion del dispositivo if ($result["tech"] == "iax2") { $queryDev = "SELECT context,dial,host,type,allow,disallow,port,qualify,accountcode,deny,permit,language,amaflags,"; $queryDev .= "defaultip,username,mohinterpret,mohsuggest,transfer,requirecalltoken,mask,jitterbuffer,forcejitterbuffer,"; $queryDev .= "codecpriority,qualifysmoothing,qualifyfreqok,qualifyfreqnotok,encryption,timezone,sendani,adsi from iax where name=? and organization_domain=?"; } elseif ($result["tech"] == "sip") { $queryDev = "SELECT context,dial,host,type,allow,disallow,port,qualify,accountcode,deny,permit,language,amaflags,"; $queryDev .= "defaultip,username,mohinterpret,mohsuggest,dtmfmode,nat,allowtransfer,namedcallgroup,namedpickupgroup,"; $queryDev .= "mailbox,vmexten,defaultuser,useragent,directmedia,sendrpid,trustrpid,transport,callcounter,busylevel,subscribecontext,videosupport,maxcallbitrate,"; $queryDev .= "qualifyfreq,rtptimeout,rtpholdtimeout,rtpkeepalive,progressinband,g726nonstandard,vmexten from sip where name=? and organization_domain=?"; } else { $this->errMsg .= _tr("Invalid Technology"); return false; } if (isset($queryDev)) { $device = $this->_DB->getFirstRowQuery($queryDev, true, array($result["device"], trim($result["organization_domain"]))); if ($device == false) { $this->errMsg .= _tr("Error getting device settings") . $this->_DB->errMsg; return false; } else { foreach ($device as $key => $value) { if (isset($value)) { if ($key == "namedcallgroup" || $key == "namedpickupgroup" || $key == "context" || $key == 'subscribecontext') { $arrExtension[$key] = substr_replace($value, '', 0, strlen($org_code) + 1); } else { $arrExtension[$key] = $value; } } } } } $arrExtension["domain"] = $result["organization_domain"]; $arrExtension["device"] = $result["device"]; $pORGZ = new paloSantoOrganization($arrConf['elastix_dsn']['elastix']); $orgTmp = $pORGZ->getOrganizationByDomain_Name($result["organization_domain"]); if ($orgTmp != false) { $astMang = AsteriskManagerConnect($errorM); if ($astMang == false) { $this->errMsg .= $errorM; return false; } else { $familia = "EXTUSER/" . $orgTmp["code"] . "/" . $result["exten"]; $arrExtension["call_waiting"] = $astMang->database_get("CW/" . $orgTmp["code"], $result["exten"]) == "ENABLED" ? "yes" : "no"; $arrExtension["screen"] = $astMang->database_get($familia, "screen"); $enDictate = $astMang->database_get($familia . "/dictate", "enabled"); $arrExtension["dictate"] = $enDictate == "enabled" ? "yes" : "no"; $arrExtension["dictformat"] = $astMang->database_get($familia . "/dictate", "format"); $arrExtension["dictemail"] = $astMang->database_get($familia . "/dictate", "email"); //vmx_locator options $vmx_unavail = $astMang->database_get("{$familia}/vmx/unavail", "state"); $vmx_busy = $astMang->database_get("{$familia}/vmx/busy", "state"); if ($vmx_unavail == "enabled" || $vmx_busy == "enabled") { $arrExtension["vmx_locator"] = "enabled"; } else { $arrExtension["vmx_locator"] = "disabled"; } if ($vmx_unavail == "enabled" && $vmx_busy == "enabled") { $arrExtension["vmx_use"] = "both"; } else { if ($vmx_unavail == "enabled") { $arrExtension["vmx_use"] = "unavailable"; } else { $arrExtension["vmx_use"] = "busy"; } } $arrExtension["vmx_extension_0"] = $astMang->database_get($familia . "/vmx/0", "ext"); if (isset($arrExtension["vmx_extension_0"]) && $arrExtension["vmx_extension_0"] != "") { $arrExtension["vmx_operator"] = "off"; } else { $arrExtension["vmx_operator"] = "on"; } $arrExtension["vmx_extension_1"] = $astMang->database_get($familia . "/vmx/1", "ext"); $arrExtension["vmx_extension_2"] = $astMang->database_get($familia . "/vmx/2", "ext"); } } } return $arrExtension; }