|
|
|
@ -207,6 +207,7 @@ function get_work_count_by_student($user_id, $work_id) |
|
|
|
|
$work_id = intval($work_id); |
|
|
|
|
$course_id = api_get_course_int_id(); |
|
|
|
|
$session_id = api_get_session_id(); |
|
|
|
|
$sessionCondition = api_get_session_condition($session_id); |
|
|
|
|
|
|
|
|
|
$table = Database::get_course_table(TABLE_STUDENT_PUBLICATION); |
|
|
|
|
$sql = "SELECT COUNT(*) as count |
|
|
|
@ -215,8 +216,8 @@ function get_work_count_by_student($user_id, $work_id) |
|
|
|
|
c_id = $course_id AND |
|
|
|
|
parent_id = $work_id AND |
|
|
|
|
user_id = $user_id AND |
|
|
|
|
active IN (0, 1) AND |
|
|
|
|
session_id = $session_id "; |
|
|
|
|
active IN (0, 1) |
|
|
|
|
$sessionCondition"; |
|
|
|
|
$result = Database::query($sql); |
|
|
|
|
$return = 0; |
|
|
|
|
if (Database::num_rows($result)) { |
|
|
|
@ -381,14 +382,15 @@ function getUniqueStudentAttemptsTotal($workId, $groupId, $course_id, $sessionId |
|
|
|
|
$workId = intval($workId); |
|
|
|
|
$sessionId = intval($sessionId); |
|
|
|
|
$groupId = intval($groupId); |
|
|
|
|
$sessionCondition = api_get_session_condition($sessionId, true, false, 'w.session_id'); |
|
|
|
|
|
|
|
|
|
$sql = "SELECT count(DISTINCT u.user_id) |
|
|
|
|
FROM $work_table w |
|
|
|
|
INNER JOIN $user_table u |
|
|
|
|
ON w.user_id = u.user_id |
|
|
|
|
WHERE |
|
|
|
|
w.c_id = $course_id AND |
|
|
|
|
w.session_id = $sessionId AND |
|
|
|
|
w.c_id = $course_id |
|
|
|
|
$sessionCondition AND |
|
|
|
|
w.parent_id = ".$workId." AND |
|
|
|
|
w.post_group_id = ".$groupId." AND |
|
|
|
|
w.active IN (0, 1) |
|
|
|
@ -445,6 +447,8 @@ function getUniqueStudentAttempts( |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$sessionCondition = api_get_session_condition($sessionId, true, false, 'w.session_id'); |
|
|
|
|
|
|
|
|
|
$sql = "SELECT count(*) FROM ( |
|
|
|
|
SELECT count(*), w.parent_id |
|
|
|
|
FROM $work_table w |
|
|
|
@ -452,8 +456,8 @@ function getUniqueStudentAttempts( |
|
|
|
|
ON w.user_id = u.user_id |
|
|
|
|
WHERE |
|
|
|
|
w.filetype = 'file' AND |
|
|
|
|
w.c_id = $course_id AND |
|
|
|
|
w.session_id = $sessionId AND |
|
|
|
|
w.c_id = $course_id |
|
|
|
|
$sessionCondition AND |
|
|
|
|
$workCondition |
|
|
|
|
w.post_group_id = ".$groupId." AND |
|
|
|
|
w.active IN (0, 1) $studentCondition |
|
|
|
@ -881,8 +885,7 @@ function updateDirName($work_data, $newPath) |
|
|
|
|
WHERE |
|
|
|
|
c_id = $course_id AND |
|
|
|
|
id = $work_id AND |
|
|
|
|
session_id = $sessionId |
|
|
|
|
"; |
|
|
|
|
session_id = " . ($sessionId ? $sessionId : 'NULL'); |
|
|
|
|
Database::query($sql); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -898,16 +901,21 @@ function updateDirName($work_data, $newPath) |
|
|
|
|
function get_parent_directories($id) |
|
|
|
|
{ |
|
|
|
|
$course_id = api_get_course_int_id(); |
|
|
|
|
$work_table = Database::get_course_table(TABLE_STUDENT_PUBLICATION); |
|
|
|
|
$id = intval($id); |
|
|
|
|
$sql = "SELECT id FROM $work_table WHERE c_id = $course_id AND parent_id = $id"; |
|
|
|
|
$result = Database::query($sql); |
|
|
|
|
$em = Database::getManager(); |
|
|
|
|
|
|
|
|
|
$directories = $em |
|
|
|
|
->getRepository('ChamiloCourseBundle:CStudentPublication') |
|
|
|
|
->findBy([ |
|
|
|
|
'cId' => $course_id, |
|
|
|
|
'parentId' => $id |
|
|
|
|
]); |
|
|
|
|
|
|
|
|
|
$list_id = array(); |
|
|
|
|
if (Database::num_rows($result)) { |
|
|
|
|
while ($row = Database::fetch_array($result)) { |
|
|
|
|
$list_id[] = $row['id']; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
foreach ($directories as $directory) { |
|
|
|
|
$list_id[] = $directory->getId(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return $list_id; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1600,7 +1608,7 @@ function get_work_user_list_from_documents( |
|
|
|
|
$workId = intval($workId); |
|
|
|
|
|
|
|
|
|
$userCondition = " AND u.user_id = $studentId "; |
|
|
|
|
$sessionCondition = " AND w.session_id = $sessionId "; |
|
|
|
|
$sessionCondition = api_get_session_condition($sessionId, true, false, 'w.session_id'); |
|
|
|
|
$workCondition = " AND w_rel.work_id = $workId"; |
|
|
|
|
$workParentCondition = " AND w.parent_id = $workId"; |
|
|
|
|
|
|
|
|
@ -2331,6 +2339,7 @@ function get_list_users_without_publication($task_id, $studentId = null) |
|
|
|
|
$session_id = api_get_session_id(); |
|
|
|
|
$course_id = api_get_course_int_id(); |
|
|
|
|
$task_id = intval($task_id); |
|
|
|
|
$sessionCondition = api_get_session_condition($session_id); |
|
|
|
|
|
|
|
|
|
if ($session_id == 0) { |
|
|
|
|
$sql = "SELECT user_id as id FROM $work_table |
|
|
|
@ -2342,8 +2351,7 @@ function get_list_users_without_publication($task_id, $studentId = null) |
|
|
|
|
$sql = "SELECT user_id as id FROM $work_table |
|
|
|
|
WHERE |
|
|
|
|
c_id = $course_id AND |
|
|
|
|
parent_id = '$task_id' AND |
|
|
|
|
session_id = '".$session_id."' AND |
|
|
|
|
parent_id = '$task_id' $sessionCondition AND |
|
|
|
|
active IN (0, 1)"; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -2511,13 +2519,14 @@ function getDocumentToWorkPerUser($documentId, $workId, $courseId, $sessionId, $ |
|
|
|
|
$userId = intval($userId); |
|
|
|
|
$sessionId = intval($sessionId); |
|
|
|
|
$active = intval($active); |
|
|
|
|
$sessionCondition = api_get_session_condition($sessionId); |
|
|
|
|
|
|
|
|
|
$sql = "SELECT w.* FROM $work w INNER JOIN $workRel rel ON (w.parent_id = rel.work_id) |
|
|
|
|
WHERE |
|
|
|
|
w.document_id = $documentId AND |
|
|
|
|
w.parent_id = $workId AND |
|
|
|
|
w.c_id = $courseId AND |
|
|
|
|
w.session_id = $sessionId AND |
|
|
|
|
w.c_id = $courseId |
|
|
|
|
$sessionCondition AND |
|
|
|
|
user_id = $userId AND |
|
|
|
|
active = $active |
|
|
|
|
"; |
|
|
|
@ -2917,12 +2926,13 @@ function getWorkCommentCountFromParent( |
|
|
|
|
$work = Database::get_course_table(TABLE_STUDENT_PUBLICATION); |
|
|
|
|
$commentTable = Database::get_course_table(TABLE_STUDENT_PUBLICATION_ASSIGNMENT_COMMENT); |
|
|
|
|
$parentId = intval($parentId); |
|
|
|
|
$sessionCondition = api_get_session_condition($sessionId, false, false, 'w.session_id'); |
|
|
|
|
|
|
|
|
|
$sql = "SELECT count(*) as count |
|
|
|
|
FROM $commentTable c INNER JOIN $work w |
|
|
|
|
ON c.c_id = w.c_id AND w.id = c.work_id |
|
|
|
|
WHERE |
|
|
|
|
session_id = $sessionId AND |
|
|
|
|
$sessionCondition AND |
|
|
|
|
parent_id = $parentId AND |
|
|
|
|
w.c_id = ".$courseInfo['real_id']; |
|
|
|
|
|
|
|
|
@ -2958,6 +2968,7 @@ function getLastWorkStudentFromParent( |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$work = Database::get_course_table(TABLE_STUDENT_PUBLICATION); |
|
|
|
|
$sessionCondition = api_get_session_condition($sessionId, false); |
|
|
|
|
$commentTable = Database::get_course_table(TABLE_STUDENT_PUBLICATION_ASSIGNMENT_COMMENT); |
|
|
|
|
$parentId = intval($parentId); |
|
|
|
|
|
|
|
|
@ -2965,7 +2976,7 @@ function getLastWorkStudentFromParent( |
|
|
|
|
FROM $commentTable c INNER JOIN $work w |
|
|
|
|
ON c.c_id = w.c_id AND w.id = c.work_id |
|
|
|
|
WHERE |
|
|
|
|
session_id = $sessionId AND |
|
|
|
|
$sessionCondition AND |
|
|
|
|
parent_id = $parentId AND |
|
|
|
|
w.c_id = ".$courseInfo['real_id']." |
|
|
|
|
ORDER BY w.sent_date |
|
|
|
@ -3008,12 +3019,13 @@ function getLastWorkStudentFromParentByUser( |
|
|
|
|
$userId = intval($userId); |
|
|
|
|
$work = Database::get_course_table(TABLE_STUDENT_PUBLICATION); |
|
|
|
|
$parentId = intval($parentId); |
|
|
|
|
$sessionCondition = api_get_session_condition($sessionId); |
|
|
|
|
|
|
|
|
|
$sql = "SELECT * |
|
|
|
|
FROM $work |
|
|
|
|
WHERE |
|
|
|
|
user_id = $userId AND |
|
|
|
|
session_id = $sessionId AND |
|
|
|
|
user_id = $userId |
|
|
|
|
$sessionCondition AND |
|
|
|
|
parent_id = $parentId AND |
|
|
|
|
c_id = ".$courseInfo['real_id']." |
|
|
|
|
ORDER BY sent_date DESC |
|
|
|
@ -3571,7 +3583,7 @@ function processWorkForm($workInfo, $values, $courseInfo, $sessionId, $groupId, |
|
|
|
|
'post_group_id' => $groupId, |
|
|
|
|
'sent_date' => api_get_utc_datetime(), |
|
|
|
|
'parent_id' => $workInfo['id'], |
|
|
|
|
'session_id' => $sessionId, |
|
|
|
|
'session_id' => $sessionId ? $sessionId : null, |
|
|
|
|
'user_id' => $userId, |
|
|
|
|
'has_properties' => 0, |
|
|
|
|
'qualification' => 0 |
|
|
|
@ -3621,7 +3633,7 @@ function processWorkForm($workInfo, $values, $courseInfo, $sessionId, $groupId, |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Creates a new task (directory) in the assignment tool |
|
|
|
|
* @param array $params |
|
|
|
|
* @param array $formValues |
|
|
|
|
* @param int $user_id |
|
|
|
|
* @param array $courseInfo |
|
|
|
|
* @param int $group_id |
|
|
|
@ -3637,11 +3649,11 @@ function processWorkForm($workInfo, $values, $courseInfo, $sessionId, $groupId, |
|
|
|
|
*/ |
|
|
|
|
function addDir($formValues, $user_id, $courseInfo, $group_id, $session_id) |
|
|
|
|
{ |
|
|
|
|
$work_table = Database::get_course_table(TABLE_STUDENT_PUBLICATION); |
|
|
|
|
$em = Database::getManager(); |
|
|
|
|
|
|
|
|
|
$user_id = intval($user_id); |
|
|
|
|
$group_id = intval($group_id); |
|
|
|
|
$session_id = intval($session_id); |
|
|
|
|
$session = $em->find('ChamiloCoreBundle:Session', $session_id); |
|
|
|
|
|
|
|
|
|
$base_work_dir = api_get_path(SYS_COURSE_PATH).$courseInfo['path'].'/work'; |
|
|
|
|
$course_id = $courseInfo['real_id']; |
|
|
|
@ -3650,59 +3662,63 @@ function addDir($formValues, $user_id, $courseInfo, $group_id, $session_id) |
|
|
|
|
$directory = disable_dangerous_file($directory); |
|
|
|
|
$created_dir = create_unexisting_work_directory($base_work_dir, $directory); |
|
|
|
|
|
|
|
|
|
if (!empty($created_dir)) { |
|
|
|
|
$dirName = '/'.$created_dir; |
|
|
|
|
$today = api_get_utc_datetime(); |
|
|
|
|
|
|
|
|
|
$params = [ |
|
|
|
|
'c_id' => $course_id, |
|
|
|
|
'url' => $dirName, |
|
|
|
|
'title' => $formValues['new_dir'], |
|
|
|
|
'description' => $formValues['description'], |
|
|
|
|
'author' => '', |
|
|
|
|
'active' => '1', |
|
|
|
|
'accepted' => '1', |
|
|
|
|
'filetype' => 'folder', |
|
|
|
|
'post_group_id' => $group_id, |
|
|
|
|
'sent_date' => $today, |
|
|
|
|
'qualification' => $formValues['qualification'] != '' ? $formValues['qualification'] : 0, |
|
|
|
|
'parent_id' => 0, |
|
|
|
|
'qualificator_id' => 0, |
|
|
|
|
'weight' => !empty($formValues['weight']) ? $formValues['weight'] : 0, |
|
|
|
|
'session_id' => $session_id, |
|
|
|
|
'allow_text_assignment' => $formValues['allow_text_assignment'], |
|
|
|
|
'contains_file' => 0, |
|
|
|
|
'user_id' => $user_id, |
|
|
|
|
'has_properties' => 0, |
|
|
|
|
'document_id' => 0 |
|
|
|
|
]; |
|
|
|
|
$id = Database::insert($work_table, $params); |
|
|
|
|
|
|
|
|
|
if ($id) { |
|
|
|
|
|
|
|
|
|
$sql = "UPDATE $work_table SET id = iid WHERE iid = $id"; |
|
|
|
|
Database::query($sql); |
|
|
|
|
|
|
|
|
|
// Folder created |
|
|
|
|
api_item_property_update( |
|
|
|
|
$courseInfo, |
|
|
|
|
'work', |
|
|
|
|
$id, |
|
|
|
|
'DirectoryCreated', |
|
|
|
|
$user_id, |
|
|
|
|
$group_id |
|
|
|
|
); |
|
|
|
|
if (empty($created_dir)) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
updatePublicationAssignment($id, $formValues, $courseInfo, $group_id); |
|
|
|
|
$dirName = '/'.$created_dir; |
|
|
|
|
$today = new DateTime(api_get_utc_datetime(), new DateTimeZone('UTC')); |
|
|
|
|
|
|
|
|
|
$workTable = new \Chamilo\CourseBundle\Entity\CStudentPublication(); |
|
|
|
|
$workTable |
|
|
|
|
->setCId($course_id) |
|
|
|
|
->setUrl($dirName) |
|
|
|
|
->setTitle($formValues['new_dir']) |
|
|
|
|
->setDescription($formValues['description']) |
|
|
|
|
->setActive(true) |
|
|
|
|
->setAccepted(true) |
|
|
|
|
->setFiletype('folder') |
|
|
|
|
->setPostGroupId($group_id) |
|
|
|
|
->setSentDate($today) |
|
|
|
|
->setQualification($formValues['qualification'] != '' ? $formValues['qualification'] : 0) |
|
|
|
|
->setParentId(0) |
|
|
|
|
->setQualificatorId(0) |
|
|
|
|
->setWeight(!empty($formValues['weight']) ? $formValues['weight'] : 0) |
|
|
|
|
->setSession($session) |
|
|
|
|
->setAllowTextAssignment($formValues['allow_text_assignment']) |
|
|
|
|
->setContainsFile(0) |
|
|
|
|
->setUserId($user_id) |
|
|
|
|
->setHasProperties(0) |
|
|
|
|
->setDocumentId(0); |
|
|
|
|
|
|
|
|
|
$em->persist($workTable); |
|
|
|
|
$em->flush(); |
|
|
|
|
|
|
|
|
|
$workTable->setId($workTable->getIid()); |
|
|
|
|
$em->merge($workTable); |
|
|
|
|
$em->flush(); |
|
|
|
|
|
|
|
|
|
// Folder created |
|
|
|
|
api_item_property_update( |
|
|
|
|
$courseInfo, |
|
|
|
|
'work', |
|
|
|
|
$workTable->getIid(), |
|
|
|
|
'DirectoryCreated', |
|
|
|
|
$user_id, |
|
|
|
|
$group_id |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
if (api_get_course_setting('email_alert_students_on_new_homework') == 1) { |
|
|
|
|
send_email_on_homework_creation($course_id, $session_id, $id); |
|
|
|
|
} |
|
|
|
|
updatePublicationAssignment($workTable->getIid(), $formValues, $courseInfo, $group_id); |
|
|
|
|
|
|
|
|
|
return $id; |
|
|
|
|
} |
|
|
|
|
if (api_get_course_setting('email_alert_students_on_new_homework') == 1) { |
|
|
|
|
send_email_on_homework_creation( |
|
|
|
|
$course_id, |
|
|
|
|
$session ? $session->getId() : 0, |
|
|
|
|
$workTable->getIid() |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
return $workTable->getIid(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -3750,7 +3766,9 @@ function updateWork($workId, $params, $courseInfo, $sessionId = 0) |
|
|
|
|
$filteredParams, |
|
|
|
|
array( |
|
|
|
|
'id = ? AND c_id = ? AND session_id = ? ' => array( |
|
|
|
|
$workId, $courseInfo['real_id'], $sessionId |
|
|
|
|
$workId, |
|
|
|
|
$courseInfo['real_id'], |
|
|
|
|
$sessionId ? $sessionId : null |
|
|
|
|
) |
|
|
|
|
) |
|
|
|
|
); |
|
|
|
|