public function copy_course()
 {
     $users = Get::req('users', DOTY_STRING, "");
     $move = Get::req('move', DOTY_STRING, "");
     if (!$this->permissions['subscribe_course']) {
         $this->render('invalid', array('message' => $this->_getErrorMessage('no permission'), 'back_url' => 'index.php?r=' . $this->link_course . '/show'));
         return;
     }
     require_once _lms_ . '/lib/lib.course.php';
     $course_selector = new Selector_Course();
     $course_selector->parseForState($_POST);
     if (isset($_POST['undo'])) {
         Util::jump_to('index.php?r=' . $this->link . '/show&id_course=' . $this->model->getIdCourse());
     }
     if (isset($_POST['copy'])) {
         $course_selected = $course_selector->getSelection();
         if (count($course_selected) == 0) {
             Util::jump_to('index.php?r=' . $this->link . '/copy_course&load=1&id_course=' . $this->model->getIdCourse() . '&err=_no_course_sel');
         }
         require_once _lms_ . '/lib/lib.course.php';
         foreach ($course_selected as $id_course) {
             $docebo_course = new DoceboCourse($id_course);
             $level_idst =& $docebo_course->getCourseLevel($id_course);
             if (count($level_idst) == 0 || $level_idst[1] == '') {
                 $level_idst =& $docebo_course->createCourseLevel($id_course);
             }
             $query = "SELECT idUser, MIN(level) AS level" . " FROM %lms_courseuser" . " WHERE idUser IN (" . $users . ")" . " GROUP BY idUser";
             $result = sql_query($query);
             if (Docebo::user()->getUserLevelId() != ADMIN_GROUP_GODADMIN) {
                 $limited_subscribe = Docebo::user()->preference->getAdminPreference('admin_rules.limit_course_subscribe');
                 $max_subscribe = Docebo::user()->preference->getAdminPreference('admin_rules.max_course_subscribe');
                 $direct_subscribe = Docebo::user()->preference->getAdminPreference('admin_rules.direct_course_subscribe');
                 if ($limited_subscribe == 'on') {
                     $limited_subscribe = true;
                 } else {
                     $limited_subscribe = false;
                 }
                 if ($direct_subscribe == 'on') {
                     $direct_subscribe = true;
                 } else {
                     $direct_subscribe = false;
                 }
             } else {
                 $limited_subscribe = false;
                 $max_subscribe = 0;
                 $direct_subscribe = true;
             }
             require_once _lms_ . '/lib/lib.course.php';
             $docebo_course = new DoceboCourse($id_course);
             $level_idst =& $docebo_course->getCourseLevel($id_course);
             if (count($level_idst) == 0 || $level_idst[1] == '') {
                 $level_idst =& $docebo_course->createCourseLevel($id_course);
             }
             $waiting = 0;
             if (!$direct_subscribe) {
                 $waiting = 1;
             }
             $old_id_course = $_GET['id_course'];
             $_GET['id_course'] = $id_course;
             $course = new self();
             while (list($id_user, $level) = sql_fetch_row($result)) {
                 if (!$limited_subscribe || $max_subscribe) {
                     if ($course->model->subscribeUser($id_user, $level, $waiting)) {
                         //$this->acl_man->addToGroup($level_idst[$level], $id_user);
                         $course->_addToCourseGroup($level_idst[$level], $id_user);
                         $max_subscribe--;
                     }
                 }
             }
             if ($move) {
                 $db = DbConn::getInstance();
                 $arr_users = explode(",", $users);
                 $re = $db->query("DELETE FROM learning_courseuser\r\n\t\t\t\t\t\tWHERE idUser IN ( " . implode(',', $arr_users) . " ) AND idCourse = '" . $old_id_course . "'");
             }
         }
         Util::jump_to('index.php?r=' . $this->link . '/show&id_course=' . $this->model->getIdCourse() . '&res=_copy_ok');
         ////////////////////////////////
     } else {
         $id_cat = Get::req('id_cat', DOTY_INT, 0);
         if (isset($_GET['load']) && $_GET['load'] == 1) {
             $course_selector->resetSelection(array());
         }
         if (isset($_GET['err']) && $_GET['err'] !== '') {
             UIFeedback::error(Lang::t(strtoupper($_GET['err']), 'subscription'));
         }
         $course_info = $this->model->getCourseInfoForSubscription();
         $course_name = ($course_info['code'] !== '' ? '[' . $course_info['code'] . '] ' : '') . $course_info['name'];
         $this->render('copy_course', array('model' => $this->model, 'id_cat' => $id_cat, 'users' => $users, 'move' => $move, 'course_selector' => $course_selector, 'course_name' => $course_name, 'id_course' => $this->id_course, 'id_edition' => $this->id_edition, 'id_date' => $this->id_date));
     }
 }