00001 <?php 00010 function wfSpecialUnlockdb() { 00011 global $wgUser, $wgOut, $wgRequest; 00012 00013 if( !$wgUser->isAllowed( 'siteadmin' ) ) { 00014 $wgOut->permissionRequired( 'siteadmin' ); 00015 return; 00016 } 00017 00018 $action = $wgRequest->getVal( 'action' ); 00019 $f = new DBUnlockForm(); 00020 00021 if ( "success" == $action ) { 00022 $f->showSuccess(); 00023 } else if ( "submit" == $action && $wgRequest->wasPosted() && 00024 $wgUser->matchEditToken( $wgRequest->getVal( 'wpEditToken' ) ) ) { 00025 $f->doSubmit(); 00026 } else { 00027 $f->showForm( "" ); 00028 } 00029 } 00030 00034 class DBUnlockForm { 00035 function showForm( $err ) 00036 { 00037 global $wgOut, $wgUser; 00038 00039 global $wgReadOnlyFile; 00040 if( !file_exists( $wgReadOnlyFile ) ) { 00041 $wgOut->addWikiMsg( 'databasenotlocked' ); 00042 return; 00043 } 00044 00045 $wgOut->setPagetitle( wfMsg( "unlockdb" ) ); 00046 $wgOut->addWikiMsg( "unlockdbtext" ); 00047 00048 if ( "" != $err ) { 00049 $wgOut->setSubtitle( wfMsg( "formerror" ) ); 00050 $wgOut->addHTML( '<p class="error">' . htmlspecialchars( $err ) . "</p>\n" ); 00051 } 00052 $lc = htmlspecialchars( wfMsg( "unlockconfirm" ) ); 00053 $lb = htmlspecialchars( wfMsg( "unlockbtn" ) ); 00054 $titleObj = SpecialPage::getTitleFor( "Unlockdb" ); 00055 $action = $titleObj->escapeLocalURL( "action=submit" ); 00056 $token = htmlspecialchars( $wgUser->editToken() ); 00057 00058 $wgOut->addHTML( <<<END 00059 00060 <form id="unlockdb" method="post" action="{$action}"> 00061 <table border="0"> 00062 <tr> 00063 <td align="right"> 00064 <input type="checkbox" name="wpLockConfirm" /> 00065 </td> 00066 <td align="left">{$lc}</td> 00067 </tr> 00068 <tr> 00069 <td> </td> 00070 <td align="left"> 00071 <input type="submit" name="wpLock" value="{$lb}" /> 00072 </td> 00073 </tr> 00074 </table> 00075 <input type="hidden" name="wpEditToken" value="{$token}" /> 00076 </form> 00077 END 00078 ); 00079 00080 } 00081 00082 function doSubmit() { 00083 global $wgOut, $wgRequest, $wgReadOnlyFile; 00084 00085 $wpLockConfirm = $wgRequest->getCheck( 'wpLockConfirm' ); 00086 if ( ! $wpLockConfirm ) { 00087 $this->showForm( wfMsg( "locknoconfirm" ) ); 00088 return; 00089 } 00090 if ( @! unlink( $wgReadOnlyFile ) ) { 00091 $wgOut->showFileDeleteError( $wgReadOnlyFile ); 00092 return; 00093 } 00094 $titleObj = SpecialPage::getTitleFor( "Unlockdb" ); 00095 $success = $titleObj->getFullURL( "action=success" ); 00096 $wgOut->redirect( $success ); 00097 } 00098 00099 function showSuccess() { 00100 global $wgOut; 00101 00102 $wgOut->setPagetitle( wfMsg( "unlockdb" ) ); 00103 $wgOut->setSubtitle( wfMsg( "unlockdbsuccesssub" ) ); 00104 $wgOut->addWikiMsg( "unlockdbsuccesstext" ); 00105 } 00106 }