プラグインスケルトンジェネレータ

プラグインスケルトンジェネレータ
タイプツール
セット該当なし
ダウンロード https://github.com/mudrd8mz/moodle-tool_pluginskel
問題点 https://github.com/mudrd8mz/moodle-tool_pluginskel
討論 https://github.com/mudrd8mz/moodle-tool_pluginskel
メンテナ Alexandru Elisei、DavidMudrák

プラグインスケルトンを生成する

プラグインは特定のプラグインタイプに必要なスケルトンファイルを生成します。プラグインの全機能には、Webインタフェースまたはコマンドラインスクリプトを介してアクセスできます。

Webインターフェースを介してスケルトンプラグインを生成するには:

  1. 管理>サイト管理>開発>プラグインスケルトンの生成に進みます。
  2. さまざまなプラグイン機能を入力してから、[Download plugin skeleton]ボタンをクリックします。
プラグインスケルトンを生成する

コマンドラインインターフェイスを使用してプラグインスケルトンを生成するには

  1. ゼロから作成するか、cli / example.yamlにあるテンプレートレシピを編集して、YAML形式のレシピファイルを作成します(推奨)。
  2. cli / generate.phpでコマンドラインスクリプトを起動します。
 php cli / generate.php --recipe = recipe.yaml

これにより、生成されているプラグインタイプに対応するMoodleパスディレクトリにプラグインが生成されます。

インストール

このプラグインはMoodle 3.1以降で動作することがテストされています。それが以前のバージョンで動作するという保証はありません。

一般的なインストール手順はすべてのMoodleプラグインに共通のものです: プラグインのインストール

gitリポジトリからプラグインをダウンロードするときtool_pluginskel利用可能なオプションがいくつかあります:リポジトリのクローン作成、zipファイルのダウンロードと解凍、あるいはAdministration> Site administration> Plugins> Install pluginsでアクセス可能なプラグインインストールインターフェース用のzipファイルの使用。

リポジトリをクローンすることを選択した場合は、MOODLE_ROOT_DIRECTORY / admin / tool / pluginskelにクローンを作成する必要があります。

 git clone https://github.com/mudrd8mz/moodle-tool_pluginskel MOODLE_ROOT_DIRECTORY / admin / tool / pluginskel

MOODLE_ROOT_DIRECTORYを実際のMoodleインストールルートディレクトリパスに置き換えます。 zipファイルは同じ場所に解凍する必要があります。

リポジトリのクローンを作成すると、隠れた.gitディレクトリも作成されることに注意してください。これは、ライブサーバーでは不要な場合があります。

:インストールプラグインインターフェースを使用する場合は、アーカイブ内のフォルダの名前をpluginskelに変更することを忘れないでください。

Webインターフェース

Webインターフェースは、「 管理」>「サイト管理」>「開発」>「プラグインスケルトンの生成」からアクセスできます。すべての必須フィールドに手動で入力するか、以前に作成したレシピファイルをアップロードするか、またはテキスト領域に手動でレシピを書き込むか(おそらく既存のレシピをコピーして貼り付けること)を選択できます。

Webインターフェースの2ページ目には、完全なプラグインスケルトンを生成するために必要なすべてのオプションが表示されます。作成プロセスを案内するために、各要素に関連したヘルプアイコン、および関連するMoodleドキュメンテーションへのリンクがあります。

プラグインスケルトンの作成

必要なフィールドに入力すると、3つの選択肢があります。

  1. プラグインファイルを生成してダウンロードするには、[ プラグインスケルトンダウンロード ]ボタンをクリックします。ファイルはzipアーカイブとしてパッケージされます。
  2. フォーム入力からレシピファイルをYAML形式で生成して保存することを選択できます。これは、 レシピダウンロードボタンをクリックして行います。
  3. [ レシピを表示]ボタンをクリックすると、フォームから作成したレシピを表示および編集できます。レシピ編集Webページに移動します。
レシピを表示、編集する

ここでレシピに加えた変更は、[ 戻る ]ボタンをクリックすると前のページに反映されることに注意してください。

コマンドラインスクリプト

コマンドラインスクリプトは、プラグインのインストールディレクトリ内のcli / generate.phpにあります(つまり、MOODLE_ROOT_DIRECTORY / admin / tool / pluginskel)。コマンドラインスクリプトの一般的な構文は次のとおりです。

 php cli / generate.php --recipe = RECIPE.YAML [--help] [--target-dir = DIR] [--target-moodle = DIR]

利用可能な引数は以下のとおりです。

  • --help、-h - スクリプトの使用方法に関するメッセージを表示します。
  • --recipe = RECIPE.YAML - レシピファイルの場所(ファイルへの相対パスまたは絶対パス)。必須です。
  • --loglevel = LOGLEVEL - ログメッセージの詳細度。デフォルトはWARNINGです。プラグインはMonologロギングライブラリを使用します、異なるログレベルの完全なリストについてはpluginディレクトリにあるファイルvendor / monolog / monolog / src / Monolog / Logger.phpを調べてください。
  • --target-dir = DIR - プラグインファイルが生成されるディレクトリへのパス(相対または絶対)。オプションです。 DIRの中には、すべてのプラグインファイルが配置される場所に、コンポーネント名を含むディレクトリが作成されます。たとえば、プラグインmod_newmoduleを作成すると、次のようになります。
 php cli / generate.php --recipe = mod_newmodule_recipe.yaml --target-dir = / tmp

プラグインファイルは/ tmp / newmodule /にあります。

  • target-moodle = DIR - これは、生成されているプラグインタイプに対応するMoodleパスディレクトリ内のすべてのプラグインファイルを生成しますが、DIRではMoodleルートディレクトリと見なされます。オプションです。たとえば、プラグインtool_newtoolを生成するには、次のようにします。
 php cli / generate.php --recipe = tool_newtool_recipe.yaml --target-moodle = / tmp

プラグインファイルは/ tmp / admin / tool / newtool /にあります。

--target-dir--target-moodleも使用していない場合、プラグインファイルは現在のMoodleインストールのMoodleパスディレクトリに生成されます。

レシピの形式

レシピはYAMLフォーマットで書かれる必要があります。 cli / example.yamlにあるサンプルレシピをプラグインのテンプレートとして使用し、必要に応じてオプションを編集または削除することを強くお勧めします。

概念的には、レシピは3つの部分に分かれています。

  1. 最初の部分は、version.phpファイルとlang / en / <component> .phpにある言語文字列ファイルを作成するために必要なオプションを表しています。これら2つのファイルは、プラグインの種類にかかわらず、すべてのプラグインに必須であり、オプションはレシピの最上位で宣言されています。これらは:
    コンポーネント、名前、リリース、バージョン、requies、maturiy、著作権、依存関係、lang_strings 
  1. 2番目の部分は、(ほとんどの)すべてのプラグインタイプに共通の機能で構成されています。これは2つのサブパートに分けられます。
    1. ブール値を持ち、ファイルを生成するかどうかを制御するオプション。これらはレシピの機能セクションで定義されています 。彼らです:
      インストール、アンインストール、設定、readme、ライセンス、アップグレード、upgradelib 
    2. 配列として定義する必要があるオプション(連想型または数値インデックス)。彼らはレシピのトップレベルに居住しています:
      ケーパビリティ、message_providers、cli_scripts、observers_events、mobile_addons、phpunit_tests 
  1. 最後の部分はプラグイン固有の機能で構成されています。プラグインタイプに対応するすべての機能は、レシピの<componenttype> _featuresセクションの下にあります。

機能の動作についての説明、および上記の各オプションに関連するMoodleドキュメンテーションへのリンクは、ヘルプアイコンをクリックすることでウェブインターフェースで見つけることができます。

新機能を追加する

プラグインは、新しい機能を追加することで簡単に拡張できるように設計されています。しかし最初に、プラグインがレシピからスケルトンファイルを生成する方法を見てみましょう。

生成プロセス

生成プロセスはclasses / local / util / manager.phpにあるmanagerクラスによって処理されます。マネージャクラスへの入力はレシピの配列表現です。 YAML形式からの変換は、マネージャを呼び出す前に行わなければなりません。

マネージャクラスを呼び出してプラグインスケルトンを作成するには、次の手順に従います。

  1. まず、ロガークラスを静的コンストラクタmanager :: instance($ logger)に渡すことで、クラスのインスタンスが作成されます
  2. レシピは、パブリックメソッドload_recipe($ recipe)を呼び出すことによってマネージャによって解析および保存されます。引数はレシピの配列表現です。
  3. ファイルの内容は、関数make()を使用して作成および保存されます。この段階ではファイルはディスク上に作成されません。
  4. 実際にファイルを作成するには、メソッドwrite_files($ targetdirectory)を呼び出します。別の方法として、 get_files_content()を使用してファイルのコンテンツにアクセスすることもできます(この方法は、プラグイン用のPHPUnitテストケースを作成するときに使用されます)。

マネージャは$ targetディレクトリに対して検証を行いません(存在する場合、書き込み可能な場合など)。

各ファイルの内容は、 口ひげを使用してテンプレートから生成されます。口ひげのテンプレートはskel /ディレクトリにあります。 Mustacheエンジンを使用してファイルを生成するのは、classes / local / skelにあるスケルトンクラスです。スケルトンクラスの各インスタンスは、1つのテンプレートから1つのファイルを生成します。ファイルを生成するテンプレートとテンプレートのレシピデータは、スケルトンクラスがマネージャ関数prepare_file_skeleton()内でインスタンス化されるときに指定されます。

では、関数make()が呼び出されたときに何が起こるのかを詳しく見てみましょう。

  • 関数prepare_files_skeletons()が呼び出されます。この関数はすべてのファイルの内容を作成し、それをファイルクラス属性に保存します。 ファイル内の1つのエントリは、ファイル名とそのファイルの生成を担当するスケルトンクラスのインスタンスで構成されています。
  • prepare_files_skeletons()関数内では、レシピ・オプションに基づいて関数prepare_file_skeleton()を呼び出すことによって、ファイルが生成のためにキューに入れられます。与えられたファイルが生成されるべきかどうかをチェックするために2つの異なる関数があります: has_common_feature()はすべてのプラグインタイプに共通の機能を扱います、そしてhas_component_features()はコンポーネント特有の機能が存在するかどうかをチェックします。
  • すべてのファイルがファイルリストに追加されると、スケルトンクラスのメソッドrender()が各スケルトンクラスに対して呼び出され、それによって各ファイルのコンテンツが生成されます。

新機能を追加する

新しい機能を追加するには、まずタイプ機能を決定する必要があります。それが共通の機能である場合(すべてのプラグインに適用される)、またはコンポーネント固有の機能である場合(特定のプラグインタイプにのみ適用される)です。詳しくはレシピのフォーマットをご覧ください。

これが決まったら、次のステップが必要です。

  1. 機能用のMoustacheテンプレート(またはそれ以上)を作成します。機能がコンポーネント機能である場合、テンプレートはskel / file / <componenttype> /ディレクトリに入ります 。ここで、 componenttypeプラグインタイプです。それ以外の場合は、skel / file /ディレクトリにあります。
  2. テンプレートをレンダリングするための新しいスケルトンクラスを選択または作成します。新しいスケルトンクラスを作成する場合は、以下の3つのスケルトンクラスのいずれかを拡張してください。php_internal_file (Moodleの内部にあり、Webページからアクセスできないファイルの場合、式を定義します( 'MOODLE_INTERNAL')|| die() php_web_file (これらはWebインターフェイスから使用するためのもので、config.phpファイルが含まれています)、 php_cli_file (これらはコマンドラインスクリプトで、定数「CLI_SCRIPT」をtrueに定義します)またはtxt_fileファイルの先頭にあります)これはLICENSE.mdやREADME.mdファイルのような一般的なテキストファイルです。
  3. マネージャー関数prepare_plugin_skeleton()にコードを追加して、ファイルが生成用にキューに入れられていることを確認します。機能のタイプに基づいて、機能がレシピに存在する場合、関数has_component_feature()またはhas_common_feature()のいずれかがtrueを返す必要があります。
  4. (省略可能、ただし強く推奨されています)新しい機能用のPHPUnitテストをtests /ディレクトリに作成します。既存のテストの1つをテンプレートとして使用できます。
  5. 新しい機能をWebインターフェイスに表示するには、次の手順を実行します。
    1. この機能は、静的関数の1つ(両方ではなく)に追加する必要があります。manager-> get_component_variables($ component)またはmanager-> get_features_variables()です。すでに存在しているコードに基づいて、それがどのように行われているかは自明です。
    2. ファイルlang / en / tool_pluginskel.phpに新しい機能の言語文字列を作成します。少なくとも機能は2つの文字列を必要とするでしょう:機能のための人間が読める名前とその機能のためのヘルプメッセージ。それがすでにそこに存在する文字列からそれを行う方法については明らかなはずです。
  6. それで全部です。

これはプラグインに機能を追加する方法の例です。

まず、機能の種類と名前を決めます。新しい共通機能 "myfeature:"を追加します。これはレシピの機能セクションにあります(つまり、ファイルの作成を切り替えることができます)。有効にすると、ファイルmyfeature.phpがディレクトリに生成されます。 mydirectory /

簡単なレシピは次のようになります。

コンポーネント:local_test

##人間が読める形式のプラグイン名。
name:サンプルプラグイン

##人間が読めるリリース番号
リリース: "0.1.0"

##プラグインのバージョン番号、例えば2016062100。空のままにすると現在の日付に設定されます。
バージョン:2016121200

##必須のMoodleバージョン、例えば2015051100または "2.9"。
必要条件: "2.9"

##プラグインの成熟度可能なオプションはMATURIY_ALPHA、MATURITY_BETA、
## MATURITY_RCまたはMATURIY_STABLE。
成熟度:MATURITY_BETA

##生成されたファイルとクラスの著作権者。
copyright:2016 Alexandru Elisei <alexandru.elisei@gmail.com>、DavidMudrák<david@moodle.com>

特徴:
    私の性格:真

次に、テンプレートファイルをskel / file / myfeature.mustacheに作成します。このファイルの生成にはスケルトンクラスphp_internal_fileを使用しますが、他の基本クラスを自由に使用したり、独自のクラスを作成したりすることもできます。

ファイルが正しく生成されるように、マネージャクラスを変更します。

  • 機能がレシピファイルで指定されている場合、関数has_common_feature()がtrueを返すようにします。機能がtrueに設定されており、それはレシピの機能セクションに存在する場合、デフォルトでは、この関数はtrueを返します。これが私たちの場合なので、 has_common_feature()を修正する必要はありません。
  • 次に、 prepare_files_skeletons()関数内でファイルを生成用にキューに入れます。
 保護された 関数 prepare_files_skeletons   {
    ...
    if  $ this - > has_common_feature  'myfeature'  )) {
        $ this - > prepare_file_skeleton  'mydirectory / myfeature.php'  'php_internal_file'  'myfeature'  ;
    }
    ...
} 
  • (オプションですが、強くお勧めします)PHPUnitテストファイルtests / myfeature_test.phpを作成します。例として既存のテストファイルの1つを使うことができます(readme_test.phpは最も簡単なものの1つです)。
  • 今度は私達が私達がWebインターフェイスのこの機能にアクセスできることを確かめなければならない。そのために関数get_features_variables()を修正します。
 公開静的関数 get_features_variables   {

    $ featuresvars = array   ;

    $ featuresvars [ ] = array  'name' => 'myfeature'  'type' => 'boolean'  ;
    ...
} 

つまり、フォームデータからレシピを作成するときに、このオプションの値はブール値に変換されます。

  • 最後のステップは、新しい変数に言語文字列を追加することです。以下をlang / en / tool_pluginskel.phpファイルに追加します。
 //レシピの機能は 'features'の下にあるため、機能の名前は 'features_myfeature'です。
$ string [ 'features_myfeature' ] = 'Webフォーム上の機能の名前' ;
$ string [ 'features_myfeature_help' ] = 'myfeatureのヘルプメッセージ' ;
' ; $ string [ ' features_myfeature_link ' ] = '機能に関する追加リソースへのリンク ' ; 
  • それで、終わりです。