MediaWiki  REL1_24
transstat.php
Go to the documentation of this file.
00001 <?php
00029 $optionsWithArgs = array( 'output' );
00030 
00031 require_once __DIR__ . '/../commandLine.inc';
00032 require_once 'languages.inc';
00033 require_once __DIR__ . '/StatOutputs.php';
00034 
00035 if ( isset( $options['help'] ) ) {
00036     showUsage();
00037 }
00038 
00039 # Default output is WikiText
00040 if ( !isset( $options['output'] ) ) {
00041     $options['output'] = 'wiki';
00042 }
00043 
00045 function showUsage() {
00046     print <<<TEXT
00047 Usage: php transstat.php [--help] [--output=csv|text|wiki]
00048     --help : this helpful message
00049     --output : select an output engine one of:
00050         * 'csv'      : Comma Separated Values.
00051         * 'wiki'     : MediaWiki syntax (default).
00052         * 'text'     : Text with tabs.
00053 Example: php maintenance/transstat.php --output=text
00054 
00055 TEXT;
00056     exit( 1 );
00057 }
00058 
00059 # Select an output engine
00060 switch ( $options['output'] ) {
00061     case 'wiki':
00062         $output = new WikiStatsOutput();
00063         break;
00064     case 'text':
00065         $output = new TextStatsOutput();
00066         break;
00067     case 'csv':
00068         $output = new CsvStatsOutput();
00069         break;
00070     default:
00071         showUsage();
00072 }
00073 
00074 # Languages
00075 $wgLanguages = new Languages();
00076 
00077 # Header
00078 $output->heading();
00079 $output->blockstart();
00080 $output->element( 'Language', true );
00081 $output->element( 'Code', true );
00082 $output->element( 'Fallback', true );
00083 $output->element( 'Translated', true );
00084 $output->element( '%', true );
00085 $output->element( 'Obsolete', true );
00086 $output->element( '%', true );
00087 $output->element( 'Problematic', true );
00088 $output->element( '%', true );
00089 $output->blockend();
00090 
00091 $wgGeneralMessages = $wgLanguages->getGeneralMessages();
00092 $wgRequiredMessagesNumber = count( $wgGeneralMessages['required'] );
00093 
00094 foreach ( $wgLanguages->getLanguages() as $code ) {
00095     # Don't check English, RTL English or dummy language codes
00096     if ( $code == 'en' || $code == 'enRTL' || ( is_array( $wgDummyLanguageCodes ) &&
00097             isset( $wgDummyLanguageCodes[$code] ) )
00098     ) {
00099         continue;
00100     }
00101 
00102     # Calculate the numbers
00103     $language = Language::fetchLanguageName( $code );
00104     $fallback = $wgLanguages->getFallback( $code );
00105     $messages = $wgLanguages->getMessages( $code );
00106     $messagesNumber = count( $messages['translated'] );
00107     $requiredMessagesNumber = count( $messages['required'] );
00108     $requiredMessagesPercent = $output->formatPercent(
00109         $requiredMessagesNumber,
00110         $wgRequiredMessagesNumber
00111     );
00112     $obsoleteMessagesNumber = count( $messages['obsolete'] );
00113     $obsoleteMessagesPercent = $output->formatPercent(
00114         $obsoleteMessagesNumber,
00115         $messagesNumber,
00116         true
00117     );
00118     $messagesWithMismatchVariables = $wgLanguages->getMessagesWithMismatchVariables( $code );
00119     $emptyMessages = $wgLanguages->getEmptyMessages( $code );
00120     $messagesWithWhitespace = $wgLanguages->getMessagesWithWhitespace( $code );
00121     $nonXHTMLMessages = $wgLanguages->getNonXHTMLMessages( $code );
00122     $messagesWithWrongChars = $wgLanguages->getMessagesWithWrongChars( $code );
00123     $problematicMessagesNumber = count( array_unique( array_merge(
00124         $messagesWithMismatchVariables,
00125         $emptyMessages,
00126         $messagesWithWhitespace,
00127         $nonXHTMLMessages,
00128         $messagesWithWrongChars
00129     ) ) );
00130     $problematicMessagesPercent = $output->formatPercent(
00131         $problematicMessagesNumber,
00132         $messagesNumber,
00133         true
00134     );
00135 
00136     # Output them
00137     $output->blockstart();
00138     $output->element( "$language" );
00139     $output->element( "$code" );
00140     $output->element( "$fallback" );
00141     $output->element( "$requiredMessagesNumber/$wgRequiredMessagesNumber" );
00142     $output->element( $requiredMessagesPercent );
00143     $output->element( "$obsoleteMessagesNumber/$messagesNumber" );
00144     $output->element( $obsoleteMessagesPercent );
00145     $output->element( "$problematicMessagesNumber/$messagesNumber" );
00146     $output->element( $problematicMessagesPercent );
00147     $output->blockend();
00148 }
00149 
00150 # Footer
00151 $output->footer();