Beispiel #1
0
 /**
  * @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}");
     }
 }
Beispiel #2
0
 /**
  * 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;
     }
 }
Beispiel #5
0
                    // 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)) {