Merge branch 'w23_MDL-32632_m23_windate' of git://github.com/skodak/moodle
authorDan Poltawski <dan@moodle.com>
Wed, 6 Jun 2012 04:27:10 +0000 (12:27 +0800)
committerDan Poltawski <dan@moodle.com>
Wed, 6 Jun 2012 04:27:10 +0000 (12:27 +0800)
1  2 
lib/moodlelib.php

diff --combined lib/moodlelib.php
@@@ -1127,39 -1127,15 +1127,39 @@@ function fix_utf8($value) 
              // shortcut
              return $value;
          }
 -        // lower error reporting because glibc throws bogus notices
 +
 +        // Lower error reporting because glibc throws bogus notices.
          $olderror = error_reporting();
          if ($olderror & E_NOTICE) {
              error_reporting($olderror ^ E_NOTICE);
          }
 -        $result = iconv('UTF-8', 'UTF-8//IGNORE', $value);
 +
 +        // Note: this duplicates min_fix_utf8() intentionally.
 +        static $buggyiconv = null;
 +        if ($buggyiconv === null) {
 +            $buggyiconv = (!function_exists('iconv') or iconv('UTF-8', 'UTF-8//IGNORE', '100'.chr(130).'€') !== '100€');
 +        }
 +
 +        if ($buggyiconv) {
 +            if (function_exists('mb_convert_encoding')) {
 +                $subst = mb_substitute_character();
 +                mb_substitute_character('');
 +                $result = mb_convert_encoding($value, 'utf-8', 'utf-8');
 +                mb_substitute_character($subst);
 +
 +            } else {
 +                // Warn admins on admin/index.php page.
 +                $result = $value;
 +            }
 +
 +        } else {
 +            $result = iconv('UTF-8', 'UTF-8//IGNORE', $value);
 +        }
 +
          if ($olderror & E_NOTICE) {
              error_reporting($olderror);
          }
 +
          return $result;
  
      } else if (is_array($value)) {
@@@ -2037,8 -2013,17 +2037,17 @@@ function userdate($date, $format = '', 
  
      $timezone = get_user_timezone_offset($timezone);
  
+     // If we are running under Windows convert to windows encoding and then back to UTF-8
+     // (because it's impossible to specify UTF-8 to fetch locale info in Win32)
      if (abs($timezone) > 13) {   /// Server time
-         $datestring = strftime($format, $date);
+         if ($CFG->ostype == 'WINDOWS' and ($localewincharset = get_string('localewincharset', 'langconfig'))) {
+             $format = textlib::convert($format, 'utf-8', $localewincharset);
+             $datestring = strftime($format, $date);
+             $datestring = textlib::convert($datestring, $localewincharset, 'utf-8');
+         } else {
+             $datestring = strftime($format, $date);
+         }
          if ($fixday) {
              $daystring  = ltrim(str_replace(array(' 0', ' '), '', strftime(' %d', $date)));
              $datestring = str_replace('DD', $daystring, $datestring);
              $hourstring = ltrim(str_replace(array(' 0', ' '), '', strftime(' %I', $date)));
              $datestring = str_replace('HH', $hourstring, $datestring);
          }
      } else {
          $date += (int)($timezone * 3600);
-         $datestring = gmstrftime($format, $date);
+         if ($CFG->ostype == 'WINDOWS' and ($localewincharset = get_string('localewincharset', 'langconfig'))) {
+             $format = textlib::convert($format, 'utf-8', $localewincharset);
+             $datestring = gmstrftime($format, $date);
+             $datestring = textlib::convert($datestring, $localewincharset, 'utf-8');
+         } else {
+             $datestring = gmstrftime($format, $date);
+         }
          if ($fixday) {
              $daystring  = ltrim(str_replace(array(' 0', ' '), '', gmstrftime(' %d', $date)));
              $datestring = str_replace('DD', $daystring, $datestring);
          }
      }
  
- /// If we are running under Windows convert from windows encoding to UTF-8
- /// (because it's impossible to specify UTF-8 to fetch locale info in Win32)
-    if ($CFG->ostype == 'WINDOWS') {
-        if ($localewincharset = get_string('localewincharset', 'langconfig')) {
-            $datestring = textlib::convert($datestring, $localewincharset, 'utf-8');
-        }
-     }
      return $datestring;
  }
  
@@@ -8029,10 -8012,7 +8036,10 @@@ function get_list_of_plugins($directory
      }
  
      if (file_exists($basedir) && filetype($basedir) == 'dir') {
 -        $dirhandle = opendir($basedir);
 +        if (!$dirhandle = opendir($basedir)) {
 +            debugging("Directory permission error for plugin ({$directory}). Directory exists but cannot be read.", DEBUG_DEVELOPER);
 +            return array();
 +        }
          while (false !== ($dir = readdir($dirhandle))) {
              $firstchar = substr($dir, 0, 1);
              if ($firstchar === '.' or $dir === 'CVS' or $dir === '_vti_cnf' or $dir === 'simpletest' or $dir === 'yui' or $dir === 'phpunit' or $dir === $exclude) {
@@@ -10228,7 -10208,7 +10235,7 @@@ function apd_get_profiling() 
  }
  
  /**
 - * Delete directory or only it's content
 + * Delete directory or only its content
   *
   * @param string $dir directory path
   * @param bool $content_only
@@@ -10239,9 -10219,7 +10246,9 @@@ function remove_dir($dir, $content_only
          // nothing to do
          return true;
      }
 -    $handle = opendir($dir);
 +    if (!$handle = opendir($dir)) {
 +        return false;
 +    }
      $result = true;
      while (false!==($item = readdir($handle))) {
          if($item != '.' && $item != '..') {