From 8872b0dd1a8c86e3ae03df82dfc49d4e91125eba Mon Sep 17 00:00:00 2001
From: Nathaniel Catchpole <catch@35733.no-reply.drupal.org>
Date: Thu, 12 Jan 2017 20:01:38 +0000
Subject: [PATCH] Issue #2842942 by alexpott: Fix tempnam() usage in PHP7.1

---
 .../src/Tests/ConfigTranslationUiTest.php      |  4 ++--
 core/modules/locale/src/Form/ExportForm.php    | 18 +++++++++++++++---
 .../locale/src/Tests/LocaleExportTest.php      |  4 ++--
 .../src/Tests/LocaleImportFunctionalTest.php   |  2 +-
 .../src/Tests/LocalePluralFormatTest.php       |  2 +-
 .../system/src/Tests/Theme/TwigTransTest.php   |  2 +-
 6 files changed, 22 insertions(+), 10 deletions(-)

diff --git a/core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php b/core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php
index b69357ef250c..5018efa21f48 100644
--- a/core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php
+++ b/core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php
@@ -648,7 +648,7 @@ public function testPluralConfigStringsSourceElements() {
 
     foreach ($languages as $langcode => $data) {
       // Import a .po file to add a new language with a given number of plural forms
-      $name = tempnam('temporary://', $langcode . '_') . '.po';
+      $name = \Drupal::service('file_system')->tempnam('temporary://', $langcode . '_') . '.po';
       file_put_contents($name, $this->getPoFile($data['plurals']));
       $this->drupalPostForm('admin/config/regional/translate/import', array(
         'langcode' => $langcode,
@@ -684,7 +684,7 @@ public function testPluralConfigStrings() {
 
     // First import a .po file with multiple plural forms.
     // This will also automatically add the 'sl' language.
-    $name = tempnam('temporary://', "sl_") . '.po';
+    $name = \Drupal::service('file_system')->tempnam('temporary://', "sl_") . '.po';
     file_put_contents($name, $this->getPoFile(4));
     $this->drupalPostForm('admin/config/regional/translate/import', array(
       'langcode' => 'sl',
diff --git a/core/modules/locale/src/Form/ExportForm.php b/core/modules/locale/src/Form/ExportForm.php
index 4a4695b5c246..47a3aeab129b 100644
--- a/core/modules/locale/src/Form/ExportForm.php
+++ b/core/modules/locale/src/Form/ExportForm.php
@@ -3,6 +3,7 @@
 namespace Drupal\locale\Form;
 
 use Drupal\Component\Gettext\PoStreamWriter;
+use Drupal\Core\File\FileSystemInterface;
 use Drupal\Core\Form\FormBase;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Language\LanguageInterface;
@@ -23,14 +24,24 @@ class ExportForm extends FormBase {
    */
   protected $languageManager;
 
+  /**
+   * The file system service.
+   *
+   * @var \Drupal\Core\File\FileSystemInterface
+   */
+  protected $fileSystem;
+
   /**
    * Constructs a new ExportForm.
    *
    * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
    *   The language manager.
+   * @param \Drupal\Core\File\FileSystemInterface $file_system
+   *   The file system service.
    */
-  public function __construct(LanguageManagerInterface $language_manager) {
+  public function __construct(LanguageManagerInterface $language_manager, FileSystemInterface $file_system) {
     $this->languageManager = $language_manager;
+    $this->fileSystem = $file_system;
   }
 
   /**
@@ -38,7 +49,8 @@ public function __construct(LanguageManagerInterface $language_manager) {
    */
   public static function create(ContainerInterface $container) {
     return new static(
-      $container->get('language_manager')
+      $container->get('language_manager'),
+      $container->get('file_system')
     );
   }
 
@@ -147,7 +159,7 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
 
     $item = $reader->readItem();
     if (!empty($item)) {
-      $uri = tempnam('temporary://', 'po_');
+      $uri = $this->fileSystem->tempnam('temporary://', 'po_');
       $header = $reader->getHeader();
       $header->setProjectName($this->config('system.site')->get('name'));
       $header->setLanguageName($language_name);
diff --git a/core/modules/locale/src/Tests/LocaleExportTest.php b/core/modules/locale/src/Tests/LocaleExportTest.php
index 3d861de15f8f..f9cd2ea7ce42 100644
--- a/core/modules/locale/src/Tests/LocaleExportTest.php
+++ b/core/modules/locale/src/Tests/LocaleExportTest.php
@@ -43,7 +43,7 @@ protected function setUp() {
   public function testExportTranslation() {
     // First import some known translations.
     // This will also automatically add the 'fr' language.
-    $name = tempnam('temporary://', "po_") . '.po';
+    $name = \Drupal::service('file_system')->tempnam('temporary://', "po_") . '.po';
     file_put_contents($name, $this->getPoFile());
     $this->drupalPostForm('admin/config/regional/translate/import', array(
       'langcode' => 'fr',
@@ -62,7 +62,7 @@ public function testExportTranslation() {
     $this->assertRaw('msgstr "lundi"', 'French translations present in exported file.');
 
     // Import some more French translations which will be marked as customized.
-    $name = tempnam('temporary://', "po2_") . '.po';
+    $name = \Drupal::service('file_system')->tempnam('temporary://', "po2_") . '.po';
     file_put_contents($name, $this->getCustomPoFile());
     $this->drupalPostForm('admin/config/regional/translate/import', array(
       'langcode' => 'fr',
diff --git a/core/modules/locale/src/Tests/LocaleImportFunctionalTest.php b/core/modules/locale/src/Tests/LocaleImportFunctionalTest.php
index 0b69da257f82..7fb93d9309f6 100644
--- a/core/modules/locale/src/Tests/LocaleImportFunctionalTest.php
+++ b/core/modules/locale/src/Tests/LocaleImportFunctionalTest.php
@@ -369,7 +369,7 @@ public function testCreatedLanguageTranslation() {
    *   (optional) Additional options to pass to the translation import form.
    */
   public function importPoFile($contents, array $options = array()) {
-    $name = tempnam('temporary://', "po_") . '.po';
+    $name = \Drupal::service('file_system')->tempnam('temporary://', "po_") . '.po';
     file_put_contents($name, $contents);
     $options['files[file]'] = $name;
     $this->drupalPostForm('admin/config/regional/translate/import', $options, t('Import'));
diff --git a/core/modules/locale/src/Tests/LocalePluralFormatTest.php b/core/modules/locale/src/Tests/LocalePluralFormatTest.php
index 00fe8d58a453..c0e9041f0515 100644
--- a/core/modules/locale/src/Tests/LocalePluralFormatTest.php
+++ b/core/modules/locale/src/Tests/LocalePluralFormatTest.php
@@ -351,7 +351,7 @@ public function testPluralEditExport() {
    *   Additional options to pass to the translation import form.
    */
   public function importPoFile($contents, array $options = array()) {
-    $name = tempnam('temporary://', "po_") . '.po';
+    $name = \Drupal::service('file_system')->tempnam('temporary://', "po_") . '.po';
     file_put_contents($name, $contents);
     $options['files[file]'] = $name;
     $this->drupalPostForm('admin/config/regional/translate/import', $options, t('Import'));
diff --git a/core/modules/system/src/Tests/Theme/TwigTransTest.php b/core/modules/system/src/Tests/Theme/TwigTransTest.php
index b8718e7fa870..ef6fe05074f0 100644
--- a/core/modules/system/src/Tests/Theme/TwigTransTest.php
+++ b/core/modules/system/src/Tests/Theme/TwigTransTest.php
@@ -209,7 +209,7 @@ protected function installLanguages() {
         $this->assertRaw('"edit-languages-' . $langcode . '-weight"', 'Language code found.');
 
         // Import the custom .po contents for the language.
-        $filename = tempnam('temporary://', "po_") . '.po';
+        $filename = \Drupal::service('file_system')->tempnam('temporary://', "po_") . '.po';
         file_put_contents($filename, $contents);
         $options = array(
           'files[file]' => $filename,
-- 
GitLab