ai/amd/src/policy.js

  1. // This file is part of Moodle - http://moodle.org/
  2. //
  3. // Moodle is free software: you can redistribute it and/or modify
  4. // it under the terms of the GNU General Public License as published by
  5. // the Free Software Foundation, either version 3 of the License, or
  6. // (at your option) any later version.
  7. //
  8. // Moodle is distributed in the hope that it will be useful,
  9. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. // GNU General Public License for more details.
  12. //
  13. // You should have received a copy of the GNU General Public License
  14. // along with Moodle. If not, see <http://www.gnu.org/licenses/>.
  15. import {getPolicyStatus, setPolicyStatus} from "./repository";
  16. /**
  17. * The Javascript module to handle the policy acceptance.
  18. *
  19. * @module core_ai/policy
  20. * @copyright 2024 Andrew Lyons <andrew@nicols.co.uk>
  21. * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  22. */
  23. export default class {
  24. static #policyAcceptedFor = {};
  25. static preconfigurePolicyState(userid, state) {
  26. if (!this.#policyAcceptedFor.hasOwnProperty(userid)) {
  27. this.#policyAcceptedFor[userid] = state;
  28. }
  29. }
  30. /**
  31. * Get the policy status for a user.
  32. *
  33. * @param {Number} userid The user ID.
  34. * @return {Promise<Object>} The policy status.
  35. */
  36. static async getPolicyStatus(userid) {
  37. if (this.#policyAcceptedFor[userid]) {
  38. return this.#policyAcceptedFor[userid];
  39. }
  40. const accepted = await getPolicyStatus(userid);
  41. this.#policyAcceptedFor[userid] = accepted.status;
  42. return accepted.status;
  43. }
  44. static acceptPolicy() {
  45. this.#policyAcceptedFor[M.cfg.userId] = true;
  46. return setPolicyStatus(M.cfg.contextid);
  47. }
  48. }