Esempio n. 1
0
 /**
  * Executa a ação
  *
  * @param Asterisk_AGI $asterisk
  * @param Asterisk_AGI_Request $request
  */
 public function execute($asterisk, $request)
 {
     $log = Zend_Registry::get('log');
     $i18n = $this->i18n;
     $num = isset($this->config['type']) && $this->config['type'] == 'src' ? $request->origem : $request->destino;
     // Cortando numero
     if (isset($this->config['cut']) && $this->config['cut'] == 'pipecut') {
         if (!is_null($this->getRule())) {
             $expr = $this->config['type'] == 'src' ? $this->getRule()->getValidSrcExpr($num) : $this->getRule()->getValidDstExpr($num);
             if ($expr['type'] == 'RX') {
                 // Removendo da contagem caracteres de controle e instrução
                 $normalized_string = str_replace("_", "", $expr['value']);
                 // Normalizando [123-8] e similares para um unico caractere
                 $normalized_string = preg_replace("/\\[[0-9\\-]*\\]/", "#", $normalized_string);
                 /* Nesse ponto uma expressão:
                  * _0XX|[2-9]XX[23].
                  * Deve ser:
                  * 0XX|#XX#.
                  */
                 $cut_point = strpos($normalized_string, "|");
                 if ($cut_point > 0) {
                     // caso haja algo para cortar
                     // Cortando
                     $num = substr($num, $cut_point);
                 }
             } else {
                 if ($expr['type'] == "AL") {
                     $aliases = PBX_ExpressionAliases::getInstance();
                     $expression = $aliases->get((int) $expr['value']);
                     $regular_expression = new PBX_Asterisk_Expression();
                     $found = null;
                     foreach ($expression["expressions"] as $expr_value) {
                         $regular_expression->setExpression($expr_value);
                         if ($regular_expression->match($num)) {
                             $found = $expr_value;
                             break;
                         }
                     }
                     // Removendo da contagem caracteres de controle e instrução
                     $normalized_string = str_replace("_", "", $found);
                     // Normalizando [123-8] e similares para um unico caractere
                     $normalized_string = preg_replace("/\\[[0-9\\-]*\\]/", "#", $normalized_string);
                     /* Nesse ponto uma expressão:
                      * _0XX|[2-9]XX[23].
                      * Deve ser:
                      * 0XX|#XX#.
                      */
                     $cut_point = strpos($normalized_string, "|");
                     if ($cut_point > 0) {
                         // caso haja algo para cortar
                         // Cortando
                         $num = substr($num, $cut_point);
                     }
                 }
             }
         }
     }
     // Adicionando prefixo
     if (isset($this->config['prefix'])) {
         $num = $this->config['prefix'] . $num;
     }
     // Adicionando suffixo
     if (isset($this->config['suffix'])) {
         $num .= $this->config['suffix'];
     }
     // Reescrevendo numero
     if (isset($this->config['replace']) && $this->config['replace'] != '') {
         $num = $this->config['replace'];
     }
     // Aplicando modificações no callerid/extension do asterisk
     if (isset($this->config['type']) && $this->config['type'] == 'src') {
         $log->info(sprintf($i18n->translate("Rewriting source to %s"), $num));
         $request->origem = $num;
         $asterisk->set_callerid($num);
     } else {
         $log->info(sprintf($i18n->translate("Rewriting destination to %s"), $num));
         $request->destino = $num;
         $asterisk->set_extension($request->destino);
     }
 }
Esempio n. 2
0
 /**
  * Executa a ação.
  * @param Asterisk_AGI $asterisk
  */
 public function execute($asterisk, $request)
 {
     $log = Zend_Registry::get('log');
     $i18n = $this->i18n;
     if (isset($this->config['origem']) && $this->config['origem']) {
         $log->info(sprintf($i18n->translate("Restoring source to %s"), $request->getOriginalCallerid()));
         $request->origem = $request->getOriginalCallerid();
         $asterisk->set_callerid($request->origem);
     }
     if (isset($this->config['destino']) && $this->config['destino']) {
         $log->info(sprintf($i18n->translate("Restoring destination to %s"), $request->getOriginalExtension()));
         $request->destino = $request->getOriginalExtension();
     }
 }