ILIAS  trunk Revision v11.0_alpha-1749-g1a06bdef097
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
class.SettingsGUI.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
22 
27 
29 {
30  protected \ilSetting $global_settings;
31 
32  public function __construct(
33  protected InternalDataService $data,
34  protected InternalDomainService $domain,
35  protected InternalGUIService $gui,
36  protected int $obj_id,
37  protected int $ref_id
38  ) {
39  $this->global_settings = $this->domain->settings();
40  }
41 
42  public function executeCommand(): void
43  {
44  $ctrl = $this->gui->ctrl();
45  $next_class = $ctrl->getNextClass($this);
46  $cmd = $ctrl->getCmd("edit");
47 
48  switch ($next_class) {
49  default:
50  if (in_array($cmd, ["edit", "save"])) {
51  $this->$cmd();
52  }
53  }
54  }
55 
56  protected function edit(): void
57  {
58  $mt = $this->gui->ui()->mainTemplate();
59  $form = $this->getEditForm();
60  $mt->setContent($form->render());
61  }
62 
63  protected function getEditForm(): FormAdapterGUI
64  {
65  $settings = $this->domain->mediacastSettings()->getById($this->obj_id);
66  $lng = $this->domain->lng();
67 
68  $form = $this->gui
69  ->form(self::class, "save")
70  ->section("general", $lng->txt("mcst_settings"))
71  ->addStdTitleAndDescription($this->obj_id, "mcst")
72  ->section("avail", $lng->txt("rep_activation_availability"))
73  ->addOnline($this->obj_id, "mcst")
74  ->section("presentation", $lng->txt("obj_presentation"))
75  ->addStdTile($this->obj_id, "mcst")
76  ->switch(
77  "order",
78  $lng->txt("mcst_ordering"),
79  "",
80  (string) $settings->getSortMode()
81  )
82  ->group((string) \ilObjMediaCast::ORDER_TITLE, $lng->txt("mcst_ordering_title"))
83  ->group((string) \ilObjMediaCast::ORDER_CREATION_DATE_ASC, $lng->txt("mcst_ordering_creation_date_asc"))
84  ->group((string) \ilObjMediaCast::ORDER_CREATION_DATE_DESC, $lng->txt("mcst_ordering_creation_date_desc"))
85  ->group((string) \ilObjMediaCast::ORDER_MANUAL, $lng->txt("mcst_ordering_manual"))
86  ->end()
87  ->switch(
88  "viewmode",
89  $lng->txt("mcst_viewmode"),
90  "",
91  $settings->getViewMode()
92  )
93  ->group(\ilObjMediaCast::VIEW_IMG_GALLERY, $lng->txt("mcst_img_gallery"))
94  ->group(\ilObjMediaCast::VIEW_PODCAST, $lng->txt("mcst_podcast"))
95  ->group(\ilObjMediaCast::VIEW_VCAST, $lng->txt("mcst_video_cast"))
96  ->select(
97  "autoplaymode",
98  $lng->txt("mcst_autoplay"),
99  [
100  \ilObjMediaCast::AUTOPLAY_NO => $lng->txt("mcst_no_autoplay"),
101  \ilObjMediaCast::AUTOPLAY_ACT => $lng->txt("mcst_autoplay_active"),
102  \ilObjMediaCast::AUTOPLAY_INACT => $lng->txt("mcst_autoplay_inactive")
103  ],
104  "",
105  (string) $settings->getAutoplayMode()
106  )
107  ->number(
108  "nr_videos",
109  $lng->txt("mcst_nr_videos"),
110  "",
111  max(1, $settings->getNumberInitialVideos()),
112  1
113  )
114  ->end()
115  ->checkbox(
116  "downloadable",
117  $lng->txt("mcst_downloadable"),
118  $lng->txt("mcst_downloadable_info"),
119  $settings->getDownloadable()
120  );
121 
122  // Webfeed Section
123  $news_set = new \ilSetting("news");
124  if ($news_set->get("enable_rss_for_internal")) {
125  $form = $form
126  ->section("webfeed", $lng->txt("mcst_webfeed"))
127  ->switch(
128  "defaultaccess",
129  $lng->txt("news_default_visibility"),
130  "",
131  (string) $settings->getDefaultAccess()
132  )
133  ->group(
134  "0",
135  $lng->txt("news_visibility_users"),
136  $lng->txt("news_news_item_def_visibility_users_info")
137  )
138  ->group(
139  "1",
140  $lng->txt("news_visibility_public"),
141  $lng->txt("news_news_item_def_visibility_public_info")
142  )
143  ->end();
144 
145  // Extra Feed
146  $public_feed = \ilBlockSetting::_lookup("news", "public_feed", 0, $this->obj_id);
147  $form = $form
148  ->optional(
149  "extra_feed",
150  $lng->txt("news_public_feed"),
151  $lng->txt("news_public_feed_info"),
152  (bool) $public_feed
153  )
154  ->number(
155  "keep_rss_min",
156  $lng->txt("news_keep_minimal_x_items"),
157  $lng->txt("news_keep_minimal_x_items_info") . " (" . \ilNewsItem::_lookupRSSPeriod() . " " . ($lng->txt(\ilNewsItem::_lookupRSSPeriod() == 1 ? "day" : "days")) . ")",
159  "news",
160  "keep_rss_min",
161  0,
162  $this->obj_id
163  ),
164  0,
165  100
166  )->end();
167 
168  // Include Files in RSS
169  $form = $form->checkbox(
170  "public_files",
171  $lng->txt("mcst_incl_files_in_rss"),
172  $lng->txt("mcst_incl_files_in_rss_info"),
173  $settings->getPublicFiles()
174  );
175  }
176 
177  // Learning Progress Section
178  if (\ilLearningProgressAccess::checkAccess($this->ref_id)) {
179  $form = $form->section("learning_progress", $lng->txt("learning_progress"))
180  ->checkbox(
181  "auto_det_lp",
182  $lng->txt("mcst_new_items_det_lp"),
183  $lng->txt("mcst_new_items_det_lp_info"),
184  $settings->getNewItemsInLearningProgress()
185  );
186  }
187 
188  if (!$this->global_settings->get('disable_comments')) {
189  $lng->loadLanguageModule("notes");
190  // Features Section
191  $form = $form->section("features", $lng->txt('obj_features'));
192  $form = $form->checkbox(
193  "comments",
194  $lng->txt("notes_comments"),
195  "",
196  $this->domain->notes()->commentsActive($this->obj_id)
197  );
198  }
199  return $form;
200  }
201 
202  protected function save(): void
203  {
204  $mt = $this->gui->ui()->mainTemplate();
205  $form = $this->getEditForm();
206  $ctrl = $this->gui->ctrl();
207  $lng = $this->domain->lng();
208 
209  $old_settings = $this->domain->mediacastSettings()->getById($this->obj_id);
210 
211  if ($form->isValid()) {
212 
213  $form->saveStdTitleAndDescription($this->obj_id, "mcst");
214  $form->saveStdTile($this->obj_id, "mcst");
215  $form->saveOnline($this->obj_id, "mcst");
216 
217  $settings = $this->data->settings(
218  $this->obj_id,
219  (bool) $form->getData("public_files"),
220  (bool) $form->getData("downloadable"),
221  (int) $form->getData("defaultaccess"),
222  (int) $form->getData("order"),
223  (string) $form->getData("viewmode"),
224  (bool) $form->getData("autoplaymode"),
225  (int) $form->getData("nr_videos"),
226  \ilLearningProgressAccess::checkAccess($this->ref_id) && (bool) $form->getData("auto_det_lp")
227  );
228  $this->domain->mediacastSettings()->update($settings);
229 
230  if (!$this->global_settings->get('disable_comments')) {
231  $this->domain->notes()->activateComments(
232  $this->obj_id,
233  $form->getData("comments")
234  );
235  }
236 
237  $news_set = new \ilSetting("news");
238  $enable_internal_rss = $news_set->get("enable_rss_for_internal");
239 
240  if ($enable_internal_rss) {
242  "news",
243  "public_feed",
244  (string) $form->getData("extra_feed"),
245  0,
246  $this->obj_id
247  );
248 
250  "news",
251  "keep_rss_min",
252  (string) $form->getData("keep_rss_min"),
253  0,
254  $this->obj_id
255  );
256  }
257 
258  $mt->setOnScreenMessage("success", $lng->txt("msg_obj_modified"), true);
259  $ctrl->redirectByClass(self::class, "edit");
260  } else {
261  $mt = $this->gui->ui()->mainTemplate();
262  $mt->setContent($form->render());
263  }
264  }
265 }
static _lookupRSSPeriod()
__construct(protected InternalDataService $data, protected InternalDomainService $domain, protected InternalGUIService $gui, protected int $obj_id, protected int $ref_id)
static checkAccess(int $a_ref_id, bool $a_allow_only_read=true)
check access to learning progress
$ref_id
Definition: ltiauth.php:65
static _lookup(string $a_type, string $a_setting, int $a_user=0, int $a_block_id=0)
Lookup setting from database.
static _write(string $a_type, string $a_setting, string $a_value, int $a_user=0, int $a_block_id=0)
Write setting to database.
addStdTitleAndDescription(int $obj_id, string $type)
addStdTile(int $obj_id, string $type)
global $lng
Definition: privfeed.php:31
addOnline(int $obj_id, string $type)