123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- <?php
- /* For licensing terms, see /license.txt */
- /**
- * This script allows to add cloud file links to the document structure.
- *
- * @package chamilo.document
- */
- require_once __DIR__.'/../inc/global.inc.php';
- $fileLinkEnabled = api_get_configuration_value('enable_add_file_link');
- if (!$fileLinkEnabled) {
- api_not_allowed(true);
- }
- api_protect_course_script();
- $courseInfo = api_get_course_info();
- if (empty($courseInfo)) {
- api_not_allowed(true);
- }
- $documentId = isset($_REQUEST['id']) ? (int) $_REQUEST['id'] : 0;
- $dir = '/';
- $document_data = DocumentManager::get_document_data_by_id($documentId, api_get_course_id(), true);
- if (empty($document_data)) {
- $document_id = $parent_id = 0;
- $path = '/';
- } else {
- if ($document_data['filetype'] == 'folder') {
- $document_id = $document_data['id'];
- $path = $document_data['path'].'/';
- $parent_id = DocumentManager::get_document_id(api_get_course_info(), dirname($path));
- }
- $dir = dirname($document_data['path']);
- }
- $is_certificate_mode = DocumentManager::is_certificate_mode($dir);
- if ($is_certificate_mode) {
- api_not_allowed(true);
- }
- $is_allowed_to_edit = api_is_allowed_to_edit(null, true);
- $groupIid = 0;
- if (api_get_group_id()) {
- // If the group id is set, check if the user has the right to be here
- // Get group info
- $group_properties = GroupManager::get_group_properties(api_get_group_id());
- if ($is_allowed_to_edit || GroupManager::is_user_in_group(api_get_user_id(), $group_properties)) {
- // Only courseadmin or group members allowed
- $groupIid = $group_properties['iid'];
- $interbreadcrumb[] = [
- 'url' => '../group/group_space.php?'.api_get_cidreq(),
- 'name' => get_lang('Group area'),
- ];
- } else {
- api_not_allowed(true);
- }
- } elseif ($is_allowed_to_edit || DocumentManager::is_my_shared_folder(api_get_user_id(), $path, api_get_session_id())) {
- // Admin for "regular" upload, no group documents. And check if is my shared folder
- } else { // No course admin and no group member...
- api_not_allowed(true);
- }
- // Group docs can only be uploaded in the group directory
- if ($groupIid != 0 && $path == '/') {
- $path = $group_properties['directory']."/";
- }
- // Breadcrumbs
- $interbreadcrumb[] = [
- 'url' => './document.php?id='.$document_id.'&'.api_get_cidreq(),
- 'name' => get_lang('Documents'),
- ];
- // Interbreadcrumb for the current directory root path
- if (empty($document_data['parents'])) {
- // Hack in order to not add the document to the breadcrumb in case it is a link
- if ($document_data['filetype'] != 'link') {
- $interbreadcrumb[] = ['url' => '#', 'name' => $document_data['title']];
- }
- } else {
- foreach ($document_data['parents'] as $document_sub_data) {
- // Hack in order to not add the document to the breadcrumb in case it is a link
- if ($document_data['filetype'] != 'link') {
- $interbreadcrumb[] = [
- 'url' => $document_sub_data['document_url'],
- 'name' => $document_sub_data['title'],
- ];
- }
- }
- }
- $this_section = SECTION_COURSES;
- $nameTools = get_lang('Add a link');
- $action = api_get_self().'?'.api_get_cidreq().'&id='.$document_id;
- // URLs in whitelist
- $urlWL = DocumentManager::getFileHostingWhiteList();
- sort($urlWL);
- $urlWLRegEx = '/(\/\/|\.)('.implode('|', $urlWL).')/i'; //Matches any of the whitelisted urls preceded by // or .
- $urlWLText = "\n\t* ".implode("\n\t* ", $urlWL);
- $urlWLHTML = "<ul><li>".implode("</li><li>", $urlWL)."</li></ul>";
- $form = new FormValidator('upload', 'POST', $action, '', ['enctype' => 'multipart/form-data']);
- $form->addHidden('linkid', $document_id);
- $form->addHidden('curdirpath', $path);
- $form->addElement('text', 'name', get_lang('Link name'), ['id' => 'name_link']);
- $form->addElement('text', 'url', get_lang('URL'), ['id' => 'url_link']);
- $form->addElement(
- 'static',
- 'info',
- '',
- '<span class="text-primary" data-toggle="tooltip" title="'.$urlWLHTML.'">'.get_lang(
- 'ValidDomainList'
- ).' <span class="glyphicon glyphicon-question-sign"></span></span>'
- );
- $form->addButtonSend(get_lang('Add link to Cloud file'), 'submitDocument');
- $form->addRule('name', get_lang('PleaseEnterCloudLink name'), 'required', null, 'client');
- $form->addRule('name', get_lang('PleaseEnterCloudLink name'), 'required', null, 'server');
- $form->addRule('url', get_lang('Please enter the URL'), 'required', null, 'client');
- $form->addRule('url', get_lang('Please enter the URL'), 'required', null, 'server');
- // Well formed url pattern (must have the protocol)
- $urlRegEx = DocumentManager::getWellFormedUrlRegex();
- $form->addRule('url', get_lang('URL field format invalid. Example of expected format: http://dropbox.com/sh/loremipsum/loremipsum?dl=0'), 'regex', $urlRegEx, 'client');
- $form->addRule('url', get_lang('URL field format invalid. Example of expected format: http://dropbox.com/sh/loremipsum/loremipsum?dl=0'), 'regex', $urlRegEx, 'server');
- $form->addRule('url', get_lang('The domain is not valid. It must be one of the following:').$urlWLText, 'regex', $urlWLRegEx, 'client');
- $form->addRule('url', get_lang('The domain is not valid. It must be one of the following:').$urlWLHTML, 'regex', $urlWLRegEx, 'server');
- if ($form->validate()) {
- if (isset($_REQUEST['linkid'])) {
- $doc_id = DocumentManager::addCloudLink($courseInfo, $path, $_REQUEST['url'], $_REQUEST['name']);
- if ($doc_id) {
- Display::addFlash(Display::return_message(get_lang('CloudAdd a linked'), 'success', false));
- } else {
- if (DocumentManager::cloudLinkExists($courseInfo, $path, $_REQUEST['url'])) {
- Display::addFlash(Display::return_message(get_lang('URLAlreadyExists'), 'warning', false));
- } else {
- Display::addFlash(Display::return_message(get_lang('ErrorAdd link to Cloud file'), 'warning', false));
- }
- }
- header('Location: document.php?'.api_get_cidreq());
- exit;
- }
- }
- // Display the header
- Display::display_header($nameTools, 'Doc');
- // Actions
- echo '<div class="actions">';
- // Link back to the documents overview
- echo '<a href="document.php?id='.$document_id.'&'.api_get_cidreq().'">'.
- Display::return_icon('back.png', get_lang('Back to').' '.get_lang('Documents overview'), '', ICON_SIZE_MEDIUM).
- '</a>';
- echo '</div>';
- // Form to select directory
- $folders = DocumentManager::get_all_document_folders(
- $_course,
- $groupIid,
- $is_allowed_to_edit
- );
- echo DocumentManager::build_directory_selector(
- $folders,
- $document_id,
- isset($group_properties['directory']) ? $group_properties['directory'] : []
- );
- // Add tooltip and correctly parse its inner HTML
- echo '<script>
- $(function() {
- $("[data-toggle=\'tooltip\']").tooltip({
- content:
- function() {
- return $(this).attr("title");
- }
- });
- });
- </script>';
- echo $form->returnForm();
- Display::display_footer();
|