get_parms('session', 'coll', 'status'); if ($parm["session"]) { session_id($parm["session"]); } /* @var $Core \Alchemy\Phrasea\Core */ $Core = require_once __DIR__ . "/../../lib/bootstrap.php"; $appbox = appbox::get_instance(\bootstrap::getCore()); $session = $appbox->get_session(); define("DEFAULT_MIMETYPE", "application/octet-stream"); if ($request->comes_from_flash()) define("UPLOADER", "FLASH"); else define("UPLOADER", "HTML"); if (!isset($_FILES['Filedata'])) { if (UPLOADER == 'FLASH') header('HTTP/1.1 500 Internal Server Error'); else echo ''; exit; } if ($_FILES['Filedata']['error'] > 0) { if (UPLOADER == 'FLASH') header('HTTP/1.1 500 Internal Server Error'); else echo ''; exit(0); } $sbas_id = false; $usr_id = $Core->getAuthenticatedUser()->get_id(); $sbas_id = phrasea::sbasFromBas($parm['coll']); $base_id = $parm['coll']; $chStatus = User_Adapter::getInstance($usr_id, $appbox)->ACL()->has_right_on_base($base_id, 'chgstatus'); $ext = pathinfo($_FILES['Filedata']["name"]); $newname = $_FILES['Filedata']['tmp_name'] . '.' . (isset($ext['extension']) ? $ext['extension'] : ''); if ($newname !== $_FILES['Filedata']['tmp_name']) if (rename($_FILES['Filedata']['tmp_name'], $newname) ) ; $_FILES['Filedata']['tmp_name'] = $newname; $filename = new system_file($_FILES['Filedata']['tmp_name']); $mask_oui = '0000000000000000000000000000000000000000000000000000000000000000'; $mask_non = '1111111111111111111111111111111111111111111111111111111111111111'; if ($sbas_id !== false && is_array($parm['status'])) { $mask_oui = '0000000000000000000000000000000000000000000000000000000000000000'; $mask_non = '1111111111111111111111111111111111111111111111111111111111111111'; foreach ($parm['status'] as $k => $v) { if ((int) $k <= 63 && (int) $k >= 4) { if ($v == '0') $mask_non[63 - (int) $k] = $v; elseif ($v == '1') $mask_oui[63 - (int) $k] = $v; } } } try { $sha256 = $filename->get_sha256(); $uuid = false; if (!$filename->has_uuid()) { try { $tmp_record = record_adapter::get_record_by_sha($sbas_id, $sha256); if (!$tmp_record) throw new Exception('bad luck'); if (is_array($tmp_record)) $tmp_record = array_shift($tmp_record); $tmp_uuid = $tmp_record->get_uuid(); if ($tmp_uuid && uuid::is_valid($tmp_uuid)) { $uuid = $tmp_uuid; } } catch (Exception $e) { } } $filename->write_uuid($uuid); $error_file = p4file::check_file_error($filename->getPathname(), $sbas_id, $_FILES['Filedata']["name"]); $status_2 = databox_status::operation_and($mask_oui, $mask_non); if (!$filename->is_new_in_base(phrasea::sbasFromBas($base_id)) || count($error_file) > 0) { if (!lazaretFile::move_uploaded_to_lazaret($filename, $base_id, $_FILES['Filedata']["name"], implode("\n", $error_file), $status_2)) { if (UPLOADER == 'FLASH') header('HTTP/1.1 500 Internal Server Error'); else echo ''; } else exit(_('Document ajoute a la quarantaine')); if (UPLOADER == 'HTML') echo ''; exit; } } catch (Exception $e) { } if (($record_id = p4file::archiveFile($filename, $base_id, true, $_FILES['Filedata']["name"])) === false) { unlink($filename->getPathname()); if (UPLOADER == 'FLASH') header('HTTP/1.1 500 Internal Server Error'); else echo ''; exit(0); } if ($chStatus === true && $sbas_id !== false && is_array($parm['status'])) { try { $record = new record_adapter($sbas_id, $record_id); $status = databox_status::operation_or($record->get_status(), $mask_oui); $record->set_binary_status(databox_status::operation_and($status, $mask_non)); } catch (Exception $e) { } } if (file_exists($filename->getPathname())) unlink($filename->getPathname()); if (UPLOADER == 'HTML') echo ''; exit(0);