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).'';