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主題和任何自定義主題。每一個主題都有其本身的文件夾。javascript
其它還有:
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-cnphp
一、2個頗有用的關於path的變量
$CFG->dirroot 指向moodle root folder
$CFG->libdir 指向moodle root folder下的lib folderhtml
例如:若要include moodle_home/lib下的lib library,能夠java
optional_param & required_param
這2個是moodle特有的function,用來代替php自身的從$GET, $POST, $COOKIE中獲取參數值。
required_param函數則要求必需要所要的參數,而optional_param則不須要必定存在所要的參數。
這兩個函數都會驗證指定的參數爲基礎的數據,若是是預期之外的數據經過就會產生錯誤或警告。(詳細描述上網查)
例:mysql
第1個參數是param name,第2個參數是缺省值web
二、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
三、設置與安裝:config.php & setup.php
全部的入口點php文件的第一行都是算法
config.php文件執行在全局變量$CFG裏設置的初始參數
$CFG中的信息包括:database數據庫,網頁的URL,script腳本目錄,以及數據存儲目錄的定義設置。sql
注意: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)設置。
四、get_record function
該函數是從database裏獲取record
例:api
五、require_login function
該函數是用來檢查用戶是否已登陸到網站或課程 (有些課程可能設置成不須要login). 若是須要登陸網站,但用戶又沒有登陸,就重定向到登陸頁面。若是用戶已經登陸,他正在嘗試訪問課程,但又沒有註冊到該課程,那麼執行該函數就會將用戶重定向到選課註冊頁面。
例:
六、在Moodle裏的顯示函數
輸出html header的函數有2個
print_header
print_header_simple
上面函數用於輸出html header, 包括主題信息和所要的javascript文件等
例:
輸出html body是由course的特定format來處理。首先要先include 該課程的format的php文件。
例如,若是課程使用topics format,就會include /course/format/topics/format.php。
該format.php用於處理特定的course page的輸出,包括the blocks and main content。
print_footer函數用於輸出footer
例:
七、配置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裏,包含下列的設置:
這是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調用了
來執行。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會看到它)裏進行設置。
八、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。
一、六種分配級別權限:
·site/global(網站全局)
·course category(課程類)
·course(課程)
·blocks(塊)
·activities(活動)
·user(用戶)
·front page(首頁)
Contexts是與定義的context水平相關的系統中的元素,Context定義在/lib/accesslib.php裏
「System」context只有一個,其餘的則有許多個,如」Course」context,「User」context等。
二、有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(導師角色)
三、每一個user role在不一樣的context裏的capability都不一樣。
獲取context對象的函數是get_context_instance()。
例:
獲取context以後,下列2個函數是用來check當前login的user在該context裏是否有所指定的capability。
·require_capability測試當前用戶的capabilities,看看他們是否在指定context內有指定的capability,若是他們沒有,頁面就重定向到一個錯誤頁面。
·has_capability功能與require_capability相似,但不會重定向到錯誤頁面,而是return true or false
例:
上面的例子是檢查當前用戶在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沒有。
代碼以下:
注意:該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
來源: http://www.aieln.com/thread-5089-1-1.html
http://justcoding.iteye.com/blog/2004090