ILIAS  trunk Revision v12.0_alpha-1227-g7ff6d300864
class.ilDclTextRecordRepresentation.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22{
23 public const LINK_MAX_LENGTH = 40;
24
25 public function getHTML(bool $link = true, array $options = []): string
26 {
27 $value = $this->getRecordField()->getValue();
28
29 $ref_id = $this->http->wrapper()->query()->retrieve('ref_id', $this->refinery->kindlyTo()->int());
30
31 $field = $this->getField();
32
33 $links = [];
34 if ($field->hasProperty(ilDclBaseFieldModel::PROP_URL)) {
35 $url = $value['link'];
36 $value = $value['title'] ?: $this->shortenLink($url);
37 if ($link) {
38 if (substr($url, 0, 3) === 'www') {
39 $url = 'https://' . $url;
40 } elseif (filter_var($url, FILTER_VALIDATE_EMAIL)) {
41 $url = "mailto:" . $url;
42 }
43 $links['dcl_open_url'] = $url;
44 }
45 }
46 if ($field->hasProperty(ilDclBaseFieldModel::PROP_LINK_DETAIL_PAGE_TEXT) && $link) {
47 if ($this->http->wrapper()->query()->has('tableview_id')) {
48 $tableview_id = $this->http->wrapper()->query()->retrieve('tableview_id', $this->refinery->kindlyTo()->int());
49 } else {
50 $tableview_id = $this->getRecord()->getTable()->getFirstTableViewId($this->user->getId());
51 }
52 if (
55 ) {
56 $this->ctrl->setParameterByClass(ilDclDetailedViewGUI::class, 'record_id', $this->getRecord()->getId());
57 $links['dcl_open_detail_view'] = $this->ctrl->getLinkTargetByClass(ilDclDetailedViewGUI::class, 'renderRecord');
58 $this->ctrl->clearParameterByClass(ilDclDetailedViewGUI::class, 'record_id');
59 }
60 }
61
62 $value = nl2br((string) $value);
63
64 switch (count($links)) {
65 case 0:
66 return $value;
67 case 1:
68 $key = array_keys($links)[0];
69 return $this->renderer->render(
70 $this->factory->link()->standard(
71 $value,
72 reset($links)
73 )->withOpenInNewViewport($key === 'dcl_open_url')
74 );
75 case 2:
76 default:
77 $ui_links = [];
78 foreach ($links as $key => $link) {
79 $ui_links[] = $this->factory->link()->standard(
80 $this->lng->txt($key),
81 $link
82 )->withOpenInNewViewport($key === 'dcl_open_url');
83 }
84 return $this->renderer->render(
85 $this->factory->dropdown()->standard(
86 $ui_links
87 )->withLabel($value)
88 );
89 }
90
91 }
92
93 protected function shortenLink(string $value): string
94 {
95 $value = preg_replace('/^(https?:\/\/)?(www\.)?/', '', $value);
96 $half = (int) ((self::LINK_MAX_LENGTH - 4) / 2);
97 $value = preg_replace('/^(.{' . ($half + 1) . '})(.{4,})(.{' . $half . '})$/', '\1...\3', $value);
98
99 return $value;
100 }
101
102 public function fillFormInput(ilPropertyFormGUI $form): void
103 {
104 $input_field = $form->getItemByPostVar('field_' . $this->getField()->getId());
105 $raw_input = $this->getFormInput();
106
107 $value = is_array($raw_input) ? $raw_input['link'] : $raw_input;
108 $value = is_string($value) ? $value : "";
109 $field_values = [];
110 if ($this->getField()->getProperty(ilDclBaseFieldModel::PROP_URL)) {
111 $field_values["field_" . $this->getRecordField()->getField()->getId() . "_title"] = (isset($raw_input['title'])) ? $raw_input['title'] : '';
112 }
113
114 $field_values["field_" . $this->getRecordField()->getField()->getId()] = $value;
115 $input_field->setValueByArray($field_values);
116 }
117}
renderer()
factory()
getFormInput()
Gets the value from from the record field.
fillFormInput(ilPropertyFormGUI $form)
Fills the form with the value of a record.
getHTML(bool $link=true, array $options=[])
Outputs html of a certain field.
static _lookupActive(int $a_id, string $a_parent_type, bool $a_check_scheduled_activation=false, string $a_lang="-")
lookup activation status
This class represents a property form user interface.
getItemByPostVar(string $a_post_var)
$ref_id
Definition: ltiauth.php:66
static http()
Fetches the global http state from ILIAS.
$url
Definition: shib_logout.php:70