Whitespace fixes
[lhc/web/wiklou.git] / includes / UserMailer.php
index 0749aaf..a2e11d7 100644 (file)
@@ -58,7 +58,7 @@ class MailAddress {
                if ( $this->name != '' && !wfIsWindows() ) {
                        global $wgEnotifUseRealName;
                        $name = ( $wgEnotifUseRealName && $this->realName ) ? $this->realName : $this->name;
-                       $quoted = wfQuotedPrintable( $name );
+                       $quoted = UserMailer::quotedPrintable( $name );
                        if ( strpos( $quoted, '.' ) !== false || strpos( $quoted, ',' ) !== false ) {
                                $quoted = '"' . $quoted . '"';
                        }
@@ -110,10 +110,11 @@ class UserMailer {
         * @return Status object
         */
        public static function send( $to, $from, $subject, $body, $replyto = null, $contentType = null ) {
-               global $wgSMTP, $wgOutputEncoding, $wgEnotifImpersonal;
+               global $wgSMTP, $wgEnotifImpersonal;
                global $wgEnotifMaxRecips, $wgAdditionalMailParams;
 
                if ( is_array( $to ) ) {
+                       $emails = '';
                        // This wouldn't be necessary if implode() worked on arrays of
                        // objects using __toString(). http://bugs.php.net/bug.php?id=36612
                        foreach ( $to as $t ) {
@@ -126,13 +127,10 @@ class UserMailer {
                }
 
                if ( is_array( $wgSMTP ) ) {
-                       $found = false;
-                       $pathArray = explode( PATH_SEPARATOR, get_include_path() );
-                       foreach ( $pathArray as $path ) {
-                               if ( file_exists( $path . DIRECTORY_SEPARATOR . 'Mail.php' ) ) {
-                                       $found = true;
-                                       break;
-                               }
+                       if ( function_exists( 'stream_resolve_include_path' ) ) {
+                               $found = stream_resolve_include_path( 'Mail.php' );
+                       } else {
+                               $found = Fallback::stream_resolve_include_path( 'Mail.php' );
                        }
                        if ( !$found ) {
                                throw new MWException( 'PEAR mail package is not installed' );
@@ -162,11 +160,11 @@ class UserMailer {
                        if ( $replyto ) {
                                $headers['Reply-To'] = $replyto->toString();
                        }
-                       $headers['Subject'] = wfQuotedPrintable( $subject );
+                       $headers['Subject'] = self::quotedPrintable( $subject );
                        $headers['Date'] = date( 'r' );
                        $headers['MIME-Version'] = '1.0';
                        $headers['Content-type'] = ( is_null( $contentType ) ?
-                                       'text/plain; charset=' . $wgOutputEncoding : $contentType );
+                                       'text/plain; charset=UTF-8' : $contentType );
                        $headers['Content-transfer-encoding'] = '8bit';
                        $headers['Message-ID'] = "<$msgid@" . $wgSMTP['IDHost'] . '>'; // FIXME
                        $headers['X-Mailer'] = 'MediaWiki mailer';
@@ -205,7 +203,7 @@ class UserMailer {
                                $endl = "\n";
                        }
                        $ctype = ( is_null( $contentType ) ?
-                                       'text/plain; charset=' . $wgOutputEncoding : $contentType );
+                                       'text/plain; charset=UTF-8' : $contentType );
                        $headers =
                                "MIME-Version: 1.0$endl" .
                                "Content-type: $ctype$endl" .
@@ -223,12 +221,19 @@ class UserMailer {
                        ini_set( 'html_errors', '0' );
                        set_error_handler( array( 'UserMailer', 'errorHandler' ) );
 
-                       if ( is_array( $to ) ) {
-                               foreach ( $to as $recip ) {
-                                       $sent = mail( $recip->toString(), wfQuotedPrintable( $subject ), $body, $headers, $wgAdditionalMailParams );
+                       // We need to check for safe_mode, because mail() throws an E_NOTICE
+                       // on the 5th parameter when it's turned on
+                       $sm = wfIniGetBool( 'safe_mode' );
+
+                       if ( !is_array( $to ) ) {
+                               $to = array( $to );
+                       }
+                       foreach ( $to as $recip ) {
+                               if( $sm ) {
+                                       $sent = mail( $recip->toString(), self::quotedPrintable( $subject ), $body, $headers );
+                               } else {
+                                       $sent = mail( $recip->toString(), self::quotedPrintable( $subject ), $body, $headers, $wgAdditionalMailParams );
                                }
-                       } else {
-                               $sent = mail( $to->toString(), wfQuotedPrintable( $subject ), $body, $headers, $wgAdditionalMailParams );
                        }
 
                        restore_error_handler();
@@ -264,6 +269,34 @@ class UserMailer {
                $phrase = strtr( $phrase, array( "\r" => '', "\n" => '', '"' => '' ) );
                return '"' . $phrase . '"';
        }
+
+       /**
+        * Converts a string into quoted-printable format
+        * @since 1.17
+        */
+       public static function quotedPrintable( $string, $charset = '' ) {
+               # Probably incomplete; see RFC 2045
+               if( empty( $charset ) ) {
+                       $charset = 'UTF-8';
+               }
+               $charset = strtoupper( $charset );
+               $charset = str_replace( 'ISO-8859', 'ISO8859', $charset ); // ?
+
+               $illegal = '\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\xff=';
+               $replace = $illegal . '\t ?_';
+               if( !preg_match( "/[$illegal]/", $string ) ) {
+                       return $string;
+               }
+               $out = "=?$charset?Q?";
+               $out .= preg_replace_callback( "/([$replace])/", 
+                       array( __CLASS__, 'quotedPrintableCallback' ), $string );
+               $out .= '?=';
+               return $out;
+       }
+
+       protected static function quotedPrintableCallback( $matches ) {
+               return sprintf( "=%02X", ord( $matches[1] ) );
+       }
 }
 
 /**
@@ -443,9 +476,9 @@ class EmailNotification {
        }
 
        /**
-        * @private
+        * Generate the generic "this page has been changed" e-mail text.
         */
-       function composeCommonMailtext() {
+       private function composeCommonMailtext() {
                global $wgPasswordSender, $wgPasswordSenderName, $wgNoReplyAddress;
                global $wgEnotifFromEditor, $wgEnotifRevealEditorAddress;
                global $wgEnotifImpersonal, $wgEnotifUseRealName;
@@ -627,19 +660,3 @@ class EmailNotification {
        }
 
 } # end of class EmailNotification
-
-/**@{
- * Backwards compatibility functions
- *
- * @deprecated Use UserMailer methods; will be removed in 1.19
- */
-function wfRFC822Phrase( $s ) {
-       wfDeprecated( __FUNCTION__ );
-       return UserMailer::rfc822Phrase( $s );
-}
-
-function userMailer( $to, $from, $subject, $body, $replyto = null ) {
-       wfDeprecated( __FUNCTION__ );
-       return UserMailer::send( $to, $from, $subject, $body, $replyto );
-}
-/**@}*/
\ No newline at end of file