Fix wiki edition/creation.

1.10.x
Julio Montoya 10 years ago
parent 2e8fb1ab8c
commit fe790acee7
  1. 2
      main/wiki/index.php
  2. 195
      main/wiki/wiki.inc.php

@ -73,7 +73,7 @@ if ($groupId) {
if ($group_properties['wiki_state'] == 0) {
api_not_allowed();
} elseif ($group_properties['wiki_state']==2) {
if (!api_is_allowed_to_edit(false,true) and
if (!api_is_allowed_to_edit(false, true) and
!GroupManager :: is_user_in_group(api_get_user_id(), api_get_group_id())
) {
api_not_allowed();

@ -247,7 +247,7 @@ class Wiki
unset($input_array[$key+1]);
}
}
$output=implode('',$input_array);
$output = implode('',$input_array);
return $output;
}
@ -301,12 +301,12 @@ class Wiki
}
if (!empty($values['feedback1']) || !empty($values['feedback2']) || !empty($values['feedback3'])) {
$_clean['feedback1']=Database::escape_string($values['feedback1']);
$_clean['feedback2']=Database::escape_string($values['feedback2']);
$_clean['feedback3']=Database::escape_string($values['feedback3']);
$_clean['fprogress1']=Database::escape_string($values['fprogress1']);
$_clean['fprogress2']=Database::escape_string($values['fprogress2']);
$_clean['fprogress3']=Database::escape_string($values['fprogress3']);
$_clean['feedback1'] = Database::escape_string($values['feedback1']);
$_clean['feedback2'] = Database::escape_string($values['feedback2']);
$_clean['feedback3'] = Database::escape_string($values['feedback3']);
$_clean['fprogress1'] = Database::escape_string($values['fprogress1']);
$_clean['fprogress2'] = Database::escape_string($values['fprogress2']);
$_clean['fprogress3'] = Database::escape_string($values['fprogress3']);
}
if (isset($values['initstartdate']) && $values['initstartdate'] == 1) {
@ -322,14 +322,17 @@ class Wiki
}
if (isset($values['delayedsubmit'])) {
$_clean['delayedsubmit']=Database::escape_string($values['delayedsubmit']);
$_clean['delayedsubmit'] = Database::escape_string($values['delayedsubmit']);
}
if (!empty($values['max_text']) || !empty($values['max_version'])) {
$_clean['max_text'] =Database::escape_string($values['max_text']);
$_clean['max_version']=Database::escape_string($values['max_version']);
$_clean['max_text'] = Database::escape_string($values['max_text']);
$_clean['max_version'] = Database::escape_string($values['max_version']);
}
$values['assignment'] = isset($values['assignment']) ? $values['assignment'] : '';
$values['page_id'] = isset($values['page_id']) ? $values['page_id'] : 0;
$params = [
'c_id' => $course_id,
'addlock' => 1,
@ -350,13 +353,14 @@ class Wiki
'version' => $version,
'linksto' => $linkTo,
'user_ip' => $_SERVER['REMOTE_ADDR'],
'session_id' => $session_id
'session_id' => $session_id,
'page_id' => $values['page_id']
];
$id = Database::insert($tbl_wiki, $params);
if ($id > 0) {
$sql = "UPDATE $tbl_wiki SET id = iid, page_id = iid WHERE iid = $id";
$sql = "UPDATE $tbl_wiki SET id = iid WHERE iid = $id";
Database::query($sql);
// insert into item_property
@ -368,10 +372,16 @@ class Wiki
$userId,
$groupId
);
if ($values['page_id']== 0) {
$sql='UPDATE '.$tbl_wiki.' SET page_id="'.$id.'" WHERE c_id = '.$course_id.' AND iid ="'.$id.'"';
Database::query($sql);
}
}
//update wiki config
if ($values['reflink'] == 'index' && $version == 1 ) {
// Update wiki config
if ($values['reflink'] == 'index' && $version == 1) {
$sql = "INSERT INTO ".$tbl_wiki_conf." (c_id, page_id, task, feedback1, feedback2, feedback3, fprogress1, fprogress2, fprogress3, max_text, max_version, startdate_assig, enddate_assig, delayedsubmit)
VALUES ($course_id, '".$id."','".$_clean['task']."','".$_clean['feedback1']."','".$_clean['feedback2']."','".$_clean['feedback3']."','".$_clean['fprogress1']."','".$_clean['fprogress2']."','".$_clean['fprogress3']."','".$_clean['max_text']."','".$_clean['max_version']."','".$_clean['startdate_assig']."','".$_clean['enddate_assig']."','".$_clean['delayedsubmit']."')";
Database::query($sql);
@ -480,20 +490,22 @@ class Wiki
$tbl_wiki_discuss = $this->tbl_wiki_discuss;
$tbl_wiki_mailcue = $this->tbl_wiki_mailcue;
$tbl_wiki_conf = $this->tbl_wiki_conf;
$session_id = $this->session_id;
$condition_session = $this->condition_session;
$group_id = $this->group_id;
$groupfilter = $this->groupfilter;
$conditionSession = $this->condition_session;
$groupFilter = $this->groupfilter;
$course_id = $this->course_id;
$sql = "SELECT page_id FROM $tbl_wiki
WHERE c_id = $course_id AND $groupfilter $condition_session
WHERE c_id = $course_id AND $groupFilter $conditionSession
ORDER BY id DESC";
Database::query("DELETE FROM $tbl_wiki_conf WHERE c_id = $course_id AND page_id IN ($sql)");
Database::query("DELETE FROM $tbl_wiki_discuss WHERE c_id = $course_id AND publication_id IN ($sql)");
Database::query("DELETE FROM $tbl_wiki_mailcue WHERE c_id = $course_id AND $groupfilter $condition_session ");
Database::query("DELETE FROM $tbl_wiki WHERE c_id = $course_id AND $groupfilter $condition_session ");
$deleteSql = "DELETE FROM $tbl_wiki_conf WHERE c_id = $course_id AND page_id IN ($sql)";
Database::query($deleteSql);
$deleteSql = "DELETE FROM $tbl_wiki_discuss WHERE c_id = $course_id AND publication_id IN ($sql)";
Database::query($deleteSql);
$deleteSql = "DELETE FROM $tbl_wiki_mailcue WHERE c_id = $course_id AND $groupFilter $conditionSession ";
Database::query($deleteSql);
$deleteSql = "DELETE FROM $tbl_wiki WHERE c_id = $course_id AND $groupFilter $conditionSession ";
Database::query($deleteSql);
return get_lang('WikiDeleted');
}
@ -793,16 +805,17 @@ class Wiki
$filter =' AND w.id="'.$_clean['view'].'"';
}
//first, check page visibility in the first page version
// First, check page visibility in the first page version
$sql = 'SELECT * FROM '.$tbl_wiki.'
WHERE
c_id = '.$course_id.' AND
reflink="'.Database::escape_string($pageMIX).'" AND
'.$groupfilter.$condition_session.'
ORDER BY id ASC';
$result=Database::query($sql);
$row = Database::fetch_array($result);
$KeyVisibility=$row['visibility'];
$result = Database::query($sql);
$row = Database::fetch_array($result, 'ASSOC');
$KeyVisibility = $row['visibility'];
// second, show the last version
$sql = 'SELECT * FROM '.$tbl_wiki.' w
@ -816,7 +829,7 @@ class Wiki
ORDER BY id DESC';
$result = Database::query($sql);
$row = Database::fetch_array($result); // we do not need a while loop since we are always displaying the last version
$row = Database::fetch_array($result, 'ASSOC'); // we do not need a while loop since we are always displaying the last version
//log users access to wiki (page_id)
if (!empty($row['page_id'])) {
@ -4572,7 +4585,9 @@ class Wiki
// we do not need a while loop since we are always displaying the last version
if ($row['content'] == '' && $row['title'] == '' && $page == '') {
self::setMessage(Display::display_error_message(get_lang('MustSelectPage'), false, true));
self::setMessage(
Display::display_error_message(get_lang('MustSelectPage'), false, true)
);
return;
} elseif ($row['content']=='' && $row['title']=='' && $page=='index') {
@ -4594,7 +4609,10 @@ class Wiki
if (($row['reflink'] == 'index' || $row['reflink'] == '' || $row['assignment'] == 1) &&
(!api_is_allowed_to_edit(false, true) && $groupId == 0)
) {
self::setMessage(Display::display_error_message(get_lang('OnlyEditPagesCourseManager'), false, true));
Display::addFlash(
Display::return_message(get_lang('OnlyEditPagesCourseManager')),
'error'
);
} else {
$PassEdit = false;
@ -4607,7 +4625,11 @@ class Wiki
) {
$PassEdit = true;
} else {
self::setMessage(Display::display_normal_message(get_lang('OnlyEditPagesGroupMembers'), false, true));
Display::addFlash(
Display::return_message(
get_lang('OnlyEditPagesGroupMembers')
)
);
}
} else {
$PassEdit=true;
@ -4616,7 +4638,10 @@ class Wiki
$icon_assignment = null;
// check if is a assignment
if ($row['assignment'] == 1) {
self::setMessage(Display::display_normal_message(get_lang('EditAssignmentWarning'), false, true));
Display::addFlash(
Display::return_message(get_lang('EditAssignmentWarning'))
);
$icon_assignment=Display::return_icon('wiki_assignment.png', get_lang('AssignmentDescExtra'),'',ICON_SIZE_SMALL);
} elseif ($row['assignment'] == 2) {
$icon_assignment=Display::return_icon('wiki_work.png', get_lang('AssignmentWorkExtra'),'',ICON_SIZE_SMALL);
@ -4624,11 +4649,10 @@ class Wiki
if (api_is_allowed_to_edit(false, true) || api_is_platform_admin()) {
$PassEdit = true;
} else {
self::setMessage(
Display::display_warning_message(
Display::addFlash(
Display::return_message(
get_lang('LockByTeacher'),
false,
true
'warning'
)
);
$PassEdit = false;
@ -4637,12 +4661,17 @@ class Wiki
$PassEdit = true;
}
}
if ($PassEdit) {
//show editor if edit is allowed
if ($row['editlock'] == 1 &&
(api_is_allowed_to_edit(false, true) == false || api_is_platform_admin()==false)
) {
self::setMessage(Display::display_normal_message(get_lang('PageLockedExtra'), false, true));
Display::addFlash(
Display::return_message(
get_lang('PageLockedExtra')
)
);
} else {
// Check tasks
@ -4651,7 +4680,14 @@ class Wiki
time()<strtotime($row['startdate_assig'])
) {
$message = get_lang('TheTaskDoesNotBeginUntil').': '.api_get_local_time($row['startdate_assig'], null, date_default_timezone_get());
self::setMessage(Display::display_warning_message($message, false, true));
Display::addFlash(
Display::return_message(
$message,
'warning'
)
);
if (!api_is_allowed_to_edit(false, true)) {
$this->redirectHome();
}
@ -4664,7 +4700,12 @@ class Wiki
$row['delayedsubmit']==0
) {
$message = get_lang('TheDeadlineHasBeenCompleted').': '.api_get_local_time($row['enddate_assig'], null, date_default_timezone_get());
self::setMessage(Display::display_warning_message($message, false, true));
Display::addFlash(
Display::return_message(
$message,
'warning'
)
);
if (!api_is_allowed_to_edit(false,true)) {
$this->redirectHome();
}
@ -4672,7 +4713,12 @@ class Wiki
if (!empty($row['max_version']) && $row['version']>=$row['max_version']) {
$message=get_lang('HasReachedMaxiNumVersions');
self::setMessage(Display::display_warning_message($message, false, true));
Display::addFlash(
Display::return_message(
$message,
'warning'
)
);
if (!api_is_allowed_to_edit(false,true)) {
$this->redirectHome();
}
@ -4680,7 +4726,12 @@ class Wiki
if (!empty($row['max_text']) && $row['max_text']<=self::word_count($row['content'])) {
$message = get_lang('HasReachedMaxNumWords');
self::setMessage(Display::display_warning_message($message, false, true));
Display::addFlash(
Display::return_message(
$message,
'warning'
)
);
if (!api_is_allowed_to_edit(false,true)) {
$this->redirectHome();
}
@ -4726,29 +4777,44 @@ class Wiki
$message_task.='<p>'.get_lang('OtherSettings').': '.get_lang('NMaxVersion').': '.$message_task_max_version;
$message_task.=' '.get_lang('NMaxWords').': '.$message_task_max_text;
// Display message
self::setMessage(Display::display_normal_message($message_task, false, true));
Display::addFlash(
Display::return_message(
$message_task
)
);
}
$feedback_message = '';
if ($row['progress'] == $row['fprogress1'] && !empty($row['fprogress1'])) {
$feedback_message='<b>'.get_lang('Feedback').'</b><p>'.api_htmlentities($row['feedback1']).'</p>';
self::setMessage(Display::display_normal_message($feedback_message, false, true));
} elseif ($row['progress'] == $row['fprogress2'] && !empty($row['fprogress2'])) {
$feedback_message='<b>'.get_lang('Feedback').'</b><p>'.api_htmlentities($row['feedback2']).'</p>';
self::setMessage(Display::display_normal_message($feedback_message, false, true));
} elseif ($row['progress'] == $row['fprogress3'] && !empty($row['fprogress3'])) {
$feedback_message='<b>'.get_lang('Feedback').'</b><p>'.api_htmlentities($row['feedback3']).'</p>';
self::setMessage(Display::display_normal_message($feedback_message, false, true));
}
if (!empty($feedback_message)) {
Display::addFlash(
Display::return_message(
$feedback_message
)
);
}
// Previous checking for concurrent editions
if ($row['is_editing'] == 0) {
self::setMessage(Display::display_normal_message(get_lang('WarningMaxEditingTime'), false, true));
Display::addFlash(
Display::return_message(
get_lang('WarningMaxEditingTime')
)
);
$time_edit = api_get_utc_datetime();
$sql = 'UPDATE '.$tbl_wiki.' SET
is_editing = "'.$userId.'",
time_edit = "'.$time_edit.'"
WHERE c_id = '.$course_id.' AND id="'.$row['id'].'"';
WHERE c_id = '.$course_id.' AND id="'.$row['id'].'"';
Database::query($sql);
} elseif ($row['is_editing'] != $userId) {
$timestamp_edit=strtotime($row['time_edit']);
@ -4757,11 +4823,15 @@ class Wiki
$rest_time = $max_edit_time - $time_editing;
$userinfo = api_get_user_info($row['is_editing']);
$username = api_htmlentities(sprintf(get_lang('LoginX'), $userinfo['username']), ENT_QUOTES);
$is_being_edited = get_lang('ThisPageisBeginEditedBy').' '.UserManager::getUserProfileLink($userinfo).'
'.get_lang('ThisPageisBeginEditedTryLater').' '.date( "i",$rest_time).' '.get_lang('MinMinutes').'';
self::setMessage(Display::display_normal_message($is_being_edited, false, true));
Display::addFlash(
Display::return_message(
$is_being_edited
)
);
$this->redirectHome();
}
@ -4783,15 +4853,30 @@ class Wiki
// Saving a change
if ($form->validate()) {
if (empty($_POST['title'])) {
self::setMessage(Display::display_error_message(get_lang("NoWikiPageTitle"), false, true));
Display::addFlash(
Display::return_message(
get_lang("NoWikiPageTitle"),
'error'
)
);
} elseif (!self::double_post($_POST['wpost_id'])) {
//double post
} elseif ($_POST['version']!='' && $_SESSION['_version'] !=0 && $_POST['version'] != $_SESSION['_version']) {
//prevent concurrent users and double version
self::setMessage(Display::display_error_message(get_lang("EditedByAnotherUser"), false, true));
Display::addFlash(
Display::return_message(
get_lang("EditedByAnotherUser"),
'error'
)
);
} else {
$return_message = self::save_wiki($form->exportValues());
self::setMessage(Display::display_confirmation_message($return_message, false, true));
$returnMessage = self::save_wiki($form->exportValues());
Display::addFlash(
Display::return_message(
$returnMessage,
'confirmation'
)
);
}
$wikiData = self::getWikiData();
$redirectUrl = $this->url.'&action=showpage&title='.$wikiData['reflink'].'&'.api_get_cidreq();
@ -5178,7 +5263,6 @@ class Wiki
break;
case 'showpage':
self::display_wiki_entry($page);
//self::setMessage(Display::display_error_message(get_lang('MustSelectPage'));
break;
case 'edit':
self::editPage();
@ -5193,7 +5277,6 @@ class Wiki
self::allPages($action);
break;
case 'discuss':
//self::setMessage(Display::display_confirmation_message(get_lang('CommentAdded'));
self::getDiscuss($page);
break;
case 'export_to_doc_file':

Loading…
Cancel
Save