ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilTestExportGUI.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
24use ILIAS\UI\Factory as UIFactory;
25use ILIAS\UI\Renderer as UIRenderer;
28use ILIAS\Test\ExportImport\Types as ExportImportTypes;
29use Psr\Http\Message\ServerRequestInterface;
30
39{
40 public function __construct(
42 private readonly ilDBInterface $db,
43 private readonly ilObjectDataCache $obj_cache,
44 private readonly ilObjUser $user,
45 private readonly UIFactory $ui_factory,
46 private readonly UIRenderer $ui_renderer,
47 private readonly IRSS $irss,
48 private readonly ServerRequestInterface $request,
49 private readonly DBRepository $export_repository,
50 private readonly Filesystem $temp_file_system,
51 private readonly ilTestParticipantAccessFilterFactory $participant_access_filter_factory,
52 private readonly ilTestHTMLGenerator $html_generator
53 ) {
55 }
56
61 {
62 $this->ctrl->setParameterByClass(self::class, 'export_results', 1);
63 $manager = $this->export_handler->manager()->handler();
64 $export_info = $manager->getExportInfoWithObject(
65 $this->obj,
66 time(),
67 $this->export_handler->consumer()->exportConfig()->allExportConfigs()
68 );
69 $element = $manager->createExport(
70 $this->il_user->getId(),
71 $export_info,
72 ''
73 );
74
75 $file_name = $element->getIRSSInfo()->getFileName();
76 $this->temp_file_system->writeStream(
77 $file_name,
78 $this->irss->consume()->stream($element->getIRSSInfo()->getResourceId())->getStream()
79 );
80 $temp_stream = $this->temp_file_system->readStream($file_name);
81 $rid = $this->irss->manage()->stream(
82 $temp_stream,
84 $element->getIRSSInfo()->getFileName()
85 );
86
87 $temp_stream->close();
88
89 $this->temp_file_system->delete($file_name);
90
91 $this->export_repository->store(
92 $this->obj->getId(),
93 ExportImportTypes::XML_WITH_RESULTS,
94 $rid
95 );
96 $this->export_options->getById('expxml')->onDeleteFiles(
97 $this->context,
98 $this->export_handler->consumer()->file()->identifier()->collection()->withElement(
99 $this->export_handler->consumer()->file()->identifier()->handler()->withIdentifier(
100 $element->getIRSSInfo()->getResourceIdSerialized()
101 )
102 )
103 );
104
105 $this->tpl->setOnScreenMessage(
107 $this->lng->txt("exp_file_created"),
108 true
109 );
110 $this->ctrl->redirect($this, self::CMD_LIST_EXPORT_FILES);
111 }
112
113 public function createTestArchiveExport()
114 {
115 if ($this->access->checkAccess('write', '', $this->obj->getRefId())) {
116 // prepare generation before contents are processed (for mathjax)
117 $evaluation = new ilTestEvaluationFactory($this->db, $this->obj);
118 $allActivesPasses = $evaluation->getAllActivesPasses();
119 $participantData = new ilTestParticipantData($this->db, $this->lng);
120 $participantData->setActiveIdsFilter(array_keys($allActivesPasses));
121 $participantData->load($this->obj->getTestId());
122
123 $archiveService = new ilTestArchiveService(
124 $this->obj,
125 $this->lng,
126 $this->db,
127 $this->user,
128 $this->ui_factory,
129 $this->ui_renderer,
130 $this->irss,
131 $this->request,
132 $this->obj_cache,
133 $this->participant_access_filter_factory,
134 $this->html_generator
135 );
136 $archiveService->setParticipantData($participantData);
137 $archiveService->archivePassesByActives($allActivesPasses);
138
139 $test_id = $this->obj->getId();
140 $test_ref = $this->obj->getRefId();
141 $archive_exp = new ilTestArchiver(
142 $this->lng,
143 $this->db,
144 $this->user,
145 $this->ui_factory,
146 $this->ui_renderer,
147 $this->irss,
148 $this->request,
149 $this->obj_cache,
150 $this->participant_access_filter_factory,
151 $this->parent_gui->getTestObject()->getTestLogViewer(),
152 $test_id,
153 $test_ref
154 );
155
156 $scoring = new TestScoring($this->obj, $this->user, $this->db, $this->lng);
157 $best_solution = $scoring->calculateBestSolutionForTest();
158
159 $tmpFileName = ilFileUtils::ilTempnam();
160 if (!is_dir($tmpFileName)) {
161 ilFileUtils::makeDirParents($tmpFileName);
162 }
163
164 $archive_exp->handInTestBestSolution($best_solution);
165
166 $archive_exp->updateTestArchive();
167 $archive_exp->compressTestArchive();
168 } else {
169 $this->tpl->setOnScreenMessage('info', 'cannot_export_archive', true);
170 }
171 $this->ctrl->redirectByClass('iltestexportgui');
172 }
173}
Builds a Color from either hex- or rgb values.
Definition: Factory.php:31
Export User Interface Class.
static makeDirParents(string $a_dir)
Create a new directory and all parent directories.
static ilTempnam(?string $a_temp_path=null)
Returns a unique and non existing Path for e temporary file or directory.
Class ilObjTestGUI.
User class.
class ilObjectDataCache
Export User Interface Class.
__construct(ilObjTestGUI $parent_gui, private readonly ilDBInterface $db, private readonly ilObjectDataCache $obj_cache, private readonly ilObjUser $user, private readonly UIFactory $ui_factory, private readonly UIRenderer $ui_renderer, private readonly IRSS $irss, private readonly ServerRequestInterface $request, private readonly DBRepository $export_repository, private readonly Filesystem $temp_file_system, private readonly ilTestParticipantAccessFilterFactory $participant_access_filter_factory, private readonly ilTestHTMLGenerator $html_generator)
createTestExportWithResults()
Create test export file.
Class that handles PDF generation for test and assessment.
The filesystem interface provides the public interface for the Filesystem service API consumer.
Definition: Filesystem.php:37
An entity that renders components to a string output.
Definition: Renderer.php:31
Interface ilDBInterface.
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc