データベースモジュールのフィールドに、ログインしているユーザの「名」「姓」を自動的に割り当たい。

データベースモジュールのフィールドに、ログインしているユーザの「名」「姓」を自動的に割り当たい。

- Yuuichi Yamaguchi の投稿
返信数: 7
データベースモジュールのフィールドに、ログインしているユーザの「名」「姓」を自動的に割り当たいと考えております。

1.生徒ユーザがログインしてmoodleを利用しているので、生徒がわざわざ生徒の名姓をデータベースモジュールのエントリ追加画面で入力しなくても、自動的にそのエントリに生徒の「名」「姓」が保存されるフィールドがほしいです。このフィールドの作り方をどなたか教えていただけないでしょうか?

2.データベースモジュールに生徒がログインしますと、以下のタブが表示されます。
 一覧表示
 個別表示
 検索
 エントリを追加する
 の4つです。これを「個別表示」と「エントリを追加する」だけにすることは可能でしょうか?

もしわかる方いらっしゃいましたら、教えていただけると助かります。
Yuuichi Yamaguchi への返信

Re: データベースモジュールのフィールドに、ログインしているユーザの「名」「姓」を自動的に割り当たい。

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators
> 1.生徒ユーザがログインしてmoodleを利用しているので、生徒がわざわざ生徒の名姓をデータベースモジュールのエントリ追加画面で入力しなくても、 自動的にそのエントリに生徒の「名」「姓」が保存されるフィールドがほしいです。このフィールドの作り方をどなたか教えていただけないでしょうか?

  1. データベースの編集画面 > テンプレート > 「個別表示用テンプレート」または「一覧表示用テンプレート」にアクセスしてください。
  2. 「個別表示用テンプレート」「一覧表示用テンプレート」のユーザ氏名を表示したい場所に ##user## を設定してください。

> これを「個別表示」と「エントリを追加する」だけにすることは可能でしょうか?

可能ですが、プログラムを修正する必要があります。
「学生のロールの場合」 (if ($studentroles = get_roles_with_capability('moodle/legacy:student', CAP_ALLOW)) という条件を使って、 /mod/data/tabs.php を適切に修正すれば大丈夫だと思います。笑顔
Mitsuhiro Yoshida への返信

Re: データベースモジュールのフィールドに、ログインしているユーザの「名」「姓」を自動的に割り当たい。

- Yuuichi Yamaguchi の投稿
Yoshida様
ありがとうございます。
はい。たしかに##user##を設定すれば、
「個別表示用テンプレート」と
「一覧表示用テンプレート」に表示されることが確認できました。
しかし、私がやりたかったのは、
「エクスポート」の中の
「あなたがエクスポートしたいフィールドを選択してください:」
の中で、##user##の値を各エントリごとに出力するという事でした。私の前述した書き込みの表現が悪くて申し訳ございません。
このようなことは可能でしょうか?

プログラムの修正にも、挑戦してみようと思います。
Yuuichi Yamaguchi への返信

Re: データベースモジュールのフィールドに、ログインしているユーザの「名」「姓」を自動的に割り当たい。

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators
> このようなことは可能でしょうか?

可能ですが、プログラムの修正が必要です。
下記の修正をお試しください。ウインク

変更対象プログラム: mod/data/export.php
変更箇所: 75行目

[ 変更前 ]
$exportdata = array();

// populate the header in first row of export
foreach($fields as $key => $field) {
if(empty($formdata['field_'.$field->field->id])) {
// ignore values we aren't exporting
unset($fields[$key]);
} else {
$exportdata[0][] = $field->field->name;
}
}

$datarecords = get_records('data_records', 'dataid', $data->id);
ksort($datarecords);
$line = 1;
foreach($datarecords as $record) {
// get content indexed by fieldid
if( $content = get_records('data_content', 'recordid', $record->id, 'fieldid', 'fieldid, content, content1, content2, content3, content4') ) {
foreach($fields as $field) {
$contents = '';
if(isset($content[$field->field->id])) {
$contents = $field->export_text_value($content[$field->field->id]);
}
$exportdata[$line][] = $contents;
}
}
$line++;
}
$line--;

[ 変更後 ]
$exportdata = array();
$exportdata[0][] = 'user'; ← 追加

// populate the header in first row of export
foreach($fields as $key => $field) {
if(empty($formdata['field_'.$field->field->id])) {
// ignore values we aren't exporting
unset($fields[$key]);
} else {
$exportdata[0][] = $field->field->name;
}
}

$datarecords = get_records('data_records', 'dataid', $data->id);
ksort($datarecords);
$line = 1;
foreach($datarecords as $record) {
// get content indexed by fieldid
if( $content = get_records('data_content', 'recordid', $record->id, 'fieldid', 'fieldid, content, content1, content2, content3, content4') ) {
$exportdata[$line][] = fullname($USER); ← 追加
foreach($fields as $field) {
$contents = '';
if(isset($content[$field->field->id])) {
$contents = $field->export_text_value($content[$field->field->id]);
}
$exportdata[$line][] = $contents;
}
}
$line++;
}
$line--;




Mitsuhiro Yoshida への返信

Re: データベースモジュールのフィールドに、ログインしているユーザの「名」「姓」を自動的に割り当たい。

- Yuuichi Yamaguchi の投稿
Yoshida様
ありがとうございます。無事にエクスポートしたファイルにユーザの「名」「姓」が1列目に取ってくることができました。
Yuuichi Yamaguchi への返信

Re: データベースモジュールのフィールドに、ログインしているユーザの「名」「姓」を自動的に割り当たい。

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators
> ありがとうございます。無事にエクスポートしたファイルにユーザの「名」「姓」が1列目に取ってくることができました。

大変申し訳ございません。
データベースにデータを登録したユーザではなく、ログインユーザの「名」「姓」が取得されています。
修正しなおしたコードを後ほど投稿させて頂きます。


Yuuichi Yamaguchi への返信

Re: データベースモジュールのフィールドに、ログインしているユーザの「名」「姓」を自動的に割り当たい。

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators
大変失礼致しました。赤面

修正版を投稿させて頂きます。
青色の部分を追加してください。

変更対象プログラム: mod/data/export.php
変更箇所: 75行目

[ 変更前 ]
$exportdata = array();

// populate the header in first row of export
foreach($fields as $key => $field) {
if(empty($formdata['field_'.$field->field->id])) {
// ignore values we aren't exporting
unset($fields[$key]);
} else {
$exportdata[0][] = $field->field->name;
}
}

$datarecords = get_records('data_records', 'dataid', $data->id);
ksort($datarecords);
$line = 1;
foreach($datarecords as $record) {
// get content indexed by fieldid
if( $content = get_records('data_content', 'recordid', $record->id, 'fieldid', 'fieldid, content, content1, content2, content3, content4') ) {
foreach($fields as $field) {
$contents = '';
if(isset($content[$field->field->id])) {
$contents = $field->export_text_value($content[$field->field->id]);
}
$exportdata[$line][] = $contents;
}
}
$line++;
}
$line--;

[ 変更後 ]
$exportdata = array();

$exportdata[0][] = 'lastname';
$exportdata[0][] = 'firstname';

// populate the header in first row of export
foreach($fields as $key => $field) {
if(empty($formdata['field_'.$field->field->id])) {
// ignore values we aren't exporting
unset($fields[$key]);
} else {
$exportdata[0][] = $field->field->name;
}
}

$datarecords = get_records('data_records', 'dataid', $data->id);
ksort($datarecords);
$line = 1;
foreach($datarecords as $record) {
// get content indexed by fieldid
if( $content = get_records('data_content', 'recordid', $record->id, 'fieldid', 'fieldid, content, content1, content2, content3, content4') ) {
if ($data_record = get_record('data_records','id',$record->id)) {
$user = get_record('user', 'id', $data_record->userid);
$exportdata[$line][] =$user->lastname;
$exportdata[$line][] =$user->firstname;
} else {
$exportdata[$line][] =$USER->lastname;
$exportdata[$line][] =$USER->firstname;
}
foreach($fields as $field) {
$contents = '';
if(isset($content[$field->field->id])) {
$contents = $field->export_text_value($content[$field->field->id]);
}
$exportdata[$line][] = $contents;
}
}
$line++;
}
$line--;


Mitsuhiro Yoshida への返信

Re: データベースモジュールのフィールドに、ログインしているユーザの「名」「姓」を自動的に割り当たい。

- Yuuichi Yamaguchi の投稿
Yoshida様
ありがとうございます。無事に
firstnameとlastnameをExcel形式で吸い取ることができました。