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 -> 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', '
');
}
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 -> 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');
}
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();
+
+}