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 @@ -378,6 +378,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'];