19 declare(strict_types=1);
42 protected \ilDBInterface
$db;
54 return [self::TABLE_NAME, self::TABLE_NAME_REL];
60 $stakeholder_id = $s->getId();
61 $stakeholder_class_name = $s->getFullyQualifiedClassName();
63 if (strlen($stakeholder_id) > 64) {
64 throw new \InvalidArgumentException(
'stakeholder ids MUST be shorter or equal to than 64 characters');
66 if (strlen($stakeholder_class_name) > 250) {
67 throw new \InvalidArgumentException(
68 'stakeholder classnames MUST be shorter or equal to than 250 characters' 72 $r = $this->db->queryF(
73 "SELECT " . self::IDENTIFICATION .
" FROM " . self::TABLE_NAME .
" WHERE " . self::IDENTIFICATION .
" = %s AND stakeholder_id = %s",
75 [$identification, $stakeholder_id]
78 if (
$r->numRows() === 0) {
83 self::IDENTIFICATION => [
'text', $identification],
84 'stakeholder_id' => [
'text', $stakeholder_id],
89 $r = $this->db->queryF(
90 "SELECT id FROM " . self::TABLE_NAME_REL .
" WHERE id = %s",
94 if (
$r->numRows() === 0) {
98 'id' => [
'text', $stakeholder_id],
99 'class_name' => [
'text', $stakeholder_class_name],
104 $this->cache[$identification][$stakeholder_id] = $s;
111 $this->db->manipulateF(
112 "DELETE FROM " . self::TABLE_NAME .
" WHERE " . self::IDENTIFICATION .
" = %s AND stakeholder_id = %s",
127 if (isset($this->cache[$rid]) && is_array($this->cache[$rid])) {
128 return $this->cache[$rid];
131 $r = $this->db->queryF(
132 "SELECT class_name, stakeholder_id FROM " . self::TABLE_NAME .
" 133 JOIN " . self::TABLE_NAME_REL .
" ON stakeholder_id = id 134 WHERE " . self::IDENTIFICATION .
" = %s",
138 while (
$d = $this->db->fetchAssoc(
$r)) {
142 return $this->cache[$rid] ?? [];
145 public function preload(array $identification_strings): void
147 $r = $this->db->query(
148 "SELECT rid, class_name, stakeholder_id FROM " . self::TABLE_NAME
149 .
" JOIN " . self::TABLE_NAME_REL .
" ON stakeholder_id = id 150 WHERE " . $this->db->in(
151 self::IDENTIFICATION,
152 $identification_strings,
157 while (
$d = $this->db->fetchAssoc(
$r)) {
165 $class_name = $data[
'class_name'];
167 if (class_exists($class_name)) {
168 $stakeholder =
new $class_name();
169 $stakeholders[] = $stakeholder;
170 $this->cache[$data[
'rid']][$data[
'stakeholder_id']] = $stakeholder;
Interface StakeholderDBRepository.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
__construct(\ilDBInterface $db)
populateFromArray(array $data)
getStakeholders(ResourceIdentification $i)
Interface StakeholderRepository.
Class ResourceIdentification.
deregister(ResourceIdentification $i, ResourceStakeholder $s)
preload(array $identification_strings)
Interface ResourceStakeholder.