diff --git a/main/wiki/index.php b/main/wiki/index.php index d157e6bb97..523ee49f53 100644 --- a/main/wiki/index.php +++ b/main/wiki/index.php @@ -195,6 +195,35 @@ else ----------------------------------------------------------- */ +//release of blocked pages to prevent concurrent editions +$sql='SELECT * FROM '.$tbl_wiki.'WHERE is_editing!="0"'; +$result=api_sql_query($sql,__LINE__,__FILE__); +while ($is_editing_block=Database::fetch_array($result)) +{ + $max_edit_time=1200; // 20 minutes + $timestamp_edit=convert_date_to_number($is_editing_block['time_edit']); + $time_editing=time()-$timestamp_edit; + + + //first prevent concurrent users and double version + if($is_editing_block['is_editing']==$_user['user_id']) + { + $_SESSION['_version']=$is_editing_block['version']; + } + else + { + unset ( $_SESSION['_version'] ); + } + //second checks if has exceeded the time that a page may be available or if a page was edited and saved by its author + if ($time_editing>$max_edit_time || ($is_editing_block['is_editing']==$_user['user_id'] && $_GET['action']!='edit')) + { + $sql='UPDATE '.$tbl_wiki.' SET is_editing="0", time_edit="0000-00-00 00:00:00" WHERE is_editing="'.$is_editing_block['is_editing'].'"'; + api_sql_query($sql,__FILE__,__LINE__); + } + +} + + // saving a change if (isset($_POST['SaveWikiChange']) AND $_POST['title']<>'') { @@ -207,6 +236,12 @@ if (isset($_POST['SaveWikiChange']) AND $_POST['title']<>'') { //double post } + elseif ($_POST['version']!=$_SESSION['_version']) + { + //prevent concurrent users and double version + Display::display_error_message(get_lang("EditedByAnotherUser")); + } + else { $return_message=save_wiki(); @@ -267,6 +302,19 @@ if ($_GET['view']) { Display::display_normal_message(get_lang('OnlyEditPagesCourseManager')); } + elseif($last_row['is_editing']!=0 && $last_row['is_editing']!=$_user['user_id']) + { + //checking for concurrent users + $timestamp_edit=convert_date_to_number($last_row['time_edit']); + $time_editing=time()-$timestamp_edit; + $max_edit_time=1200; // 20 minutes + $rest_time=$max_edit_time-$time_editing; + + $userinfo=Database::get_user_info_from_id($last_row['is_editing']); + + $is_being_edited= get_lang('ThisPageisBeginEditedBy').' '.$userinfo['lastname'].', '.$userinfo['firstname'].'. '.get_lang('ThisPageisBeginEditedTryLater').' '.date( "i",$rest_time).' '.get_lang('MinMinutes').''; + Display::display_normal_message($is_being_edited); + } else { $PassEdit=false; @@ -1187,8 +1235,6 @@ if ($_GET['action']=='edit') $title=$row['title']; $page_id=$row['page_id']; } - echo '