MediaWiki REL1_32
RaggettExternal.php
Go to the documentation of this file.
1<?php
2
3namespace MediaWiki\Tidy;
4
18 protected function cleanWrapped( $text, $stderr = false, &$retval = null ) {
19 $cleansource = '';
20 $opts = ' -utf8';
21
22 if ( $stderr ) {
23 $descriptorspec = [
24 0 => [ 'pipe', 'r' ],
25 1 => [ 'file', wfGetNull(), 'a' ],
26 2 => [ 'pipe', 'w' ]
27 ];
28 } else {
29 $descriptorspec = [
30 0 => [ 'pipe', 'r' ],
31 1 => [ 'pipe', 'w' ],
32 2 => [ 'file', wfGetNull(), 'a' ]
33 ];
34 }
35
36 $readpipe = $stderr ? 2 : 1;
37 $pipes = [];
38
39 $process = proc_open(
40 "{$this->config['tidyBin']} -config {$this->config['tidyConfigFile']} " .
41 $this->config['tidyCommandLine'] . $opts, $descriptorspec, $pipes );
42
43 // NOTE: At least on linux, the process will be created even if tidy is not installed.
44 // This means that missing tidy will be treated as a validation failure.
45
46 if ( is_resource( $process ) ) {
47 // Theoretically, this style of communication could cause a deadlock
48 // here. If the stdout buffer fills up, then writes to stdin could
49 // block. This doesn't appear to happen with tidy, because tidy only
50 // writes to stdout after it's finished reading from stdin. Search
51 // for tidyParseStdin and tidySaveStdout in console/tidy.c
52 fwrite( $pipes[0], $text );
53 fclose( $pipes[0] );
54 while ( !feof( $pipes[$readpipe] ) ) {
55 $cleansource .= fgets( $pipes[$readpipe], 1024 );
56 }
57 fclose( $pipes[$readpipe] );
58 $retval = proc_close( $process );
59 } else {
60 wfWarn( "Unable to start external tidy process" );
61 $retval = -1;
62 }
63
64 if ( !$stderr && $cleansource == '' && $text != '' ) {
65 // Some kind of error happened, so we couldn't get the corrected text.
66 // Just give up; we'll use the source text and append a warning.
67 $cleansource = null;
68 }
69
70 return $cleansource;
71 }
72
73 public function supportsValidate() {
74 return true;
75 }
76}
wfWarn( $msg, $callerOffset=1, $level=E_USER_NOTICE)
Send a warning either to the debug log or in a PHP error depending on $wgDevelopmentWarnings.
wfGetNull()
Get a platform-independent path to the null file, e.g.
cleanWrapped( $text, $stderr=false, &$retval=null)
Spawn an external HTML tidy process and get corrected markup back from it.
supportsValidate()
Return true if validate() can be used.
please add to it if you re going to add events to the MediaWiki code where normally authentication against an external auth plugin would be creating a local account incomplete not yet checked for validity & $retval
Definition hooks.txt:266