FreePbx API:modules
文件:
1.Module.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文件
比如, <timecondition>Time Conditions</timecondition> 顯示 "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:顯示的順序,取值從-10到10,-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 定義了模塊的基本信息。
2.Functions.inc.php
當執行freepbx的任何部分,配置的時候就被加載了,這樣允許模塊隨意的從其他模塊調用他的函數。這個文件中包含了多個函數,這些函數被模塊的多個地方調用,用於保存/新建/讀入模塊創建的條目(數據)。必須在模塊名稱前面加一個下劃線,這樣避免和其他模塊發生衝突。
通常包含各種各樣的函數
==== ''modulename''_destinations() ====
返回一個當前模塊預定的destinations的2維數組,像是郵件路由,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腳本。
5.Uninstall.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
模塊可以有CSS和javascript 文件自動的被加載在主模板裏面。文件被命名爲''modulename''.css, ''menuitem''.css, ''modulename''.js, or ''menuitem''.js中的任何一種,文件會在主模板的<head>部分加載。
9.Installing 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
系本人自己翻譯的,有什麼不對的地方希望大家指出來,轉載請註明出處,謝謝合作