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 }
static newFatal( $message,... $parameters)
Factory function for fatal errors.
Definition: StatusValue.php:69
checkExecutePermissions(User $user)
getOutput()
Get the OutputPage being used for this instance.
Special page which uses an HTMLForm to handle processing.
The User object encapsulates all of the user-specific settings (user_id, name, rights, email address, options, last login time).
Definition: User.php:51
msg( $key,... $params)
Wrapper around wfMessage that sets the current context.
An error page which can definitely be safely rendered using the OutputPage.
static newGood( $value=null)
Factory function for good results.
Definition: StatusValue.php:81
wfTimestampNow()
Convenience function; returns MediaWiki timestamp for the present time.
getName()
Get the name of this Special Page.
getUser()
Shortcut to get the User executing this instance.
getConfig()
Shortcut to get main config object.
alterForm(HTMLForm $form)
A form to make the database readonly (eg for maintenance purposes).
onSubmit(array $data)
setWrapperLegend( $legend)
Prompt the whole form to be wrapped in a "<fieldset>", with this text as its "<legend>" element...
Definition: HTMLForm.php:1551