Forma 2.1 - Problema Configurazione Elearning -> Gestione Menu
Posted: Fri Feb 15, 2019 3:22 pm
Ciao a tutti,
mi sono accorto che modificando un menu già associato ad uno o più corsi queste non propaga le modifiche al menu degli utenti già iscritti a tali corsi, l'unico modo sarebbe cancellare il corso e ricrearlo oppure disiscrivere tutti gli utenti dei corsi che hanno quel menu e iscriverli nuovamente.
Ora chiedo se una possibile soluzione sia modificare il file /appLms/admin/modules/amanmenu/amanmenu.php come segue:
Ho modificato la funzione 'mancustom()':
070: if($mod_perm) {
071: $content_h[] = '<img src="'.getPathImage().'standard/edit.png" title="'.$lang->def('_MOD').'" '
072: .'alt="'.$lang->def('_MOD').'" />';
073: $type_h[] = 'image';
074:
075: $content_h[] = '<img src="'.getPathImage().'standard/move.png" title="'.$lang->def('_MOD').' '.$lang->def('_COURSES').'" '
076: .'alt="'.$lang->def('_MOD').' '.$lang->def('_COURSES').'" height="19" width="19" />';
077: $type_h[] = 'image';
078:
079: $content_h[] = '<img src="'.getPathImage().'standard/delete.png" title="'.$lang->def('_DEL').'" '
080: .'alt="'.$lang->def('_DEL').'" />';
081: $type_h[] = 'image';
082: }
104: $content[] = '<a href="/forums.html?modname=amanmenu&op=modcustom&id_custom='.$id_custom.'"'
105: .'title="'.$lang->def('_MOD').' : '.$title_custom.'">'
106: .'<img src="'.getPathImage().'standard/edit.png" alt="'.$lang->def('_MOD').' : '.$title_custom.'" /></a>';
107:
108: $content[] = '<a class="confirm-popup" href="/forums.html?modname=amanmenu&op=fixuccustom&id_custom='.$id_custom.'"'
109: .' title="'.$lang->def('_MOD').' '.$lang->def('_COURSES').' : '.$title_custom.'">'
110: .'<img src="'.getPathImage().'standard/move.png" alt="'.$lang->def('_MOD').' '.$lang->def('_COURSES').' : '.$title_custom.'" height="19" width="19" /></a>';
111:
112: $content[] = '<a class="confirm-popup" href="/forums.html?modname=amanmenu&op=delcustom&id_custom='.$id_custom.'"'
113: .' title="'.$lang->def('_DEL').' : '.$title_custom.'">'
114: .'<img src="'.getPathImage().'standard/delete.png" alt="'.$lang->def('_DEL').' : '.$title_custom.'" /></a>';
119: require_once(_base_.'/lib/lib.dialog.php');
120: //setupHrefDialogBox('a[href*=delcustom]');
121: setupHrefDialogBox('a.confirm-popup');
Ho modificato la funzione 'manmenuDispatch($op)':
1283: case "delcustom" : {
1284: delcustom();
1285: };break;
1286: case "fixuccustom" : {
1287: fixUserCourseMenu();
1288: };break;
Ho creato la nuova funzione 'fixUserCourseMenu()' che deve essere sicuramente migliorata sia nella gestione degli errori che nelle prestazioni:
function fixUserCourseMenu() {
checkPerm('mod');
require_once(_base_.'/lib/lib.form.php');
$out =& $GLOBALS['page'];
$out->setWorkingZone('content');
$id_custom = Get::req('id_custom', DOTY_INT, 0);
if(Get::req('confirm', DOTY_INT, 0) == 1) {
require_once(_lms_.'/lib/lib.track_user.php');
require_once(_lms_.'/lib/lib.course.php');
require_once(_lms_.'/lib/lib.manmenu.php');
$course_man = new Man_Course();
$acl_man = Docebo::aclm();
$result = 1;
$query = "SELECT idCourse FROM ".$GLOBALS['prefix_lms']."_course WHERE id_menucustom = '$id_custom'";
$idCourses = sql_query($query);
while(list($id_course) = sql_fetch_row($idCourses)) {
$docebo_course = new DoceboCourse($id_course);
$user_levels = getSubscribedLevel($id_course, true);
$course_idst_list =& $course_man->getCourseIdstGroupLevel($id_course);
foreach(array_keys($user_levels) as $level) {
foreach ($user_levels[$level] as $user_id) {
$acl_man->removeFromGroup($course_idst_list[$level], $user_id);
}
}
foreach ($course_idst_list as $lv => $idst) {
$acl_man->deleteGroup($idst);
}
$alluser = getIDGroupAlluser($id_course);
$acl_man->deleteGroup($alluser);
$course_man->removeCourseMenu($id_course);
$course_idst_list =& $docebo_course->createCourseLevel($id_course);
createCourseMenuFromCustom($id_custom, $id_course, $course_idst_list);
foreach(array_keys($user_levels) as $level) {
foreach ($user_levels[$level] as $user_id) {
$acl_man->addToGroup($course_idst_list[$level], $user_id);
}
}
}
}
Util::jump_to('index.php?modname=amanmenu&op=mancustom&result='.$result);
}
E' possibile sapere se può essere una soluzione percorribile e se, dopo gli eventuali accorgimenti del caso da parte di un programmatore esperto, essere inserita in una prossima release?
Grazie,
Luca
mi sono accorto che modificando un menu già associato ad uno o più corsi queste non propaga le modifiche al menu degli utenti già iscritti a tali corsi, l'unico modo sarebbe cancellare il corso e ricrearlo oppure disiscrivere tutti gli utenti dei corsi che hanno quel menu e iscriverli nuovamente.
Ora chiedo se una possibile soluzione sia modificare il file /appLms/admin/modules/amanmenu/amanmenu.php come segue:
Ho modificato la funzione 'mancustom()':
070: if($mod_perm) {
071: $content_h[] = '<img src="'.getPathImage().'standard/edit.png" title="'.$lang->def('_MOD').'" '
072: .'alt="'.$lang->def('_MOD').'" />';
073: $type_h[] = 'image';
074:
075: $content_h[] = '<img src="'.getPathImage().'standard/move.png" title="'.$lang->def('_MOD').' '.$lang->def('_COURSES').'" '
076: .'alt="'.$lang->def('_MOD').' '.$lang->def('_COURSES').'" height="19" width="19" />';
077: $type_h[] = 'image';
078:
079: $content_h[] = '<img src="'.getPathImage().'standard/delete.png" title="'.$lang->def('_DEL').'" '
080: .'alt="'.$lang->def('_DEL').'" />';
081: $type_h[] = 'image';
082: }
104: $content[] = '<a href="/forums.html?modname=amanmenu&op=modcustom&id_custom='.$id_custom.'"'
105: .'title="'.$lang->def('_MOD').' : '.$title_custom.'">'
106: .'<img src="'.getPathImage().'standard/edit.png" alt="'.$lang->def('_MOD').' : '.$title_custom.'" /></a>';
107:
108: $content[] = '<a class="confirm-popup" href="/forums.html?modname=amanmenu&op=fixuccustom&id_custom='.$id_custom.'"'
109: .' title="'.$lang->def('_MOD').' '.$lang->def('_COURSES').' : '.$title_custom.'">'
110: .'<img src="'.getPathImage().'standard/move.png" alt="'.$lang->def('_MOD').' '.$lang->def('_COURSES').' : '.$title_custom.'" height="19" width="19" /></a>';
111:
112: $content[] = '<a class="confirm-popup" href="/forums.html?modname=amanmenu&op=delcustom&id_custom='.$id_custom.'"'
113: .' title="'.$lang->def('_DEL').' : '.$title_custom.'">'
114: .'<img src="'.getPathImage().'standard/delete.png" alt="'.$lang->def('_DEL').' : '.$title_custom.'" /></a>';
119: require_once(_base_.'/lib/lib.dialog.php');
120: //setupHrefDialogBox('a[href*=delcustom]');
121: setupHrefDialogBox('a.confirm-popup');
Ho modificato la funzione 'manmenuDispatch($op)':
1283: case "delcustom" : {
1284: delcustom();
1285: };break;
1286: case "fixuccustom" : {
1287: fixUserCourseMenu();
1288: };break;
Ho creato la nuova funzione 'fixUserCourseMenu()' che deve essere sicuramente migliorata sia nella gestione degli errori che nelle prestazioni:
function fixUserCourseMenu() {
checkPerm('mod');
require_once(_base_.'/lib/lib.form.php');
$out =& $GLOBALS['page'];
$out->setWorkingZone('content');
$id_custom = Get::req('id_custom', DOTY_INT, 0);
if(Get::req('confirm', DOTY_INT, 0) == 1) {
require_once(_lms_.'/lib/lib.track_user.php');
require_once(_lms_.'/lib/lib.course.php');
require_once(_lms_.'/lib/lib.manmenu.php');
$course_man = new Man_Course();
$acl_man = Docebo::aclm();
$result = 1;
$query = "SELECT idCourse FROM ".$GLOBALS['prefix_lms']."_course WHERE id_menucustom = '$id_custom'";
$idCourses = sql_query($query);
while(list($id_course) = sql_fetch_row($idCourses)) {
$docebo_course = new DoceboCourse($id_course);
$user_levels = getSubscribedLevel($id_course, true);
$course_idst_list =& $course_man->getCourseIdstGroupLevel($id_course);
foreach(array_keys($user_levels) as $level) {
foreach ($user_levels[$level] as $user_id) {
$acl_man->removeFromGroup($course_idst_list[$level], $user_id);
}
}
foreach ($course_idst_list as $lv => $idst) {
$acl_man->deleteGroup($idst);
}
$alluser = getIDGroupAlluser($id_course);
$acl_man->deleteGroup($alluser);
$course_man->removeCourseMenu($id_course);
$course_idst_list =& $docebo_course->createCourseLevel($id_course);
createCourseMenuFromCustom($id_custom, $id_course, $course_idst_list);
foreach(array_keys($user_levels) as $level) {
foreach ($user_levels[$level] as $user_id) {
$acl_man->addToGroup($course_idst_list[$level], $user_id);
}
}
}
}
Util::jump_to('index.php?modname=amanmenu&op=mancustom&result='.$result);
}
E' possibile sapere se può essere una soluzione percorribile e se, dopo gli eventuali accorgimenti del caso da parte di un programmatore esperto, essere inserita in una prossima release?
Grazie,
Luca