diff options
Diffstat (limited to 'includes/specials/SpecialVersion.php')
-rw-r--r-- | includes/specials/SpecialVersion.php | 308 |
1 files changed, 132 insertions, 176 deletions
diff --git a/includes/specials/SpecialVersion.php b/includes/specials/SpecialVersion.php index 4e5b6bf5..5ba785f5 100644 --- a/includes/specials/SpecialVersion.php +++ b/includes/specials/SpecialVersion.php @@ -40,7 +40,7 @@ class SpecialVersion extends SpecialPage { 'https://svn.wikimedia.org/svnroot/mediawiki' => 'https://svn.wikimedia.org/viewvc/mediawiki', ); - public function __construct(){ + public function __construct() { parent::__construct( 'Version' ); } @@ -48,29 +48,41 @@ class SpecialVersion extends SpecialPage { * main() */ public function execute( $par ) { - global $wgSpecialVersionShowHooks; + global $wgSpecialVersionShowHooks, $IP; $this->setHeaders(); $this->outputHeader(); $out = $this->getOutput(); $out->allowClickjacking(); - $text = - $this->getMediaWikiCredits() . - $this->softwareInformation() . - $this->getEntryPointInfo() . - $this->getExtensionCredits(); - if ( $wgSpecialVersionShowHooks ) { - $text .= $this->getWgHooks(); - } + if ( $par !== 'Credits' ) { + $text = + $this->getMediaWikiCredits() . + $this->softwareInformation() . + $this->getEntryPointInfo() . + $this->getExtensionCredits(); + if ( $wgSpecialVersionShowHooks ) { + $text .= $this->getWgHooks(); + } - $out->addWikiText( $text ); - $out->addHTML( $this->IPInfo() ); + $out->addWikiText( $text ); + $out->addHTML( $this->IPInfo() ); - if ( $this->getRequest()->getVal( 'easteregg' ) ) { - if ( $this->showEasterEgg() ) { + if ( $this->getRequest()->getVal( 'easteregg' ) ) { // TODO: put something interesting here } + } else { + // Credits sub page + + // Header + $out->addHTML( wfMessage( 'version-credits-summary' )->parseAsBlock() ); + + $wikiText = file_get_contents( $IP . '/CREDITS' ); + + // Take everything from the first section onwards, to remove the (not localized) header + $wikiText = substr( $wikiText, strpos( $wikiText, '==' ) ); + + $out->addWikiText( $wikiText ); } } @@ -100,6 +112,14 @@ class SpecialVersion extends SpecialPage { public static function getCopyrightAndAuthorList() { global $wgLang; + if ( defined( 'MEDIAWIKI_INSTALL' ) ) { + $othersLink = '[//www.mediawiki.org/wiki/Special:Version/Credits ' . wfMessage( 'version-poweredby-others' )->text() . ']'; + } else { + $othersLink = '[[Special:Version/Credits|' . wfMessage( 'version-poweredby-others' )->text() . ']]'; + } + + $translatorsLink = '[//translatewiki.net/wiki/Translating:MediaWiki/Credits ' . wfMessage( 'version-poweredby-translators' )->text() . ']'; + $authorList = array( 'Magnus Manske', 'Brion Vibber', 'Lee Daniel Crocker', 'Tim Starling', 'Erik Möller', 'Gabriel Wicke', 'Ævar Arnfjörð Bjarmason', @@ -108,13 +128,11 @@ class SpecialVersion extends SpecialPage { 'Alexandre Emsenhuber', 'Siebrand Mazeland', 'Chad Horohoe', 'Roan Kattouw', 'Trevor Parscal', 'Bryan Tong Minh', 'Sam Reed', 'Victor Vasiliev', 'Rotem Liss', 'Platonides', 'Antoine Musso', - 'Timo Tijhof', - '[{{SERVER}}{{SCRIPTPATH}}/CREDITS ' . - wfMessage( 'version-poweredby-others' )->text() . - ']' + 'Timo Tijhof', 'Daniel Kinzler', 'Jeroen De Dauw', $othersLink, + $translatorsLink ); - return wfMessage( 'version-poweredby-credits', date( 'Y' ), + return wfMessage( 'version-poweredby-credits', MWTimestamp::getLocalInstance()->format( 'Y' ), $wgLang->listToText( $authorList ) )->text(); } @@ -131,20 +149,20 @@ class SpecialVersion extends SpecialPage { // wikimarkup can be used. $software = array(); $software['[https://www.mediawiki.org/ MediaWiki]'] = self::getVersionLinked(); - $software['[http://www.php.net/ PHP]'] = phpversion() . " (" . php_sapi_name() . ")"; + $software['[http://www.php.net/ PHP]'] = phpversion() . " (" . PHP_SAPI . ")"; $software[$dbr->getSoftwareLink()] = $dbr->getServerInfo(); // Allow a hook to add/remove items. wfRunHooks( 'SoftwareInfo', array( &$software ) ); $out = Xml::element( 'h2', array( 'id' => 'mw-version-software' ), wfMessage( 'version-software' )->text() ) . - Xml::openElement( 'table', array( 'class' => 'wikitable plainlinks', 'id' => 'sv-software' ) ) . + Xml::openElement( 'table', array( 'class' => 'wikitable plainlinks', 'id' => 'sv-software' ) ) . "<tr> <th>" . wfMessage( 'version-software-product' )->text() . "</th> <th>" . wfMessage( 'version-software-version' )->text() . "</th> </tr>\n"; - foreach( $software as $name => $version ) { + foreach ( $software as $name => $version ) { $out .= "<tr> <td>" . $name . "</td> <td dir=\"ltr\">" . $version . "</td> @@ -203,11 +221,11 @@ class SpecialVersion extends SpecialPage { wfProfileIn( __METHOD__ ); $gitVersion = self::getVersionLinkedGit(); - if( $gitVersion ) { + if ( $gitVersion ) { $v = $gitVersion; } else { $svnVersion = self::getVersionLinkedSvn(); - if( $svnVersion ) { + if ( $svnVersion ) { $v = $svnVersion; } else { $v = $wgVersion; // fallback @@ -222,10 +240,10 @@ class SpecialVersion extends SpecialPage { * @return string wgVersion + a link to subversion revision of svn BASE */ private static function getVersionLinkedSvn() { - global $wgVersion, $IP; + global $IP; $info = self::getSvnInfo( $IP ); - if( !isset( $info['checkout-rev'] ) ) { + if ( !isset( $info['checkout-rev'] ) ) { return false; } @@ -236,32 +254,54 @@ class SpecialVersion extends SpecialPage { )->text(); if ( isset( $info['viewvc-url'] ) ) { - $version = "$wgVersion [{$info['viewvc-url']} $linkText]"; + $version = "[{$info['viewvc-url']} $linkText]"; } else { - $version = "$wgVersion $linkText"; + $version = $linkText; } - return $version; + return self::getwgVersionLinked() . " $version"; + } + + /** + * @return string + */ + private static function getwgVersionLinked() { + global $wgVersion; + $versionUrl = ""; + if ( wfRunHooks( 'SpecialVersionVersionUrl', array( $wgVersion, &$versionUrl ) ) ) { + $versionParts = array(); + preg_match( "/^(\d+\.\d+)/", $wgVersion, $versionParts ); + $versionUrl = "https://www.mediawiki.org/wiki/MediaWiki_{$versionParts[1]}"; + } + return "[$versionUrl $wgVersion]"; } /** - * @return bool|string wgVersion + HEAD sha1 stripped to the first 7 chars. False on failure + * @since 1.22 Returns the HEAD date in addition to the sha1 and link + * @return bool|string wgVersion + HEAD sha1 stripped to the first 7 chars with link and date, or false on failure */ private static function getVersionLinkedGit() { - global $wgVersion, $IP; + global $IP, $wgLang; $gitInfo = new GitInfo( $IP ); $headSHA1 = $gitInfo->getHeadSHA1(); - if( !$headSHA1 ) { + if ( !$headSHA1 ) { return false; } $shortSHA1 = '(' . substr( $headSHA1, 0, 7 ) . ')'; - $viewerUrl = $gitInfo->getHeadViewUrl(); - if ( $viewerUrl !== false ) { - $shortSHA1 = "[$viewerUrl $shortSHA1]"; + + $gitHeadUrl = $gitInfo->getHeadViewUrl(); + if ( $gitHeadUrl !== false ) { + $shortSHA1 = "[$gitHeadUrl $shortSHA1]"; } - return "$wgVersion $shortSHA1"; + + $gitHeadCommitDate = $gitInfo->getHeadCommitDate(); + if ( $gitHeadCommitDate ) { + $shortSHA1 .= "<br/>" . $wgLang->timeanddate( $gitHeadCommitDate, true ); + } + + return self::getwgVersionLinked() . " $shortSHA1"; } /** @@ -353,11 +393,6 @@ class SpecialVersion extends SpecialPage { // We want the 'other' type to be last in the list. $out .= $this->getExtensionCategory( 'other', $extensionTypes['other'] ); - if ( count( $wgExtensionFunctions ) ) { - $out .= $this->openExtType( $this->msg( 'version-extension-functions' )->text(), 'extension-functions' ); - $out .= '<tr><td colspan="4">' . $this->listToText( $wgExtensionFunctions ) . "</td></tr>\n"; - } - $tags = $wgParser->getTags(); $cnt = count( $tags ); @@ -366,11 +401,11 @@ class SpecialVersion extends SpecialPage { $tags[$i] = "<{$tags[$i]}>"; } $out .= $this->openExtType( $this->msg( 'version-parser-extensiontags' )->text(), 'parser-tags' ); - $out .= '<tr><td colspan="4">' . $this->listToText( $tags ). "</td></tr>\n"; + $out .= '<tr><td colspan="4">' . $this->listToText( $tags ) . "</td></tr>\n"; } $fhooks = $wgParser->getFunctionHooks(); - if( count( $fhooks ) ) { + if ( count( $fhooks ) ) { $out .= $this->openExtType( $this->msg( 'version-parser-function-hooks' )->text(), 'parser-function-hooks' ); $out .= '<tr><td colspan="4">' . $this->listToText( $fhooks ) . "</td></tr>\n"; } @@ -415,7 +450,7 @@ class SpecialVersion extends SpecialPage { * @return int */ function compare( $a, $b ) { - if( $a['name'] === $b['name'] ) { + if ( $a['name'] === $b['name'] ) { return 0; } else { return $this->getLanguage()->lc( $a['name'] ) > $this->getLanguage()->lc( $b['name'] ) @@ -432,6 +467,8 @@ class SpecialVersion extends SpecialPage { * @return string */ function getCreditsForExtension( array $extension ) { + global $wgLang; + $name = isset( $extension['name'] ) ? $extension['name'] : '[no name]'; $vcsText = false; @@ -445,6 +482,10 @@ class SpecialVersion extends SpecialPage { if ( $gitViewerUrl !== false ) { $vcsText = "[$gitViewerUrl $vcsText]"; } + $gitHeadCommitDate = $gitInfo->getHeadCommitDate(); + if ( $gitHeadCommitDate ) { + $vcsText .= "<br/>" . $wgLang->timeanddate( $gitHeadCommitDate, true ); + } } else { $svnInfo = self::getSvnInfo( dirname( $extension['path'] ) ); # Make subversion text/link. @@ -472,13 +513,13 @@ class SpecialVersion extends SpecialPage { } # Make description text. - $description = isset ( $extension['description'] ) ? $extension['description'] : ''; + $description = isset( $extension['description'] ) ? $extension['description'] : ''; - if( isset ( $extension['descriptionmsg'] ) ) { + if ( isset( $extension['descriptionmsg'] ) ) { # Look for a localized description. $descriptionMsg = $extension['descriptionmsg']; - if( is_array( $descriptionMsg ) ) { + if ( is_array( $descriptionMsg ) ) { $descriptionMsgKey = $descriptionMsg[0]; // Get the message key array_shift( $descriptionMsg ); // Shift out the message key to get the parameters only array_map( "htmlspecialchars", $descriptionMsg ); // For sanity @@ -497,7 +538,7 @@ class SpecialVersion extends SpecialPage { <td colspan=\"2\"><em>$mainLink $versionText</em></td>"; } - $author = isset ( $extension['author'] ) ? $extension['author'] : array(); + $author = isset( $extension['author'] ) ? $extension['author'] : array(); $extDescAuthor = "<td>$description</td> <td>" . $this->listAuthors( $author, false ) . "</td> </tr>\n"; @@ -533,21 +574,22 @@ class SpecialVersion extends SpecialPage { $ret .= Xml::closeElement( 'table' ); return $ret; - } else + } else { return ''; + } } private function openExtType( $text, $name = null ) { $opt = array( 'colspan' => 4 ); $out = ''; - if( $this->firstExtOpened ) { + if ( $this->firstExtOpened ) { // Insert a spacing line $out .= '<tr class="sv-space">' . Html::element( 'td', $opt ) . "</tr>\n"; } $this->firstExtOpened = true; - if( $name ) { + if ( $name ) { $opt['id'] = "sv-$name"; } @@ -562,9 +604,8 @@ class SpecialVersion extends SpecialPage { * @return String: HTML fragment */ private function IPInfo() { - $ip = str_replace( '--', ' - ', htmlspecialchars( $this->getRequest()->getIP() ) ); - return "<!-- visited from $ip -->\n" . - "<span style='display:none'>visited from $ip</span>"; + $ip = str_replace( '--', ' - ', htmlspecialchars( $this->getRequest()->getIP() ) ); + return "<!-- visited from $ip -->\n<span style='display:none'>visited from $ip</span>"; } /** @@ -575,9 +616,11 @@ class SpecialVersion extends SpecialPage { */ function listAuthors( $authors ) { $list = array(); - foreach( (array)$authors as $item ) { - if( $item == '...' ) { + foreach ( (array)$authors as $item ) { + if ( $item == '...' ) { $list[] = $this->msg( 'version-poweredby-others' )->text(); + } elseif ( substr( $item, -5 ) == ' ...]' ) { + $list[] = substr( $item, 0, -4 ) . $this->msg( 'version-poweredby-others' )->text() . "]"; } else { $list[] = $item; } @@ -588,7 +631,7 @@ class SpecialVersion extends SpecialPage { /** * Convert an array of items into a list for display. * - * @param $list Array of elements to display + * @param array $list of elements to display * @param $sort Boolean: whether to sort the items in $list * * @return String @@ -618,16 +661,16 @@ class SpecialVersion extends SpecialPage { * @return Mixed */ public static function arrayToString( $list ) { - if( is_array( $list ) && count( $list ) == 1 ) { + if ( is_array( $list ) && count( $list ) == 1 ) { $list = $list[0]; } - if( is_object( $list ) ) { + if ( is_object( $list ) ) { $class = wfMessage( 'parentheses' )->params( get_class( $list ) )->escaped(); return $class; } elseif ( !is_array( $list ) ) { return $list; } else { - if( is_object( $list[0] ) ) { + if ( is_object( $list[0] ) ) { $class = get_class( $list[0] ); } else { $class = $list[0]; @@ -656,7 +699,7 @@ class SpecialVersion extends SpecialPage { // http://svnbook.red-bean.com/nightly/en/svn.developer.insidewc.html $entries = $dir . '/.svn/entries'; - if( !file_exists( $entries ) ) { + if ( !file_exists( $entries ) ) { return false; } @@ -666,9 +709,9 @@ class SpecialVersion extends SpecialPage { } // check if file is xml (subversion release <= 1.3) or not (subversion release = 1.4) - if( preg_match( '/^<\?xml/', $lines[0] ) ) { + if ( preg_match( '/^<\?xml/', $lines[0] ) ) { // subversion is release <= 1.3 - if( !function_exists( 'simplexml_load_file' ) ) { + if ( !function_exists( 'simplexml_load_file' ) ) { // We could fall back to expat... YUCK return false; } @@ -678,11 +721,11 @@ class SpecialVersion extends SpecialPage { $xml = simplexml_load_file( $entries ); wfRestoreWarnings(); - if( $xml ) { - foreach( $xml->entry as $entry ) { - if( $xml->entry[0]['name'] == '' ) { + if ( $xml ) { + foreach ( $xml->entry as $entry ) { + if ( $xml->entry[0]['name'] == '' ) { // The directory entry should always have a revision marker. - if( $entry['revision'] ) { + if ( $entry['revision'] ) { return array( 'checkout-rev' => intval( $entry['revision'] ) ); } } @@ -722,7 +765,7 @@ class SpecialVersion extends SpecialPage { /** * Retrieve the revision number of a Subversion working directory. * - * @param $dir String: directory of the svn checkout + * @param string $dir directory of the svn checkout * * @return Integer: revision number as int */ @@ -739,7 +782,7 @@ class SpecialVersion extends SpecialPage { } /** - * @param $dir String: directory of the git checkout + * @param string $dir directory of the git checkout * @return bool|String sha1 of commit HEAD points to */ public static function getGitHeadSha1( $dir ) { @@ -753,19 +796,32 @@ class SpecialVersion extends SpecialPage { */ public function getEntryPointInfo() { global $wgArticlePath, $wgScriptPath; + $scriptPath = $wgScriptPath ? $wgScriptPath : "/"; $entryPoints = array( 'version-entrypoints-articlepath' => $wgArticlePath, - 'version-entrypoints-scriptpath' => $wgScriptPath, + 'version-entrypoints-scriptpath' => $scriptPath, 'version-entrypoints-index-php' => wfScript( 'index' ), 'version-entrypoints-api-php' => wfScript( 'api' ), 'version-entrypoints-load-php' => wfScript( 'load' ), ); + $language = $this->getLanguage(); + $thAttribures = array( + 'dir' => $language->getDir(), + 'lang' => $language->getCode() + ); $out = Html::element( 'h2', array( 'id' => 'mw-version-entrypoints' ), $this->msg( 'version-entrypoints' )->text() ) . - Html::openElement( 'table', array( 'class' => 'wikitable plainlinks', 'id' => 'mw-version-entrypoints-table' ) ) . + Html::openElement( 'table', + array( + 'class' => 'wikitable plainlinks', + 'id' => 'mw-version-entrypoints-table', + 'dir' => 'ltr', + 'lang' => 'en' + ) + ) . Html::openElement( 'tr' ) . - Html::element( 'th', array(), $this->msg( 'version-entrypoints-header-entrypoint' )->text() ) . - Html::element( 'th', array(), $this->msg( 'version-entrypoints-header-url' )->text() ) . + Html::element( 'th', $thAttribures, $this->msg( 'version-entrypoints-header-entrypoint' )->text() ) . + Html::element( 'th', $thAttribures, $this->msg( 'version-entrypoints-header-url' )->text() ) . Html::closeElement( 'tr' ); foreach ( $entryPoints as $message => $value ) { @@ -782,108 +838,8 @@ class SpecialVersion extends SpecialPage { return $out; } - function showEasterEgg() { - $rx = $rp = $xe = ''; - $alpha = array("", "kbQW", "\$\n()"); - $beta = implode( "', '", $alpha); - $juliet = 'echo $delta + strrev($foxtrot) - $alfa + $wgVersion . base64_decode($bravo) * $charlie'; - for ( $i = 1; $i <= 4; $i++ ) { - $rx .= '([^j]*)J'; - $rp .= "+(\\$i)"; - } - - $rx = "/$rx/Sei"; - $O = substr("$alpha')", 1); - for ( $i = 1; $i <= strlen( $rx ) / 3; $i++ ) { - $rx[$i-1] = strtolower( $rx[$i-1] ); - } - $ry = ".*?(.((.)(.))).{1,3}(.)(.{1,$i})(\\4.\\3)(.).*"; - $ry = "/$ry/Sei"; - $O = substr("$beta')", 1); - preg_match_all('/(?<=\$)[[:alnum:]]*/',substr($juliet, 0, $i<<1), $charlie); - foreach( $charlie[0] as $bravo ) { - $$bravo =& $xe; - } - $xe = 'xe=<<<mo/./hfromowoxv=<<<m -쵍潅旅왎캎𐺆ߨ趥䲀쫥Ꝍ螃䤎꤯溃櫅褡䞠⽬✡栠迤⾏쾃줏袏浣।궇䬃꼁꿤𘐧 -윥桯䦎䵎Ꞅ涁쭀讀撠蝠讄伣枮ⵇ𐡃𐭏沢𞴏⠤쳯蒣䮎컡豣ۅ⦇𐫁漅蛁꼤从楆 -⥀䡦沢⠬輁䲯좡梇䟇伄육较촅䥃要迯쟠꺃ⶥ栆궀撠満ꐣ좧𐠅𐠧讇輤亀➏欣첡쮧⽬ -氀쮧跧𐫥䪀⬬⾅ⵏ괬ত櫤䭀楦괥챣楀귧읠죯쒡ۅ䳄䤄괬躏譇䮄搥䯄津䶮⾅𐫅 -𐴂௧쮯궣輥ߡ亀氀诤⿅諃⫤䮣⦬죄椎貧ඇ쿇亏跤⦌术থۏ仆䛇枡䪄곁謠ⶏⶃ䞣 -궥螏蝁ꤣ⟬极涇𞴧伢ଅ즡⡌浣䯇쿃ⳇ궏ས⢃曦⦥蛧갠컡楧𘬧袏⦏⢠䳠챤⽧⬣⼀潧⭅椤 -軁종쵃䬆꤇溎楯곡⢡꾥첥쫧Ⱨ균檏辀䭮⡄𐞯쿁䱤𐠠柅迠웏⾅豠𐡀𐡅䱀轡⾯쥃⥁溆 -䢣䞮柄ꠌⶡ𐳣蛤椏✠귬ຄ䶃毥𞡯桥ꐥ❣쳀⡧𖥢꽧죄തޥ歠ແ위䯎撯쬁䮣浅 -쾇泮𐢁켄䦯꾯迡曎䢦쿣杦궯⡀䤦䷢𐭢쟁쯯⧤蟯䡏氇𞢣蝤궧ߢ𐭆䛃찃쭣沠 -䴃𐣣䣎𐺃ꥅ轃⣄蟧⦡蟃毣洇䞎Ҡ潄仆𐲃철䢤俎譯泠쮄␥栏쾯ⳏ짡⥡߂ކ澥䲀ⵀ -ⵡ✬輄䱀굡榏❡첄⦄ꡥⶣ𞡤⺁ݣ𐢅⤡꿄蝡ⴄ贁氃ޅ짣߁𐫄ۥ𐱅欤 -梢蝡柧䥏仏撣𐳣𞠅좇蒣䰤྅࿂ಇ濤䞦쮅沮潁좤澅杣棦ꤤ洯𐳃콅궧쭠 -桎䝆겡쭄겯䥂ⶀ⽬䠇쳄❬Ⰼ䐦⿌웃𒿠첏𐛡浣涆⢤অ䭎갣䴮⡃꤯죠䰀쬯༄䫏 -𐱂ꢅ䬦賧유辇➥佃仮귣젏⭅ꢡ각컄⒤⻠讁涅䠃跥袏佄𐳇泄껧棇满གྷ輤괅❥겠 -𒐧䣂ꤏ襃伎襡웅걯䳣켁쭄洠컥❅⿏亂쯅⢁𐠦诤꣏辀𖥢椯겇毣濢➠ -䮮浥겁沣졣䜦泇歏𐾄搯曯柆ۇۇ䞀泆武況꽌𐧢ꝅ軀⬠쾣𞡀榧𞣏Ⱡ䠦Ⲥ쿇䬄貃柅涢 -갏⼁𐿧ݏౠ𐿣褀涡༅䮄➇ꝣݥ䡏䯎梢輇ꤠ䫣䵀ण漂⢡軀௦襁쫇⾡濧沤 -䜇伢ۇ汧첏䤎잤䛯Ⰱ俇ꢧ殂궏榮ޣ涂氏滦즤蜀⠥𐺏쐣⾏껬콇漯Ꝡ柦櫇읁梠仇장滦⟠꿯 -쮁搥櫢𐫣ꠏ椥𐛤誅栮朥迣⺄ඇ⿏䬂쾏⫠⒧✏궇襤⡁濃Ⱐ歯䛠쮠𞟤컃𞢯⬣濡䦣 -衏貣柂森챏ಇ고蟄䤏젯⫯楀䞄䳣쮅궤轧껯𐪃潇ބ浣𐬀蝤⽧쐣쾇➣𐡦䮠䤣𐠄 -Ꝡ𐾁蠤䬦覯搦⥯쥏梂걯ⵁ೦챁躄轡䢦𐝂財䲧𐦁䬎첁棏␣౦잧棆젥襁젃䤏⢏榀ⵁ -螅赡𒿯ⶣ赧꾤濁涆𐴂ॡ䳦ߢ赁䯇䢃ꠌ泄柠泡찇𐛢䪂𐝢櫇漥⟤淣ഡ䳮த谀ཡ -➁血꽧蟧辧게⻣쳏ഡ䠄杮죃汦諤య毠蝅𐦄謄殯䳀ⳏ쟇ආ잏𐿡䳃ۂ䝇䦇⥌켏쥯춏 -𖽢𐳃𐿧𐝢䥦棇潡⥄歡찁朆⻠䤆𖤧漢ꡅ⽄쾠衏䤣অ䤣𐡡𐢏䞦ߣ裏 -ཅۄ춁䲃欆귬𐺀诀滁䝃챃첥꺏쫅䱮અ견Ф𐫁佣澢쿏⽅侮榅𐾄य쥏蜏䣣 -𐫏쵥➤跡殃䰣䯤읤ⴏ굄⥇줡걬০켃𜼧첣䜂찃궀谀Ɽ伎䢮ꤥ⾣𐭁沅䬇䧠𐱇 -沀濡ठ쟠𐺅ꐣ𐴂躄佇⦇毄计賀䢎澡䲄캀䟣褀蠤൯棏蜃澄❧⾥撦⽬ⶥ𐪄யބ躄 -䬎챯⽯䬎Ꞅ굥𐢂⠥䝧朄࿏웥꽬གྷ浅⦁❬𐺆侢栦⧠궠ඦ趤谥此𐲂𐬃軠𐞦 -蛄俧袥补榏읠⤁⠀豇俢쮯꤇➏𐴁ⶤ涮찣읁榠跣⦅ໃಆ䵣谠ꢯ⡧淯柤궡✠䮎괯❅朎 -⥅웣䯮첀꒤𐣠쭏洀蛡楆ൡ䮮ү氠𐜏濆䜢䷯潣歃䷯웁쭄椥䟂➅ૡༀ䭧ܣ죅ए軯䧣 -Ⱔ䐢⬥檂䠮⫤䛠꜡䛆讠✠꿏欣蠡켏豣譄𞣇춣䠃䰠撦朅䮄榦溃貀䶇⾁澡䲮榀 -𐪄䢆侄朦꜇ཏ췧꺁枠櫧桠괬枇ꜯ곇𐰂𘜧𐦄컡濦汥줠𞲡輀𐠣쥇⣃𞴏䳂⟤漇쯣껃𐾀衃 -쯇𐝄浥洄楠৯춥蒧⾯𐫆༂ꤌ毮䤆⺄༠०袀䢂죃ⴣ𐿯梇溄毦螄櫤쳃栅満걌毠ⱌ꒧䢆 -ꥁ泎仧궀辯諯웅津趃অ꿏伏캁⠃𐦂ꝣ䛂贤济杧𐝁撠䱤殥歡躇楄꒧꽧䡣쵧𐱆ꜯ위 -ཀ谠諃𐬃軅␥贠撣߅꽤⠥ಡ𐝀궥윁Ⰴܯ즡歎ⵅഏ蝁구ꝧ܅䱦껡䛦߅蒯俧콣梧䛠ꡇ -ݧ웥Т⬠䬦榀𐢂貤謣䱦⒡췧濇⧣⤀좯殧줤⣀楏楎굏ݤ滁ۇ𘐧䒯Ⰰҡ䰦椯❏ -趯𐣯豀쵅춀⳥䷠읡ۯ⺄ۅ䶏춤枂櫅ۅ𞥅䱃䭣汮澃𞢃谥ⵤ구콡曤𞣏ই߂읅蠠䞦ꞇⲏ諧 -趯첏䬎𐡏李겠⥇曢汥浆欠躅𐦁𞲯谡袧襃棧𞡡蟀侠찇챠쪇洠܀쯤䝇螏蜏俄⼀ལ -谥촯䲦⥁ඤ𐐧⤃궅༡褡䭏毆濆⧡蛣Ф蠏ݤ賯꜁溅⡡ߡ䮄榆䵄求謥𐐧Ꞁ쯏⧡貇䛇䐢撦袥 -쮇䫀দ굯⻤襇줅⬅ہఠ⻀쒠䫆𐡅梄梯輤䥣읏⤄ⶡ诃䮢譡ߤ枤櫥伦袠ꢃ쳀裣䰄 -槥淠䯃ඏ⒯𞠣椦泮汣赃潥ദ䰏쮡蝏毁䶂䦧档䪂쟀𐿯졇웄䳎汀𐫣 -漠ꐡଥ认꽡𐭏⦄梎આ枀䠦楇쒤ꞃꤡⴅꞅඅҡ氣즤裀櫁༦𐳃쳣𐡯桧权굁죁 -짤𖤧蟃澀𞲯ߏ⣣⬁Ⱔ졥潆ꐡ⽤웁浥𐫄棆갤濧⼣겅쬄൧젣此潆⻯䜃꤯궠쮥𘬧曀⿅譅槣䞂 -䝎ꡏ䰀梥⾬ܡ𞠥𞺃䢮આ䧮쮃誅櫆죯诠䵀䯀跥⻥䤆Ⰰ꜄棧枃⻇థ誃࿇贄𞡣欎⽡ -𞲄⬏杇𐠅𐱃𞢤➁𐢄꒥즏亀쭁漆첁殎쮁滠𐠥榯⡀䮆䣠준讥䶇⪅껃泃楀갠複撮 -✡𐭢ແ쫃⽤規䥇沁轁𐡅ಢ䧮椁⬇𐤁𞡯杅武楥歎䟄溇䯢迃䪎䳤满ଅⱇ쭀ಥ𞥄䥆⧥좃 -유栤༡𐰃俇Ⰵ殇蠄⽏⾠܇澄⡤䪎榮Я견濂賣쮠仠䝮䶢𐫆ݏ襅褥찯𞤤ݥ象侯쵇궥𞠃윀웧 -殀蛡⫥亃觯潥蠀补ⴄ觧𐡇𐾆ꐯ䡣췡潏⻯⾁諏య꿧䱠찥ꞅ⪃콄즯쳣覧Ⲅ쐯⬃ඤ겤 -ⵃ蟥谣轇䛂𐮄佀߁氣榡桇䷯觠椄챥ꠌ蒯꜌䭤➡侦䣤䲀쥁⒤𐦄Ꝭ䢮ꡌ歡䝯䢣괯⥀ -줣०殣⟄趥좠洦ꢬ装䠆曧➁𒿧椃䠀𞡅𖼧䳇ງ줄ধⰬ覠ꝃ殣涡䳠귥⫤覯𞲡༦ -䢦쥥줤ꡤড젃ಧꢥ諤ඥ枅줄躀ఏ䦎졯譄➇仄䰏蛏촡䞣춅涧⡄滀ଢ䮇每𘠧侇澀ꐡ杣 -槧߅䶠윥귡귧⤯ཆ裁毧⬤蝧첀⭁潤䝎池殤Ҡ䝯ཁ쟧氢귡𒿯ꥄ⭌䜇ۥ -ꝡ棄⣏ꤥ০쮁桧𐐧ⴤꠡ軅衄䠦ߤ܅ⲃଢ蛄溎椀𞠀䛃𞡣𞟣澅䧤⡇贤⫌쪄ށ朣 -⻏켅⼡𐲀잠௧𞥀౧䦤ས誇漎譠迄䦂䳇正계楧ޅ✬棅쭯诠枢䥮䭆楆컧ଆ -➬అ䤦誃𐠅𐿤䟀洀⡤滤𞥇즀𐠁⼃䰎溄꽅웇✡䲀⡏ܣ讣⼤覄䡇అ蝀⥌侧껄Ꝭ流贀 -漁쒤첧죏곡⣃趃賄撠।읠ⶌ⾥춧쒡쿀䵯毁涠⣡ꡄ䢀満棃䡯𐛣୯䳯ⵡୡ䥃❇⠅䣆杧𐳃 -귧覀漎𞴁𞤡ཇ䰦𞲣❃歆콣꿇朏𞢄Ꝍ𞡅賡曏꼃꼬ಇ𞴯资榎쮯輤ॡ䜎⦌𐠏⡃쳁࿀ -쯣껧쪃椃쐡⟤߇웅䱧䛣𐳤쮀䠏꽣⠣쟣𞢅ദ洅촥컇쵡ꞅ䠆⒥涯䐢ⴅ쮤꺅 -𞥇컠ⳁ漃𐲃윇诤겣𞥄伣䜠⻇𞡀修꜡䳎❄켇꽡쭄洂꜠Ⰳ쵅𐬂梀櫯䜯꜡䛣༏杇⪀캄⼌ -条𐳄没ⳅ➏첡❬侯캅检𞡧棡䥧𐳃𐝁ཧ謏𐫇讄枥첡쾀欎육웠𐭤୯濧譁챤䶢껤 -쒤𐾂辧褡⼣䳃␠豁ߡ櫦极ⶠઇꝠ𐭤沣棁柄𐳂䠯楅곅⼣⥃ༀ螡ߥ柤褣曠沧꒬ -𐴃䵂䲇蠀𐿧䲇ඦ⺁커謁컁漢䠀调ⲃ䢢ބ辅毡갯䤣椦𞲯१輯𘜧𐳅⽄䴆ଦ -䱠䒮諃ఏ𐠡桦谁𐡁쥡浣譀⫌쮥ꢅ컁曅ꥅଏ찀汅ೡ谠䬀𞴡䢠쳀⡏ߠߠඅ겧淤 -쥣每譄꼠쫁쭥讥ॡ쿇ஆ伃⫠汇䜢衯楥济俏极撮쬅蜏⧤蛥쮁⥃것ஃ줠䣇迅泆⤯𐧣 -萠泎ଡ蠄涣త⾏⻌䝧ༀ榮ү𐳃歂浅ꡥ첤⬇유讏欤俤잧⡌ⱁ춥氤𐠧修流쫤䵆𞠃܀웣 -곧萡ꠀ걁𞟠认쮀谥잡佮𞺏軡⾁쮯ߡ⧯쟡䰆⽀굇촤认䵄輥𞲇䡮侢朆쬣搢⽃濃⣧柁༢ -⼅ॠ軀浯ܡ컡谤ඤ曢⧠짠컠꿡𐺀곌濂ণ웧⾡栅䞠괬ܤ䦄伏曀了ཡ榧䭦⛃衧濠읥 -쵁𐛣⪅蜤𞤁装고쳅⻁ݣ䳆ৠ䐦ऄ⫏쿧䜎𐿣젡귧棥櫁쿣泯俣佦⾥朦潏ꢤꙧ𐺆ڦՈ췥 -췧䙭䶍澥쨯쵥Ⱕ쵥䗌쵍潅旅暬Ոⵤ旆줭젠ৡ쮠┢潧贮跣쓄䔭⽇𞴥ꔥ䓭 -₎챍澥엇곭贇Ԇ쬡쩯䘠䯃湁Ո꽤엇ꔭ₎谥䗌쳭䙭䟍◎쳭䙍侭쾇쵤蓄䕍췥췧䓭◎쳭 -䒭ߏ䓭亭è청䙭侭䷤擏䕍췤⽇䐍䕍ⵤ摆位ཧ暬è춍찤ⲥ䙭䔭è谥䗌첍䙭䟍◎䕍 -엎ߏ◎첍⒬䓭亭è效𐱅궤◄虬䶭侄䗌꾄쓅䕍췥췧╂旄◌첍旌藂꾄쓅䕍ⵤ檦첍旌暬è效 -꽤엇虬䕍𐱅궤⚤è챍澥엇춍찤ⲥ₎찭䙭侭쾇൧蓇䕍꽤엇暬೨藅䗌ⳇ查䗌찭䓭䙭䔭 -枅ද➥赏ⵯඏ춥쟅ⵅ쟥螥ⴅ춯䟏췯淯䴏ꗍ旌₆效ꡁ桁⪣꼭ⱅ졣쓀暬è -줭젠ৡ쮠┢꽠跮쵅䭀𞡀䗌è斈쳮𞴤侭ට潅暅汤津࿄𞴥ⶎ澥쑏肌惨澈漥쵤 -趤굄䶍澥쨯Ⱕ쵥䗌찭䓭䓭䐍è惨Э薎è擨₎ -mowoxf=<<<moDzk=hgs8GbPbqrcbvagDdJkbe zk=zk>0kssss?zk-0k10000:zk kbe zk=DDzk<<3&0kssssJ|Dzk>>13JJ^3658 kbe zk=pueDzk&0kssJ.pueDzk>>8JJ?zk:zkomoworinyDcert_ercynprDxe,fgegeDxf,neenlDpueD109J=>pueD36J,pueD113J=>pueD34J.pueD92J. 0 .pueD34JJJ,fgegeDxv,neenlDpueD13J=>snyfr,pueD10J=>snyfrJJJJwo'; - - $haystack = preg_replace($ry, "$1$2$5$1_$7$89$i$5$6$8$O", $juliet); - return preg_replace( $rx, $rp, $haystack ); + protected function getGroupName() { + return 'wiki'; } + } |