Merge pull request #1857 from miky96es/Feature-survey-copy

Feature copiar encuesta en cualquier curso dentro o fuera de una sesión.
pull/2487/head
Julio Montoya 8 years ago committed by GitHub
commit 92d04581b1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 39
      main/inc/lib/course.lib.php
  2. 68
      main/survey/copy_survey.php
  3. 155
      main/survey/survey.lib.php
  4. 4
      main/survey/surveyUtil.class.php

@ -6548,4 +6548,43 @@ class CourseManager
return $categories;
}
/**
* Returns an array assoc with info from course and session, of all courses, inside sessions and not inside.
* @return array
*/
public static function getAllCoursesArray()
{
// Database table definitions
$courseTable = Database::get_main_table(TABLE_MAIN_COURSE);
$sessionTable = Database::get_main_table(TABLE_MAIN_SESSION);
$sessionCourseTable = Database::get_main_table(TABLE_MAIN_SESSION_COURSE);
//select all courses without sessions
$sql = "SELECT course.id id,course.title title,0 session_id, course.code code
FROM $courseTable course
ORDER BY course.title ASC" ;
//select all courses inside sessions
$sql1 = "SELECT course.id id,course.title title,session.id session_id,session.name session_name,
course.code code
FROM $courseTable course ,$sessionTable session, $sessionCourseTable sessioncourse
WHERE course.id=sessioncourse.c_id
AND session.id=sessioncourse.session_id ORDER BY session.name ASC, course.title ASC" ;
$data = [];
//input rows of all courses not inside sessions in a array $data
$res = Database::query($sql);
if (Database::num_rows($res) > 0) {
while ($row = Database::fetch_array($res, "ASSOC")) {
$data[] = $row;
}
}
//input rows of all courses inside sessions in a array $data
$res1 = Database::query($sql1);
if (Database::num_rows($res1) > 0) {
while ($row = Database::fetch_array($res1, "ASSOC")) {
$data[] = $row;
}
}
return $data;
}
}

@ -30,47 +30,53 @@ echo Display::page_header(get_lang('CopySurvey'));
if (Security::check_token('post')) {
// Clear token
Security::clear_token();
$surveyId = intval($_POST['surveys']);
$courseId = Security::remove_XSS($_POST['destination_course']);
$surveyCopyId = SurveyManager::copy_survey($surveyId, null, $courseId);
$surveyId = intval($_GET['survey_id']);
$arraySent = json_decode(Security::remove_XSS($_POST['destination_course']));
$courseId = $arraySent->courseId;
$sessionId = $arraySent->sessionId;
// Copy the survey to the target course
SurveyManager::empty_survey($surveyCopyId, $courseId);
$surveyCopyId = SurveyManager::copySurveySession($surveyId, $courseId, $sessionId);
// Empty the copied survey
echo Display::return_message(get_lang('SurveyCopied'), 'confirm');
SurveyManager::emptySurveyFromId($surveyCopyId);
Display::display_confirmation_message(get_lang('SurveyCopied'));
}
$surveys = SurveyManager::get_surveys(api_get_course_id(), api_get_session_id());
$courses = CourseManager::get_courses_list();
$form = new FormValidator(
'copy_survey',
'post',
'copy_survey.php?'.api_get_cidreq()
);
if (!$surveys) {
echo Display::return_message(get_lang('NoSurveyAvailable'), 'error');
}
if (count($courses) <= 1) {
echo Display::return_message(get_lang('CourseListNotAvailable'), 'error');
}
if ($surveys && count($courses) > 1) {
// Surveys select
$options = array();
foreach ($surveys as $survey) {
$options[$survey['survey_id']] = $survey['title'];
}
$form->addElement('select', 'surveys', get_lang('SelectSurvey'), $options);
// All-courses-but-current select
$currentCourseId = api_get_course_int_id();
$options = array();
foreach ($courses as $course) {
if ($course['id'] != $currentCourseId) {
$options[$course['id']] = $course['title'];
$survey = SurveyManager::get_survey($_GET['survey_id']);
$courses = CourseManager::getAllCoursesArray();
// Survey
$options = array();
$currentCourseId = api_get_course_int_id();
$currentSessionId = api_get_session_id();
$option = str_replace("&nbsp;", '', strip_tags($survey['title']));
$options = array();
foreach ($courses as $course) {
if (($course['id'] != $currentCourseId || $course['session_id'] != $currentSessionId) &&
(api_is_global_platform_admin() || (CourseManager::is_course_teacher(api_get_user_id(), $course['code'])
&& $course['session_id'] == 0) || api_is_coach($course['session_id'], $course['id']))) {
$value = array("courseId" => $course['id'], "sessionId" => $course['session_id']);
if (isset($course['session_name'])) {
$options[json_encode($value)] = $course['title'].' ['.$course['session_name'].']';
} else {
$options[json_encode($value)] = $course['title'];
}
}
}
$form = new FormValidator('copy_survey', 'post', 'copy_survey.php?survey_id='.$_GET['survey_id'].api_get_cidreq());
if (!$survey) {
Display::display_error_message(get_lang('NoSurveyAvailable'));
}
if (count($courses) < 1 || count($options) < 1) {
Display::display_error_message(get_lang('CourseListNotAvailable'));
}
if ($survey && count($courses) >= 1 && count($options) >= 1) {
$form->addElement('text', 'survey_title', get_lang('Survey'), array('value' => $option, 'disabled' => 'disabled'));
$form->addElement('select', 'destination_course', get_lang('SelectDestinationCourse'), $options);
$form->addButtonCopy(get_lang('CopySurvey'));
}
// Add Security token
$token = Security::get_token();
$form->addElement('hidden', 'sec_token');

@ -1865,4 +1865,159 @@ class SurveyManager
header('Location: '.api_get_path(WEB_CODE_PATH).'survey/fillsurvey.php?'.$urlParams.'&'.api_get_cidreq());
exit;
}
/**
* This function empty surveys (invitations and answers)
*
* @param int $surveyId id of the survey to empty
* @return true
*/
public static function emptySurveyFromId($surveyId)
{
// Database table definitions
$surveyInvitationTable = Database:: get_course_table(TABLE_SURVEY_INVITATION);
$surveyAnswerTable = Database:: get_course_table(TABLE_SURVEY_ANSWER);
$surveyTable = Database:: get_course_table(TABLE_SURVEY);
$surveyId = intval($surveyId);
$surveyData = self::getSurveyArrayFromId($surveyId);
$surveyCode = $surveyData['code'];
$courseId = intval($surveyData['c_id']);
$sessionId = intval($surveyData['session_id']);
$sql = "DELETE FROM $surveyInvitationTable
WHERE session_id =$sessionId AND c_id =$courseId AND survey_code ='$surveyCode'";
Database::query($sql);
$sql = "DELETE FROM $surveyAnswerTable WHERE survey_id=$surveyId";
Database::query($sql);
$sql = "UPDATE $surveyTable SET invited=0, answered=0 WHERE survey_id=$surveyId";
Database::query($sql);
return true;
}
/**
* This function copy survey specifying course id and session id where will be copied
*
* @param int $surveyId
* @param int $courseId
* @param int $sessionId
*
* @return bool when fails or return the new survey id
*/
public static function copySurveySession($surveyId, $courseId, $sessionId)
{
// Database table definitions
$surveyTable = Database::get_course_table(TABLE_SURVEY);
$surveyQuestionGroupTable = Database::get_course_table(TABLE_SURVEY_QUESTION_GROUP);
$surveyQuestionTable = Database::get_course_table(TABLE_SURVEY_QUESTION);
$surveyOptionsTable = Database::get_course_table(TABLE_SURVEY_QUESTION_OPTION);
$surveyId = intval($surveyId);
$courseId = intval($courseId);
$sessionId = intval($sessionId);
$surveyData = self::getSurveyArrayFromId($surveyId);
if (empty($surveyData)) {
return true;
}
$params = $surveyData;
$params['code'] = self::generate_unique_code($params['code']);
$params['c_id'] = $courseId;
unset($params['survey_id']);
$params['session_id'] = $sessionId;
$params['title'] = $params['title'] . ' ' . get_lang('Copy');
unset($params['iid']);
Database::insert($surveyTable, $params);
$newSurveyId = Database::insert_id();
$sql = "UPDATE $surveyTable SET survey_id =$newSurveyId WHERE iid =$newSurveyId";
Database::query($sql);
$sql = "SELECT * FROM $surveyQuestionGroupTable WHERE survey_id=$surveyId";
$res = Database::query($sql);
while ($row = Database::fetch_array($res, 'ASSOC')) {
$params = array(
'c_id' => $courseId,
'name' => $row['name'],
'description' => $row['description'],
'survey_id' => $newSurveyId
);
$insertId = Database::insert($surveyQuestionGroupTable, $params);
$sql = "UPDATE $surveyQuestionGroupTable SET id = iid WHERE iid = $insertId";
Database::query($sql);
$group_id[$row['id']] = $insertId;
}
// Get questions
$sql = "SELECT * FROM $surveyQuestionTable WHERE survey_id=$surveyId";
$res = Database::query($sql);
while ($row = Database::fetch_array($res, 'ASSOC')) {
$params = array(
'c_id' => $courseId,
'survey_id' => $newSurveyId,
'survey_question' => $row['survey_question'],
'survey_question_comment' => $row['survey_question_comment'],
'type' => $row['type'],
'display' => $row['display'],
'sort' => $row['sort'],
'shared_question_id' => $row['shared_question_id'],
'max_value' => $row['max_value'],
'survey_group_pri' => $row['survey_group_pri'],
'survey_group_sec1' => $row['survey_group_sec1'],
'survey_group_sec2' => $row['survey_group_sec2']
);
$insertId = Database::insert($surveyQuestionTable, $params);
$sql = "UPDATE $surveyQuestionTable SET question_id = iid WHERE iid =$insertId";
Database::query($sql);
$question_id[$row['question_id']] = $insertId;
}
// Get questions options
$sql = "SELECT * FROM $surveyOptionsTable WHERE survey_id=$surveyId";
$res = Database::query($sql);
while ($row = Database::fetch_array($res, 'ASSOC')) {
$params = array(
'c_id' => $courseId,
'question_id' => $question_id[$row['question_id']],
'survey_id' => $newSurveyId,
'option_text' => $row['option_text'],
'sort' => $row['sort'],
'value' => $row['value']
);
$insertId = Database::insert($surveyOptionsTable, $params);
$sql = "UPDATE $surveyOptionsTable SET question_option_id = $insertId WHERE iid = $insertId";
Database::query($sql);
}
return $newSurveyId;
}
/**
* Retrieves all the survey information as array
*
* @param integer $survey_id the id of the survey
*
* @return array
*/
public static function getSurveyArrayFromId($surveyId)
{
$surveyId=intval($surveyId);
// Table definition
$surveyTable = Database:: get_course_table(TABLE_SURVEY);
$sql = "SELECT * FROM $surveyTable WHERE survey_id=$surveyId";
$result = Database::query($sql);
$return = array();
if (Database::num_rows($result) > 0) {
$return = Database::fetch_array($result, 'ASSOC');
return $return;
}
}
}

@ -2820,6 +2820,10 @@ class SurveyUtil
api_get_path(WEB_CODE_PATH).'survey/generate_link.php?survey_id='.$survey_id.'&'.api_get_cidreq()
);
}
$return .= Display::url(
Display::return_icon('backup.png', get_lang('CopySurvey'), '', ICON_SIZE_SMALL),
'copy_survey.php?survey_id='.$survey_id.'&'.api_get_cidreq()
);
$return .= Display::url(
Display::return_icon('copy.png', get_lang('DuplicateSurvey'), '', ICON_SIZE_SMALL),
'survey_list.php?action=copy_survey&survey_id='.$survey_id.'&'.api_get_cidreq()

Loading…
Cancel
Save