You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
202 lines
8.8 KiB
202 lines
8.8 KiB
<?php
|
|
|
|
/* For licensing terms, see /license.txt */
|
|
|
|
use Chamilo\CourseBundle\Entity\CForumPost;
|
|
|
|
/**
|
|
* Responses to AJAX calls for forum attachments.
|
|
*
|
|
* @author Daniel Barreto Alva <daniel.barreto@beeznest.com>
|
|
*/
|
|
require_once __DIR__.'/../global.inc.php';
|
|
|
|
// First, protect this script
|
|
api_protect_course_script(false);
|
|
|
|
$action = isset($_REQUEST['a']) ? $_REQUEST['a'] : null;
|
|
// Create a default error response
|
|
$json = [
|
|
'error' => true,
|
|
'errorMessage' => 'ERROR',
|
|
];
|
|
|
|
// Check if exist action
|
|
if (!empty($action)) {
|
|
switch ($action) {
|
|
case 'upload_file':
|
|
$current_forum = get_forum_information($_REQUEST['forum']);
|
|
$current_forum_category = get_forumcategory_information($current_forum['forum_category']);
|
|
$current_thread = get_thread_information($_REQUEST['forum'], $_REQUEST['thread']);
|
|
|
|
if (!empty($_FILES) && !empty($_REQUEST['forum'])) {
|
|
// The user is not allowed here if
|
|
// 1. the forum category, forum or thread is invisible (visibility==0)
|
|
// 2. the forum category, forum or thread is locked (locked <>0)
|
|
// 3. if anonymous posts are not allowed
|
|
// The only exception is the course manager
|
|
// They are several pieces for clarity.
|
|
if (!api_is_allowed_to_edit(null, true) &&
|
|
(
|
|
($current_forum_category && 0 == $current_forum_category['visibility']) ||
|
|
0 == $current_forum['visibility']
|
|
)
|
|
) {
|
|
$json['errorMessage'] = '1. the forum category, forum or thread is invisible (visibility==0)';
|
|
break;
|
|
}
|
|
if (!api_is_allowed_to_edit(null, true) &&
|
|
(
|
|
($current_forum_category && 0 != $current_forum_category['locked']) ||
|
|
0 != $current_forum['locked'] || 0 != $current_thread['locked']
|
|
)
|
|
) {
|
|
$json['errorMessage'] = '2. the forum category, forum or thread is locked (locked <>0)';
|
|
break;
|
|
}
|
|
if (api_is_anonymous() && 0 == $current_forum['allow_anonymous']) {
|
|
$json['errorMessage'] = '3. if anonymous posts are not allowed';
|
|
break;
|
|
}
|
|
// If pass all previous control, user can edit post
|
|
$courseId = isset($_REQUEST['c_id']) ? intval($_REQUEST['c_id']) : api_get_course_int_id();
|
|
$json['courseId'] = $courseId;
|
|
$forumId = isset($_REQUEST['forum']) ? intval($_REQUEST['forum']) : null;
|
|
$json['forum'] = $forumId;
|
|
$threadId = isset($_REQUEST['thread']) ? intval($_REQUEST['thread']) : null;
|
|
$json['thread'] = $threadId;
|
|
$postId = isset($_REQUEST['postId']) ? intval($_REQUEST['postId']) : null;
|
|
$json['postId'] = $postId;
|
|
|
|
if (!empty($courseId) &&
|
|
!is_null($forumId) &&
|
|
!is_null($threadId) &&
|
|
!is_null($postId)
|
|
) {
|
|
// Save forum attachment
|
|
$attachId = add_forum_attachment_file('', $postId);
|
|
if (false !== $attachId) {
|
|
// Get prepared array of attachment data
|
|
$array = getAttachedFiles(
|
|
$forumId,
|
|
$threadId,
|
|
$postId,
|
|
$attachId,
|
|
$courseId
|
|
);
|
|
// Check if array data is consistent
|
|
if (isset($array['name'])) {
|
|
$json['error'] = false;
|
|
$json['errorMessage'] = 'Success';
|
|
$json = array_merge($json, $array);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
echo json_encode($json);
|
|
break;
|
|
case 'delete_file':
|
|
$current_forum = get_forum_information($_REQUEST['forum']);
|
|
$current_forum_category = get_forumcategory_information($current_forum['forum_category']);
|
|
$current_thread = get_thread_information($_REQUEST['forum'], $_REQUEST['thread']);
|
|
|
|
// Check if set attachment ID and thread ID
|
|
if (isset($_REQUEST['attachId']) && isset($_REQUEST['thread'])) {
|
|
api_block_course_item_locked_by_gradebook($_REQUEST['thread'], LINK_FORUM_THREAD);
|
|
// The user is not allowed here if
|
|
// 1. the forum category, forum or thread is invisible (visibility==0)
|
|
// 2. the forum category, forum or thread is locked (locked <>0)
|
|
// 3. if anonymous posts are not allowed
|
|
// 4. if editing of replies is not allowed
|
|
// The only exception is the course manager
|
|
// They are several pieces for clarity.
|
|
if (!api_is_allowed_to_edit(null, true) &&
|
|
(
|
|
($current_forum_category && 0 == $current_forum_category['visibility']) ||
|
|
0 == $current_forum['visibility']
|
|
)
|
|
) {
|
|
$json['errorMessage'] = '1. the forum category, forum or thread is invisible (visibility==0)';
|
|
break;
|
|
}
|
|
if (!api_is_allowed_to_edit(null, true) &&
|
|
(
|
|
($current_forum_category && 0 != $current_forum_category['locked']) ||
|
|
0 != $current_forum['locked'] || 0 != $current_thread['locked']
|
|
)
|
|
) {
|
|
$json['errorMessage'] = '2. the forum category, forum or thread is locked (locked <>0)';
|
|
break;
|
|
}
|
|
if (api_is_anonymous() && 0 == $current_forum['allow_anonymous']) {
|
|
$json['errorMessage'] = '3. if anonymous posts are not allowed';
|
|
break;
|
|
}
|
|
$group_id = api_get_group_id();
|
|
$groupEntity = api_get_group_entity();
|
|
if (!api_is_allowed_to_edit(null, true) &&
|
|
0 == $current_forum['allow_edit'] &&
|
|
($group_id && !GroupManager::isTutorOfGroup(api_get_user_id(), $groupEntity))
|
|
) {
|
|
$json['errorMessage'] = '4. if editing of replies is not allowed';
|
|
break;
|
|
}
|
|
// If pass all previous control, user can edit post
|
|
$attachId = $_REQUEST['attachId'];
|
|
$threadId = $_REQUEST['thread'];
|
|
// Delete forum attachment from database and file system
|
|
$affectedRows = delete_attachment(0, $attachId, false);
|
|
if ($affectedRows > 0) {
|
|
$json['error'] = false;
|
|
$json['errorMessage'] = 'Success';
|
|
}
|
|
}
|
|
echo json_encode($json);
|
|
break;
|
|
case 'change_post_status':
|
|
if (api_is_allowed_to_edit(false, true)) {
|
|
$postId = isset($_GET['post_id']) ? $_GET['post_id'] : '';
|
|
if (empty($postId)) {
|
|
exit;
|
|
}
|
|
|
|
$postId = str_replace('status_post_', '', $postId);
|
|
$em = Database::getManager();
|
|
/** @var CForumPost $post */
|
|
$post = $em->find(CForumPost::class, $postId);
|
|
if ($post) {
|
|
$forum = $post->getForum();
|
|
$status = $post->getStatus();
|
|
if (empty($status)) {
|
|
$status = CForumPost::STATUS_WAITING_MODERATION;
|
|
}
|
|
|
|
switch ($status) {
|
|
case CForumPost::STATUS_VALIDATED:
|
|
$changeTo = CForumPost::STATUS_REJECTED;
|
|
break;
|
|
case CForumPost::STATUS_WAITING_MODERATION:
|
|
$changeTo = CForumPost::STATUS_VALIDATED;
|
|
break;
|
|
case CForumPost::STATUS_REJECTED:
|
|
$changeTo = CForumPost::STATUS_WAITING_MODERATION;
|
|
break;
|
|
}
|
|
$post->setStatus($changeTo);
|
|
$em->persist($post);
|
|
$em->flush();
|
|
|
|
echo getPostStatus(
|
|
$forum,
|
|
[
|
|
'iid' => $post->getIid(),
|
|
'status' => $post->getStatus(),
|
|
],
|
|
false
|
|
);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
exit;
|
|
|