diff --git a/console.php b/console.php index d102334d80..7a77a462fe 100755 --- a/console.php +++ b/console.php @@ -88,6 +88,7 @@ $cli->addCommands( new ChamiloLMS\Command\Modulation\ModulationStopTurnCommand(), new ChamiloLMS\Command\Modulation\ModulationIsolateKeyCommand(), new ChamiloLMS\Command\Modulation\ModulationDuplicateInstallCommand(), + new ChamiloLMS\Command\Modulation\ModulationUsersInExamCommand(), // Chash commands. new Chash\Command\Database\RunSQLCommand(), diff --git a/main/exercice/exercise.class.php b/main/exercice/exercise.class.php index 954f03f979..779e4a80f4 100644 --- a/main/exercice/exercise.class.php +++ b/main/exercice/exercise.class.php @@ -6910,7 +6910,6 @@ class Exercise array() ); - /* $log_transactions_settings = TransactionLog::getTransactionSettings(); if (isset($log_transactions_settings['exercise_attempt'])) { $transaction_controller = new TransactionLogController(); @@ -6931,7 +6930,7 @@ class Exercise $transaction = $transaction_controller->createTransaction('exercise_attempt', $transaction_data); } $transaction->save(); - }*/ + } } // Send notification. diff --git a/src/ChamiloLMS/Command/Modulation/ModulationIsolateKeyCommand.php b/src/ChamiloLMS/Command/Modulation/ModulationIsolateKeyCommand.php index 1ea2d4c17d..a6ea2349e4 100644 --- a/src/ChamiloLMS/Command/Modulation/ModulationIsolateKeyCommand.php +++ b/src/ChamiloLMS/Command/Modulation/ModulationIsolateKeyCommand.php @@ -39,6 +39,9 @@ class ModulationIsolateKeyCommand extends Command Session::setSession($app['session']); Session::write('_user', api_get_user_info(1)); + $destDir = '/var/opt/keys'; + $certServ = 'http://debian4.beeznest.org/keys/'; + $branchId = intval($input->getArgument('key')); $sql = "SELECT session_id FROM branch_rel_session WHERE branch_id = $branchId ORDER BY display_order"; $res = Database::query($sql); @@ -64,37 +67,60 @@ class ModulationIsolateKeyCommand extends Command // optional clean-up. Delete if necessary $sql2 = "DELETE FROM branch_sync where branch_id != $branchId"; echo $sql2."\n"; - //Database::query($sql2); + Database::query($sql2); $sql2 = "DELETE FROM session WHERE id NOT IN (".implode(', ',$sessions).")"; echo $sql2."\n"; - //Database::query($sql2); + Database::query($sql2); $sql2 = "DELETE FROM session_rel_course WHERE id_session NOT IN (".implode(', ',$sessions).")"; echo $sql2."\n"; - //Database::query($sql2); + Database::query($sql2); $sql2 = "DELETE FROM session_rel_course_rel_user WHERE id_session NOT IN (".implode(', ',$sessions).")"; echo $sql2."\n"; - //Database::query($sql2); + Database::query($sql2); $sql2 = "DELETE FROM session_rel_user WHERE id_session NOT IN (".implode(', ',$sessions).")"; echo $sql2."\n"; - //Database::query($sql2); + Database::query($sql2); $sql2 = "DELETE FROM c_quiz_distribution_rel_session WHERE session_id NOT IN (".implode(', ',$sessions).")"; echo $sql2."\n"; - //Database::query($sql2); + Database::query($sql2); $sql2 = "DELETE FROM access_url_rel_session WHERE session_id NOT IN (".implode(', ',$sessions).")"; echo $sql2."\n"; - //Database::query($sql2); + Database::query($sql2); $sql2 = "DELETE FROM branch_rel_session WHERE session_id NOT IN (".implode(', ',$sessions).")"; echo $sql2."\n"; - //Database::query($sql2); + Database::query($sql2); $sql2 = "DELETE FROM user WHERE user_id NOT IN (".implode(', ',$sessionUsers).") AND user_id > 1"; echo $sql2."\n"; - //Database::query($sql2); + Database::query($sql2); $sql3 = "SELECT count(*) FROM user"; $res3 = Database::query($sql3); $count = Database::fetch_row($res3); + // Set the local branch accordindly. + // See if it's there before. + $local_branch_settings = api_get_settings_params_simple(array('variable = ?' => 'local_branch_id')); + if (empty($local_branch_settings['selected_value'])) { + $insert_local_branch_sql = sprintf("INSERT INTO settings_current (variable, type, category, selected_value, title, comment, access_url_changeable) + VALUES ('local_branch_id', 'textfield', 'LogTransactions', %d, 'LogTransactionsDefaultBranch', 'LogTransactionsDefaultBranchComment', 1)", $branchId); + Database::query($insert_local_branch_sql); + } + else { + $update_local_branch_sql = sprintf("UPDATE settings_current SET selected_value = %d WHERE variable = 'local_branch_id'", $branchId); + Database::query($update_local_branch_sql); + } - $output->writeln("$count users remain"); - $output->writeln('The database should now be isolated.'); - return true; + //$output->writeln("$count users remain"); + //$output->writeln('The database should now be isolated.'); + + // Make dir if not present. Assume the command succeeds as everything + // executes as root anyway + if (!is_dir($destDir)) { + @mkdir($destDir); + } + // Get the SSL certificate from the server, at + // http://server/keys/24.p12 + $cert = file_get_contents($certServ.$branchId.'.p12'); + @file_put_contents($destDir.'/'.$branchId.'.p12',$cert); + $caPub = file_get_contents($certServ.'ca-cert.pem'); + @file_put_contents($destDir.'/ca-cert.pem',$caPub); } } diff --git a/src/ChamiloLMS/Command/Modulation/ModulationUsersInExamCommand.php b/src/ChamiloLMS/Command/Modulation/ModulationUsersInExamCommand.php new file mode 100644 index 0000000000..20a7f95ccf --- /dev/null +++ b/src/ChamiloLMS/Command/Modulation/ModulationUsersInExamCommand.php @@ -0,0 +1,55 @@ +setName('modulation:users-in-exam') + ->setDescription('Gets the number of users still busy taking an exam'); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + // This is just wrong, but was requested. Used to pass a session_id to + // be used on the MineduAuthHttpsPostSend plugin. + global $session_id, $app; + Session::setSession($app['session']); + Session::write('_user', api_get_user_info(1)); + + $sql = "SELECT NOW()"; + $res = Database::query($sql); + $row = Database::fetch_row($res); + $current_date = $row[0]; + $query = "SELECT count(distinct(user_id)) ". + " FROM track_e_attempt ". + " WHERE DATE_ADD(tms, ". + " INTERVAL 2 MINUTE) >= '".$current_date."' "; + $res = Database::query($query); + $row = Database::fetch_row($res); + $output->writeln($row[0]); + return true; + } +} diff --git a/src/ChamiloLMS/Component/Auth/LoginSuccessHandler.php b/src/ChamiloLMS/Component/Auth/LoginSuccessHandler.php index 48036e1ec1..b7107d5649 100644 --- a/src/ChamiloLMS/Component/Auth/LoginSuccessHandler.php +++ b/src/ChamiloLMS/Component/Auth/LoginSuccessHandler.php @@ -79,6 +79,7 @@ class LoginSuccessHandler implements AuthenticationSuccessHandlerInterface foreach ($personal_course_list as $course) { if (!empty($course['session_id'])) { + if (api_get_session_visibility($course['session_id'],$course['id']) != SESSION_AVAILABLE) { continue; } $my_session_list[$course['session_id']] = true; $count_of_courses_with_sessions++; } else {