diff --git a/main/attendance/attendance_add.php b/main/attendance/attendance_add.php
index 075a724639..a559ebf711 100755
--- a/main/attendance/attendance_add.php
+++ b/main/attendance/attendance_add.php
@@ -65,6 +65,9 @@ if ((api_get_session_id() != 0 && Gradebook::is_active()) || api_get_session_id(
);
$form->applyFilter('attendance_weight', 'html_filter');
$form->addElement('html', '');
+
+ $skillList = Skill::addSkillsToForm($form, ITEM_TYPE_ATTENDANCE, 0);
+
$form->addElement('html', '');
}
$form->addButtonCreate(get_lang('Save'));
diff --git a/main/attendance/attendance_controller.php b/main/attendance/attendance_controller.php
index fca024066b..26b26bf944 100755
--- a/main/attendance/attendance_controller.php
+++ b/main/attendance/attendance_controller.php
@@ -45,7 +45,6 @@ class AttendanceController
{
$attendance = new Attendance();
$data = [];
-
if (strtoupper($_SERVER['REQUEST_METHOD']) == 'POST') {
if (!empty($_POST['title'])) {
$check = Security::check_token();
@@ -62,10 +61,15 @@ class AttendanceController
$link_to_gradebook = true;
}
$attendance->category_id = isset($_POST['category_id']) ? $_POST['category_id'] : 0;
- $last_id = $attendance->attendance_add($link_to_gradebook);
+ $attendanceId = $attendance->attendance_add($link_to_gradebook);
+
+ if ($attendanceId) {
+ $form = new FormValidator('attendance_add');
+ Skill::saveSkills($form, ITEM_TYPE_ATTENDANCE, $attendanceId);
+ }
Security::clear_token();
}
- header('Location: index.php?action=calendar_add&attendance_id='.$last_id.'&'.api_get_cidreq());
+ header('Location: index.php?action=calendar_add&attendance_id='.$attendanceId.'&'.api_get_cidreq());
exit;
} else {
$data['error'] = true;
@@ -119,8 +123,13 @@ class AttendanceController
$link_to_gradebook = true;
}
$attendance->attendance_edit($attendance_id, $link_to_gradebook);
+
+ $form = new FormValidator('attendance_edit');
+ Skill::saveSkills($form, ITEM_TYPE_ATTENDANCE, $attendance_id);
+ Display::addFlash(Display::return_message(get_lang('Updated')));
+
Security::clear_token();
- header('location:index.php?action=attendance_list&'.api_get_cidreq());
+ header('Location:index.php?action=attendance_list&'.api_get_cidreq());
exit;
}
} else {
@@ -167,6 +176,7 @@ class AttendanceController
$attendance = new Attendance();
if (!empty($attendance_id)) {
$affected_rows = $attendance->attendance_delete($attendance_id);
+ Skill::deleteSkillsFromItem($attendance_id, ITEM_TYPE_ATTENDANCE);
}
if ($affected_rows) {
diff --git a/main/attendance/attendance_edit.php b/main/attendance/attendance_edit.php
index 587469054c..9cde9f1286 100755
--- a/main/attendance/attendance_edit.php
+++ b/main/attendance/attendance_edit.php
@@ -44,8 +44,8 @@ $form->addHtmlEditor(
]
);
-// Adavanced Parameters
-
+// Advanced Parameters
+$skillList = [];
if (Gradebook::is_active()) {
if (!empty($attendance_qualify_title) || !empty($attendance_weight)) {
$form->addButtonAdvancedSettings('id_qualify');
@@ -81,6 +81,9 @@ if (Gradebook::is_active()) {
);
$form->applyFilter('attendance_weight', 'html_filter');
$form->addElement('html', '');
+
+ $skillList = Skill::addSkillsToForm($form, ITEM_TYPE_ATTENDANCE, $attendance_id);
+
$form->addElement('html', '');
}
$form->addButtonUpdate(get_lang('Save'));
@@ -90,6 +93,7 @@ $default['title'] = Security::remove_XSS($title);
$default['description'] = Security::remove_XSS($description, STUDENT);
$default['attendance_qualify_title'] = $attendance_qualify_title;
$default['attendance_weight'] = $attendance_weight;
+$default['skills'] = array_keys($skillList);
$link_info = GradebookUtils::isResourceInCourseGradebook(
api_get_course_id(),
diff --git a/main/exercise/exercise.class.php b/main/exercise/exercise.class.php
index aa40e9dc54..f47e7d95dc 100755
--- a/main/exercise/exercise.class.php
+++ b/main/exercise/exercise.class.php
@@ -1850,8 +1850,8 @@ class Exercise
*/
public function delete()
{
- $TBL_EXERCISES = Database::get_course_table(TABLE_QUIZ_TEST);
- $sql = "UPDATE $TBL_EXERCISES SET active='-1'
+ $table = Database::get_course_table(TABLE_QUIZ_TEST);
+ $sql = "UPDATE $table SET active='-1'
WHERE c_id = ".$this->course_id." AND id = ".intval($this->id);
Database::query($sql);
@@ -1870,6 +1870,8 @@ class Exercise
api_get_user_id()
);
+ Skill::deleteSkillsFromItem($this->iId, ITEM_TYPE_EXERCISE);
+
if (api_get_setting('search_enabled') == 'true' &&
extension_loaded('xapian')
) {
@@ -2498,7 +2500,7 @@ class Exercise
}
}
- //$skillList = Skill::addSkillsToForm($form, ITEM_TYPE_EXERCISE, $this->iId);
+ $skillList = Skill::addSkillsToForm($form, ITEM_TYPE_EXERCISE, $this->iId);
$form->addElement('html', ''); //End advanced setting
$form->addElement('html', '');
@@ -2564,7 +2566,7 @@ class Exercise
} else {
$defaults['enabletimercontroltotalminutes'] = 0;
}
- //$defaults['skills'] = array_keys($skillList);
+ $defaults['skills'] = array_keys($skillList);
$defaults['notifications'] = $this->getNotifications();
} else {
$defaults['exerciseType'] = 2;
@@ -2709,9 +2711,9 @@ class Exercise
}
$iId = $this->save($type);
- /*if (!empty($iId)) {
+ if (!empty($iId)) {
Skill::saveSkills($form, ITEM_TYPE_EXERCISE, $iId);
- }*/
+ }
}
public function search_engine_save()
@@ -6077,7 +6079,6 @@ class Exercise
);
$html = '
';
-
if (api_get_configuration_value('save_titles_as_html')) {
$html .= $this->get_formated_title();
$html .= Display::page_header(get_lang('Result'));
diff --git a/main/forum/editthread.php b/main/forum/editthread.php
index b50eee6d3b..0f7f2294b0 100644
--- a/main/forum/editthread.php
+++ b/main/forum/editthread.php
@@ -179,7 +179,7 @@ $form->addElement('text', 'thread_title', get_lang('Title'));
$form->addElement('advanced_settings', 'advanced_params', get_lang('AdvancedParameters'));
$form->addElement('html', '
');
-if ((api_is_course_admin() || api_is_session_general_coach() || api_is_course_tutor()) && ($threadId)) {
+if ((api_is_course_admin() || api_is_session_general_coach() || api_is_course_tutor()) && $threadId) {
// Thread qualify
if (Gradebook::is_active()) {
//Loading gradebook select
@@ -224,6 +224,8 @@ if ($forumSettings['allow_sticky'] && api_is_allowed_to_edit(null, true)) {
$form->addElement('html', '
');
+$skillList = Skill::addSkillsToForm($form, ITEM_TYPE_FORUM_THREAD, $threadId);
+
if (!empty($threadData)) {
$defaults['thread_qualify_gradebook'] = ($threadData['threadQualifyMax'] > 0 && empty($_POST)) ? 1 : 0;
$defaults['thread_title'] = prepare4display($threadData['threadTitle']);
@@ -240,16 +242,20 @@ if (!empty($threadData)) {
$defaults['thread_peer_qualify'] = 0;
}
+$defaults['skills'] = array_keys($skillList);
+
$form->addButtonUpdate(get_lang('ModifyThread'), 'SubmitPost');
if ($form->validate()) {
$redirectUrl = api_get_path(WEB_CODE_PATH).'forum/viewforum.php?forum='.$forumId.'&'.api_get_cidreq();
-
$check = Security::check_token('post');
if ($check) {
$values = $form->exportValues();
Security::clear_token();
updateThread($values);
+
+ Skill::saveSkills($form, ITEM_TYPE_FORUM_THREAD, $threadId);
+
header('Location: '.$redirectUrl);
exit;
}
diff --git a/main/forum/forumfunction.inc.php b/main/forum/forumfunction.inc.php
index 8f1c1e7717..583dd9adc2 100755
--- a/main/forum/forumfunction.inc.php
+++ b/main/forum/forumfunction.inc.php
@@ -101,7 +101,7 @@ function handle_forum_and_forumcategories($lp_id = null)
$get_id = isset($_GET['id']) ? intval($_GET['id']) : '';
$forum_categories_list = get_forum_categories();
- //Verify if forum category exists
+ // Verify if forum category exists
if (empty($forum_categories_list)) {
$get_content = 'forumcategory';
}
@@ -117,10 +117,9 @@ function handle_forum_and_forumcategories($lp_id = null)
if ((($action_forum_cat == 'add' || $action_forum_cat == 'edit') && $get_content == 'forum') ||
$post_submit_forum
) {
+ $inputvalues = [];
if ($action_forum_cat == 'edit' && $get_id || $post_submit_forum) {
$inputvalues = get_forums($get_id);
- } else {
- $inputvalues = [];
}
$content = show_add_forum_form($inputvalues, $lp_id);
}
@@ -246,10 +245,9 @@ function show_add_forum_form($inputvalues = [], $lp_id)
$form = new FormValidator('forumcategory', 'post', 'index.php?'.api_get_cidreq());
// The header for the form
+ $form_title = get_lang('AddForum');
if (!empty($inputvalues)) {
$form_title = get_lang('EditForum');
- } else {
- $form_title = get_lang('AddForum');
}
$form->addElement('header', $form_title);
@@ -387,6 +385,10 @@ function show_add_forum_form($inputvalues = [], $lp_id)
'filetype',
['jpg', 'jpeg', 'png', 'gif']
);
+
+ //$forumId = isset($_GET['id']) ? (int) $_GET['id'] : 0;
+ //$skillList = Skill::addSkillsToForm($form, ITEM_TYPE_FORUM, $forumId);
+
$form->addElement('html', '
');
// The OK button
@@ -433,14 +435,24 @@ function show_add_forum_form($inputvalues = [], $lp_id)
$defaults['public_private_group_forum_group']['public_private_group_forum'] = isset($inputvalues['forum_group_public_private']) ? $inputvalues['forum_group_public_private'] : null;
$defaults['group_forum'] = isset($inputvalues['forum_of_group']) ? $inputvalues['forum_of_group'] : null;
}
+
+ // $defaults['skills'] = array_keys($skillList);
+
$form->setDefaults($defaults);
// Validation or display
if ($form->validate()) {
$check = Security::check_token('post');
if ($check) {
$values = $form->getSubmitValues();
- $return_message = store_forum($values);
- Display::addFlash(Display::return_message($return_message, 'confirmation'));
+ $forumId = store_forum($values, '', true);
+ if ($forumId) {
+ // Skill::saveSkills($form, ITEM_TYPE_FORUM, $forumId);
+ if (isset($values['forum_id'])) {
+ Display::addFlash(Display::return_message(get_lang('ForumEdited'), 'confirmation'));
+ } else {
+ Display::addFlash(Display::return_message(get_lang('ForumAdded'), 'confirmation'));
+ }
+ }
}
Security::clear_token();
} else {
@@ -647,11 +659,9 @@ function store_forum($values, $courseInfo = [], $returnId = false)
$courseInfo = empty($courseInfo) ? api_get_course_info() : $courseInfo;
$course_id = $courseInfo['real_id'];
$session_id = api_get_session_id();
-
+ $group_id = api_get_group_id();
if (isset($values['group_id']) && !empty($values['group_id'])) {
$group_id = $values['group_id'];
- } else {
- $group_id = api_get_group_id();
}
$groupInfo = [];
if (!empty($group_id)) {
@@ -677,11 +687,10 @@ function store_forum($values, $courseInfo = [], $returnId = false)
// Forum images
$image_moved = false;
$has_attachment = false;
+ $image_moved = true;
if (!empty($_FILES['picture']['name'])) {
$upload_ok = process_uploaded_file($_FILES['picture']);
$has_attachment = true;
- } else {
- $image_moved = true;
}
// Remove existing picture if it was requested.
@@ -765,6 +774,7 @@ function store_forum($values, $courseInfo = [], $returnId = false)
);
$return_message = get_lang('ForumEdited');
+ $forumId = $values['forum_id'];
} else {
if ($image_moved) {
$new_file_name = isset($new_file_name) ? $new_file_name : '';
@@ -793,31 +803,32 @@ function store_forum($values, $courseInfo = [], $returnId = false)
'forum_id' => 0
];
- $last_id = Database::insert($table_forums, $params);
- if ($last_id > 0) {
- $sql = "UPDATE $table_forums SET forum_id = iid WHERE iid = $last_id";
+ $forumId = Database::insert($table_forums, $params);
+ if ($forumId > 0) {
+ $sql = "UPDATE $table_forums SET forum_id = iid WHERE iid = $forumId";
Database::query($sql);
api_item_property_update(
$courseInfo,
TOOL_FORUM,
- $last_id,
+ $forumId,
'ForumAdded',
api_get_user_id(),
$groupInfo
);
api_set_default_visibility(
- $last_id,
+ $forumId,
TOOL_FORUM,
$group_id,
$courseInfo
);
}
$return_message = get_lang('ForumAdded');
- if ($returnId) {
- return $last_id;
- }
+ }
+
+ if ($returnId) {
+ return $forumId;
}
return $return_message;
@@ -911,6 +922,7 @@ function deleteForumCategoryThread($content, $id)
if ($content == 'thread') {
$tool_constant = TOOL_FORUM_THREAD;
$return_message = get_lang('ThreadDeleted');
+ Skill::deleteSkillsFromItem($id, ITEM_TYPE_FORUM_THREAD);
}
api_item_property_update(
@@ -2624,8 +2636,8 @@ function store_thread(
$visible = 1;
}
$clean_post_title = $values['post_title'];
- // We first store an entry in the forum_thread table because the thread_id is used in the forum_post table.
+ // We first store an entry in the forum_thread table because the thread_id is used in the forum_post table.
$lastThread = new CForumThread();
$lastThread
->setCId($course_id)
@@ -2975,6 +2987,10 @@ function show_add_post_form($current_forum, $forum_setting, $action, $id = '', $
$form->addElement('html', '');
}
+ if ($action == 'newthread') {
+ Skill::addSkillsToForm($form, ITEM_TYPE_FORUM_THREAD, 0);
+ }
+
if ($forum_setting['allow_sticky'] && api_is_allowed_to_edit(null, true) && $action == 'newthread') {
$form->addElement('checkbox', 'thread_sticky', '', get_lang('StickyPost'));
}
@@ -3082,6 +3098,7 @@ function show_add_post_form($current_forum, $forum_setting, $action, $id = '', $
switch ($action) {
case 'newthread':
$myThread = store_thread($current_forum, $values);
+ Skill::saveSkills($form, ITEM_TYPE_FORUM_THREAD, $myThread);
break;
case 'quote':
case 'replythread':
diff --git a/main/gradebook/gradebook_display_summary.php b/main/gradebook/gradebook_display_summary.php
index 3a5312afb0..85ba7f0014 100644
--- a/main/gradebook/gradebook_display_summary.php
+++ b/main/gradebook/gradebook_display_summary.php
@@ -129,21 +129,42 @@ if (count($userList) > 0) {
}
echo '';
+$allowSkillRelItem = api_get_configuration_value('allow_skill_rel_items');
+
if (count($userList) == 0) {
echo Display::return_message(get_lang('NoResultsAvailable'), 'warning');
} else {
echo '
';
+ echo '| ';
+ echo get_lang('Student');
+ echo ' | ';
+ echo '';
+ echo get_lang('Action');
+ echo ' |
';
foreach ($userList as $index => $value) {
echo '
- | '.
- get_lang('Student').' : '.api_get_person_name($value['firstname'], $value['lastname']).' ('.$value['username'].') | ';
+ '
+ .api_get_person_name($value['firstname'], $value['lastname']).' ('.$value['username'].') | ';
echo '';
+ $link = '';
+ if ($allowSkillRelItem) {
+ $url = api_get_path(WEB_CODE_PATH).'gradebook/skill_rel_user.php?'.api_get_cidreq().'&user_id='.$value['user_id'].'&selectcat='.$cat_id;
+ $link = Display::url(
+ get_lang('Skills'),
+ $url,
+ ['class' => 'btn btn-default']
+ ).' ';
+ }
+
$url = api_get_self().'?'.api_get_cidreq().'&action=download&user_id='.$value['user_id'].'&selectcat='.$cat_id;
- $link = Display::url(
+ $link .= Display::url(
get_lang('ExportToPDF'),
$url,
['target' => '_blank', 'class' => 'btn btn-default']
);
+
+
+
echo $link;
echo ' |
';
}
diff --git a/main/gradebook/lib/be/abstractlink.class.php b/main/gradebook/lib/be/abstractlink.class.php
index c8564bb176..a0172baf6d 100755
--- a/main/gradebook/lib/be/abstractlink.class.php
+++ b/main/gradebook/lib/be/abstractlink.class.php
@@ -695,4 +695,38 @@ abstract class AbstractLink implements GradebookItem
return [];
}
+
+ /**
+ * @return string
+ */
+ public function getSkillsFromItem()
+ {
+ $toolType = '';
+ switch ($this->type) {
+ case LINK_ATTENDANCE:
+ $toolType = ITEM_TYPE_ATTENDANCE;
+ break;
+ case LINK_EXERCISE:
+ $toolType = ITEM_TYPE_EXERCISE;
+ break;
+ case LINK_FORUM_THREAD:
+ $toolType = ITEM_TYPE_FORUM_THREAD;
+ break;
+ case LINK_LEARNPATH:
+ $toolType = ITEM_TYPE_LEARNPATH;
+ break;
+ case LINK_HOTPOTATOES:
+ $toolType = ITEM_TYPE_HOTPOTATOES;
+ break;
+ case LINK_STUDENTPUBLICATION:
+ $toolType = ITEM_TYPE_STUDENT_PUBLICATION;
+ break;
+ case LINK_SURVEY:
+ $toolType = ITEM_TYPE_SURVEY;
+ break;
+ }
+
+ $skillToString = Skill::getSkillRelItemsToString($toolType, $this->get_ref_id());
+ return $skillToString;
+ }
}
diff --git a/main/gradebook/lib/fe/evalform.class.php b/main/gradebook/lib/fe/evalform.class.php
index 0d30aa3b42..05e2f24001 100755
--- a/main/gradebook/lib/fe/evalform.class.php
+++ b/main/gradebook/lib/fe/evalform.class.php
@@ -130,9 +130,7 @@ class EvalForm extends FormValidator
{
//extra field for check on maxvalue
$this->addElement('header', get_lang('EditResult'));
-
$renderer = &$this->defaultRenderer();
-
// set new form template
$form_template = '