diff --git a/classes/GUI/Table/class.xvmpSelectedVideosTableGUI.php b/classes/GUI/Table/class.xvmpSelectedVideosTableGUI.php index f13a1527..30e1e8b2 100644 --- a/classes/GUI/Table/class.xvmpSelectedVideosTableGUI.php +++ b/classes/GUI/Table/class.xvmpSelectedVideosTableGUI.php @@ -47,6 +47,12 @@ class xvmpSelectedVideosTableGUI extends xvmpTableGUI */ public function __construct($parent_gui, $parent_cmd) { + global $DIC; + $ilUser = $DIC['ilUser']; + $id = 'xvmp_selected_' . (int) $_GET['ref_id'] . '_' . $ilUser->getId(); + $this->setId($id); + $this->setPrefix($id); + $this->setFormName($id); parent::__construct($parent_gui, $parent_cmd); $this->setTitle($this->pl->txt('selected_videos')); @@ -59,8 +65,8 @@ public function __construct($parent_gui, $parent_cmd) $this->setDescription($description); $this->setExternalSorting(true); - $this->setEnableNumInfo(false); - $this->setShowRowsSelector(false); + $this->setEnableNumInfo(true); + $this->setShowRowsSelector(true); $base_link = $this->ctrl->getLinkTarget($this->parent_obj, '', '', true); $this->tpl_global->addOnLoadCode('VimpSelected.init("' . $base_link . '");'); @@ -98,7 +104,9 @@ protected function addRepositoryPreviewCss($number) : void public function parseData() : void { - $this->setData(xvmpMedium::getSelectedAsArray($this->parent_obj->getObjId())); + $data = xvmpMedium::getSelectedAsArray($this->parent_obj->getObjId()); + $this->setData($data); + $this->setMaxCount(count($data)); } protected function initColumns() : void diff --git a/classes/GUI/class.xvmpSelectedVideosGUI.php b/classes/GUI/class.xvmpSelectedVideosGUI.php index b6fe66e2..45ad7103 100644 --- a/classes/GUI/class.xvmpSelectedVideosGUI.php +++ b/classes/GUI/class.xvmpSelectedVideosGUI.php @@ -38,15 +38,34 @@ public function executeCommand() : void */ public function reorder() { - $ids = $_POST['ids']; - $sort = 10; + $ids = $_POST['ids'] ?? []; + $media = xvmpSelectedMedia::where(['mid' => $ids, 'obj_id' => $this->getObjId()])->get(); + + if (empty($media)) { + echo json_encode(['success' => true]); + exit; + } + + $mediaByMid = []; + foreach ($media as $obj) { + $mediaByMid[$obj->getMid()] = $obj; + } + + $orderedMedia = []; foreach ($ids as $id) { - $xvmpSelectedMedia = xvmpSelectedMedia::where(array('mid' => $id, 'obj_id' => $this->getObjId()))->first(); - $xvmpSelectedMedia->setSort($sort); - $xvmpSelectedMedia->update(); + if (isset($mediaByMid[$id])) { + $orderedMedia[] = $mediaByMid[$id]; + } + } + + $sort = min(array_map(fn($o) => $o->getSort(), $orderedMedia)); + foreach ($orderedMedia as $obj) { + $obj->setSort($sort); + $obj->update(); $sort += 10; } - echo "{\"success\": true}"; + + echo json_encode(['success' => true]); exit; }