19 declare(strict_types=1);
28 private const TABLE =
'prg_auto_membership';
49 public function getFor(
int $prg_obj_id): array
52 . self::FIELD_PRG_OBJ_ID .
',' 53 . self::FIELD_SOURCE_TYPE .
',' 54 . self::FIELD_SOURCE_ID .
',' 55 . self::FIELD_ENABLED .
',' 56 . self::FIELD_EDITOR_ID .
',' 57 . self::FIELD_LAST_EDITED .
',' 58 . self::FIELD_SEARCH_RECURSIVE
59 . PHP_EOL .
'FROM ' . self::TABLE
60 . PHP_EOL .
'WHERE ' . self::FIELD_PRG_OBJ_ID .
' = ' 61 . $this->db->quote($prg_obj_id,
'integer');
62 $res = $this->db->query($query);
64 while ($rec = $this->db->fetchAssoc(
$res)) {
66 (
int) $rec[self::FIELD_PRG_OBJ_ID],
67 $rec[self::FIELD_SOURCE_TYPE],
68 (
int) $rec[self::FIELD_SOURCE_ID],
69 (
bool) $rec[self::FIELD_ENABLED],
70 (
int) $rec[self::FIELD_EDITOR_ID],
72 (
bool) $rec[self::FIELD_SEARCH_RECURSIVE]
83 ?
int $last_edited_usr_id =
null,
85 bool $search_recursive =
false 87 if (is_null($last_edited_usr_id)) {
90 if (is_null($last_edited)) {
109 $ilAtomQuery = $this->db->buildAtomQuery();
110 $ilAtomQuery->addTableLock(self::TABLE);
112 $ilAtomQuery->addQueryCallable(
114 $query =
'DELETE FROM ' . self::TABLE
115 . PHP_EOL .
'WHERE prg_obj_id = ' . $ams->
getPrgObjId()
116 . PHP_EOL .
'AND ' . self::FIELD_SOURCE_TYPE .
' = ' . $this->db->quote($ams->
getSourceType(),
'string')
117 . PHP_EOL .
'AND ' . self::FIELD_SOURCE_ID .
' = ' . $ams->
getSourceId();
120 $now = $now->format(
'Y-m-d H:i:s');
124 self::FIELD_PRG_OBJ_ID => [
'integer', $ams->
getPrgObjId()],
126 self::FIELD_SOURCE_ID => [
'integer', $ams->
getSourceId()],
127 self::FIELD_ENABLED => [
'integer', $ams->
isEnabled()],
129 self::FIELD_LAST_EDITED => [
'timestamp', $now],
141 public function delete(
int $prg_obj_id,
string $source_type,
int $source_id):
void 143 $query =
'DELETE FROM ' . self::TABLE
144 . PHP_EOL .
'WHERE prg_obj_id = ' . $this->db->quote($prg_obj_id,
'integer')
145 . PHP_EOL .
'AND ' . self::FIELD_SOURCE_TYPE .
' = ' . $this->db->quote($source_type,
'string')
146 . PHP_EOL .
'AND ' . self::FIELD_SOURCE_ID .
' = ' . $this->db->quote($source_id,
'integer');
148 $this->db->manipulate($query);
156 $query =
'DELETE FROM ' . self::TABLE
157 . PHP_EOL .
'WHERE prg_obj_id = ' . $this->db->quote($prg_obj_id,
'integer');
158 $this->db->manipulate($query);
169 $q =
"SELECT path FROM tree WHERE child = " . $db->
quote($source_id,
"integer");
172 $path = explode(
".", $row[
"path"] ??
"");
174 $query =
'SELECT ' . self::FIELD_PRG_OBJ_ID . PHP_EOL
175 .
'FROM ' . self::TABLE .
' prgs' . PHP_EOL
176 .
'INNER JOIN object_reference oref ON ' . PHP_EOL
177 .
'prgs.' . self::FIELD_PRG_OBJ_ID .
' = oref.obj_id' . PHP_EOL
179 . self::FIELD_SOURCE_ID .
' = ' . $db->
quote($source_id,
'integer') . PHP_EOL
180 .
' OR (' . $db->
in(self::FIELD_SOURCE_ID,
$path,
false,
'integer') .
' AND search_recursive = 1)' . PHP_EOL
182 .
'AND ' . self::FIELD_ENABLED .
' = 1' . PHP_EOL
183 .
'AND ' . self::FIELD_SOURCE_TYPE .
' = ' . $db->
quote($source_type,
'text') . PHP_EOL
184 .
'AND oref.deleted IS NULL';
const FIELD_SEARCH_RECURSIVE
insert(string $table_name, array $values)
fetchAssoc(ilDBStatement $statement)
fetchAll(ilDBStatement $statement, int $fetch_mode=ilDBConstants::FETCHMODE_ASSOC)
create(int $prg_obj_id, string $source_type, int $source_id, bool $enabled, ?int $last_edited_usr_id=null, ?DateTimeImmutable $last_edited=null, bool $search_recursive=false)
quote($value, string $type)
static getProgrammesFor(string $source_type, int $source_id)
Get all programmes' obj_ids monitoring the given source.int[]
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
Persistence of "monitored" sources for automatic membership.
deleteFor(int $prg_obj_id)
Delete all auto-membership sources of a programme.
Class ilStudyProgrammeAutoMembershipSource.
query(string $query)
Run a (read-only) Query on the database.
in(string $field, array $values, bool $negate=false, string $type="")
__construct(ilDBInterface $db, int $current_usr_id)
manipulate(string $query)
Run a (write) Query on the database.
getFor(int $prg_obj_id)
Read auto-membership sources of programme.ilStudyProgrammeAutoMembershipSource[]
update(ilStudyProgrammeAutoMembershipSource $ams)
Update an auto-membership source.
Class ilStudyProgrammeAutoMembershipsDBRepository.