下記のように一時的にプログラムを修正して原因を探られてはいかがでしょうか。
修正対象プログラム:
admin/tool/uploaduser/index.php
修正箇所:
924行目
[ 修正前 ]
} else {
$upt->track('enrolments', get_string('unknownrole', 'error', s($sysrolename)), 'error');
continue;
}
[ 修正後 ]
} else {
$upt->track('enrolments', get_string('unknownrole', 'error', s($sysrolename)), 'error');
echo __LINE__;
echo '<pre>';
print_r($sysrolecache);
echo '</pre>';
continue;
}
----------------------------
修正箇所:
987行目
[ 修正前 ]
} else {
$upt->track('enrolments', get_string('unknownrole', 'error', s($rolename)), 'error');
continue;
}
[ 修正後 ]
$upt->track('enrolments', get_string('unknownrole', 'error', s($rolename)), 'error');
echo __LINE__;
echo '<pre>';
print_r($rolecache);
echo '</pre>';
continue;
----------------------------
修正箇所:
1008行目
[ 修正前 ]
} else {
$upt->track('enrolments', get_string('unknownrole', 'error', s($rolename)), 'error');
continue;
}
[ 修正後 ]
} else {
$upt->track('enrolments', get_string('unknownrole', 'error', s($rolename)), 'error');
echo __LINE__;
echo '<pre>';
print_r($rolecache);
echo '</pre>';
continue;
}
御礼が遅くなりまして、申し訳ございません。
ロール名フィールドに「sysrole」は使っておりませんでしたので、
ご教示いただきましたプログラムをエンジニアに見てもらいました。
結果、マネージャー権限の時は、コースのユーザコンテキスト?がとれていないようです。
(前回は気づかなかったのですが、プレビュー画面の「ロール」部分のプルダウンが空です。)
ロールのアサイン部分などに不備があるのではないか…とのことですが、
ケイパビリティなどを確認する限り、システムロールでも「ユーザにロールを割り当てる moodle/role:assign」あたりは、やはり「許可」になっていますし、コースでも「継承」になっています;
権限の設定不足による問題な気はするのですが…
何度も申し訳ございませんが、チェックすべき箇所にお心あたりがありましたら
お教えいただけますと幸いです。。
下記2つのMoodleをクリーンインストールして確認させて頂きましたが、「ロール」セクションは表示されないようです。
- Moodle 3.1.4 (Build: 20170109)
- Moodle 3.1.8 (Build: 20170911)
過去のMoodle 3.1.xシリーズは下記より入手可能です。
[Index of /stable31]
https://download.moodle.org/stable31/
お世話になっております。
インストール&初期設定を担当した者にも確認しましたが、
やはりプレビュー画面に「ロール」セクションを表示させる為に、
特別な設定は行っていないとのことでした…;(開発環境のVer3.1.4でも表示されておりました。何故……)
開発環境のマネージャー権限でアップロードを試したところ、無事にコースに「student」として登録出来たので、
開発(3.1.4)と本番(3.1.8)で異なるところを追ってみました。
・アップロードに関するソースは変更なし
・ケイパビリティーやロールの設定も(ユーザ登録に関係しそうなところは)同じ
・本番でも、マネージャー権限→管理者権限に変更すると、アップロードできる
先日ご教示いただいたプログラム等により、原因がロール・アサイン関連にあることは確実だったので
アップロード時の判定から、
一点、思い当たるところとして
ユーザのデフォルトホームページ
defaulthomepage が、遷移の変更により
開発では「ユーザプリファレンス」
本番では「サイト」
と変更になったことが原因ではないかと推察しました。
本番環境では /admin/roles/permissions.php?contextid=XXX にアクセスしたところ
「ベースロールのケイパビリティをオーバーライドできません。」と弾かれた為
無理矢理 /admin/tool/uproaduser/locallib.phpの
uu_allowed_roles() 及び uu_allowed_roles_cache() 内で、get_assignable_roles()する際に渡すcontextを
context_course::instance(SITEID)からcontext_systeminstance()へ変更したところ、
現設定でも、無事アップロード出来るようになりました。
まさかフロントページのロールが絡んでいるとは思わず、
判明までにだいぶ時間がかかりました。。 大変お騒がせいたしました!