parent
81ec9546ea
commit
aec5d69040
@ -0,0 +1,205 @@ |
|||||||
|
<?php |
||||||
|
/* For licensing terms, see /license.txt */ |
||||||
|
|
||||||
|
use ChamiloSession as Session; |
||||||
|
use Symfony\Component\Finder\Finder; |
||||||
|
|
||||||
|
require_once '../inc/global.inc.php'; |
||||||
|
$current_course_tool = TOOL_STUDENTPUBLICATION; |
||||||
|
|
||||||
|
api_protect_course_script(true); |
||||||
|
|
||||||
|
// Including necessary files |
||||||
|
require_once 'work.lib.php'; |
||||||
|
|
||||||
|
$this_section = SECTION_COURSES; |
||||||
|
|
||||||
|
$workId = isset($_REQUEST['id']) ? intval($_REQUEST['id']) : null; |
||||||
|
|
||||||
|
$is_allowed_to_edit = api_is_allowed_to_edit(); |
||||||
|
$course_id = api_get_course_int_id(); |
||||||
|
$user_id = api_get_user_id(); |
||||||
|
$userInfo = api_get_user_info(); |
||||||
|
$session_id = api_get_session_id(); |
||||||
|
$courseInfo = api_get_course_info(); |
||||||
|
$course_code = $courseInfo['code']; |
||||||
|
$group_id = api_get_group_id(); |
||||||
|
|
||||||
|
if (empty($workId)) { |
||||||
|
api_not_allowed(true); |
||||||
|
} |
||||||
|
|
||||||
|
protectWork($courseInfo, $workId); |
||||||
|
|
||||||
|
$workInfo = get_work_data_by_id($workId); |
||||||
|
|
||||||
|
$student_can_edit_in_session = api_is_allowed_to_session_edit(false, true); |
||||||
|
|
||||||
|
$homework = get_work_assignment_by_id($workInfo['id']); |
||||||
|
$validationStatus = getWorkDateValidationStatus($homework); |
||||||
|
|
||||||
|
$interbreadcrumb[] = array('url' => api_get_path(WEB_CODE_PATH).'work/work.php?'.api_get_cidreq(), 'name' => get_lang('StudentPublications')); |
||||||
|
$interbreadcrumb[] = array('url' => api_get_path(WEB_CODE_PATH).'work/work_list.php?'.api_get_cidreq().'&id='.$workId, 'name' => $workInfo['title']); |
||||||
|
$interbreadcrumb[] = array('url' => '#', 'name' => get_lang('UploadCorrections')); |
||||||
|
|
||||||
|
$form = new FormValidator( |
||||||
|
'form', |
||||||
|
'POST', |
||||||
|
api_get_self()."?".api_get_cidreq()."&id=".$workId, |
||||||
|
'', |
||||||
|
array('enctype' => "multipart/form-data") |
||||||
|
); |
||||||
|
$form->addElement('header', get_lang('UploadCorrections')); |
||||||
|
$form->addElement('file', 'file', get_lang('UploadADocument')); |
||||||
|
$form->add_real_progress_bar('uploadWork', 'file'); |
||||||
|
$form->addRule('file', get_lang('ThisFieldIsRequired'), 'required'); |
||||||
|
$form->addElement('hidden', 'id', $workId); |
||||||
|
$form->addButtonUpload(get_lang('Upload')); |
||||||
|
|
||||||
|
$error_message = null; |
||||||
|
|
||||||
|
$succeed = false; |
||||||
|
if ($form->validate()) { |
||||||
|
|
||||||
|
$values = $form->getSubmitValues(); |
||||||
|
|
||||||
|
$upload = process_uploaded_file($_FILES['file'], false); |
||||||
|
|
||||||
|
if ($upload) { |
||||||
|
|
||||||
|
$zip = new PclZip($_FILES['file']['tmp_name']); |
||||||
|
|
||||||
|
// Check the zip content (real size and file extension) |
||||||
|
$zipFileList = (array)$zip->listContent(); |
||||||
|
|
||||||
|
$realSize = 0; |
||||||
|
foreach ($zipFileList as & $this_content) { |
||||||
|
$realSize += $this_content['size']; |
||||||
|
} |
||||||
|
|
||||||
|
$maxSpace = DocumentManager::get_course_quota(); |
||||||
|
|
||||||
|
if (!DocumentManager::enough_space($realSize, $maxSpace)) { |
||||||
|
Display::addFlash( |
||||||
|
Display::return_message( |
||||||
|
get_lang('UplNotEnoughSpace'), |
||||||
|
'warning' |
||||||
|
) |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
$folder = api_get_unique_id(); |
||||||
|
$destinationDir = api_get_path(SYS_ARCHIVE_PATH).$folder; |
||||||
|
mkdir($destinationDir, api_get_permissions_for_new_directories(), true); |
||||||
|
|
||||||
|
/* Uncompress zip file*/ |
||||||
|
// We extract using a callback function that "cleans" the path |
||||||
|
$zip->extract( |
||||||
|
PCLZIP_OPT_PATH, |
||||||
|
$destinationDir, |
||||||
|
PCLZIP_CB_PRE_EXTRACT, |
||||||
|
'clean_up_files_in_zip', |
||||||
|
PCLZIP_OPT_REPLACE_NEWER |
||||||
|
); |
||||||
|
|
||||||
|
$result = get_work_user_list(null, null, null, null, $workId); |
||||||
|
|
||||||
|
if (empty($result)) { |
||||||
|
Display::addFlash( |
||||||
|
Display::return_message( |
||||||
|
get_lang('NoDataAvailable'), |
||||||
|
'warning' |
||||||
|
) |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
$finalResult = []; |
||||||
|
foreach ($result as $item) { |
||||||
|
$title = $item['title_clean']; |
||||||
|
$title = api_replace_dangerous_char($title); |
||||||
|
$finalResult[$title] = $item['id']; |
||||||
|
} |
||||||
|
|
||||||
|
$coursePath = api_get_path(SYS_COURSE_PATH).$courseInfo['path'].'/'; |
||||||
|
$workDir = api_get_path(SYS_COURSE_PATH).$courseInfo['path'].'/work/'; |
||||||
|
$workDir .= basename($workInfo['url']).'/'; |
||||||
|
|
||||||
|
$finder = new Finder(); |
||||||
|
$finder->files()->in($destinationDir); |
||||||
|
/** @var SplFileInfo $file */ |
||||||
|
foreach ($finder as $file) { |
||||||
|
$fileName = $file->getBasename(); |
||||||
|
$fileName = substr($fileName, 20, strlen($fileName)); |
||||||
|
$pos = strpos($fileName, '-') + 1; |
||||||
|
$fileName = substr($fileName, $pos, strlen($fileName)); |
||||||
|
if (isset($finalResult[$fileName])) { |
||||||
|
$workStudentId = $finalResult[$fileName]; |
||||||
|
$workStudent = get_work_data_by_id($workStudentId); |
||||||
|
if ($workStudent) { |
||||||
|
if (!empty($workStudent['url_correction'])) { |
||||||
|
$correctionFilePath = $coursePath.$workStudent['url_correction']; |
||||||
|
$correctionTitle = $workStudent['title_correction']; |
||||||
|
} else { |
||||||
|
if (!empty($workStudent['url'])) { |
||||||
|
$correctionFilePath = $coursePath.$workStudent['url'].'_correction'; |
||||||
|
$correctionTitle = $fileName; |
||||||
|
} else { |
||||||
|
//$correctionFilePath = $workDir.api_get_unique_id().'_correction'; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
$table = Database:: get_course_table(TABLE_STUDENT_PUBLICATION); |
||||||
|
|
||||||
|
if (!empty($correctionFilePath)) { |
||||||
|
|
||||||
|
$result = copy( |
||||||
|
$file->getRealPath(), |
||||||
|
$correctionFilePath |
||||||
|
); |
||||||
|
|
||||||
|
$correctionTitle = Database::escape_string( |
||||||
|
$correctionTitle |
||||||
|
); |
||||||
|
|
||||||
|
$correctionFilePath = Database::escape_string( |
||||||
|
'work/'.basename($workInfo['url']).'/'.basename($correctionFilePath) |
||||||
|
); |
||||||
|
|
||||||
|
if ($result) { |
||||||
|
$sql = "UPDATE $table SET |
||||||
|
url_correction = '".$correctionFilePath."', |
||||||
|
title_correction = '".$correctionTitle."' |
||||||
|
WHERE iid = $workStudentId"; |
||||||
|
Database::query($sql); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
Display::addFlash( |
||||||
|
Display::return_message( |
||||||
|
get_lang('Uploaded') |
||||||
|
) |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
header('Location: '.api_get_path(WEB_CODE_PATH).'work/work_list_all.php?'.api_get_cidreq().'&id='.$workId); |
||||||
|
exit; |
||||||
|
} |
||||||
|
|
||||||
|
$htmlHeadXtra[] = to_javascript_work(); |
||||||
|
Display :: display_header(null); |
||||||
|
|
||||||
|
if (!empty($workId)) { |
||||||
|
echo $validationStatus['message']; |
||||||
|
if ($is_allowed_to_edit) { |
||||||
|
$form->display(); |
||||||
|
} else { |
||||||
|
Display::display_error_message(get_lang('ActionNotAllowed')); |
||||||
|
} |
||||||
|
} else { |
||||||
|
Display::display_error_message(get_lang('ActionNotAllowed')); |
||||||
|
} |
||||||
|
|
||||||
|
Display :: display_footer(); |
||||||
Loading…
Reference in new issue