/** * Retorna um usuário em sua classe nativa. * * ex: PBX_Asterisk_Ramal e no futuro Snep_Agent * * @param int $userid * @return Snep_Usuario usuario */ public static function get($userid) { $db = Snep_Db::getInstance(); $userid = str_replace("'", "\\'", $userid); $select = $db->select()->from('peers')->where("name = '{$userid}' AND peer_type='R'"); $stmt = $db->query($select); $usuario = $stmt->fetchObject(); if (!$usuario) { throw new PBX_Exception_NotFound("Usuario {$userid} nao encontrado"); } $tech = substr($usuario->canal, 0, strpos($usuario->canal, '/')); if ($tech == "SIP") { require_once "PBX/Asterisk/Interface/SIP.php"; $interface = new PBX_Asterisk_Interface_SIP(array("username" => $usuario->name, "secret" => $usuario->secret)); } else { if ($tech == "IAX2") { require_once "PBX/Asterisk/Interface/IAX2.php"; $interface = new PBX_Asterisk_Interface_IAX2(array("username" => $usuario->name, "secret" => $usuario->secret)); } else { if ($tech == "MANUAL") { require_once "PBX/Asterisk/Interface/VIRTUAL.php"; $interface = new PBX_Asterisk_Interface_VIRTUAL(array("channel" => substr($usuario->canal, strpos($usuario->canal, '/') + 1))); } else { if ($tech == "VIRTUAL") { require_once "PBX/Asterisk/Interface/VIRTUAL.php"; $trunk = PBX_Trunks::get(substr($usuario->canal, strpos($usuario->canal, '/') + 1)); $interface = new PBX_Asterisk_Interface_VIRTUAL(array("channel" => $trunk->getInterface()->getCanal() . "/" . $userid)); } else { if ($tech == "KHOMP") { require_once "PBX/Asterisk/Interface/KHOMP.php"; $khomp_id = substr($usuario->canal, strpos($usuario->canal, '/') + 1); $khomp_board = substr($khomp_id, 1, strpos($khomp_id, 'c') - 1); $khomp_channel = substr($khomp_id, strpos($khomp_id, 'c') + 1); $interface = new PBX_Asterisk_Interface_KHOMP(array("board" => $khomp_board, "channel" => $khomp_channel)); } else { throw new Exception("Tecnologia {$tech} desconhecida ou invalida."); } } } } } $user = new Snep_Exten($usuario->name, $usuario->password, $usuario->callerid, $interface); $user->setGroup($usuario->group); if ($usuario->authenticate) { $user->lock(); } if ($usuario->dnd) { $user->DNDEnable(); } if ($usuario->sigame != "") { $user->setFollowMe($usuario->sigame); } if (is_numeric($usuario->pickupgroup)) { $user->setPickupGroup($usuario->pickupgroup); } if ($usuario->usa_vc) { $user->setMailBox($usuario->mailbox); $user->setEmail($usuario->email); } return $user; }
/** * Processa os dados de um objeto em um array associativo que pode ser * usado para manipulação do banco de dados. * * @param Snep_Exten $exten * @return array string */ private function getExtenDataAsArray(Snep_Exten $exten) { $extenData = array("context" => "default", "peer_type" => "R", "name" => $exten->getNumero(), "fromuser" => $exten->getNumero(), "username" => $exten->getNumero(), "callerid" => $exten->getCallerid(), "password" => $exten->getPassword(), "pickupgroup" => $exten->getPickupGroup(), "canal" => $exten->getInterface()->getCanal(), "group" => $exten->getGroup(), "email" => $exten->getEmail(), "usa_vc" => $exten->hasVoiceMail(), "mailbox" => $exten->getMailBox(), "authenticate" => $exten->isLocked(), "time_total" => $exten->getTimeTotal(), "time_chargeby" => $exten->getCtrlType()); /** * Adicionando informações específica de interface. */ if ($exten->getInterface() instanceof PBX_Asterisk_Interface_SIP || $exten->getInterface() instanceof PBX_Asterisk_Interface_IAX2) { $interface = $exten->getInterface(); $extenData['allow'] = $interface->allow; $extenData['type'] = $interface->type; $extenData['secret'] = $interface->secret; $extenData['qualify'] = $interface->qualify; $extenData['dtmfmode'] = $interface->dtmfmode; $extenData['call-limit'] = $interface->{'call-limit'}; $extenData['nat'] = $interface->nat; } return $extenData; }