From edafea1f78e5cbb22fe53405ec6c4ebdabf784e9 Mon Sep 17 00:00:00 2001
From: Nathaniel Catchpole <catch@35733.no-reply.drupal.org>
Date: Mon, 8 Sep 2014 11:37:15 +0100
Subject: [PATCH] Issue #2332739 by YesCT, alexpott: Remove
 SortArray::sortByWeightAndTitle.

---
 .../Drupal/Component/Utility/SortArray.php    |  28 -----
 core/lib/Drupal/Core/Language/Language.php    |  11 +-
 .../Tests/Component/Utility/SortArrayTest.php | 102 ------------------
 .../Tests/Core/Language/LanguageUnitTest.php  |   6 +-
 4 files changed, 11 insertions(+), 136 deletions(-)

diff --git a/core/lib/Drupal/Component/Utility/SortArray.php b/core/lib/Drupal/Component/Utility/SortArray.php
index a8d9f0009e89..79688ec89699 100644
--- a/core/lib/Drupal/Component/Utility/SortArray.php
+++ b/core/lib/Drupal/Component/Utility/SortArray.php
@@ -92,34 +92,6 @@ public static function sortByTitleProperty($a, $b) {
      return static::sortByKeyString($a, $b, '#title');
    }
 
-  /**
-   * Sorts a structured array firstly by weight, then by title.
-   *
-   * @param array $a
-   *   The first item to compare.
-   * @param array $b
-   *   The second item to compare.
-   * @param string $weight_key
-   *   (optional) The weight key to use. Defaults to 'weight'.
-   * @param string $title_key
-   *   (optional) The title key to use. Defaults to 'title'.
-   *
-   * @return int
-   *   The comparison result for uasort().
-   */
-  public static function sortByWeightAndTitleKey($a, $b, $weight_key = 'weight', $title_key = 'title') {
-    $a = (array) $a;
-    $b = (array) $b;
-
-    $weight_cmp = static::sortByKeyInt($a, $b, $weight_key);
-
-    if ($weight_cmp === 0) {
-      return static::sortByKeyString($a, $b, $title_key);
-    }
-
-    return $weight_cmp;
-  }
-
   /**
    * Sorts a string array item by an arbitrary key.
    *
diff --git a/core/lib/Drupal/Core/Language/Language.php b/core/lib/Drupal/Core/Language/Language.php
index d8df0cb96afc..38553e4ee20b 100644
--- a/core/lib/Drupal/Core/Language/Language.php
+++ b/core/lib/Drupal/Core/Language/Language.php
@@ -206,12 +206,17 @@ public function setNegotiationMethodId($method_id) {
   /**
    * Sort language objects.
    *
-   * @param array $languages
+   * @param \Drupal\Core\Language\LanguageInterface[] $languages
    *   The array of language objects keyed by langcode.
    */
   public static function sort(&$languages) {
-    uasort($languages, function ($a, $b) {
-      return SortArray::sortByWeightAndTitleKey($a, $b, 'weight', 'name');
+    uasort($languages, function (LanguageInterface $a, LanguageInterface $b) {
+      $a_weight = $a->getWeight();
+      $b_weight = $b->getWeight();
+      if ($a_weight == $b_weight) {
+        return strnatcasecmp($a->getName(), $b->getName());
+      }
+      return ($a_weight < $b_weight) ? -1 : 1;
     });
   }
 
diff --git a/core/tests/Drupal/Tests/Component/Utility/SortArrayTest.php b/core/tests/Drupal/Tests/Component/Utility/SortArrayTest.php
index ed1357baee31..c2804e449e43 100644
--- a/core/tests/Drupal/Tests/Component/Utility/SortArrayTest.php
+++ b/core/tests/Drupal/Tests/Component/Utility/SortArrayTest.php
@@ -314,106 +314,4 @@ public function providerSortByTitleProperty() {
     return $tests;
   }
 
-  /**
-   * Tests SortArray::sortByWeightAndTitleKey() input against expected output.
-   *
-   * @dataProvider providerTestSortByWeightAndTitleKey
-   *
-   * @param array $a
-   *   The first input item for comparison.
-   * @param array $b
-   *   The second item for comparison.
-   * @param integer $expected
-   *   The expected output from calling the method.
-   */
-  public function testSortByWeightAndTitleKey($a, $b, $expected) {
-    $result = SortArray::sortByWeightAndTitleKey($a, $b);
-    $this->assertEquals($expected, $result);
-  }
-
-  /**
-   * Data provider for testSortByWeightAndTitleKey.
-   *
-   * @return array
-   *   An array of test data.
-   */
-  public function providerTestSortByWeightAndTitleKey() {
-    $stdclass_title_1 = new \stdClass();
-    $stdclass_title_1->title = 'a';
-
-    $stdclass_title_2 = new \stdClass();
-    $stdclass_title_2->title = 'b';
-
-    $stdclass_weight_1 = new \stdClass();
-    $stdclass_weight_1->weight = 1;
-
-    $stdclass_weight_2 = new \stdClass();
-    $stdclass_weight_2->weight = 2;
-
-    $stdclass_weight_3 = clone $stdclass_weight_1;
-
-    return array(
-      array(
-        array(),
-        array(),
-        0
-      ),
-      array(
-        array('weight' => 1),
-        array('weight' => 2),
-        -1
-      ),
-      array(
-        array('weight' => 2),
-        array('weight' => 1),
-        1
-      ),
-      array(
-        array('title' => 'b', 'weight' => 1),
-        array('title' => 'a', 'weight' => 2),
-        -1
-      ),
-      array(
-        array('title' => 'a', 'weight' => 2),
-        array('title' => 'b', 'weight' => 1),
-        1
-      ),
-      array(
-        array('title' => 'a', 'weight' => 1),
-        array('title' => 'b', 'weight' => 1),
-        -1
-      ),
-      array(
-        array('title' => 'b', 'weight' => 1),
-        array('title' => 'a', 'weight' => 1),
-        1
-      ),
-      array(
-        array('title' => 'a'),
-        array('title' => 'b'),
-        -1
-      ),
-      array(
-        array('title' => 'A'),
-        array('title' => 'a'),
-        0
-      ),
-      array(
-        $stdclass_title_1,
-        $stdclass_title_2,
-        -1
-      ),
-      array(
-        $stdclass_weight_1,
-        $stdclass_weight_2,
-        -1
-      ),
-      array(
-        $stdclass_weight_1,
-        $stdclass_weight_3,
-        0
-      ),
-    );
-  }
-
 }
diff --git a/core/tests/Drupal/Tests/Core/Language/LanguageUnitTest.php b/core/tests/Drupal/Tests/Core/Language/LanguageUnitTest.php
index 100e5c04d5fd..a221eb1ba03e 100644
--- a/core/tests/Drupal/Tests/Core/Language/LanguageUnitTest.php
+++ b/core/tests/Drupal/Tests/Core/Language/LanguageUnitTest.php
@@ -91,14 +91,14 @@ public function testGetNegotiationMethodId() {
   }
 
   /**
-   * Tests sorting an array of Language objects.
+   * Tests sorting an array of language objects.
    *
    * @covers ::sort()
    *
    * @dataProvider providerTestSortArrayOfLanguages
    *
-   * @param \Drupal\Core\Language\Language[] $languages
-   *   An array of \Drupal\Core\Language\Language objects.
+   * @param \Drupal\Core\Language\LanguageInterface[] $languages
+   *   An array of language objects.
    * @param array $expected
    *   The expected array of keys.
    */
-- 
GitLab