28use Wikimedia\Timestamp\TimestampException;
66 $this->singleLang = $val;
88 return $obj->makeFormattedData( $tags );
103 $resolutionunit = !isset( $tags[
'ResolutionUnit'] ) || $tags[
'ResolutionUnit'] == 2 ? 2 : 3;
104 unset( $tags[
'ResolutionUnit'] );
106 foreach ( $tags as $tag => &$vals ) {
109 if ( !is_array( $tags[$tag] ) ) {
114 if ( isset( $tags[$tag][
'_type'] ) ) {
115 $type = $tags[$tag][
'_type'];
116 unset( $vals[
'_type'] );
122 if ( $tag ==
'GPSTimeStamp' && count( $vals ) === 3 ) {
125 $h = explode(
'/', $vals[0] );
126 $m = explode(
'/', $vals[1] );
127 $s = explode(
'/', $vals[2] );
142 $tags[$tag] = str_pad( intval( $h[0] / $h[1] ), 2,
'0', STR_PAD_LEFT )
143 .
':' . str_pad( intval( $m[0] / $m[1] ), 2,
'0', STR_PAD_LEFT )
144 .
':' . str_pad( intval(
$s[0] /
$s[1] ), 2,
'0', STR_PAD_LEFT );
152 }
catch ( TimestampException
$e ) {
163 if ( $tag ===
'Contact' ) {
168 foreach ( $vals as &$val ) {
183 $val = $this->
exifMsg( $tag, $val );
191 case 'PhotometricInterpretation':
205 $val = $this->
exifMsg( $tag, $val );
223 $val = $this->
exifMsg( $tag, $val );
231 case 'PlanarConfiguration':
235 $val = $this->
exifMsg( $tag, $val );
244 case 'YCbCrPositioning':
248 $val = $this->
exifMsg( $tag, $val );
258 switch ( $resolutionunit ) {
278 case 'FlashPixVersion':
279 $val = (int)$val / 100;
286 $val = $this->
exifMsg( $tag, $val );
294 case 'ComponentsConfiguration':
303 $val = $this->
exifMsg( $tag, $val );
312 case 'DateTimeOriginal':
313 case 'DateTimeDigitized':
314 case 'DateTimeReleased':
315 case 'DateTimeExpires':
318 case 'DateTimeMetadata':
319 if ( $val ==
'0000:00:00 00:00:00' || $val ==
' : : : : ' ) {
320 $val = $this->
msg(
'exif-unknowndate' )->text();
321 } elseif ( preg_match(
322 '/^(?:\d{4}):(?:\d\d):(?:\d\d) (?:\d\d):(?:\d\d):(?:\d\d)$/D',
330 } elseif ( preg_match(
'/^(?:\d{4}):(?:\d\d):(?:\d\d) (?:\d\d):(?:\d\d)$/D', $val ) ) {
338 } elseif ( preg_match(
'/^(?:\d{4}):(?:\d\d):(?:\d\d)$/D', $val ) ) {
341 . substr( $val, 5, 2 )
342 . substr( $val, 8, 2 )
351 case 'ExposureProgram':
362 $val = $this->
exifMsg( $tag, $val );
370 case 'SubjectDistance':
385 $val = $this->
exifMsg( $tag, $val );
416 $val = $this->
exifMsg( $tag, $val );
426 'fired' => $val & 0b00000001,
427 'return' => ( $val & 0b00000110 ) >> 1,
428 'mode' => ( $val & 0b00011000 ) >> 3,
429 'function' => ( $val & 0b00100000 ) >> 5,
430 'redeye' => ( $val & 0b01000000 ) >> 6,
434 # We do not need to handle unknown values since all are used.
435 foreach ( $flashDecode as $subTag => $subValue ) {
436 # We do not need any message for zeroed values.
437 if ( $subTag !=
'fired' && $subValue == 0 ) {
440 $fullTag = $tag .
'-' . $subTag;
441 $flashMsgs[] = $this->
exifMsg( $fullTag, $subValue );
443 $val = $this->
getLanguage()->commaList( $flashMsgs );
446 case 'FocalPlaneResolutionUnit':
449 $val = $this->
exifMsg( $tag, $val );
457 case 'SensingMethod':
466 $val = $this->
exifMsg( $tag, $val );
477 $val = $this->
exifMsg( $tag, $val );
488 $val = $this->
exifMsg( $tag, $val );
496 case 'CustomRendered':
500 $val = $this->
exifMsg( $tag, $val );
513 $val = $this->
exifMsg( $tag, $val );
525 $val = $this->
exifMsg( $tag, $val );
533 case 'SceneCaptureType':
539 $val = $this->
exifMsg( $tag, $val );
554 $val = $this->
exifMsg( $tag, $val );
567 $val = $this->
exifMsg( $tag, $val );
580 $val = $this->
exifMsg( $tag, $val );
593 $val = $this->
exifMsg( $tag, $val );
601 case 'SubjectDistanceRange':
607 $val = $this->
exifMsg( $tag, $val );
616 case 'GPSLatitudeRef':
617 case 'GPSDestLatitudeRef':
621 $val = $this->
exifMsg(
'GPSLatitude', $val );
629 case 'GPSLongitudeRef':
630 case 'GPSDestLongitudeRef':
634 $val = $this->
exifMsg(
'GPSLongitude', $val );
644 $val = $this->
exifMsg(
'GPSAltitude',
'below-sealevel', $this->
formatNum( -$val, 3 ) );
646 $val = $this->
exifMsg(
'GPSAltitude',
'above-sealevel', $this->
formatNum( $val, 3 ) );
654 $val = $this->
exifMsg( $tag, $val );
662 case 'GPSMeasureMode':
666 $val = $this->
exifMsg( $tag, $val );
675 case 'GPSImgDirectionRef':
676 case 'GPSDestBearingRef':
680 $val = $this->
exifMsg(
'GPSDirection', $val );
689 case 'GPSDestLatitude':
693 case 'GPSDestLongitude':
702 $val = $this->
exifMsg(
'GPSSpeed', $val );
710 case 'GPSDestDistanceRef':
715 $val = $this->
exifMsg(
'GPSDestDistance', $val );
727 } elseif ( $val <= 5 ) {
729 } elseif ( $val <= 10 ) {
731 } elseif ( $val <= 20 ) {
743 $val = $this->
exifMsg( $tag,
'', $val );
747 if ( is_array( $val ) ) {
748 if ( count( $val ) > 1 ) {
750 $val = $this->
msg(
'exif-software-version-value', $val[0], $val[1] )->text();
753 $val = $this->
exifMsg( $tag,
'', $val[0] );
756 $val = $this->
exifMsg( $tag,
'', $val );
762 $val = $this->
msg(
'exif-exposuretime-format',
765 case 'ISOSpeedRatings':
769 if ( $val ==
'65535' ) {
770 $val = $this->
exifMsg( $tag,
'overflow' );
776 $val = $this->
msg(
'exif-fnumber-format',
781 case 'FocalLengthIn35mmFilm':
782 $val = $this->
msg(
'exif-focallength-format',
786 case 'MaxApertureValue':
787 if ( strpos( $val,
'/' ) !==
false ) {
789 list( $n, $d ) = explode(
'/', $val );
790 if ( is_numeric( $n ) && is_numeric( $d ) ) {
794 if ( is_numeric( $val ) ) {
795 $fNumber = pow( 2, $val / 2 );
796 if ( $fNumber !==
false ) {
797 $val = $this->
msg(
'exif-maxaperturevalue-value',
806 switch ( strtolower( $val ) ) {
832 case 'SubjectNewsCode':
844 if ( $val == 0 || $val == 9 ) {
846 } elseif ( $val < 5 && $val > 1 ) {
848 } elseif ( $val == 5 ) {
850 } elseif ( $val <= 8 && $val > 5 ) {
854 if ( $urgency !==
'' ) {
855 $val = $this->
exifMsg(
'urgency',
862 case 'OriginalImageHeight':
863 case 'OriginalImageWidth':
864 case 'PixelXDimension':
865 case 'PixelYDimension':
868 $val = $this->
formatNum( $val ) .
' ' . $this->
msg(
'unit-pixel' )->text();
878 case 'ImageDescription':
882 case 'RelatedSoundFile':
883 case 'ImageUniqueID':
884 case 'SpectralSensitivity':
885 case 'GPSSatellites':
889 case 'WorldRegionDest':
891 case 'CountryCodeDest':
892 case 'ProvinceOrStateDest':
894 case 'SublocationDest':
895 case 'WorldRegionCreated':
896 case 'CountryCreated':
897 case 'CountryCodeCreated':
898 case 'ProvinceOrStateCreated':
900 case 'SublocationCreated':
902 case 'SpecialInstructions':
907 case 'FixtureIdentifier':
909 case 'LocationDestCode':
911 case 'JPEGFileComment':
912 case 'iimSupplementalCategory':
913 case 'OriginalTransmissionRef':
915 case 'dc-contributor':
924 case 'CameraOwnerName':
927 case 'RightsCertificate':
928 case 'CopyrightOwner':
931 case 'OriginalDocumentID':
933 case 'MorePermissionsUrl':
934 case 'AttributionUrl':
935 case 'PreferredAttributionName':
936 case 'PNGFileComment':
938 case 'ContentWarning':
939 case 'GIFFileComment':
941 case 'IntellectualGenre':
943 case 'OrginisationInImage':
944 case 'PersonInImage':
946 $val = htmlspecialchars( $val );
954 $val = $this->
exifMsg( $tag, $val );
957 $val = htmlspecialchars( $val );
965 $val = $this->
exifMsg( $tag, $val );
970 if ( $val ==
'-1' ) {
971 $val = $this->
exifMsg( $tag,
'rejected' );
978 $lang = Language::fetchLanguageName( strtolower( $val ), $this->
getLanguage()->getCode() );
980 $val = htmlspecialchars(
$lang );
982 $val = htmlspecialchars( $val );
1024 return $obj->flattenArrayReal( $vals,
$type, $noHtml );
1044 if ( !is_array( $vals ) ) {
1048 if ( isset( $vals[
'_type'] ) ) {
1049 $type = $vals[
'_type'];
1050 unset( $vals[
'_type'] );
1053 if ( !is_array( $vals ) ) {
1055 } elseif ( count( $vals ) === 1 &&
$type !==
'lang' && isset( $vals[0] ) ) {
1057 } elseif ( count( $vals ) === 0 ) {
1058 wfDebug( __METHOD__ .
" metadata array with 0 elements!\n" );
1077 $defaultItem =
false;
1078 $defaultLang =
false;
1087 if ( isset( $vals[
'x-default'] ) ) {
1088 $defaultItem = $vals[
'x-default'];
1089 unset( $vals[
'x-default'] );
1091 foreach ( $priorityLanguages as $pLang ) {
1092 if ( isset( $vals[$pLang] ) ) {
1094 if ( $vals[$pLang] === $defaultItem ) {
1095 $defaultItem =
false;
1099 $vals[$pLang], $pLang,
1100 $isDefault, $noHtml );
1102 unset( $vals[$pLang] );
1104 if ( $this->singleLang ) {
1105 return Html::rawElement(
'span',
1106 [
'lang' => $pLang ], $vals[$pLang] );
1112 foreach ( $vals as
$lang => $item ) {
1113 if ( $item === $defaultItem ) {
1114 $defaultLang =
$lang;
1117 $content .= $this->
langItem( $item,
1118 $lang,
false, $noHtml );
1119 if ( $this->singleLang ) {
1120 return Html::rawElement(
'span',
1121 [
'lang' =>
$lang ], $item );
1124 if ( $defaultItem !==
false ) {
1125 $content = $this->
langItem( $defaultItem,
1126 $defaultLang,
true, $noHtml ) .
1128 if ( $this->singleLang ) {
1129 return $defaultItem;
1136 return '<ul class="metadata-langlist">' .
1141 return "\n#" . implode(
"\n#", $vals );
1144 return "<ol><li>" . implode(
"</li>\n<li>", $vals ) .
'</li></ol>';
1148 return "\n*" . implode(
"\n*", $vals );
1151 return "<ul><li>" . implode(
"</li>\n<li>", $vals ) .
'</li></ul>';
1167 if (
$lang ===
false && $default ===
false ) {
1168 throw new MWException(
'$lang and $default cannot both '
1175 $wrappedValue =
'<span class="mw-metadata-lang-value">'
1179 if (
$lang ===
false ) {
1180 $msg = $this->
msg(
'metadata-langitem-default', $wrappedValue );
1182 return $msg->text() .
"\n\n";
1185 return '<li class="mw-metadata-lang-default">'
1190 $lowLang = strtolower(
$lang );
1191 $langName = Language::fetchLanguageName( $lowLang );
1192 if ( $langName ===
'' ) {
1194 list( $langPrefix ) = explode(
'-', $lowLang, 2 );
1195 $langName = Language::fetchLanguageName( $langPrefix );
1196 if ( $langName ===
'' ) {
1203 $msg = $this->
msg(
'metadata-langitem', $wrappedValue, $langName,
$lang );
1205 return '*' . $msg->text();
1208 $item =
'<li class="mw-metadata-lang-code-'
1211 $item .=
' mw-metadata-lang-default';
1213 $item .=
'" lang="' .
$lang .
'">';
1214 $item .= $msg->text();
1229 private function exifMsg( $tag, $val, $arg =
null, $arg2 =
null ) {
1232 if ( $val ===
'' ) {
1236 return $this->
msg( $wgContLang->lc(
"exif-$tag-$val" ), $arg, $arg2 )->text();
1249 if ( is_array( $num ) ) {
1251 foreach ( $num as $number ) {
1257 if ( preg_match(
'/^(-?\d+)\/(\d+)$/', $num, $m ) ) {
1259 $newNum = $m[1] / $m[2];
1260 if ( $round !==
false ) {
1261 $newNum = round( $newNum, $round );
1267 return $this->
getLanguage()->formatNum( $newNum );
1269 if ( is_numeric( $num ) && $round !==
false ) {
1270 $num = round( $num, $round );
1285 if ( preg_match(
'/^(-?\d+)\/(\d+)$/', $num, $m ) ) {
1286 $numerator = intval( $m[1] );
1287 $denominator = intval( $m[2] );
1288 $gcd = $this->
gcd( abs( $numerator ), $denominator );
1291 return $this->
formatNum( $numerator / $gcd ) .
'/' . $this->
formatNum( $denominator / $gcd );
1305 private function gcd( $a, $b ) {
1315 $remainder = $a % $b;
1338 if ( !preg_match(
'/^\d{8}$/D', $val ) ) {
1343 switch ( substr( $val, 0, 2 ) ) {
1396 if ( $cat !==
'' ) {
1397 $catMsg = $this->
exifMsg(
'iimcategory', $cat );
1398 $val = $this->
exifMsg(
'subjectnewscode',
'', $val, $catMsg );
1413 if ( !is_numeric( $coord ) ) {
1414 wfDebugLog(
'exif', __METHOD__ .
": \"$coord\" is not a number" );
1415 return (
string)$coord;
1421 if (
$type ===
'latitude' ) {
1423 } elseif (
$type ===
'longitude' ) {
1427 $nCoord = (float)$coord;
1428 if (
$type ===
'latitude' ) {
1430 } elseif (
$type ===
'longitude' ) {
1435 $deg = floor( $nCoord );
1436 $min = floor( ( $nCoord - $deg ) * 60 );
1437 $sec = round( ( ( $nCoord - $deg ) * 60 - $min ) * 60, 2 );
1444 return $this->
msg(
'exif-coordinate-format', $deg, $min, $sec, $ref, $coord )->text();
1462 if ( !( isset( $vals[
'CiAdrExtadr'] )
1463 || isset( $vals[
'CiAdrCity'] )
1464 || isset( $vals[
'CiAdrCtry'] )
1465 || isset( $vals[
'CiEmailWork'] )
1466 || isset( $vals[
'CiTelWork'] )
1467 || isset( $vals[
'CiAdrPcode'] )
1468 || isset( $vals[
'CiAdrRegion'] )
1469 || isset( $vals[
'CiUrlWork'] )
1480 foreach ( $vals as &$val ) {
1481 $val = htmlspecialchars( $val );
1489 $url = $tel = $street = $city = $country =
'';
1490 $email = $postal = $region =
'';
1499 if ( isset( $vals[
'CiAdrExtadr'] ) ) {
1502 $street =
'<span class="extended-address">'
1504 $vals[
'CiAdrExtadr'] )
1507 if ( isset( $vals[
'CiAdrCity'] ) ) {
1508 $city =
'<span class="locality">'
1509 . htmlspecialchars( $vals[
'CiAdrCity'] )
1512 if ( isset( $vals[
'CiAdrCtry'] ) ) {
1513 $country =
'<span class="country-name">'
1514 . htmlspecialchars( $vals[
'CiAdrCtry'] )
1517 if ( isset( $vals[
'CiEmailWork'] ) ) {
1520 $splitEmails = explode(
"\n", $vals[
'CiEmailWork'] );
1521 foreach ( $splitEmails as $e1 ) {
1523 foreach ( explode(
',', $e1 ) as $e2 ) {
1524 $finalEmail = trim( $e2 );
1525 if ( $finalEmail ==
',' || $finalEmail ==
'' ) {
1528 if ( strpos( $finalEmail,
'<' ) !==
false ) {
1531 $emails[] = $finalEmail;
1533 $emails[] =
'[mailto:'
1535 .
' <span class="email">'
1541 $email = implode(
', ', $emails );
1543 if ( isset( $vals[
'CiTelWork'] ) ) {
1544 $tel =
'<span class="tel">'
1545 . htmlspecialchars( $vals[
'CiTelWork'] )
1548 if ( isset( $vals[
'CiAdrPcode'] ) ) {
1549 $postal =
'<span class="postal-code">'
1551 $vals[
'CiAdrPcode'] )
1554 if ( isset( $vals[
'CiAdrRegion'] ) ) {
1556 $region =
'<span class="region">'
1558 $vals[
'CiAdrRegion'] )
1561 if ( isset( $vals[
'CiUrlWork'] ) ) {
1562 $url =
'<span class="url">'
1563 . htmlspecialchars( $vals[
'CiUrlWork'] )
1567 return $this->
msg(
'exif-contact-value', $email, $url,
1568 $street, $city, $region, $postal, $country,
1584 if ( preg_match(
'/^\\*\s*(.*?)\s*$/',
$line,
$matches ) ) {
1588 $fields = array_map(
'strtolower', $fields );
1601 $cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
1608 $cacheKey =
$cache->makeKey(
1609 'getExtendedMetadata',
1611 (
int)$this->singleLang,
1615 $cachedValue =
$cache->get( $cacheKey );
1618 && Hooks::run(
'ValidateExtendedMetadataCache', [ $cachedValue[
'timestamp'], $file ] )
1620 $extendedMetadata = $cachedValue[
'data'];
1622 $maxCacheTime = ( $file instanceof
ForeignAPIFile ) ? 60 * 60 * 12 : 60 * 60 * 24 * 30;
1625 if ( $this->singleLang ) {
1634 $valueToCache = [
'data' => $extendedMetadata,
'timestamp' =>
wfTimestampNow() ];
1635 $cache->set( $cacheKey, $valueToCache, $maxCacheTime );
1638 return $extendedMetadata;
1656 return $file->getExtendedMetadata() ?: [];
1659 $uploadDate =
wfTimestamp( TS_ISO_8601, $file->getTimestamp() );
1664 'value' => $uploadDate,
1665 'source' =>
'mediawiki-metadata',
1669 $title = $file->getTitle();
1671 $text = $title->getText();
1672 $pos = strrpos( $text,
'.' );
1675 $name = substr( $text, 0, $pos );
1680 $fileMetadata[
'ObjectName'] = [
1682 'source' =>
'mediawiki-metadata',
1686 return $fileMetadata;
1702 Hooks::run(
'GetExtendedMetadata', [
1710 $visible = array_flip( self::getVisibleFields() );
1711 foreach ( $extendedMetadata as $key =>
$value ) {
1712 if ( !isset( $visible[strtolower( $key )] ) ) {
1713 $extendedMetadata[$key][
'hidden'] =
'';
1717 return $extendedMetadata;
1731 || !isset(
$value[
'_type'] )
1732 ||
$value[
'_type'] !=
'lang'
1739 foreach ( $priorityLanguages as
$lang ) {
1746 if ( isset(
$value[
'x-default'] ) ) {
1747 return $value[
'x-default'];
1751 unset(
$value[
'_type'] );
1752 if ( !empty(
$value ) ) {
1770 if ( !is_array(
$value ) ) {
1772 } elseif ( isset(
$value[
'_type'] ) &&
$value[
'_type'] ===
'lang' ) {
1775 foreach (
$value as $k => $v ) {
1795 if ( !is_array( $metadata ) ) {
1798 foreach ( $metadata as &$field ) {
1799 if ( isset( $field[
'value'] ) ) {
1812 if ( !is_array( $metadata ) ) {
1815 foreach ( $metadata as $key => &$field ) {
1816 if ( $key ===
'Software' || $key ===
'Contact' ) {
1821 if ( isset( $field[
'value'] ) ) {
1832 if ( !is_array( $arr ) ) {
1837 foreach ( $arr as $key => &
$value ) {
1839 if ( $sanitizedKey !== $key ) {
1840 if ( isset( $arr[$sanitizedKey] ) ) {
1845 $sanitizedKey .= $counter;
1848 $arr[$sanitizedKey] = $arr[$key];
1849 unset( $arr[$key] );
1851 if ( is_array(
$value ) ) {
1857 $keys = array_filter( array_keys( $arr ),
'ApiResult::isMetadataKey' );
1873 $key = preg_replace(
'/[^a-zA-z0-9_:.\-]/',
'', $key );
1875 $key = preg_replace(
'/^[\d\-.]+/',
'', $key );
1882 if ( $key ==
'_element' ) {
1896 $priorityLanguages =
1897 Language::getFallbacksIncludingSiteLanguage( $this->
getLanguage()->getCode() );
1898 $priorityLanguages = array_merge(
1900 $priorityLanguages[0],
1901 $priorityLanguages[1]
1904 return $priorityLanguages;
wfDebug( $text, $dest='all', array $context=[])
Sends a line to the debug log if enabled or, optionally, to a comment in output.
wfTimestampNow()
Convenience function; returns MediaWiki timestamp for the present time.
wfDebugLog( $logGroup, $text, $dest='all', array $context=[])
Send a line to a supplementary debug log file, if configured, or main debug log if not.
wfTimestamp( $outputtype=TS_UNIX, $ts=0)
Get a timestamp string in one of various formats.
static setPreserveKeysList(array &$arr, $names)
Preserve specified keys.
The simplest way of implementing IContextSource is to hold a RequestContext as a member variable and ...
msg( $key)
Get a Message object with context set Parameters are the same as wfMessage()
getContext()
Get the base IContextSource object.
setContext(IContextSource $context)
An IContextSource implementation which will inherit context from another source but allow individual ...
Implements some public methods and some protected utility functions which are required by multiple ch...
Foreign file accessible through api.php requests.
deferred txt A few of the database updates required by various functions here can be deferred until after the result page is displayed to the user For updating the view updating the linked to tables after a etc PHP does not yet have any way to tell the server to actually return and disconnect while still running these but it might have such a feature in the future We handle these by creating a deferred update object and putting those objects on a global list
this class mediates it Skin Encapsulates a look and feel for the wiki All of the functions that render HTML and make choices about how to render it are here and are called from various other places when and is meant to be subclassed with other skins that may override some of its functions The User object contains a reference to a and so rather than having a global skin object we just rely on the global User and get the skin with $wgUser and also has some character encoding functions and other locale stuff The current user interface language is instantiated as and the local content language as $wgContLang
design txt This is a brief overview of the new design More thorough and up to date information is available on the documentation wiki at etc Handles the details of getting and saving to the user table of the and dealing with sessions and cookies OutputPage Encapsulates the entire HTML page that will be sent in response to any server request It is used by calling its functions to add text
design txt This is a brief overview of the new design More thorough and up to date information is available on the documentation wiki at etc Handles the details of getting and saving to the user table of the and dealing with sessions and cookies OutputPage Encapsulates the entire HTML page that will be sent in response to any server request It is used by calling its functions to add in any and then calling but I prefer the flexibility This should also do the output encoding The system allocates a global one in $wgOut Title Represents the title of an and does all the work of translating among various forms such as plain database key
see documentation in includes Linker php for Linker::makeImageLink & $time
either a unescaped string or a HtmlArmor object after in associative array form externallinks including delete and has completed for all link tables whether this was an auto creation default is conds Array Extra conditions for the No matching items in log is displayed if loglist is empty msgKey Array If you want a nice box with a set this to the key of the message First element is the message additional optional elements are parameters for the key that are processed with wfMessage() -> params() ->parseAsBlock() - offset Set to overwrite offset parameter in $wgRequest set to '' to unset offset - wrap String Wrap the message in html(usually something like "<div ...>$1</div>"). - flags Integer display flags(NO_ACTION_LINK, NO_EXTRA_USER_LINKS) 'LogException':Called before an exception(or PHP error) is logged. This is meant for integration with external error aggregation services
this hook is for auditing only or null if authentication failed before getting that far or null if we can t even determine that probably a stub it is not rendered in wiki pages or galleries in category pages allow injecting custom HTML after the section Any uses of the hook need to handle escaping see BaseTemplate::getToolbox and BaseTemplate::makeListItem for details on the format of individual items inside of this array or by returning and letting standard HTTP rendering take place modifiable or by returning false and taking over the output $out
Allows to change the fields on the form that will be generated $name
returning false will NOT prevent logging $e
if(!isset( $args[0])) $lang