public function testCreateOrderedComparator() { $order = array_flip(['a', 'z', 'd', 'e']); $array = ['b' => 'val b', 'd' => 'val d', 'z' => 'val z', 'c' => 'val c', 'e' => 'val e']; $expectedResult = ['z' => 'val z', 'd' => 'val d', 'e' => 'val e', 'b' => 'val b', 'c' => 'val c']; uksort($array, ArrayUtil::createOrderedComparator($order)); $this->assertEquals(array_keys($expectedResult), array_keys($array)); $this->assertEquals(array_values($expectedResult), array_values($array)); }
/** * @param EmailModel $emailModel * @param EmailTemplate $template * @param Email $email */ protected function applyTemplate(EmailModel $emailModel, EmailTemplate $template, Email $email) { $locales = array_merge($email->getAcceptedLocales(), [$this->defaultLocale]); $flippedLocales = array_flip($locales); $translatedSubjects = []; $translatedContents = []; foreach ($template->getTranslations() as $translation) { switch ($translation->getField()) { case 'content': $translatedContents[$translation->getLocale()] = $translation->getContent(); break; case 'subject': $translatedSubjects[$translation->getLocale()] = $translation->getContent(); break; } } $comparator = ArrayUtil::createOrderedComparator($flippedLocales); uksort($translatedSubjects, $comparator); uksort($translatedContents, $comparator); $validContents = array_intersect_key($translatedContents, $flippedLocales); $validsubjects = array_intersect_key($translatedSubjects, $flippedLocales); $content = reset($validContents); $subject = reset($validsubjects); $emailModel->setSubject($subject === false ? $template->getSubject() : $subject)->setBody($content === false ? $template->getContent() : $content)->setType($template->getType()); }