forked from lageIBUSP/notaR-legacy
/
exercicio.php
78 lines (74 loc) · 3.21 KB
/
exercicio.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<?php require('head.php');
if(empty($_REQUEST['exerc'])) {echo "Erro. Se você usou um link para chegar aqui, notifique o administrador"; exit;}
$X = new Exercicio($_REQUEST['exerc']);
?>
<h2><?php
echo $X->getNome();
if ($USER->admin()) echo " <a href='cadastra.php?exerc=".$X->getId()."'><img src='img/pen.png'></a>";
?></h2>
<?php
echo $X->getHtml();
?>
<form name="notaR" action="#" method="post" enctype="multipart/form-data">
<input type="hidden" name="exerc" value="<?php echo $X->getId(); ?>">
<input type="hidden" name="MAX_FILE_SIZE" value="30000">
<input type="file" name="rfile" id="rfile" accept=".R">
<br><button type="submit" value="Submit">Submeter!</button>
<a href="https://github.com/lageIBUSP/notaR/wiki/Submetendo-respostas">ajuda?</a>
</form>
<div id="corretoR" >
<?php
if (isset($_POST['exerc'])) {
require_once 'Rserve-php/Connection.php';
if (empty($_FILES['rfile']["tmp_name"])) {
echo "Nenhum arquivo recebido. Verifique se houve algum problema no upload.";
echo "<br>Possíveis causas de erro: <ul><li>Você esqueceu de fornecer um nome de arquivo?</li>";
echo "<li>O arquivo é grande demais? (máximo aceito: 15 mil caracteres)</li>";
echo "<li>Você salvou o arquivo usando algum processador de texto, como o Word?</li>";
echo "</ul>";
} else {
$uploadfile = $BASEDIR ."/tmp/". basename($_FILES['rfile']['tmp_name']);
move_uploaded_file($_FILES['rfile']['tmp_name'], $uploadfile);
### Correcao de bug! O R trava se o editor de texto não encerrou
# a ultima linha
system ("echo ' ' >> $uploadfile");
$conts = file_get_contents($uploadfile);
$probs = new Proibidos();
$teste = $probs->pass($conts, $X->getId());
if ($teste === FALSE) { # Verifica se existe alguma palavra proibida na resposta
try{
$r = new Rserve_Connection(RSERVE_HOST);
} catch (Exception $e) {
echo 'Erro interno ao conectar no servidor. Notifique os administradores do sistema!<br>';
if (error_reporting() & E_ERROR)
echo $e;
}
try {
$text = 'source("'.$BASEDIR.'/corretor.R");';
$text .= 'con <- connect("'.$DBUSER.'","'.$DBPASS.'","'.$DBNAME.'");';
$text .= 'PATH <- "'.$BASEDIR.'";';
$text .= 'notaR("'.$USER->getNome().'", '.$X->getId().', "'.$uploadfile.'")';
$x = $r->evalString($text);
if(is_null($x)) echo "<font color='#8c2618'>Aviso: seu código contém alguma ".
"funcionalidade do R não suportada pelo notaR. Remova as funções ".
"gráficas (como <i>plot</i> ou <i>hist</i>) do seu código e tente novamente.</font>";
echo $x;
echo "<p>Seu código:</p><p class='code'>".nl2br($conts)."</p>";
} catch (Exception $e) {
echo 'Erro interno ao executar o corretor. Verifique se as pre-condições executam.';
if (error_reporting() & E_ERROR)
echo $e;
}
}
else {echo "<font color='#8c2618'>AVISO! O arquivo enviado não pode conter a(s) palavra(s) \"$teste\". Corrija essa condição e tente novamente.</font>";}
}
}
else
{ echo "<p>Insira sua resposta no campo acima e aperte OK</p>";
}
?>
</div>
<div id="etc" onclick="fullch(); return null;">...</div>
</div>
</body>
</html>