MediaWiki  master
SpecialLockdb.php
Go to the documentation of this file.
1 <?php
25 
32  protected $reason = '';
33 
34  public function __construct() {
35  parent::__construct( 'Lockdb', 'siteadmin' );
36  }
37 
38  public function doesWrites() {
39  return false;
40  }
41 
42  public function requiresWrite() {
43  return false;
44  }
45 
46  public function checkExecutePermissions( User $user ) {
47  parent::checkExecutePermissions( $user );
48  # If the lock file isn't writable, we can do sweet bugger all
49  if ( !is_writable( dirname( $this->getConfig()->get( 'ReadOnlyFile' ) ) ) ) {
50  throw new ErrorPageError( 'lockdb', 'lockfilenotwritable' );
51  }
52  if ( file_exists( $this->getConfig()->get( 'ReadOnlyFile' ) ) ) {
53  throw new ErrorPageError( 'lockdb', 'databaselocked' );
54  }
55  }
56 
57  protected function getFormFields() {
58  return [
59  'Reason' => [
60  'type' => 'textarea',
61  'rows' => 4,
62  'vertical-label' => true,
63  'label-message' => 'enterlockreason',
64  ],
65  'Confirm' => [
66  'type' => 'toggle',
67  'label-message' => 'lockconfirm',
68  ],
69  ];
70  }
71 
72  protected function alterForm( HTMLForm $form ) {
73  $form->setWrapperLegend( false )
74  ->setHeaderText( $this->msg( 'lockdbtext' )->parseAsBlock() )
75  ->setSubmitTextMsg( 'lockbtn' );
76  }
77 
78  public function onSubmit( array $data ) {
79  if ( !$data['Confirm'] ) {
80  return Status::newFatal( 'locknoconfirm' );
81  }
82 
83  Wikimedia\suppressWarnings();
84  $fp = fopen( $this->getConfig()->get( 'ReadOnlyFile' ), 'w' );
85  Wikimedia\restoreWarnings();
86 
87  if ( $fp === false ) {
88  # This used to show a file not found error, but the likeliest reason for fopen()
89  # to fail at this point is insufficient permission to write to the file...good old
90  # is_writable() is plain wrong in some cases, it seems...
91  return Status::newFatal( 'lockfilenotwritable' );
92  }
93  fwrite( $fp, $data['Reason'] );
94  $timestamp = wfTimestampNow();
95  $contLang = MediaWikiServices::getInstance()->getContentLanguage();
96  fwrite( $fp, "\n<p>" . $this->msg( 'lockedbyandtime',
97  $this->getUser()->getName(),
98  $contLang->date( $timestamp, false, false ),
99  $contLang->time( $timestamp, false, false )
100  )->inContentLanguage()->text() . "</p>\n" );
101  fclose( $fp );
102 
103  return Status::newGood();
104  }
105 
106  public function onSuccess() {
107  $out = $this->getOutput();
108  $out->addSubtitle( $this->msg( 'lockdbsuccesssub' ) );
109  $out->addWikiMsg( 'lockdbsuccesstext' );
110  }
111 
112  protected function getDisplayFormat() {
113  return 'ooui';
114  }
115 
116  protected function getGroupName() {
117  return 'wiki';
118  }
119 }
SpecialPage\msg
msg( $key,... $params)
Wrapper around wfMessage that sets the current context.
Definition: SpecialPage.php:828
StatusValue\newFatal
static newFatal( $message,... $parameters)
Factory function for fatal errors.
Definition: StatusValue.php:70
SpecialPage\getOutput
getOutput()
Get the OutputPage being used for this instance.
Definition: SpecialPage.php:744
MediaWiki\MediaWikiServices
MediaWikiServices is the service locator for the application scope of MediaWiki.
Definition: MediaWikiServices.php:152
SpecialLockdb\__construct
__construct()
Definition: SpecialLockdb.php:34
FormSpecialPage
Special page which uses an HTMLForm to handle processing.
Definition: FormSpecialPage.php:31
SpecialPage\getName
getName()
Get the name of this Special Page.
Definition: SpecialPage.php:164
SpecialLockdb\alterForm
alterForm(HTMLForm $form)
Play with the HTMLForm if you need to more substantially.
Definition: SpecialLockdb.php:72
SpecialLockdb\requiresWrite
requiresWrite()
Whether this action requires the wiki not to be locked.
Definition: SpecialLockdb.php:42
SpecialPage\getConfig
getConfig()
Shortcut to get main config object.
Definition: SpecialPage.php:794
SpecialLockdb\$reason
$reason
Definition: SpecialLockdb.php:32
SpecialLockdb\doesWrites
doesWrites()
Indicates whether this special page may perform database writes.
Definition: SpecialLockdb.php:38
SpecialPage\getUser
getUser()
Shortcut to get the User executing this instance.
Definition: SpecialPage.php:754
wfTimestampNow
wfTimestampNow()
Convenience function; returns MediaWiki timestamp for the present time.
Definition: GlobalFunctions.php:1837
StatusValue\newGood
static newGood( $value=null)
Factory function for good results.
Definition: StatusValue.php:82
HTMLForm\setWrapperLegend
setWrapperLegend( $legend)
Prompt the whole form to be wrapped in a "<fieldset>", with this text as its "<legend>" element.
Definition: HTMLForm.php:1547
SpecialLockdb
A form to make the database readonly (eg for maintenance purposes).
Definition: SpecialLockdb.php:31
SpecialLockdb\onSuccess
onSuccess()
Do something exciting on successful processing of the form, most likely to show a confirmation messag...
Definition: SpecialLockdb.php:106
SpecialLockdb\getFormFields
getFormFields()
Get an HTMLForm descriptor array.
Definition: SpecialLockdb.php:57
SpecialLockdb\onSubmit
onSubmit(array $data)
Process the form on POST submission.
Definition: SpecialLockdb.php:78
SpecialLockdb\getDisplayFormat
getDisplayFormat()
Get display format for the form.
Definition: SpecialLockdb.php:112
ErrorPageError
An error page which can definitely be safely rendered using the OutputPage.
Definition: ErrorPageError.php:30
SpecialLockdb\checkExecutePermissions
checkExecutePermissions(User $user)
Called from execute() to check if the given user can perform this action.
Definition: SpecialLockdb.php:46
User
The User object encapsulates all of the user-specific settings (user_id, name, rights,...
Definition: User.php:59
SpecialLockdb\getGroupName
getGroupName()
Under which header this special page is listed in Special:SpecialPages See messages 'specialpages-gro...
Definition: SpecialLockdb.php:116
HTMLForm
Object handling generic submission, CSRF protection, layout and other logic for UI forms in a reusabl...
Definition: HTMLForm.php:133