diff --git a/main/inc/lib/database.constants.inc.php b/main/inc/lib/database.constants.inc.php index 8f65fe2c8b..3e9bd781b6 100644 --- a/main/inc/lib/database.constants.inc.php +++ b/main/inc/lib/database.constants.inc.php @@ -168,6 +168,8 @@ 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'); +define('TABLE_STUDENT_PUBLICATION_ASSIGNMENT_COMMENT', 'student_publication_comment'); + // Course forum tables define('TABLE_FORUM_CATEGORY', 'forum_category'); define('TABLE_FORUM', 'forum_forum'); diff --git a/main/inc/lib/template.lib.php b/main/inc/lib/template.lib.php index 50f4e9cddd..9c5ae1e37f 100644 --- a/main/inc/lib/template.lib.php +++ b/main/inc/lib/template.lib.php @@ -98,7 +98,7 @@ class Template ); $this->twig->addFilter('icon', new Twig_Filter_Function('Template::get_icon_path')); $this->twig->addFilter('format_date', new Twig_Filter_Function('Template::format_date')); - + $this->twig->addFilter('api_get_local_time', new Twig_Filter_Function('api_get_local_time')); /* $lexer = new Twig_Lexer($this->twig, array( diff --git a/main/template/default/work/view.tpl b/main/template/default/work/view.tpl index a4dbdd5e24..525d7b2903 100644 --- a/main/template/default/work/view.tpl +++ b/main/template/default/work/view.tpl @@ -1,7 +1,30 @@ -

-{{ work.description }} + {{ work.description }}

+{# "UpdatedBy"|get_lang|format(comment.username) #} + +{% if work_comment_enabled %} +

+ {{ 'Comments' | get_lang }} +

+
+ +
+
+ {{ form }} +{% endif %} diff --git a/main/work/view.php b/main/work/view.php index 520e9343bb..bb806acb89 100644 --- a/main/work/view.php +++ b/main/work/view.php @@ -1,5 +1,4 @@ '#','name' => $work['title']); if ( ($course_info['show_score'] == 0 && $work['active'] == 1 && $work['accepted'] == 1) || - api_is_allowed_to_edit() || - (user_is_author($id))) { + api_is_allowed_to_edit() || user_is_author($id) + ) { + + if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'send_comment') { + addWorkComment(api_get_user_id(), $work, $_POST); + $url = api_get_path(WEB_CODE_PATH).'work/view.php?id='.$work['id'].'&'.api_get_cidreq(); + header('Location: '.$url); + exit; + } $tpl = new Template(); $tpl->assign('work', $work); + + $tpl->assign('work_comment_enabled', ALLOW_USER_COMMENTS); + + $comments = getWorkComments($work); + $commentForm = getWorkCommentForm($work); + $tpl->assign('comments', $comments); + $tpl->assign('form', $commentForm); + $template = $tpl->get_template('work/view.tpl'); $content = $tpl->fetch($template); $tpl->assign('content', $content); + $tpl->display_one_col_template(); } else { api_not_allowed(true); diff --git a/main/work/work.lib.php b/main/work/work.lib.php index dc9f5a9996..0e8fc86e96 100644 --- a/main/work/work.lib.php +++ b/main/work/work.lib.php @@ -23,6 +23,13 @@ if (isset($_configuration['add_document_to_work'])) { define('ADD_DOCUMENT_TO_WORK', false); } +$_configuration['work_user_comments'] = true; +if (isset($_configuration['work_user_comments'])) { + define('ALLOW_USER_COMMENTS', $_configuration['work_user_comments']); +} else { + define('ALLOW_USER_COMMENTS', false); +} + /** * Displays action links (for admins, authorized groups members and authorized students) * @param string Current dir @@ -625,10 +632,10 @@ function display_student_publications_list($id, $my_folder_data, $work_parents, $there_is_a_expire_date = true; $defaults['enableExpiryDate'] = true; - $form_folder -> addElement('checkbox', 'enableExpiryDate',null,get_lang('EnableExpiryDate'), 'onclick="javascript: if(this.checked){document.getElementById(\'option1\').style.display = \'block\';}else{document.getElementById(\'option1\').style.display = \'none\';}"'); - $form_folder -> addElement('html', '
'); - $form_folder -> addGroup(create_group_date_select(), 'expires', get_lang('ExpiresAt')); - $form_folder -> addElement('html', '
'); + $form_folder->addElement('checkbox', 'enableExpiryDate',null,get_lang('EnableExpiryDate'), 'onclick="javascript: if(this.checked){document.getElementById(\'option1\').style.display = \'block\';}else{document.getElementById(\'option1\').style.display = \'none\';}"'); + $form_folder->addElement('html', '
'); + $form_folder->addGroup(create_group_date_select(), 'expires', get_lang('ExpiresAt')); + $form_folder->addElement('html', '
'); } else { $homework['expires_on'] = api_get_local_time(); @@ -637,10 +644,10 @@ function display_student_publications_list($id, $my_folder_data, $work_parents, $there_is_a_expire_date = false; - $form_folder -> addElement('checkbox', 'enableExpiryDate',null,get_lang('EnableExpiryDate'), 'onclick="javascript: if(this.checked){document.getElementById(\'option1\').style.display = \'block\';}else{document.getElementById(\'option1\').style.display = \'none\';}"'); - $form_folder -> addElement('html', ''); + $form_folder->addElement('checkbox', 'enableExpiryDate',null,get_lang('EnableExpiryDate'), 'onclick="javascript: if(this.checked){document.getElementById(\'option1\').style.display = \'block\';}else{document.getElementById(\'option1\').style.display = \'none\';}"'); + $form_folder->addElement('html', ''); } if ($homework['ends_on'] != '0000-00-00 00:00:00') { @@ -649,11 +656,11 @@ function display_student_publications_list($id, $my_folder_data, $work_parents, $defaults['enableEndDate'] = true; - $form_folder -> addElement('checkbox', 'enableEndDate', null, get_lang('EnableEndDate'), 'onclick="javascript: if(this.checked){document.getElementById(\'option2\').style.display = \'block\';}else{document.getElementById(\'option2\').style.display = \'none\';}"'); - $form_folder -> addElement('html', '
'); - $form_folder -> addGroup(create_group_date_select(), 'ends', get_lang('EndsAt')); - $form_folder -> addElement('html', '
'); - $form_folder -> addRule(array('expires', 'ends'), get_lang('DateExpiredNotBeLessDeadLine'), 'comparedate'); + $form_folder->addElement('checkbox', 'enableEndDate', null, get_lang('EnableEndDate'), 'onclick="javascript: if(this.checked){document.getElementById(\'option2\').style.display = \'block\';}else{document.getElementById(\'option2\').style.display = \'none\';}"'); + $form_folder->addElement('html', '
'); + $form_folder->addGroup(create_group_date_select(), 'ends', get_lang('EndsAt')); + $form_folder->addElement('html', '
'); + $form_folder->addRule(array('expires', 'ends'), get_lang('DateExpiredNotBeLessDeadLine'), 'comparedate'); } else { $homework['ends_on'] = api_get_local_time(); @@ -663,20 +670,20 @@ function display_student_publications_list($id, $my_folder_data, $work_parents, $there_is_a_end_date = false; - $form_folder -> addElement('checkbox', 'enableEndDate', null, get_lang('EnableEndDate'), 'onclick="javascript: if(this.checked){document.getElementById(\'option2\').style.display = \'block\';}else{document.getElementById(\'option2\').style.display = \'none\';}"'); - $form_folder -> addElement('html', ''); - $form_folder -> addRule(array('expires', 'ends'), get_lang('DateExpiredNotBeLessDeadLine'), 'comparedate'); + $form_folder->addElement('checkbox', 'enableEndDate', null, get_lang('EnableEndDate'), 'onclick="javascript: if(this.checked){document.getElementById(\'option2\').style.display = \'block\';}else{document.getElementById(\'option2\').style.display = \'none\';}"'); + $form_folder->addElement('html', ''); + $form_folder->addRule(array('expires', 'ends'), get_lang('DateExpiredNotBeLessDeadLine'), 'comparedate'); } if ($there_is_a_expire_date && $there_is_a_end_date) { $form_folder -> addRule(array('expires', 'ends'), get_lang('DateExpiredNotBeLessDeadLine'), 'comparedate'); } - $form_folder -> addElement('checkbox', 'allow_text_assignment', null, get_lang('AllowTextAssignments')); - $form_folder -> addElement('html', ''); - $form_folder -> addElement('style_submit_button', 'submit', get_lang('ModifyDirectory'), 'class="save"'); + $form_folder->addElement('checkbox', 'allow_text_assignment', null, get_lang('AllowTextAssignments')); + $form_folder->addElement('html', ''); + $form_folder->addElement('style_submit_button', 'submit', get_lang('ModifyDirectory'), 'class="save"'); if ($there_is_a_end_date) { $end_date_array = convert_date_to_array($homework['ends_on'], 'ends'); @@ -2390,3 +2397,83 @@ function getWorkDescriptionToolbar() { return array('ToolbarSet' => 'Work', 'Width' => '100%', 'Height' => '400'); } + +/** + * @param array $work + * @return string + */ +function getWorkComments($work) { + + if (ADD_DOCUMENT_TO_WORK == false) { + return array(); + } + + $commentTable = Database::get_course_table(TABLE_STUDENT_PUBLICATION_ASSIGNMENT_COMMENT); + $userTable= Database::get_main_table(TABLE_MAIN_USER); + + $courseId = $work['c_id']; + $workId = $work['id']; + + $sql = "SELECT c.*, u.firstname, u.lastname, u.username, u.picture_uri + FROM $commentTable c INNER JOIN $userTable u ON(u.user_id = c.user_id) + WHERE c_id = $courseId AND work_id = $workId + ORDER BY sent_at + "; + $result = Database::query($sql); + $comments = Database::store_result($result, 'ASSOC'); + foreach ($comments as &$comment) { + $pictureInfo = UserManager::get_picture_user($comment['user_id'], $comment['picture_uri'], 24, USER_IMAGE_SIZE_SMALL); + $comment['picture'] = $pictureInfo['file']; + } + return $comments; +} + +/** + * @param int $userId + * @param array $work + * @param array $data + * @return int + */ +function addWorkComment($userId, $work, $data) +{ + if (ADD_DOCUMENT_TO_WORK == false) { + return null; + } + + $commentTable = Database::get_course_table(TABLE_STUDENT_PUBLICATION_ASSIGNMENT_COMMENT); + + if (empty($data['comment'])) { + return null; + } + + $params = array( + 'work_id' => $work['id'], + 'c_id' => $work['c_id'], + 'user_id' => $userId, + 'comment' => $data['comment'], + 'sent_at' => api_get_utc_datetime() + ); + return Database::insert($commentTable, $params); +} + +/** + * @param array $work + * @return string + */ +function getWorkCommentForm($work) +{ + if (ADD_DOCUMENT_TO_WORK == false) { + return null; + } + $form = new FormValidator( + 'work_comment', + 'post', + api_get_path(WEB_CODE_PATH).'work/view.php?id='.$work['id'].'&action=send_comment&'.api_get_cidreq() + ); + $form->addElement('textarea', 'comment', get_lang('Comment'), array('class' => 'span5', 'rows' => '8')); + $form->addRule('comment', get_lang('ThisFieldIsRequired'), 'required'); + $form->addElement('hidden', 'id', $work['id']); + $form->addElement('button', 'button', get_lang('Send')); + return $form->return_form(); + +}