Moodle數據庫模型Moodle的數據庫模型經過幾年的發展已經很復雜,為了減少這" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Moodle插件開發筆記

系統 3374 0

Moodle作為一個主流的開源網絡課程管理系統,以其簡單而清晰的使用方式和靈活的擴展空間贏得了多數人的青睞。它解決了大部分信息化學習和課程管理的 共同問題(課程設計、發布、組織、作業、測試、統計、評價等) ,能夠不加任何修改就能夠進行實際應用。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com: office: office" />

Moodle數據庫模型
Moodle的數據庫模型經過幾年的發展已經很復雜,為了減少這種復雜關系帶來的混亂,它采用了這樣的命名方式。如: mdl_course_categories,其中“mdl_”是所有系統表格的前綴,course代表屬于course的模塊,categroies代 表課程分類表,這樣既可以保證清晰的表述,又可以避免不同模塊之間數據表格的重名。可以利用DBDesigner4(一種免費的數據庫設計軟件,可以從 http://fabforce.net/dbdesigner4/ 下載)將Moodle數據庫導出成XML文件,并進行分析。Moodle提供了ADODB數據訪問抽象層來進行數據庫的訪問,所以我們不需要直接編寫訪問數據庫的代碼,只要通過抽象層的方法即可。

Moodle data(Moodle數據)
Moodle數據是用戶上傳內容的文件存儲位置記錄,Moodle數據也存儲登錄到該系統用戶的會話數據(sessions data),如果基于文件的會話(sessions)正在使用。
Moodle數據在文件夾中的組織結構由用戶或課程組成。每門課程有一個文件夾,命名為一個整數值。這個整數值即為這門課程的內部數據庫的ID。
Moodle 2.0使用一種全新的組織模式來組織用戶上傳的文件,這是基于哈希算法。

Moodle主要目錄結構
admin:
系統管理的代碼
包含控制管理用戶界面的PHP文件。其中包括一個cron.php:作為批處理進程執行系統維護任務,如消息傳遞和過程中備份,同時它也用于處理批量操作
auth: 驗證用戶基本模塊及擴展模塊
包含所有Moodle的身份驗證模塊。“auth”目錄里每一個子目錄就是一個身份驗證模塊。這些認證模塊控制創建用戶,用戶配置文件數據,和用戶訪問系統權限。
backup: 課程備份代碼
包含課程備份的核心功能:備份,恢復和導入的課程。
blocks: 界面板塊基本模塊及擴展模塊
板塊用于顯示信息框,可以在Moodle頁面的右側或左側欄。這是最簡單的可擴展的模塊設計類型。
course: 顯示和管理課程的代碼
這是Moodle重要的組成部分,Moodle是圍繞課程組織的。開發人員最有可能修改或增加課程的格式和報告。定制課程格式,可用于改變課程的布局。
enrol: 注冊模塊
包含所有的Moodle的注冊模塊。注冊模塊控制課程級角色分配(注冊)的創建和管理。
files: 顯示和管理上傳文件的代碼
該文件組件控制文件的上傳,訪問控制,并查看文件。文件管理在Moodle2.0中改寫變化很大。Moodle的2.0將允許外部文件庫中的文件存儲和使用,如:Alfresco, Box.net, and Google Docs等。
filter: 過濾器
過濾器系統是關聯從數據庫到頁面創建用戶輸入的內容。過濾器匹配和修改頁面顯示之前。它需要考慮到性能的影響,需要認真制定。
lang:語言模塊
包含核心系統的語言字符串。語言字符串映射也都存儲在Moodle的數據lang文件夾。不同語言的對應文本,每個目錄表示一種語言,并且和具體的模塊對應。
lib: Moodle的核心代碼庫
包含的核心系統庫函數。當我們開發和定制模塊時,我們將使用在此文件夾中定義的類和功能。
mod: Moodle的基本模塊和擴展模塊
包含的活動模塊(activity modules),如assignment, quiz, wiki, forum, and lesson模塊。學習活動是使用Moodle任何課程的核心功能。活動模塊(activity modules)比塊(blocks)創建更具挑戰性和復雜性,因為它們設計到備份,還原,和存儲等級等內容。
my: 我的課程
它提供了一個上市的分配給學習者的課程列表,包括即將到來的課程活動的總結。用戶也可以添加和刪除他或她的門戶網站頁面上的塊。“my”提供了一個很好的位置,以最小的核心變化到Moodle顯示自定義信息。例如,我們利用“my”作為一個定制許多項目的面板位置。
theme: 站點的主題包,控制站點的樣式
包含了所有的內置的Moodle主題和任何自定義主題。每個主題都有其自己的文件夾。

?

其它還有:
calendar:維護及顯示日歷的代碼
doc:Moodle的幫助文檔
login:登錄及賬號創建代碼
pix:站點的圖片
user:顯示和管理用戶
onfig.php包含基本的系統設置,一般在第一次安轉時設置
ns tall.php安裝站點
vers ion版本控制
index.php站點首頁

開發概要詳見: http://docs.moodle.org/archive/zh/index.php?title=%E5%BC%80%E5%8F%91:%E6%A6%82%E8%A6%81&variant=zh-cn

?

1、2個很有用的關于path的變量
$CFG->dirroot??指向moodle root folder
$CFG->libdir 指向moodle root folder下的lib folder


例如:若要include moodle_home/lib下的lib library,可以

      require_once($CFG->libdir . '/blocklib.php');
    

?
optional_param & required_param
這2個是moodle特有的function,用來代替php自身的從$GET, $POST, $COOKIE中獲取參數值。
required_param函數則要求必須要所要的參數,而optional_param則不需要一定存在所要的參數。
這兩個函數都會驗證指定的參數為基礎的數據,如果是預期以外的數據通過就會產生錯誤或警告。(詳細描述上網查)
例:

      $id = optional_param('id', 0, PARAM_INT);
$name = optional_param('name', '', PARAM_RAW);
    

第1個參數是param name,第2個參數是缺省值

?

2、Moodle的入口點

/index.php: The front page(站點首頁)
/login/index.php: The login page(登錄頁)
/admin/index.php: The main administration page(管理頁)
/course/view.php: A course page(課程頁)
/mod/*/view.php: A module page(模塊頁)
如:http://localhost/course/view.php?id=23

3、設置與安裝:config.php & setup.php

所有的入口點php文件的第一行都是

      require_once(‘../config.php’)
    

?
config.php文件執行在全局變量$CFG里設置的初始參數
$CFG中的信息包括:database數據庫,網頁的URL,script腳本目錄,以及數據存儲目錄的定義設置。


注意:config.php includes /lib/setup.php
setup.php設置所有所需的完整的執行環境的初步方案。這包括定義其他幾個重要的全局變量,包括: $SESSION, $COURSE, $THEME, and $db。


Setup.php會根據設置在config.php中定義:建立和連接數據庫的設置。
Moodle使用ADOdb來進行數據庫操作,Moodle使用的默認數據庫是MySQL, 是一個開源的關系數據庫系統。為了可以使用其他的關系數據庫服務器, Moodle使用了ADODB將數據層抽象, 這樣Moodle就可以使用諸如MS SQL Server、 Oracle等關系型數據庫。使用ADOdb你需要include /lib/adodb/adodb.inc.php
setup.php還會inlude一些常用的庫,還會設置其他一些關鍵的全局變量,從數據庫中加載配置變量,設置了緩存(caching),會話 (sessions),環境變量(environment variables),主題(themes),語言(language),和區域(locales)設置。

4、get_record function
該函數是從database里獲取record
? ? 例:

      if (! ($course = get_record('course', 'id', $id)) ) {
error('Invalid course id');
}
    


5、require_login function
該函數是用來檢查用戶是否已登錄到網站或課程 (有些課程可能設置成不需要login). 如果需要登錄網站,但用戶又沒有登錄,就重定向到登錄頁面。如果用戶已經登錄,他正在嘗試訪問課程,但又沒有注冊到該課程,那么執行該函數就會將用戶重定向到選課注冊頁面。
例:

      require_login($course);
    


6、在Moodle里的顯示函數
輸出html header的函數有2個
print_header
print_header_simple


上面函數用于輸出html header, 包括主題信息和所要的javascript文件等

例:

      $PAGE->print_header(get_string('course').': %fullname%', NULL, '', $bodytags);
    

?
輸出html body是由course的特定format來處理。首先要先include 該課程的format的php文件。

      require($CFG->dirroot .'/course/format/'. $course->format .'/ format.php');
    

?
? ? 例如,如果課程使用topics format,就會include /course/format/topics/format.php。
該format.php用于處理特定的course page的輸出,包括the blocks and main content。
print_footer函數用于輸出footer
例:

      print_footer(NULL, $course);
    

?

7、配置Moodle
Moodle的設置分別處于3個地方:
直接在config.php里hard code。
mdl_config table。可以通過administrative code and interfaces進行控制
mdl_config_plugins table。主要是存儲來自各個plugin的設置。可以通過plugin administration來進行控制。
所有的配置信息都存在全局變量$CFG里(plugin的設置則會放在plugin變量里)。


例如:$CFG->theme包含您網站的主題選定的文本名稱。
? ? config.php一開始會調用unset($CFG);來保證在config.php and setup.php之前清除所有的設置。
? ? 在config.php里,包含下列的設置:

      $CFG->dbtype    = 'mysql';
$CFG->dbhost    = 'localhost';
$CFG->dbname    = 'moodle';
$CFG->dbuser    = 'xxx';
$CFG->dbpass     = 'xxx';
$CFG->dbpersist =  false;
$CFG->prefix    = 'mdl_';
$CFG->wwwroot   = 'http://xxxx:8080/moodle';
$CFG->dirroot   = 'E:/develop/Zend/Apache2/htdocs/moodle';
$CFG->dataroot  = 'E:/develop/Zend/Apache2/htdocs/moodledata';
$CFG->admin     = 'admin';
$CFG->directorypermissions = xxx;  // try 02777 on a server in Safe Mode
$CFG->passwordsaltmain = 'xxxx';
    

?
? ? 這是config.php最必須的設置,如果想在config.php里進行更多的設置,則要參看config-dist.php的所有的配置設置,然后修改config.php。


? ?上述設置你可以直接在config.php里修改。
? ? 除了config.php之外的所有其他設置都存儲在database的mdl_config 表and mdl_config_plugins 表里。
? ? 那么moodle何時把這些來自database的設置賦給$CFG?


就是在config.php里include了lib/setup.php,setup.php調用了

      $CFG = get_config();
    

??? ?? ???
? ?來執行。get_config()函數來自/lib/moodlelib.php庫文件
? ?注意:get_config函數不會對于在調用之前已經存在的設置進行覆蓋。(will not overwrite any $CFG setting that has already been set)。即它不會覆蓋config.php里的設置. 這意味著你可以在config.php里硬編碼你希望的設置,在config.php最后一行include了setup.php,但來自 database的設置如果與config.php里的設置同名,則不會覆蓋它。

?
對configuration進行修改是通過set_config函數。該函數會以(name、value、plugin name (optional))作為參數。如果不使用第三個參數,那么set_confg就會把設置存儲在mdl_config 表,如果使用這個參數,則存在mdl_config_plugins表里。


? ? 我們開發的通常是插件 (modules, blocks, and so on)。在開發過程中,如果你想添加設置的話,強烈建議使用mdl_config_plugins表來存儲,即調用set_config時要用到 plugin name參數。這是因為:設置的name必須唯一。如果你想添加設置到mdl_config表里,那么就有可能該設置的name已經存在,產生沖突。而對 于mdl_config_plugins表,它多了一個”plugin” field,這就使你只要保證該設置的name在該plugin里是唯一的即可。


? ? 注意:plugin的設置則會放在plugin變量里,而不是存在$CFG里。
通常,我們都是通過administration interfaces來set configuration variables。絕對多數的Moodle configuration variables都可以在Site Administration block (用admin login后的home page會看到它)里進行設置。

?

8、Moodle API
絕大多數的api都放在lib目錄下,該目錄下的library php的命名方式是
? ? [function]lib.php
? ? 例如 textlib.php and weblib.php
? ? 幾乎所有的核心庫是包含的,當您通過config.php加載/lib/setup.php將其列入。

?

最常用的library有
???moodlelib.php
???weblib.php
???dmllib.php
???accesslib.php
???grouplib.php

?

Moodle還會用到一些開源的library,如
???PEAR
???ADOdb
???YUI
???XMLDB

?

訪問控制,登錄和角色
Access control, logins, and roles Moodle的登錄函數使用PHP的'cookie'的功能設置成當前會話的Cookie。

?

1、六種分配級別權限:
? ?? ???·site/global(網站全局)
? ?? ???·course category(課程類)
? ?? ???·course(課程)
? ?? ???·blocks(塊)
? ?? ???·activities(活動)
? ?? ???·user(用戶)
? ?? ???·front page(首頁)

?

Contexts是與定義的context水平相關的系統中的元素,Context定義在/lib/accesslib.php里

      define('CONTEXT_SYSTEM', 10);
define('CONTEXT_USER', 30);
define('CONTEXT_COURSECAT', 40);
define('CONTEXT_COURSE', 50);
define('CONTEXT_GROUP', 60);
define('CONTEXT_MODULE', 70);
define('CONTEXT_BLOCK', 80);
    

“System”context只有一個,其他的則有許多個,如”Course”context,“User”context等。

2、有7個內置的角色(role)
? ???·administrator(管理員):系統管理員擁有任何權限,操作任何課程。
? ???·teacher(教師):教師可以在負責的課程中做任何事,包括更改活動和為學生評分。
? ???·non-editing teacher(無編輯權教師):可以在課程中教授和給學生們打分,但是無法改變活動內容。
? ???·student(學生):可參加一門課程,通常擁有較少的特權。
? ???·course creator(課程創建者):可以創建課程,并可以限制在一個課程類別里。
? ???·authenticated user(認證的用戶):任何登錄的用戶都有這個角色
? ???·guest(訪客):非登錄用戶擁有最小的權限,而且通常不能在任何地方輸入文本。


? ???這些role都可以分配給上面的一個或多個context。
? ? 每個用戶可以擁有多個角色,這些角色繼承所有適用于從用戶訪問請求的context級別的權限。
Capabilities are associated with context levels, and are specific access rules that can be granted to roles.
Examples of capabilities are:
? ? ·moodle/site:manageblocks: Can manage blocks at the site context level
? ? ·moodle/user:viewdetails: Can view details of a user at the user context level
? ? ·moodle/course:view: Can view a course at the course context level


? ?每一個capability都可以assign給下列4個訪問權限級別(access levels)的其中一個:
? ? ·Not Set(沒有設置)
? ? ·Allow(允許)
? ? ·Prohibit(禁止)
? ? ·Prevent(避免)
? ?注意:開發者可以通過創建capabilities來控制訪問我們的新功能。


? ?總結來說:
? ???·Contexts are specific elements in Moodle(Contexts是Moodle中的特定元素)
? ???·Roles are associated with all contexts(Roles是與所有的contexts關聯的)
? ???·Capabilities are assigned to roles in a given context(Capabilities都被分配給特定context下的角色)
? ???·Users are assigned to roles in a given context(用戶都被分配給特定context下的角色)
? ?? ?普通系統使用User, Role, Capability就OK了,為什么moodle還要加多一個context?
? ?? ?這是因為同一個user在不同的context的role不同,比如在system context,user是admin role,而他在course“foo”里是instructor role(導師角色)

?

3、每個user role在不同的context里的capability都不同。
? ?獲取context對象的函數是get_context_instance()。
例:

      #獲取system context對象
$context = get_context_instance(CONTEXT_SYSTEM);

#獲取當前course的context
global $COURSE;
$context = get_context_instance(CONTEXT_COURSE, $COURSE->id);
    

?
獲取context之后,下列2個函數是用來check當前login的user在該context里是否有所指定的capability。
? ? ·require_capability測試當前用戶的capabilities,看看他們是否在指定context內有指定的capability,如果他們沒有,頁面就重定向到一個錯誤頁面。
? ? ·has_capability功能與require_capability類似,但不會重定向到錯誤頁面,而是return true or false
??例:

      $context = get_context_instance(CONTEXT_SYSTEM);
require_capability('moodle/site:doanything', $context);
    

?
? ?上面的例子是檢查當前用戶在system context里是否有'moodle/site:doanything'的capability。
? ?如何為你的moodle plugin/module自定義capability?
? ?在plugin/module的root目錄下創建一個db目錄,然后在db目錄下創建一個access.php,該文件用來定義capability。


? ?下例是在helloworld block里定義一個block/helloworld:view capability,該capability的type是read,該capability是屬于system context level里,并設置只有admin role user擁有該capability,其他role沒有。
代碼如下:

      <?php
$block_helloworld_capabilities = array(
    'block/helloworld:view' => array(
           'captype' => 'read',
           'contextlevel' => CONTEXT_SYSTEM,
           'legacy' => array(
                  'guest' => CAP_PREVENT,
                  'student' => CAP_PREVENT,
                  'teacher' => CAP_PREVENT,
                  'editingteacher' => CAP_PREVENT,
                  'coursecreator' => CAP_PREVENT,
                  'admin' => CAP_ALLOW
           )
     )
);
?>
    

?
? ?注意:該capability適用于任何使用了該block的地方。無論你是把該block加到home page,還是admin page,還是My Moodle page,還是course page,該capability都適用。但由于該capability是定義在system context level,只有那些在system context level具有admin role的user才能夠看到這個block。

接下來將學習5種類型的Moodle plugin的開發:
·block
·filter
·activity module
·theme
·course format
?

來源: http://www.aieln.com/thread-4899-1-1.html

?

Moodle插件開發筆記

?

來源: http://www.aieln.com/thread-5089-1-1.html

Moodle插件開發筆記


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 成人欧美一区二区三区白人 | 日批日韩在线观看 | 成人99国产精品一级毛片 | 99视频在线观看免费视频 | 青青青爽视频在线观看 | 不卡猪 | 亚洲精品久久久久久中文字幕小说 | 999国内精品永久免费视频 | 在线精品日韩一区二区三区 | 免费一级毛片不卡不收费 | 日韩欧美国产偷亚洲清高 | 深夜免费网站 | 日日狠狠的日日日日 | 国产福利一区二区三区在线视频 | 国产粉嫩白浆在线观看 | 四虎影院免费视频 | 天堂一区二区在线观看 | 四虎院影永久在线观看 | 久久机热一这里只精品 | 全免费一级午夜毛片 | 欧美毛片在线播放观看 | 国产精品久久久久久久久久日本 | 日日碰狠狠添天天爽爽爽 | 亚洲视频网| 国产日韩欧美中文字幕 | 成人免费视频一区二区三区 | 久久婷婷丁香七月色综合 | 久9热精品视频在线观看 | aaa国产一级毛片 | 婷婷四房色播 | 老司机深夜免费福利 | 亚洲精品免费视频 | 亚洲精品tv久久久久久久久久 | 国产成人精品三区 | 色综合久久伊人 | 伊人久久国产免费观看视频 | 亚洲欧美中日韩 | 国产精品久久久久久免费 | 毛片在线高清免费观看 | 在线播放国产一区 | 久久精品国产一区二区三区肥胖 |