Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: LTI Deep Linking 2.0 #980

Merged
merged 25 commits into from
Sep 14, 2023
Merged

feat: LTI Deep Linking 2.0 #980

merged 25 commits into from
Sep 14, 2023

Conversation

kou029w
Copy link

@kou029w kou029w commented Jul 18, 2023

resolved #4

kou029w and others added 10 commits July 12, 2023 16:07
Deep Linking Responce JWT 取得 API を実装しました。

GET /api/v2/lti/deep_linking?book_id={bookId}

また、セッションにLtiTargetLinkUriを紐付けるなどの変更を行いました。
Deep Linking 設定用のルーティングを追加しました。

使い方

```diff
--- a/pages/books/index.tsx
+++ b/pages/books/index.tsx
@@ -1,3 +1,4 @@
+import Link from "next/link";
 import { useRouter } from "next/router";
 import type { ContentSchema } from "$server/models/content";
 import type { BookSchema } from "$server/models/book";
@@ -83,6 +84,9 @@ function Index() {

   return (
     <>
+      <Link href={pagesPath.book.linking.$url({ query: { bookId: 1 } })}>
+        demo
+      </Link>
       <Books linkedBook={linkedBook} {...handlers} />
       {previewContent?.type === "book" && (
         <BookPreviewDialog {...dialogProps} book={previewContent}>
```
feat: Deep Linking でのブック提供
@kou029w kou029w requested a review from ties-makimura July 18, 2023 01:07
@kou029w
Copy link
Author

kou029w commented Jul 18, 2023

@ties-makimura
LTI Deep Linking 2.0 対応の件について、こちらのブランチ lti-deep-link に集約しております
本PRにて確認・フィードバックもらえればと思います

@ties-makimura ties-makimura temporarily deployed to chibichilo July 18, 2023 04:14 Inactive
@ties-makimura
Copy link

気になった点

  • 複製すると,ツールURLも複製されるので,教師が一度も複製された外部ツールを開かない状態で学生が利用し始めることが想定される.その場合,学生がアクセスすると,lti_resoource_linkのcreator_idが学生になっているようだが,その辺り支障はないか?

メモ

  • Moodleのコース上にある外部ツール見ても,DeepLink経由とそうでない場合の区別がぱっと見ただけではつかない
    • なにか良い方法あるか
      • MoodleのLTIモジュールでツールURLに値があるか判定してなにかする?
      • CHiBi-CHiLOの学習分析見て,DeepLink経由判定してなにかする?
  • リンクの種別のモデリング #960リンク種別に応じたショートカットの実装 #961 辺りの実装なども終わってから,他のスタッフにはチェック依頼した方がよさそう

@kou029w
Copy link
Author

kou029w commented Jul 18, 2023

  • lti_resoource_linkのcreator_idが学生に

なるほど、たしかにそうなっていますね。シェアされていないトピックの見える範囲・扱いが変わりますね。

@kou029w
Copy link
Author

kou029w commented Jul 18, 2023

作成者を紐付ける部分に関しては十分に検討できていませんでした。DL作成者を表明するようなアクセストークンをURLやカスタムパラメータとして含め、それをもとに紐付けるなどの対処が考えられるかも。

@kou029w
Copy link
Author

kou029w commented Jul 18, 2023

  • 複製すると,ツールURLも複製されるので,教師が一度も複製された外部ツールを開かない状態で学生が利用し始めることが想定される.その場合,学生がアクセスすると,lti_resoource_linkのcreator_idが学生になっているようだが,その辺り支障はないか?

本件では、まず最初にアクセスした教員または管理者がcreator_idになるように変更。
creator_id を複数にする、あるいは creator_id を廃止し LTI Assignment and Grade Services Specification 2.0 によって教員を取得して連携するなど考えられるが、別途 #982 にて対応とします。

kou029w and others added 3 commits July 18, 2023 19:29
学生など、初回アクセスした教員・管理者以外の利用者が、意図せずltiResourceLink.creatorId として紐付けられる問題がありました。その問題を修正します。(教員・管理者が1度もアクセスしていないリンクにはアクセスできません。少なくとも1度、教員・管理者がアクセスする必要があります。)
fix: 最初にアクセスした教員または管理者をltiResourceLink.creatorとして紐付けられるように変更
@kou029w
Copy link
Author

kou029w commented Jul 19, 2023

@ties-makimura
PR #983 にて、コメントにあるような、最初にアクセスした教員または管理者がcreator_idに紐付けられるように変更しました。(教員・管理者が1度もアクセスしていないリンクには学習者はアクセスできません。少なくとも1度、教員・管理者がアクセスする必要があります。)

DL選択後、教員・管理者が一度もアクセスしていないとき、学生がアクセスした場合、下図スクリーンショットのようになります:

Screenshot from 2023-07-18 19-29-15

教員・管理者が少なくとも一度アクセスした場合、下図のようになります:

image

本PR/ブランチ lti-deep-link にも反映済みです。確認・フィードバックもらえればと思います。

feat:UI: Deep Linking でのリンクの選択画面でのいくつかの操作の廃止
@ties-makimura ties-makimura temporarily deployed to chibichilo July 19, 2023 23:56 Inactive
YouheiNozaki and others added 3 commits August 2, 2023 00:39
fix:Deep Linking でのリンクの選択画面のレイアウトの改善
Tool URL (target_link_uri) が設定されている場合、リンクの変更を禁止
@kou029w
Copy link
Author

kou029w commented Aug 2, 2023

@ties-makimura
PR #984, #989, #992 の変更も本ブランチ (lti-deep-link) に集約しました。

@kou029w kou029w marked this pull request as ready for review August 3, 2023 10:13
@ties-makimura ties-makimura temporarily deployed to chibichilo September 8, 2023 00:51 Inactive
@ties-makimura
Copy link

#992 部分について改めて確認

  • リンクの変更を禁止するのは,リンクで変更した場合 Tool URL が更新されないからが理由で正しいか.
  • リンクの変更を禁止にしない場合,システムにどのような影響があるのか?
    • Tool URLがあればそちらが優先されるので,あまり影響はなかったりする?
  • Tool URL が更新されない場合の理由が正しいとして,非表示ではなく以下のような対応にできるか(消えると混乱する)
    • 非アクティブにする
    • 一見アクティブだが,クリックしてトグルが切り替えようとしたら,変更できないメッセージを出してトグルを戻す

@kou029w
Copy link
Author

kou029w commented Sep 8, 2023

リンクの変更を禁止するのは,リンクで変更した場合 Tool URL が更新されないからが理由で正しいか.

はい。DL以外でのCC側からのTool URLを更新する手段がないためです。

リンクの変更を禁止にしない場合,システムにどのような影響があるのか?

LMS側にその変更操作の影響が及びません。Tool URLが変更されない以上、あまり意味のない操作になります。

Tool URL が更新されない場合の理由が正しいとして,非表示ではなく以下のような対応にできるか(消えると混乱する)

なるほど、たしかに混乱減らす工夫は必要だったのかもしれませんね。
対応可能かどうかはすみませんが来週打ち合わせで回答でもよいでしょうか?

@ties-makimura
Copy link

ties-makimura commented Sep 8, 2023

NEXT_PUBLIC_NO_EMBED=true の場合,以下のようにコンテンツを選択する場合も新しいウィンドウで表示するが出てしまい,その後,新しいウィンドウでコンテンツを選択してもTool URLに値が入りません.

以下どちらかの対応が必要かと思いました.

  • 新しいウィンドウで表示した場合でもTool URLに値が入るようにする
  • コンテンツを選択する場合は,NEXT_PUBLIC_NO_EMBED=trueでも新しいウィンドウで開く表示は行わずそのまま埋め込み表示させる

image

@kou029w kou029w mentioned this pull request Sep 8, 2023
10 tasks
@kou029w
Copy link
Author

kou029w commented Sep 8, 2023

確証無いのでご参考までに:

新しいウィンドウで表示した場合でもTool URLに値が入るようにする

これはiframeが生成されてpostMessageによってMoodleと通信する以上、原理的に実現困難な可能性はあります。

コンテンツを選択する場合は,NEXT_PUBLIC_NO_EMBED=trueでも新しいウィンドウで開く表示は行わずそのまま埋め込み表示させる

このIssueの懸念があるかと思われます (一部機能が制限されるかもしれません。ただし通常の視聴とは異なるので制限が問題ないか、制限あったとして重大でない可能性はあります。)

@YouheiNozaki
Copy link

YouheiNozaki commented Sep 10, 2023

@ties-makimura @kou029w

NEXT_PUBLIC_NO_EMBED=true の場合,以下のようにコンテンツを選択する場合も新しいウィンドウで表示するが出てしまい,その後,新しいウィンドウでコンテンツを選択してもTool URLに値が入りません.

こちらの件ですが、アプリケーション側で表示を制御することは可能そうでした。
DeepLInkの設定の場合、NEXT_PUBLIC_NO_EMBEDの設定を無視するような仕様であれば、実装可能かと思われます。
以下の方針での修正ですね。

コンテンツを選択する場合は,NEXT_PUBLIC_NO_EMBED=trueでも新しいウィンドウで開く表示は行わずそのまま埋め込み表示させる

この仕様で、一旦コミットさせていただきました。ご確認よろしくお願い致します🙏
d81bdf5

そのほかには、自分はNEXT_PUBLIC_NO_EMBEDの実装経緯をあまり理解していないのですが、
埋め込み許可をしないのであれば、DeepLinkの埋め込みも許可しないという方針も考えられるかと思いました。

つまり、「ディープリンク」かつ「NEXT_PUBLIC_NO_EMBED=true」という設定の場合、「ディープリンクを有効にする場合、埋め込みを許可してください」のようなメッセージを表示するパターンです。

@ties-makimura ties-makimura temporarily deployed to chibichilo September 11, 2023 02:56 Inactive
@ties-makimura
Copy link

コンテンツを選択する場合は,NEXT_PUBLIC_NO_EMBED=trueでも新しいウィンドウで開く表示は行わずそのまま埋め込み表示させる

この仕様で、一旦コミットさせていただきました。ご確認よろしくお願い致します

コンテンツを選択する場合は埋め込みで表示され、教材を開くときは新しいウィンドウで開く表示が出るのを確認できました。想定通りの動作できています。

@ties-mitsuhashi
Copy link

通常の配信画面では,ブックを配信すると以下のように配信ボタンが青くなりますが,
image
Moodleの外部ツールで,一度「コンテンツを選択する」でブックを配信したあと,再度「コンテンツを選択する」を開いたとき,既に配信したブックの配信ボタンが,通常の配信画面同様青くならないのでしょうか.

@kou029w
Copy link
Author

kou029w commented Sep 12, 2023

Moodleの外部ツールで,一度「コンテンツを選択する」でブックを配信したあと,再度「コンテンツを選択する」を開いたとき,既に配信したブックの配信ボタンが,通常の配信画面同様青くならないのでしょうか.

はい。現状ブックのリンクの切り替えボタンはDLの選択画面では青くなりません。
DLコンテンツ選択画面においてはCC側がリンクされているブックを知る手段がないためです。

DL2.0仕様の実際の例にも https://purl.imsglobal.org/spec/lti/claim/target_link_uri クレーム (ツールURLを意味するプロパティ) は登場せず、仕様の上でも想定されていないように思われます。(ただ確証は無いのでご参考までに。)

{
  "iss": "https://platform.example.org",
  "sub": "a6d5c443-1f51-4783-ba1a-7686ffe3b54a",
  "aud": ["962fa4d8-bcbf-49a0-94b2-2de05ad274af"],
  "exp": 1510185728,
  "iat": 1510185228,
  "azp": "962fa4d8-bcbf-49a0-94b2-2de05ad274af",
  "nonce": "fc5fdc6d-5dd6-47f4-b2c9-5d1216e9b771",
  "name": "Ms Jane Marie Doe",
  "given_name": "Jane",
  "family_name": "Doe",
  "middle_name": "Marie",
  "picture": "https://example.org/jane.jpg",
  "email": "[email protected]",
  "locale": "en-US",
  "https://purl.imsglobal.org/spec/lti/claim/deployment_id":
    "07940580-b309-415e-a37c-914d387c1150",
  "https://purl.imsglobal.org/spec/lti/claim/message_type": "LtiDeepLinkingRequest",
  "https://purl.imsglobal.org/spec/lti/claim/version": "1.3.0",
  "https://purl.imsglobal.org/spec/lti/claim/roles": [
    "http://purl.imsglobal.org/vocab/lis/v2/membership#Instructor",
    "http://purl.imsglobal.org/vocab/lis/v2/institution/person#Faculty"
  ],
  "https://purl.imsglobal.org/spec/lti/claim/context": {
    "id": "c1d887f0-a1a3-4bca-ae25-c375edcc131a",
    "label": "ECON 101",
    "title": "Economics as a Social Science",
    "type": ["CourseOffering"]
  },
  "https://purl.imsglobal.org/spec/lti/claim/tool_platform": {
    "contact_email": "[email protected]",
    "description": "An Example Tool Platform",
    "name": "Example Tool Platform",
    "url": "https://example.org",
    "product_family_code": "example.org",
    "version": "1.0"
  },
  "https://purl.imsglobal.org/spec/lti/claim/launch_presentation": {
    "document_target": "iframe",
    "height": 320,
    "width": 240
  },
  "https://purl.imsglobal.org/spec/lti/claim/custom": {
    "myCustom": "123"
  },
  "https://purl.imsglobal.org/spec/lti-dl/claim/deep_linking_settings": {
    "deep_link_return_url": "https://platform.example/deep_links",
    "accept_types": ["link", "file", "html", "ltiResourceLink", "image"],
    "accept_media_types": "image/:::asterisk:::,text/html",
    "accept_presentation_document_targets": ["iframe", "window", "embed"],
    "accept_multiple": true,
    "auto_create": true,
    "title": "This is the default title",
    "text": "This is the default text",
    "data": "csrftoken:c7fbba78-7b75-46e3-9201-11e6d5f36f53"
  }
}

https://www.imsglobal.org/spec/lti-dl/v2p0#deep-linking-request-example より引用

@kou029w
Copy link
Author

kou029w commented Sep 12, 2023

  • 非アクティブにする

こちらを対応してみました。本PRに含めます。ご確認のほどお願いします。


Screencast.from.2023.09.12.15.16.30.webm

文言:

  • 切り替え可能: "リンクを切り替える"
  • 切り替え不可能: "ツールURLが指定されているため、リンクの切り替えはできません"

@ties-makimura ties-makimura temporarily deployed to chibichilo September 12, 2023 08:00 Inactive
@kou029w
Copy link
Author

kou029w commented Sep 12, 2023

フィードバック (本PRでは対応しない)

  • カスタムパラメータ の部分の値は使えるか
    • → 不明 (要調査)
  • DL選択画面から、ブックの作成までの動線が遠い

@ties-makimura
Copy link

非アクティブにする
こちらを対応してみました。本PRに含めます。ご確認のほどお願いします。

ありがとうございます.ブック一覧の所はこちらの内容で問題ありません.

以下の配信設定箇所についても同様の対応は可能でしょうか.(キャプチャは別ブランチで行っています)

  • ブック作成画面の配信
    image
  • ブック編集画面の配信
    image
  • ただし,ブック編集画面については,feat-version-managementブランチで以下のようにしているので,忘れない用気を付ける必要があるかと思います.
    image

@kou029w
Copy link
Author

kou029w commented Sep 13, 2023

以下の配信設定箇所についても同様の対応は可能でしょうか.(キャプチャは別ブランチで行っています)

申し訳ないですが画面・目的が異なることもあり、少なくともすぐに対応可能ではありません。feat-version-managementブランチとの競合を避けたいところで、別途対応とし本PRには含めないほうがよいのではないでしょうか。

@ties-makimura
Copy link

以下の配信設定箇所についても同様の対応は可能でしょうか.(キャプチャは別ブランチで行っています)

申し訳ないですが画面・目的が異なることもあり、少なくともすぐに対応可能ではありません。feat-version-managementブランチとの競合を避けたいところで、別途対応とし本PRには含めないほうがよいのではないでしょうか。

競合を避けるのは賛成です.
「コースへ配信」のチェックボックスを非表示にしている今の対応は競合の影響受けないのでしょうか?

@ties-makimura
Copy link

「コースへ配信」のチェックボックスを非表示にしている今の対応は競合の影響受けないのでしょうか?

今の段階でも競合するので気を付けておく

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

LTI Deep Linking 対応
4 participants