#author("2024-01-05T09:47:43+00:00","default:iseki","iseki") #author("2024-01-05T09:47:54+00:00","default:iseki","iseki") * Moodle Programing [#ne05fea1] ** Document - http://docs.moodle.org/dev/Main_Page - http://docs.moodle.org/dev/Plugins - Grade: http://docs.moodle.org/dev/Grades ** Development - [[Deprecate>../Deprecate]] *** 構成 [#ae7a2d84] - [[module>./module]] - [[block>./block]] *** Version [#g43ada84] - [[4.x>./4.x]] - [[3.x>./3.x]] - [[2.7>./2.7]] - [[2.4>./2.4]] - [[2.2>./2.2]] - [[1.x→2.x>./1.x→2.x]] - [[1.9>./1.9]] *** Context [#y458b451] **** module [#ea2a3051] - $cm = get_coursemodule_from_instance('mdlds', $minstance->id, $course->id, false, MUST_EXIST); // コースモジュール -- $cm = [[get_coursemodule_from_id()>./get_coursemodule_from_id]] も使用可 - $mcontext = context_module::instance($cm->id); // モジュールコンテキスト - $ccontext = context_course::instance($course->id); // コースコンテキスト **** block [#d1bf2099] - $context = context_block::instance($this->instance->id); // ブロックコンテキスト *** POST, GET [#i893cfed] - required_param('course', PARAM_INT); - optional_param('mode', default, PARAM_ALPHA); -- [[PARAM_*>./PARAM_]] *** 権限用 [#zb75d538] - %%isadmin()%% -- see jbxl_moodle_tools.php - %%isteacher($course->id)%% -- see jbxl_moodle_tools.php - %%isguest()%% -- isguestuser() **** function require_login [#h9bd199e] - ログインしているかどうかをチェックする. - lib/moodlelib.php require_login($courseorid=NULL, $autologinguest=true, $cm=NULL, $setwantsurltome=true, $preventredirect=false) - この関数を呼ばない場合,contextlevel は CONTEXT_SYSTEM (10) になる. - $cm が NULL の場合, contextlevel は CONTEXT_COURSE (50) になる. - $cm が NULL でない場合,contextlevel は CONTEXT_MODULE (70) になる. -- contextlevel が CONTEXT_MODULE の場合,管理ブロック(settings) にモジュールの管理メニューが dock される (lib/navigationlib.php). *** DB [#s4f04e49] - lib/dmllib.php - $DB ([[データベースアクセス>./DB]]) **** データベース作成 [#j28bdff8] - XMLDB -- http://dev.moodle.org/mod/resource/view.php?id=48 -- blocks/mod にディレクトリを作成し,その中に dbディレクトリを作る. -- 「サイト管理」→「その他」→「XMLDBエディタ」 でデータベース定義用の db/install.xml を作成する. *** 大域変数, オブジェクト [#sf24d85f] **** $CFG [#f86d1bbe] - $CFG->wwwroot // top url - $CFG->prefix **** [[$PAGE>./PAGE]] [#v32dd795] **** [[$USER>./USER]] [#r9aac91e] **** [[$OUTPUT>./OUTPUT]] [#w18e0d7c] **** $_POST [#jf217b7d] - ポストデータが入る - empty($_POST) **** [[block_base>./3.x/block_base]] [#b12b2a90] *** HTML出力 [#b3217a4d] - 4.x で変わったポイ? 知らんけど. **** $OUTPUT [#ie6e5cb2] - [[$OUTPUT>./OUTPUT]] を使う **** ひたすら HTML を書く. [#z2ce95da] - 自由度,無限大.または,ひたすら土方仕事. **** new flexible_table('...') を使う. [#p0c7ce11] - lib/tablelib.php -- $table = new flexible_table('modulename-view-'.$courseid); -- $data = .... -- $table->add_data($data); -- $table->print_html(); **** new html_table() と html_writer::table() を使用する. [#f65c703f] - 簡単だが,自由度が無い. - 表のヘッダを別に定義できる. - [[html_writer>./html_writer]] *** URL [#s7dee984] **** class moodle_url [#w114432f] - lib/weblib.php $base_url = new moodle_url('/mod/apply/'.$action_file); $base_url->params(array('id'=>$id, 'courseid'=>$courseid)); *** Form [#sfd0317f] - [[Form 一覧>./Form]] **** Submit [#ef12e78e] - <input type="hidden" name="sesskey" value="<?php echo sesskey(); ?>" /> if (data_submitted()) { if (!confirm_sesskey()) { print_error('sesskey_error', 'mdlds', $this->action_url); } } **** $SESSION を使う [#peb48006] - $SESSION->sample = new stdClass(); - $SESSION->sample->XXXX = 色々セット - submit 後に $SESSION->sample->XXXX をチェック. *** [[File Storage Class>./File Storage]] [#ge284a6b] *** メッセージ [#pb1c2054] - get_string( , ) *** settings.php [#m49c050d] - admin_setting_configtext - admin_setting_configcheckbox - admin_setting_configselect *** メッセージの送信 [#y65975cb] **** messsage_send() [#t988f73f] $eventdata = new stdClass(); $eventdata->name = 'processed'; $eventdata->component = 'mod_apply'; $eventdata->userfrom = $fuser; // id またはオブジェクト $eventdata->userto = $user; // id またはオブジェクト $eventdata->subject = $postsubject; $eventdata->fullmessage = $posttext; $eventdata->fullmessageformat = FORMAT_PLAIN; $eventdata->fullmessagehtml = $posthtml; $eventdata->smallmessage = ''; $eventdata->notification = 1; // message_send($eventdata); - name の ''processed'' に対応した messageprovidersを db/messages.php に追加 $messageproviders = array ( /// Submitting a apply 'submission' => array ( ), 'processed' => array ( ) ); - moodle のバージョン番号を上げて,アップデート *** Capability [#i8cec55a] - RISK_SPAM - ユーザーがサイトに目に見えるコンテンツを追加したり,他のユーザーにメッセージを送ることができます. - RISK_PERSONAL - 個人情報へのアクセス - 例:ユーザー詳細のバックアップ,プロフィールの非公開情報(隠しメール)等;本来は isteacher() で保護されています. - RISK_XSS - ユーザーがクリーンアップされていないコンテンツ (アクティブなコンテンツを含む HTML と保護されていないファイルの両方) を送信することができます. - RISK_CONFIG - ユーザーがグローバルな設定を変更できる,アクションにサニティチェックがない - RISK_MANAGETRUST - 他ユーザーのトラストビットマスクを管理する. - RISK_DATALOSS - 容易に復元できない大量の情報を破壊する可能性があります. + Capability が正常に反映されない場合は,一旦 db/access.php の設定部分をコメントアウトして,更新する(version を上げる) + その後コメントを外して,更新する(version を上げる) *** ログ [#q8c98d5f] - %%lib/moodlelib.php%% - %%function add_to_log($courseid, $module, $action, $url='', $info='', $cm=0, $user=0)%% - 2.6 から add_to_log() は deprecated - event log を使う - see [[event log>./event log]] **** Table of LOG Data [#h7179fc9] - http://docs.moodle.org/dev/Migrating_log_access_in_reports - mdl_logstore_standard_log MariaDB [moodle_db]> show columns from mdl_logstore_standard_log; +-------------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------------+--------------+------+-----+---------+----------------+ | id | bigint(10) | NO | PRI | NULL | auto_increment | | eventname | varchar(255) | NO | | | | | component | varchar(100) | NO | | | | | action | varchar(100) | NO | | | | | target | varchar(100) | NO | | | | | objecttable | varchar(50) | YES | | NULL | | | objectid | bigint(10) | YES | | NULL | | | crud | varchar(1) | NO | | | | | edulevel | tinyint(1) | NO | | NULL | | | contextid | bigint(10) | NO | | NULL | | | contextlevel | bigint(10) | NO | | NULL | | | contextinstanceid | bigint(10) | NO | | NULL | | | userid | bigint(10) | NO | MUL | NULL | | | courseid | bigint(10) | YES | MUL | NULL | | | relateduserid | bigint(10) | YES | | NULL | | | anonymous | tinyint(1) | NO | | 0 | | | other | longtext | YES | | NULL | | | timecreated | bigint(10) | NO | MUL | NULL | | | origin | varchar(10) | YES | | NULL | | | ip | varchar(45) | YES | | NULL | | | realuserid | bigint(10) | YES | | NULL | | +-------------------+--------------+------+-----+---------+----------------+ 21 rows in set (0.00 sec) ** Version [#g43ada84] - [[4.x>./4.x]] - [[3.x>./3.x]] - [[2.7>./2.7]] - [[2.4>./2.4]] - [[2.2>./2.2]] - [[1.x→2.x>./1.x→2.x]] - [[1.9>./1.9]] ** Files [#m4e06bae] *** Block [#x3645934] - version.php - block_XXX.php - lib.php (Option) - settings.php (Option) ** Tips *** SITEID [#bb71472e] - Network機能を使用するときに使用する識別ID.Local の場合は 1 ** External Service [#t7bddd11] *** WebService [#k3d3d384] - db/services.php -- db/access.php - externallib.php -- classes/...._webservice_handler.php ** List [#w6e8f55e] #ls2 #br