67 public function __construct($a_data, $a_id, $a_call_by_reference, $a_prepare_output =
true)
71 $this->lng =
$DIC->language();
72 $this->
user = $DIC->user();
73 $this->ctrl =
$DIC->ctrl();
74 $this->tabs =
$DIC->tabs();
75 $this->
help = $DIC[
"ilHelp"];
76 $this->locator =
$DIC[
"ilLocator"];
77 $this->tpl =
$DIC[
"tpl"];
78 $this->toolbar =
$DIC->toolbar();
81 $this->lng->loadLanguageModule(
'cert');
86 $lng->loadLanguageModule(
"exercise");
87 $lng->loadLanguageModule(
"exc");
88 $this->ctrl->saveParameter($this,
"ass_id");
90 $this->service =
$DIC->exercise()->internal()->service();
91 $this->request =
$DIC->exercise()->internal()->request();
92 $this->exercise_ui =
$DIC->exercise()->internal()->ui();
93 $this->requested_ass_id = $this->request->getRequestedAssId();
96 $this->ass = $this->request->getRequestedAssignment();
97 } elseif ($this->requested_ass_id > 0) {
111 $next_class = $this->ctrl->getNextClass($this);
112 $cmd = $this->ctrl->getCmd();
116 switch ($next_class) {
117 case "ilinfoscreengui":
118 $ilTabs->activateTab(
"info");
122 case 'ilpermissiongui':
123 $ilTabs->activateTab(
"permissions");
125 $ret = &$this->ctrl->forwardCommand($perm_gui);
128 case "illearningprogressgui":
129 $ilTabs->activateTab(
"learning_progress");
132 $this->object->getRefId(),
135 $this->ctrl->forwardCommand($new_gui);
136 $this->tabs_gui->setTabActive(
'learning_progress');
139 case 'ilobjectcopygui':
140 $ilCtrl->saveParameter($this,
'new_type');
141 $ilCtrl->setReturnByClass(get_class($this),
'create');
145 $this->ctrl->forwardCommand($cp);
149 $ilTabs->activateTab(
"export");
151 $exp_gui->addFormat(
"xml");
152 $ret = $this->ctrl->forwardCommand($exp_gui);
156 case "ilcommonactiondispatchergui":
158 $this->ctrl->forwardCommand($gui);
161 case "ilcertificategui":
163 $this->tabs_gui->activateTab(
"settings");
164 $this->tabs_gui->activateSubTab(
"certificate");
167 $output_gui = $guiFactory->create($this->
object);
169 $this->ctrl->forwardCommand($output_gui);
172 case "ilexassignmenteditorgui":
174 $ilTabs->activateTab(
"content");
176 $ass_gui =
new ilExAssignmentEditorGUI($this->object->getId(), $this->object->isCompletionBySubmissionEnabled(), $this->ass);
177 $this->ctrl->forwardCommand($ass_gui);
180 case "ilexsubmissiongui":
182 $random_manager = $this->service->getRandomAssignmentManager($this->
object);
183 if (!$random_manager->isAssignmentVisible($this->requested_ass_id, $this->user->getId())) {
186 $ilTabs->activateTab(
"content");
188 $this->ctrl->setReturn($this,
"showOverview");
189 $sub_gui = $this->exercise_ui->getSubmissionGUI();
190 $this->ctrl->forwardCommand($sub_gui);
193 case "ilexercisemanagementgui":
195 if (
$GLOBALS[
'DIC']->access()->checkRbacOrPositionPermissionAccess(
196 'edit_submissions_grades',
197 'edit_submissions_grades',
198 $this->object->getRefId()
200 $ilTabs->activateTab(
"grades");
202 $this->ctrl->forwardCommand($mgmt_gui);
208 case "ilexccriteriacataloguegui":
210 $ilTabs->activateTab(
"settings");
212 $ilTabs->activateSubTab(
"crit");
214 $this->ctrl->forwardCommand($crit_gui);
218 case "ilportfolioexercisegui":
219 $this->ctrl->saveParameter($this, array(
"part_id"));
224 case "ilexcrandomassignmentgui":
225 $gui = $this->exercise_ui->getRandomAssignmentGUI();
226 $this->ctrl->forwardCommand($gui);
229 case 'ilobjectmetadatagui':
231 $this->tabs_gui->setTabActive(
'meta_data');
233 $this->ctrl->forwardCommand($md_gui);
262 $a_new_object->saveData();
264 ilUtil::sendSuccess($this->lng->txt(
"exc_added"),
true);
266 $ilCtrl->setParameterByClass(
"ilExAssignmentEditorGUI",
"ref_id", $a_new_object->
getRefId());
267 $ilCtrl->redirectByClass(
"ilExAssignmentEditorGUI",
"addAssignment");
277 $ilCtrl->redirectByClass(
"ilExAssignmentEditorGUI",
"listAssignments");
288 $random_manager =
$service->getRandomAssignmentManager($this->
object);
290 $a_form->
setTitle($this->lng->txt(
"exc_edit_exercise"));
293 $pres->setTitle($this->lng->txt(
'obj_presentation'));
297 $a_form = $obj_service->commonSettings()->legacyForm($a_form, $this->
object)->addTileImage();
300 $section->setTitle($this->lng->txt(
'exc_passing_exc'));
307 $this->lng->txt(
"exc_pass_all"),
309 $this->lng->txt(
"exc_pass_all_info")
311 $radg->addOption($op1);
313 $this->lng->txt(
"exc_pass_minimum_nr"),
315 $this->lng->txt(
"exc_pass_minimum_nr_info")
317 $radg->addOption($op2);
319 $this->lng->txt(
"exc_random_selection"),
321 $this->lng->txt(
"exc_random_selection_info")
324 $op3->setDisabled(
true);
325 $op3->setInfo($this->lng->txt(
"exc_random_selection_not_changeable_info") .
" " .
326 implode(
" ", $random_manager->getDeniedActivationReasons()));
329 $radg->setDisabled(
true);
330 $radg->setInfo($this->lng->txt(
"exc_pass_mode_not_changeable_info") .
" " .
331 implode(
" ", $random_manager->getDeniedDeactivationReasons()));
334 $rn =
new ilNumberInputGUI($this->lng->txt(
"exc_nr_random_mand"),
"nr_random_mand");
336 $rn->setMaxLength(4);
337 $rn->setRequired(
true);
338 $rn->setMinValue(1,
false);
340 $rn->setMaxValue($cnt,
true);
341 $op3->addSubItem($rn);
343 $radg->addOption($op3);
348 $ni->setMaxLength(4);
349 $ni->setRequired(
true);
351 $min = max($mand, 1);
352 $ni->setMinValue($min,
true);
353 $ni->setInfo($this->lng->txt(
"exc_min_nr_info"));
354 $op2->addSubItem($ni);
359 $subcompl =
new ilRadioGroupInputGUI($this->lng->txt(
"exc_passed_status_determination"),
"completion_by_submission");
360 $op1 =
new ilRadioOption($this->lng->txt(
"exc_completion_by_tutor"), 0,
"");
361 $subcompl->addOption($op1);
362 $op2 =
new ilRadioOption($this->lng->txt(
"exc_completion_by_submission"), 1, $this->lng->txt(
"exc_completion_by_submission_info"));
363 $subcompl->addOption($op2);
372 $section->setTitle($this->lng->txt(
'exc_publishing'));
376 $cb =
new ilCheckboxInputGUI($this->lng->txt(
"exc_show_submissions"),
"show_submissions");
377 $cb->setInfo($this->lng->txt(
"exc_show_submissions_info"));
381 $section->setTitle($this->lng->txt(
'exc_notification'));
385 $cbox =
new ilCheckboxInputGUI($this->lng->txt(
"exc_submission_notification"),
"notification");
386 $cbox->setInfo($this->lng->txt(
"exc_submission_notification_info"));
393 $section->setTitle($this->lng->txt(
'exc_feedback'));
400 $option->setInfo($this->lng->txt(
"exc_settings_feedback_mail_info"));
401 $fdb->addOption($option);
403 $option->setInfo($this->lng->txt(
"exc_settings_feedback_file_info"));
404 $fdb->addOption($option);
406 $option->setInfo($this->lng->txt(
"exc_settings_feedback_text_info"));
407 $fdb->addOption($option);
411 $section->setTitle($this->lng->txt(
'obj_features'));
417 ->getObjectPositionSettingsByType($this->object->getType());
419 if ($position_settings->isActive()) {
424 $this->object->getId(),
437 $a_values[
"desc"] = $this->
object->getLongDescription();
438 $a_values[
"show_submissions"] = $this->
object->getShowSubmissions();
439 $a_values[
"pass_mode"] = $this->
object->getPassMode();
440 if ($a_values[
"pass_mode"] ==
"nr") {
441 $a_values[
"pass_nr"] = $this->
object->getPassNr();
444 $a_values[
"nr_random_mand"] = $this->
object->getNrMandatoryRandom();
449 $this->object->getId()
452 $a_values[
'completion_by_submission'] = (int) $this->object->isCompletionBySubmissionEnabled();
454 $tfeedback = array();
455 if ($this->object->hasTutorFeedbackMail()) {
458 if ($this->object->hasTutorFeedbackText()) {
461 if ($this->object->hasTutorFeedbackFile()) {
464 $a_values[
'tfeedback'] = $tfeedback;
468 ->isPositionAccessActiveForObject($this->object->getId());
471 $this->object->getId(),
482 $this->
object->setShowSubmissions($a_form->
getInput(
"show_submissions"));
483 $this->
object->setPassMode($a_form->
getInput(
"pass_mode"));
484 if ($this->object->getPassMode() ==
"nr") {
485 $this->
object->setPassNr($a_form->
getInput(
"pass_nr"));
488 $this->
object->setNrMandatoryRandom($a_form->
getInput(
"nr_random_mand"));
491 $this->
object->setCompletionBySubmission($a_form->
getInput(
'completion_by_submission') == 1 ?
true :
false);
493 $feedback = $a_form->
getInput(
"tfeedback");
494 $this->
object->setTutorFeedback(is_array($feedback)
495 ? array_sum($feedback)
501 $this->object->getId(),
502 (
bool) $a_form->
getInput(
"notification")
506 $obj_service->commonSettings()->legacyForm($a_form, $this->
object)->saveTileImage();
509 $this->object->getId(),
532 $ilCtrl->getLinkTarget($this,
"showOverview")
538 $ilCtrl->getLinkTargetByClass(
"ilExAssignmentEditorGUI",
"listAssignments")
541 $ilTabs->activateSubTab($a_activate);
554 $ilHelp->setScreenIdComponent(
"exc");
557 $this->tabs_gui->addTab(
559 $lng->txt(
"exc_assignments"),
560 $this->ctrl->getLinkTarget($this,
"showOverview")
564 $next_class = strtolower($this->ctrl->getNextClass());
566 $this->tabs_gui->addTab(
568 $lng->txt(
"info_short"),
569 $this->ctrl->getLinkTargetByClass(
"ilinfoscreengui",
"showSummary")
579 $this->tabs_gui->addTab(
581 $lng->txt(
"settings"),
582 $this->ctrl->getLinkTarget($this,
'edit')
585 if ($this->access->checkRbacOrPositionPermissionAccess(
586 'edit_submissions_grades',
587 'edit_submissions_grades',
588 $this->object->getRefId()
590 $this->tabs_gui->addTab(
592 $lng->txt(
"exc_submissions_and_grades"),
593 $this->ctrl->getLinkTargetByClass(
"ilexercisemanagementgui",
"members")
598 $save_sort_order =
$_GET[
"sort_order"];
599 $save_sort_by =
$_GET[
"sort_by"];
600 $save_offset =
$_GET[
"offset"];
604 $this->tabs_gui->addTab(
606 $lng->txt(
'learning_progress'),
607 $this->ctrl->getLinkTargetByClass(array(
'ilobjexercisegui',
'illearningprogressgui'),
'')
612 if ($this->access->checkAccess(
'write',
'', $this->object->getRefId())) {
614 $mdtab = $mdgui->getTab();
616 $this->tabs_gui->addTarget(
620 "ilobjectmetadatagui"
625 $_GET[
"sort_order"] = $save_sort_order;
626 $_GET[
"sort_by"] = $save_sort_by;
627 $_GET[
"offset"] = $save_offset;
631 $this->tabs_gui->addTab(
634 $this->ctrl->getLinkTargetByClass(
"ilexportgui",
"")
641 $this->tabs_gui->addTab(
643 $lng->txt(
"perm_settings"),
644 $this->ctrl->getLinkTargetByClass(array(get_class($this),
'ilpermissiongui'),
"perm")
656 $this->ctrl->setCmd(
"showSummary");
657 $this->ctrl->setCmdClass(
"ilinfoscreengui");
674 public function infoScreen()
680 $ilTabs->activateTab(
"info");
691 $info->enablePrivateNotes();
695 $info->enableNewsEditing();
696 $info->setBlockProperty(
"news",
"settings",
true);
700 $record_gui->setInfoObject($info);
701 $record_gui->parse();
704 $info->addMetaDataSections($this->object->getId(), 0, $this->object->getType());
707 $info->addSection($this->lng->txt(
"exc_overview"));
713 if (
$a[
"mandatory"]) {
717 $info->addProperty(
$lng->txt(
"exc_assignments"), $cnt);
719 $info->addProperty(
$lng->txt(
"exc_mandatory"), $mcnt);
721 $lng->txt(
"exc_pass_mode"),
722 $lng->txt(
"exc_msg_all_mandatory_ass")
725 $info->addProperty(
$lng->txt(
"exc_mandatory"), $mcnt);
727 $lng->txt(
"exc_pass_mode"),
728 sprintf(
$lng->txt(
"exc_msg_min_number_ass"), $this->object->getPassNr())
731 $info->addProperty(
$lng->txt(
"exc_mandatory"), $exc->getNrMandatoryRandom());
733 $lng->txt(
"exc_pass_mode"),
734 $lng->txt(
"exc_msg_all_mandatory_ass")
743 $st = $this->
object->determinStatusOfUser(
$ilUser->getId());
744 $status = $st[
"overall_status"];
745 if ($lpcomment !=
"" || $mark !=
"" || $status !=
"notgraded") {
746 $info->addSection($this->lng->txt(
"exc_feedback_from_tutor"));
747 if ($lpcomment !=
"") {
749 $this->lng->txt(
"exc_comment"),
755 $this->lng->txt(
"exc_mark"),
766 if ($status !=
"notgraded") {
768 ' alt="' .
$lng->txt(
"exc_" . $status) .
'" title="' .
$lng->txt(
"exc_" . $status) .
772 if ($st[
"failed_a_mandatory"]) {
773 $add =
" (" .
$lng->txt(
"exc_msg_failed_mandatory") .
")";
774 } elseif ($status ==
"failed") {
775 $add =
" (" .
$lng->txt(
"exc_msg_missed_minimum_number") .
")";
778 $this->lng->txt(
"status"),
779 $img .
" " . $this->lng->txt(
"exc_" . $status) . $add
786 $this->ctrl->forwardCommand($info);
792 $this->tabs_gui->activateSubTab(
"edit");
793 return parent::editObject();
798 $this->tabs_gui->addSubTab(
800 $this->lng->txt(
"general_settings"),
801 $this->ctrl->getLinkTarget($this,
"edit")
804 $this->tabs_gui->addSubTab(
806 $this->lng->txt(
"exc_criteria_catalogues"),
807 $this->ctrl->getLinkTargetByClass(
"ilexccriteriacataloguegui",
"")
811 if (
true === $validator->validate()) {
812 $this->tabs_gui->addSubTab(
814 $this->lng->txt(
"certificate"),
815 $this->ctrl->getLinkTarget($this,
"certificate")
825 public static function _goto($a_target, $a_raw)
831 $ilAccess =
$DIC->access();
835 $ilCtrl->setTargetScript(
"ilias.php");
836 $ilCtrl->initBaseClass(
"ilRepositoryGUI");
840 $ass_id =
$_GET[
'ass_id'];
841 $parts = explode(
"_", $a_raw);
846 switch (end($parts)) {
866 $ilCtrl->setParameterByClass(
"ilExerciseHandlerGUI",
"ref_id", $a_target);
868 if ($ilAccess->checkAccess(
"read",
"", $a_target)) {
869 $ilCtrl->setParameterByClass(
"ilExerciseHandlerGUI",
"target", $a_raw);
872 $ilCtrl->setParameterByClass(
"ilExerciseManagementGUI",
"ass_id", $ass_id);
877 $ilCtrl->redirectByClass(array(
"ilRepositoryGUI",
"ilExerciseHandlerGUI",
"ilObjExerciseGUI",
"ilExerciseManagementGUI"),
"members");
886 $ilCtrl->setParameterByClass(
"ilExerciseHandlerGUI",
"member_id", $member);
887 $ilCtrl->redirectByClass(array(
"ilRepositoryGUI",
"ilExerciseHandlerGUI",
"ilObjExerciseGUI",
"ilExerciseManagementGUI"),
"waitingDownload");
891 if ($parts[1] !=
"") {
892 $ilCtrl->setParameterByClass(
"ilExerciseHandlerGUI",
"ass_id", $parts[1]);
893 $ilCtrl->setParameterByClass(
"ilExerciseHandlerGUI",
"ass_id_goto", $parts[1]);
895 $ilCtrl->redirectByClass(array(
"ilRepositoryGUI",
"ilExerciseHandlerGUI",
"ilObjExerciseGUI"),
"showOverview");
899 } elseif ($ilAccess->checkAccess(
"visible",
"", $a_target)) {
900 $ilCtrl->redirectByClass(array(
"ilRepositoryGUI",
"ilExerciseHandlerGUI",
"ilObjExerciseGUI"),
"infoScreen");
901 } elseif ($ilAccess->checkAccess(
"read",
"", ROOT_FOLDER_ID)) {
903 $lng->txt(
"msg_no_perm_read_item"),
917 if (is_object($this->
object)) {
919 $ilLocator->addItem($this->object->getTitle(), $this->ctrl->getLinkTarget($this,
"showOverview"),
"",
$_GET[
"ref_id"]);
940 $ilTabs->activateTab(
"content");
947 $tpl->addJavaScript(
"./Modules/Exercise/js/ilExcPresentation.js");
951 $this->object->getId(),
952 $this->object->getRefId(),
957 if ($this->certificateDownloadValidator->isCertificateDownloadable((
int)
$ilUser->getId(), (
int) $this->object->getId())) {
958 $ilToolbar->addButton(
959 $this->lng->txt(
"certificate"),
960 $this->ctrl->getLinkTarget($this,
"outCertificate")
967 $acc->setId(
"exc_ow_" . $this->object->getId());
970 $random_manager = $this->service->getRandomAssignmentManager($this->
object);
971 foreach ($ass_data as
$ass) {
972 if (!$random_manager->isAssignmentVisible(
$ass->getId(), $this->user->getId())) {
978 if (isset(
$_GET[
"ass_id_goto"]) &&
979 (
int)
$_GET[
"ass_id_goto"] ==
$ass->getId()) {
984 $ass_gui->getOverviewHeader(
$ass),
985 $ass_gui->getOverviewBody(
$ass),
990 if (count($ass_data) < 2) {
991 $acc->setBehaviour(
"FirstOpen");
993 $acc->setUseSessionStorage(
true);
996 $mtpl =
new ilTemplate(
"tpl.exc_ass_overview.html",
true,
true,
"Modules/Exercise");
997 $mtpl->setVariable(
"CONTENT", $acc->getHTML());
999 $tpl->setContent($mtpl->get());
1005 $this->tabs_gui->activateTab(
"settings");
1006 $this->tabs_gui->activateSubTab(
"certificate");
1009 $output_gui = $guiFactory->create($this->
object);
1011 $output_gui->certificateEditor();
1018 $database =
$DIC->database();
1019 $logger =
$DIC->logger()->root();
1023 $objectId = (int) $this->object->getId();
1025 if (
false === $this->certificateDownloadValidator->isCertificateDownloadable(
$ilUser->getId(), $objectId)) {
1027 $this->ctrl->redirect($this);
1031 $pdfGenerator =
new ilPdfGenerator($ilUserCertificateRepository, $logger);
1037 $this->lng->txt(
'error_creating_certificate_pdf')
1040 $pdfAction->downloadPdf((
int)
$ilUser->getId(), (
int) $objectId);
1055 if (!$state->getCommonDeadline() && $state->getRelativeDeadline()) {
1056 $idl = $state->getIndividualDeadlineObject();
1057 $idl->setStartingTimestamp(time());
1062 $ilCtrl->redirect($this,
"showOverview");
1073 $random_manager =
$service->getRandomAssignmentManager($this->
object);
1074 if ($random_manager->needsStart()) {
1075 $gui = $this->exercise_ui->getRandomAssignmentGUI();
1076 $gui->renderStartPage();
if(!defined('PATH_SEPARATOR')) $GLOBALS['_PEAR_default_error_mode']
An exception for terminatinating execution or to throw for unit testing.
Accordion user interface class.
Validates if an active certificate is stored in the database and can be downloaded by the user.
Just a wrapper class to create Unit Test for other classes.
This class represents an option in a checkbox group.
static getInstanceFromAjaxCall()
(Re-)Build instance from ajax call
static _lookupContainerSetting($a_id, $a_keyword, $a_default_value=null)
Lookup a container setting.
Class ilExAssignmentEditorGUI.
GUI class for exercise assignments.
static count($a_ex_id)
Order assignments by deadline date.
static countMandatory($a_ex_id)
Count the number of mandatory assignments.
static getInstancesByExercise($a_exc_id)
static lookupExerciseId($a_ass_id)
Lookup excercise id for assignment id.
static getAssignmentDataOfExercise($a_exc_id)
Get assignments data of an exercise in an array.
static getInstanceByIds($a_ass_id, $a_user_id=0)
Get instance by IDs (recommended for consumer code)
Class ilExcCriteriaCatalogueGUI.
Exercise exceptions class.
Class ilExerciseManagementGUI.
Export User Interface Class.
static _lookupMark($a_usr_id, $a_obj_id)
static _lookupComment($a_usr_id, $a_obj_id)
static checkAccess($a_ref_id, $a_allow_only_read=true)
check access to learning progress
const LP_CONTEXT_REPOSITORY
Class ilObjUserTrackingGUI.
static _tracProgress($a_user_id, $a_obj_id, $a_ref_id, $a_obj_type='')
static setNotification($type, $user_id, $id, $status=true)
Set notification status for object and user.
static hasNotification($type, $user_id, $id)
Check notification status for object and user.
const TYPE_EXERCISE_SUBMISSION
addLocatorItems()
Add locator item.
infoScreenObject()
this one is called from the info button in the repository not very nice to set cmdClass/Cmd manually,...
viewObject()
viewObject container presentation for "administration -> repository, trash, permissions"
getEditFormCustomValues(array &$a_values)
Get values for properties form.
handleRandomAssignmentEntryPage()
Display random assignment start page, if necessary.
updateCustom(ilPropertyFormGUI $a_form)
Insert custom update form values into object.
executeCommand()
execute command
static _goto($a_target, $a_raw)
redirect script
getTabs()
adds tabs to tab gui object
startAssignmentObject()
Start assignment with relative deadline.
initEditCustomForm(ilPropertyFormGUI $a_form)
Init properties form.
showOverviewObject()
Show overview of assignments.
__construct($a_data, $a_id, $a_call_by_reference, $a_prepare_output=true)
Constructor @access public.
afterSave(ilObject $a_new_object)
Post (successful) object creation hook.
addContentSubTabs($a_activate)
Add subtabs of content view.
$certificateDownloadValidator
const TUTOR_FEEDBACK_TEXT
const TUTOR_FEEDBACK_MAIL
const TUTOR_FEEDBACK_FILE
GUI class for the workflow of copying objects.
Class ilObjectGUI Basic methods of all Output classes.
checkPermission($a_perm, $a_cmd="", $a_type="", $a_ref_id=null)
Check permission and redirect on error.
prepareOutput($a_show_subobjects=true)
prepare output
static _gotoRepositoryRoot($a_raise_error=false)
Goto repository root.
checkPermissionBool($a_perm, $a_cmd="", $a_type="", $a_ref_id=null)
Check permission.
addHeaderAction()
Add header action menu.
getObjectService()
Get object service.
const ORGU_POSITION_ACCESS
static initServiceSettingsForm($a_obj_id, ilPropertyFormGUI $form, $services)
Init service settings form.
static updateServiceSettingsForm($a_obj_id, ilPropertyFormGUI $form, $services)
Update service settings.
Class ilObject Basic functions for all objects.
static _lookupObjId($a_id)
static _lookupTitle($a_id)
lookup object title
getRefId()
get reference id @access public
static getInstance()
Get instance.
New PermissionGUI (extends from old ilPermission2GUI) RBAC related output.
Class ilPortfolioExerciseGUI.
This class represents an option in a radio group.
special template class to simplify handling of ITX/PEAR
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
$a
thx to https://mlocati.github.io/php-cs-fixer-configurator for the examples
Class ilPdfGeneratorConstantsTest.