check_feature('feature_file_galleries'); $filegallib = TikiLib::lib('filegal'); if ($prefs['feature_groupalert'] == 'y') { $groupalertlib = TikiLib::lib('groupalert'); } @ini_set('max_execution_time', 0); $auto_query_args = ['galleryId', 'fileId', 'filegals_manager', 'view', 'simpleMode', 'insertion_syntax']; if ($prefs['auth_token_access'] == 'y' && ! empty($token)) { $smarty->assign('token_id', $token); } $requestGalleryId = null; if (isset($_REQUEST['galleryId']) && ! is_array($_REQUEST['galleryId'])) { $requestGalleryId = $_REQUEST['galleryId']; $_REQUEST['galleryId'] = [ $requestGalleryId ]; } $fileInfo = null; $fileId = null; if (! empty($_REQUEST['fileId'])) { $fileId = $_REQUEST['fileId']; if (! ($fileInfo = $filegallib->get_file_info($fileId))) { $smarty->assign('msg', tra("Incorrect param")); $smarty->display('error.tpl'); die; } if (empty($_REQUEST['galleryId'][0])) { $_REQUEST['galleryId'][0] = $fileInfo['galleryId']; } elseif ($_REQUEST['galleryId'][0] != $fileInfo['galleryId']) { $smarty->assign('msg', tra("Could not find the file requested")); $smarty->display('error.tpl'); die; } include_once('lib/mime/mimetypes.php'); global $mimetypes; asort($mimetypes); $smarty->assign_by_ref('mimetypes', $mimetypes); if (! empty($prefs['ocr_enable']) && $prefs['ocr_enable'] === 'y') { if (! empty($prefs['ocr_file_level']) && $prefs['ocr_file_level'] === 'y') { if (empty($prefs['ocr_limit_languages'])) { $ocr = TikiLib::lib('ocr'); $langs = $ocr->getTesseractLangs(); } else { $langs = $prefs['ocr_limit_languages']; } $selectedLangs = json_decode($fileInfo['ocr_lang']); // lets remove the language codes from the unselected list if they are already selected foreach ($selectedLangs as $lang) { unset($langs[array_search($lang, $langs)]); } $langLib = TikiLib::lib('language'); if (! empty($selectedLangs)) { $smarty->assign('selectedLanguages', $langLib->findLanguageNames($selectedLangs)); } $smarty->assign('languages', $langLib->findLanguageNames($langs)); } if ($fileInfo['ocr_state']) { $smarty->assign('ocr_state', true); } } $subGalleries = $filegallib->getSubGalleries(); $gals = []; foreach ($subGalleries['data'] as $gal) { $gals[] = [ 'label' => $gal['parentName'] . ' > ' . $gal['name'], 'id' => $gal['id'], 'perms' => $gal['perms'], 'public' => $gal['public'], 'user' => $gal['user'], ]; } sort($gals); $smarty->assign_by_ref('all_galleries', $gals); } if (isset($_REQUEST['galleryId'][0])) { $gal_info = $filegallib->get_file_gallery((int)$_REQUEST['galleryId'][0]); if (empty($gal_info)) { $smarty->assign('msg', tra('Incorrect file gallery')); $smarty->display('error.tpl'); die; } $tikilib->get_perm_object($_REQUEST['galleryId'][0], 'file gallery', $gal_info, true); $smarty->assign_by_ref('gal_info', $gal_info); } if (empty($fileId) && $tiki_p_upload_files != 'y' && $tiki_p_admin_file_galleries != 'y') { $smarty->assign('errortype', 401); $smarty->assign('msg', tra("Permission denied")); $smarty->display('error.tpl'); die; } if (isset($_REQUEST['galleryId'][1])) { foreach ($_REQUEST['galleryId'] as $i => $gal) { if (! $i) { continue; } // TODO get the good gal_info $perms = $tikilib->get_perm_object($_REQUEST['galleryId'][$i], 'file gallery', isset($gal_info) ? $gal_info : '', false); $access->check_permission('tiki_p_upload_files'); } } if (! empty($fileId)) { if (! empty($fileInfo['lockedby']) && $fileInfo['lockedby'] != $user && $tiki_p_admin_file_galleries != 'y') { // if locked must be the locker $smarty->assign('msg', tra(sprintf('The file has been locked by %s', $fileInfo['lockedby']))); $smarty->display('error.tpl'); die; } if (! ((! empty($user) && ($user == $fileInfo['user'] || $user == $fileInfo['lockedby'])) || $tiki_p_edit_gallery_file == 'y')) { // must be the owner or the locker or have the perms $smarty->assign('errortype', 401); $smarty->assign('msg', tra("You do not have permission to edit this file")); $smarty->display('error.tpl'); die; } if ($gal_info['backlinkPerms'] == 'y' && $filegallib->hasOnlyPrivateBacklinks($fileId)) { $smarty->assign('errortype', 401); $smarty->assign('msg', tra("You do not have permission to edit this file")); $smarty->display('error.tpl'); die; } if (isset($_REQUEST['lockedby']) && $fileInfo['lockedby'] != $_REQUEST['lockedby']) { if (empty($fileInfo['lockedby'])) { $smarty->assign('msg', tra(sprintf('The file has been unlocked meanwhile'))); } else { $smarty->assign('msg', tra(sprintf('The file has been locked by %s', $fileInfo['lockedby']))); } $smarty->display('error.tpl'); die; } if ($gal_info['lockable'] == 'y' && empty($fileInfo['lockedby']) && $tiki_p_admin_file_galleries != 'y') { $smarty->assign('msg', tra('You must lock the file before editing it')); $smarty->display('error.tpl'); die; } } $smarty->assign('show', 'n'); if (! empty($_REQUEST['galleryId'][0]) && $prefs['feature_groupalert'] == 'y') { $groupforalert = $groupalertlib->GetGroup('file gallery', (int)$_REQUEST['galleryId'][0]); if ($groupforalert != '') { $showeachuser = $groupalertlib->GetShowEachUser('file gallery', (int)$_REQUEST['galleryId'][0], $groupforalert); $listusertoalert = $userlib->get_users(0, -1, 'login_asc', '', '', false, $groupforalert, ''); $smarty->assign_by_ref('listusertoalert', $listusertoalert['data']); } $smarty->assign_by_ref('groupforalert', $groupforalert); $smarty->assign_by_ref('showeachuser', $showeachuser); } if (empty($_REQUEST['returnUrl'])) { include('lib/filegals/max_upload_size.php'); } // Process an upload here if ($isUpload) { $shortLivedTokens = ($prefs['site_short_lived_csrf_tokens'] ?? 'n') === 'y'; // multiple form submissions are possible but the same ticket is in each form if JS is enabled, // so save ticket info from first submission if ($shortLivedTokens && (int) $_POST['submission'] === 1 && ! empty($_POST['totalSubmissions']) && (int) $_POST['totalSubmissions'] > 1) { $_SESSION['tickets']['repeatTicket']['ticket'] = $_POST['ticket']; $_SESSION['tickets']['repeatTicket']['time'] = $_SESSION['tickets'][$_POST['ticket']]; } if ( ((! $shortLivedTokens || (int) $_POST['submission'] === 1) && $access->checkCsrf()) // for subsequent submissions check ticket against saved ticket info from first submission || ((int) $_POST['submission'] > 1 && (int) $_POST['submission'] <= (int) $_POST['totalSubmissions'] // check that posted ticket matches saved ticket from first submission && $_POST['ticket'] === $_SESSION['tickets']['repeatTicket']['ticket'] // check that the ticket from the first submission hasn't expired && ! empty($_SESSION['tickets']['repeatTicket']['time']) && $_SESSION['tickets']['repeatTicket']['time'] < time() && $_SESSION['tickets']['repeatTicket']['time'] > time() - $prefs['site_security_timeout'] ) ) { if ($shortLivedTokens && ! empty($_POST['totalSubmissions']) && (int) $_POST['submission'] === (int) $_POST['totalSubmissions']) { unset($_SESSION['tickets']['repeatTicket']); } $optionalRequestParams = [ 'fileId', 'parentGalleryId', 'name', 'user', 'description', 'author', 'comment', 'returnUrl', 'isbatch', 'deleteAfter', 'deleteAfter_unit', 'hit_limit', 'listtoalert', 'insertion_syntax', 'filetype', 'imagesize', 'image_max_size_x', 'image_max_size_y', 'ocr_state', 'ocr_lang' ]; $uploadParams = [ 'fileInfo' => $fileInfo, 'galleryId' => $_REQUEST['galleryId'], ]; foreach ($optionalRequestParams as $p) { if (isset($_REQUEST[ $p ])) { if ($p === 'parentGalleryId') { $uploadParams[ 'galleryId' ] = [$_REQUEST[ $p ]]; // new parent gallery for file from edit properties form } else { $uploadParams[ $p ] = $_REQUEST[ $p ]; } } } if (! empty($prefs['ocr_enable']) && $prefs['ocr_enable'] === 'y' && empty($_POST['ocr_state'][0])) { $uploadParams['ocr_state'][0] = null; } if ($fileInfo = $filegallib->actionHandler('uploadFile', $uploadParams)) { $fileId = $fileInfo['fileId']; } } } $fileparts = pathinfo($fileInfo['filename']); $fileInfo['extension'] = isset($fileparts['extension']) ? $fileparts['extension'] : ''; $smarty->assign_by_ref('fileInfo', $fileInfo); $smarty->assign('editFileId', (int) $fileId); // Get the list of galleries to display the select box in the template $smarty->assign('galleryId', empty($_REQUEST['galleryId'][0]) ? '' : $_REQUEST['galleryId'][0]); if (empty($fileId)) { if (isset($gal_info['type']) && $gal_info['type'] == 'user') { $galleries = $filegallib->getSubGalleries($requestGalleryId, true, 'userfiles'); } else { $galleries = $filegallib->getSubGalleries($requestGalleryId, true, 'upload_files'); } $smarty->assign_by_ref('galleries', $galleries["data"]); $smarty->assign('treeRootId', $galleries['parentId']); } if ($prefs['fgal_limit_hits_per_file'] == 'y') { $smarty->assign('hit_limit', $filegallib->get_download_limit($fileId)); } if (! empty($fileInfo['fileId'])) { $smarty->assign('metarray', $filegallib->metadataAction($fileInfo['fileId']), 'get_array'); } $is_iis = TikiInit::isIIS(); $smarty->assign('is_iis', $is_iis); $cat_type = 'file'; $cat_objid = (int) $fileId; include_once('categorize_list.php'); include_once('tiki-section_options.php'); // disallow robots to index page: $smarty->assign('metatag_robots', 'NOINDEX, NOFOLLOW'); $smarty->assign('category_jail', TikiLib::lib('tiki')->get_jail(false)); // Display the template if ($prefs['javascript_enabled'] != 'y' or ! $isUpload || ! empty($_REQUEST['fileId'])) { if ($prefs['file_galleries_use_jquery_upload'] !== 'y') { $headerlib->add_jsfile('vendor_bundled/vendor/jquery-form/form/jquery.form.js'); } $smarty->assign('mid', 'tiki-upload_file.tpl'); if (! empty($_REQUEST['filegals_manager'])) { $smarty->assign('filegals_manager', $_REQUEST['filegals_manager']); $smarty->assign('insertion_syntax', $jitRequest->insertion_syntax->text()); $smarty->display("tiki_full.tpl"); } else { $smarty->display("tiki.tpl"); } }