fix synxtax
[lhc/web/wiklou.git] / includes / SpecialLockdb.php
index d0be5d8..e57717e 100644 (file)
@@ -1,8 +1,7 @@
 <?php
 /**
  *
- * @package MediaWiki
- * @subpackage SpecialPage
+ * @addtogroup SpecialPage
  */
 
 /**
 function wfSpecialLockdb() {
        global $wgUser, $wgOut, $wgRequest;
 
-       if ( ! $wgUser->isAllowed('siteadmin') ) {
-               $wgOut->developerRequired();
+       if( !$wgUser->isAllowed( 'siteadmin' ) ) {
+               $wgOut->permissionRequired( 'siteadmin' );
                return;
        }
+       
+       # If the lock file isn't writable, we can do sweet bugger all
+       global $wgReadOnlyFile;
+       if( !is_writable( dirname( $wgReadOnlyFile ) ) ) {
+               DBLockForm::notWritable();
+               return;
+       }
+
        $action = $wgRequest->getVal( 'action' );
        $f = new DBLockForm();
 
@@ -29,18 +36,17 @@ function wfSpecialLockdb() {
 }
 
 /**
- *
- * @package MediaWiki
- * @subpackage SpecialPage
+ * A form to make the database readonly (eg for maintenance purposes).
+ * @addtogroup SpecialPage
  */
 class DBLockForm {
        var $reason = '';
-       
+
        function DBLockForm() {
                global $wgRequest;
                $this->reason = $wgRequest->getText( 'wpLockReason' );
        }
-       
+
        function showForm( $err ) {
                global $wgOut, $wgUser;
 
@@ -54,14 +60,15 @@ class DBLockForm {
                $lc = htmlspecialchars( wfMsg( 'lockconfirm' ) );
                $lb = htmlspecialchars( wfMsg( 'lockbtn' ) );
                $elr = htmlspecialchars( wfMsg( 'enterlockreason' ) );
-               $titleObj = Title::makeTitle( NS_SPECIAL, 'Lockdb' );
+               $titleObj = SpecialPage::getTitleFor( 'Lockdb' );
                $action = $titleObj->escapeLocalURL( 'action=submit' );
+               $reason = htmlspecialchars( $this->reason );
                $token = htmlspecialchars( $wgUser->editToken() );
 
                $wgOut->addHTML( <<<END
 <form id="lockdb" method="post" action="{$action}">
 {$elr}:
-<textarea name="wpLockReason" rows="10" cols="60" wrap="virtual"></textarea>
+<textarea name="wpLockReason" rows="10" cols="60" wrap="virtual">{$reason}</textarea>
 <table border="0">
        <tr>
                <td align="right">
@@ -91,10 +98,13 @@ END
                        $this->showForm( wfMsg( 'locknoconfirm' ) );
                        return;
                }
-               $fp = fopen( $wgReadOnlyFile, 'w' );
+               $fp = @fopen( $wgReadOnlyFile, 'w' );
 
                if ( false === $fp ) {
-                       $wgOut->fileNotFoundError( $wgReadOnlyFile );
+                       # This used to show a file not found error, but the likeliest reason for fopen()
+                       # to fail at this point is insufficient permission to write to the file...good old
+                       # is_writable() is plain wrong in some cases, it seems...
+                       $this->notWritable();
                        return;
                }
                fwrite( $fp, $this->reason );
@@ -102,17 +112,23 @@ END
                  $wgLang->timeanddate( wfTimestampNow() ) . ")\n" );
                fclose( $fp );
 
-               $titleObj = Title::makeTitle( NS_SPECIAL, 'Lockdb' );
+               $titleObj = SpecialPage::getTitleFor( 'Lockdb' );
                $wgOut->redirect( $titleObj->getFullURL( 'action=success' ) );
        }
 
        function showSuccess() {
-               global $wgOut, $wgUser;
+               global $wgOut;
 
                $wgOut->setPagetitle( wfMsg( 'lockdb' ) );
                $wgOut->setSubtitle( wfMsg( 'lockdbsuccesssub' ) );
                $wgOut->addWikiText( wfMsg( 'lockdbsuccesstext' ) );
        }
+       
+       public static function notWritable() {
+               global $wgOut;
+               $wgOut->errorPage( 'lockdb', 'lockfilenotwritable' );
+       }
+       
 }
 
-?>
+