. /** * * @package local_treestudyplan * @copyright 2023 P.M. Kuipers * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ namespace local_treestudyplan; defined('MOODLE_INTERNAL') || die(); require_once($CFG->libdir.'/externallib.php'); class studyitemconnection { const TABLE = "local_treestudyplan_connect"; private $r; private $id; protected function __construct($r) { $this->r = $r; $this->id = $r->id; } public static function structure($value=VALUE_REQUIRED) { return new \external_single_structure([ 'id' => new \external_value(PARAM_INT, 'id of connection'), 'from_id' => new \external_value(PARAM_INT, 'id of start item'), 'to_id' => new \external_value(PARAM_INT, 'id of end item'), ], '', $value); } public function model() { return ['id' => $this->r->id, 'from_id' => $this->r->from_id, 'to_id' => $this->r->to_id]; } public function from_item() { return studyitem::findById($this->r->from_id); } public function to_item() { return studyitem::findById($this->r->to_id); } public function from_id() { return $this->r->from_id; } public function to_id() { return $this->r->to_id; } public static function find_outgoing($itemid) { global $DB; $list = []; $connout = $DB->get_records(self::TABLE, ['from_id' => $itemid]); foreach ($connout as $c) { $list[] = new self($c); } return $list; } public static function find_incoming($itemid) { global $DB; $list = []; $connin = $DB->get_records(self::TABLE, ['to_id' => $itemid]); foreach ($connin as $c) { $list[] = new self($c); } return $list; } public static function connect($fromid, $toid) { global $DB; //check if link already exists. if (!$DB->record_exists(self::TABLE, ['from_id' => $fromid, 'to_id' => $toid])) { $id = $DB->insert_record(self::TABLE, [ 'from_id' => $fromid, 'to_id' => $toid, ]); return new self($DB->get_record(self::TABLE, ['id' => $id])); } else { return new self($DB->get_record(self::TABLE, ['from_id' => $fromid, 'to_id' => $toid])); } } public static function disconnect($fromid, $toid) { global $DB; if ($DB->record_exists(self::TABLE, ['from_id' => $fromid, 'to_id' => $toid])) { $DB->delete_records(self::TABLE, [ 'from_id' => $fromid, 'to_id' => $toid, ]); return success::success('Items Disconnected'); } else { return success::success('Connection does not exist'); } } public static function clear($id) { global $DB; $DB->delete_records(self::TABLE, ['from_id' => $id]); $DB->delete_records(self::TABLE, ['to_id' => $id]); } }