21 protected int $id = 0;
85 $this->
http = $DIC->http();
87 $this->db = $DIC->database();
88 $this->
user = $DIC->user();
101 $query =
"SELECT * FROM il_dcl_table WHERE id = " . $this->db->quote($this->
getId(),
"integer");
102 $set = $this->db->query(
$query);
103 $rec = $this->db->fetchAssoc($set);
106 if (null !== $rec[
"title"]) {
113 if (null !== $rec[
"export_enabled"]) {
121 if (null !== $rec[
'description']) {
130 if (null !== $rec[
'table_order']) {
131 $this->
setOrder($rec[
'table_order']);
140 public function doDelete(
bool $delete_only_content =
false,
bool $omit_notification =
false): void
143 $record->doDelete($omit_notification);
160 if (!$delete_only_content) {
161 $query =
"DELETE FROM il_dcl_table WHERE id = " . $this->db->quote($this->
getId(),
"integer");
162 $this->db->manipulate(
$query);
166 public function doCreate(
bool $create_tablefield_setting =
true,
bool $create_standardview =
true): void
168 $id = $this->db->nextId(
"il_dcl_table");
170 $query =
"INSERT INTO il_dcl_table (" .
"id" .
", obj_id" .
", title" .
", add_perm" .
", edit_perm" .
", delete_perm" .
", edit_by_owner" 171 .
", limited" .
", limit_start" .
", limit_end" .
", is_visible" .
", export_enabled" .
", import_enabled" .
", default_sort_field_id" 172 .
", default_sort_field_order" .
", description" .
", public_comments" .
", view_own_records_perm" 173 .
", delete_by_owner, save_confirmation , table_order ) VALUES (" . $this->db->quote(
177 . $this->db->quote($this->
getObjId(),
"integer") .
"," . $this->db->quote($this->
getTitle(),
"text") .
"," 178 . $this->db->quote($this->
getAddPerm() ? 1 : 0,
"integer") .
"," . $this->db->quote(
185 ) .
"," . $this->db->quote($this->
getEditByOwner() ? 1 : 0,
"integer") .
"," 186 . $this->db->quote($this->
getLimited() ? 1 : 0,
"integer") .
"," . $this->db->quote(
190 . $this->db->quote($this->
getLimitEnd(),
"timestamp") .
"," . $this->db->quote(
197 ) .
"," . $this->db->quote($this->
getImportEnabled() ? 1 : 0,
"integer") .
"," 202 . $this->db->quote($this->
getDescription(),
"text") .
"," . $this->db->quote(
209 ) .
"," . $this->db->quote($this->
getDeleteByOwner() ? 1 : 0,
'integer') .
"," 210 . $this->db->quote($this->
getSaveConfirmation() ? 1 : 0,
'integer') .
"," . $this->db->quote(
215 $this->db->manipulate(
$query);
217 if ($create_standardview) {
222 if ($create_tablefield_setting) {
232 "obj_id" => [
"integer", $this->
getObjId()],
233 "title" => [
"text", $this->
getTitle()],
234 "add_perm" => [
"integer", (
int) $this->
getAddPerm()],
235 "edit_perm" => [
"integer", (
int) $this->
getEditPerm()],
238 "limited" => [
"integer", $this->
getLimited()],
240 "limit_end" => [
"timestamp", $this->
getLimitEnd()],
241 "is_visible" => [
"integer", $this->
getIsVisible() ? 1 : 0],
251 'table_order' => [
'integer', $this->
getOrder()],
254 "id" => [
"integer", $this->
getId()],
262 public function setId(
int $a_id): void
277 $this->objId = $a_id;
287 $this->title = $a_title;
304 if ($this->obj == null) {
314 if ($this->records == null) {
324 $query =
"SELECT id FROM il_dcl_record WHERE table_id = " . $this->db->quote($this->
id,
"integer");
325 $set = $this->db->query(
$query);
327 while ($rec = $this->db->fetchAssoc($set)) {
339 foreach ($records as $record) {
340 $record->deleteField($field_id);
350 foreach ($fields as $field_1) {
351 if ($field_1->getId() == $field_id) {
366 if ($field->getId()) {
367 $field_ids[] = $field->getId();
378 =
"SELECT DISTINCT il_dcl_field.*, il_dcl_tfield_set.field_order 380 INNER JOIN il_dcl_tfield_set 381 ON ( il_dcl_tfield_set.field NOT IN ('owner', 386 AND il_dcl_tfield_set.table_id = il_dcl_field.table_id 387 AND il_dcl_tfield_set.field = " . $this->db->cast(
"il_dcl_field.id",
"text") .
") 388 WHERE il_dcl_field.table_id = %s 389 ORDER BY il_dcl_tfield_set.field_order ASC";
391 $set = $this->db->queryF(
$query, [
'integer'], [$this->
getId()]);
393 while ($rec = $this->db->fetchAssoc($set)) {
425 foreach ($fields as $field) {
426 if (!$field->isStandardField()) {
427 $place = $field->getOrder() + 1;
447 if ($tableviews == null) {
452 foreach ($tableviews as $tableview) {
453 $tableview->setTableviewOrder($order);
454 $tableview->update();
466 if ($this->all_fields == null) {
476 $this->stdFields = $this->getStandardFields();
477 $fields = array_merge($this->
fields, $this->stdFields);
506 $visible_views[] = $tableView;
511 return $visible_views;
521 $tableview = array_shift($array);
523 return $tableview ? $tableview->getId() :
false;
532 $syntax_chars = array_merge(
539 foreach ($syntax_chars as $element) {
540 if (str_contains($field->getTitle(), $element)) {
556 public function getStandardFields(): array
558 if ($this->stdFields == null) {
563 foreach ($this->stdFields as $k => $field) {
564 if ($field->getId() ==
'comments') {
565 unset($this->stdFields[$k]);
593 $editableFields = [];
595 foreach ($fields as $field) {
596 $tableview_id = $this->
http->wrapper()->post()->retrieve(
600 if (!$field->getViewSetting($tableview_id)->isLocked($creation_mode)) {
601 $editableFields[] = $field;
605 return $editableFields;
615 $exportableFields = [];
616 foreach ($fields as $field) {
617 if ($field->getExportable()) {
618 $exportableFields[] = $field;
622 return $exportableFields;
731 return ($from <= $now && $now <= $to);
756 foreach ($fields as $field) {
757 $named[$field->getId()] = $field;
770 usort($array, [$this,
"compareOrder"]);
783 foreach ($fields as $field) {
784 if (!is_null($field->getOrder())) {
785 $field->setOrder($count);
786 $count = $count + $offset;
799 if ($field->getTitle() ==
$title) {
834 if ($edit_by_owner) {
852 if ($delete_by_owner) {
933 if (!in_array($default_sort_field_order, [
'asc',
'desc'])) {
934 $default_sort_field_order =
'asc';
956 $this->view_own_records_perm = (
int) $view_own_perm;
982 return count($this->
fields) > 0;
1026 $org_std_fields = $original->getStandardFields();
1027 foreach ($this->getStandardFields() as $element_key => $std_field) {
1028 $std_field->clone($org_std_fields[$element_key]);
1036 foreach ($original->
getFields() as $orig_field) {
1037 if (!$orig_field->isStandardField()) {
1038 $class_name = get_class($orig_field);
1039 $new_field =
new $class_name();
1043 $new_field->setTableId($this->
getId());
1044 $new_field->cloneStructure($orig_field->getId());
1045 $new_fields[$orig_field->getId()] = $new_field;
1057 foreach ($original->
getRecords() as $orig_record) {
1059 $new_record->setTableId($this->
getId());
1060 $new_record->cloneStructure($orig_record->getId(), $new_fields);
1066 $new_tableview->setTableId($this->
getId());
1067 $new_tableview->cloneStructure($orig_tableview, $new_fields);
1076 foreach ($this->
getFields() as $field) {
1094 $this->all_fields[$field->
getId()] = $field;
1103 $ilDB = $DIC[
'ilDB'];
1105 $query =
"SELECT * FROM il_dcl_table WHERE id = " . $table_id;
1108 return $result->numRows() != 0;
1117 $ilDB = $DIC[
'ilDB'];
1119 $result =
$ilDB->query(
1120 'SELECT id FROM il_dcl_table WHERE title = ' .
$ilDB->quote($title,
'text') .
' AND obj_id = ' 1121 .
$ilDB->quote($obj_id,
'integer')
1124 while ($rec =
$ilDB->fetchAssoc($result)) {
1143 if (!$this->table_order) {
1152 $result = $this->db->query(
'SELECT MAX(table_order) AS table_order FROM il_dcl_table WHERE obj_id = ' . $this->db->quote(
1153 $this->getCollectionObject()->getId(),
1156 $this->table_order = $this->db->fetchObject($result)->table_order + 10;
1157 $this->db->query(
'UPDATE il_dcl_table SET table_order = ' . $this->db->quote(
1160 ) .
' WHERE id = ' . $this->db->quote($this->
getId(),
'integer'));
1186 $ilDB = $DIC[
'ilDB'];
1187 $result =
$ilDB->query(
1188 'SELECT * FROM il_dcl_field WHERE table_id = ' .
$ilDB->quote($obj_id,
'integer') .
' AND title = ' 1189 .
$ilDB->quote($title,
'text')
1192 return (
bool)
$ilDB->numRows($result);
1213 $direction = strtolower($direction);
1214 $direction = (in_array($direction, [
'desc',
'asc'])) ? $direction :
'asc';
1217 $sort_by_status =
false;
1218 if (substr($sort, 0, 8) ==
'_status_') {
1219 $sort_by_status =
true;
1223 if (is_null($sort_field)) {
1224 $sort_field = $this->
getField(
'id');
1227 $sort_query_object = $sort_field->getRecordQuerySortObject($direction, $sort_by_status);
1229 $select_str = ($sort_query_object != null) ? $sort_query_object->getSelectStatement() :
'';
1230 $join_str = ($sort_query_object != null) ? $sort_query_object->getJoinStatement() :
'';
1231 $where_str = ($sort_query_object != null) ? $sort_query_object->getWhereStatement() :
'';
1232 $order_str = ($sort_query_object != null) ? $sort_query_object->getOrderStatement() :
'';
1233 $group_str = ($sort_query_object != null) ? $sort_query_object->getGroupStatement() :
'';
1235 if (count($filter)) {
1236 foreach ($filter as
$key => $filter_value) {
1237 $filter_field_id = substr(
$key, 7);
1238 $filter_field = $this->
getField($filter_field_id);
1239 $filter_record_query_object = $filter_field->getRecordQueryFilterObject($filter_value, $sort_field);
1241 if ($filter_record_query_object) {
1242 $select_str .= $filter_record_query_object->getSelectStatement();
1243 $join_str .= $filter_record_query_object->getJoinStatement();
1244 $where_str .= $filter_record_query_object->getWhereStatement();
1245 $group_str .= $filter_record_query_object->getGroupStatement();
1251 $sql =
"SELECT DISTINCT record.id, record.owner";
1258 $sql .= rtrim($select_str,
',') .
" FROM il_dcl_record {$as} record ";
1260 $sql .=
" WHERE record.table_id = " . $this->db->quote($this->
getId(),
'integer');
1262 if (strlen($where_str) > 0) {
1266 if (strlen($group_str) > 0) {
1267 $sql .=
" GROUP BY " . $group_str;
1270 if (strlen($order_str) > 0) {
1271 $sql .=
" ORDER BY " . $order_str;
1274 $set = $this->db->query($sql);
1275 $total_record_ids = [];
1278 while ($rec = $this->db->fetchAssoc($set)) {
1283 $total_record_ids[] = $rec[
'id'];
1289 if ($sort_query_object != null) {
1290 $total_record_ids = $sort_query_object->applyCustomSorting($sort_field, $total_record_ids, $direction);
1293 if ($sort ===
'n_comments') {
1296 foreach ($total_record_ids as $id) {
1297 $comments_nr[
$id] = $DIC->notes()->domain()->getNrOfCommentsForContext($DIC->notes()->data()->context($this->
getObjId(), $id,
'dcl'));
1299 uasort($comments_nr,
static fn (
$a,
$b) => ($direction ===
'asc' ? 1 : -1) * ($a <=>
$b));
1300 $total_record_ids = array_keys($comments_nr);
1304 $record_ids = array_slice($total_record_ids, $offset, $limit);
1307 foreach ($record_ids as $id) {
1311 return [
'records' =>
$records,
'total' => count($total_record_ids)];
1316 $this->show_invalid = $value;
getEditableFields(bool $creation_mode)
doDelete(bool $delete_only_content=false, bool $omit_notification=false)
Delete table Attention this does not delete the maintable of it's the maintable of the collection...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
setLimitStart(?string $limit_start)
static createOrGetStandardView(int $table_id, bool $create_default_settings=true)
sortByOrder(array &$array)
getFirstTableViewId(int $ref_id, int $user_id=0, bool $with_detailed_view=false)
get id of first (for current user) available view
getPublicCommentsEnabled()
int $view_own_records_perm
True if user can only view his/her own entries in the table.
getFieldByTitle(string $title)
Get a field by title.
setIsVisible(bool $is_visible)
sortTableViews(array $tableviews=null)
setId(int $a_id)
Set table id.
static preloadFieldProperties(array $fields)
Preloads field properties.
addField(ilDclBaseFieldModel $field)
static _getStandardFields(int $table_id)
deleteField(int $field_id)
getFieldsForFormula()
Returns all fields of this table including the standard fields, wich are supported for formulas...
ILIAS HTTP Services $http
hasPermissionToDeleteRecord(int $ref_id, ilDclBaseRecordModel $record)
static hasAddRecordAccess(int $ref, ?int $user_id=0)
array $all_fields
table fields and std fields combined
static getFieldCache(int $field_id=0)
setEditByOwner(bool $edit_by_owner)
setDeleteByOwner(bool $delete_by_owner)
setEditPerm(bool $edit_perm)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
getFields()
Returns all fields of this table including the standard fields.
getVisibleTableViews(int $ref_id, bool $with_active_detailedview=false, int $user_id=0)
For current user.
static _getTableIdByTitle(string $title, int $obj_id)
showInvalidFields(bool $value)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
setDefaultSortFieldOrder(string $default_sort_field_order)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
doesRecordBelongToUser(ilDclBaseRecordModel $record)
updateFields()
Update fields.
setOrder(int $table_order)
setTitle(string $a_title)
getExportableFields()
Return all the fields that are marked as exportable.
static http()
Fetches the global http state from ILIAS.
sortFields(array &$fields)
sortFields
getPartialRecords(string $ref_id, string $sort, string $direction, ?int $limit, int $offset, array $filter=[])
Return only the needed subset of record objects for the table, according to sorting, paging and filters.
cloneStructure(ilDclTable $original)
hasCustomFields()
hasCustomFields
static getAllDatatype(bool $force=false)
Get all possible Datatypes.
$default_sort_field
ID of the default sorting field.
ILIAS Refinery Factory $refinery
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
string $default_sort_field_order
Default sort-order (asc|desc)
getRecordFields()
Returns all fields of this table which are NOT standard fields.
static _lookupObjectId(int $ref_id)
static getCountForTableId(int $table_id)
static hasWriteAccess(int $ref, ?int $user_id=0)
static setCloneOf(int $old, int $new, string $type)
hasPermissionToViewRecord(int $ref_id, ilDclBaseRecordModel $record, int $user_id=0)
string $description
Description for this table displayed above records.
setLimitEnd(?string $limit_end)
getDefaultSortFieldOrder()
getField(string $field_id)
static _hasFieldByTitle(string $title, int $obj_id)
Checks if a table has a field with the given title.
setExportEnabled(bool $export_enabled)
hasPermissionToEditRecord(int $ref_id, ilDclBaseRecordModel $record)
setSaveConfirmation(bool $save_confirmation)
static getRecordCache(?int $record_id)
setAddPerm(bool $add_perm)
compareOrder(ilDclBaseFieldModel $a, ilDclBaseFieldModel $b)
hasPermissionToDeleteRecords(int $ref_id)
static buildFieldFromRecord(array $rec)
$a
thx to https://mlocati.github.io/php-cs-fixer-configurator for the examples
static hasAccessToTableView($tableview, ?int $user_id=0)
This only checks access to the tableview - if the full access check is required, use hasAccessTo($ref...
static hasReadAccess(int $ref, ?int $user_id=0)
setDeletePerm(bool $delete_perm)
int $public_comments
True if users can add comments on each record of this table.
static getAllForTableId(int $table_id)
setImportEnabled(bool $import_enabled)
static hasEditAccess(int $ref, ?int $user_id=0)
buildOrderFields()
buildOrderFields orders the fields.
setDescription(string $description)
static _tableExists(int $table_id)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
doCreate(bool $create_tablefield_setting=true, bool $create_standardview=true)
static set(string $a_var, $a_val)
Set a value.
setDefaultSortField(string $default_sort_field)
setViewOwnRecordsPerm(bool $view_own_perm)
setPublicCommentsEnabled(bool $public_comments)
setLimited(bool $limited)
getNewFieldOrder()
getNewOrder