Forma 2.1 - Problema Configurazione Elearning -> Gestione Menu

Funzionalità di frontend per utenti e amministratori dei corsi: navigazione generale, materiali didattici, test, registro valutazioni, ecc.
Post Reply
User avatar
lgreco82
FormaLms User
Posts: 38
Joined: Wed Jun 27, 2018 2:24 pm
Version: forma.lms 2.0

Forma 2.1 - Problema Configurazione Elearning -> Gestione Menu

Post by lgreco82 »

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="index.php?modname=amanmenu&amp;op=modcustom&amp;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="index.php?modname=amanmenu&amp;op=fixuccustom&amp;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="index.php?modname=amanmenu&amp;op=delcustom&amp;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
User avatar
alberto
FormaLms Guru
Posts: 1136
Joined: Fri Mar 02, 2012 9:18 am
Contact:

Re: Forma 2.1 - Problema Configurazione Elearning -> Gestione Menu

Post by alberto »

Ciao Luca, in realtà il comportamento che descrivi è normale in forma, per consentire di avere menu personalizzati per ogni corso senza che le personalizzazioni vengano sovrascritte per errore quando si modifica il modello di menu.

Nell'elenco dei corsi c'è una funzione apposita che ti consente di applicare o riapplicare un menu ad un corso: una volta modificato il modello di menu, ti basta riapplicarlo per aggiornare le voci per tutti gli utenti iscritti
Post Reply