freepbx模块开发 FreePbx API:modules

FreePbx API:modules

文件:

1Module.xml

这个文件用于描述一个模块,包含了模块的名字,版本,类型,种类,预定义的菜单等

Rawname: 必须唯一,还必须和当前模块的目录名称一致,

Name:这个是模块的显示名称

Description:显示在模块主页上的描述信息,可以是多行

Version:当前模块的版本,当更新模块的时候要记得增加版本号,数字的版本只能是(1.2,1.2.2)

Type:两个值(setup/tool),setup 通知FreePbx此模块应该出现在安装页面,tool会使模块出现在工具页面,(有两个菜单)

Category:当模块被显示出来,模块以及category进行分组,标准的category取值包括modules /core / addons

Menuitems:菜单项,KEY说明唯一的菜单ID,VALUE说明显示名称,可以有定义多项,菜单ID必须唯一并且要连接到当前模块的page.menuid.php文件

比如, Time Conditions 显示 "Time Conditions" on the menu, and links to page.timecondition.php.

菜单项支持很多的属性

Category:分类显示,如果没有指定,默认是模块的类别

Display:显示菜单,允许页面显示一个菜单两次,需要两个不同的tag names

Type:菜单显示在type里面,当前有效的值有setup/tools,以后可能会扩展很多,默认和模块的Type相同.

Href:重写默认的连接,用当前的URL替代,这是唯一有用的方法连接到定制页面,URL必须完整,以http://开始

target:连接打开的模式,只有当href被指定才有用,值有:_blank _parent _self _top

sort:显示的顺序,取值从-1010,-5显示在2的前面,默认为0

例子:

Location:module.tgz的位置,(具体作用未知(更新?))

Info:一个包含当前模块更多信息的URL,通常是一个WIKI页在freepbx.org 上面

Depends:依赖关系,设置模块的从属关系,允许的值有

’version’(freepbx版本,可是以这些操作符>=)===、《、〈=、!= 默认是>)

‘module’:依赖其他的模块,值是一个模块的名字,或者是模块名称后面加一个空格再加一个版本号。

‘engine’: The telephony engine (asterisk) name and version required. Follows the same conventions as a module.

‘file’:系统中存在的一个文件,使用绝对路径,

Depends中所有的值可能用and连接,必须和安装完的模块匹配。

Changlog:最近的模块更改记录,

Attention:指定的字段,

Module.xml 定义了模块的基本信息。

2Functions.inc.php

当执行freepbx的任何部分,配置的时候就被加载了,这样允许模块随意的从其他模块调用他的函数。这个文件中包含了多个函数,这些函数被模块的多个地方调用,用于保存/新建/读入模块创建的条目(数据)。必须在模块名称前面加一个下划线,这样避免和其他模块发生冲突。

通常包含各种各样的函数

==== ''modulename''_destinations() ====

返回一个当前模块预定的destinations2维数组,像是邮件路由,IVR,振铃组

这个数组如下:

{{{

  return array(

    array(

      'destination' => 'app-blackhole,hangup,1',

      'description' => 'Hangup',

    ),

    array(

      'destination' => 'app-blackhole,congestion,1',

      'description' => 'Congestion'

    ),

  );

}}}

‘destination’的值必须是一个有效的目的地在拔叫方案中的'context,extension,priority', 'description'的值会出现在一下destinations的下拉列表框中。

==== ''modulename''_get_config() ====

这个函数传递一个参数,$engine(翻译成引擎?),当前被使用的engine,通常是asterisk,但是我们还是应该经检测它。

这个函数总是申明一个全局变量$ext,这是一个’extensions’类的对象会成了一个拔叫方案。(ApiExtensions extensions类允许很多模块创建拔叫方案代码,加载修改被其他模块创建的代码,这是减少可能发的冲突的好办法 放在extensions.class.php中)

Example:

{{{

function mymodule_get_config($engine) {

  global $ext;

  switch($engine) {

    case 'asterisk':

      // "blackhole" destinations

      $ext->add('app-blackhole', 'hangup', '', new ext_noop('Blackhole Dest: Hangup'));

      $ext->add('app-blackhole', 'hangup', '', new ext_hangup());

 

      $ext->add('app-blackhole', 'congestion', '', new ext_noop('Blackhole Dest: Congestion'));

      $ext->add('app-blackhole', 'congestion', '', new ext_answer());

      $ext->add('app-blackhole', 'congestion', '', new ext_playtones('congestion'));

      $ext->add('app-blackhole', 'congestion', '', new ext_congestion());

      $ext->add('app-blackhole', 'congestion', '', new ext_hangup());

    break;

  }

}

}}}

 

 

3.install.sql

在安装或者更新的时候直接运行的SQL文件,

4.install.php

在安装或者更新的时候被加载的情况下执行的PHP脚本。

5Uninstall.sql

A straight(直接) SQL file that is run (if it exists) during uninstallation.

6.uninstall.php

A PHP script that is run (by being include()'ed) during uninstallation.

7. page.''menitem'''.php

这是一个图形界面,当菜单被选择的时候加载,当前有两种方法创建模块,旧方法是定义所有的HTML和表单处理文件。

freepbx/trunk/amp_conf/htdocs/admin/modules/core/page.routing.php

新方法是使用[wiki:ApiGuiElements GUI Elements API]来定义元素和表单处理的函数。然后放在functions.inc.php里面。这个文件变得相当基础。

For an example see [browser:freepbx/trunk/amp_conf/htdocs/admin/modules/core/page.users.php] and [browser:freepbx/trunk/amp_conf/htdocs/admin/modules/core/functions.inc.php]8.CSS/JS files

模块可以有CSSjavascript 文件自动的被加载在主模板里面。文件被命名为''modulename''.css, ''menuitem''.css, ''modulename''.js, or ''menuitem''.js中的任何一种,文件会在主模板的部分加载。

9Installing system files

一个模块可能加载系统其他地方的文件,比如AGI 脚本,可以执行指定模块的子目录的名字,文件会通过retrieve_conf script连接到适当的位置

* '''agi-bin''' goes to /var/lib/asterisk/agi-bin

 * '''sounds''' goes to /var/lib/asterisk/sounds

 * '''etc''' goes to /etc/asterisk

 * '''bin''' goes to /var/lib/asterisk/bin

这些目录在amportal.conf中定义。注意使用有效合理的使用并且不要和己存在的其他文件冲突,如果目标目录中己经存在一个同名文件,模块文件将不能连接,模块将会出错。

10. Installing/Uninstalling Modules

 

 

系本人自己翻译的,有什么不对的地方希望大家指出来,转载请注明出处,谢谢合作

你可能感兴趣的:(api,ext,browser,extension,javascript)