#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

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 ページ一覧 検索 最終更新   ヘルプ   最終更新のRSS