/** * @param MongoDB|MongoDB\Database|MongoCollection|MongoDB\Collection $backend */ public function __construct($backend = null) { if (!isset($backend)) { $client = class_exist('MongoCollection') ? new \MongoClient() : new \MongoDB\Client(); $backend = $client->selectDatabase('cache'); } if ($backend instanceof \MongoCollection || $backend instanceof \MongoDB\Collection) { $this->collection = $backend; } elseif ($backend instanceof \MongoDB || $backend instanceof \MongoDB\Database) { $this->collection = $backend->selectCollection('items'); } else { $type = (is_object($database) ? get_class($database) . ' ' : '') . gettype($database); throw new CacheException("Database should be a database (MongoDB or MongoDB\\Database) or " . " collection (MongoCollection or MongoDB\\Collection) object, not a {$type}"); } }
/** * Remove a list of users given their user id from the cours * @param array $userIdList list of user ids to add * @param Claro_Class $class execute class unregistration instead of individual registration if given (default:null) * @param bool $keepTrackingData tracking data will be deleted if set to false (default:true, i.e. keep data) * @param array $moduleDataToPurge list of module_label => (purgeTracking => bool, purgeData => bool) * @param bool $unregisterFromSourceIfLastSession remove users that are in no other session course from the source course if any * @return boolean */ public function removeUserIdListFromCourse($userIdList, $class = null, $keepTrackingData = true, $moduleDataToPurge = array(), $unregisterFromSourceIfLastSession = true) { if (!count($userIdList)) { return false; } $classMode = is_null($class) ? false : true; $courseCode = $this->course->courseId; $sqlCourseCode = $this->database->quote($courseCode); if ($classMode && !$class->isRegisteredToCourse($courseCode)) { $this->result->addError(get_lang("Class not registered to course")); $this->result->setStatus(Claro_BatchRegistrationResult::STATUS_ERROR_NOTHING_TO_DO); return false; } // update user registration counts $cntToChange = $classMode ? 'count_class_enrol' : 'count_user_enrol'; $this->database->exec("\n UPDATE\n `{$this->tableNames['rel_course_user']}`\n SET\n `{$cntToChange}` = `{$cntToChange}` - 1\n WHERE\n `code_cours` = {$sqlCourseCode}\n AND\n `{$cntToChange}` > 0\n AND\n `user_id` IN (" . implode(',', $userIdList) . ")\n "); // get the user ids to remove $userListToRemove = $this->database->query("\n SELECT \n `user_id`\n FROM\n `{$this->tableNames['rel_course_user']}`\n WHERE\n `count_class_enrol` <= 0\n AND\n `count_user_enrol` <= 0\n AND\n `code_cours` = {$sqlCourseCode}\n "); if ($userListToRemove->numRows()) { $userIdListToRemove = array(); foreach ($userListToRemove as $user) { $userIdListToRemove[] = $user['user_id']; } $sqlList = array(); $sqlList[] = "DELETE FROM `{$this->tableNames['bb_rel_topic_userstonotify']}` WHERE user_id IN (" . implode(',', $userIdListToRemove) . ")"; $sqlList[] = "DELETE FROM `{$this->tableNames['userinfo_content']}` WHERE user_id IN (" . implode(',', $userIdListToRemove) . ")"; $sqlList[] = "UPDATE `{$this->tableNames['group_team']}` SET `tutor` = NULL WHERE `tutor` IN (" . implode(',', $userIdListToRemove) . ")"; $sqlList[] = "DELETE FROM `{$this->tableNames['group_rel_team_user']}` WHERE user IN (" . implode(',', $userIdListToRemove) . ")"; if (!$keepTrackingData) { $sqlList[] = "DELETE FROM `{$this->tableNames['tracking_event']}` WHERE user_id IN (" . implode(',', $userIdListToRemove) . ")"; } $sqlList[] = "DELETE FROM `{$this->tableNames['rel_course_user']}` WHERE user_id IN (" . implode(',', $userIdListToRemove) . ") AND `code_cours` = {$sqlCourseCode}"; foreach ($sqlList as $sql) { $this->database->exec($sql); } if (!empty($moduleDataToPurge)) { foreach ($moduleDataToPurge as $moduleData) { $connectorPath = get_module_path($moduleData['label']) . '/connector/adminuser.cnr.php'; if (file_exists($connectorPath)) { require_once $connectorPath; $connectorClass = $moduleData['label'] . '_AdminUser'; if (class_exist($connectorClass)) { $connector = new $connectorClass($this->database); if ($moduleData['purgeTracking']) { $connector->purgeUserListCourseTrackingData($userIdListToRemove, $this->course->courseId); } if ($moduleData['purgeResources']) { $connector->purgeUserListCourseResources($userIdListToRemove, $this->course->courseId); } } else { Console::warning("Class {$connectorClass} not found"); } } else { Console::warning("No user delete connector found for module {$moduleData['label']}"); } } } $this->result->addDeleted($userIdListToRemove); if ($this->course->isSourceCourse()) { $sessionCourseIterator = $this->course->getChildren(); foreach ($sessionCourseIterator as $sessionCourse) { $batchReg = new self($sessionCourse, $this->database); $batchReg->removeUserIdListFromCourse($userIdListToRemove, $class, $keepTrackingData, $moduleDataToPurge, $unregisterFromSourceIfLastSession); $this->result->mergeResult($batchReg->getResult()); } } if ($this->course->hasSourceCourse() && $unregisterFromSourceIfLastSession) { $sourceCourse = $this->course->getSourceCourse(); $sessionCourseIterator = $sourceCourse->getChildren(); $foundSessionWithClass = false; if ($classMode) { foreach ($sessionCourseIterator as $sessionCourse) { if ($sessionCourse->courseId != $this->course->courseId && $class->isRegisteredToCourse($sessionCourse->courseId)) { $foundSessionWithClass = true; } } if (!$foundSessionWithClass) { $batchReg = new self($sourceCourse, $this->database); $batchReg->removeUserIdListFromCourse($userIdListToRemove, $class, $keepTrackingData, $moduleDataToPurge, $unregisterFromSourceIfLastSession); } } else { // get userids registered in other sessions than the current one $sessionList = $sourceCourse->getChildrenList(); if (count($sessionList)) { $userIdListToRemoveFromSource = array(); $sessionIdList = array_keys($sessionList); $sqlCourseCode = $this->database->quote($this->course->courseId); $usersInOtherSessions = $this->database->query("\n SELECT\n user_id\n FROM\n `{$this->tableNames['rel_course_user']}`\n WHERE\n user_id IN (" . implode(',', $userIdListToRemove) . ")\n AND\n code_cours IN ('" . implode("','", $sessionIdList) . "')\n AND\n code_cours != {$sqlCourseCode}\n "); // loop on $userIdList and keep only those who are not in another session and inject them in $userIdListToRemoveFromSource $usersInOtherSessionsList = array(); foreach ($usersInOtherSessions as $userNotToRemove) { $usersInOtherSessionsList[$userNotToRemove['user_id']] = $userNotToRemove['user_id']; } foreach ($userListToRemove as $userIdToRemove) { if (!isset($usersInOtherSessionsList[$userIdToRemove['user_id']])) { $userIdListToRemoveFromSource[] = $userIdToRemove['user_id']; } } if (count($userIdListToRemoveFromSource)) { $batchReg = new self($sourceCourse, $this->database); $batchReg->removeUserIdListFromCourse($userIdListToRemoveFromSource, $class, $keepTrackingData, $moduleDataToPurge, $unregisterFromSourceIfLastSession); $this->result->mergeResult($batchReg->getResult()); } } } } } else { $this->result->setStatus(Claro_BatchRegistrationResult::STATUS_ERROR_NOTHING_TO_DO); $this->result->addError(get_lang("No user to delete")); } return !$this->result->hasError(); }
/** * @Ajax */ public function classExists() { \OC_Util::checkAdminUser(); $params = $this->request->get; return new JSONResponse(class_exist($params['class']) ? array('ok') : array('ko')); }
/** * Inject the renderer, if needed, and potentially the escaper. * * @param array $config * @param Mustache $mustache * @param ContainerInterface $container */ private function injectRenderer(array $config, Mustache $mustache, ContainerInterface $container) { if (isset($config['renderer'])) { if (is_string($config['renderer']) && $container->has($config['renderer'])) { // Assume fully configured at this point. $mustache->setRenderer($container->get($config['renderer'])); return; } if ($config['renderer'] instanceof Renderer) { $mustache->setRenderer($config['renderer']); } if (is_string($config['renderer']) && class_exists($config['renderer'])) { $mustache->setRenderer(new $config['renderer']()); } } if (!isset($config['escaper'])) { return; } if ($config['escaper'] instanceof Escaper) { $mustache->getRenderer()->setEscaper($config['escaper']); return; } if (!is_string($config['escaper'])) { return; } if ($container->has($config['escaper'])) { $mustache->getRenderer()->setEscaper($container->get($config['escaper'])); return; } if (class_exist($config['escaper'])) { $mustache->getRenderer()->setEscaper(new $config['escaper']()); return; } }
// nothing to do break; } } // Move a class in the tree (display form) // Move a class in the tree (display form) case 'rqMove': $dialogBox->form('<form action="' . $_SERVER['PHP_SELF'] . '">' . '<table>' . '<tr>' . "\n" . '<td>' . "\n" . get_lang('Move') . " " . claro_htmlspecialchars($form_data['class_name']) . ' : ' . '</td>' . "\n" . '<td>' . "\n" . '<input type="hidden" name="cmd" value="exMove" />' . "\n" . '<input type="hidden" name="class_id" value="' . $form_data['class_id'] . '" />' . "\n" . displaySelectBox() . '<input type="submit" value="' . get_lang('Ok') . '" />' . "\n" . '</td>' . "\n" . '</tr>' . "\n" . '</table>' . '</form>'); break; } // Get all classes $class_list = get_class_list(); // Command list $cmdList = array(); $cmdList[] = array('img' => 'class', 'name' => get_lang('Create a new class'), 'url' => $_SERVER['PHP_SELF'] . '?cmd=rqAdd'); if (class_exist()) { $cmdList[] = array('img' => 'class', 'name' => get_lang('Empty all classes'), 'url' => $_SERVER['PHP_SELF'] . '?cmd=exEmptyAll', 'params' => array('onclick' => 'if (confirm(\'' . clean_str_for_javascript(get_lang('Empty all classes ?')) . '\')){return true;}else{return false;}"')); $cmdList[] = array('img' => 'class', 'name' => get_lang('Delete all classes'), 'url' => $_SERVER['PHP_SELF'] . '?cmd=exDeleteAll', 'params' => array('onclick' => 'if (confirm(\'' . clean_str_for_javascript(get_lang('Delete all classes ?')) . '\')){return true;}else{return false;}"')); } //------------------------------------------------------- // Display section //------------------------------------------------------- $out = ''; // Display title $out .= claro_html_tool_title($nameTools, null, $cmdList); // Display dialog Box (or any forms) $out .= $dialogBox->render(); // Display cols headers $out .= '<table class="claroTable emphaseLine" width="100%" border="0" cellspacing="2">' . "\n" . '<thead>' . "\n" . '<tr>' . '<th>' . get_lang('Classes') . '</th>' . '<th>' . get_lang('Users') . '</th>' . '<th>' . get_lang('Courses') . '</th>' . '<th>' . get_lang('Edit settings') . '</th>' . '<th>' . get_lang('Move') . '</th>' . '<th>' . get_lang('Delete') . '</th>' . '</tr>' . "\n" . '</thead>' . "\n" . '<tbody>' . "\n"; // Display class list if (display_tree_class_in_admin($class_list)) {