ILIAS  release_8 Revision v8.19
All Data Structures Namespaces Files Functions Variables Modules Pages
class.ilDidacticTemplateIconHandler.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
6 
14 
21 {
22  protected const WEBDIR_PREFIX = 'ilDidacticTemplateIcons';
23 
25  protected ilLogger $logger;
27 
28  public function __construct(ilDidacticTemplateSetting $setting)
29  {
30  global $DIC;
31 
32  $this->settings = $setting;
33  $this->webDirectory = $DIC->filesystem()->web();
34  $this->logger = $DIC->logger()->otpl();
35  }
36 
37  public function handleUpload(FileUpload $upload, string $tmpname): void
38  {
39  if ($upload->hasUploads() && !$upload->hasBeenProcessed()) {
40  try {
41  $upload->process();
42  } catch (IllegalStateException $e) {
43  $this->logger->warning('File upload already processed: ' . $e->getMessage());
44  }
45  }
46  $this->initWebDir();
47  $result = $upload->getResults()[$tmpname] ?? false;
48  if ($result instanceof UploadResult && $result->isOK() && $result->getSize()) {
49  $this->delete();
50  $upload->moveOneFileTo(
51  $result,
52  self::WEBDIR_PREFIX,
53  Location::WEB,
54  $this->settings->getId() . '.svg'
55  );
56 
57  $this->settings->setIconIdentifier((string) $this->settings->getId());
58  $this->settings->update();
59  }
60  }
61 
62  public function writeSvg(string $svg): void
63  {
64  try {
65  $this->webDirectory->write(
66  self::WEBDIR_PREFIX . '/' . $this->settings->getId() . '.svg',
67  trim($svg)
68  );
69  $this->settings->setIconIdentifier((string) $this->settings->getId());
70  $this->settings->update();
71  } catch (Exception $e) {
72  $this->logger->warning('Error writing svg image from xml: ' . $e->getMessage());
73  }
74  }
75 
76  public function getAbsolutePath(): string
77  {
78  if ($this->webDirectory->has(self::WEBDIR_PREFIX . '/' . $this->settings->getIconIdentifier() . '.svg')) {
79  return ilFileUtils::getWebspaceDir() . '/' . self::WEBDIR_PREFIX . '/' . $this->settings->getIconIdentifier() . '.svg';
80  }
81 
82  return '';
83  }
84 
85  public function copy(ilDidacticTemplateSetting $original): void
86  {
87  if ($original->getIconHandler()->getAbsolutePath()) {
88  try {
89  $this->webDirectory->copy(
90  self::WEBDIR_PREFIX . '/' . $original->getIconIdentifier() . '.svg',
91  self::WEBDIR_PREFIX . '/' . $this->settings->getId() . '.svg'
92  );
93  } catch (Exception $e) {
94  $this->logger->warning('Copying icon failed with message: ' . $e->getMessage());
95  }
96  $this->settings->setIconIdentifier((string) $this->settings->getId());
97  } else {
98  $this->settings->setIconIdentifier("0");
99  }
100  $this->settings->update();
101  }
102 
103  public function delete(): void
104  {
105  if ($this->webDirectory->has(self::WEBDIR_PREFIX . '/' . $this->settings->getIconIdentifier() . '.svg')) {
106  try {
107  $this->webDirectory->delete(self::WEBDIR_PREFIX . '/' . $this->settings->getIconIdentifier() . '.svg');
108  $this->settings->setIconIdentifier('');
109  $this->settings->update();
110  } catch (Exception $e) {
111  $this->logger->warning('Deleting icon dfailed with message: ' . $e->getMessage());
112  }
113  }
114  }
115 
116  private function initWebDir(): void
117  {
118  if (!$this->webDirectory->has(self::WEBDIR_PREFIX)) {
119  try {
120  $this->webDirectory->createDir(self::WEBDIR_PREFIX);
121  } catch (IOException $e) {
122  $this->logger->error('Creating icon directory failed with message: ' . $e->getMessage());
123  } catch (IllegalStateException $e) {
124  $this->logger->warning('Creating icon directory failed with message: ' . $e->getMessage());
125  }
126  }
127  }
128 
129  public function toXml(ilXmlWriter $writer): ilXmlWriter
130  {
131  if ($this->settings->getIconIdentifier()) {
132  try {
133  if ($this->webDirectory->has(self::WEBDIR_PREFIX . '/' . $this->settings->getIconIdentifier() . '.svg')) {
134  $writer->xmlElement('icon', [], $this->webDirectory->read(
135  self::WEBDIR_PREFIX . '/' . $this->settings->getIconIdentifier() . '.svg'
136  ));
137  }
138  } catch (Exception $e) {
139  $this->logger->warning('Export xml failed with message: ' . $e->getMessage());
140  }
141  }
142  return $writer;
143  }
144 }
static getWebspaceDir(string $mode="filesystem")
get webspace directory
process()
Invokes all preprocessors for each uploaded file in the sequence they got registered.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
global $DIC
Definition: feed.php:28
hasUploads()
Return (bool)true if one ore more file-uploads are in the current request, (bool)false if not...
moveOneFileTo(UploadResult $uploadResult, string $destination, int $location=Location::STORAGE, string $file_name='', bool $override_existing=false)
Moves a single File (the attributes, metadata and upload-status of which are contained in UploadResul...
__construct(ilDidacticTemplateSetting $setting)
getResults()
Returns the results of the processing and moving operation of the uploaded files. ...
handleUpload(FileUpload $upload, string $tmpname)
Class FileUpload.
Definition: FileUpload.php:34
Icon handler for didactic template custom icons.
hasBeenProcessed()
Return (bool)true if the current upload has already been processed.
xmlElement(string $tag, $attrs=null, $data=null, $encode=true, $escape=true)
Writes a basic element (no children, just textual content)
copy(ilDidacticTemplateSetting $original)
Class FlySystemFileAccessTest disabled disabled disabled.