@@ -153,7 +153,9 @@ public function import($uploadedFile)
153
153
if ($ debug ) {
154
154
error_log ('Loading activities: ' .count ($ activities ));
155
155
}
156
- $ n = 1 ;
156
+
157
+ $ previousItemId = 0 ;
158
+ $ lpItemId = null ;
157
159
foreach ($ activities as $ activity ) {
158
160
if (empty ($ activity ->childNodes ->length )) {
159
161
continue ;
@@ -185,8 +187,7 @@ public function import($uploadedFile)
185
187
186
188
// It is added as item in Learnpath
187
189
if (!empty ($ currentItem ['sectionid ' ]) && !empty ($ assignId )) {
188
- $ this ->processSectionItem ($ sectionLpValues [$ currentItem ['sectionid ' ]]['lpId ' ], 'student_publication ' , $ assignId , $ moduleValues ['name ' ], $ n );
189
- $ n ++;
190
+ $ lpItemId = $ this ->processSectionItem ($ sectionLpValues [$ currentItem ['sectionid ' ]]['lpId ' ], 'student_publication ' , $ assignId , $ moduleValues ['name ' ], $ previousItemId );
190
191
}
191
192
break ;
192
193
case 'scorm ' :
@@ -202,6 +203,44 @@ public function import($uploadedFile)
202
203
$ this ->processGlossary ($ moduleValues , $ currentItem ['moduleid ' ], $ allFiles , '' );
203
204
break ;
204
205
case 'label ' :
206
+ $ moduleDir = $ currentItem ['directory ' ];
207
+ $ moduleXml = @file_get_contents ($ destinationDir .'/ ' .$ moduleDir .'/ ' .$ moduleName .'.xml ' );
208
+ $ moduleValues = $ this ->readHtmlModule ($ moduleXml , $ moduleName );
209
+ $ sectionPath = isset ($ currentItem ['sectionid ' ]) ? '/ ' .$ sectionLpValues [$ currentItem ['sectionid ' ]]['sectionPath ' ].'/ ' : '/ ' ;
210
+ $ contextId = $ moduleValues ['attributes ' ]['contextid ' ];
211
+ if (isset ($ currentItem ['sectionid ' ])) {
212
+ $ sectionLp = $ sectionLpValues [$ currentItem ['sectionid ' ]];
213
+ $ lpId = $ sectionLp ['lpId ' ];
214
+ $ chapterTitle = $ moduleValues ['name ' ] ?? 'Capítulo sin título ' ;
215
+ if (!empty ($ lpId )) {
216
+ $ lp = new \learnpath (
217
+ api_get_course_id (),
218
+ $ lpId ,
219
+ api_get_user_id ()
220
+ );
221
+ $ lpItemId = $ lp ->add_item (
222
+ 0 ,
223
+ $ previousItemId ,
224
+ 'dir ' ,
225
+ 0 ,
226
+ $ chapterTitle ,
227
+ '' ,
228
+ 0 ,
229
+ 0 ,
230
+ 0 ,
231
+ 0
232
+ );
233
+ }
234
+ } else {
235
+ if (isset ($ allFiles [$ contextId ])) {
236
+ $ importedFiles = $ this ->processSectionMultimedia ($ allFiles [$ contextId ], $ sectionPath );
237
+ }
238
+ $ documentId = $ this ->processHtmlDocument ($ moduleValues , $ moduleName , $ importedFiles , $ sectionPath );
239
+ if (!empty ($ currentItem ['sectionid ' ]) && !empty ($ documentId )) {
240
+ $ lpItemId = $ this ->processSectionItem ($ sectionLpValues [$ currentItem ['sectionid ' ]]['lpId ' ], 'document ' , $ documentId , $ moduleValues ['name ' ], $ previousItemId );
241
+ }
242
+ }
243
+ break ;
205
244
case 'page ' :
206
245
$ moduleDir = $ currentItem ['directory ' ];
207
246
$ moduleXml = @file_get_contents ($ destinationDir .'/ ' .$ moduleDir .'/ ' .$ moduleName .'.xml ' );
@@ -215,8 +254,7 @@ public function import($uploadedFile)
215
254
216
255
// It is added as item in Learnpath
217
256
if (!empty ($ currentItem ['sectionid ' ]) && !empty ($ documentId )) {
218
- $ this ->processSectionItem ($ sectionLpValues [$ currentItem ['sectionid ' ]]['lpId ' ], 'document ' , $ documentId , $ moduleValues ['name ' ], $ n );
219
- $ n ++;
257
+ $ lpItemId = $ this ->processSectionItem ($ sectionLpValues [$ currentItem ['sectionid ' ]]['lpId ' ], 'document ' , $ documentId , $ moduleValues ['name ' ], $ previousItemId );
220
258
}
221
259
break ;
222
260
case 'forum ' :
@@ -288,8 +326,7 @@ public function import($uploadedFile)
288
326
}
289
327
// It is added as item in Learnpath
290
328
if (!empty ($ currentItem ['sectionid ' ]) && !empty ($ forumId )) {
291
- $ this ->processSectionItem ($ sectionLpValues [$ currentItem ['sectionid ' ]]['lpId ' ], 'forum ' , $ forumId , $ moduleValues ['name ' ], $ n );
292
- $ n ++;
329
+ $ lpItemId = $ this ->processSectionItem ($ sectionLpValues [$ currentItem ['sectionid ' ]]['lpId ' ], 'forum ' , $ forumId , $ moduleValues ['name ' ], $ previousItemId );
293
330
}
294
331
break ;
295
332
case 'quiz ' :
@@ -410,8 +447,7 @@ public function import($uploadedFile)
410
447
411
448
// Add to learnpath if applicable
412
449
if (!empty ($ currentItem ['sectionid ' ]) && !empty ($ exercise ->iid )) {
413
- $ this ->processSectionItem ($ sectionLpValues [$ currentItem ['sectionid ' ]]['lpId ' ], 'quiz ' , $ exercise ->iid , $ title , $ n );
414
- $ n ++;
450
+ $ lpItemId = $ this ->processSectionItem ($ sectionLpValues [$ currentItem ['sectionid ' ]]['lpId ' ], 'quiz ' , $ exercise ->iid , $ title , $ previousItemId );
415
451
}
416
452
break ;
417
453
case 'folder ' :
@@ -445,8 +481,7 @@ public function import($uploadedFile)
445
481
}
446
482
$ sectionPath = isset ($ sectionLpValues [$ currentItem ['sectionid ' ]]) ? $ sectionLpValues [$ currentItem ['sectionid ' ]]['sectionPath ' ] : '' ;
447
483
$ lpId = (int ) $ sectionLpValues [$ currentItem ['sectionid ' ]]['lpId ' ];
448
- $ this ->processSectionFolderModule ($ mainFileModuleValues , $ sectionPath , $ moduleValues ['name ' ], $ resourcesFiles , $ lpId , $ n );
449
- $ n ++;
484
+ $ this ->processSectionFolderModule ($ mainFileModuleValues , $ sectionPath , $ moduleValues ['name ' ], $ resourcesFiles , $ lpId , $ previousItemId );
450
485
451
486
break ;
452
487
case 'resource ' :
@@ -487,8 +522,7 @@ public function import($uploadedFile)
487
522
if (!empty ($ currentItem ['sectionid ' ])) {
488
523
$ lpId = $ sectionLpValues [$ currentItem ['sectionid ' ]]['lpId ' ];
489
524
}
490
- $ importedFiles = $ this ->processSectionMultimedia ($ resourcesFiles , $ sectionPath , $ lpId , $ n );
491
- $ n ++;
525
+ $ importedFiles = $ this ->processSectionMultimedia ($ resourcesFiles , $ sectionPath , $ lpId , $ previousItemId );
492
526
}
493
527
494
528
break ;
@@ -527,11 +561,16 @@ public function import($uploadedFile)
527
561
$ linkId = Link::addlinkcategory ('link ' );
528
562
// It is added as item in Learnpath
529
563
if (!empty ($ currentItem ['sectionid ' ]) && !empty ($ linkId )) {
530
- $ this ->processSectionItem ($ sectionLpValues [$ currentItem ['sectionid ' ]]['lpId ' ], 'link ' , $ linkId , $ moduleValues ['name ' ], $ n );
531
- $ n ++;
564
+ $ lpItemId = $ this ->processSectionItem ($ sectionLpValues [$ currentItem ['sectionid ' ]]['lpId ' ], 'link ' , $ linkId , $ moduleValues ['name ' ], $ previousItemId );
532
565
}
533
566
break ;
534
567
}
568
+
569
+ if (!empty ($ previousItemId )) {
570
+ $ this ->updateLpItemNextId ($ previousItemId , $ lpItemId );
571
+ $ this ->updateLpItemPreviousId ($ lpItemId , $ previousItemId );
572
+ }
573
+ $ previousItemId = $ lpItemId ;
535
574
}
536
575
537
576
if (!empty ($ sectionLpValues )) {
@@ -612,17 +651,17 @@ public function replaceMoodleChamiloCoursePath($text, $sectionPath = '')
612
651
}
613
652
614
653
/**
615
- * It adds module item by section as learnpath item .
654
+ * Adds an item to a learning path section and processes its relationships .
616
655
*
617
- * @param $lpId
618
- * @param $itemType
619
- * @param $itemId
620
- * @param $itemTitle
621
- * @param int $dspOrder
656
+ * @param int $lpId The ID of the learning path.
657
+ * @param string $itemType The type of the item (e.g., quiz, document).
658
+ * @param int $itemId The ID of the item to be added.
659
+ * @param string $itemTitle The title of the item.
660
+ * @param int|null $previousItemId The ID of the previous item (optional).
622
661
*
623
- * @return void
662
+ * @return int The ID of the newly added learning path item.
624
663
*/
625
- public function processSectionItem ($ lpId , $ itemType , $ itemId , $ itemTitle , $ dspOrder = 0 )
664
+ public function processSectionItem ($ lpId , $ itemType , $ itemId , $ itemTitle , $ previousItemId = null ): int
626
665
{
627
666
$ lp = new \learnpath (
628
667
api_get_course_id (),
@@ -632,16 +671,18 @@ public function processSectionItem($lpId, $itemType, $itemId, $itemTitle, $dspOr
632
671
633
672
$ lpItemId = $ lp ->add_item (
634
673
0 ,
635
- 0 ,
674
+ $ previousItemId ,
636
675
$ itemType ,
637
676
$ itemId ,
638
677
$ itemTitle ,
639
678
'' ,
640
679
0 ,
641
680
0 ,
642
681
0 ,
643
- $ dspOrder
682
+ 0
644
683
);
684
+
685
+ return $ lpItemId ;
645
686
}
646
687
647
688
/**
@@ -1178,7 +1219,7 @@ public function processSectionFolderModule($mainFileModuleValues, $sectionPath,
1178
1219
*
1179
1220
* @return array
1180
1221
*/
1181
- public function processSectionMultimedia ($ files , $ sectionPath , $ lpId = 0 , $ n = 0 )
1222
+ public function processSectionMultimedia ($ files , $ sectionPath , $ lpId = 0 , $ previousItemId = 0 )
1182
1223
{
1183
1224
$ importedFiles = [];
1184
1225
if (!empty ($ files )) {
@@ -1220,7 +1261,13 @@ public function processSectionMultimedia($files, $sectionPath, $lpId = 0, $n = 0
1220
1261
$ importedFiles [$ file ['file ' ]['name ' ]] = basename ($ data ['path ' ]);
1221
1262
// It is added as item in Learnpath
1222
1263
if (!empty ($ lpId ) && !empty ($ data ['iid ' ])) {
1223
- $ this ->processSectionItem ($ lpId , 'document ' , $ data ['iid ' ], $ title , $ n );
1264
+ $ currentItemId = $ this ->processSectionItem ($ lpId , 'document ' , $ data ['iid ' ], $ title , $ previousItemId );
1265
+ if (!empty ($ previousItemId )) {
1266
+ $ this ->updateLpItemNextId ($ previousItemId , $ currentItemId );
1267
+ $ this ->updateLpItemPreviousId ($ currentItemId , $ previousItemId );
1268
+ }
1269
+
1270
+ $ previousItemId = $ currentItemId ;
1224
1271
}
1225
1272
}
1226
1273
}
@@ -1290,7 +1337,7 @@ public function processLesson($moduleValues, $allFiles = [])
1290
1337
$ pageValues ['content ' ] = $ item ['contents ' ];
1291
1338
$ sectionPath = '/ ' .$ dirName .'/ ' ;
1292
1339
$ documentId = $ this ->processHtmlDocument ($ pageValues , 'page ' , $ importedFiles , $ sectionPath );
1293
- $ this ->processSectionItem ($ lpId , 'document ' , $ documentId , $ pageValues ['name ' ]);
1340
+ $ lpItemId = $ this ->processSectionItem ($ lpId , 'document ' , $ documentId , $ pageValues ['name ' ]);
1294
1341
break ;
1295
1342
case 'essay ' :
1296
1343
case 'match ' :
@@ -1344,7 +1391,7 @@ public function processLesson($moduleValues, $allFiles = [])
1344
1391
// Create the new Quiz
1345
1392
$ exercise ->save ();
1346
1393
1347
- $ this ->processSectionItem ($ lpId , 'quiz ' , $ exercise ->iid , $ quizLpName );
1394
+ $ lpItemId = $ this ->processSectionItem ($ lpId , 'quiz ' , $ exercise ->iid , $ quizLpName );
1348
1395
1349
1396
// Ok, we got the Quiz and create it, now its time to add the Questions
1350
1397
foreach ($ questionList as $ question ) {
@@ -2584,7 +2631,7 @@ public function processTrueFalse(
2584
2631
$ importedFiles ,
2585
2632
$ sectionPath = ''
2586
2633
) {
2587
- $ correct = ( int ) $ answerValues ['fraction ' ] ? (int ) $ answerValues ['fraction ' ] : 0 ;
2634
+ $ correct = isset ( $ answerValues ['fraction ' ]) ? (int ) $ answerValues ['fraction ' ] : 0 ;
2588
2635
$ answer = $ answerValues ['answertext ' ];
2589
2636
$ comment = $ answerValues ['feedback ' ];
2590
2637
$ weighting = $ answerValues ['fraction ' ];
@@ -2603,10 +2650,7 @@ public function processTrueFalse(
2603
2650
$ goodAnswer ,
2604
2651
$ comment ,
2605
2652
$ weighting ,
2606
- $ position ,
2607
- null ,
2608
- null ,
2609
- ''
2653
+ $ position
2610
2654
);
2611
2655
}
2612
2656
@@ -2701,6 +2745,32 @@ public function processFillBlanks(
2701
2745
}
2702
2746
}
2703
2747
2748
+ /**
2749
+ * Updates the previous item ID for a given learning path item.
2750
+ *
2751
+ * @param int $currentItemId The ID of the current item.
2752
+ * @param int $previousItemId The ID of the previous item to be set.
2753
+ */
2754
+ public function updateLpItemPreviousId ($ currentItemId , $ previousItemId )
2755
+ {
2756
+ $ table = Database::get_course_table (TABLE_LP_ITEM );
2757
+ $ sql = "UPDATE $ table SET previous_item_id = $ previousItemId WHERE id = $ currentItemId " ;
2758
+ Database::query ($ sql );
2759
+ }
2760
+
2761
+ /**
2762
+ * Updates the next item ID for a given learning path item.
2763
+ *
2764
+ * @param int $previousItemId The ID of the previous item.
2765
+ * @param int $currentItemId The ID of the current item to be set as next.
2766
+ */
2767
+ public function updateLpItemNextId ($ previousItemId , $ currentItemId )
2768
+ {
2769
+ $ table = Database::get_course_table (TABLE_LP_ITEM );
2770
+ $ sql = "UPDATE $ table SET next_item_id = $ currentItemId WHERE id = $ previousItemId " ;
2771
+ Database::query ($ sql );
2772
+ }
2773
+
2704
2774
/**
2705
2775
* get All files associated with a question.
2706
2776
*
0 commit comments