ILIAS  release_10 Revision v10.1-43-ga1241a92c2f
class.ilDclTextRecordRepresentation.php
Go to the documentation of this file.
1 <?php
2 
19 declare(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 (ilDclDetailedViewDefinition::isActive($tableview_id)) {
53  $this->ctrl->clearParametersByClass("ilDclDetailedViewGUI");
54  $this->ctrl->setParameterByClass(ilDclDetailedViewGUI::class, 'table_id', $this->getRecord()->getTableId());
55  $this->ctrl->setParameterByClass(ilDclDetailedViewGUI::class, 'tableview_id', $tableview_id);
56  $this->ctrl->setParameterByClass(ilDclDetailedViewGUI::class, 'record_id', $this->getRecord()->getId());
57  $links['dcl_open_detail_view'] = $this->ctrl->getLinkTargetByClass(ilDclDetailedViewGUI::class, 'renderRecord');
58  }
59  }
60 
61  $value = nl2br((string) $value);
62 
63  switch (count($links)) {
64  case 0:
65  return $value;
66  case 1:
67  return $this->renderer->render(
68  $this->factory->link()->standard(
69  $value,
70  reset($links)
71  )->withOpenInNewViewport(true)
72  );
73  case 2:
74  default:
75  $ui_links = [];
76  foreach ($links as $key => $link) {
77  $ui_links[] = $this->factory->link()->standard(
78  $this->lng->txt($key),
79  $link
80  )->withOpenInNewViewport(true);
81  }
82  return $this->renderer->render(
83  $this->factory->dropdown()->standard(
84  $ui_links
85  )->withLabel($value)
86  );
87  }
88 
89  }
90 
91  protected function shortenLink(string $value): string
92  {
93  $value = preg_replace('/^(https?:\/\/)?(www\.)?/', '', $value);
94  $half = (int) ((self::LINK_MAX_LENGTH - 4) / 2);
95  $value = preg_replace('/^(.{' . ($half + 1) . '})(.{4,})(.{' . $half . '})$/', '\1...\3', $value);
96 
97  return $value;
98  }
99 
100  public function fillFormInput(ilPropertyFormGUI $form): void
101  {
102  $input_field = $form->getItemByPostVar('field_' . $this->getField()->getId());
103  $raw_input = $this->getFormInput();
104 
105  $value = is_array($raw_input) ? $raw_input['link'] : $raw_input;
106  $value = is_string($value) ? $value : "";
107  $field_values = [];
108  if ($this->getField()->getProperty(ilDclBaseFieldModel::PROP_URL)) {
109  $field_values["field_" . $this->getRecordField()->getField()->getId() . "_title"] = (isset($raw_input['title'])) ? $raw_input['title'] : '';
110  }
111 
112  $field_values["field_" . $this->getRecordField()->getField()->getId()] = $value;
113  $input_field->setValueByArray($field_values);
114  }
115 }
getHTML(bool $link=true, array $options=[])
getItemByPostVar(string $a_post_var)
$url
Definition: shib_logout.php:63
static http()
Fetches the global http state from ILIAS.
$ref_id
Definition: ltiauth.php:66
getFormInput()
Gets the value from from the record field.