ILIAS  trunk Revision v12.0_alpha-1221-g4e438232683
ContentFactory.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22
24use ILIAS\UI\Component\Modal\RoundTrip as RoundTripModal;
25use ILIAS\UI\Factory as UIFactory;
27use ILIAS\MetaData\Presentation\UtilitiesInterface as PresentationUtilities;
34
36{
37 public function __construct(
38 protected UIFactory $ui_factory,
39 protected PresentationUtilities $presentation_utilities,
40 protected LinkFactoryInterface $link_factory,
41 protected RepositoryInterface $copyright_repository
42 ) {
43 }
44
45 public function getInfoContent(
46 int $ref_id,
47 int $obj_id,
48 string $type,
49 StateInfoInterface $state_info
50 ): RoundTripModal {
51 $message = $this->getStatusMessage($state_info);
52 $scale = $this->getStatusOverview($state_info);
53 $actions = $this->getActions($ref_id, $obj_id, $type, $state_info);
54
55 return $this->ui_factory->modal()->roundtrip(
56 $this->presentation_utilities->txt('md_publishing_center_title'),
57 [$message, $scale]
58 )->withActionButtons($actions);
59 }
60
61 protected function getStatusOverview(StateInfoInterface $state_info): ScaleBar
62 {
63 $scale_items = [];
64 foreach ($state_info->getAllPossibleStatuses() as $status) {
65 $status_label = match ($status) {
66 Status::UNPUBLISHED => $this->presentation_utilities->txt('md_publishing_status_unpublished'),
67 Status::BLOCKED => $this->presentation_utilities->txt('md_publishing_status_blocked'),
68 Status::UNDER_REVIEW => $this->presentation_utilities->txt('md_publishing_status_under_review'),
69 Status::PUBLISHED => $this->presentation_utilities->txt('md_publishing_status_published')
70 };
71 $scale_items[$status_label] = ($status === $state_info->getCurrentStatus());
72 }
73 return $this->ui_factory->chart()->scaleBar($scale_items);
74 }
75
76 protected function getStatusMessage(StateInfoInterface $state_info): MessageBox
77 {
78 if (
79 $state_info->getCurrentStatus() === Status::UNPUBLISHED &&
80 !($state_info->isActionAvailable(Action::PUBLISH) || $state_info->isActionAvailable(Action::SUBMIT))
81 ) {
82 $valid_cp = [];
83 foreach ($state_info->getAllEligibleCopyrightEntryIDs() as $copyright_id) {
84 $valid_cp[] = $this->copyright_repository->getEntry($copyright_id)->title();
85 }
86 $valid_cp_list = '<br/><br/>' . implode('<br/>', $valid_cp);
87 $message = $this->presentation_utilities->txtFill('md_publishing_info_wrong_copyright', $valid_cp_list);
88 } else {
89 $message = match ($state_info->getCurrentStatus()) {
90 Status::UNPUBLISHED => $this->presentation_utilities->txt('md_publishing_info_unpublished'),
91 Status::BLOCKED => $this->presentation_utilities->txt('md_publishing_info_blocked'),
92 Status::UNDER_REVIEW => $this->presentation_utilities->txt('md_publishing_info_under_review'),
93 Status::PUBLISHED => $this->presentation_utilities->txt('md_publishing_info_published')
94 };
95 }
96
97 return $this->ui_factory->messageBox()->info($message);
98 }
99
103 protected function getActions(
104 int $ref_id,
105 int $obj_id,
106 string $type,
107 StateInfoInterface $state_info
108 ): array {
109 $buttons = [];
110 foreach ($state_info->getRelevantActions() as $action) {
111 $link = $this->link_factory->getLinkForAction($action, $ref_id, $obj_id, $type);
112 $label = match ($action) {
113 Action::BLOCK => $this->presentation_utilities->txt('md_publishing_action_block'),
114 Action::UNBLOCK => $this->presentation_utilities->txt('md_publishing_action_unblock'),
115 Action::PUBLISH => $this->presentation_utilities->txt('md_publishing_action_publish'),
116 Action::WITHDRAW => $this->presentation_utilities->txt('md_publishing_action_withdraw'),
117 Action::SUBMIT => $this->presentation_utilities->txt('md_publishing_action_submit'),
118 Action::ACCEPT => $this->presentation_utilities->txt('md_publishing_action_accept'),
119 Action::REJECT => $this->presentation_utilities->txt('md_publishing_action_reject')
120 };
121 $disabled = !$state_info->isActionAvailable($action);
122 /*$buttons[] = $this->ui_factory->button()->standard($label, $link)
123 ->withUnavailableAction($disabled);*/
124 // This is an ugly workaround because prompts don't work correctly
125 $button = $this->ui_factory->button()->standard($label, '#')->withUnavailableAction($disabled);
126 if (!$disabled) {
127 $button = $button->withOnLoadCode(
128 fn($id) => "$('#$id').on('click', (e)=> {
129 let promptId = e.target.closest('.il-prompt').id;
130 il.UI.prompt.get(promptId).show('$link');
131 });"
132 );
133 }
134 $buttons[] = $button;
135 }
136 return $buttons;
137 }
138
139 public function getConfirmationContent(
140 int $ref_id,
141 int $obj_id,
142 string $type,
143 Action $action,
144 bool $is_last_reference
145 ): RoundTripModal {
146 $modal_content = [];
147 $message = match ($action) {
148 Action::WITHDRAW => $this->presentation_utilities->txt('md_publishing_confirmation_info_withdraw'),
149 Action::ACCEPT => $this->presentation_utilities->txt('md_publishing_confirmation_info_accept'),
150 Action::REJECT => $this->presentation_utilities->txt('md_publishing_confirmation_info_reject'),
151 default => ''
152 };
153 $modal_content[] = $this->ui_factory->messageBox()->confirmation($message);
154 $title = match ($action) {
155 Action::WITHDRAW => $this->presentation_utilities->txt('md_publishing_confirmation_withdraw'),
156 Action::ACCEPT => $this->presentation_utilities->txt('md_publishing_confirmation_accept'),
157 Action::REJECT => $this->presentation_utilities->txt('md_publishing_confirmation_reject'),
158 default => ''
159 };
160
161 if (
162 ($action === Action::REJECT || $action === Action::WITHDRAW) &&
163 $is_last_reference
164 ) {
165 $modal_content[] = $this->ui_factory->messageBox()->info(
166 $this->presentation_utilities->txt('md_publishing_last_reference_info')
167 );
168 }
169
170 $action = $this->link_factory->getLinkForConfirmationOfAction($action, $ref_id, $obj_id, $type);
171 /*$button = $this->ui_factory->button()->standard(
172 $this->presentation_utilities->txt('confirm'),
173 $action
174 );*/
175 // This is an ugly workaround because prompts don't work correctly
176 $button = $this->ui_factory->button()->standard($this->presentation_utilities->txt('confirm'), '#');
177 $button = $button->withOnLoadCode(
178 fn($id) => "$('#$id').on('click', (e)=> {
179 let promptId = e.target.closest('.il-prompt').id;
180 il.UI.prompt.get(promptId).show('$action');
181 });"
182 );
183 return $this->ui_factory->modal()->roundtrip($title, $modal_content)->withActionButtons([$button]);
184 }
185
186 public function getSuccessMessage(Action $action): string
187 {
188 return match ($action) {
189 Action::BLOCK => $this->presentation_utilities->txt('md_publishing_success_block'),
190 Action::UNBLOCK => $this->presentation_utilities->txt('md_publishing_success_unblock'),
191 Action::PUBLISH => $this->presentation_utilities->txt('md_publishing_success_publish'),
192 Action::WITHDRAW => $this->presentation_utilities->txt('md_publishing_success_withdraw'),
193 Action::SUBMIT => $this->presentation_utilities->txt('md_publishing_success_submit'),
194 Action::ACCEPT => $this->presentation_utilities->txt('md_publishing_success_accept'),
195 Action::REJECT => $this->presentation_utilities->txt('md_publishing_success_reject')
196 };
197 }
198}
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Definition: plugin.php:23
Builds a Color from either hex- or rgb values.
Definition: Factory.php:31
getInfoContent(int $ref_id, int $obj_id, string $type, StateInfoInterface $state_info)
getActions(int $ref_id, int $obj_id, string $type, StateInfoInterface $state_info)
getConfirmationContent(int $ref_id, int $obj_id, string $type, Action $action, bool $is_last_reference)
__construct(protected UIFactory $ui_factory, protected PresentationUtilities $presentation_utilities, protected LinkFactoryInterface $link_factory, protected RepositoryInterface $copyright_repository)
isActionAvailable(Action $action)
Returns false both if the action should not be offered at all in the current context,...
This describes commonalities between standard and primary buttons.
Definition: Button.php:34
Interface Scale Bars.
Definition: ScaleBar.php:29
$ref_id
Definition: ltiauth.php:66