Conociendo el Dialplan en Elastix: Clase extensions


publicado por Víctor Villarreal en

0 comentarios

Introduccion

Elastix v1.6 provee un marco de trabajo (framework) para que los modulos instalados en el sistema gestionen el dialplan de Asterisk. Uno de los componentes principales de este framework son las clase PHP extensions y extension.

La clase PHP extensions

La clase PHP extensions esta definida en el archivo /var/www/html/admin/extensions.class.php. Como ya se dijo en la introduccion de este post, esta clase provee metodos para manipular el dialplan de Asterisk, desde los modulos de Elastix instalados en el sistema.

Uno de los principales metodos es add():

        /** Add an entry to the extensions file
        * @param $section    The section to be added to
        * @param $extension  The extension used
        * @param $tag        A tag to use (to reference with basetag), use false or '' if none
        * @param $command    The command to execute
        * @param $basetag    The tag to base this on. Only used in conjunction with $addpriority
        *                    priority. Defaults to false.
        * @param $addpriority  Finds the priority of the tag called $basetag, and adds this 
        *                       value to it to use as the priority for this command.
        * @return 
        */
        function add($section, $extension, $tag, $command, $basetag = false, $addpriority = false) {
                
                if ($basetag || $addpriority) {
                        if (!is_int($addpriority) || ($addpriority < 1)) {
                                trigger_error("\$addpriority must be an integer >= 1 in extensions::add()");
                                return false;
                        }
                        if (empty($basetag)) {
                                trigger_error("\$basetag is required with \$addpriority in extensions::add()");
                                return false;
                        }
                }
                
                if (empty($basetag)) {
                        // no basetag, we need to make one
                        
                        if (!isset($this->_exts[$section][$extension])) {
                                // first entry, use 1
                                $basetag = '1';
                        } else {
                                // anything else just n
                                $basetag = 'n';
                        }
                }
                
                $new = array(
                        'basetag' => $basetag,
                        'tag' => $tag,
                        'addpri' => $addpriority,
                        'cmd' => $command,
                );
                
                $this->_exts[$section][$extension][] = $new;
        }

Este metodo permite agregar prioridades a cualquier extension y contexto del dialplan de Asterisk.

La clase PHP extension

Ademas, para cada una de las funciones y aplicaciones del dialplan de Asterisk, Elastix provee una clase, que le corresponde. Todas estas clases descienden o extienden una clase madre llamada extension. Miremos primero esta clase:

class extension { 
        var $data;
        
        function extension($data = '') {
                $this->data = $data;
        }
        
        function incrementContents($value) {
                return true;
        }
        
        function output() {
                return $this->data;
        }
}

Ahora miremos algunas sus clases descendientes:

class ext_noop extends extension {
        function output() {
                return "Noop(".$this->data.")";
        }
}

class ext_dial extends extension {
        var $number;
        var $options;
        
        function ext_dial($number, $options = "tr") {
                $this->number = $number;
                $this->options = $options;
        }
        
        function output() {
                return "Dial(".$this->number.",".$this->options.")";
        }
}

class ext_setvar {
        var $var;
        var $value;
        
        function ext_setvar($var, $value) {
                $this->var = $var;
                $this->value = $value;
        }
        
        function output() {
                return "Set(".$this->var."=".$this->value.")";
        }
}

Ejemplo de uso

Al final de este archivo encontramos, a modo de comentario, ejemplos de uso de estas dos clases las cuales se utilizan conjuntamente:

/* example usage
$ext = new extensions;


$ext->add('default','123', 'dial1', new ext_dial('ZAP/1234'));
$ext->add('default','123', '', new ext_noop('test1'));
$ext->add('default','123', '', new ext_noop('test2'));
$ext->add('default','123', '', new ext_noop('test at +101'), 'dial1', 101);
$ext->add('default','123', '', new ext_noop('test at +102'));
echo "<pre>";
echo $ext->generateConf();
echo $ext->generateOldConf();
exit;
*/

/*
exten => 123,1(dial1),Dial(ZAP/1234)
exten => 123,n,noop(test1)
exten => 123,n,noop(test2)
exten => 123,dial1+101,noop(test at 101)
exten => 123,n,noop(test at 102)
*/

Deja un comentario