From 6e456bc63a039905abc6677f1adaa8aff774f8a6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Philipp=20Sch=C3=BCttl=C3=B6ffel?=
 <schuettloeffel@zqs.uni-hannover.de>
Date: Mon, 26 Feb 2024 10:57:47 +0000
Subject: [PATCH] Resolve "/shared/modul/description/ verwendet falschen
 Sprachicon Pfad"

Closes #2757

Merge request studip/studip!1869
---
 app/views/materialien/files/add_dokument.php |   2 +-
 app/views/materialien/files/details.php      | 164 +++++++++----------
 app/views/materialien/files/index.php        |   2 +-
 app/views/materialien/files/range.php        |   2 +-
 app/views/module/module/details.php          |   3 +-
 app/views/module/module/modul.php            |   2 +-
 app/views/module/module/module.php           |   3 +-
 app/views/module/module/modulteil.php        |   2 +-
 app/views/shared/deskriptor_language.php     |   2 +-
 app/views/shared/modul/description.php       |   2 +-
 lib/classes/MVV.class.php                    |  13 ++
 11 files changed, 104 insertions(+), 93 deletions(-)

diff --git a/app/views/materialien/files/add_dokument.php b/app/views/materialien/files/add_dokument.php
index effdde9c08a..e53d9171701 100644
--- a/app/views/materialien/files/add_dokument.php
+++ b/app/views/materialien/files/add_dokument.php
@@ -24,7 +24,7 @@
     <? foreach($GLOBALS['MVV_LANGUAGES']['values'] as $key => $entry) : ?>
         <tr>
             <td rowspan="2">
-                <?= Assets::img('languages/lang_' . mb_strtolower($key) . '.gif') ?>
+                <?= Assets::img(MVV::getContentLanguageImagePath($key), ['alt' => $entry['name'], 'size' => 24]) ?>
             </td>
             <td>
                 <label>
diff --git a/app/views/materialien/files/details.php b/app/views/materialien/files/details.php
index af72b0a2c32..c3954a83921 100644
--- a/app/views/materialien/files/details.php
+++ b/app/views/materialien/files/details.php
@@ -1,82 +1,82 @@
-<td colspan="10">
-    <table class="default nohover">
-        <tr>
-            <td><?= _('Jahr'); ?></td>
-            <td><?= htmlReady($doc_year); ?></td>
-        </tr>
-
-        <tr>
-            <td><?= _('Art der Datei '); ?></td>
-            <td><?= htmlReady($GLOBALS['MVV_DOCUMENTS']['TYPE']['values'][$doc_type]['name']); ?></td>
-        </tr>
-
-        <tr>
-            <td><?= _('Dokumente'); ?></td>
-            <td>
-                <ul class="list-unstyled">
-                <? foreach($documents as $key => $document): ?>
-                    <li>
-                        <?= Assets::img('languages/lang_' . mb_strtolower($key) . '.gif') ?>
-                        <b><?= htmlReady($document->getDisplayName()); ?></b>
-                        <? if($document->file_ref->isLink()): ?>
-                            <a href="<?= htmlReady($document->getFilename()); ?>" target="_blank"><?= htmlReady($document->getFilename()); ?></a>
-                        <? else: ?>
-                            <?= htmlReady($document->getFilename()); ?>
-                        <? endif; ?>
-                    </li>
-                <? endforeach; ?>
-                </ul>
-            </td>
-        </tr>
-
-        <tr>
-            <td><?= _('Kategoriezuordnung'); ?></td>
-            <td><?= htmlReady($GLOBALS['MVV_DOCUMENTS']['CATEGORY']['values'][$doc_cat]['name']); ?></td>
-        </tr>
-
-        <tr>
-            <td><?= _('Schlagwörter'); ?></td>
-            <td>
-                <? if ($doc_tags): ?>
-                <ul>
-                <? foreach(explode(';', $doc_tags) as $tag): ?>
-                    <li><?= htmlReady($GLOBALS['MVV_DOCUMENTS']['TAG']['values'][$tag]['name']); ?></li>
-                <? endforeach; ?>
-                </ul>
-                <? endif; ?>
-            </td>
-        </tr>
-
-        <tr>
-            <td><?= _('Sichtbarkeit nach außen'); ?></td>
-            <td><?= $doc_extvisible?_('sichtbar'):_('unsichtbar'); ?></td>
-        </tr>
-
-        <tr>
-            <td><?= _('Zuordnungen'); ?></td>
-            <td>
-
-
-            <? if (!sizeof($relations)) : ?>
-                <?= _('Das Dokument wurde noch nicht referenziert.') ?>
-            <? else : ?>
-                <? foreach ($relations as $object_type => $relation) : ?>
-                    <strong><?= htmlReady($object_type::getClassDisplayName()) ?></strong>
-                    <ul class="default">
-                    <? foreach ($relation as $rel) : ?>
-                        <? $related_object = $object_type::find($rel['range_id']) ?>
-                        <li>
-                            <a href="<?= $this->controller->url_for('materialien/files/dispatch', mb_strtolower($object_type), $rel['range_id']) ?>">
-                                <?= $related_object->getDisplayName() ?>
-                            </a>
-                        </li>
-                    <? endforeach; ?>
-                    </ul>
-                <? endforeach; ?>
-            <? endif; ?>
-
-            </td>
-        </tr>
-
-    </table>
-</td>
+<td colspan="10">
+    <table class="default nohover">
+        <tr>
+            <td><?= _('Jahr'); ?></td>
+            <td><?= htmlReady($doc_year); ?></td>
+        </tr>
+
+        <tr>
+            <td><?= _('Art der Datei '); ?></td>
+            <td><?= htmlReady($GLOBALS['MVV_DOCUMENTS']['TYPE']['values'][$doc_type]['name']); ?></td>
+        </tr>
+
+        <tr>
+            <td><?= _('Dokumente'); ?></td>
+            <td>
+                <ul class="list-unstyled">
+                <? foreach($documents as $key => $document): ?>
+                    <li>
+                        <?= Assets::img(MVV::getContentLanguageImagePath($key), ['size' => 24]) ?>
+                        <b><?= htmlReady($document->getDisplayName()); ?></b>
+                        <? if($document->file_ref->isLink()): ?>
+                            <a href="<?= htmlReady($document->getFilename()); ?>" target="_blank"><?= htmlReady($document->getFilename()); ?></a>
+                        <? else: ?>
+                            <?= htmlReady($document->getFilename()); ?>
+                        <? endif; ?>
+                    </li>
+                <? endforeach; ?>
+                </ul>
+            </td>
+        </tr>
+
+        <tr>
+            <td><?= _('Kategoriezuordnung'); ?></td>
+            <td><?= htmlReady($GLOBALS['MVV_DOCUMENTS']['CATEGORY']['values'][$doc_cat]['name']); ?></td>
+        </tr>
+
+        <tr>
+            <td><?= _('Schlagwörter'); ?></td>
+            <td>
+                <? if ($doc_tags): ?>
+                <ul>
+                <? foreach(explode(';', $doc_tags) as $tag): ?>
+                    <li><?= htmlReady($GLOBALS['MVV_DOCUMENTS']['TAG']['values'][$tag]['name']); ?></li>
+                <? endforeach; ?>
+                </ul>
+                <? endif; ?>
+            </td>
+        </tr>
+
+        <tr>
+            <td><?= _('Sichtbarkeit nach außen'); ?></td>
+            <td><?= $doc_extvisible?_('sichtbar'):_('unsichtbar'); ?></td>
+        </tr>
+
+        <tr>
+            <td><?= _('Zuordnungen'); ?></td>
+            <td>
+
+
+            <? if (!sizeof($relations)) : ?>
+                <?= _('Das Dokument wurde noch nicht referenziert.') ?>
+            <? else : ?>
+                <? foreach ($relations as $object_type => $relation) : ?>
+                    <strong><?= htmlReady($object_type::getClassDisplayName()) ?></strong>
+                    <ul class="default">
+                    <? foreach ($relation as $rel) : ?>
+                        <? $related_object = $object_type::find($rel['range_id']) ?>
+                        <li>
+                            <a href="<?= $this->controller->url_for('materialien/files/dispatch', mb_strtolower($object_type), $rel['range_id']) ?>">
+                                <?= $related_object->getDisplayName() ?>
+                            </a>
+                        </li>
+                    <? endforeach; ?>
+                    </ul>
+                <? endforeach; ?>
+            <? endif; ?>
+
+            </td>
+        </tr>
+
+    </table>
+</td>
diff --git a/app/views/materialien/files/index.php b/app/views/materialien/files/index.php
index 10f8d7a7e39..1b00cec3d4d 100644
--- a/app/views/materialien/files/index.php
+++ b/app/views/materialien/files/index.php
@@ -47,7 +47,7 @@
             </td>
             <td class="dont-hide">
             <? foreach ($mvv_file->file_refs as $fileref) : ?>
-                <?= Assets::img('languages/lang_' . mb_strtolower($fileref->file_language) . '.gif') ?>
+                <?= Assets::img(MVV::getContentLanguageImagePath($fileref->file_language), ['size' => '24']) ?>
             <? endforeach; ?>
             </td>
             <td class="dont-hide"><?= htmlReady($GLOBALS['MVV_DOCUMENTS']['TYPE']['values'][$mvv_file->type]['name']) ?></td>
diff --git a/app/views/materialien/files/range.php b/app/views/materialien/files/range.php
index 8044b7acfba..bbf24755dd7 100644
--- a/app/views/materialien/files/range.php
+++ b/app/views/materialien/files/range.php
@@ -63,7 +63,7 @@
             </td>
             <td>
                 <? foreach ($mvv_file->file_refs as $fileref) : ?>
-                    <?= Assets::img('languages/lang_' . mb_strtolower($fileref->file_language) . '.gif') ?>
+                    <?= Assets::img(MVV::getContentLanguageImagePath($fileref->file_language), ['size' => 24]) ?>
                 <? endforeach; ?>
             </td>
             <td><?= htmlReady($GLOBALS['MVV_DOCUMENTS']['TYPE']['values'][$mvv_file->type]['name']); ?></td>
diff --git a/app/views/module/module/details.php b/app/views/module/module/details.php
index 694d8affd92..4509d520e34 100644
--- a/app/views/module/module/details.php
+++ b/app/views/module/module/details.php
@@ -23,8 +23,7 @@
                             <? foreach ($modulteil->deskriptoren->getAvailableTranslations() as $language) : ?>
                                 <? $lang = $GLOBALS['MVV_MODUL_DESKRIPTOR']['SPRACHE']['values'][$language]; ?>
                                 <a href="<?= $controller->action_link('modulteil/' . join('/', [$modulteil->id, $institut_id]), ['display_language' => $language]) ?>">
-                                    <img src="<?= Assets::image_path('languages/lang_' . mb_strtolower($language) . '.gif') ?>"
-                                         alt="<?= $lang['name'] ?>" title="<?= $lang['name'] ?>">
+                                    <?= Assets::img(MVV::getContentLanguageImagePath($language), ['alt' => $lang['name'], 'size' => 24]) ?>
                                 </a>
                             <? endforeach; ?>
                         <? endif; ?>
diff --git a/app/views/module/module/modul.php b/app/views/module/module/modul.php
index ba76e33eae4..e209a1808b4 100644
--- a/app/views/module/module/modul.php
+++ b/app/views/module/module/modul.php
@@ -694,6 +694,6 @@ if ($GLOBALS['MVV_MODUL']['SPRACHE']['default'] != $display_language) {
 </form>
 <? if (!$def_lang) : ?>
     <script>
-        jQuery('#modul_form').find('textarea, input[type=text]').after('<div style="padding-top:10px;"><a href="#" title="<?= _('Originalfassung anzeigen') ?>" class="mvv-show-original" data-type="modul"><img src="<?= Assets::image_path('languages/lang_' . mb_strtolower($modul->getDefaultLanguage()) . '.gif') ?>" alt="<?= _('Originalfassung') ?>"></a></div>');
+        jQuery('#modul_form').find('textarea, input[type=text]').after('<div style="padding-top:10px;"><a href="#" title="<?= _('Originalfassung anzeigen') ?>" class="mvv-show-original" data-type="modul"><?= Assets::img(MVV::getContentLanguageImagePath($modul->getDefaultLanguage()), ['alt' => _('Originalfassung'), 'size' => 24]) ?></a></div>');
     </script>
 <? endif; ?>
diff --git a/app/views/module/module/module.php b/app/views/module/module/module.php
index 09cd3f3de2c..271e3f9d432 100644
--- a/app/views/module/module/module.php
+++ b/app/views/module/module/module.php
@@ -47,8 +47,7 @@
                     <? foreach ($languages as $language) : ?>
                         <? $lang = $GLOBALS['MVV_MODUL_DESKRIPTOR']['SPRACHE']['values'][$language]; ?>
                         <a href="<?= $controller->action_link('modul/' . $modul->id . '/', ['display_language' => $language]) ?>">
-                            <img src="<?= Assets::image_path('languages/lang_' . mb_strtolower($language) . '.gif') ?>"
-                                 alt="<?= $lang['name'] ?>" title="<?= $lang['name'] ?>">
+                            <?= Assets::img(MVV::getContentLanguageImagePath($language), ['alt' => $lang['name'], 'size' => 24]) ?>
                         </a>
                     <? endforeach; ?>
                 <? endif; ?>
diff --git a/app/views/module/module/modulteil.php b/app/views/module/module/modulteil.php
index cbd12797a7d..ad68edee929 100644
--- a/app/views/module/module/modulteil.php
+++ b/app/views/module/module/modulteil.php
@@ -478,6 +478,6 @@ if ($GLOBALS['MVV_MODULTEIL']['SPRACHE']['default'] != $display_language) {
 </form>
 <? if (!$def_lang) : ?>
     <script>
-        jQuery('#modulteil_form').find('textarea, input[type=text]').after('<div style="padding-top:10px;"><a href="#" title="<?= _('Originalfassung anzeigen') ?>" class="mvv-show-original" data-type="modulteil"><img src="<?= Assets::image_path('languages/lang_' . mb_strtolower($modul->getDefaultLanguage()) . '.gif') ?>" alt="<?= _('Originalfassung') ?>"></a></div>');
+        jQuery('#modulteil_form').find('textarea, input[type=text]').after('<div style="padding-top:10px;"><a href="#" title="<?= _('Originalfassung anzeigen') ?>" class="mvv-show-original" data-type="modulteil"><?= Assets::img(MVV::getContentLanguageImagePath($modul->getDefaultLanguage()), ['alt' => _('Originalfassung'), 'size' => 24]) ?></a></div>');
     </script>
 <? endif; ?>
diff --git a/app/views/shared/deskriptor_language.php b/app/views/shared/deskriptor_language.php
index ff2a43398c4..44cdb6502f3 100644
--- a/app/views/shared/deskriptor_language.php
+++ b/app/views/shared/deskriptor_language.php
@@ -3,7 +3,7 @@
 <? foreach ($GLOBALS[strtoupper($table)]['SPRACHE']['values'] as $lang => $value) : ?>
 <div style="padding-top:10px;">
     <a href="<?= URLHelper::getLink($link, ['display_language' => $lang]) ?>">
-        <img src="<?= Assets::image_path('languages/lang_' . mb_strtolower($lang) . '.gif') ?>" alt="<?= $value['name'] ?>">
+        <?= Assets::img(MVV::getContentLanguageImagePath($lang), ['alt' => $value['name'], 'size' => 24]) ?>
         <?= $value['name'] ?> (<?= in_array($lang, $languages) ? 'bearbeiten' : 'neu anlegen' ?>)
         <?= $lang == $sprache ? Icon::create('accept', 'accept', [])->asImg() : '' ?>
     </a>
diff --git a/app/views/shared/modul/description.php b/app/views/shared/modul/description.php
index df6425f3b5f..59512bd94ea 100644
--- a/app/views/shared/modul/description.php
+++ b/app/views/shared/modul/description.php
@@ -3,7 +3,7 @@
     <? foreach ($modul->deskriptoren->getAvailableTranslations() as $language) : ?>
         <? $lang = $GLOBALS['MVV_MODUL_DESKRIPTOR']['SPRACHE']['values'][$language]; ?>
         <a data-dialog="size=auto;title='<?= htmlReady($modul->getDisplayName()) ?>'" href="<?= $controller->action_link('description/' . $modul->id . '/', ['display_language' => $language]) ?>">
-            <img src="<?= Assets::image_path('languages/lang_' . mb_strtolower($language) . '.gif') ?>" alt="<?= $lang['name'] ?>" title="<?= $lang['name'] ?>">
+            <?= Assets::img(MVV::getContentLanguageImagePath($language), ['alt' => $lang['name'], 'size' => 24]) ?>
         </a>
     <? endforeach; ?>
 </div>
diff --git a/lib/classes/MVV.class.php b/lib/classes/MVV.class.php
index a9274986659..67bbbebb167 100644
--- a/lib/classes/MVV.class.php
+++ b/lib/classes/MVV.class.php
@@ -833,4 +833,17 @@ class MVV implements Loggable {
         return $result;
     }
 
+    /**
+     * Returns imagepath for given language, used by MVV
+     * First tries $GLOBALS['CONTENT_LANGUAGES'], if not defined returns hardcoded path
+     *
+     * @param string $language e.g. 'DE'
+     * @return string path to language icon
+     */
+    public static function getContentLanguageImagePath($language): string
+    {
+        $content_language = $GLOBALS['MVV_MODUL_DESKRIPTOR']['SPRACHE']['values'][$language]['content_language'];
+        return 'languages/' . ($GLOBALS['CONTENT_LANGUAGES'][$content_language]?$GLOBALS['CONTENT_LANGUAGES'][$content_language]['picture']:'lang_' . mb_strtolower($language) . '.gif');
+    }
+
 }
-- 
GitLab