diff --git a/main/inc/lib/database.constants.inc.php b/main/inc/lib/database.constants.inc.php index 1981fc4383..8f65fe2c8b 100644 --- a/main/inc/lib/database.constants.inc.php +++ b/main/inc/lib/database.constants.inc.php @@ -165,6 +165,8 @@ define('TABLE_TOOL_INTRO', 'tool_intro'); define('TABLE_SCORMDOC', 'scormdocument'); define('TABLE_STUDENT_PUBLICATION', 'student_publication'); define('TABLE_STUDENT_PUBLICATION_ASSIGNMENT', 'student_publication_assignment'); +define('TABLE_STUDENT_PUBLICATION_REL_DOCUMENT', 'student_publication_rel_document'); +define('TABLE_STUDENT_PUBLICATION_REL_USER', 'student_publication_rel_user'); // Course forum tables define('TABLE_FORUM_CATEGORY', 'forum_category'); diff --git a/main/work/add_document.php b/main/work/add_document.php new file mode 100644 index 0000000000..82fb82ee02 --- /dev/null +++ b/main/work/add_document.php @@ -0,0 +1,126 @@ + 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_all.php?'.api_get_cidreq().'&id='.$workId, 'name' => $my_folder_data['title']); +$interbreadcrumb[] = array('url' => '#', 'name' => get_lang('AddDocument')); + +$error_message = null; + +switch ($action) { + case 'delete': + if (!empty($workId) && !empty($docId)) { + deleteDocumentToWork($docId, $workId, api_get_course_int_id()); + $url = api_get_path(WEB_CODE_PATH).'work/add_document.php?id='.$workId; + header('Location: '.$url); + exit; + } + break; +} + +Display :: display_header(null); + +if (empty($docId)) { + echo Display::page_subheader(get_lang('DocumentsAdded')); + + $documents = getAllDocumentToWork($workId, api_get_course_int_id()); + if (!empty($documents)) { + echo '
'; + foreach ($documents as $doc) { + $documentId = $doc['document_id']; + $docData = DocumentManager::get_document_data_by_id($documentId, $courseInfo['code']); + $url = api_get_path(WEB_CODE_PATH).'work/add_document.php?action=delete&id='.$workId.'&document_id='.$documentId; + $link = Display::url(get_lang('Delete'), $url); + echo $docData['title'].' '.$link.'
'; + } + echo '
'; + } + + $document_tree = DocumentManager::get_document_preview($courseInfo, null, null, 0, false, '/', api_get_path(WEB_CODE_PATH).'work/add_document.php?id='.$workId); + echo Display::page_subheader(get_lang('DocumentToAdd')); + echo $document_tree; + echo '
'; + +} else { + + $documentInfo = DocumentManager::get_document_data_by_id($docId, $courseInfo['code']); + $form = new FormValidator('add_doc', 'post', api_get_path(WEB_CODE_PATH).'work/add_document.php?id='.$workId.'&document_id='.$docId); + $form->addElement('header', get_lang('AddDocument')); + $form->addElement('hidden', 'add_doc', '1'); + $form->addElement('hidden', 'id', $workId); + $form->addElement('hidden', 'document_id', $docId); + $form->addElement('label', get_lang('File'), $documentInfo['title']); + $form->addElement('style_submit_button', 'submit', get_lang('Add')); + $form->display(); + + if ($form->validate()) { + $values = $form->exportValues(); + $workId = $values['id']; + $docId = $values['document_id']; + $data = getDocumentToWork($docId, $workId, api_get_course_int_id()); + + if (empty($data)) { + addDocumentToWork($docId, $workId, api_get_course_int_id()); + Display::display_confirmation_message(get_lang('Added')); + } else { + Display::display_warning_message(get_lang('DocumentAlreadyAdded')); + } + } +} + +/* + * +CREATE TABLE IF NOT EXISTS c_student_publication_rel_document ( + id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, + work_id INT NOT NULL, + document_id INT NOT NULL, + c_id INT NOT NULL +); + +CREATE TABLE IF NOT EXISTS c_student_publication_rel_user ( + id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, + work_id INT NOT NULL, + user_id INT NOT NULL, + c_id INT NOT NULL +); + + + +*/ + + diff --git a/main/work/add_user.php b/main/work/add_user.php new file mode 100644 index 0000000000..dfcc43a5b4 --- /dev/null +++ b/main/work/add_user.php @@ -0,0 +1,96 @@ + 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_all.php?'.api_get_cidreq().'&id='.$workId, 'name' => $my_folder_data['title']); +$interbreadcrumb[] = array('url' => '#', 'name' => get_lang('AddUser')); + +$error_message = null; + +switch ($action) { + case 'add': + + addUserToWork($userId, $workId, api_get_course_int_id()); + $url = api_get_path(WEB_CODE_PATH).'work/add_user.php?id='.$workId; + header('Location: '.$url); + exit; + + break; + case 'delete': + if (!empty($workId) && !empty($userId)) { + deleteUserToWork($userId, $workId, api_get_course_int_id()); + $url = api_get_path(WEB_CODE_PATH).'work/add_user.php?id='.$workId; + header('Location: '.$url); + exit; + } + break; +} + +Display :: display_header(null); + +echo Display::page_subheader(get_lang('UsersAdded')); + +$items = getAllUserToWork($workId, api_get_course_int_id()); +if (!empty($items)) { + echo '
'; + foreach ($items as $data) { + $myUserId = $data['user_id']; + $userInfo = api_get_user_info($myUserId); + $url = api_get_path(WEB_CODE_PATH).'work/add_user.php?action=delete&id='.$workId.'&user_id='.$myUserId; + $link = Display::url(get_lang('Delete'), $url); + echo $userInfo['complete_name'].' '.$link.'
'; + } + echo '
'; +} + +$userList = CourseManager::get_user_list_from_course_code($courseInfo['code'], api_get_session_id(), null, null, STUDENT); + +echo Display::page_subheader(get_lang('UserToAdd')); +if (!empty($userList)) { + echo '
'; + foreach ($userList as $user) { + $userName = api_get_person_name($user['firstname'], $user['lastname']); + $url = api_get_path(WEB_CODE_PATH).'work/add_user.php?action=add&id='.$workId.'&user_id='.$user['user_id']; + $link = Display::url(get_lang('Add'), $url); + echo $userName.' '.$link.'
'; + } + echo '
'; +} + + +echo '
'; diff --git a/main/work/work.lib.php b/main/work/work.lib.php index 243db67ba5..0878978d9b 100644 --- a/main/work/work.lib.php +++ b/main/work/work.lib.php @@ -17,6 +17,8 @@ require_once api_get_path(SYS_CODE_PATH).'document/document.inc.php'; require_once api_get_path(LIBRARY_PATH).'fileDisplay.lib.php'; require_once api_get_path(SYS_CODE_PATH).'gradebook/lib/gradebook_functions.inc.php'; +define('ADD_DOCUMENT_TO_WORK', true); + /** * Displays action links (for admins, authorized groups members and authorized students) * @param string Current dir @@ -2140,3 +2142,87 @@ function display_list_users_without_publication($task_id, $studentId = null) $column_show[] = 1; Display::display_sortable_config_table('work', $table_header, $data, $sorting_options, $paging_options, $my_params, $column_show); } + +// Document to work + +function addDocumentToWork($documentId, $workId, $courseId) +{ + $table = Database::get_course_table(TABLE_STUDENT_PUBLICATION_REL_DOCUMENT); + $params = array( + 'document_id' => $documentId, + 'work_id' => $workId, + 'c_id' => $courseId + ); + Database::insert($table, $params); +} + +function getDocumentToWork($documentId, $workId, $courseId) +{ + $table = Database::get_course_table(TABLE_STUDENT_PUBLICATION_REL_DOCUMENT); + $params = array( + 'document_id = ? and work_id = ? and c_id = ?' => array($documentId, $workId, $courseId) + ); + return Database::select('*', $table, array('where' => $params)); +} + +function getAllDocumentToWork($workId, $courseId) +{ + $table = Database::get_course_table(TABLE_STUDENT_PUBLICATION_REL_DOCUMENT); + $params = array( + 'work_id = ? and c_id = ?' => array($workId, $courseId) + ); + return Database::select('*', $table, array('where' => $params)); +} + + +function deleteDocumentToWork($documentId, $workId, $courseId) +{ + $table = Database::get_course_table(TABLE_STUDENT_PUBLICATION_REL_DOCUMENT); + $params = array( + 'document_id = ? and work_id = ? and c_id = ?' => array($documentId, $workId, $courseId) + ); + Database::delete($table, $params); +} + +// User to work + + +function addUserToWork($userId, $workId, $courseId) +{ + $table = Database::get_course_table(TABLE_STUDENT_PUBLICATION_REL_USER); + $params = array( + 'user_id' => $userId, + 'work_id' => $workId, + 'c_id' => $courseId + ); + Database::insert($table, $params); +} + +function getUserToWork($userId, $workId, $courseId) +{ + $table = Database::get_course_table(TABLE_STUDENT_PUBLICATION_REL_USER); + $params = array( + 'user_id = ? and work_id = ? and c_id = ?' => array($userId, $workId, $courseId) + ); + return Database::select('*', $table, array('where' => $params)); +} + +function getAllUserToWork($workId, $courseId) +{ + $table = Database::get_course_table(TABLE_STUDENT_PUBLICATION_REL_USER); + $params = array( + 'work_id = ? and c_id = ?' => array($workId, $courseId) + ); + return Database::select('*', $table, array('where' => $params)); +} + + +function deleteUserToWork($userId, $workId, $courseId) +{ + $table = Database::get_course_table(TABLE_STUDENT_PUBLICATION_REL_USER); + $params = array( + 'user_id = ? and work_id = ? and c_id = ?' => array($userId, $workId, $courseId) + ); + Database::delete($table, $params); +} + diff --git a/main/work/work_list_all.php b/main/work/work_list_all.php index ac7a036b37..e4f5a4a3bf 100644 --- a/main/work/work_list_all.php +++ b/main/work/work_list_all.php @@ -66,10 +66,18 @@ echo '
'; echo ''.Display::return_icon('back.png', get_lang('BackToWorksList'),'',ICON_SIZE_MEDIUM).''; if (api_is_allowed_to_session_edit(false, true) && !empty($workId)) { echo ''; - echo Display::return_icon('upload_file.png', get_lang('UploadADocument'),'',ICON_SIZE_MEDIUM).''; + echo Display::return_icon('upload_file.png', get_lang('UploadADocument'), '', ICON_SIZE_MEDIUM).''; + + if (ADD_DOCUMENT_TO_WORK) { + echo ''; + echo Display::return_icon('new_document.png', get_lang('AddDocument'), '', ICON_SIZE_MEDIUM).''; + + echo ''; + echo Display::return_icon('user.png', get_lang('AddUser'), '', ICON_SIZE_MEDIUM).''; + } $display_output .= ''. - Display::return_icon('exercice_uncheck.png', get_lang('ViewUsersWithoutTask'),'',ICON_SIZE_MEDIUM)."\n"; + Display::return_icon('exercice_uncheck.png', get_lang('ViewUsersWithoutTask'), '', ICON_SIZE_MEDIUM).""; $count = get_count_work($workId); if ($count > 0) { $display_output .= ''.Display::return_icon('save_pack.png', get_lang('Save'), array('style' => 'float:right;'), ICON_SIZE_MEDIUM).'';