From: Aaron Schulz Date: Mon, 13 Oct 2008 14:48:17 +0000 (+0000) Subject: (bug 1150) Do not skip edit conflict and override just because editing user was the... X-Git-Tag: 1.31.0-rc.0~44762 X-Git-Url: https://git.cyclocoop.org/%7B%24www_url%7Dadmin/compta/exercices/journal.php?a=commitdiff_plain;h=43129ccd4426f3d059b7851cc8acc02360070601;p=lhc%2Fweb%2Fwiklou.git (bug 1150) Do not skip edit conflict and override just because editing user was the last to edit. This caused removal of edits if a user edit conflicts, merges/automerges, then presses back (such as fixing a typo) and saves again. Check all users since edit time instead. If they are *all* the editing user, then go ahead and skip. --- diff --git a/includes/EditPage.php b/includes/EditPage.php index 4133c0fac2..bf431776f2 100644 --- a/includes/EditPage.php +++ b/includes/EditPage.php @@ -914,7 +914,7 @@ class EditPage { } # Suppress edit conflict with self, except for section edits where merging is required. - if ( ( $this->section == '' ) && ( 0 != $userid ) && ( $this->mArticle->getUser() == $userid ) ) { + if ( $this->section == '' && $userid && $this->userWasLastToEdit($userid,$this->edittime) ) { wfDebug( "EditPage::editForm Suppressing edit conflict, same user.\n" ); $this->isConflict = false; } else { @@ -1022,6 +1022,27 @@ class EditPage { return self::AS_END; } + /** + * Check if no edits were made by other users since + * the time a user started editing the page. Limit to + * 20 revisions for the sake of sanity. + */ + protected function userWasLastToEdit( $id, $edittime ) { + $dbw = wfGetDB( DB_MASTER ); + $res = $dbw->select( 'revision', + 'rev_user', + array( 'rev_page' => $this->mArticle->getId(), + 'rev_timestamp > '.$dbw->timestamp($edittime) ), + __METHOD__, + array( 'ORDER BY' => 'rev_timestamp ASC', 'LIMIT' => 20 ) ); + while( $row = $res->fetchObject() ) { + if( $row->rev_user != $id ) { + return false; + } + } + return true; + } + /** * Check given input text against $wgSpamRegex, and return the text of the first match. * @return mixed -- matching string or false