+ public function doMarkPatrolled( $auto = false ) {
+ global $wgUser, $wgUseRCPatrol, $wgUseNPPatrol;
+ $errors = array();
+ // If recentchanges patrol is disabled, only new pages
+ // can be patrolled
+ if( !$wgUseRCPatrol && ( !$wgUseNPPatrol || $this->getAttribute('rc_type') != RC_NEW ) ) {
+ $errors[] = array('rcpatroldisabled');
+ }
+ // Automatic patrol needs "autopatrol", ordinary patrol needs "patrol"
+ $right = $auto ? 'autopatrol' : 'patrol';
+ $errors = array_merge( $errors, $this->getTitle()->getUserPermissionsErrors( $right, $wgUser ) );
+ if( !wfRunHooks('MarkPatrolled', array($this->getAttribute('rc_id'), &$wgUser, false)) ) {
+ $errors[] = array('hookaborted');
+ }
+ // Users without the 'autopatrol' right can't patrol their
+ // own revisions
+ if( $wgUser->getName() == $this->getAttribute('rc_user_text') && !$wgUser->isAllowed('autopatrol') ) {
+ $errors[] = array('markedaspatrollederror-noautopatrol');
+ }
+ if( $errors ) {
+ return $errors;
+ }
+ // If the change was patrolled already, do nothing
+ if( $this->getAttribute('rc_patrolled') ) {
+ return array();
+ }
+ // Actually set the 'patrolled' flag in RC
+ $this->reallyMarkPatrolled();
+ // Log this patrol event
+ PatrolLog::record( $this, $auto );
+ wfRunHooks( 'MarkPatrolledComplete', array($this->getAttribute('rc_id'), &$wgUser, false) );
+ return array();
+ }
+
+ /**
+ * Mark this RecentChange patrolled, without error checking
+ * @return Integer: number of affected rows
+ */
+ public function reallyMarkPatrolled() {