[ 'wiki_syntax' => 'wikicontent', 'fgal_list_ocr_state' => 'alpha', ], 'staticKeyFiltersForArrays' => [ 'ocr_lang' => 'text', ] ], ]; $section = 'file_galleries'; require_once('tiki-setup.php'); $access->check_feature(['feature_file_galleries', 'feature_jquery_tooltips']); $filegallib = TikiLib::lib('filegal'); $statslib = TikiLib::lib('stats'); if ($prefs['feature_categories'] == 'y') { $categlib = TikiLib::lib('categ'); } $templateslib = TikiLib::lib('template'); if ($prefs['feature_groupalert'] == 'y') { $groupalertlib = TikiLib::lib('groupalert'); } $auto_query_args = [ 'galleryId', 'offset', 'find', 'find_creator', 'find_categId', 'sort_mode', 'edit_mode', 'page', 'filegals_manager', 'insertion_syntax', 'maxRecords', 'show_fgalexplorer', 'dup_mode', 'show_details', 'view', ]; if (! empty($_REQUEST['find_other'])) { $info = $filegallib->get_file_info($_REQUEST['find_other']); if (! empty($info)) { $galleryId = $info['galleryId']; $smarty->assign('find_other_val', $_REQUEST['find_other']); } } if (isset($_REQUEST['galleryId']) && ! isset($galleryId)) { $galleryId = $_REQUEST['galleryId']; } if (empty($galleryId) && isset($_REQUEST['parentId'])) { // check perms on parent gallery $parent_gal_info = $filegallib->get_file_gallery($_REQUEST['parentId']); $tikilib->get_perm_object('', 'file gallery', $parent_gal_info); $galleryId = 0; // Initialize listing fields with default values (used for the main gallery listing) $gal_info = $filegallib->get_file_gallery(); $gal_info['usedSize'] = 0; $gal_info['maxQuota'] = $filegallib->getQuota($_REQUEST['parentId'], true); if ( $prefs['feature_use_fgal_for_user_files'] === 'y' && $parent_gal_info['type'] === 'user' && $parent_gal_info['user'] === $user && $tiki_p_userfiles === 'y' ) { $gal_info['type'] = 'user'; $gal_info['user'] = $user; } $old_gal_info = []; } else { if (! isset($_REQUEST['galleryId'])) { $galleryId = $prefs['fgal_root_id']; } if ($gal_info = $filegallib->get_file_gallery($galleryId)) { $tikilib->get_perm_object($galleryId, 'file gallery', $gal_info); if ($userlib->object_has_one_permission($galleryId, 'file gallery')) { $smarty->assign('individual', 'y'); } $podCastGallery = $filegallib->isPodCastGallery($galleryId, $gal_info); } else { Feedback::errorPage(tr('Non-existent gallery')); } if ($prefs['fgal_quota_per_fgal'] === 'y') { $gal_info['usedSize'] = $filegallib->getUsedSize($galleryId); $gal_info['maxQuota'] = $filegallib->getQuota($gal_info['parentId']); $gal_info['minQuota'] = $filegallib->getMaxQuotaDescendants($galleryId); } else { $gal_info['usedSize'] = 0; $gal_info['maxQuota'] = 0; $gal_info['minQuota'] = 0; } if ($galleryId == $prefs['fgal_root_user_id'] && $tiki_p_admin_file_galleries !== 'y') { include_once('tiki-sefurl.php'); header( 'Location: ' . filter_out_sefurl( 'tiki-list_file_gallery.php?galleryId=' . $filegallib->get_user_file_gallery() ) ); } } if (($galleryId != 0 || $tiki_p_list_file_galleries != 'y') && ($galleryId == 0 || $tiki_p_view_file_gallery != 'y')) { Feedback::errorPage(['mes' => tr('You do not have permission to view this section'), 'errortype' => 401]); } if ( $prefs['feature_use_fgal_for_user_files'] === 'y' && $gal_info['type'] === 'user' && $gal_info['visible'] !== 'y' && $gal_info['user'] !== $user && $tiki_p_admin_file_galleries !== 'y' ) { Feedback::errorPage(['mes' => tr('You do not have permission to view this gallery'), 'errortype' => 401]); } // Init smarty variables to blank values $smarty->assign('fname', ''); $smarty->assign('fdescription', ''); $smarty->assign('max_desc', 1024); $smarty->assign('maxRows', $maxRecords); $smarty->assign('edited', 'n'); $smarty->assign('edit_mode', 'n'); $smarty->assign('dup_mode', 'n'); $smarty->assign( 'parentId', isset($_REQUEST['parentId']) ? (int)$_REQUEST['parentId'] : (isset($gal_info['parentId']) ? $gal_info['parentId'] : -1) ); $smarty->assign('creator', $user); $smarty->assign('sortorder', 'name'); $smarty->assign('sortdirection', 'asc'); if ($galleryId === "1") { $traname = tra($gal_info['name']); $smarty->assign_by_ref('name', $traname); //get_strings tra('File Galleries') } else { $smarty->assign_by_ref('name', $gal_info['name']); } $smarty->assign_by_ref('galleryId', $galleryId); // for elFinder so far $smarty->assign('volumeId', $filegallib->getGallerySpecialRoot($galleryId)); $smarty->assign('reindex_file_id', -1); if (isset($_REQUEST['view'])) { $view = $_REQUEST['view']; } else { if (isset($_REQUEST['fileId'])) { $view = 'page'; } else { $view = $gal_info['default_view']; } } // Execute batch actions if (isset($_REQUEST['movesel']) && $access->checkCsrf()) { $access->check_permission_either(['admin_file_galleries', 'remove_files']); $movegalInfo = $filegallib->get_file_gallery_info($_REQUEST['moveto']); $movegalPerms = $tikilib->get_perm_object($_REQUEST['moveto'], 'file gallery', $movegalInfo, false); if ($movegalPerms['tiki_p_upload_files'] === 'y') { if (isset($_REQUEST['file'])) { $failedFiles = $totalFiles = count($_REQUEST['file']); foreach (array_values($_REQUEST['file']) as $file) { $result = $filegallib->set_file_gallery($file, $_REQUEST['moveto']); if ($result && $result->numRows()) { $failedFiles--; } } } } if ($tiki_p_admin_file_galleries == 'y' || $movegalPerms['tiki_p_admin_file_galleries'] === 'y') { if (isset($_REQUEST['subgal'])) { $failedGals = $totalGals = count($_REQUEST['subgal']); foreach (array_values($_REQUEST['subgal']) as $subgal) { $result2 = $filegallib->move_file_gallery($subgal, $_REQUEST['moveto']); if ($result2 && $result2->numRows()) { $failedGals--; } } } } $totalRequested = $totalFiles + $totalGals; $totalFails = $failedFiles + $failedGals; if (! $totalFails) { Feedback::success($totalRequested === 1 ? tr('One item moved') : tr('%0 items moved', $totalRequested)); } else { $totalMoved = $totalRequested - $totalFails; if (! $totalMoved) { Feedback::error(tr('No items moved')); } else { if ($totalMoved === 1) { $msg = $totalFails === 1 ? tr('One item moved and one item failed to move') : tr('One item moved and %0 items failed to move', $totalFails); } else { $msg = $totalFails === 1 ? tr('%0 items moved and one item failed to move', $totalMoved) : tr('%0 items moved and %0 items failed to move', $totalMoved, $totalFails); } Feedback::error($msg); } } } if (isset($_REQUEST['fgal_actions'])) { if ($_REQUEST['fgal_actions'] === 'delsel_x') { $access->check_permission_either(['admin_file_galleries', 'remove_files']); if (isset($_REQUEST['file']) && $access->checkCsrf(true)) { $failedFiles = $totalFiles = count($_REQUEST['file']); foreach (array_values($_REQUEST['file']) as $file) { if ($info = $filegallib->get_file_info($file)) { $result = $filegallib->remove_file($info, $gal_info); if ($result && $result->numRows()) { $failedFiles--; } } } } if ( isset($_REQUEST['subgal']) && $tiki_p_admin_file_galleries == 'y' && $access->checkCsrf(true) ) { $failedGals = $totalGals = count($_REQUEST['subgal']); foreach (array_values($_REQUEST['subgal']) as $subgal) { $subgalInfo = $filegallib->get_file_gallery_info($subgal); $subgalPerms = $tikilib->get_perm_object($subgal, 'file gallery', $subgalInfo, false); if ($subgalPerms['tiki_p_admin_file_galleries'] === 'y') { $result = $filegallib->remove_file_gallery($subgal, $galleryId); if ($result && $result->numRows()) { $failedGals--; } } } } $totalRequested = $totalFiles + $totalGals; $totalFails = $failedFiles + $failedGals; if (! $totalFails) { Feedback::success($totalRequested === 1 ? tr('One item deleted') : tr('%0 items deleted', $totalRequested)); } else { $totalDeleted = $totalRequested - $totalFails; if (! $totalDeleted) { Feedback::error(tr('No items deleted')); } else { if ($totalDeleted === 1) { $msg = $totalFails === 1 ? tr('One item deleted and one item failed to delete') : tr('One item deleted and %0 items failed to delete', $totalFails); } else { $msg = $totalFails === 1 ? tr('%0 items deleted and one item failed to delete', $totalDeleted) : tr('%0 items moved and %0 items failed to delete', $totalDeleted, $totalFails); } Feedback::error($msg); } } } if ($_REQUEST['fgal_actions'] === 'defaultsel_x' && $access->checkCsrf(true)) { $access->check_permission('admin_file_galleries'); $galCount = 0; if (! empty($_REQUEST['subgal'])) { $result = $filegallib->setDefault(array_values($_REQUEST['subgal'])); $galCount = count($_REQUEST['subgal']); } else { if (! empty($galleryId)) { $result = $filegallib->setDefault([(int)$galleryId]); $galCount = 1; } } $totalChanged = $result && $result->numRows() ? $result->numRows() : 0; $failed = $galCount - $totalChanged; if (! $failed) { Feedback::success($totalChanged === 1 ? tr('List view settings reset for one gallery') : tr('List view settings reset for %0 galleries', $totalChanged)); } else { if ($failed === $galCount) { $msg = $failed === 1 ? tr('List view settings not changed for the selected gallery') : tr('List view settings not changed for the %0 selected galleries', $failed); } else { $msg = $failed === 1 ? tr( 'List view settings reset for %0 galleries and not changed for one gallery', $totalChanged ) : tr( 'List view settings reset for %0 galleries and not changed for %0 galleries', $totalChanged, $failed ); } Feedback::error($msg); } $view = null; } if ($_REQUEST['fgal_actions'] === 'refresh_metadata_x' && $access->checkCsrf()) { $access->check_permission('admin_file_galleries'); $failedFiles = $totalFiles = count($_REQUEST['file']); if (! $totalFiles) { Feedback::error(tr('No files selected')); } else { foreach (array_values($_REQUEST['file']) as $file) { $result = $filegallib->metadataAction($file, 'refresh'); if ($result && $result->numRows()) { $failedFiles--; } } if (! $failedFiles) { Feedback::success($totalFiles === 1 ? tr('Metadata refreshed for one file') : tr('Metadata refreshed for %0 files', $totalFiles)); } else { $totalRefreshed = $totalFiles - $failedFiles; if (! $totalRefreshed) { Feedback::error(tr('Metadata not refreshed')); } else { if ($totalRefreshed === 1) { $msg = $failedFiles === 1 ? tr('Metadata refreshed for one file and not refreshed for one file') : tr('Metadata refreshed for one file and not refreshed for %0 files', $failedFiles); } else { $msg = $failedFiles === 1 ? tr( 'Metadata refreshed for %0 files and not refreshed for one file', $totalRefreshed ) : tr( 'Metadata refreshed for %0 files and not refreshed for %0 files', $totalRefreshed, $failedFiles ); } Feedback::error($msg); } } } } if ($_REQUEST['fgal_actions'] === 'zipsel_x') { $access->check_permission('upload_files'); $href = []; if (isset($_REQUEST['file'])) { foreach (array_values($_REQUEST['file']) as $file) { $href[] = "fileId[]=$file"; } } if (isset($_REQUEST['subgal'])) { foreach (array_values($_REQUEST['subgal']) as $subgal) { $href[] = "galId[]=$subgal"; } } header("Location: tiki-download_file.php?" . implode('&', $href)); die; } if ($_REQUEST['fgal_actions'] === 'permsel_x') { $access->check_permission('assign_perm_file_gallery'); $perms = $userlib->get_permissions(0, -1, 'permName_asc', '', 'file galleries'); $smarty->assign_by_ref('perms', $perms['data']); $groups = $userlib->get_groups(0, -1, 'groupName_asc', '', '', 'n'); $smarty->assign_by_ref('groups', $groups['data']); } } if (isset($_REQUEST['permsel']) && isset($_REQUEST['subgal']) && $access->checkCsrf()) { $access->check_permission('assign_perm_file_gallery'); $fails = []; foreach ($_REQUEST['subgal'] as $id) { foreach ($_REQUEST['perms'] as $perm) { if (empty($_REQUEST['groups']) && empty($perm)) { $result = $userlib->assign_object_permission('', $id, 'file gallery', ''); if ($result !== true) { $fails[] = $id; } continue; } foreach ($_REQUEST['groups'] as $group) { $result = $userlib->assign_object_permission($group, $id, 'file gallery', $perm); if ($result !== true) { $fails[] = $id; } } } } if (count($fails)) { Feedback::error('There was an error in assigning permissions'); } else { Feedback::success('Permissions assigned'); } } // Lock a file if (isset($_REQUEST['lock']) && isset($_REQUEST['fileId']) && $_REQUEST['fileId'] > 0) { if (! $fileInfo = $filegallib->get_file_info($_REQUEST['fileId'])) { $error_msg = tr('Incorrect file ID'); } else { $error_msg = ''; if ($_REQUEST['lock'] == 'n' && ! empty($fileInfo['lockedby'])) { if ($fileInfo['lockedby'] != $user && $tiki_p_admin_file_galleries != 'y') { $error_msg = sprintf(tr('The file is already locked by %s'), $fileInfo['lockedby']); } else { if ( $fileInfo['lockedby'] != $user && $access->checkCsrf(true) ) { $filegallib->unlock_file($_REQUEST['fileId']); } elseif ($access->checkCsrf()) { $result = $filegallib->unlock_file($_REQUEST['fileId']); if ($result && $result->numRows()) { Feedback::success(tr('File unlocked')); } else { Feedback::error(tr('File not unlocked')); } } } } elseif ($_REQUEST['lock'] == 'y') { if (! empty($fileInfo['lockedby']) && $fileInfo['lockedby'] != $user) { $error_msg = sprintf(tr('The file is already locked by %s'), $fileInfo['lockedby']); } elseif ($gal_info['lockable'] != 'y') { $smarty->assign('errortype', 401); $error_msg = tr('Files in this gallery are not lockable'); } elseif ($access->checkCsrf()) { $result = $filegallib->lock_file($_REQUEST['fileId'], $user); if ($result && $result->numRows()) { Feedback::success(tr('File locked')); } else { Feedback::error(tr('File not locked')); } } } if ($error_msg != '') { Feedback::error($error_msg); } } } // Validate a draft if (! empty($_REQUEST['validate']) && $prefs['feature_file_galleries_save_draft'] == 'y') { // To validate a draft the user must be the owner or the file or the gallery or admin if ($tiki_p_admin_file_galleries != 'y' && (! $user || $user != $gal_info['user'])) { if ($user != $info['user']) { Feedback::error(tr('You don\'t have permission to validate files from this gallery')); } } elseif (! $info = $filegallib->get_file_info($_REQUEST['validate'])) { Feedback::error(tr('Error retrieving file')); } elseif ($access->checkCsrf(true)) { $result = $filegallib->validate_draft($info['fileId']); if ($result && $result->numRows()) { Feedback::success(tr('Draft validated')); } else { Feedback::error(tr('Validation failed')); } } } if (! empty($_REQUEST['remove']) && $access->checkCsrf(true)) { $result = $filegallib->actionHandler( 'removeFile', [ 'fileId' => $_REQUEST['remove'], 'draft' => (! empty($_REQUEST['draft'])), ] ); if ($result && $result->numRows()) { Feedback::success(tr('File deleted')); } else { Feedback::error(tr('File not deleted')); } } if ( isset($_REQUEST['action']) && $_REQUEST['action'] == 'refresh_metadata' //popup confirm used here because request may be GET && $access->checkCsrf(true) ) { $result = $filegallib->metadataAction($_REQUEST['fileId'], 'refresh'); if ($result && $result->numRows()) { Feedback::success(tr('Metadata refreshed')); } else { Feedback::error(tr('Metadata not refreshed')); } } $smarty->assign('url', $tikilib->httpPrefix() . parse_url($_SERVER['REQUEST_URI'])['path']); // Edit mode if (isset($_REQUEST['edit_mode']) and $_REQUEST['edit_mode']) { $smarty->assign('edit_mode', 'y'); $smarty->assign('edited', 'y'); if ($prefs['feature_categories'] == 'y') { $cat_type = 'file gallery'; $cat_objid = $galleryId; include_once('categorize_list.php'); } if ($prefs['feature_groupalert'] == 'y') { $smarty->assign('groupforAlert', isset($_REQUEST['groupforAlert']) ? $_REQUEST['groupforAlert'] : ''); $all_groups = $userlib->list_all_groups(); $groupselected = $groupalertlib->GetGroup('file gallery', $galleryId); if (is_array($all_groups)) { foreach ($all_groups as $g) { $groupforAlertList[$g] = ($g == $groupselected) ? 'selected' : ''; } } $smarty->assign_by_ref('groupforAlert', $groupselected); $showeachuser = $groupalertlib->GetShowEachUser('file gallery', $galleryId, $groupselected); $smarty->assign_by_ref('showeachuser', $showeachuser); $smarty->assign_by_ref('groupforAlertList', $groupforAlertList); } // ocr controls if (! empty($prefs['ocr_enable']) && $prefs['ocr_enable'] === 'y') { if (empty($prefs['ocr_limit_languages'])) { $ocr = TikiLib::lib('ocr'); $langs = $ocr->getTesseractLangs(); } else { $langs = $prefs['ocr_limit_languages']; } $selectedLangs = json_decode($gal_info['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)); } // Edit a file if (isset($_REQUEST['fileId']) && $_REQUEST['fileId'] > 0) { if ($tiki_p_edit_gallery_file != 'y') { Feedback::errorPage(['mes' => tr('Permission denied'), 'errortype' => 401]); } $info = $filegallib->get_file_info($_REQUEST['fileId']); $smarty->assign('fileId', $_REQUEST['fileId']); $smarty->assign_by_ref('filename', $info['filename']); $smarty->assign_by_ref('fname', $info['name']); $smarty->assign_by_ref('fdescription', $info['description']); } elseif ($galleryId > 0) { // Edit a gallery $smarty->assign_by_ref('maxRows', $gal_info['maxRows']); $smarty->assign_by_ref('parentId', $gal_info['parentId']); $smarty->assign_by_ref('creator', $gal_info['user']); $smarty->assign('max_desc', $gal_info['max_desc']); if (isset($gal_info['sort_mode']) && preg_match('/(.*)_(asc|desc)/', $gal_info['sort_mode'], $matches)) { $smarty->assign('sortorder', $matches[1]); $smarty->assign('sortdirection', $matches[2]); } else { $smarty->assign('sortorder', 'created'); $smarty->assign('sortdirection', 'desc'); } } elseif ($tiki_p_create_file_galleries != 'y') { Feedback::errorPage(['mes' => tr('Permission denied'), 'errortype' => 401]); } // Duplicate mode } elseif (! empty($_REQUEST['dup_mode'])) { $smarty->assign('dup_mode', 'y'); } // Process the insertion or modification request if (isset($_REQUEST['edit']) && $access->checkCsrf()) { // Saving information // Handle files if (isset($_REQUEST['fileId'])) { if ($tiki_p_admin_file_galleries != 'y') { // Check file upload rights if ($tiki_p_upload_files != 'y') { Feedback::errorPage(['mes' => tr('You need upload permission to edit files'), 'errortype' => 401]); } // Check THIS file edit rights if ($_REQUEST['fileId'] > 0) { $info = $filegallib->get_file_info($_REQUEST["fileId"]); if (! $user || $info['user'] != $user) { Feedback::errorPage(['mes' => tr('You do not have permission to edit this file'), 'errortype' => 401]); } } } } else { // Handle galleries if ($tiki_p_admin_file_galleries != 'y') { // Check gallery creation rights if ($tiki_p_create_file_galleries != 'y') { Feedback::errorPage(['mes' => tr('You need permission to create galleries to edit them'), 'errortype' => 401]); } // Check THIS gallery modification rights if ($galleryId > 0) { if (! $user || $gal_info['user'] != $user) { Feedback::errorPage(['mes' => tr('You do not have permission to edit this gallery'), 'errortype' => 401]); } } } } // Everything is ok so we proceed to edit the file or gallery $request_vars = [ 'name', 'fname', 'description', 'fdescription', 'max_desc', 'fgal_type', 'maxRows', 'rowImages', 'thumbSizeX', 'thumbSizeY', 'parentId', 'creator', 'quota', 'image_max_size_x', 'image_max_size_y', 'wiki_syntax', 'icon_fileId', 'ocr_langs', ]; $incorrectInputValues = []; foreach ($request_vars as $v) { if (isset($_REQUEST[$v])) { if ($v == 'name') { if (empty($_REQUEST[$v])){ $incorrectInputValues['incorrect_' . $v] = tr('Name field required'); }elseif (strlen($_REQUEST[$v]) > 80) { $incorrectInputValues['incorrect_' . $v] = tr('Name field cannot contain more than 80 characters'); } } $smarty->assign_by_ref($v, $_REQUEST[$v]); } } $request_toggles = ['visible', 'public', 'lockable']; foreach ($request_toggles as $t) { $$t = (isset($_REQUEST[$t]) && $_REQUEST[$t] == 'on') ? 'y' : 'n'; $smarty->assign($t, $$t); } $_REQUEST['archives'] = isset($_REQUEST['archives']) ? $_REQUEST['archives'] : 0; $_REQUEST['user'] = isset($_REQUEST['user']) ? $_REQUEST['user'] : (isset($gal_info['user']) ? $gal_info['user'] : $user); $_REQUEST['sortorder'] = isset($_REQUEST['sortorder']) ? $_REQUEST['sortorder'] : 'created'; $_REQUEST['sortdirection'] = isset($_REQUEST['sortdirection']) && $_REQUEST['sortdirection'] == 'asc' ? 'asc' : 'desc'; if (isset($_REQUEST['fileId'])) { $infoOverride = $filegallib->get_file_info($_REQUEST['fileId']); $_REQUEST['fname'] = (isset($_REQUEST['fname']) ? $_REQUEST['fname'] : $infoOverride['name']); $_REQUEST['fdescription'] = (isset($_REQUEST['fdescription']) ? $_REQUEST['fdescription'] : $infoOverride['description']); $info['data'] = (isset($_REQUEST['data']) ? $_REQUEST['data'] : $info['data']); $file = Tiki\FileGallery\File::id($_REQUEST['fileId']); $file->setParam('description', $_REQUEST['fdescription']); $fid = $file->replace($info['data'], $info['filetype'], $_REQUEST['fname'], $info['filename']); if ($fid) { Feedback::success(tr('File properties for %0 edited' . htmlspecialchars($_REQUEST['fname']))); } else { Feedback::error(tr('File properties for %0 not changed' . htmlspecialchars($_REQUEST['fname']))); } $smarty->assign('edit_mode', 'n'); } else { if ($prefs['fgal_quota_per_fgal'] != 'y') { $_REQUEST['quota'] = 0; } if ($test = $filegallib->checkQuotaSetting($_REQUEST['quota'], $galleryId, $_REQUEST['parentId'])) { Feedback::errorPage(($test > 0) ? tr('Quota too big') : tr('Quota too small')); } $old_gal_info = $filegallib->get_file_gallery_info($galleryId); // first validate length of OCR languages, then save if they conform. $ocrLangs = json_encode($_POST['ocr_lang']); if (strlen($ocrLangs) > 255) { Feedback::error(tr('You may not use that many OCR languages. Use fewer languages.')); $ocrLangs = $old_gal_info['ocr_lang']; } $gal_info = [ 'galleryId' => $galleryId, 'name' => $_REQUEST['name'], 'description' => $_REQUEST['description'], 'user' => $_REQUEST['user'], 'maxRows' => $_REQUEST['maxRows'], 'public' => $public, 'visible' => $visible, 'show_id' => $_REQUEST['fgal_list_id'], 'show_icon' => $_REQUEST['fgal_list_type'], 'show_name' => $_REQUEST['fgal_list_name'], 'show_size' => $_REQUEST['fgal_list_size'], 'show_description' => $_REQUEST['fgal_list_description'], 'show_created' => $_REQUEST['fgal_list_created'], 'show_hits' => $_REQUEST['fgal_list_hits'], 'show_lastDownload' => $_REQUEST['fgal_list_lastDownload'], 'max_desc' => $_REQUEST['max_desc'], 'type' => $_REQUEST['fgal_type'], 'parentId' => empty($_REQUEST['parentId']) ? $old_gal_info['parentId'] : $_REQUEST['parentId'], 'lockable' => $lockable, 'show_lockedby' => $_REQUEST['fgal_list_lockedby'], 'archives' => $_REQUEST['archives'], 'sort_mode' => $_REQUEST['sortorder'] . '_' . $_REQUEST['sortdirection'], 'show_modified' => $_REQUEST['fgal_list_lastModif'], 'show_creator' => $_REQUEST['fgal_list_creator'], 'show_deleteAfter' => $_REQUEST['fgal_list_deleteAfter'], 'show_checked' => $_REQUEST['fgal_show_checked'], 'show_share' => $_REQUEST['fgal_list_share'], 'show_author' => $_REQUEST['fgal_list_author'], 'subgal_conf' => $_REQUEST['subgal_conf'], 'show_last_user' => $_REQUEST['fgal_list_last_user'], 'show_comment' => $_REQUEST['fgal_list_comment'], 'show_files' => $_REQUEST['fgal_list_files'], 'show_explorer' => (isset($_REQUEST['fgal_show_explorer']) ? 'y' : 'n'), 'show_path' => (isset($_REQUEST['fgal_show_path']) ? 'y' : 'n'), 'show_slideshow' => (isset($_REQUEST['fgal_show_slideshow']) ? 'y' : 'n'), 'show_ocr_state' => $_POST['fgal_list_ocr_state'], 'default_view' => $_REQUEST['fgal_default_view'], 'quota' => $_REQUEST['quota'], 'image_max_size_x' => $_REQUEST['image_max_size_x'], 'image_max_size_y' => $_REQUEST['image_max_size_y'], 'backlinkPerms' => isset($_REQUEST['backlinkPerms']) ? 'y' : 'n', 'show_backlinks' => $_REQUEST['fgal_list_backlinks'], 'wiki_syntax' => $_REQUEST['wiki_syntax'], 'show_source' => $_REQUEST['fgal_list_source'], 'icon_fileId' => ! empty($_REQUEST['fgal_icon_fileId']) ? $_REQUEST['fgal_icon_fileId'] : null, 'ocr_lang' => $ocrLangs, ]; if ($prefs['feature_file_galleries_templates'] == 'y' && isset($_REQUEST['fgal_template']) && ! empty($_REQUEST['fgal_template'])) { // Override with template parameters $template = $templateslib->get_parsed_template($_REQUEST['fgal_template']); if ($template) { $gal_info = array_merge($gal_info, $template['content']); $gal_info['template'] = $_REQUEST['fgal_template']; } } if ($prefs['fgal_show_slideshow'] != 'y') { $gal_info['show_slideshow'] = $old_gal_info['show_slideshow']; } if ($prefs['fgal_show_explorer'] != 'y') { $gal_info['show_explorer'] = $old_gal_info['show_explorer']; } if ($prefs['fgal_show_path'] != 'y') { $gal_info['show_path'] = $old_gal_info['show_path']; } if ($prefs['fgal_checked'] != 'y') { $gal_info['show_checked'] = $old_gal_info['show_checked']; } $fgal_diff = array_diff_assoc($gal_info, $old_gal_info); unset($fgal_diff['created']); unset($fgal_diff['lastModif']); unset($fgal_diff['votes']); unset($fgal_diff['points']); unset($fgal_diff['hits']); $smarty->assign('fgal_diff', $fgal_diff); // If there are no incorrect values, we create or modify the file gallery if (! $incorrectInputValues) { $fgid = $filegallib->replace_file_gallery($gal_info); if ($fgid) { Feedback::success(tr('Gallery %0 created or modified', htmlspecialchars($_REQUEST['name']))); } else { Feedback::error(tr('Gallery %0 not created or modified', htmlspecialchars($_REQUEST['name']))); } } else { $smarty->assign_by_ref('incorrectInputValues', $incorrectInputValues); } if ($prefs['feature_groupalert'] == 'y') { $groupalertlib->AddGroup('file gallery', $galleryId, $_REQUEST['groupforAlert'], $_REQUEST['showeachuser']); } if ($prefs['feature_categories'] == 'y') { $cat_type = 'file gallery'; $cat_objid = $fgid; $cat_desc = substr($_REQUEST['description'], 0, $_REQUEST['max_desc']); $cat_name = $_REQUEST['name']; $cat_href = 'tiki-list_file_gallery.php?galleryId=' . $cat_objid; include_once('categorize.php'); } // If there are no incorrect values, we display the file gallery created or modified otherwise we return to the form if (! $incorrectInputValues) { if (isset($_REQUEST['viewitem'])) { header( 'Location: tiki-list_file_gallery.php?galleryId=' . $fgid . (! empty($_REQUEST['filegals_manager']) ? '&filegals_manager=' . $_REQUEST['filegals_manager'] : '') . (! empty($_REQUEST['insertion_syntax']) ? '&insertion_syntax=' . $_REQUEST['insertion_syntax'] : '') ); die; } } $smarty->assign('edit_mode', 'y'); } } // Process duplication of a gallery if (! empty($_REQUEST['duplicate']) && ! empty($_REQUEST['name']) && ! empty($galleryId) && $access->checkCsrf()) { if ($tiki_p_create_file_galleries != 'y' || $gal_info['type'] == 'user') { Feedback::errorPage(tr('You do not have permission to duplicate this gallery')); } $incorrectInputValues = []; if (strlen($_REQUEST['name']) > 80) { $incorrectInputValues['incorrect_name'] = tr('Name field cannot contain more than 80 characters'); } // If there are no incorrect values, we duplicate the gallery if (empty($incorrectInputValues)) { $newGalleryId = $filegallib->duplicate_file_gallery( $galleryId, $_REQUEST['name'], isset($_REQUEST['description']) ? $_REQUEST['description'] : '' ); if (isset($_REQUEST['dupCateg']) && $_REQUEST['dupCateg'] == 'on' && $prefs['feature_categories'] == 'y') { $categlib = TikiLib::lib('categ'); $cats = $categlib->get_object_categories('file gallery', $galleryId); $catObjectId = $categlib->add_categorized_object( 'file gallery', $newGalleryId, (isset($_REQUEST['description']) ? $_REQUEST['description'] : ''), $_REQUEST['name'], 'tiki-list_file_gallery.php?galleryId=' . $newGalleryId ); foreach ($cats as $cat) { $categlib->categorize($catObjectId, $cat); } } if (isset($_REQUEST['dupPerms']) && $_REQUEST['dupPerms'] == 'on') { $userlib->copy_object_permissions($galleryId, $newGalleryId, 'file gallery'); } if ($newGalleryId) { Feedback::success(tr('Gallery duplicated')); header('Location: tiki-list_file_gallery.php?galleryId=' . $newGalleryId); die; } else { Feedback::error(tr('Gallery not duplicated')); } }else{ // avoid losing form data $smarty->assign('dupName', $_REQUEST['name']); $smarty->assign('description', $_REQUEST['description']); $smarty->assign('dupPerms', isset($_REQUEST['dupPerms']) && $_REQUEST['dupPerms'] == 'on' ? 'checked' : ''); $smarty->assign('dupCateg', isset($_REQUEST['dupCateg']) && $_REQUEST['dupCateg'] == 'on' ? 'checked' : ''); // return to the duplication page $smarty->assign_by_ref('incorrectInputValues', $incorrectInputValues); $smarty->assign('dup_mode', 'y'); } } // Process removal of a gallery if (! empty($_REQUEST['removegal']) && $access->checkCsrf(true)) { if (! ($gal_info = $filegallib->get_file_gallery_info($_REQUEST['removegal']))) { Feedback::errorPage(tr('Incorrect gallery ID')); } $mygal_to_delete = ! empty($user) && $gal_info['type'] === 'user' && $gal_info['user'] !== $user && $tiki_p_userfiles === 'y' && $gal_info['parentId'] !== $prefs['fgal_root_user_id']; if ($tiki_p_admin_file_galleries != 'y' && ! $mygal_to_delete) { Feedback::errorPage(['mes' => tr('You do not have permission to remove this gallery'), 'errortype' => 401]); } $result = $filegallib->remove_file_gallery($_REQUEST['removegal'], $_REQUEST['removegal']); if ($result && $result->numRows()) { Feedback::success(tr('Gallery %0 deleted', $gal_info['name'])); } else { Feedback::error(tr('Gallery %0 not deleted', $gal_info['name'])); } } // Update a file comment if ( isset($_REQUEST['comment']) && $_REQUEST['comment'] != '' && isset($_REQUEST['fileId']) && $_REQUEST['fileId'] > 0 && $access->checkCsrf() ) { $msg = ''; if (! $fileInfo = $filegallib->get_file_info($_REQUEST['fileId'])) { $msg = tra('Incorrect param'); } elseif ($galleryId != $fileInfo['galleryId']) { $msg = tra('Could not find the file requested'); } elseif ((! empty($fileInfo['lockedby']) && $fileInfo['lockedby'] != $user && $tiki_p_admin_file_galleries != 'y') || $tiki_p_edit_gallery_file != 'y') { $msg = tra('You do not have permission to do that'); } else { $result = $filegallib->update_file($fileInfo['fileId'], [ 'name' => $fileInfo['name'], 'description' => $fileInfo['description'], 'lastModifUser' => $user, 'comment' => $_REQUEST['comment'] ]); if ($result && $result->numRows()) { Feedback::success(tr('File %0 updated', $fileInfo['name'])); } else { Feedback::error(tr('File %0 not updated', $fileInfo['name'])); } } if ($msg != '') { Feedback::error($msg); } } // Set display config if (! isset($_REQUEST['maxRecords']) || $_REQUEST['maxRecords'] <= 0) { if ($view == 'page' && empty($_REQUEST['fileId'])) { $_REQUEST['maxRecords'] = 1; } elseif (isset($gal_info['maxRows']) && $gal_info['maxRows'] > 0) { $_REQUEST['maxRecords'] = $gal_info['maxRows']; } else { $_REQUEST['maxRecords'] = $prefs['maxRecords']; } } $smarty->assign_by_ref('maxRecords', $_REQUEST['maxRecords']); if (! isset($_REQUEST['offset'])) { $_REQUEST['offset'] = 0; } $smarty->assign_by_ref('offset', $_REQUEST['offset']); if (empty($_REQUEST['sort_mode'])) { if ($gal_info['sort_mode'] == 'name_asc' && $gal_info['show_name'] == 'f') { $_REQUEST['sort_mode'] = 'filename_asc'; } else { $_REQUEST['sort_mode'] = $gal_info['sort_mode']; } } $smarty->assign_by_ref('sort_mode', $_REQUEST['sort_mode']); $find = []; if (! isset($_REQUEST['find_creator'])) { $smarty->assign('find_creator', ''); } else { $find['creator'] = $_REQUEST['find_creator']; $smarty->assign('find_creator', $_REQUEST['find_creator']); } if (! empty($_REQUEST['find_lastModif']) && ! empty($_REQUEST['find_lastModif_unit'])) { $find['lastModif'] = $tikilib->now - ($_REQUEST['find_lastModif'] * $_REQUEST['find_lastModif_unit']); } if (! empty($_REQUEST['find_lastDownload']) && ! empty($_REQUEST['find_lastDownload_unit'])) { $find['lastDownload'] = $tikilib->now - ($_REQUEST['find_lastDownload'] * $_REQUEST['find_lastDownload_unit']); } if (! empty($_REQUEST['find_fileType']) && ! empty($_REQUEST['find_fileType'])) { include_once('lib/mime/mimetypes.php'); global $mimetypes; $find['fileType'] = $mimetypes[$_REQUEST['find_fileType']]; } if (! isset($_REQUEST['find'])) { $_REQUEST['find'] = ''; } $smarty->assign_by_ref('find', $_REQUEST['find']); if (isset($_REQUEST['fileId'])) { if (! is_numeric($_REQUEST['fileId'])) { Feedback::error(tr('Invalid %0 parameter', 'fileId')); } else { $fileId = (int)$_REQUEST['fileId']; $smarty->assign('fileId', $fileId); } } if ($prefs['feature_categories'] == 'y') { if (! empty($_REQUEST['cat_categories'])) { if (count($_REQUEST['cat_categories']) > 1) { unset($_REQUEST['categId']); } else { $_REQUEST['categId'] = $_REQUEST['cat_categories'][0]; } } else { $_REQUEST['cat_categories'] = []; } $selectedCategories = $_REQUEST['cat_categories']; $find['categId'] = $_REQUEST['cat_categories']; $smarty->assign('findSelectedCategoriesNumber', count($_REQUEST['cat_categories'])); if (! empty($_REQUEST['categId'])) { $find['categId'] = $_REQUEST['categId']; $selectedCategories = [(int)$find['categId']]; $smarty->assign('find_categId', $find['categId']); } else { $smarty->assign('find_categId', ''); } // load categories for find if ($prefs['feature_categories'] == 'y' && ! isset($_REQUEST['edit_mode'])) { $categlib = TikiLib::lib('categ'); $categories = $categlib->getCategories(); $smarty->assign_by_ref('categories', $categories); $smarty->assign('cat_tree', $categlib->generate_cat_tree($categories, true, $selectedCategories)); } } if (! empty($_REQUEST['find_orphans']) && ($_REQUEST['find_orphans'] == 'on' || $_REQUEST['find_orphans'] == 'y')) { $find['orphan'] = 'y'; $smarty->assign('find_orphans', 'y'); } if (! empty($_REQUEST['find_sub']) && ($_REQUEST['find_sub'] == 'on' || $_REQUEST['find_sub'] == 'y')) { $find_sub = true; $smarty->assign('find_sub', 'y'); } else { $find_sub = false; } if (isset($_GET['slideshow'])) { $_REQUEST['maxRecords'] = $maxRecords = -1; $offset = 0; $files = $filegallib->get_files( 0, -1, $_REQUEST['sort_mode'], $_REQUEST['find'], $galleryId, false, false, false, true, false, false, false, true, '', false, false, false, $find ); $smarty->assign('cant', $files['cant']); $smarty->assign_by_ref('files', $files['data']); $smarty->assign('show_find', 'n'); $smarty->assign('direct_pagination', 'y'); if (isset($_REQUEST['slideshow_noclose'])) { $smarty->assign('slideshow_noclose', 'y'); } if (isset($_REQUEST['caption'])) { $smarty->assign('caption', $_REQUEST['caption']); } if (isset($_REQUEST['windowtitle'])) { $smarty->assign('sswindowtitle', $_REQUEST['windowtitle']); } $smarty->display('file_gallery_slideshow.tpl'); die(); } else { if (! isset($_REQUEST["edit_mode"]) && ! isset($_REQUEST["edit"])) { $recursive = $view == 'admin' || $find_sub; $with_subgals = ! (in_array($view, ['admin', 'page']) || $find_sub); if (! empty($_REQUEST['filegals_manager'])) { // get wiki syntax if needed $syntax = $filegallib->getWikiSyntax($galleryId); } else { $syntax = ''; } $with_archive = (isset($gal_info['archives']) && $gal_info['archives'] == '-1') ? false : true; if ($view == 'page' && isset($_REQUEST['fileId'])) { try { $file = $filegallib->get_file_additional($fileId); $gal_info = $filegallib->get_file_gallery($file['parentId']); $gal_info['show_parentId'] = 'y'; } catch (Exception $e) { Feedback::errorPage(['mes' => tr('File %0 not found', $fileId), 'errortype' => 404]); } $smarty->assign('cant', 1); if ($prefs['ocr_enable'] === 'y') { $info = $filegallib->get_file_info($fileId); if ($info['ocr_state'] === '1') { $smarty->assign('ocrdata', $info['ocr_data'] ? $info['ocr_data'] : tr('OCR produced no results.')); } $ocrLangs = TikiLib::lib('ocr')->listFileLanguages($fileId); $ocrLangs = Tikilib::lib('language')->findLanguageNames($ocrLangs, 'translated'); $ocrLangs = implode(', ', $ocrLangs); $smarty->assign('ocrlangs', $ocrLangs); } } else { // Get list of files in the gallery $files = $filegallib->get_files( $_REQUEST['offset'], $_REQUEST['maxRecords'], $_REQUEST['sort_mode'], $_REQUEST['find'], $galleryId, $with_archive, $with_subgals, ($view === 'list' && $gal_info['show_size'] !== 'n'), true, false, false, ($view === 'list' && $gal_info['show_files'] !== 'n'), $recursive, '', true, false, ($gal_info['show_backlinks'] != 'n'), $find, $syntax ); $smarty->assign('cant', $files['cant']); if ($view == 'page') { $file = $files['data'][0]; } } if ($view == 'page') { $smarty->assign('maxWidth', isset($_REQUEST['maxWidth']) ? $_REQUEST['maxWidth'] : '300px'); //need to convert fileId to an offset to bring up a specific file for page view $smarty->assign('maxRecords', 1); $smarty->assign( 'metarray', isset($file['metadata']) ? json_decode($file['metadata'], true) : null ); $smarty->assign_by_ref('file', $file); } else { $smarty->assign_by_ref('files', $files['data']); $subs = 0; if ($with_subgals) { foreach ($files['data'] as $f) { $subs = $subs + $f['isgal']; } } $smarty->assign('filescount', $files['cant'] - $subs); } } //for page view to get offset in pagination right since subgalleries are not included $subgals = $filegallib->getSubGalleries($galleryId); $smarty->assign('subcount', count($subgals) - 1); $smarty->assign('mid', 'tiki-list_file_gallery.tpl'); } // Browse view $smarty->assign('thumbnail_size', $prefs['fgal_thumb_max_size']); if (isset($_REQUEST['show_details'])) { $show_details = $_REQUEST['show_details'] === 'y' ? 'y' : 'n'; setCookieSection('show_details', $show_details); } else { $show_details = getCookie('show_details', null, 'n'); } $smarty->assign('show_details', $show_details); $options_sortorder = [ tra('Creation Date') => 'created' , tra('Name') => 'name' , tra('Last modification date') => 'lastModif' , tra('Hits') => 'hits' , tra('Owner') => 'user' , tra('Description') => 'description' , tra('ID') => 'id', ]; $smarty->assign_by_ref('options_sortorder', $options_sortorder); // Set section config include_once('tiki-section_options.php'); // Theme control if ($prefs['feature_theme_control'] == 'y') { $cat_type = 'file gallery'; $cat_objid = $galleryId; include('tiki-tc.php'); } // Watches if ($prefs['feature_user_watches'] == 'y') { if (! isset($_REQUEST['fileId'])) { if ($user && isset($_REQUEST['watch_event'])) { if ($_REQUEST['watch_action'] == 'add' && $access->checkCsrf()) { $result = $tikilib->add_user_watch( $user, $_REQUEST['watch_event'], $_REQUEST['watch_object'], 'File Gallery', (isset($_REQUEST['galleryName']) ? $_REQUEST['galleryName'] : ''), "tiki-list_file_gallery.php?galleryId=$galleryId" ); if ($result) { Feedback::success(tr('User watch added')); } else { Feedback::error(tr('User watch not added')); } } elseif ($_REQUEST['watch_action'] == 'remove' && $access->checkCsrf()) { $result = $tikilib->remove_user_watch($user, $_REQUEST['watch_event'], $_REQUEST['watch_object'], 'File Gallery'); if ($result && $result->numRows()) { Feedback::success(tr('User watch removed')); } else { Feedback::error(tr('User watch not removed')); } } } $smarty->assign('user_watching_file_gallery', 'n'); if ($user && $tikilib->user_watches($user, 'file_gallery_changed', $galleryId, 'File Gallery')) { $smarty->assign('user_watching_file_gallery', 'y'); } // Check, if the user is watching this file gallery by a category. if ($prefs['feature_categories'] == 'y') { $watching_categories_temp = $categlib->get_watching_categories($galleryId, 'file gallery', $user); $smarty->assign('category_watched', 'n'); if (count($watching_categories_temp) > 0) { $smarty->assign('category_watched', 'y'); $watching_categories = []; foreach ($watching_categories_temp as $wct) { $watching_categories[] = ['categId' => $wct, 'name' => $categlib->get_category_name($wct)]; } $smarty->assign('watching_categories', $watching_categories); } } } } if ($prefs['feature_file_galleries_templates'] == 'y') { $all_templates = $templateslib->list_templates('file_galleries', 0, -1, 'name_asc', ''); $templates = []; foreach ($all_templates['data'] as $template) { $templates[] = ['label' => $template['name'], 'id' => $template['templateId']]; } sort($templates); $smarty->assign_by_ref('all_templates', $templates); } $subGalleries = $filegallib->getSubGalleries( (isset($_REQUEST['parentId']) && $galleryId == 0) ? $_REQUEST['parentId'] : $galleryId ); $smarty->assign('treeRootId', $subGalleries['parentId']); if ( $prefs['fgal_show_explorer'] == 'y' || $prefs['fgal_show_path'] == 'y' || $_REQUEST['fgal_actions'] === 'movesel_x' || isset($_REQUEST["edit_mode"]) || isset($_REQUEST['dup_mode']) ) { $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 ($prefs['fgal_show_path'] == 'y') { $path = $filegallib->getPath($galleryId); $smarty->assign('gallery_path', $path['HTML']); } $smarty->assign('tree', $filegallib->getTreeHTML($galleryId)); if (! empty($_REQUEST['fgal_actions']) && $_REQUEST['fgal_actions'] === 'movesel_x') { $smarty->assign('movesel_x', 'y'); } } if (isset($files['data']) and in_array($view, ['browse', 'page'])) { foreach ($files['data'] as $file) { $_SESSION['allowed'][$file['fileId']] = true; } } if ($galleryId == 0) { $smarty->assign( 'download_path', ((isset($podCastGallery) && $podCastGallery) ? $prefs['fgal_podcast_dir'] : $prefs['fgal_use_dir']) ); // Add a file hit $statslib->stats_hit($gal_info['name'], 'file gallery', $galleryId); if ($prefs['feature_actionlog'] == 'y') { $logslib->add_action('Viewed', $galleryId, 'file gallery'); } } else { if (! isset($_REQUEST['fileId'])) { // Add a gallery hit $filegallib->add_file_gallery_hit($galleryId); } } // Get listing display config include_once('fgal_listing_conf.php'); if (! isset($view)) { $view = $fgal_options['default_view']['value']; } $find_durations = []; if ($view == 'admin') { $find_durations[] = [ 'label' => tra('Not modified for') , 'prefix' => 'find_lastModif' , 'default' => empty($_REQUEST['find_lastModif']) ? '' : $_REQUEST['find_lastModif'] , 'default_unit' => empty($_REQUEST['find_lastModif_unit']) ? 'week' : $_REQUEST['find_lastModif_unit'], ]; $find_durations[] = [ 'label' => tra('Not downloaded for') , 'prefix' => 'find_lastDownload' , 'default' => empty($_REQUEST['find_lastDownload']) ? '' : $_REQUEST['find_lastDownload'] , 'default_unit' => empty($_REQUEST['find_lastDownload_unit']) ? 'week' : $_REQUEST['find_lastDownload_unit'], ]; foreach ($fgal_listing_conf as $k => $v) { if ($k == 'type') { $show_k = 'icon'; } elseif ($k == 'lastModif') { $show_k = 'modified'; } else { $show_k = $k; } if (isset($prefs['fgal_list_' . $k . '_admin'])) { $gal_info['show_' . $show_k] = $prefs['fgal_list_' . $k . '_admin']; } } $smarty->assign('show_find_orphans', 'y'); } $smarty->assign_by_ref('find_durations', $find_durations); $smarty->assign_by_ref('gal_info', $gal_info); $smarty->assign('view', $view); // Display the template if (! empty($_REQUEST['filegals_manager'])) { $smarty->assign('filegals_manager', $_REQUEST['filegals_manager']); $smarty->assign('insertion_syntax', $_REQUEST['insertion_syntax']); $smarty->display('tiki_full.tpl'); } else { $smarty->display('tiki.tpl'); }