AutorÃa | Ultima modificación | Ver Log |
<?php// This file is part of Moodle - http://moodle.org///// Moodle is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.//// Moodle is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with Moodle. If not, see <http://www.gnu.org/licenses/>.namespace enrol_lti\local\ltiadvantage\service;use enrol_lti\local\ltiadvantage\entity\deployment;use enrol_lti\local\ltiadvantage\repository\application_registration_repository;use enrol_lti\local\ltiadvantage\repository\deployment_repository;use enrol_lti\local\ltiadvantage\repository\resource_link_repository;use enrol_lti\local\ltiadvantage\repository\context_repository;use enrol_lti\local\ltiadvantage\repository\user_repository;/*** Class tool_deployment_service.** @package enrol_lti* @copyright 2021 Jake Dallimore <jrhdallimore@gmail.com>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/class tool_deployment_service {/** @var application_registration_repository repository to work with application_registration instances. */private $appregistrationrepo;/** @var deployment_repository repository to work with deployment instances. */private $deploymentrepo;/** @var resource_link_repository repository to work with resource link instances. */private $resourcelinkrepo;/** @var context_repository repository to work with context instances. */private $contextrepo;/** @var user_repository repository to work with user instances. */private $userrepo;/*** The tool_deployment_service constructor.** @param application_registration_repository $appregistrationrepo an application_registration_repository instance.* @param deployment_repository $deploymentrepo a deployment_repository instance.* @param resource_link_repository $resourcelinkrepo a resource_link_repository instance.* @param context_repository $contextrepo a context_repository instance.* @param user_repository $userrepo a user_repository instance.*/public function __construct(application_registration_repository $appregistrationrepo,deployment_repository $deploymentrepo, resource_link_repository $resourcelinkrepo,context_repository $contextrepo, user_repository $userrepo) {$this->appregistrationrepo = $appregistrationrepo;$this->deploymentrepo = $deploymentrepo;$this->resourcelinkrepo = $resourcelinkrepo;$this->contextrepo = $contextrepo;$this->userrepo = $userrepo;}/*** Service handling the use case "As an admin I can add a tool deployment to a platform registration".** @param \stdClass $requestdto the required service data.* @return deployment the deployment instance which has been created.* @throws \coding_exception if the registration doesn't exist.*/public function add_tool_deployment(\stdClass $requestdto): deployment {// DTO contains: registration_id, deployment_id, deployment_name.['registration_id' => $registrationid,'deployment_id' => $deploymentid,'deployment_name' => $deploymentname] = (array) $requestdto;$registration = $this->appregistrationrepo->find($registrationid);if (is_null($registration)) {throw new \coding_exception("Cannot add deployment to non-existent application registration "."'$registrationid'");}$deployment = $registration->add_tool_deployment($deploymentname, $deploymentid);return $this->deploymentrepo->save($deployment);}/*** Service handling the use case "As an admin I can delete a tool deployment from a platform registration".** @param int $deploymentid the id of the deployment to remove.*/public function delete_tool_deployment(int $deploymentid): void {// Delete any resource links attached to this deployment.$this->resourcelinkrepo->delete_by_deployment($deploymentid);// Delete any context entries for the deployment.$this->contextrepo->delete_by_deployment($deploymentid);// Delete all enrolments for any users tied to this deployment.global $DB, $CFG;$sql = "SELECT lu.userid as ltiuserid, e.*FROM {enrol_lti_users} luJOIN {enrol_lti_tools} ltON (lt.id = lu.toolid)JOIN {enrol} eON (e.id = lt.enrolid)WHERE lu.ltideploymentid = :deploymentid";$instancesrs = $DB->get_recordset_sql($sql, ['deploymentid' => $deploymentid]);require_once($CFG->dirroot . '/enrol/lti/lib.php');$enrollti = new \enrol_lti_plugin();foreach ($instancesrs as $instance) {$userid = $instance->ltiuserid;$enrollti->unenrol_user($instance, $userid);}$instancesrs->close();// Delete any lti user enrolments.$this->userrepo->delete_by_deployment($deploymentid);// Delete the deployment itself.$this->deploymentrepo->delete($deploymentid);}}