Example #1
0
 /**
  * Compare reference and localized raw file
  *
  * @param array  $website  Website data
  * @param string $locale   Locale to analyze
  * @param string $filename File to analyze
  *
  * @return array Results from comparison
  */
 public static function compareRawFiles($website, $locale, $filename)
 {
     $results = [];
     // Store reference file hash and last update date
     $reference_locale = Project::getReferenceLocale($website);
     $reference_filename = Project::getLocalFilePath($website, $reference_locale, $filename);
     if (file_exists($reference_filename)) {
         $reference_content = sha1_file($reference_filename);
         $results['reference_exists'] = true;
         $results['reference_url'] = Project::getPublicFilePath($website, $reference_locale, $filename);
         $results['reference_lastupdate'] = Utils::getSVNCommitTimestamp($reference_filename);
     } else {
         $results['reference_exists'] = false;
         $results['cmp_result'] = 'missing_reference';
     }
     // Generate locale file hash and last update date
     $locale_filename = Project::getLocalFilePath($website, $locale, $filename);
     if (file_exists($locale_filename)) {
         $locale_content = sha1_file($locale_filename);
         $results['locale_exists'] = true;
         $results['locale_url'] = Project::getPublicFilePath($website, $locale, $filename);
         $results['locale_lastupdate'] = Utils::getSVNCommitTimestamp($locale_filename);
         if ($results['reference_exists']) {
             if ($locale_content == $reference_content) {
                 $results['cmp_result'] = 'untranslated';
             } elseif ($results['reference_lastupdate'] > $results['locale_lastupdate']) {
                 // I check dates only if content is not identical
                 $results['cmp_result'] = 'outdated';
             } else {
                 $results['cmp_result'] = 'ok';
             }
         }
     } else {
         $results['locale_exists'] = false;
         $results['cmp_result'] = 'missing_locale';
     }
     return $results;
 }
 if (Project::isObsoleteFile($current_website, $current_filename, $current_locale)) {
     continue;
 }
 // File doesn't exist
 if (!file_exists(Project::getLocalFilePath($current_website, $current_locale, $current_filename))) {
     continue;
 }
 $supported_locale = true;
 $bugzilla_link = Bugzilla::getNewBugLink($current_locale, $bugzilla_locale, 'upload', [$current_filename]);
 // Load reference strings
 $reference_filename = Project::getLocalFilePath($current_website, $reference_locale, $current_filename);
 $reference_url = Project::getPublicFilePath($current_website, $reference_locale, $current_filename);
 $reference_data = LangManager::loadSource($current_website, $reference_locale, $current_filename);
 // Extract data from locale
 $locale_filename = Project::getLocalFilePath($current_website, $current_locale, $current_filename);
 $locale_url = Project::getPublicFilePath($current_website, $current_locale, $current_filename);
 $locale_analysis = LangManager::analyzeLangFile($current_website, $current_locale, $current_filename, $reference_data);
 if (!in_array($current_filename, $no_active_tag) && $website_name == 'www.mozilla.org') {
     $status = $locale_analysis['activated'] ? ' file_activated' : ' file_notactivated';
 } else {
     $status = ' file_activated';
 }
 // check if the lang file is in utf8
 if (Utils::isUTF8($locale_filename) == false) {
     $status .= ' file_notutf8';
 }
 $count_identical = count($locale_analysis['Identical']);
 $count_missing = count($locale_analysis['Missing']);
 $count_errors = LangManager::countErrors($locale_analysis['errors']);
 if ($count_identical + $count_missing + $count_errors == 0) {
     // File is complete