Example #1
0
 /**
  * get ilias courses
  *
  * creates output of ilias courses linked to the chosen seminar. also updates object-connections.
  * @access public
  * @return boolean successful
  */
 function getIliasCourses($sem_id)
 {
     global $connected_cms, $messages, $view, $cms_select;
     $db = DBManager::get();
     $rs = $db->query("SELECT DISTINCT system_type, module_id\n                          FROM object_contentmodules\n                          WHERE module_type = 'crs' AND object_id = " . $db->quote($sem_id))->fetchAll(PDO::FETCH_ASSOC);
     foreach ($rs as $row) {
         $courses[$row['system_type']] = $row['module_id'];
     }
     if (is_array($courses)) {
         foreach ($courses as $system_type => $crs_id) {
             if (ELearningUtils::isCMSActive($system_type)) {
                 ELearningUtils::loadClass($system_type);
                 $connected_courses['courses'][$system_type] = array('url' => UrlHelper::getLink($connected_cms[$system_type]->link->cms_link . '?client_id=' . $connected_cms[$system_type]->getClientId() . '&cms_select=' . $system_type . '&ref_id=' . $crs_id . '&type=crs&target=start'), 'cms_name' => $connected_cms[$system_type]->getName());
                 $course_output[] = "<a href=\"" . UrlHelper::getLink($connected_cms[$system_type]->link->cms_link . "?" . "client_id=" . $connected_cms[$system_type]->getClientId() . "&cms_select=" . $system_type . "&ref_id=" . $crs_id . "&type=crs&target=start") . "\" target=\"_blank\">" . sprintf(_("Kurs in %s"), htmlReady($connected_cms[$system_type]->getName())) . "</a>";
                 // gegebenenfalls zugeordnete Module aktualisieren
                 if (Request::option('update')) {
                     if (method_exists($connected_cms[$system_type], "updateConnections")) {
                         $connected_cms[$system_type]->updateConnections($crs_id);
                     }
                 }
                 if (method_exists($connected_cms[$system_type]->permissions, 'CheckUserPermissions')) {
                     $connected_cms[$system_type]->permissions->CheckUserPermissions($crs_id);
                 }
             }
         }
     }
     if ($connected_courses['courses']) {
         if (count($connected_courses['courses']) > 1) {
             $connected_courses['text'] = _("Diese Veranstaltung ist mit folgenden Ilias-Kursen verknüpft. Hier gelangen Sie direkt in den jeweiligen Kurs: ");
         } else {
             $connected_courses['text'] = _("Diese Veranstaltung ist mit einem Ilias-Kurs verknüpft. Hier gelangen Sie direkt in den Kurs: ");
         }
         $output["update"] .= "<font style=\"font-size: -1\">" . _("Hier können Sie die Zuordnungen zu den verknüpften Kursen aktualisieren.") . "<br></font>";
         $output["update"] .= "<form method=\"POST\" action=\"" . URLHelper::getLink() . "#anker\">\n";
         $output["update"] .= CSRFProtection::tokenTag();
         $output["update"] .= "<input type=\"HIDDEN\" name=\"view\" value=\"" . htmlReady($view) . "\">\n";
         $output["update"] .= "<input type=\"HIDDEN\" name=\"cms_select\" value=\"" . htmlReady($cms_select) . "\">\n";
         $output["update"] .= Button::create(_('Aktualisieren'), 'update');
         $output["update"] .= "</form>";
     }
     return $connected_courses;
 }
Example #2
0
 /**
  * Displays accounts and elearning modules for active user
  */
 public function my_accounts_action()
 {
     global $connected_cms, $current_module, $messages;
     Navigation::activateItem('/tools/my_elearning');
     PageLayout::setTitle(_("Meine Lernmodule und Benutzer-Accounts"));
     if ($this->new_account_cms != "") {
         $this->new_account_form = ELearningUtils::getNewAccountForm($this->new_account_cms);
     }
     foreach ($GLOBALS['ELEARNING_INTERFACE_MODULES'] as $cms => $cms_preferences) {
         if (ELearningUtils::isCMSActive($cms)) {
             ELearningUtils::loadClass($cms);
             if ($cms_preferences["auth_necessary"] == true) {
                 $this->new_module_form[$cms] = ELearningUtils::getNewModuleForm($cms);
             }
             $connection_status = $connected_cms[$cms]->getConnectionStatus($cms);
             foreach ($connection_status as $type => $msg) {
                 if ($msg["error"] != "") {
                     PageLayout::postMessage(MessageBox::error(_("Es traten Probleme bei der Anbindung einzelner Lermodule auf. Bitte wenden Sie sich an Ihren Systemadministrator."), array($cms . ': ' . $msg["error"])));
                     $GLOBALS["ELEARNING_INTERFACE_" . $cms . "_ACTIVE"] = false;
                 }
             }
         }
     }
     $connected_cms = array();
     // prepare cms list
     foreach ($GLOBALS['ELEARNING_INTERFACE_MODULES'] as $cms => $cms_preferences) {
         if (ELearningUtils::isCMSActive($cms) and $cms_preferences["auth_necessary"]) {
             ELearningUtils::loadClass($cms);
             $this->cms_list[$cms] = $cms_preferences;
             $this->cms_list[$cms]['name'] = $connected_cms[$cms]->getName();
             $this->cms_list[$cms]['logo'] = $connected_cms[$cms]->getLogo();
             $this->cms_list[$cms]['modules'] = array();
             if ($this->new_account_cms != $cms) {
                 $this->cms_list[$cms]['show_account_form'] = $cms_preferences;
             }
             if ($GLOBALS["module_type_" . $cms] != "") {
                 $this->cms_list[$cms]['cms_anker_target'] = true;
             }
             if ($connected_cms[$cms]->user->isConnected()) {
                 $this->cms_list[$cms]['start_link'] = $connected_cms[$cms]->link->getStartpageLink();
             }
             if ($this->new_account_cms != $cms) {
                 if ($connected_cms[$cms]->user->isConnected()) {
                     $this->cms_list[$cms]['user'] = $connected_cms[$cms]->user->getUsername();
                     $connected_cms[$cms]->soap_client->setCachingStatus(false);
                     $this->user_content_modules = $connected_cms[$cms]->getUserContentModules();
                     $connected_cms[$cms]->soap_client->setCachingStatus(true);
                     if (!($this->user_content_modules == false)) {
                         foreach ($this->user_content_modules as $key => $connection) {
                             $connected_cms[$cms]->setContentModule($connection, false);
                             $this->cms_list[$cms]['modules'][] = $connected_cms[$cms]->content_module[$current_module]->view->show();
                         }
                     }
                     $this->cms_list[$cms]['new_module_form'] = $this->new_module_form[$cms];
                 }
             } else {
                 $this->cms_list[$cms]['account_form'] = $this->new_account_form;
             }
         }
     }
     $sidebar = Sidebar::get();
     $sidebar->setImage('sidebar/learnmodule-sidebar.png');
     $widget = new ActionsWidget();
     if ($GLOBALS['perm']->have_perm('autor') and count($this->cms_list)) {
         foreach ($this->cms_list as $cms_key => $cms_data) {
             if ($connected_cms[$cms_key]->user->isConnected()) {
                 $widget->addLink(sprintf(_('Zur %s Startseite'), $cms_data['name']), URLHelper::getScriptLink($cms_data['start_link']), Icon::create('link-extern', 'clickable'), array('target' => '_blank'));
                 $link_count++;
             }
         }
     }
     if ($link_count) {
         $sidebar->addWidget($widget);
     }
     // terminate objects
     if (is_array($connected_cms)) {
         foreach ($connected_cms as $system) {
             $system->terminate();
         }
     }
     if (is_array($messages)) {
         foreach ($messages as $mtype => $mtext) {
             PageLayout::postMessage(MessageBox::$mtype($mtext));
         }
     }
 }
Example #3
0
 /**
  * Displays a page.
  */
 public function edit_action($id = null)
 {
     global $connected_cms, $current_module;
     if (!$this->rechte) {
         throw new AccessDeniedException(_('Keine Berechtigung zum Bearbeiten der Lernmodul-Verknüpfungen.'));
     }
     Navigation::activateItem('/course/elearning/edit');
     $GLOBALS['view'] = 'edit';
     // ggf. neuen Ilias4-Kurs anlegen
     if (Request::submitted('create_course') and $this->rechte) {
         ELearningUtils::loadClass($this->cms_select);
         if (method_exists($connected_cms[$this->cms_select], "createCourse")) {
             if ($connected_cms[$this->cms_select]->createCourse($this->seminar_id)) {
                 PageLayout::postMessage(MessageBox::info(_('Kurs wurde angelegt.')));
             }
         }
     }
     // ggf. bestehenden Ilias4-Kurs zuordnen
     if (Request::submitted('connect_course')) {
         if (ObjectConnections::getConnectionModuleId(Request::option("connect_course_sem_id"), "crs", $this->cms_select) and $GLOBALS['perm']->have_studip_perm("dozent", Request::option("connect_course_sem_id"))) {
             ObjectConnections::setConnection($this->seminar_id, ObjectConnections::getConnectionModuleId(Request::option("connect_course_sem_id"), "crs", $this->cms_select), "crs", $this->cms_select);
             PageLayout::postMessage(MessageBox::info(_('Zuordnung wurde gespeichert.')));
             ELearningUtils::loadClass($this->cms_select);
             if (method_exists($connected_cms[$this->cms_select], "updateConnections")) {
                 $connected_cms[$this->cms_select]->updateConnections(ObjectConnections::getConnectionModuleId(Request::option("connect_course_sem_id"), "crs", $this->cms_select));
             }
         }
     }
     // Zugeordnete Ilias-Kurse ermitteln und ggf. aktualisieren
     $this->course_output = ELearningUtils::getIliasCourses($this->seminar_id);
     if ($this->new_account_cms == "") {
         if ($this->module_system_type != "") {
             $user_crs_role = $connected_cms[$this->module_system_type]->crs_roles[$GLOBALS['auth']->auth["perm"]];
             ELearningUtils::loadClass($this->module_system_type);
         }
         if (Request::submitted('remove')) {
             $connected_cms[$this->module_system_type]->newContentModule($this->module_id, $this->module_type, true);
             if ($connected_cms[$this->module_system_type]->content_module[$this->module_id]->unsetConnection($this->seminar_id, $this->module_id, $this->module_type, $this->module_system_type)) {
                 PageLayout::postMessage(MessageBox::info(_('Die Zuordnung wurde entfernt.')));
             }
             unset($connected_cms[$this->module_system_type]->content_module[$this->module_id]);
         } elseif (Request::submitted('add')) {
             $connected_cms[$this->module_system_type]->newContentModule($this->module_id, $this->module_type, true);
             if ($connected_cms[$this->module_system_type]->content_module[$this->module_id]->setConnection($this->seminar_id)) {
                 PageLayout::postMessage(MessageBox::info(_('Die Zuordnung wurde gespeichert.')));
             }
             unset($connected_cms[$this->module_system_type]->content_module[$this->module_id]);
         }
         if ($this->search_key != "") {
             ELearningUtils::loadClass($this->cms_select);
             if (strlen(trim($this->search_key)) > 2) {
                 $searchresult_content_modules = $connected_cms[$this->cms_select]->searchContentModules($this->search_key);
             } else {
                 PageLayout::postMessage(MessageBox::error(_('Jeder Suchbegriff muss mindestens 3 Zeichen lang sein!')));
             }
         }
     }
     //Instanz mit den Zuordnungen von Content-Modulen zur Veranstaltung
     $object_connections = new ObjectConnections($this->seminar_id);
     $connected_modules = $object_connections->getConnections();
     $this->module_count = 0;
     $content_modules_list = array();
     $user_modules_list = array();
     $search_modules_list = array();
     if ($object_connections->isConnected()) {
         $caching_active = true;
         foreach ($connected_modules as $key => $connection) {
             if (ELearningUtils::isCMSActive($connection["cms"])) {
                 ELearningUtils::loadClass($connection["cms"]);
                 $connected_cms[$connection["cms"]]->newContentModule($connection["id"], $connection["type"], true);
                 $connected_modules[$key]['title'] = $connected_cms[$connection["cms"]]->content_module[$connection["id"]]->getTitle();
                 $title_tmp[$key] = str_replace(array('ä', 'ö', 'ü', 'ß'), array('ae', 'oe', 'ue', 'ss'), strtolower($connected_modules[$key]['title']));
                 $type_tmp[$key] = array_search($connection['type'], array_keys($GLOBALS['ELEARNING_INTERFACE_MODULES'][$connection["cms"]]['types']));
                 $class_tmp[$key] = $GLOBALS['ELEARNING_INTERFACE_MODULES'][$connection["cms"]]["CLASS_PREFIX"];
             }
         }
         array_multisort($class_tmp, SORT_ASC, $type_tmp, SORT_ASC, $title_tmp, SORT_ASC, $connected_modules);
         foreach ($connected_modules as $index => $connection) {
             $current_module = $connection["id"];
             if ($this->module_count == 0) {
                 $content_modules_list[$index]['show_header'] = true;
             }
             $this->module_count++;
             $this->module_system_count[$connection["cms"]]++;
             if ($this->open_all != "") {
                 $_SESSION['elearning_open_close'][$connected_cms[$connection["cms"]]->content_module[$connection["id"]]->getReferenceString()] = true;
             } elseif ($this->close_all != "") {
                 $_SESSION['elearning_open_close'][$connected_cms[$connection["cms"]]->content_module[$connection["id"]]->getReferenceString()] = false;
             }
             $content_modules_list[$index]['module'] = $connected_cms[$connection["cms"]]->content_module[$connection["id"]]->view->showAdmin();
         }
     }
     if ($this->module_count == 0 and $this->new_account_cms == "") {
         if ($_SESSION['SessSemName']['class'] == 'inst') {
             PageLayout::postMessage(MessageBox::info(_('Momentan sind dieser Einrichtung keine Lernmodule zugeordnet.')));
         } else {
             PageLayout::postMessage(MessageBox::info(_('Momentan sind dieser Veranstaltung keine Lernmodule zugeordnet.')));
         }
     }
     $this->caching_active = false;
     if (isset($GLOBALS['ELEARNING_INTERFACE_MODULES'][$this->cms_select]["name"])) {
         ELearningUtils::loadClass($this->cms_select);
         $user_content_modules = $connected_cms[$this->cms_select]->getUserContentModules();
         if (!($user_content_modules == false)) {
             foreach ($user_content_modules as $key => $connection) {
                 // show only those modules which are not already connected to the seminar
                 if (is_object($connected_cms[$this->cms_select]->content_module[$connection["ref_id"]])) {
                     continue;
                 }
                 $connected_cms[$this->cms_select]->setContentModule($connection, false);
                 $connected_cms[$this->cms_select]->content_module[$current_module]->view->showAdmin();
                 $user_modules_list[$key]['module'] = $connected_cms[$this->cms_select]->content_module[$current_module]->view->showAdmin();
             }
         }
         if (!$connected_cms[$this->cms_select]->isAuthNecessary() || $connected_cms[$this->cms_select]->user->isConnected()) {
             $this->show_search = true;
         }
         if (!($searchresult_content_modules == false)) {
             foreach ($searchresult_content_modules as $key => $connection) {
                 // show only those modules which are not already connected to the seminar
                 if (is_object($connected_cms[$this->cms_select]->content_module[$connection["ref_id"]])) {
                     continue;
                 }
                 $connected_cms[$this->cms_select]->setContentModule($connection, false);
                 $search_modules_list[$key]['module'] = $connected_cms[$this->cms_select]->content_module[$current_module]->view->showAdmin();
             }
         }
         // ILIAS 4: Leeren Kurs anlegen oder Kurse von anderen Veranstaltungen zuordnen
         if (method_exists($connected_cms[$this->cms_select], "updateConnections") and !$this->module_system_count[$this->cms_select] and !ObjectConnections::getConnectionModuleId($this->seminar_id, "crs", $this->cms_select)) {
             $show_ilias_empty_course = true;
             if ($GLOBALS['perm']->have_perm('root')) {
                 $query = "SELECT DISTINCT object_id, module_id, Name\n                                  FROM object_contentmodules\n                                  LEFT JOIN seminare ON (object_id = Seminar_id)\n                                  WHERE module_type = 'crs' AND system_type = ?";
             } else {
                 $query = "SELECT DISTINCT object_id, module_id, Name\n                                  FROM object_contentmodules\n                                  LEFT JOIN seminare ON (object_id = Seminar_id)\n                                  LEFT JOIN seminar_user USING (Seminar_id)\n                                  WHERE module_type = 'crs' AND system_type = ? AND seminar_user.status = 'dozent'";
             }
             $statement = DBManager::get()->prepare($query);
             $statement->execute(array($this->cms_select));
             while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
                 if ($GLOBALS['perm']->have_studip_perm('dozent', $row['object_id'])) {
                     $existing_courses[$row['object_id']] = my_substr($row['Name'], 0, 60) . " " . sprintf(_("(Kurs-ID %s)"), $row['module_id']);
                 }
             }
         } elseif (method_exists($connected_cms[$this->cms_select], "updateConnections") and count($connected_cms[$this->cms_select]->types['webr'])) {
             $this->show_ilias_link_info = true;
             $crs_data = ObjectConnections::getConnectionModuleId($this->seminar_id, "crs", $this->cms_select);
         }
     }
     // Cachen der SOAP-Daten
     if (is_array($connected_cms)) {
         foreach ($connected_cms as $system) {
             $system->terminate();
         }
     }
     $widget = new ActionsWidget();
     if (count($this->course_output['courses'])) {
         $widget->addLink(_('Zuordnungen aktualisieren'), URLHelper::getURL('?view=edit&cms_select=' . $this->cms_select . '&update=1'), Icon::create('refresh', 'clickable'));
     }
     $this->sidebar->addWidget($widget);
     $this->new_account = $this->new_account_cms;
     $this->is_inst = $_SESSION['SessSemName']['class'] == 'inst';
     if ($this->cms_select) {
         $this->cms_name = $connected_cms[$this->cms_select]->getName();
         $this->cms_logo = $connected_cms[$this->cms_select]->getLogo();
         $this->user_modules = $user_modules_list;
         $this->search_modules = $search_modules_list;
         $this->existing_courses = $existing_courses;
         $this->show_ilias_empty_course = $show_ilias_empty_course;
     }
     $this->content_modules = $content_modules_list;
 }