|
@@ -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
|
|
|
)
|
|
|
)
|
|
|
);
|