Index: branches/wmf/1.17wmf1/maintenance/language/messages.inc |
— | — | @@ -2024,6 +2024,7 @@ |
2025 | 2025 | 'unblocklink', |
2026 | 2026 | 'change-blocklink', |
2027 | 2027 | 'contribslink', |
| 2028 | + 'emaillink', |
2028 | 2029 | 'autoblocker', |
2029 | 2030 | 'blocklogpage', |
2030 | 2031 | 'blocklog-showlog', |
Index: branches/wmf/1.17wmf1/maintenance/purgeParserCache.php |
— | — | @@ -0,0 +1,43 @@ |
| 2 | +<?php |
| 3 | + |
| 4 | +require( dirname( __FILE__ ) . '/Maintenance.php' ); |
| 5 | + |
| 6 | +class PurgeParserCache extends Maintenance { |
| 7 | + function __construct() { |
| 8 | + parent::__construct(); |
| 9 | + $this->addDescription( "Remove old objects from the parser cache. " . |
| 10 | + "This only works when the parser cache is in an SQL database." ); |
| 11 | + $this->addOption( 'expiredate', 'Delete objects expiring before this date.', false, true ); |
| 12 | + $this->addOption( 'age', |
| 13 | + 'Delete objects created more than this many seconds ago, assuming $wgParserCacheExpireTime '. |
| 14 | + 'has been consistent.', |
| 15 | + false, true ); |
| 16 | + } |
| 17 | + |
| 18 | + function execute() { |
| 19 | + $inputDate = $this->getOption( 'expiredate' ); |
| 20 | + $inputAge = $this->getOption( 'age' ); |
| 21 | + if ( $inputDate !== null ) { |
| 22 | + $date = wfTimestamp( TS_MW, strtotime( $inputDate ) ); |
| 23 | + } elseif ( $inputAge !== null ) { |
| 24 | + global $wgParserCacheExpireTime; |
| 25 | + $date = wfTimestamp( TS_MW, time() + $wgParserCacheExpireTime - intval( $inputAge ) ); |
| 26 | + } else { |
| 27 | + echo "Must specify either --expiredate or --age\n"; |
| 28 | + exit( 1 ); |
| 29 | + } |
| 30 | + |
| 31 | + $english = Language::factory( 'en' ); |
| 32 | + echo "Deleting objects expiring before " . $english->timeanddate( $date ) . "\n"; |
| 33 | + |
| 34 | + $pc = wfGetParserCacheStorage(); |
| 35 | + $success = $pc->deleteObjectsExpiringBefore( $date ); |
| 36 | + if ( !$success ) { |
| 37 | + echo "Cannot purge this kind of parser cache.\n"; |
| 38 | + exit( 1 ); |
| 39 | + } |
| 40 | + echo "Done\n"; |
| 41 | + } |
| 42 | +} |
| 43 | +$maintClass = 'PurgeParserCache'; |
| 44 | +require_once( RUN_MAINTENANCE_IF_MAIN ); |
Property changes on: branches/wmf/1.17wmf1/maintenance/purgeParserCache.php |
___________________________________________________________________ |
Added: svn:eol-style |
1 | 45 | + native |
Index: branches/wmf/1.17wmf1/includes/objectcache/BagOStuff.php |
— | — | @@ -86,6 +86,16 @@ |
87 | 87 | return array(); |
88 | 88 | } |
89 | 89 | |
| 90 | + /** |
| 91 | + * Delete all objects expiring before a certain date. |
| 92 | + * |
| 93 | + * @return true on success, false if unimplemented |
| 94 | + */ |
| 95 | + public function deleteObjectsExpiringBefore( $date ) { |
| 96 | + // stub |
| 97 | + return false; |
| 98 | + } |
| 99 | + |
90 | 100 | /* *** Emulated functions *** */ |
91 | 101 | |
92 | 102 | public function add( $key, $value, $exptime = 0 ) { |
Index: branches/wmf/1.17wmf1/includes/objectcache/SqlBagOStuff.php |
— | — | @@ -287,21 +287,29 @@ |
288 | 288 | } |
289 | 289 | |
290 | 290 | public function expireAll() { |
| 291 | + $this->deleteObjectsExpiringBefore( wfTimestampNow() ); |
| 292 | + } |
| 293 | + |
| 294 | + /** |
| 295 | + * Delete objects from the database which expire before a certain date. |
| 296 | + */ |
| 297 | + public function deleteObjectsExpiringBefore( $timestamp ) { |
291 | 298 | $db = $this->getDB(); |
292 | | - $now = $db->timestamp(); |
| 299 | + $dbTimestamp = $db->timestamp( $timestamp ); |
293 | 300 | |
294 | 301 | try { |
295 | 302 | for ( $i = 0; $i < $this->shards; $i++ ) { |
296 | 303 | $db->begin(); |
297 | 304 | $db->delete( |
298 | 305 | $this->getTableByShard( $i ), |
299 | | - array( 'exptime < ' . $db->addQuotes( $now ) ), |
| 306 | + array( 'exptime < ' . $db->addQuotes( $dbTimestamp ) ), |
300 | 307 | __METHOD__ ); |
301 | 308 | $db->commit(); |
302 | 309 | } |
303 | 310 | } catch ( DBQueryError $e ) { |
304 | 311 | $this->handleWriteError( $e ); |
305 | 312 | } |
| 313 | + return true; |
306 | 314 | } |
307 | 315 | |
308 | 316 | public function deleteAll() { |
Property changes on: branches/wmf/1.17wmf1/includes/objectcache/SqlBagOStuff.php |
___________________________________________________________________ |
Modified: svn:mergeinfo |
309 | 317 | Merged /trunk/phase3/includes/objectcache/SqlBagOStuff.php:r94212,96373,96386,96399,96420,96645 |
Index: branches/wmf/1.17wmf1/includes/objectcache/MultiWriteBagOStuff.php |
— | — | @@ -87,9 +87,25 @@ |
88 | 88 | array_shift( $args ); |
89 | 89 | |
90 | 90 | foreach ( $this->caches as $cache ) { |
91 | | - $ret = $ret && call_user_func_array( array( $cache, $method ), $args ); |
| 91 | + if ( !call_user_func_array( array( $cache, $method ), $args ) ) { |
| 92 | + $ret = false; |
| 93 | + } |
92 | 94 | } |
93 | 95 | return $ret; |
94 | 96 | } |
95 | 97 | |
| 98 | + /** |
| 99 | + * Delete objects expiring before a certain date. |
| 100 | + * |
| 101 | + * Succeed if any of the child caches succeed. |
| 102 | + */ |
| 103 | + public function deleteObjectsExpiringBefore( $date ) { |
| 104 | + $ret = false; |
| 105 | + foreach ( $this->caches as $cache ) { |
| 106 | + if ( $cache->deleteObjectsExpiringBefore( $date ) ) { |
| 107 | + $ret = true; |
| 108 | + } |
| 109 | + } |
| 110 | + return $ret; |
| 111 | + } |
96 | 112 | } |
Index: branches/wmf/1.17wmf1/includes/Linker.php |
— | — | @@ -14,6 +14,7 @@ |
15 | 15 | * Flags for userToolLinks() |
16 | 16 | */ |
17 | 17 | const TOOL_LINKS_NOBLOCK = 1; |
| 18 | + const TOOL_LINKS_EMAIL = 2; |
18 | 19 | |
19 | 20 | function __construct() {} |
20 | 21 | |
— | — | @@ -852,7 +853,7 @@ |
853 | 854 | * @param $userText String: user name or IP address |
854 | 855 | * @param $redContribsWhenNoEdits Boolean: should the contributions link be |
855 | 856 | * red if the user has no edits? |
856 | | - * @param $flags Integer: customisation flags (e.g. self::TOOL_LINKS_NOBLOCK) |
| 857 | + * @param $flags Integer: customisation flags (e.g. Linker::TOOL_LINKS_NOBLOCK and Linker::TOOL_LINKS_EMAIL) |
857 | 858 | * @param $edits Integer: user edit count (optional, for performance) |
858 | 859 | * @return String: HTML fragment |
859 | 860 | */ |
— | — | @@ -860,6 +861,7 @@ |
861 | 862 | global $wgUser, $wgDisableAnonTalk, $wgSysopUserBans, $wgLang; |
862 | 863 | $talkable = !( $wgDisableAnonTalk && 0 == $userId ); |
863 | 864 | $blockable = ( $wgSysopUserBans || 0 == $userId ) && !$flags & self::TOOL_LINKS_NOBLOCK; |
| 865 | + $addEmailLink = $flags & self::TOOL_LINKS_EMAIL; |
864 | 866 | |
865 | 867 | $items = array(); |
866 | 868 | if ( $talkable ) { |
— | — | @@ -882,6 +884,10 @@ |
883 | 885 | $items[] = $this->blockLink( $userId, $userText ); |
884 | 886 | } |
885 | 887 | |
| 888 | + if ( $addEmailLink && $wgUser->canSendEmail() ) { |
| 889 | + $items[] = self::emailLink( $userId, $userText ); |
| 890 | + } |
| 891 | + |
886 | 892 | if ( $items ) { |
887 | 893 | return ' <span class="mw-usertoollinks">(' . $wgLang->pipeList( $items ) . ')</span>'; |
888 | 894 | } else { |
— | — | @@ -925,6 +931,18 @@ |
926 | 932 | } |
927 | 933 | |
928 | 934 | /** |
| 935 | + * @param $userId Integer: userid |
| 936 | + * @param $userText String: user name in database. |
| 937 | + * @return String: HTML fragment with e-mail user link |
| 938 | + * @private |
| 939 | + */ |
| 940 | + static function emailLink( $userId, $userText ) { |
| 941 | + $emailPage = SpecialPage::getTitleFor( 'EmailUser', $userText ); |
| 942 | + $emailLink = self::link( $emailPage, wfMsgHtml( 'emaillink' ) ); |
| 943 | + return $emailLink; |
| 944 | + } |
| 945 | + |
| 946 | + /** |
929 | 947 | * Generate a user link if the current user is allowed to view it |
930 | 948 | * @param $rev Revision object. |
931 | 949 | * @param $isPublic Boolean: show only if all users can see it |
Index: branches/wmf/1.17wmf1/includes/filerepo/LocalFile.php |
— | — | @@ -591,12 +591,19 @@ |
592 | 592 | |
593 | 593 | /** |
594 | 594 | * Get all thumbnail names previously generated for this file |
| 595 | + * @param $archiveName string|false Name of an archive file |
| 596 | + * @return array first element is the base dir, then files in that base dir. |
595 | 597 | */ |
596 | | - function getThumbnails() { |
| 598 | + function getThumbnails( $archiveName = false ) { |
597 | 599 | $this->load(); |
598 | 600 | |
| 601 | + if ( $archiveName ) { |
| 602 | + $dir = $this->getArchiveThumbPath( $archiveName ); |
| 603 | + } else { |
| 604 | + $dir = $this->getThumbPath(); |
| 605 | + } |
599 | 606 | $files = array(); |
600 | | - $dir = $this->getThumbPath(); |
| 607 | + $files[] = $dir; |
601 | 608 | |
602 | 609 | if ( is_dir( $dir ) ) { |
603 | 610 | $handle = opendir( $dir ); |
— | — | @@ -633,6 +640,11 @@ |
634 | 641 | $hashedName = md5( $this->getName() ); |
635 | 642 | $oldKey = $this->repo->getSharedCacheKey( 'oldfile', $hashedName ); |
636 | 643 | |
| 644 | + // Must purge thumbnails for old versions too! bug 30192 |
| 645 | + foreach( $this->getHistory() as $oldFile ) { |
| 646 | + $oldFile->purgeThumbnails(); |
| 647 | + } |
| 648 | + |
637 | 649 | if ( $oldKey ) { |
638 | 650 | $wgMemc->delete( $oldKey ); |
639 | 651 | } |
— | — | @@ -653,32 +665,74 @@ |
654 | 666 | } |
655 | 667 | |
656 | 668 | /** |
657 | | - * Delete cached transformed files |
| 669 | + * Delete cached transformed files for archived files |
| 670 | + * @param $archiveName string name of the archived file |
658 | 671 | */ |
| 672 | + function purgeOldThumbnails( $archiveName ) { |
| 673 | + global $wgUseSquid; |
| 674 | + // get a list of old thumbnails and URLs |
| 675 | + $files = $this->getThumbnails( $archiveName ); |
| 676 | + $dir = array_shift( $files ); |
| 677 | + $this->purgeThumbList( $dir, $files ); |
| 678 | + |
| 679 | + // Directory should be empty, delete it too. This will probably suck on |
| 680 | + // something like NFS or if the directory isn't actually empty, so hide |
| 681 | + // the warnings :D |
| 682 | + wfSuppressWarnings(); |
| 683 | + if( !rmdir( $dir ) ) { |
| 684 | + wfDebug( __METHOD__ . ": unable to remove archive directory: $dir\n" ); |
| 685 | + } |
| 686 | + wfRestoreWarnings(); |
| 687 | + |
| 688 | + // Purge the squid |
| 689 | + if ( $wgUseSquid ) { |
| 690 | + $urls = array(); |
| 691 | + foreach( $files as $file ) { |
| 692 | + $urls[] = $this->getArchiveThumbUrl( $archiveName, $file ); |
| 693 | + } |
| 694 | + SquidUpdate::purge( $urls ); |
| 695 | + } |
| 696 | + } |
| 697 | + |
| 698 | + |
| 699 | + /** |
| 700 | + * Delete cached transformed files for the current version only. |
| 701 | + */ |
659 | 702 | function purgeThumbnails() { |
660 | 703 | global $wgUseSquid; |
661 | | - |
662 | | - // Delete thumbnails |
| 704 | + // get a list of thumbnails and URLs |
663 | 705 | $files = $this->getThumbnails(); |
664 | | - $dir = $this->getThumbPath(); |
665 | | - $urls = array(); |
| 706 | + $dir = array_shift( $files ); |
| 707 | + $this->purgeThumbList( $dir, $files ); |
666 | 708 | |
| 709 | + // Purge the squid |
| 710 | + if ( $wgUseSquid ) { |
| 711 | + $urls = array(); |
| 712 | + foreach( $files as $file ) { |
| 713 | + $urls[] = $this->getThumbUrl( $file ); |
| 714 | + } |
| 715 | + SquidUpdate::purge( $urls ); |
| 716 | + } |
| 717 | + } |
| 718 | + |
| 719 | + /** |
| 720 | + * Delete a list of thumbnails visible at urls |
| 721 | + * @param $dir string base dir of the files. |
| 722 | + * @param $files array of strings: relative filenames (to $dir) |
| 723 | + */ |
| 724 | + function purgeThumbList($dir, $files) { |
| 725 | + global $wgExcludeFromThumbnailPurge; |
| 726 | + |
| 727 | + wfDebug( __METHOD__ . ": " . var_export( $files, true ) . "\n" ); |
667 | 728 | foreach ( $files as $file ) { |
668 | 729 | # Check that the base file name is part of the thumb name |
669 | 730 | # This is a basic sanity check to avoid erasing unrelated directories |
670 | 731 | if ( strpos( $file, $this->getName() ) !== false ) { |
671 | | - $url = $this->getThumbUrl( $file ); |
672 | | - $urls[] = $url; |
673 | 732 | wfSuppressWarnings(); |
674 | 733 | unlink( "$dir/$file" ); |
675 | 734 | wfRestoreWarnings(); |
676 | 735 | } |
677 | 736 | } |
678 | | - |
679 | | - // Purge the squid |
680 | | - if ( $wgUseSquid ) { |
681 | | - SquidUpdate::purge( $urls ); |
682 | | - } |
683 | 737 | } |
684 | 738 | |
685 | 739 | /** purgeDescription inherited */ |
— | — | @@ -1134,6 +1188,7 @@ |
1135 | 1189 | array( 'oi_name' => $this->getName() ) ); |
1136 | 1190 | foreach ( $result as $row ) { |
1137 | 1191 | $batch->addOld( $row->oi_archive_name ); |
| 1192 | + $this->purgeOldThumbnails( $row->oi_archive_name ); |
1138 | 1193 | } |
1139 | 1194 | $status = $batch->execute(); |
1140 | 1195 | |
— | — | @@ -1168,6 +1223,7 @@ |
1169 | 1224 | |
1170 | 1225 | $batch = new LocalFileDeleteBatch( $this, $reason, $suppress ); |
1171 | 1226 | $batch->addOld( $archiveName ); |
| 1227 | + $this->purgeOldThumbnails( $archiveName ); |
1172 | 1228 | $status = $batch->execute(); |
1173 | 1229 | |
1174 | 1230 | $this->unlock(); |
Property changes on: branches/wmf/1.17wmf1/includes/filerepo/LocalFile.php |
___________________________________________________________________ |
Modified: svn:mergeinfo |
1175 | 1231 | Merged /trunk/phase3/includes/filerepo/LocalFile.php:r94212,96373,96386,96399,96420,96645 |
Index: branches/wmf/1.17wmf1/includes/filerepo/File.php |
— | — | @@ -766,7 +766,13 @@ |
767 | 767 | return $this->getHashPath() . rawurlencode( $this->getName() ); |
768 | 768 | } |
769 | 769 | |
770 | | - /** Get the relative path for an archive file */ |
| 770 | + /** |
| 771 | + * Get the relative path for an archived file |
| 772 | + * |
| 773 | + * @param $suffix bool|string if not false, the name of an archived thumbnail file |
| 774 | + * |
| 775 | + * @return string |
| 776 | + */ |
771 | 777 | function getArchiveRel( $suffix = false ) { |
772 | 778 | $path = 'archive/' . $this->getHashPath(); |
773 | 779 | if ( $suffix === false ) { |
— | — | @@ -777,12 +783,53 @@ |
778 | 784 | return $path; |
779 | 785 | } |
780 | 786 | |
781 | | - /** Get the path of the archive directory, or a particular file if $suffix is specified */ |
| 787 | + /** |
| 788 | + * Get the relative path for an archived file's thumbs directory |
| 789 | + * or a specific thumb if the $suffix is given. |
| 790 | + * |
| 791 | + * @param $archiveName string the timestamped name of an archived image |
| 792 | + * @param $suffix bool|string if not false, the name of a thumbnail file |
| 793 | + */ |
| 794 | + function getArchiveThumbRel( $archiveName, $suffix = false ) { |
| 795 | + $path = 'archive/' . $this->getHashPath() . $archiveName . "/"; |
| 796 | + if ( $suffix === false ) { |
| 797 | + $path = substr( $path, 0, -1 ); |
| 798 | + } else { |
| 799 | + $path .= $suffix; |
| 800 | + } |
| 801 | + return $path; |
| 802 | + } |
| 803 | + |
| 804 | + /** |
| 805 | + * Get the path of the archive directory, or a particular file if $suffix is specified */ |
| 806 | + * |
| 807 | + * @param $suffix bool|string if not false, the name of an archived file. |
| 808 | + * |
| 809 | + * @return string |
| 810 | + */ |
782 | 811 | function getArchivePath( $suffix = false ) { |
783 | | - return $this->repo->getZonePath('public') . '/' . $this->getArchiveRel( $suffix ); |
| 812 | + return $this->repo->getZonePath( 'public' ) . '/' . $this->getArchiveRel( $suffix ); |
784 | 813 | } |
785 | 814 | |
786 | | - /** Get the path of the thumbnail directory, or a particular file if $suffix is specified */ |
| 815 | + /** |
| 816 | + * Get the path of the archived file's thumbs, or a particular thumb if $suffix is specified |
| 817 | + * |
| 818 | + * @param $archiveName string the timestamped name of an archived image |
| 819 | + * @param $suffix bool|string if not false, the name of a thumbnail file |
| 820 | + * |
| 821 | + * @return string |
| 822 | + */ |
| 823 | + function getArchiveThumbPath( $archiveName, $suffix = false ) { |
| 824 | + return $this->repo->getZonePath( 'thumb' ) . '/' . $this->getArchiveThumbRel( $archiveName, $suffix ); |
| 825 | + } |
| 826 | + |
| 827 | + /** |
| 828 | + * Get the path of the thumbnail directory, or a particular file if $suffix is specified |
| 829 | + * |
| 830 | + * @param $suffix bool|string if not false, the name of a thumbnail file |
| 831 | + * |
| 832 | + * @return string |
| 833 | + */ |
787 | 834 | function getThumbPath( $suffix = false ) { |
788 | 835 | $path = $this->repo->getZonePath('thumb') . '/' . $this->getRel(); |
789 | 836 | if ( $suffix !== false ) { |
— | — | @@ -791,7 +838,13 @@ |
792 | 839 | return $path; |
793 | 840 | } |
794 | 841 | |
795 | | - /** Get the URL of the archive directory, or a particular file if $suffix is specified */ |
| 842 | + /** |
| 843 | + * Get the URL of the archive directory, or a particular file if $suffix is specified |
| 844 | + * |
| 845 | + * @param $suffix bool|string if not false, the name of an archived file |
| 846 | + * |
| 847 | + * @return string |
| 848 | + */ |
796 | 849 | function getArchiveUrl( $suffix = false ) { |
797 | 850 | $path = $this->repo->getZoneUrl('public') . '/archive/' . $this->getHashPath(); |
798 | 851 | if ( $suffix === false ) { |
— | — | @@ -802,7 +855,31 @@ |
803 | 856 | return $path; |
804 | 857 | } |
805 | 858 | |
806 | | - /** Get the URL of the thumbnail directory, or a particular file if $suffix is specified */ |
| 859 | + /** |
| 860 | + * Get the URL of the archived file's thumbs, or a particular thumb if $suffix is specified |
| 861 | + * |
| 862 | + * @param $archiveName string the timestamped name of an archived image |
| 863 | + * @param $suffix bool|string if not false, the name of a thumbnail file |
| 864 | + * |
| 865 | + * @return string |
| 866 | + */ |
| 867 | + function getArchiveThumbUrl( $archiveName, $suffix = false ) { |
| 868 | + $path = $this->repo->getZoneUrl('thumb') . '/archive/' . $this->getHashPath() . rawurlencode( $archiveName ) . "/"; |
| 869 | + if ( $suffix === false ) { |
| 870 | + $path = substr( $path, 0, -1 ); |
| 871 | + } else { |
| 872 | + $path .= rawurlencode( $suffix ); |
| 873 | + } |
| 874 | + return $path; |
| 875 | + } |
| 876 | + |
| 877 | + /** |
| 878 | + * Get the URL of the thumbnail directory, or a particular file if $suffix is specified |
| 879 | + * |
| 880 | + * @param $suffix bool|string if not false, the name of a thumbnail file |
| 881 | + * |
| 882 | + * @return path |
| 883 | + */ |
807 | 884 | function getThumbUrl( $suffix = false ) { |
808 | 885 | $path = $this->repo->getZoneUrl('thumb') . '/' . $this->getUrlRel(); |
809 | 886 | if ( $suffix !== false ) { |
— | — | @@ -812,6 +889,13 @@ |
813 | 890 | } |
814 | 891 | |
815 | 892 | /** Get the virtual URL for an archive file or directory */ |
| 893 | + /** |
| 894 | + * Get the virtual URL for an archived file's thumbs, or a specific thumb. |
| 895 | + * |
| 896 | + * @param $suffix bool|string if not false, the name of a thumbnail file |
| 897 | + * |
| 898 | + * @return string |
| 899 | + */ |
816 | 900 | function getArchiveVirtualUrl( $suffix = false ) { |
817 | 901 | $path = $this->repo->getVirtualUrl() . '/public/archive/' . $this->getHashPath(); |
818 | 902 | if ( $suffix === false ) { |
— | — | @@ -822,7 +906,13 @@ |
823 | 907 | return $path; |
824 | 908 | } |
825 | 909 | |
826 | | - /** Get the virtual URL for a thumbnail file or directory */ |
| 910 | + /** |
| 911 | + * Get the virtual URL for a thumbnail file or directory |
| 912 | + * |
| 913 | + * @param $suffix bool|string if not false, the name of a thumbnail file |
| 914 | + * |
| 915 | + * @return string |
| 916 | + */ |
827 | 917 | function getThumbVirtualUrl( $suffix = false ) { |
828 | 918 | $path = $this->repo->getVirtualUrl() . '/thumb/' . $this->getUrlRel(); |
829 | 919 | if ( $suffix !== false ) { |
— | — | @@ -831,7 +921,13 @@ |
832 | 922 | return $path; |
833 | 923 | } |
834 | 924 | |
835 | | - /** Get the virtual URL for the file itself */ |
| 925 | + /** |
| 926 | + * Get the virtual URL for the file itself |
| 927 | + * |
| 928 | + * @param $suffix bool|string if not false, the name of a thumbnail file |
| 929 | + * |
| 930 | + * @return string |
| 931 | + */ |
836 | 932 | function getVirtualUrl( $suffix = false ) { |
837 | 933 | $path = $this->repo->getVirtualUrl() . '/public/' . $this->getUrlRel(); |
838 | 934 | if ( $suffix !== false ) { |
Property changes on: branches/wmf/1.17wmf1/includes/filerepo/File.php |
___________________________________________________________________ |
Modified: svn:mergeinfo |
839 | 935 | Merged /trunk/phase3/includes/filerepo/File.php:r94212,96373,96386,96399,96420,96645 |
Index: branches/wmf/1.17wmf1/includes/IP.php |
— | — | @@ -319,7 +319,7 @@ |
320 | 320 | static $privateRanges = false; |
321 | 321 | if ( !$privateRanges ) { |
322 | 322 | $privateRanges = array( |
323 | | - array( 'fc::', 'fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' ), # RFC 4193 (local) |
| 323 | + array( 'fc00::', 'fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' ), # RFC 4193 (local) |
324 | 324 | array( '0:0:0:0:0:0:0:1', '0:0:0:0:0:0:0:1' ), # loopback |
325 | 325 | ); |
326 | 326 | } |
Index: branches/wmf/1.17wmf1/languages/messages/MessagesQqq.php |
— | — | @@ -2641,13 +2641,15 @@ |
2642 | 2642 | 'anononlyblock' => 'Part of the log entry of user block. |
2643 | 2643 | |
2644 | 2644 | {{Identical|Anon only}}', |
2645 | | -'noautoblockblock' => '{{Identical|Autoblock disabled}}', |
2646 | | -'emailblock' => '{{Identical|E-mail blocked}}', |
2647 | | -'blocklist-nousertalk' => 'Used in [[Special:IPBlockList]] when "Allow this user to edit own talk page while blocked" option hasn\'t been flagged. See also {{msg-mw|Block-log-flags-nousertalk}}.', |
2648 | | -'blocklink' => "Display name for a link that, when selected, leads to a form where a user can be blocked. Used in page history and recent changes pages. Example: \"''UserName (Talk | contribs | '''block''')''\".", |
2649 | | -'change-blocklink' => 'Used to name the link on Special:Log', |
2650 | | -'contribslink' => 'Short for "contributions". Used as display name for a link to user contributions on history pages, [[Special:RecentChanges]], [[Special:Watchlist]], etc.', |
2651 | | -'blocklogpage' => "The page name of [[Special:Log/block]]. Also appears in the drop down menu of [[Special:Log]] pages and in the action links of Special:Contributions/''Username'' pages (e.g. \"For Somebody (talk | block log | logs)\"). |
| 2645 | +'noautoblockblock' => '{{Identical|Autoblock disabled}}', |
| 2646 | +'emailblock' => '{{Identical|E-mail blocked}}', |
| 2647 | +'blocklist-nousertalk' => 'Used in [[Special:IPBlockList]] when "Allow this user to edit own talk page while blocked" option hasn\'t been flagged. See also {{msg-mw|Block-log-flags-nousertalk}}.', |
| 2648 | +'ipblocklist-empty' => 'Shown on page [[Special:Blocklist]], if no blocks are to be shown.', |
| 2649 | +'blocklink' => "Display name for a link that, when selected, leads to a form where a user can be blocked. Used in page history and recent changes pages. Example: \"''UserName (Talk | contribs | '''block''')''\".", |
| 2650 | +'change-blocklink' => 'Used to name the link on Special:Log', |
| 2651 | +'contribslink' => 'Short for "contributions". Used as display name for a link to user contributions on history pages, [[Special:RecentChanges]], [[Special:Watchlist]], etc.', |
| 2652 | +'emaillink' => 'Used as display name for a link to send an e-mail to a user in the user tool links. Example: "(Talk | contribs | block | send e-mail)".', |
| 2653 | +'blocklogpage' => "The page name of [[Special:Log/block]]. Also appears in the drop down menu of [[Special:Log]] pages and in the action links of Special:Contributions/''Username'' pages (e.g. \"For Somebody (talk | block log | logs)\"). |
2652 | 2654 | |
2653 | 2655 | {{Identical|Block log}}", |
2654 | 2656 | 'blocklog-showlog' => 'Parameters: |
Index: branches/wmf/1.17wmf1/languages/messages/MessagesEn.php |
— | — | @@ -3028,6 +3028,7 @@ |
3029 | 3029 | 'unblocklink' => 'unblock', |
3030 | 3030 | 'change-blocklink' => 'change block', |
3031 | 3031 | 'contribslink' => 'contribs', |
| 3032 | +'emaillink' => 'send e-mail', |
3032 | 3033 | 'autoblocker' => 'Autoblocked because your IP address has been recently used by "[[User:$1|$1]]". |
3033 | 3034 | The reason given for $1\'s block is: "$2"', |
3034 | 3035 | 'blocklogpage' => 'Block log', |
Property changes on: branches/wmf/1.17wmf1/languages/messages/MessagesEn.php |
___________________________________________________________________ |
Modified: svn:mergeinfo |
3035 | 3036 | Merged /trunk/phase3/languages/messages/MessagesEn.php:r94212,96373,96386,96399,96420,96645 |