Merge branch '1.11.x' of github.com:chamilo/chamilo-lms into 1.11.x

pull/2487/head
jmontoyaa 9 years ago
commit 9e592b7901
  1. 7
      .github/ISSUE_TEMPLATE.md
  2. 7
      main/admin/user_export.php
  3. 4
      main/exercise/fill_blanks.class.php
  4. 2
      main/install/configuration.dist.php
  5. 11
      main/lang/english/trad4all.inc.php
  6. 11
      main/lang/french/trad4all.inc.php
  7. 11
      main/lang/spanish/trad4all.inc.php
  8. 11
      main/session/resume_session.php
  9. 166
      main/user/user_export.php
  10. 4
      main/work/upload.php

@ -1,5 +1,8 @@
### Expected behavior / Resultado esperado / Résultat attendu
### Current behavior / Resultado actual / Résultat actuel
### Actual behavior / Resultado real / Résultat réel
### Expected behavior / Resultado esperado / Résultat attendu
### Steps to reproduce / Pasos para reproducir / Étapes pour reproduire
### Chamilo Version / Versión de Chamilo / Version de Chamilo

@ -68,7 +68,7 @@ if ($form->validate()) {
$file_type = $export['file_type'];
$course_code = Database::escape_string($export['course_code']);
$courseInfo = api_get_course_info($course_code);
$courseId = $courseInfo['real_id'];
$courseId = isset($courseInfo['real_id']) ? $courseInfo['real_id'] : 0;
$courseSessionValue = explode(':', $export['course_session']);
$courseSessionCode = '';
@ -94,7 +94,8 @@ if ($form->validate()) {
u.auth_source AS AuthSource,
u.status AS Status,
u.official_code AS OfficialCode,
u.phone AS Phone";
u.phone AS Phone,
u.registration_date AS RegistrationDate";
if (strlen($course_code) > 0) {
$sql .= " FROM $user_table u, $course_user_table cu
WHERE
@ -141,6 +142,7 @@ if ($form->validate()) {
'Status',
'OfficialCode',
'PhoneNumber',
'RegistrationDate'
);
} else {
$data[] = array(
@ -154,6 +156,7 @@ if ($form->validate()) {
'Status',
'OfficialCode',
'PhoneNumber',
'RegistrationDate'
);
}

@ -823,6 +823,10 @@ class FillBlanks extends Question
$tblTrackEAttempt = Database::get_main_table(TABLE_STATISTIC_TRACK_E_ATTEMPT);
$tblTrackEExercise = Database::get_main_table(TABLE_STATISTIC_TRACK_E_EXERCISES);
$courseId = api_get_course_int_id();
// If no user has answered questions, no need to go further. Return empty array.
if (empty($studentsIdList)) {
return array();
}
// request to have all the answers of student for this question
// student may have doing it several time
// student may have not answered the bracket id, in this case, is result of the answer is empty

@ -275,3 +275,5 @@ $_configuration['system_stable'] = NEW_VERSION_STABLE;
// $_configuration['allow_redirect_to_session_after_inscription_about'] = false;
// Allows to do a remove_XSS in course introduction with user status COURSEMANAGERLOWSECURITY in order to accept all embed type videos (like vimeo, wistia, etc)
// $_configuration['allow_course_introduction_low_security'] = false;
// Prevents the duplicate upload in assignments
// $_configuration['assignment_prevent_duplicate_upload'] = false;

@ -6659,11 +6659,12 @@ $SupportedScormContentMakers = "Scorm Authoring tools supported";
$DisableEndDate = "Disable end date";
$ForumCategories = "Forum Categories";
$Copy = "Copy";
$ArchiveDirCleanup = "Archive directory cleanup";
$ArchiveDirCleanupDescr = "Chamilo keeps a copy of most of the temporary files it generates (for backups, exports, copies, etc) into its archive/ directory. After a while, this can add up to a very large amount of disk space being used for nothing. Click the button below to clean your archive directory up. This operation should be automated by a cron process, but if this is not possible, you can come to this page regularly to remove all temporary files from the directory.";
$ArchiveDirCleanup = "Cleanup of cache and temporary files";
$ArchiveDirCleanupDescr = "Chamilo keeps a copy of most of the temporary files it generates (for backups, exports, copies, etc) into its app/cache/ directory. After a while, this can add up to a very large amount of disk space being used for nothing. Click the button below to clean your archive directory up. This operation should be automated by a cron process, but if this is not possible, you can come to this page regularly to remove all temporary files from the directory.
This feature also cleans up the theme cache files.";
$ArchiveDirCleanupProceedButton = "Proceed with cleanup";
$ArchiveDirCleanupSucceeded = "The archive/ directory cleanup has been executed successfully.";
$ArchiveDirCleanupFailed = "For some reason, the archive/ directory could not be cleaned up. Please clean it up by manually connecting to the server and delete all files and symbolic links under the chamilo/archive/ directory, except the .htaccess file. On Linux: # find archive/ \( -type f -or -type l \) -not -name .htaccess -exec echo rm -v \{} \;";
$ArchiveDirCleanupSucceeded = "The app/cache/ directory cleanup has been executed successfully.";
$ArchiveDirCleanupFailed = "For some reason, the app/cache/ directory could not be cleaned up. Please clean it up by manually connecting to the server and delete all files and symbolic links under the chamilo/app/cache/ directory, except the .htaccess file. On Linux: # find app/cache/ \( -type f -or -type l \) -not -name .htaccess -exec echo rm -v \{} \;";
$EnableStartTime = "Enable start time";
$EnableEndTime = "Enable end time";
$LocalTimeUsingPortalTimezoneXIsY = "The local time in the portal timezone (%s) is %s";
@ -7960,4 +7961,6 @@ Then create a zip file with those modified files and upload it in this form.";
$PostsPendingModeration = "Posts pending moderation";
$OnlyUsersFromCourseSession = "Only users from one course in a session";
$ServerXForwardedForInfo = "If the server is behind a proxy or firewall (and only in those cases), it might be using the X_FORWARDED_FOR HTTP header to show the remote user IP (yours, in this case).";
$GeolocalizationCoordinates = "Geolocalization by coordinates";
$ExportUsersOfACourse = "Export users of a course";
?>

@ -6651,11 +6651,12 @@ $SupportedScormContentMakers = "Paquets SCORM supportés";
$DisableEndDate = "Désactiver date de fin";
$ForumCategories = "Catégories de forums";
$Copy = "Copie";
$ArchiveDirCleanup = "Vidange du répertoire archive";
$ArchiveDirCleanupDescr = "Chamilo garde une copie de la plupart des fichiers temporaires qu'il génère (pour les exports, copies et backups divers) dans son répertoire archive/. Après un certain temps, ces fichiers peuvent s'accumuler et représenter un usage de l'espace disque assez important et sans intérêt particulier. Cliquez sur le bouton ci-dessous pour vider ce répertoire immédiatement. Cette opération devrait en fait être exécutée automatiquement depuis un processus cron, mais si cela représente une difficulté importante dans votre contexte, vous pouvez visiter cette page de temps en temps pour éliminer tous les fichiers temporaires du répertoire.";
$ArchiveDirCleanup = "Vidange du cache et des fichiers temporaires";
$ArchiveDirCleanupDescr = "Chamilo garde une copie de la plupart des fichiers temporaires qu'il génère (pour les exports, copies et backups divers) dans son répertoire app/cache/. Après un certain temps, ces fichiers peuvent s'accumuler et représenter un usage de l'espace disque assez important et sans intérêt particulier. Cliquez sur le bouton ci-dessous pour vider ce répertoire immédiatement. Cette opération devrait en fait être exécutée automatiquement depuis un processus cron, mais si cela représente une difficulté importante dans votre contexte, vous pouvez visiter cette page de temps en temps pour éliminer tous les fichiers temporaires du répertoire.
Cette fonctionnalité nettoie également le cache des thèmes graphiques.";
$ArchiveDirCleanupProceedButton = "Vidanger";
$ArchiveDirCleanupSucceeded = "Le répertoire archive/ a été vidangé.";
$ArchiveDirCleanupFailed = "Le répertoire archive/ n'a pas pu être vidé entièrement. Veuillez le vider manuellement en vous connectant au serveur et en supprimant et liens symboliques du répertoire chamilo/archive, excepté le fichier .htaccess. Sous Linux: # find archive/ \( -type f -or -type l \) -not -name .htaccess -exec echo rm -v \{} \;";
$ArchiveDirCleanupSucceeded = "Le répertoire app/cache/ a été vidangé.";
$ArchiveDirCleanupFailed = "Le répertoire app/cache/ n'a pas pu être vidé entièrement. Veuillez le vider manuellement en vous connectant au serveur et en supprimant et liens symboliques du répertoire chamilo/app/cache, excepté le fichier .htaccess. Sous Linux: # find archive/ \( -type f -or -type l \) -not -name .htaccess -exec echo rm -v \{} \;";
$EnableStartTime = "Activer date de début";
$EnableEndTime = "Utiliser date de fin";
$LocalTimeUsingPortalTimezoneXIsY = "L'heure locale selon la zone horaire du portail (%s) est %s";
@ -7907,4 +7908,6 @@ $UploadCorrectionsExplanationWithDownloadLinkX = "Veuillez d'abord télécharger
$PostsPendingModeration = "Participations en attente de modération";
$OnlyUsersFromCourseSession = "Seulement les utilisateurs d'un cours dans une session";
$ServerXForwardedForInfo = "Si le serveur est derrière un proxy ou un firewall (et uniquement dans ces cas), il pourrait utiliser le header HTTP X_FORWARDED_FOR pour montrer l'adresse IP de l'utilisateur distant (la vôtre, dans ce cas précis).";
$GeolocalizationCoordinates = "Géolocalisation par coordonnées";
$ExportUsersOfACourse = "Exporter les utilisateurs d'un cours";
?>

@ -6660,11 +6660,12 @@ $SupportedScormContentMakers = "Paquetes Scorm soportados";
$DisableEndDate = "Deshabilitar fecha final";
$ForumCategories = "Categorías de foro";
$Copy = "Copiar";
$ArchiveDirCleanup = "Limpieza del directorio archive";
$ArchiveDirCleanupDescr = "Chamilo guarda una copia de los archivos temporales que genera (para los backups, las exportaciones, las copias, etc) dentro del directorio archive/. Pasado un tiempo, todo esto puede llegar a ocupar bastante espacio en el disco duro. Si hace clic en el siguiente botón ejecutará una limpieza manual de este directorio. Esta operación debería ser realizada regularmente mediante la utilidad cron de Linux, pero si esto no es posible en su entorno puede utilizar esta página para eliminar todos los archivos temporales cada cierto tiempo.";
$ArchiveDirCleanup = "Limpieza de caché y archivos temporales";
$ArchiveDirCleanupDescr = "Chamilo guarda una copia de los archivos temporales que genera (para los backups, las exportaciones, las copias, etc) dentro del directorio app/cache/. Pasado un tiempo, todo esto puede llegar a ocupar bastante espacio en el disco duro. Si hace clic en el siguiente botón ejecutará una limpieza manual de este directorio. Esta operación debería ser realizada regularmente mediante la utilidad cron de Linux, pero si esto no es posible en su entorno puede utilizar esta página para eliminar todos los archivos temporales cada cierto tiempo.
Esta opción limpia el caché de temas también.";
$ArchiveDirCleanupProceedButton = "Ejecutar la limpieza";
$ArchiveDirCleanupSucceeded = "El contenido del directorio archive/ ha sido eliminado.";
$ArchiveDirCleanupFailed = "Por alguna razón (quizá por falta de permisos), no se pudo limpiar la carpeta archive/. Puede limpiarla manualmente conectándose al servidor y eliminando todo el contenido de la carpeta chamilo/archive/, excepto el fichero .htaccess.";
$ArchiveDirCleanupSucceeded = "El contenido del directorio app/cache/ ha sido eliminado.";
$ArchiveDirCleanupFailed = "Por alguna razón (quizá por falta de permisos), no se pudo limpiar la carpeta app/cache/. Puede limpiarla manualmente conectándose al servidor y eliminando todo el contenido de la carpeta chamilo/app/cache/, excepto el fichero .htaccess.";
$EnableStartTime = "Usar tiempo de publicación";
$EnableEndTime = "Usar tiempo de fin de publicación";
$LocalTimeUsingPortalTimezoneXIsY = "La hora local usando la zona horaria del portal (%s) es %s";
@ -7975,4 +7976,6 @@ $UploadCorrectionsExplanationWithDownloadLinkX = "Primero necesita descargar las
$PostsPendingModeration = "Contribuciones a la espera de moderación";
$OnlyUsersFromCourseSession = "Solo usuarios de un curso en una sesión";
$ServerXForwardedForInfo = "Si su servidor está detrás de un reverse proxy o un firewall (y únicamente en estos casos), podría usar la cabecera HTTP X_FORWARDED_FOR para mostrar la dirección IP del usuario distante (usted, en este caso).";
$GeolocalizationCoordinates = "Geolocalización por coordenadas";
$ExportUsersOfACourse = "Exportar usuarios de un curso";
?>

@ -248,9 +248,11 @@ if ($sessionInfo['nbr_courses'] == 0) {
Display::return_icon('course_home.gif', get_lang('Course')).'</a>
'.$orderButtons.'
<a href="session_course_user_list.php?id_session='.$sessionId.'&course_code='.$course->getCode().'">'.
Display::return_icon('user.png', get_lang('Edit'), '', ICON_SIZE_SMALL).'</a>
<a href="'.api_get_path(WEB_CODE_PATH).'/user/user_import.php?action=import&cidReq='.$course->getCode().'&id_session='.$sessionId.'">'.
Display::return_icon('user.png', get_lang('Users'), '', ICON_SIZE_SMALL).'</a>
<a href="'.api_get_path(WEB_CODE_PATH).'user/user_import.php?action=import&cidReq='.$course->getCode().'&id_session='.$sessionId.'">'.
Display::return_icon('import_csv.png', get_lang('ImportUsersToACourse'), null, ICON_SIZE_SMALL).'</a>
<a href="'.api_get_path(WEB_CODE_PATH).'user/user_export.php?file_type=csv&course_session='.$course->getCode().':'.$sessionId.'&addcsvheader=1">'.
Display::return_icon('export_csv.png', get_lang('ExportUsersOfACourse'), null, ICON_SIZE_SMALL).'</a>
<a href="../tracking/courseLog.php?id_session='.$sessionId.'&cidReq='.$course->getCode().$orig_param.'&hide_course_breadcrumb=1">'.
Display::return_icon('statistics.gif', get_lang('Tracking')).'</a>&nbsp;
<a href="session_course_edit.php?id_session='.$sessionId.'&page=resume_session.php&course_code='.$course->getCode().''.$orig_param.'">'.
@ -273,6 +275,11 @@ $url .= Display::url(
Display::return_icon('import_csv.png', get_lang('ImportUsers'), array(), ICON_SIZE_SMALL),
"session_user_import.php?id_session=$sessionId"
);
$url .= Display::url(
Display::return_icon('export_csv.png', get_lang('ExportUsers'), array(), ICON_SIZE_SMALL),
"/main/user/user_export.php?file_type=csv&session=$sessionId&addcsvheader=1"
);
$userListToShow = Display::page_subheader(get_lang('UserList').$url);

@ -0,0 +1,166 @@
<?php
/* For licensing terms, see /license.txt */
require_once __DIR__.'/../inc/global.inc.php';
$this_section = SECTION_COURSES;
api_protect_admin_script(true, true);
$export = [];
$export['file_type'] = isset($_REQUEST['file_type']) ? $_REQUEST['file_type'] : null;
$export['course_code'] = isset($_REQUEST['course_code']) ? $_REQUEST['course_code'] : null;
$export['course_session'] = isset($_REQUEST['course_session']) ? $_REQUEST['course_session'] : null;
$export['addcsvheader'] = isset($_REQUEST['addcsvheader']) ? $_REQUEST['addcsvheader'] : null;
$export['session'] = isset($_REQUEST['session']) ? $_REQUEST['session'] : null;
// Database table definitions
$course_table = Database:: get_main_table(TABLE_MAIN_COURSE);
$user_table = Database:: get_main_table(TABLE_MAIN_USER);
$course_user_table = Database:: get_main_table(TABLE_MAIN_COURSE_USER);
$session_course_user_table = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$session_user_table = Database::get_main_table(TABLE_MAIN_SESSION_USER);
$file_type = $export['file_type'];
$course_code = Database::escape_string($export['course_code']);
$courseInfo = api_get_course_info($course_code);
$courseId = isset($courseInfo['real_id']) ? $courseInfo['real_id'] : 0;
$courseSessionValue = explode(':', $export['course_session']);
$courseSessionCode = '';
$sessionId = 0;
$courseSessionId = 0;
$sessionInfo = [];
if (!empty($export['session'])) {
$sessionInfo = api_get_session_info($export['session']);
$sessionId = isset($sessionInfo['id']) ? $sessionInfo['id'] : 0;
}
if (is_array($courseSessionValue) && isset($courseSessionValue[1])) {
$courseSessionCode = $courseSessionValue[0];
$sessionId = $courseSessionValue[1];
$courseSessionInfo= api_get_course_info($courseSessionCode);
$courseSessionId = $courseSessionInfo['real_id'];
$sessionInfo = api_get_session_info($sessionId);
}
$sql = "SELECT
u.user_id AS UserId,
u.lastname AS LastName,
u.firstname AS FirstName,
u.email AS Email,
u.username AS UserName,
".(($_configuration['password_encryption']!='none')?" ":"u.password AS Password, ")."
u.auth_source AS AuthSource,
u.status AS Status,
u.official_code AS OfficialCode,
u.phone AS Phone,
u.registration_date AS RegistrationDate";
if (strlen($course_code) > 0) {
$sql .= " FROM $user_table u, $course_user_table cu
WHERE
u.user_id = cu.user_id AND
cu.c_id = $courseId AND
cu.relation_type<>".COURSE_RELATION_TYPE_RRHH."
ORDER BY lastname,firstname";
$filename = 'export_users_'.$course_code.'_'.api_get_local_time();
} else if (strlen($courseSessionCode) > 0) {
$sql .= " FROM $user_table u, $session_course_user_table scu
WHERE
u.user_id = scu.user_id AND
scu.c_id = $courseSessionId AND
scu.session_id = $sessionId
ORDER BY lastname,firstname";
$filename = 'export_users_'.$courseSessionCode.'_'.$sessionInfo['name'].'_'.api_get_local_time();
} else if ($sessionId > 0) {
$sql .= " FROM $user_table u, $session_user_table su
WHERE
u.user_id = su.user_id AND
su.session_id = $sessionId
ORDER BY lastname,firstname";
$filename = 'export_users_'.$sessionInfo['name'].'_'.api_get_local_time();
} else {
if (api_is_multiple_url_enabled()) {
$tbl_user_rel_access_url= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$access_url_id = api_get_current_access_url_id();
if ($access_url_id != -1) {
$sql.= " FROM $user_table u
INNER JOIN $tbl_user_rel_access_url as user_rel_url
ON (u.user_id= user_rel_url.user_id)
WHERE access_url_id = $access_url_id
ORDER BY lastname,firstname";
}
} else {
$sql .= " FROM $user_table u ORDER BY lastname,firstname";
}
$filename = 'export_users_'.api_get_local_time();
}
$data = array();
$extra_fields = UserManager::get_extra_fields(0, 0, 5, 'ASC',false);
if ($export['addcsvheader']=='1' AND $export['file_type']=='csv') {
if ($_configuration['password_encryption'] != 'none') {
$data[] = array(
'UserId',
'LastName',
'FirstName',
'Email',
'UserName',
'AuthSource',
'Status',
'OfficialCode',
'PhoneNumber',
'RegistrationDate'
);
} else {
$data[] = array(
'UserId',
'LastName',
'FirstName',
'Email',
'UserName',
'Password',
'AuthSource',
'Status',
'OfficialCode',
'PhoneNumber',
'RegistrationDate'
);
}
foreach($extra_fields as $extra) {
$data[0][]=$extra[1];
}
}
$res = Database::query($sql);
while($user = Database::fetch_array($res,'ASSOC')) {
$student_data = UserManager:: get_extra_user_data(
$user['UserId'],
true,
false
);
foreach($student_data as $key=>$value) {
$key = substr($key, 6);
if (is_array($value)) {
$user[$key] = $value['extra_' . $key];
} else {
$user[$key] = $value;
}
}
$data[] = $user ;
}
switch ($file_type) {
case 'xml':
Export::arrayToXml($data, $filename, 'Contact', 'Contacts');
exit;
break;
case 'csv':
Export::arrayToCsv($data, $filename);
exit;
case 'xls':
Export::arrayToXls($data, $filename);
exit;
break;
}

@ -99,7 +99,9 @@ if ($form->validate()) {
$course_info,
$session_id,
$group_id,
$user_id
$user_id,
[],
api_get_configuration_value('assignment_prevent_duplicate_upload')
);
$script = 'work_list.php';
if ($is_allowed_to_edit) {

Loading…
Cancel
Save