+/**
+ * Swap two variables
+ */
+function swap( &$x, &$y ) {
+ $z = $x;
+ $x = $y;
+ $y = $z;
+}
+
+function wfGetSiteNotice() {
+ global $wgSiteNotice, $wgTitle, $wgOut;
+ $fname = 'wfGetSiteNotice';
+ wfProfileIn( $fname );
+
+ $notice = wfMsg( 'sitenotice' );
+ if($notice == '<sitenotice>') $notice = '';
+ # Allow individual wikis to turn it off
+ if ( $notice == '-' ) {
+ $notice = '';
+ } else {
+ if ($notice == '') {
+ $notice = $wgSiteNotice;
+ }
+ if($notice != '-' && $notice != '') {
+ $specialparser = new Parser();
+ $parserOutput = $specialparser->parse( $notice, $wgTitle, $wgOut->mParserOptions, false );
+ $notice = $parserOutput->getText();
+ }
+ }
+ wfProfileOut( $fname );
+ return $notice;
+}
+
+/**
+ * Format an XML element with given attributes and, optionally, text content.
+ * Element and attribute names are assumed to be ready for literal inclusion.
+ * Strings are assumed to not contain XML-illegal characters; special
+ * characters (<, >, &) are escaped but illegals are not touched.
+ *
+ * @param string $element
+ * @param array $attribs Name=>value pairs. Values will be escaped.
+ * @param bool $contents NULL to make an open tag only; '' for a contentless closed tag (default)
+ * @return string
+ */
+function wfElement( $element, $attribs = array(), $contents = '') {
+ $out = '<' . $element;
+ foreach( $attribs as $name => $val ) {
+ $out .= ' ' . $name . '="' . htmlspecialchars( $val ) . '"';
+ }
+ if( is_null( $contents ) ) {
+ $out .= '>';
+ } else {
+ if( $contents == '' ) {
+ $out .= ' />';
+ } else {
+ $out .= '>';
+ $out .= htmlspecialchars( $contents );
+ $out .= "</$element>";
+ }
+ }
+ return $out;
+}
+
+/**
+ * Format an XML element as with wfElement(), but run text through the
+ * UtfNormal::cleanUp() validator first to ensure that no invalid UTF-8
+ * is passed.
+ *
+ * @param string $element
+ * @param array $attribs Name=>value pairs. Values will be escaped.
+ * @param bool $contents NULL to make an open tag only; '' for a contentless closed tag (default)
+ * @return string
+ */
+function wfElementClean( $element, $attribs = array(), $contents = '') {
+ if( $attribs ) {
+ $attribs = array_map( array( 'UtfNormal', 'cleanUp' ), $attribs );
+ }
+ return wfElement( $element, $attribs, UtfNormal::cleanUp( $contents ) );
+}
+
+/** Global singleton instance of MimeMagic. This is initialized on demand,
+* please always use the wfGetMimeMagic() function to get the instance.
+*
+* @private
+*/
+$wgMimeMagic= NULL;
+
+/** Factory functions for the global MimeMagic object.
+* This function always returns the same singleton instance of MimeMagic.
+* That objects will be instantiated on the first call to this function.
+* If needed, the MimeMagic.php file is automatically included by this function.
+* @return MimeMagic the global MimeMagic objects.
+*/
+function &wfGetMimeMagic() {
+ global $wgMimeMagic;
+
+ if (!is_null($wgMimeMagic)) {
+ return $wgMimeMagic;
+ }
+
+ if (!class_exists("MimeMagic")) {
+ #include on demand
+ require_once("MimeMagic.php");
+ }
+
+ $wgMimeMagic= new MimeMagic();
+
+ return $wgMimeMagic;
+}
+
+
+/**
+ * Tries to get the system directory for temporary files.
+ * The TMPDIR, TMP, and TEMP environment variables are checked in sequence,
+ * and if none are set /tmp is returned as the generic Unix default.
+ *
+ * NOTE: When possible, use the tempfile() function to create temporary
+ * files to avoid race conditions on file creation, etc.
+ *
+ * @return string
+ */
+function wfTempDir() {
+ foreach( array( 'TMPDIR', 'TMP', 'TEMP' ) as $var ) {
+ $tmp = getenv( 'TMPDIR' );
+ if( $tmp && file_exists( $tmp ) && is_dir( $tmp ) && is_writable( $tmp ) ) {
+ return $tmp;
+ }
+ }
+ # Hope this is Unix of some kind!
+ return '/tmp';
+}
+
+/**
+ * Make directory, and make all parent directories if they don't exist
+ */
+function wfMkdirParents( $fullDir, $mode ) {
+ $parts = explode( '/', $fullDir );
+ $path = '';
+ $success = false;
+ foreach ( $parts as $dir ) {
+ $path .= $dir . '/';
+ if ( !is_dir( $path ) ) {
+ if ( !mkdir( $path, $mode ) ) {
+ return false;
+ }
+ }
+ }
+ return true;
+}
+