Skip to content

Commit

Permalink
Copy certificate when option "import gradebook" is selected see #9966
Browse files Browse the repository at this point in the history
  • Loading branch information
jmontoyaa committed Jul 16, 2015
1 parent a99ba60 commit dc8af33
Show file tree
Hide file tree
Showing 3 changed files with 110 additions and 23 deletions.
108 changes: 90 additions & 18 deletions main/inc/lib/document.lib.php
Expand Up @@ -1707,37 +1707,49 @@ public static function is_visible_by_id(

/**
* Allow attach a certificate to a course
* @param string The course id
* @param int The document id
* @param string $course_id
* @param int $document_id
* @param int $session_id
*
* @return void()
*/
public static function attach_gradebook_certificate($course_id, $document_id)
public static function attach_gradebook_certificate($course_id, $document_id, $session_id = 0)
{
$tbl_category = Database :: get_main_table(TABLE_MAIN_GRADEBOOK_CATEGORY);
$session_id = api_get_session_id();
if ($session_id == 0 || is_null($session_id)) {
$sql_session = 'AND (session_id=' . intval($session_id) . ' OR isnull(session_id)) ';
$session_id = intval($session_id);
if (empty($session_id)) {
$session_id = api_get_session_id();
}

if (empty($session_id)) {
$sql_session = 'AND (session_id = 0 OR isnull(session_id)) ';
} elseif ($session_id > 0) {
$sql_session = 'AND session_id=' . intval($session_id);
} else {
$sql_session = '';
}
$sql = 'UPDATE ' . $tbl_category . ' SET document_id="' . intval($document_id) . '"
WHERE course_code="' . Database::escape_string($course_id) . '" ' . $sql_session;
WHERE course_code="' . Database::escape_string($course_id) . '" ' . $sql_session;
Database::query($sql);
}

/**
* get the document id of default certificate
* @param string $course_id
* @param int $session_id
*
* @return int The default certificate id
*/
public static function get_default_certificate_id($course_id)
public static function get_default_certificate_id($course_id, $session_id = 0)
{
$tbl_category = Database :: get_main_table(TABLE_MAIN_GRADEBOOK_CATEGORY);
$session_id = api_get_session_id();
if ($session_id == 0 || is_null($session_id)) {
$sql_session = 'AND (session_id=' . intval($session_id) . ' OR isnull(session_id)) ';
$session_id = intval($session_id);
if (empty($session_id)) {
$session_id = api_get_session_id();
}

if (empty($session_id)) {
$sql_session = 'AND (session_id = 0 OR isnull(session_id)) ';
} elseif ($session_id > 0) {
$sql_session = 'AND session_id=' . intval($session_id);
} else {
Expand All @@ -1751,12 +1763,15 @@ public static function get_default_certificate_id($course_id)
return null;
}
$row = Database::fetch_array($rs);

return $row['document_id'];
}

/**
* allow replace user info in file html
* @param string The course code
* @param int $user_id
* @param string $course_code
* @param bool $is_preview
* @return string The html content of the certificate
*/
public static function replace_user_info_into_html($user_id, $course_code, $is_preview = false)
Expand Down Expand Up @@ -1788,7 +1803,11 @@ public static function replace_user_info_into_html($user_id, $course_code, $is_p
$my_content_html
);
}
return array('content' => $new_content, 'variables' => $all_user_info);

return array(
'content' => $new_content,
'variables' => $all_user_info,
);
}
return array();
}
Expand All @@ -1812,7 +1831,13 @@ static function get_all_info_to_certificate($user_id, $course_id, $is_preview =
$portal_name = api_get_setting('siteName');

//Extra user data information
$extra_user_info_data = UserManager::get_extra_user_data($user_id, false, false, false, true);
$extra_user_info_data = UserManager::get_extra_user_data(
$user_id,
false,
false,
false,
true
);

//Student information
$user_info = api_get_user_info($user_id);
Expand Down Expand Up @@ -4589,8 +4614,10 @@ public static function createDefaultAudioFolder($_course)
* @global string $default_course_dir Course directory
* @global string $js JS directory
* @param array $courseData The course info
* @param bool $fromBaseCourse
* @param int $sessionId
*/
public static function generateDefaultCertificate($courseData)
public static function generateDefaultCertificate($courseData, $fromBaseCourse = false, $sessionId = 0)
{
global $css, $img_dir, $default_course_dir, $js;
$codePath = api_get_path(REL_CODE_PATH);
Expand All @@ -4617,6 +4644,24 @@ public static function generateDefaultCertificate($courseData)
mkdir($filePath, api_get_permissions_for_new_directories());
}

if ($fromBaseCourse) {
$defaultCertificateId = self::get_default_certificate_id($courseData['code'], 0);

if (!empty($defaultCertificateId)) {
// We have a certificate from the course base
$documentData = DocumentManager::get_document_data_by_id(
$defaultCertificateId,
$courseData['code'],
false,
0
);

if ($documentData) {
$fileContent = file_get_contents($documentData['absolute_path']);
}
}
}

$defaultCertificateFile = $fp = @fopen($fileFullPath, 'w');

if ($defaultCertificateFile != false) {
Expand All @@ -4627,12 +4672,39 @@ public static function generateDefaultCertificate($courseData)
$fileSize = filesize($fileFullPath);
}

$documentId = add_document($courseData, $saveFilePath, $fileType, $fileSize, $title, $comment);
$documentId = add_document(
$courseData,
$saveFilePath,
$fileType,
$fileSize,
$title,
$comment,
0,//$readonly = 0,
true, //$save_visibility = true,
null, //$group_id = null,
$sessionId
);

$defaultCertificateId = self::get_default_certificate_id($courseData['code']);
api_item_property_update(
$courseData,
TOOL_DOCUMENT,
$documentId,
'DocumentAdded',
api_get_user_id(),
null,
null,
null,
null,
$sessionId
);

$defaultCertificateId = self::get_default_certificate_id(
$courseData['code'],
$sessionId
);

if (!isset($defaultCertificateId)) {
self::attach_gradebook_certificate($courseData['code'], $documentId);
self::attach_gradebook_certificate($courseData['code'], $documentId, $sessionId);
}
}

Expand Down
17 changes: 13 additions & 4 deletions main/inc/lib/sessionmanager.lib.php
Expand Up @@ -1990,6 +1990,7 @@ public static function unsubscribe_user_from_session($session_id, $user_id)
}
}
}

return true;
}

Expand Down Expand Up @@ -2025,11 +2026,11 @@ public static function add_courses_to_session(
$sql = "SELECT c_id
FROM $tbl_session_rel_course
WHERE session_id = $sessionId";
$rs = Database::query($sql );
$rs = Database::query($sql);
$existingCourses = Database::store_result($rs);
$nbr_courses = count($existingCourses);

// get list of users subscribed to this session
// Get list of users subscribed to this session
$sql = "SELECT user_id
FROM $tbl_session_rel_user
WHERE
Expand All @@ -2045,11 +2046,15 @@ public static function add_courses_to_session(
if (!in_array($existingCourse['c_id'], $courseList)) {

$sql = "DELETE FROM $tbl_session_rel_course
WHERE c_id = " . $existingCourse['c_id'] . " AND session_id = $sessionId";
WHERE
c_id = " . $existingCourse['c_id'] . " AND
session_id = $sessionId";
Database::query($sql);

$sql = "DELETE FROM $tbl_session_rel_course_rel_user
WHERE c_id = " . $existingCourse['c_id'] . " AND session_id = $sessionId";
WHERE
c_id = ".$existingCourse['c_id']." AND
session_id = $sessionId";
Database::query($sql);

Event::addEvent(
Expand Down Expand Up @@ -2110,6 +2115,7 @@ public static function add_courses_to_session(
$newCategoryIdList[$oldCategoryId] = $newId;

$parentId = $cat->get_parent_id();

if (!empty($parentId)) {
$newParentId = $newCategoryIdList[$parentId];
$cat->set_parent_id($newParentId);
Expand All @@ -2123,6 +2129,9 @@ public static function add_courses_to_session(
$link->add();
}
}

// Create
DocumentManager::generateDefaultCertificate($courseInfo, true, $sessionId);
}
}

Expand Down
8 changes: 7 additions & 1 deletion main/session/add_courses_to_session.php
Expand Up @@ -82,7 +82,13 @@ function remove_item(origin)
$courseList = $_POST['SessionCoursesList'];
$copyEvaluation = isset($_POST['copy_evaluation']);

SessionManager::add_courses_to_session($sessionId, $courseList, true, $copyEvaluation);
SessionManager::add_courses_to_session(
$sessionId,
$courseList,
true,
$copyEvaluation
);

Display::addFlash(Display::return_message(get_lang('Updated')));

if (isset($add)) {
Expand Down

0 comments on commit dc8af33

Please sign in to comment.