日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > php >内容正文

php

moodle php代码解读_Moodle插件开发笔记

發(fā)布時(shí)間:2023/12/14 php 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 moodle php代码解读_Moodle插件开发笔记 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原標(biāo)題:Moodle插件開發(fā)筆記

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

Moodle數(shù)據(jù)庫(kù)模型

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

Moodle data(Moodle數(shù)據(jù))

Moodle數(shù)據(jù)是用戶上傳內(nèi)容的文件存儲(chǔ)位置記錄,Moodle數(shù)據(jù)也存儲(chǔ)登錄到該系統(tǒng)用戶的會(huì)話數(shù)據(jù)(sessions data),如果基于文件的會(huì)話(sessions)正在使用。

Moodle數(shù)據(jù)在文件夾中的組織結(jié)構(gòu)由用戶或課程組成。每門課程有一個(gè)文件夾,命名為一個(gè)整數(shù)值。這個(gè)整數(shù)值即為這門課程的內(nèi)部數(shù)據(jù)庫(kù)的ID。

Moodle 2.0使用一種全新的組織模式來組織用戶上傳的文件,這是基于哈希算法。

Moodle主要目錄結(jié)構(gòu)

admin:系統(tǒng)管理的代碼

包含控制管理用戶界面的PHP文件。其中包括一個(gè)cron.php:作為批處理進(jìn)程執(zhí)行系統(tǒng)維護(hù)任務(wù),如消息傳遞和過程中備份,同時(shí)它也用于處理批量操作

auth:驗(yàn)證用戶基本模塊及擴(kuò)展模塊

包含所有Moodle的身份驗(yàn)證模塊。“auth”目錄里每一個(gè)子目錄就是一個(gè)身份驗(yàn)證模塊。這些認(rèn)證模塊控制創(chuàng)建用戶,用戶配置文件數(shù)據(jù),和用戶訪問系統(tǒng)權(quán)限。

backup:課程備份代碼

包含課程備份的核心功能:備份,恢復(fù)和導(dǎo)入的課程。

blocks:界面板塊基本模塊及擴(kuò)展模塊

板塊用于顯示信息框,可以在Moodle頁(yè)面的右側(cè)或左側(cè)欄。這是最簡(jiǎn)單的可擴(kuò)展的模塊設(shè)計(jì)類型。

course:顯示和管理課程的代碼

這是Moodle重要的組成部分,Moodle是圍繞課程組織的。開發(fā)人員最有可能修改或增加課程的格式和報(bào)告。定制課程格式,可用于改變課程的布局。

enrol:注冊(cè)模塊

包含所有的Moodle的注冊(cè)模塊。注冊(cè)模塊控制課程級(jí)角色分配(注冊(cè))的創(chuàng)建和管理。

files:顯示和管理上傳文件的代碼

該文件組件控制文件的上傳,訪問控制,并查看文件。文件管理在Moodle2.0中改寫變化很大。Moodle的2.0將允許外部文件庫(kù)中的文件存儲(chǔ)和使用,如:Alfresco, Box.net, and Google Docs等。

filter:過濾器

過濾器系統(tǒng)是關(guān)聯(lián)從數(shù)據(jù)庫(kù)到頁(yè)面創(chuàng)建用戶輸入的內(nèi)容。過濾器匹配和修改頁(yè)面顯示之前。它需要考慮到性能的影響,需要認(rèn)真制定。

lang:語言模塊

包含核心系統(tǒng)的語言字符串。語言字符串映射也都存儲(chǔ)在Moodle的數(shù)據(jù)lang文件夾。不同語言的對(duì)應(yīng)文本,每個(gè)目錄表示一種語言,并且和具體的模塊對(duì)應(yīng)。

lib:Moodle的核心代碼庫(kù)

包含的核心系統(tǒng)庫(kù)函數(shù)。當(dāng)我們開發(fā)和定制模塊時(shí),我們將使用在此文件夾中定義的類和功能。

mod:Moodle的基本模塊和擴(kuò)展模塊

包含的活動(dòng)模塊(activity modules),如assignment, quiz, wiki, forum, and lesson模塊。學(xué)習(xí)活動(dòng)是使用Moodle任何課程的核心功能。活動(dòng)模塊(activity modules)比塊(blocks)創(chuàng)建更具挑戰(zhàn)性和復(fù)雜性,因?yàn)樗鼈冊(cè)O(shè)計(jì)到備份,還原,和存儲(chǔ)等級(jí)等內(nèi)容。

my:我的課程

它提供了一個(gè)上市的分配給學(xué)習(xí)者的課程列表,包括即將到來的課程活動(dòng)的總結(jié)。用戶也可以添加和刪除他或她的門戶網(wǎng)站頁(yè)面上的塊。“my”提供了一個(gè)很好的位置,以最小的核心變化到Moodle顯示自定義信息。例如,我們利用“my”作為一個(gè)定制許多項(xiàng)目的面板位置。

theme:站點(diǎn)的主題包,控制站點(diǎn)的樣式

包含了所有的內(nèi)置的Moodle主題和任何自定義主題。每個(gè)主題都有其自己的文件夾。

其它還有:

calendar:維護(hù)及顯示日歷的代碼

doc:Moodle的幫助文檔

login:登錄及賬號(hào)創(chuàng)建代碼

pix:站點(diǎn)的圖片

user:顯示和管理用戶

onfig.php包含基本的系統(tǒng)設(shè)置,一般在第一次安轉(zhuǎn)時(shí)設(shè)置

ns tall.php安裝站點(diǎn)

vers ion版本控制

index.php站點(diǎn)首頁(yè)

開發(fā)概要詳見: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個(gè)很有用的關(guān)于path的變量

$CFG->dirroot 指向moodle root folder

$CFG->libdir 指向moodle root folder下的lib folder

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

Php代碼

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

optional_param & required_param

這2個(gè)是moodle特有的function,用來代替php自身的從$GET, $POST, $COOKIE中獲取參數(shù)值。

required_param函數(shù)則要求必須要所要的參數(shù),而optional_param則不需要一定存在所要的參數(shù)。

這兩個(gè)函數(shù)都會(huì)驗(yàn)證指定的參數(shù)為基礎(chǔ)的數(shù)據(jù),如果是預(yù)期以外的數(shù)據(jù)通過就會(huì)產(chǎn)生錯(cuò)誤或警告。(詳細(xì)描述上網(wǎng)查)

例:

Php代碼

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

$name = optional_param('name', '', PARAM_RAW);

第1個(gè)參數(shù)是param name,第2個(gè)參數(shù)是缺省值

2、Moodle的入口點(diǎn)

/index.php: The front page(站點(diǎn)首頁(yè))

/login/index.php: The login page(登錄頁(yè))

/admin/index.php: The main administration page(管理頁(yè))

/course/view.php: A course page(課程頁(yè))

/mod/*/view.php: A module page(模塊頁(yè))

如:http://localhost/course/view.php?id=23

3、設(shè)置與安裝:config.php & setup.php

所有的入口點(diǎn)php文件的第一行都是

C代碼

require_once(‘../config.php’)

config.php文件執(zhí)行在全局變量$CFG里設(shè)置的初始參數(shù)

$CFG中的信息包括:database數(shù)據(jù)庫(kù),網(wǎng)頁(yè)的URL,腳本目錄,以及數(shù)據(jù)存儲(chǔ)目錄的定義設(shè)置。

注意:config.php includes /lib/setup.php

setup.php設(shè)置所有所需的完整的執(zhí)行環(huán)境的初步方案。這包括定義其他幾個(gè)重要的全局變量,包括: $SESSION, $COURSE, $THEME, and $db。

Setup.php會(huì)根據(jù)設(shè)置在config.php中定義:建立和連接數(shù)據(jù)庫(kù)的設(shè)置。

Moodle使用ADOdb來進(jìn)行數(shù)據(jù)庫(kù)操作,Moodle使用的默認(rèn)數(shù)據(jù)庫(kù)是MySQL, 是一個(gè)開源的關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)。為了可以使用其他的關(guān)系數(shù)據(jù)庫(kù)服務(wù)器, Moodle使用了ADODB將數(shù)據(jù)層抽象, 這樣Moodle就可以使用諸如MS SQL Server、 Oracle等關(guān)系型數(shù)據(jù)庫(kù)。使用ADOdb你需要include /lib/adodb/adodb.inc.php

setup.php還會(huì)inlude一些常用的庫(kù),還會(huì)設(shè)置其他一些關(guān)鍵的全局變量,從數(shù)據(jù)庫(kù)中加載配置變量,設(shè)置了緩存(caching),會(huì)話 (sessions),環(huán)境變量(environment variables),主題(themes),語言(language),和區(qū)域(locales)設(shè)置。

4、get_record function

該函數(shù)是從database里獲取record

例:

Php代碼

if(! ($course = get_record('course', 'id', $id)) ) {

error('Invalid course id');

}

5、require_login function

該函數(shù)是用來檢查用戶是否已登錄到網(wǎng)站或課程 (有些課程可能設(shè)置成不需要login). 如果需要登錄網(wǎng)站,但用戶又沒有登錄,就重定向到登錄頁(yè)面。如果用戶已經(jīng)登錄,他正在嘗試訪問課程,但又沒有注冊(cè)到該課程,那么執(zhí)行該函數(shù)就會(huì)將用戶重定向到選課注冊(cè)頁(yè)面。

例:

Php代碼

require_login($course);

6、在Moodle里的顯示函數(shù)

輸出html header的函數(shù)有2個(gè)

print_header

print_header_simple

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

例:

Php代碼

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

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

Php代碼

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

例如,如果課程使用topics format,就會(huì)include /course/format/topics/format.php。

該format.php用于處理特定的course page的輸出,包括the blocks and main content。

print_footer函數(shù)用于輸出footer

例:

Php代碼

print_footer(NULL, $course);

7、配置Moodle

Moodle的設(shè)置分別處于3個(gè)地方:

直接在config.php里hard code。

mdl_config table。可以通過administrative code and interfaces進(jìn)行控制

mdl_config_plugins table。主要是存儲(chǔ)來自各個(gè)plugin的設(shè)置。可以通過plugin administration來進(jìn)行控制。

所有的配置信息都存在全局變量$CFG里(plugin的設(shè)置則會(huì)放在plugin變量里)。

例如:$CFG->theme包含您網(wǎng)站的主題選定的文本名稱。

config.php一開始會(huì)調(diào)用unset($CFG);來保證在config.php and setup.php之前清除所有的設(shè)置。

在config.php里,包含下列的設(shè)置:

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最必須的設(shè)置,如果想在config.php里進(jìn)行更多的設(shè)置,則要參看config-dist.php的所有的配置設(shè)置,然后修改config.php。

上述設(shè)置你可以直接在config.php里修改。

除了config.php之外的所有其他設(shè)置都存儲(chǔ)在database的mdl_config 表and mdl_config_plugins 表里。

那么moodle何時(shí)把這些來自database的設(shè)置賦給$CFG?

就是在config.php里include了lib/setup.php,setup.php調(diào)用了

Php代碼

$CFG = get_config();

來執(zhí)行。get_config()函數(shù)來自/lib/moodlelib.php庫(kù)文件

注意:get_config函數(shù)不會(huì)對(duì)于在調(diào)用之前已經(jīng)存在的設(shè)置進(jìn)行覆蓋。(will not overwrite any $CFG setting that has already been set)。即它不會(huì)覆蓋config.php里的設(shè)置. 這意味著你可以在config.php里硬編碼你希望的設(shè)置,在config.php最后一行include了setup.php,但來自 database的設(shè)置如果與config.php里的設(shè)置同名,則不會(huì)覆蓋它。

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

我們開發(fā)的通常是插件 (modules, blocks, and so on)。在開發(fā)過程中,如果你想添加設(shè)置的話,強(qiáng)烈建議使用mdl_config_plugins表來存儲(chǔ),即調(diào)用set_config時(shí)要用到 plugin name參數(shù)。這是因?yàn)?#xff1a;設(shè)置的name必須唯一。如果你想添加設(shè)置到mdl_config表里,那么就有可能該設(shè)置的name已經(jīng)存在,產(chǎn)生沖突。而對(duì) 于mdl_config_plugins表,它多了一個(gè)”plugin” field,這就使你只要保證該設(shè)置的name在該plugin里是唯一的即可。

注意:plugin的設(shè)置則會(huì)放在plugin變量里,而不是存在$CFG里。

通常,我們都是通過administration interfaces來set configuration variables。絕對(duì)多數(shù)的Moodle configuration variables都可以在Site Administration block (用admin login后的home page會(huì)看到它)里進(jìn)行設(shè)置。

8、Moodle API

絕大多數(shù)的api都放在lib目錄下,該目錄下的library php的命名方式是

[function]lib.php

例如 textlib.php and weblib.php

幾乎所有的核心庫(kù)是包含的,當(dāng)您通過config.php加載/lib/setup.php將其列入。

最常用的library有

? moodlelib.php

? weblib.php

? dmllib.php

? accesslib.php

? grouplib.php

Moodle還會(huì)用到一些開源的library,如

? PEAR

? ADOdb

? YUI

? XMLDB

訪問控制,登錄和角色

Access control, logins, and roles Moodle的登錄函數(shù)使用PHP的'cookie'的功能設(shè)置成當(dāng)前會(huì)話的Cookie。

1、六種分配級(jí)別權(quán)限:

·site/global(網(wǎng)站全局)

·course category(課程類)

·course(課程)

·blocks(塊)

·activities(活動(dòng))

·user(用戶)

·front page(首頁(yè))

Contexts是與定義的context水平相關(guān)的系統(tǒng)中的元素,Context定義在/lib/accesslib.php里

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只有一個(gè),其他的則有許多個(gè),如”Course”context,“User”context等。

2、有7個(gè)內(nèi)置的角色(role)

·administrator(管理員):系統(tǒng)管理員擁有任何權(quán)限,操作任何課程。

·teacher(教師):教師可以在負(fù)責(zé)的課程中做任何事,包括更改活動(dòng)和為學(xué)生評(píng)分。

·non-editing teacher(無編輯權(quán)教師):可以在課程中教授和給學(xué)生們打分,但是無法改變活動(dòng)內(nèi)容。

·student(學(xué)生):可參加一門課程,通常擁有較少的特權(quán)。

·course creator(課程創(chuàng)建者):可以創(chuàng)建課程,并可以限制在一個(gè)課程類別里。

·authenticated user(認(rèn)證的用戶):任何登錄的用戶都有這個(gè)角色

·guest(訪客):非登錄用戶擁有最小的權(quán)限,而且通常不能在任何地方輸入文本。

這些role都可以分配給上面的一個(gè)或多個(gè)context。

每個(gè)用戶可以擁有多個(gè)角色,這些角色繼承所有適用于從用戶訪問請(qǐng)求的context級(jí)別的權(quán)限。

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

每一個(gè)capability都可以assign給下列4個(gè)訪問權(quán)限級(jí)別(access levels)的其中一個(gè):

·Not Set(沒有設(shè)置)

·Allow(允許)

·Prohibit(禁止)

·Prevent(避免)

注意:開發(fā)者可以通過創(chuàng)建capabilities來控制訪問我們的新功能。

總結(jié)來說:

·Contexts are specific elements in Moodle(Contexts是Moodle中的特定元素)

·Roles are associated with all contexts(Roles是與所有的contexts關(guān)聯(lián)的)

·Capabilities are assigned to roles in a given context(Capabilities都被分配給特定context下的角色)

·Users are assigned to roles in a given context(用戶都被分配給特定context下的角色)

普通系統(tǒng)使用User, Role, Capability就OK了,為什么moodle還要加多一個(gè)context?

這是因?yàn)橥粋€(gè)user在不同的context的role不同,比如在system context,user是admin role,而他在course“foo”里是instructor role(導(dǎo)師角色)

3、每個(gè)user role在不同的context里的capability都不同。

獲取context對(duì)象的函數(shù)是get_context_instance()。

例:

Php代碼

#獲取system context對(duì)象

$context = get_context_instance(CONTEXT_SYSTEM);

#獲取當(dāng)前course的context

global$COURSE;

$context = get_context_instance(CONTEXT_COURSE, $COURSE->id);

獲取context之后,下列2個(gè)函數(shù)是用來check當(dāng)前l(fā)ogin的user在該context里是否有所指定的capability。

·require_capability測(cè)試當(dāng)前用戶的capabilities,看看他們是否在指定context內(nèi)有指定的capability,如果他們沒有,頁(yè)面就重定向到一個(gè)錯(cuò)誤頁(yè)面。

·has_capability功能與require_capability類似,但不會(huì)重定向到錯(cuò)誤頁(yè)面,而是return true or false

例:

Php代碼

$context = get_context_instance(CONTEXT_SYSTEM);

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

上面的例子是檢查當(dāng)前用戶在system context里是否有'moodle/site:doanything'的capability。

如何為你的moodle plugin/module自定義capability?

在plugin/module的root目錄下創(chuàng)建一個(gè)db目錄,然后在db目錄下創(chuàng)建一個(gè)access.php,該文件用來定義capability。

下例是在helloworld block里定義一個(gè)block/helloworld:view capability,該capability的type是read,該capability是屬于system context level里,并設(shè)置只有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才能夠看到這個(gè)block。

接下來將學(xué)習(xí)5種類型的Moodle plugin的開發(fā):

·block

·filter

·activity module

·theme

·course format

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

責(zé)任編輯:

總結(jié)

以上是生活随笔為你收集整理的moodle php代码解读_Moodle插件开发笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。