From 445ff455c599e7f11fbe171dc71e923b44a03f0e Mon Sep 17 00:00:00 2001
From: Nicole Cordes <typo3@cordes.co>
Date: Thu, 21 Apr 2016 16:22:48 +0200
Subject: [PATCH] [BUGFIX] Make language module accessible without internet
 connection

This patch adds the possibility to access the language module without
having an internet connection. You are able to activate and deactivate
languages but trying to update files will give you an error.

Resolves: #75820
Releases: master, 7.6
Change-Id: I27be7f34c76f680a4240e6c75c4a331d96467681
Reviewed-on: https://review.typo3.org/47840
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Tested-by: Wouter Wolters <typo3@wouterwolters.nl>
Reviewed-by: Morton Jonuschat <m.jonuschat@mojocode.de>
Tested-by: Morton Jonuschat <m.jonuschat@mojocode.de>
---
 .../Classes/Controller/LanguageController.php    |  2 +-
 .../lang/Classes/Service/TranslationService.php  | 16 ++++++++++++++--
 2 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/typo3/sysext/lang/Classes/Controller/LanguageController.php b/typo3/sysext/lang/Classes/Controller/LanguageController.php
index 37c916d57b3e..e5e3ee427c3c 100644
--- a/typo3/sysext/lang/Classes/Controller/LanguageController.php
+++ b/typo3/sysext/lang/Classes/Controller/LanguageController.php
@@ -166,7 +166,7 @@ class LanguageController extends ActionController
                 $result = $this->translationService->updateTranslation($extensionKey, $data['locale']);
                 $progress = round((($offset + 1) * 100) / $allCount, 2);
                 $response['result'][$data['locale']][$extensionKey] = $result[$data['locale']];
-                if (empty($result[$extensionKey][$data['locale']]['error'])) {
+                if (empty($result[$data['locale']]['error'])) {
                     $response['success'] = true;
                 } else {
                     // Could not update an extension, stop here!
diff --git a/typo3/sysext/lang/Classes/Service/TranslationService.php b/typo3/sysext/lang/Classes/Service/TranslationService.php
index 325bd14eec16..41dc1a0f2370 100644
--- a/typo3/sysext/lang/Classes/Service/TranslationService.php
+++ b/typo3/sysext/lang/Classes/Service/TranslationService.php
@@ -17,6 +17,7 @@ namespace TYPO3\CMS\Lang\Service;
 use TYPO3\CMS\Core\SingletonInterface;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Extbase\SignalSlot\Dispatcher;
+use TYPO3\CMS\Extensionmanager\Exception\ExtensionManagerException;
 use TYPO3\CMS\Extensionmanager\Utility\Repository\Helper;
 
 /**
@@ -70,7 +71,11 @@ class TranslationService implements SingletonInterface
      */
     public function injectRepositoryHelper(Helper $helper)
     {
-        $this->mirrorUrl = $helper->getMirrors(false)->getMirrorUrl();
+        try {
+            $this->mirrorUrl = $helper->getMirrors(false)->getMirrorUrl();
+        } catch (ExtensionManagerException $e) {
+            $this->mirrorUrl = '';
+        }
     }
 
     /**
@@ -108,15 +113,22 @@ class TranslationService implements SingletonInterface
      * @param string $extensionKey The extension key
      * @param string $locale Locale to update
      * @return int Translation state
+     * @throws \Exception
      */
     protected function updateTranslationForExtension($extensionKey, $locale)
     {
         if (empty($extensionKey) || empty($locale)) {
             return static::TRANSLATION_INVALID;
         }
+
+        $mirrorUrl = $this->getMirrorUrl($extensionKey);
+        if (empty($mirrorUrl)) {
+            throw new \Exception('Not able to fetch languages files due to missing mirror url.', 1461248062);
+        }
+
         $state = static::TRANSLATION_FAILED;
 
-        $updateResult = $this->terService->updateTranslation($extensionKey, $locale, $this->getMirrorUrl($extensionKey));
+        $updateResult = $this->terService->updateTranslation($extensionKey, $locale, $mirrorUrl);
         if ($updateResult === true) {
             $state = static::TRANSLATION_UPDATED;
         }
-- 
GitLab