From cdf8a0c262690a8021632512a781f17f251b78b5 Mon Sep 17 00:00:00 2001 From: Nadav Kavalerchik Date: Sun, 6 Jul 2014 18:46:45 +0300 Subject: [PATCH] MDL-19270 - Quiz graph - Fix reverse display of Hebrew legend text in RTL mode --- lib/classes/text.php | 12 ++++++++++++ lib/graphlib.php | 3 ++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/classes/text.php b/lib/classes/text.php index 8e730cb6c92..b99b5d6fc6c 100644 --- a/lib/classes/text.php +++ b/lib/classes/text.php @@ -379,6 +379,18 @@ class core_text { } /** + * Reverse UTF-8 multibytes character sets (used for RTL languages) + * (We only do this because there is no mb_strrev or iconv_strrev) + * + * @param string $str the multibyte string to reverse + * @return string the reversed multi byte string + */ + public static function strrev($str) { + preg_match_all('/./us', $str, $ar); + return join('', array_reverse($ar[0])); + } + + /** * Try to convert upper unicode characters to plain ascii, * the returned string may contain unconverted unicode characters. * diff --git a/lib/graphlib.php b/lib/graphlib.php index 0fa5eef9593..685835c07d4 100644 --- a/lib/graphlib.php +++ b/lib/graphlib.php @@ -1193,7 +1193,8 @@ class graph { function print_TTF($message) { $points = $message['points']; $angle = $message['angle']; - $text = $message['text']; + // We have to manually reverse the label, since php GD cannot handle RTL characters properly in UTF8 strings. + $text = (right_to_left()) ? core_text::strrev($message['text']) : $message['text']; $colour = $this->colour[$message['colour']]; $font = $this->parameter['path_to_fonts'].$message['font']; -- 2.11.4.GIT