LPs: Fix learnpathItem construct

pull/3890/head
Julio Montoya 4 years ago
parent f495a0285d
commit 05d206b4a3
  1. 2
      public/main/exercise/exercise_report.php
  2. 9
      public/main/inc/ajax/lp.ajax.php
  3. 2
      public/main/inc/lib/document.lib.php
  4. 4
      public/main/lp/LearnPathItemForm.php
  5. 2
      public/main/lp/ScormApi.php
  6. 107
      public/main/lp/learnpath.class.php
  7. 14
      public/main/lp/learnpathItem.class.php
  8. 2
      public/main/lp/lp_ajax_initialize.php
  9. 2
      public/main/lp/lp_ajax_switch_item_toc.php
  10. 2
      public/main/webservices/lp.php

@ -366,7 +366,7 @@ if (isset($_REQUEST['comments']) &&
$lp = $lpRepo->find($lpId); $lp = $lpRepo->find($lpId);
} }
$statusCondition = ''; $statusCondition = '';
$item = new learnpathItem($lp, $lpItemId, api_get_course_int_id()); $item = new learnpathItem($lpItemId);
if ($item) { if ($item) {
$prereqId = $item->get_prereq_string(); $prereqId = $item->get_prereq_string();
$minScore = $item->getPrerequisiteMinScore(); $minScore = $item->getPrerequisiteMinScore();

@ -80,7 +80,7 @@ switch ($action) {
exit; exit;
} }
$parent = $lpItemRepo->getItemRoot($lpId); $parent = $lpItemRepo->getRootItem($lpId);
$learningPath = new learnpath($lp, api_get_course_info(), api_get_user_id()); $learningPath = new learnpath($lp, api_get_course_info(), api_get_user_id());
if ($learningPath) { if ($learningPath) {
@ -130,15 +130,16 @@ switch ($action) {
exit; exit;
} }
learnpath::sortItemByOrderList($lpId, $orderList); $lpItemRepo = Container::getLpItemRepository();
$rootItem = $lpItemRepo->getRootItem($lpId);
learnpath::sortItemByOrderList($rootItem, $orderList);
echo Display::return_message(get_lang('Saved'), 'confirm'); echo Display::return_message(get_lang('Saved'), 'confirm');
} }
break; break;
case 'get_lp_item_tree': case 'get_lp_item_tree':
if (api_is_allowed_to_edit(null, true)) { if (api_is_allowed_to_edit(null, true)) {
$parent = $lpItemRepo->getItemRoot($lpId); $parent = $lpItemRepo->getRootItem($lpId);
$learningPath = new learnpath($lp, api_get_course_info(), api_get_user_id()); $learningPath = new learnpath($lp, api_get_course_info(), api_get_user_id());
if ($learningPath) { if ($learningPath) {
echo $learningPath->getBuildTree(true, true); echo $learningPath->getBuildTree(true, true);

@ -4571,7 +4571,7 @@ class DocumentManager
WHERE WHERE
l.c_id = $course_id AND l.c_id = $course_id AND
docs.filetype = 'folder' AND docs.filetype = 'folder' AND
path IN ('".$folder_sql."') AND n.path IN ('".$folder_sql."') AND
l.visibility NOT IN ('".ResourceLink::VISIBILITY_DELETED."') l.visibility NOT IN ('".ResourceLink::VISIBILITY_DELETED."')
"; ";

@ -56,8 +56,8 @@ class LearnPathItemForm
); );
$lpItemRepo = Container::getLpItemRepository(); $lpItemRepo = Container::getLpItemRepository();
$itemRoot = $lpItemRepo->getItemRoot($lp->get_id()); $rootItem = $lpItemRepo->getRootItem($lp->get_id());
$parentSelect->addOption($lp->name, $itemRoot->getIid()); $parentSelect->addOption($lp->name, $rootItem->getIid());
/** @var CLpItem[] $sections */ /** @var CLpItem[] $sections */
$sections = $lpItemRepo->findBy(['itemType' => 'dir', 'lp' => $lp->get_id()]); $sections = $lpItemRepo->findBy(['itemType' => 'dir', 'lp' => $lp->get_id()]);
foreach ($sections as $value) { foreach ($sections as $value) {

@ -667,7 +667,7 @@ class ScormApi
if ($debug > 1) { if ($debug > 1) {
error_log('In switch_item_details - generating new item object', 0); error_log('In switch_item_details - generating new item object', 0);
} }
$mylpi = new learnpathItem($new_item_id, $user_id); $mylpi = new learnpathItem($new_item_id);
$mylpi->set_lp_view($view_id); $mylpi->set_lp_view($view_id);
} }
/* /*

@ -263,7 +263,7 @@ class learnpath
break; break;
case 1: case 1:
default: default:
$oItem = new learnpathItem($itemId, $course_id, $item); $oItem = new learnpathItem(null, $item);
if (is_object($oItem)) { if (is_object($oItem)) {
$my_item_id = $oItem->get_id(); $my_item_id = $oItem->get_id();
// Moved down to when we are sure the item_view exists. // Moved down to when we are sure the item_view exists.
@ -2646,7 +2646,7 @@ class learnpath
public function getListArrayToc($toc_list = []) public function getListArrayToc($toc_list = [])
{ {
$lpItemRepo = Container::getLpItemRepository(); $lpItemRepo = Container::getLpItemRepository();
$itemRoot = $lpItemRepo->getItemRoot($this->get_id()); $itemRoot = $lpItemRepo->getRootItem($this->get_id());
$options = [ $options = [
'decorate' => false, 'decorate' => false,
]; ];
@ -5142,7 +5142,7 @@ class learnpath
ICON_SIZE_TINY ICON_SIZE_TINY
); );
$lpItemRepo = Container::getLpItemRepository(); $lpItemRepo = Container::getLpItemRepository();
$itemRoot = $lpItemRepo->getItemRoot($this->get_id()); $itemRoot = $lpItemRepo->getRootItem($this->get_id());
$options = [ $options = [
'decorate' => true, 'decorate' => true,
@ -6721,7 +6721,7 @@ class learnpath
$displayOrder = $lpItem->getDisplayOrder(); $displayOrder = $lpItem->getDisplayOrder();
$lpItemRepo = Container::getLpItemRepository(); $lpItemRepo = Container::getLpItemRepository();
$itemRoot = $lpItemRepo->getItemRoot($this->get_id()); $itemRoot = $lpItemRepo->getRootItem($this->get_id());
$em = Database::getManager(); $em = Database::getManager();
$currentItemId = $itemId; $currentItemId = $itemId;
@ -9289,28 +9289,26 @@ class learnpath
* *
* @param array $orderList A associative array with id and parent_id keys. * @param array $orderList A associative array with id and parent_id keys.
*/ */
public static function sortItemByOrderList(int $lpId, array $orderList = []) public static function sortItemByOrderList(CLpItem $rootItem, array $orderList = [], $flush = true)
{ {
if (empty($orderList)) { if (empty($orderList)) {
return true; return true;
} }
//echo '<pre>'; var_dump($orderList);
$lpItemRepo = Container::getLpItemRepository(); $lpItemRepo = Container::getLpItemRepository();
$rootParent = $lpItemRepo->getItemRoot($lpId); echo '<pre>';
/*$previous = 2; /*$previous = 2;
$next = 0; $next = 0;
$rootParent->setPreviousItemId(1); $rootItem->setPreviousItemId(1);
$last = $this->updateList($orderList, $rootParent, $previous, $next); $last = $this->updateList($orderList, $rootItem, $previous, $next);
$rootParent->setNextItemId($last + 1); $rootItem->setNextItemId($last + 1);
*/ */
$em = Database::getManager(); $em = Database::getManager();
//echo '<pre>'; //echo '<pre>';
//var_dump($orderList); //var_dump($orderList);
// $em->persist($rootParent); // $em->persist($rootItem);
/*$node = new \Tree\Node\Node($rootParent->getIid()); /*$node = new \Tree\Node\Node($rootItem->getIid());
$parentList[$rootParent->getIid()] = $node; $parentList[$rootItem->getIid()] = $node;
foreach ($orderList as $item) { foreach ($orderList as $item) {
$itemId = $item->id ?? 0; $itemId = $item->id ?? 0;
@ -9320,8 +9318,8 @@ class learnpath
$parentId = $item->parent_id ?? 0; $parentId = $item->parent_id ?? 0;
if (empty($parentId)) { if (empty($parentId)) {
$parent = $rootParent; $parent = $rootItem;
$parentId = $rootParent->getIid(); $parentId = $rootItem->getIid();
} else { } else {
//$parent = $lpItemRepo->find($parentId); //$parent = $lpItemRepo->find($parentId);
} }
@ -9346,20 +9344,23 @@ class learnpath
exit;*/ exit;*/
$counter = 2; $counter = 2;
/*$rootParent->setPreviousItemId(1); /*$rootItem->setPreviousItemId(1);
$rootParent->setDisplayOrder(0); $rootItem->setDisplayOrder(0);
$rootParent->setLaunchData(1);*/ $rootItem->setLaunchData(1);*/
//echo '<pre>'; //echo '<pre>';
$rootParent->setDisplayOrder(1); $rootItem->setDisplayOrder(1);
//$rootParent->setNextItemId(null); $rootItem->setPreviousItemId(0);
//$rootParent->setPreviousItemId(null); $em->persist($rootItem);
//$rootItem->setNextItemId(null);
//$rootItem->setPreviousItemId(null);
foreach ($orderList as $item) { foreach ($orderList as $item) {
$itemId = $item->id ?? 0; $itemId = $item->id ?? 0;
if (empty($itemId)) { if (empty($itemId)) {
continue; continue;
} }
$parentId = $item->parent_id ?? 0; $parentId = $item->parent_id ?? 0;
$parent = $rootParent; $parent = $rootItem;
if (!empty($parentId)) { if (!empty($parentId)) {
$parentExists = $lpItemRepo->find($parentId); $parentExists = $lpItemRepo->find($parentId);
if (null !== $parentExists) { if (null !== $parentExists) {
@ -9367,21 +9368,31 @@ exit;*/
} }
} }
if (isset($parentOrder[$parent->getIid()])) { /*if (isset($parentOrder[$parent->getIid()])) {
$parentOrder[$parent->getIid()]++; $parentOrder[$parent->getIid()]++;
} else { } else {
$parentOrder[$parent->getIid()] = 0; $parentOrder[$parent->getIid()] = 0;
} }*/
/** @var CLpItem $item */ /** @var CLpItem $itemEntity */
$item = $lpItemRepo->find($itemId); $itemEntity = $lpItemRepo->find($itemId);
$previousId = 2; /*$previousId = 2;
if (isset($previous[$counter - 1])) { if (isset($previous[$counter - 1])) {
$previousId = $previous[$counter - 1]; $previousId = $previous[$counter - 1];
} }
$previous[$counter] = $counter + 2; $previous[$counter] = $counter + 2;*/
$itemEntity->setParent($parent);
$previousId = $itemEntity->getPreviousItemId();
if (null === $previousId) {
$itemEntity->setPreviousItemId(0);
}
$nextId = $itemEntity->getNextItemId();
if (null === $nextId) {
$itemEntity->setNextItemId(0);
}
$item->setParent($parent);
//$item->setPreviousItemId($previousId); //$item->setPreviousItemId($previousId);
//$item->setNextItemId($counter + 1); //$item->setNextItemId($counter + 1);
//$item->setDisplayOrder($parentOrder[$parent->getIid()]); //$item->setDisplayOrder($parentOrder[$parent->getIid()]);
@ -9389,36 +9400,38 @@ exit;*/
//$item->setPreviousItemId(null); //$item->setPreviousItemId(null);
//$item->setNextItemId(null); //$item->setNextItemId(null);
//$item->setPreviousItemId($previousId); //$item->setPreviousItemId($previousId);
$item->setDisplayOrder($counter); $itemEntity->setDisplayOrder($counter);
//var_dump($parent->getIid(), $parent->getTitle()); //var_dump($parent->getIid(), $parent->getTitle());
// $lpItemRepo->persistAsLastChildOf($item, $parent); // $lpItemRepo->persistAsLastChildOf($item, $parent);
//$lpItemRepo->persistAs(); //$lpItemRepo->persistAs();
//$lpItemRepo->persistAsFirstChildOf($item, $parent); //$lpItemRepo->persistAsFirstChildOf($item, $parent);
//$em->flush(); //$em->flush();
//$lpItemRepo->moveDown($item, true); //$lpItemRepo->moveDown($item, true);
$em->persist($item); $em->persist($itemEntity);
if ($flush) {
$em->flush();
}
//$em->flush();
$counter++; $counter++;
} }
//$rootParent->setNextItemId($counter+1); //$rootItem->setNextItemId($counter+1);
$em->persist($rootParent);
$em->flush();
//var_dump($lpItemRepo->verify());
//$lpItemRepo->reorder($rootParent, 'displayOrder', 'ASC', false);
//$lpItemRepo->reorder($rootParent);
//$em->flush(); //$em->flush();
//var_dump($lpItemRepo->verify()); //var_dump($lpItemRepo->verify());
$lpItemRepo->recoverNode($rootParent, 'displayOrder'); //$lpItemRepo->reorder($rootItem, 'displayOrder', 'ASC', false);
$em->flush(); //$lpItemRepo->reorder($rootItem);
//$em->flush();
var_dump($lpItemRepo->verify());
$lpItemRepo->recoverNode($rootItem, 'displayOrder');
$em->persist($rootItem);
if ($flush) {
$em->flush();
}
//$em->flush();
//var_dump($lpItemRepo->verify()); //var_dump($lpItemRepo->verify());
return true; return true;
/*
$lpItemRepo->recoverNode($rootParent);
var_dump($lpItemRepo->verify());
$em->flush();
exit;*/
} }
/** /**

@ -94,19 +94,13 @@ class learnpathItem
* Setting an lp_view will finalise the item_view data collection. * Setting an lp_view will finalise the item_view data collection.
* *
* @param int $id Learning path item ID * @param int $id Learning path item ID
* @param int $courseId Course int id
* @param CLpItem|array|null $item_content Contents of the item * @param CLpItem|array|null $item_content Contents of the item
*/ */
public function __construct( public function __construct( $id , $item_content = null) {
$id,
$courseId = 0,
$item_content = null
) {
$items_table = Database::get_course_table(TABLE_LP_ITEM); $items_table = Database::get_course_table(TABLE_LP_ITEM);
$id = (int) $id; $id = (int) $id;
$this->courseId = $courseId = empty($courseId) ? api_get_course_int_id() : (int) $courseId;
if (empty($item_content)) { if (!empty($id)) {
$sql = "SELECT * FROM $items_table $sql = "SELECT * FROM $items_table
WHERE iid = $id"; WHERE iid = $id";
$res = Database::query($sql); $res = Database::query($sql);
@ -115,10 +109,6 @@ class learnpathItem
} }
$row = Database::fetch_array($res); $row = Database::fetch_array($res);
} else { } else {
if (is_array($item_content)) {
$row = $item_content;
}
if ($item_content instanceof CLpItem) { if ($item_content instanceof CLpItem) {
$row = []; $row = [];
$row['lp_id'] = $item_content->getLp()->getIid(); $row['lp_id'] = $item_content->getLp()->getIid();

@ -58,7 +58,7 @@ function initializeItem($lpId, $user_id, $view_id, $next_item, $startTime = 0)
if ($debug) { if ($debug) {
error_log('In initialize_item - generating new item object '.$next_item, 0); error_log('In initialize_item - generating new item object '.$next_item, 0);
} }
$mylpi = new learnpathItem($next_item, $user_id); $mylpi = new learnpathItem($next_item);
} }
if ($mylpi) { if ($mylpi) {

@ -90,7 +90,7 @@ function switch_item_toc($lpId, $userId, $viewId, $currentItem, $nextItem)
if ($debug > 1) { if ($debug > 1) {
error_log('In switch_item_details - generating new item object', 0); error_log('In switch_item_details - generating new item object', 0);
} }
$myLPI = new learnpathItem($newItemId, $userId); $myLPI = new learnpathItem($newItemId);
$myLPI->set_lp_view($viewId); $myLPI->set_lp_view($viewId);
} }
/* /*

@ -471,7 +471,7 @@ function WSDeleteLp($params)
if (!empty($items)) { if (!empty($items)) {
/** @var $item learnpathItem */ /** @var $item learnpathItem */
foreach ($items as $itemId) { foreach ($items as $itemId) {
$item = new learnpathItem($lp, $itemId, $courseId); $item = new learnpathItem($itemId);
if ($item) { if ($item) {
$documentId = $item->get_path(); $documentId = $item->get_path();

Loading…
Cancel
Save