Initial commit

This commit is contained in:
Douglas Barone 2023-04-18 08:38:34 -04:00
commit 1424585a16
33 changed files with 1139 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.env

6
.htaccess Normal file
View File

@ -0,0 +1,6 @@
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|assets|images|robots\.txt)
RewriteRule ^(.*)$ index.php?/$1 [L]

861
index.php Normal file
View File

@ -0,0 +1,861 @@
<?php
//estatisticas --> fma18g8E1IAC
error_reporting(E_ERROR | E_PARSE);
$mysql_servername = $_ENV["MYSQL_SERVERNAME"];
$mysql_username = $_ENV["MYSQL_USERNAME"];
$mysql_password = $_ENV["MYSQL_PASSWORD"];
$mysql_dbname = $_ENV["MYSQL_DBNAME"];
if(isset($_GET["img"])){
if(CHECK_USER_LOGADO()){
$name = '45hgGgFGD4467GgtyhujujhsdkgfkjfKJLHuygTGHJFjhgfDC3JHGFiuklilj7654HJGFfgdf/fotos/'.$_GET["img"].'.jpg';
if(!file_exists($name)){
$name = 'static/img/avatar_1.png';
}
$fp = fopen($name, 'rb');
header("Content-Type: image/png");
header("Content-Length: " . filesize($name));
fpassthru($fp);
exit;
}
}
//if(isset($_POST["cmd"])){
$entrada = json_decode(file_get_contents('php://input'), true);
$saida = array();
if(array_key_exists("cmd",$entrada)){
switch ($entrada["cmd"]) {
case "check_login":
if(check_login($entrada["email"],$entrada["token"])){
$saida["res"] = "ok";
}else{
$saida["res"] = "erro";
}
break;
case "login":
$saida = login($entrada["email"],$entrada["senha"]);
break;
case "ultimo_relatorio":
if(CHECK_USER_LOGADO()){
$saida = ultimo_relatorio("45hgGgFGD4467GgtyhujujhsdkgfkjfKJLHuygTGHJFjhgfDC3JHGFiuklilj7654HJGFfgdf/ultimo_relatorio.csv");
}
$saida["res"] = "ok";
break;
case "set_marcacoes":
$saida = set_marcacao($entrada);;
break;
case "get_marcacoes":
$saida = get_marcacoes($entrada);;
break;
default:
$saida = array("res"=>"erro", "msg"=>"comando nao existe");
break;
}
header('Content-type: application/json');
echo json_encode($saida);
exit;
}
function get_marcacoes($entrada){
$matricula = $entrada["matricula"];
$mysql_servername = $GLOBALS['mysql_servername'];
$mysql_username = $GLOBALS['mysql_username'];
$mysql_password = $GLOBALS['mysql_password'];
$mysql_dbname = $GLOBALS['mysql_dbname'];
$mysql_conn = new mysqli($mysql_servername, $mysql_username, $mysql_password, $mysql_dbname);
$m = array(0=>false,1=>true);
if(existe_marcacao($matricula)){
$sql = "SELECT `matricula`, `whats`, `whats`, `fone`, `email`, `visita`, `pessoal`, `sucesso`, `comentario` FROM `acoes` WHERE matricula='$matricula'";
$result = $mysql_conn->query($sql);
if ($result->num_rows > 0) {
while($linha = $result->fetch_assoc()) {
$r = array();
$r["matricula"] = $matricula;
$r["pessoal"] = $m[$linha["pessoal"]];
$r["whats"] = $m[$linha["whats"]];
$r["fone"] = $m[$linha["fone"]];
$r["email"] = $m[$linha["email"]];
$r["visita"] = $m[$linha["visita"]];
$r["sucesso"] = $m[$linha["sucesso"]];
$r["comentario"] = $linha["comentario"];
return $r;
}
}
}
$mysql_conn->close();
$linha = array(
"res"=>"ok",
"matricula"=>$matricula,
"pessoal"=>false,
"whats"=>false,
"fone"=>false,
"email"=>false,
"visita"=>false,
"sucesso"=>false,
"comentario"=>""
);
return $linha ;
}
function set_marcacao($entrada){
$matricula = $entrada["matricula"];
$pessoal = $entrada["pessoal"];
$whats = $entrada["whats"];
$fone = $entrada["fone"];
$email = $entrada["email"];
$visita = $entrada["visita"];
$sucesso = $entrada["sucesso"];
$comentario = $entrada["comentario"];
$mysql_servername = $GLOBALS['mysql_servername'];
$mysql_username = $GLOBALS['mysql_username'];
$mysql_password = $GLOBALS['mysql_password'];
$mysql_dbname = $GLOBALS['mysql_dbname'];
$mysql_conn = new mysqli($mysql_servername, $mysql_username, $mysql_password, $mysql_dbname);
if(existe_marcacao($matricula)){
$sql = "UPDATE `acoes` SET `pessoal`='$pessoal', `whats`='$whats', `fone`='$fone', `email`='$email', `visita`='$visita', `sucesso`='$sucesso', `comentario`='$comentario' WHERE matricula='$matricula'";
}else{
$sql = "INSERT INTO `acoes`(`matricula`, `pessoal`, `whats`, `fone`, `email`, `visita`, `sucesso`, `comentario`) VALUES ('$matricula', '$pessoal', '$whats', '$fone', '$email', '$visita', '$sucesso', '$comentario')";
}
$result = $mysql_conn->query($sql);
$mysql_conn->close();
return array("res"=>"ok","rr"=>$sql,"entrada"=>$entrada);
}
function existe_marcacao($matricula){
$mysql_servername = $GLOBALS['mysql_servername'];
$mysql_username = $GLOBALS['mysql_username'];
$mysql_password = $GLOBALS['mysql_password'];
$mysql_dbname = $GLOBALS['mysql_dbname'];
$mysql_conn = new mysqli($mysql_servername, $mysql_username, $mysql_password, $mysql_dbname);
$sql = "SELECT `matricula` FROM `acoes` WHERE matricula='$matricula'";
$result = $mysql_conn->query($sql);
if ($result->num_rows > 0) {
while($linha = $result->fetch_assoc()) {
if($linha["matricula"]==$matricula){
return true;
}
}
}
$mysql_conn->close();
return false;
}
function CHECK_USER_LOGADO(){
if(!isset($_COOKIE['email'])){return false;};
if(!isset($_COOKIE['token'])){return false;};
if(check_login($_COOKIE["email"],$_COOKIE["token"])){return true;};
return false;
}
function ultimo_relatorio($arquivo){
#"estudante","unidade_curricular","classe","curso","coordenacao","campus","qt_aulas_classe","data_falta","matricula","id_classe","turma","professor","celular","email","email_institucional","endereco","idade"
#"estudante","turma","total_faltas","faltas_por_dia","matricula","celular","email","endereco","idade"
$datas = array();
$turmas = array();
$risco_turma = array();
$linhas = csvToArray($arquivo);
$k = mapa_de_chaves($linhas[0]);
$ultima_matricula = "";
$primeiro = true;
$nova_linha = array();
$turnos = array("1"=>" - Matutino","2"=>" - Vespertino","3"=>" - Noturno","4"=>"","5"=>"","0"=>"");
$dados = array();
$LIMITE_DE_FALTAS = 20;
for($i = 1; $i<count($linhas); $i++){
$linha = $linhas[$i];
if(count($linha)>=6){
if ($ultima_matricula!= $linha[$k["matricula"]]){
if(!$primeiro){
ksort($nova_linha["faltas_por_dia"]);
$chave_lista = str_pad($nova_linha["total_faltas"], 6 , '0' , STR_PAD_LEFT) ."_". $nova_linha["estudante"];
if($nova_linha["em_risco"]){
$dados[$chave_lista] = $nova_linha;
}
if($nova_linha["em_risco"]){
$risco_turma[$nova_linha["turma"]] +=1;
}
}
$nova_linha = array();
$nova_linha["estudante"] = $linha[$k["estudante"]];
$nova_linha["matricula"] = $linha[$k["matricula"]];
$turma = end(explode(" ", $linha[$k["curso"]])) ." ". substr($linha[$k["turma"]],-2, 2). $turnos[substr($linha[$k["turma"]],-4, 1)] ;
$nova_linha["turma"] = $turma ;
$nova_linha["total_faltas"] = 0;
$nova_linha["faltas_por_dia"] = array();
$nova_linha["faltas_por_disciplina"] = array();
$nova_linha["celular"] = $linha[$k["celular"]];
$nova_linha["endereco"] = $linha[$k["endereco"]];
$nova_linha["email"] = $linha[$k["email"]];
$nova_linha["idade"] = $linha[$k["idade"]];
$nova_linha["em_risco"] = false;
$primeiro = false;
$ultima_matricula = $linha[$k["matricula"]];
}
$turmas[$turma] +=1;
$nova_linha["faltas_por_dia"][ tdata( $linha[$k["data_falta"]] ) ] +=1;
$nova_linha["total_faltas"] += 1;
if($nova_linha["total_faltas"]>= $LIMITE_DE_FALTAS){
$nova_linha["em_risco"] = true;
}
$datas[tdata($linha[$k["data_falta"]])] +=1;
}
}
$chave_lista = str_pad($nova_linha["total_faltas"], 6 , '0' , STR_PAD_LEFT) ."_". $nova_linha["estudante"];
if($nova_linha["em_risco"]){
$dados[ $chave_lista ] = $nova_linha;
}
if($nova_linha["em_risco"]){
$risco_turma[$nova_linha["turma"]] +=1;
}
ksort($risco_turma,SORT_STRING);
ksort($dados,SORT_STRING);
ksort($turmas,SORT_STRING);
ksort($datas,SORT_STRING);
return array("turmas"=>$turmas,"risco_turma"=>$risco_turma,"dados"=>$dados,"datas"=>$datas);
}
function tdata($data){
$d = explode("/", $data);
return $d[2] ."/" . $d[1] . "/" . $d[0];
}
function mapa_de_chaves($linha0){
$k = array();
for($i = 0; $i<count($linha0); $i++){
$k[$linha0[$i]] = $i;
}
return $k;
}
function lista_de_turmas($datas){
}
function login($email,$senha){
$mysql_servername = $GLOBALS['mysql_servername'];
$mysql_username = $GLOBALS['mysql_username'];
$mysql_password = $GLOBALS['mysql_password'];
$mysql_dbname = $GLOBALS['mysql_dbname'];
$mysql_conn = new mysqli($mysql_servername, $mysql_username, $mysql_password, $mysql_dbname);
$sql = "SELECT `email`,`senha` FROM `usuarios` WHERE email='$email'";
$result = $mysql_conn->query($sql);
if ($result->num_rows > 0) {
while($user = $result->fetch_assoc()) {
if($user["email"]==$email&&$user['senha']==$senha){
$token = gerar_token();
$sql = "UPDATE usuarios SET token='$token' WHERE email='$email'";
$mysql_conn->query($sql);
$mysql_conn->close();
return array("res"=>"ok","token"=> $token);
}
}
}
$mysql_conn->close();
return array("res"=>"erro", "token"=>"");
}
function check_login($email,$token){
$mysql_servername = $GLOBALS['mysql_servername'];
$mysql_username = $GLOBALS['mysql_username'];
$mysql_password = $GLOBALS['mysql_password'];
$mysql_dbname = $GLOBALS['mysql_dbname'];
$mysql_conn = new mysqli($mysql_servername, $mysql_username, $mysql_password, $mysql_dbname);
$sql = "SELECT `email`,`token` FROM `usuarios` WHERE email='$email'";
$result = $mysql_conn->query($sql);
$mysql_conn->close();
if ($result->num_rows > 0) {
while($user = $result->fetch_assoc()) {
if($user["email"]==$email&&$user['token']==$token){
return true;
}
}
}
return false;
}
function exemplo_busca(){
$mysql_servername = $GLOBALS['mysql_servername'];
$mysql_username = $GLOBALS['mysql_username'];
$mysql_password = $GLOBALS['mysql_password'];
$mysql_dbname = $GLOBALS['mysql_dbname'];
$conn = new mysqli($mysql_servername, $mysql_username, $mysql_password, $mysql_dbname);
if ($conn->connect_error) {die("Connection failed: " . $conn->connect_error);}
//$sql = "INSERT INTO `usuarios`(`email`, `senha`, `nome`) VALUES ('novoemail@gmail.com','12345678','novousuario')";
//$sql = "SELECT * FROM `usuarios` WHERE 1";
//$sql = "SELECT * FROM `usuarios` WHERE 1 ORDER BY nome DESC";
//$sql = "SELECT `email`,`senha` FROM `usuarios` WHERE email='novoemail@gmail.com'";
//$sql = "UPDATE usuarios SET senha='123', nome='abc' WHERE email='novoemail@gmail.com'";
//$sql = "DELETE FROM usuarios WHERE nome='abc'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
print_r($row);
echo "<br>";
}
}
$conn->close();
}
function gerar_token($tamanho=50, $maiusculas=true, $minusculas=true, $numeros=true, $simbolos=false){
$ma = "ABCDEFGHIJKLMNOPQRSTUVYXWZ";
$mi = "abcdefghijklmnopqrstuvyxwz";
$nu = "0123456789";
$si = "!@#$%¨&*()_+=";
if ($maiusculas){$senha .= str_shuffle($ma);}
if ($minusculas){$senha .= str_shuffle($mi);}
if ($numeros){$senha .= str_shuffle($nu);}
if ($simbolos){$senha .= str_shuffle($si);}
return substr(str_shuffle($senha),0,$tamanho);
}
function csvToArray($csvFile){
$file_to_read = fopen($csvFile, 'r');
$lines = array();
while (!feof($file_to_read) ) {
$lines[] = fgetcsv($file_to_read);
}
return $lines;
}
?>
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<link rel="shortcut icon" href="static/img/icone.ico"/>
<title>ProjetosIFMS</title>
<style>
*{
margin: 0;
padding: 0;
}
</style>
<link rel="stylesheet" href="static/materialize/icons/material_icons.css">
<link rel="stylesheet" href="static/materialize/css/materialize.min.css">
</head>
<body class='teal lighten-2'>
<div id="menu_voltar" class="navbar-fixed" style="display:none;">
<nav class="nav-extended">
<div class="nav-wrapper teal">
<div class="container">
<ul class="left">
<li><a onclick="voltar()"><i class="material-icons left">arrow_back</i>Voltar</a></li>
</ul>
<a id="titulo_do_menu_voltar" class="right"></a>
</div>
</div>
</nav>
</div>
<div id="menu_desktop" class="navbar-fixed" style="display:none;">
<nav class="nav-extended">
<div class="nav-wrapper teal">
<div class="container">
<a id="titulo_do_menu">Mapa das classes</a>
<a href="#" class="sidenav-trigger" data-target="menu_mobile">
<i class="material-icons">menu</i>
</a>
<ul class="right hide-on-med-and-down">
<li><a onclick="mostrar_aba('Estudantes em risco de evasão')"><i class="material-icons left">format_list_bulleted</i>Estudantes em risco</a></li>
<li style="display:none"><a onclick="mostrar_aba('Conselho pedagógico')" ><i class="material-icons left">group</i>Conselho pedagógico</a></li>
<li style="display:none"><a onclick="mostrar_aba('Visão geral das turmas')"><i class="material-icons left">show_chart</i>Visão geral das turmas</a></li>
<li><a onclick="logout()"><i class="material-icons left">exit_to_app</i>Sair</a></li>
</ul>
</div>
</div>
</nav>
</div>
<ul id="menu_mobile" class="sidenav sidenav-close" style="display:none">
<li><a onclick="mostrar_aba('Estudantes em risco de evasão')"><i class="material-icons left">format_list_bulleted</i>Estudantes em risco</a></li>
<li style="display:none"><a onclick="mostrar_aba('Conselho pedagógico')" ><i class="material-icons left">group</i>Conselho pedagógico</a></li>
<li style="display:none"><a onclick="mostrar_aba('Visão geral das turmas')"><i class="material-icons left">show_chart</i>Visão geral das turmas</a></li>
<li><a onclick="logout()"><i class="material-icons left">exit_to_app</i>Sair</a></li>
</ul>
<div id="Estudantes em risco de evasão" class="row l12 m12 s12 center-align " style="display:none;">
<div class="col l6 m8 s12 left-align offset-l3 offset-m2" id='lista_turmas'>
<ul class="collection" id="lista_turmas_lista">
</ul>
</div>
<div class="col l6 m8 s12 left-align offset-l3 offset-m2" id='estudantes_da_turma' style="display:none">
<ul class="collection" id="estudantes_da_turma_lista">
</ul>
</div>
<div class="col l6 m8 s12 left-align offset-l3 offset-m2" id='detalhes_do_estudante' style="display:none">
<div class="row">
<div class="col l12 m12 s12">
<div class="card">
<div class="card-image">
<img src="" id="detalhes_do_estudante_foto">
</div>
<div class="card-content">
<span id="detalhes_do_estudante_nome" class="card-title">Card Title</span>
<p id="detalhes_do_estudante_conteudo"></p>
</div>
<div id="detalhes_do_estudante_acao" class="card-action center-align">
<a href="#">This is a link</a>
</div>
</div>
<div class="row">
<div class="col l12 m12 s12">
<div class="card">
<div class="card-content">
<span class="card-title">Registro de ações</span>
<p>
<label>
<input type="checkbox" id="acao_contato_pessoal" onchange="set_marcacoes()">
<span>Contato pessoal</span>
</label>
</p>
<p>
<label>
<input type="checkbox" id="acao_contato_whats" onchange="set_marcacoes()">
<span>Contato por wahtsapp</span>
</label>
</p>
<p>
<label>
<input type="checkbox" id="acao_contato_fone" onchange="set_marcacoes()">
<span>Contato por telefone</span>
</label>
</p>
<p>
<label>
<input type="checkbox" id="acao_contato_email" onchange="set_marcacoes()">
<span>Contato por email</span>
</label>
</p>
<p>
<label>
<input type="checkbox" id="acao_visita" onchange="set_marcacoes()">
<span>Visita a domicílio</span>
</label>
</p>
<p>
<label>
<input type="checkbox" id="acao_sucesso" onchange="set_marcacoes()">
<span>Aluno resgatado com sucesso</span>
</label>
</p>
<br>
<label for="textarea2">Comentários adicionais</label>
<textarea id="acao_comentario" onchange="set_marcacoes()" class="materialize-textarea" ></textarea>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col l12 m12 s12">
<div class="card">
<div class="card-content">
<span class="card-title">Faltas por data</span>
<p id="detalhes_do_estudante_faltas_por_data"></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="tela_login" class="row section teal" style="display:none; height:100vh; overflow: hidden;">
<div class="col l12 m12 s12 valign-wrapper" style="height:100%">
<div class="valign" style="width: 100%">
<div class="col s12 m8 l4 offset-m2 offset-l4">
<div class="card hoverable z-depth-1">
<div class="card-action teal lighten-1">
<h7 class="white-text">Login</h7>
</div>
<div class="card-content white">
<div class="input-field">
<i class="material-icons prefix">email</i>
<input type="email" id="login_email" placeholder="digite seu email aqui">
<label for="login_email">Email</label>
</div>
<div class="input-field">
<i class="material-icons prefix">password</i>
<input type="password" id="login_senha" placeholder="digite sua senha aqui">
<label for="primeiro_nome">Senha</label>
<div id="feedback_login" class="col s10 m10 l10 offset-s1 offset-m1 offset-l1 red-text" style="display:none;padding:10px;"></div>
</div>
<br>
<div class="form-field">
<button id="login" onclick="login()" class="teal btn-large waves-effect waves-dark">ENTRAR</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
<script src="static/scripts/jquery.min.js"></script>
<script src="static/materialize/js/materialize.min.js"></script>
<script src="static/scripts/libx.js?t=<?php echo str_shuffle('QWER') ?>"></script>
<script type="text/javascript">
$(document).ready(function(){
$(".sidenav").sidenav();
$('select').formSelect();
check_login()
});
var dados = {}
//var logado = false;
//setInterval(function () {
// api({
// "cmd":"check_login",
// "email":getCookie("email"),
// "token":getCookie("token")
// },
// function(res){
// if(res["res"]!="ok"){
// if(logado){
// document.location.reload(true);;
// }
// }
// })
//}, 1000);
function check_login(){
api({
"cmd":"check_login",
"email":getCookie("email"),
"token":getCookie("token")
},
function(res){
if(res["res"]=="ok"){
mostrar_aba('Estudantes em risco de evasão')
document.getElementById("menu_desktop").style.display = "block";
document.getElementById("menu_mobile").style.display = "block";
document.getElementById("lista_turmas").style.display = "block";
api({
"cmd":"ultimo_relatorio"
},
function(res){
dados=res
monta_lista_turmas()
})
}else{
document.getElementById("menu_desktop").style.display = "none";
document.getElementById("menu_mobile").style.display = "none";
document.getElementById("tela_login").style.display = "none";
mostrar_aba('tela_login')
}
})
}
function monta_lista_turmas(){
document.getElementById('lista_turmas_lista').innerHTML = ""
n = 0
for (const [nome_turma, total_faltas] of Object.entries(dados["turmas"])) {
risco_turma = 0
if( nome_turma in dados["risco_turma"] ){
risco_turma = dados["risco_turma"][nome_turma]
}
n+=1
adicional = ''
if(risco_turma==0){adicional = 'teal lighten-5'}
document.getElementById('lista_turmas_lista').insertAdjacentHTML("afterbegin",novo_item_lista_turmas(nome_turma,risco_turma,adicional));
}
}
function novo_item_lista_turmas(nome_turma,risco,adicional=''){
linha = `
<li id='[TITULO]' onclick="mostrar_turma('[TITULO]')" class='collection-item avatar waves-effect `+adicional+`' style='width:100%; padding-top: 1px;' >
<br>
<img src='static/img/[IMAGEM].png' class='circle'>
<span class='title'>[TITULO]</span>
<a href='#' class='secondary-content'>
<i class='material-icons' onclick='monta_lista_estudantes_turma(\"[TITULO]\")' >chevron_right</i>
</a>
<p>
<p class='teal-text'>[RISCO] estudante(s) em risco</p>
</p>
</img>
</li>`
imagem = "pessoas_1";
if( nome_turma.includes("Informática") ){imagem="informatica"}
if( nome_turma.includes("Agricultura") ){imagem="agricultura"}
if( nome_turma.includes("Agronegócio") ){imagem="agronegocio"}
if( nome_turma.includes("Agronomia") ){imagem="agronomia"}
linha = linha.replaceAll("[IMAGEM]", imagem);
linha = linha.replaceAll("[TITULO]", nome_turma);
linha = linha.replaceAll("[RISCO]", risco);
return linha;
}
function mostrar_turma(turma){
document.getElementById("lista_turmas").style.display = "none";
document.getElementById("estudantes_da_turma").style.display = "block";
document.getElementById('estudantes_da_turma_lista').innerHTML = ""
var myDiv = document.getElementById('estudantes_da_turma_lista').scrollTop = 0;
document.getElementById("menu_voltar").style.display = "block";
document.getElementById("menu_desktop").style.display = "none";
document.getElementById('titulo_do_menu_voltar').innerHTML = turma
n = 0
for (const [faltas_nome, dados_estudante] of Object.entries(dados["dados"])) {
if(dados_estudante["turma"]==turma){
n+=1
adicional = ''
//if(dados_estudante["total_faltas"]>=20){adicional = 'teal lighten-5'}
document.getElementById('estudantes_da_turma_lista').insertAdjacentHTML("afterbegin",novo_item_lista_alunos_da_turma(faltas_nome,dados_estudante,adicional));
}
}
}
function novo_item_lista_alunos_da_turma(faltas_nome,dados_estudante,adicional){
linha = `
<li id='[TITULO]' onclick="mostra_detalhes_aluno('[KEY]')" class='collection-item avatar waves-effect `+adicional+`' style='width:100%; padding-top: 1px;' >
<br>
<img src='[IMAGEM]' class='circle'>
<span class='title'>[TITULO]</span>
<a href='#' class='secondary-content'>
<i class='material-icons' onclick='monta_lista_estudantes_turma(\"[TITULO]\")' >chevron_right</i>
</a>
<p>
<p class='teal-text'>[RISCO] falta(s) em 15 dias</p>
</p>
</img>
</li>`
//if( nome_turma.includes("Informática") ){imagem="informatica"}
//if( nome_turma.includes("Agricultura") ){imagem="agricultura"}
//if( nome_turma.includes("Agronegócio") ){imagem="agronegocio"}
//if( nome_turma.includes("Agronomia") ){imagem="agronomia"}
linha = linha.replaceAll("[IMAGEM]", "index.php?img="+dados_estudante["matricula"]);
linha = linha.replaceAll("[KEY]", faltas_nome);
linha = linha.replaceAll("[TITULO]", dados_estudante["estudante"]);
linha = linha.replaceAll("[RISCO]", dados_estudante["total_faltas"]);
return linha;
}
var MATRICULA_SELECIONADA = "";
function mostra_detalhes_aluno(faltas_nome){
dados_estudante = dados["dados"][faltas_nome]
MATRICULA_SELECIONADA = dados_estudante["matricula"]
get_marcacoes_aluno(MATRICULA_SELECIONADA)
document.getElementById("estudantes_da_turma").style.display = "none";
document.getElementById("detalhes_do_estudante").style.display = "block";
document.getElementById("detalhes_do_estudante_foto").src = "index.php?img="+dados_estudante["matricula"];
document.getElementById("detalhes_do_estudante_nome").innerHTML = dados_estudante["estudante"];
conteudo = `
<p>Possui: <b>[FALTAS] faltas</b> em 15 dias</p>
<p>Idade: <b>[IDADE]</b> anos</p>
<p>Email: <b>[EMAIL]</b></p>
<p>Telefone: <b>[TELEFONE]</b></p>
<p>Endereço: <b>[ENDERECO]</b></p>
`
celular = dados_estudante["celular"].replaceAll("+", "").replaceAll("(", "").replaceAll(")", "").replaceAll(" ", "").replaceAll("-", "")
endereco = dados_estudante["endereco"].replaceAll("Outros", "")
acoes = `
<a class="waves-effect waves-light btn-large btn-floating" href="https://wa.me/55[TELEFONE]" target="_blank"><i class="material-icons left">message</i>what</a>
&nbsp&nbsp&nbsp&nbsp&nbsp
<a class="waves-effect waves-light btn-large btn-floating" href="mailto:[EMAIL]"><i class="material-icons left">email</i>email</a>
&nbsp&nbsp&nbsp&nbsp&nbsp
<a class="waves-effect waves-light btn-large btn-floating" href="https://www.google.com.br/maps/search/[ENDERECO]" target="_blank" ><i class="material-icons left">directions_car</i>mapa</a>
`.replaceAll("[EMAIL]", dados_estudante["email"]).replaceAll("[TELEFONE]", celular).replaceAll("[ENDERECO]", endereco);
lista_faltas_por_dia ="<table><thead><tr><th>Data</th><th>Faltas</th></tr></thead><tbody>";
for (const [data_falta, quantidade_faltas] of Object.entries(dados_estudante["faltas_por_dia"])) {
lista_faltas_por_dia += "<tr><td>" + data_falta + "</td><td>" + quantidade_faltas + "</td></tr>"
}
lista_faltas_por_dia+= "</tbody></table>"
conteudo = conteudo.replaceAll("[FALTAS]", dados_estudante["total_faltas"]);
conteudo = conteudo.replaceAll("[EMAIL]", dados_estudante["email"]);
conteudo = conteudo.replaceAll("[TELEFONE]", dados_estudante["celular"]);
conteudo = conteudo.replaceAll("[IDADE]", dados_estudante["idade"]);
conteudo = conteudo.replaceAll("[ENDERECO]", endereco);
document.getElementById("detalhes_do_estudante_conteudo").innerHTML= conteudo;
document.getElementById("detalhes_do_estudante_faltas_por_data").innerHTML= lista_faltas_por_dia;
document.getElementById("detalhes_do_estudante_acao").innerHTML= acoes;
}
function set_marcacoes(matricula){
api({
"cmd":"set_marcacoes",
"matricula":MATRICULA_SELECIONADA,
"pessoal":document.getElementById("acao_contato_pessoal").checked ,
"whats":document.getElementById("acao_contato_whats").checked ,
"fone":document.getElementById("acao_contato_fone").checked ,
"email":document.getElementById("acao_contato_email").checked ,
"visita":document.getElementById("acao_visita").checked ,
"sucesso":document.getElementById("acao_sucesso").checked ,
"comentario":document.getElementById("acao_comentario").value
})
}
function get_marcacoes_aluno(matricula){
api({
"cmd":"get_marcacoes",
"matricula":MATRICULA_SELECIONADA
},
function(res){
p(res);
document.getElementById("acao_contato_pessoal").checked = res["pessoal"]
document.getElementById("acao_contato_whats").checked = res["whats"]
document.getElementById("acao_contato_fone").checked = res["fone"]
document.getElementById("acao_contato_email").checked = res["email"]
document.getElementById("acao_visita").checked = res["visita"]
document.getElementById("acao_sucesso").checked = res["sucesso"]
document.getElementById("acao_comentario").value = res["comentario"]
})
}
function voltar(){
if(document.getElementById("estudantes_da_turma").style.display == "block"){
document.getElementById("lista_turmas").style.display = "block";
document.getElementById("estudantes_da_turma").style.display = "none";
document.getElementById("menu_voltar").style.display = "none";
document.getElementById("menu_desktop").style.display = "block";
}else if(document.getElementById("detalhes_do_estudante").style.display == "block"){
document.getElementById("estudantes_da_turma").style.display = "block";
document.getElementById("detalhes_do_estudante").style.display = "none";
}
}
function login(){
api({
"cmd":"login",
"email":document.getElementById("login_email").value,
"senha":document.getElementById("login_senha").value
},
function(res){
if(res["res"]=="ok"){
setCookie("email",document.getElementById("login_email").value)
setCookie("token",res["token"])
mostrar_aba('Estudantes em risco de evasão')
document.getElementById("menu_desktop").style.display = "block";
document.getElementById("menu_mobile").style.display = "block";
api({
"cmd":"ultimo_relatorio"
},
function(res){
dados=res
monta_lista_turmas()
logado = true;
})
}else{
document.getElementById("feedback_login").style.display = "block"
document.getElementById("feedback_login").innerHTML = "Email ou senha incorretos"
}
})
}
function logout(){
setCookie("email","")
setCookie("token","")
document.getElementById("menu_desktop").style.display = "none";
document.getElementById("menu_mobile").style.display = "none";
mostrar_aba('tela_login')
}
</script>
</body>
</html>

159
projetosifms.sql Normal file
View File

@ -0,0 +1,159 @@
-- phpMyAdmin SQL Dump
-- version 4.3.7
-- http://www.phpmyadmin.net
--
-- Host: mysql04-farm88.kinghost.net
-- Tempo de geração: 24/02/2023 às 15:02
-- Versão do servidor: 10.6.11-MariaDB-log
-- Versão do PHP: 5.3.29
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Banco de dados: `projetosifms`
--
-- --------------------------------------------------------
--
-- Estrutura para tabela `acoes`
--
CREATE TABLE IF NOT EXISTS `acoes` (
`matricula` text NOT NULL,
`whats` int(1) NOT NULL,
`fone` int(1) NOT NULL,
`visita` int(1) NOT NULL,
`sucesso` int(1) NOT NULL,
`comentario` text NOT NULL,
`email` int(1) NOT NULL,
`pessoal` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
--
-- Fazendo dump de dados para tabela `acoes`
--
INSERT INTO `acoes` (`matricula`, `whats`, `fone`, `visita`, `sucesso`, `comentario`, `email`, `pessoal`) VALUES
('2019107036083-8', 0, 0, 0, 0, '', 0, 0),
('2019107036010-2', 1, 0, 0, 0, 'No dia 31 de agosto de 2022 bati um papo com o estudante. Não vejo necessidade de visita ao domicílio. (Rogério Cardoso)\n\n', 0, 1),
('2021107036092-5', 0, 0, 0, 0, '', 0, 0),
('2020107036004-9', 1, 1, 0, 0, 'Conversei com o Fabrício ele negou que tenha faltado. Informei a mãe e a vó(responsável por ele). Se os colegas e os professores/técnicos, puderem também conversar com ele, será muito positivo.(Tânia)', 0, 1),
('2020207432003-1', 0, 0, 0, 0, '', 0, 0),
('2021107036013-5', 1, 0, 0, 1, '', 0, 1),
('2020107036040-5', 0, 0, 0, 0, '', 0, 0),
('2019207036003-8', 1, 0, 0, 0, 'Estava com dificuldade em vir ao ifms, mas já se organizou e não faltará mais. Em lab. de programação 5 fez prova de suficiência, passou porém as faltas ainda estão contando. Ass. Camila nuged', 0, 0),
('2021107036050-0', 0, 0, 0, 0, '', 0, 0),
('2020107035089-2', 0, 0, 0, 0, 'Aluna está de atestado médico', 0, 0),
('2020107035027-2', 0, 0, 0, 0, 'Entrei em contato com a mãe, informou que a filha não está bem, vai vir ao campus para conversar.', 0, 0),
('2019107035009-3', 0, 0, 0, 0, 'Conversei com o aluno na sala do nuged, disse que foi uma semana em que não estava se sentindo bem, mas que já está tudo certo e frequentando as aulas novamente.', 0, 0),
('2020107035040-0', 0, 0, 0, 0, 'Conversei com a mãe, ela está ciente, informou que na sexta ( 21/10), ele foi para um retiro em Dourados, disse que conversou com os professores.', 0, 0),
('2020107035008-6', 0, 0, 0, 0, 'Não consegui contato ao telefone, enviei email ao aluno.', 0, 0),
('2019107069031-5', 0, 0, 0, 0, 'Não consegui contato por telefone, enviei email ao estudante. Respondeu que vai trancar e voltar semestre que vem.', 0, 0),
('2020107069023-5', 0, 0, 0, 0, 'Não consegui contato por telefone, enviei email ao estudante.', 0, 0),
('2021207484009-1', 0, 0, 0, 0, 'Não consegui contato por telefone, enviei email ao estudante.', 0, 0),
('2017207069001-7', 0, 0, 0, 0, 'Mudou para jardim, passei o contato da Cerel para ver se consegue trancar o curso.', 0, 0),
('2020107069011-1', 0, 0, 0, 0, 'Estava doente, vai retornar e entregar o atestado na Cerel.', 0, 0),
('2022207891021-0', 0, 0, 0, 0, 'Começou a trabalhar e não consegue vir as aulas.', 0, 0),
('2022207891036-9', 0, 0, 0, 0, 'Esqueceu do início das aulas.', 0, 0),
('2022207891022-9', 0, 0, 0, 0, 'Não conseguiu mudar para Ponta Porã, não vai cursar.', 0, 0),
('2022207891040-7', 0, 0, 0, 0, 'Não consegui contato por telefone, enviei email.', 0, 0),
('2022207891006-7', 0, 0, 0, 0, 'Informou que não estuda no IFMS.', 0, 0),
('2022207891012-1', 0, 0, 0, 0, 'Não consegui contato por telefone, enviei email.', 0, 0),
('2022207891035-0', 0, 0, 0, 0, 'Informou que ligou na central e falaram que ela não estava matriculada.Orientei que procurasse a Cerel.', 0, 0),
('2022207891033-4', 0, 0, 0, 0, ' Não consegui contato por telefone, enviei email.', 0, 0),
('2020107035003-5', 0, 0, 0, 0, 'Não consegui contato por telefone, enviei email.', 0, 0),
('2020107035025-6', 0, 0, 0, 0, 'Conversei com a mãe, informou que está com problemas no transporte de Aral Moreira, mas disse que a aluna já conversou com os professores e coordenação.', 0, 0),
('2020107035049-3', 0, 0, 0, 0, 'Conversei com o pai, informou que viajou e o filho aproveitou para faltar, vai conversar com o coordenador.', 0, 0),
('2020107035090-6', 0, 0, 0, 0, 'Conversei com a madrasta, Elizabeth, disse que não sabe o que está havendo, porque ele sai para vir ao campus todos os dias, disse que vai conversar com ele, orientei que procurasse a coordenação.', 0, 0),
('2019107035071-9', 0, 0, 0, 0, 'Conversei com a mãe, ela disse que ele esta assistindo algumas aulas no curso de informática e que conversou com os professores, orientei que ele procurasse a coordenação.', 0, 0),
('2019107035008-5', 0, 0, 0, 0, 'Disse que não estava se sentindo bem e que foi embora, mas que já está frequentando as aulas normalmente.', 0, 0),
('2021107035048-2', 0, 0, 0, 0, 'Não consegui contato, enviei email.', 0, 0),
('2018107102037-5', 0, 0, 0, 0, 'Regime Domiciliar', 0, 0),
('2020107035046-9', 0, 0, 0, 0, 'A aluna disse que vai procurar a coordenação.', 0, 0),
('2021107035069-5', 0, 0, 0, 0, 'A aluna está gestante e não trouxe atestado, conversei com a mãe, orientei que procurasse a coordenação.', 0, 0),
('2022107035089-7', 0, 0, 0, 0, 'Conversei com a mãe, informou que ele deslocou o joelho, orientei que entregasse o atestado na Cerel.', 0, 0),
('2020107035077-9', 0, 0, 0, 0, 'Conversei com a mãe, disse que ele não está muito bem do estômago e que quando chove também tem dificuldade com o transporte, orientei que as faltas também reprovam.', 0, 0),
('2020107035063-9', 0, 0, 0, 0, 'Não consegui contato, enviei email ao estudante.', 0, 0),
('2022107035039-0', 0, 0, 0, 0, 'A aluna está gestante, a mãe informou que vai trancar o curso.', 0, 0),
('2020107035035-3', 0, 0, 0, 0, 'Não consegui contato, enviei email.', 0, 0),
('2019107035045-0', 0, 0, 0, 0, 'Não consegui contato, enviei email.', 0, 0),
('2019107036047-1', 1, 0, 0, 0, 'Contato por Camila ', 0, 0),
('2021107036008-9', 0, 0, 0, 0, '', 0, 0);
-- --------------------------------------------------------
--
-- Estrutura para tabela `fotos`
--
CREATE TABLE IF NOT EXISTS `fotos` (
`matricula` text NOT NULL,
`imagem_pequena` text NOT NULL,
`imagem_grande` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
-- --------------------------------------------------------
--
-- Estrutura para tabela `ultimo_relatorio`
--
CREATE TABLE IF NOT EXISTS `ultimo_relatorio` (
`estudante` text NOT NULL,
`email` text NOT NULL,
`telefone` text NOT NULL,
`endereco` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci ROW_FORMAT=COMPACT;
-- --------------------------------------------------------
--
-- Estrutura para tabela `usuarios`
--
CREATE TABLE IF NOT EXISTS `usuarios` (
`email` text NOT NULL,
`nome` text NOT NULL,
`senha` text NOT NULL,
`token` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
--
-- Fazendo dump de dados para tabela `usuarios`
--
INSERT INTO `usuarios` (`email`, `nome`, `senha`, `token`) VALUES
('robsonjaques@gmail.com', 'Robson', 'q1p0w2o9e3i8', 'tpncT2gkK4INmzyljwBGvExWuPd35M1LD6sYfZiA9FUhJVXS08'),
('rogerio.batista@ifms.edu.br', 'rogerio', 'rog1234', 'ZK8Y4liofRzpjJaNVqPAHkcXMUhd5tS3E9TrmeyxwIbCusL62G'),
('marcel.dorta@ifms.edu.br', 'marcel', 'mar4567', 'Q8nTaIEhrkgNPGoBmAwbJ1Zc4Hu7i0XeCVy6vFMtxRLDfYS2WK'),
('lin.feng@ifms.edu.br', 'lin', 'lin7890', 'B14LmM8HKp2Ak3qizNeb6Yot9IgQnUFaXhuWr0Z5ysdPCvDOf7'),
('marilene.ribeiro@ifms.edu.br', 'marilene', 'mar1234', 'YdI64yxFGrDh1lON8XAQHsvqwVeJi0zPLU3gSZuB7MTmWR9fK2'),
('cerel.pp@ifms.edu.br', 'Cerel', 'fapd2019', 'JsfRxHmI5Gd8Ay7r9teNl2BnSo0TgKDZMFchuWkEYQVLb6U1wC'),
('maria.costa@ifms.edu.br', 'Maria', '030742', 'k1piZGFvcfwK5ChaXIr7NgYulRUVqHdJTMjEPznSODeA964tWo'),
('maria.soares@ifms.edu.br', 'Lau', '291136', 'mBxKraAeudWVQ4nsM6XPZ5wSGfivgpzEIOFHCjDYy13LoklbR7'),
('lia.daniel@ifms.edu.br', 'Lia', '100660RD', 'sm1zR9i6wAnZySlbYHf32UKBILgOQpt5TvCWPGEcFj7x8Vaeq0'),
('coren.pp@ifms.edu.br', 'Coren', 'corencoren', 'PNlpgLxYcsXUzWdo2HtZOwauBrmeDRKVECnTSfJI3M8y5qkGF6'),
('monica.miyashiro@ifms.edu.br', 'Monica', 'miyashiro31', '3J9guiysILzYBE76HetU5qanV0QCMOTZkRbomrhpAGlcN2FPKS'),
('ligia.piletti@ifms.edu.br', '', 'LILIKA88', ''),
('dirge.pp@ifms.edu.br', '', 'direcao2022', '2UDvrT1HS3XinxlCjwGNZI0FYa8hoVytAkQKfLc79JER4Oeu6W'),
('diren.pp@ifms.edu.br', '', 'direnpp', 'uFr3qNkGOnPJxp2IYXd9RDtvTUs7Cbmy0lEeSaLfKWchVQgjwM'),
('camila.souza@ifms.edu.br', '', 'Ca_890517', 'qeaZk6h2gs79GCYDtN0nKIlULumBSHbdJryF3VAOxjfXcwiE5M'),
('miriam.espindola@ifms.edu.br', '', '322315', '1ZyBpdH0SzjtTM4GWEAFrbRXInx6klJL3Q2N8DPYmisCeg5KVv'),
('ivan.herrmann@hotmail.com', '', 'adminadmin', ''),
('napne.pp@ifms.edu.br', '', '394521', 'oVESh0qstzXJblpM7NCIc41PLFWQ69AngZr8UYRwK2vyjmDTd5'),
('ivan.herrmann@ifms.edu.br', '', 'Papaie10', 'NA5YGSsafT4Q6FzbCxlKVdvnR9wmy7BoPei8hj3gkcWMHZ2XtE'),
('coinf.pp@ifms.edu.br', '', '3edc4rfv', 'yH9qUla13RhMX5W6VbTP2JSOcznovCQLxKIks0jF4tY7rwgEdi'),
('lesley.bueno@ifms.edu.br', 'Lesley', 'Seara228.', 'oSg2Y0apX9Pymbl3JGU5fMt8HxeqWVA7wdn16QKrvTcEhs4NIL'),
('marlom.marques@ifms.edu.br', 'Marlom', 'Marlom1@2Projetos', 'jzVLi7xZ3mwHh5koWJafOv2BsFcU14tnplRePSKgCurMYEQA8y');
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

BIN
static/img/agricultura.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

BIN
static/img/agronegocio.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

BIN
static/img/agronomia.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

BIN
static/img/avatar_1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
static/img/avatar_1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
static/img/avatar_2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
static/img/class.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
static/img/icone.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

0
static/img/index.php Normal file
View File

BIN
static/img/informatica.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 882 B

BIN
static/img/livros1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 719 KiB

BIN
static/img/livros2.jpg Normal file

Binary file not shown.

BIN
static/img/livros3.jpg Normal file

Binary file not shown.

BIN
static/img/pessoas.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

BIN
static/img/pessoas_1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
static/img/pessoas_2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
static/img/pessoas_3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

0
static/index.php Normal file
View File

BIN
static/materialize/LICENSE Normal file

Binary file not shown.

View File

@ -0,0 +1,91 @@
<p align="center">
<a href="http://materializecss.com/">
<img src="http://materializecss.com/res/materialize.svg" width="150">
</a>
</p>
<h3 align="center">MaterializeCSS</h3>
<p align="center">
Materialize, a CSS Framework based on material design.
<br>
<a href="http://materializecss.com/"><strong>-- Browse the docs --</strong></a>
<br>
<br>
<a href="https://travis-ci.org/Dogfalo/materialize">
<img src="https://travis-ci.org/Dogfalo/materialize.svg?branch=master" alt="Travis CI badge">
</a>
<a href="https://badge.fury.io/js/materialize-css">
<img src="https://badge.fury.io/js/materialize-css.svg" alt="npm version badge">
</a>
<a href="https://cdnjs.com/libraries/materialize">
<img src="https://img.shields.io/cdnjs/v/materialize.svg" alt="CDNJS version badge">
</a>
<a href="https://david-dm.org/Dogfalo/materialize">
<img src="https://david-dm.org/Dogfalo/materialize/status.svg" alt="dependencies Status badge">
</a>
<a href="https://david-dm.org/Dogfalo/materialize#info=devDependencies">
<img src="https://david-dm.org/Dogfalo/materialize/dev-status.svg" alt="devDependency Status badge">
</a>
<a href="https://gitter.im/Dogfalo/materialize">
<img src="https://badges.gitter.im/Join%20Chat.svg" alt="Gitter badge">
</a>
</p>
## Table of Contents
- [Quickstart](#quickstart)
- [Documentation](#documentation)
- [Supported Browsers](#supported-browsers)
- [Changelog](#changelog)
- [Testing](#testing)
- [Contributing](#contributing)
- [Copyright and license](#copyright-and-license)
## Quickstart:
Read the [getting started guide](http://materializecss.com/getting-started.html) for more information on how to use materialize.
- [Download the latest release](https://github.com/Dogfalo/materialize/releases/latest) of materialize directly from GitHub. ([Beta](https://github.com/Dogfalo/materialize/releases/))
- Clone the repo: `git clone https://github.com/Dogfalo/materialize.git` (Beta: `git clone -b v1-dev https://github.com/Dogfalo/materialize.git`)
- Include the files via [cdnjs](https://cdnjs.com/libraries/materialize). More [here](http://materializecss.com/getting-started.html). ([Beta](https://cdnjs.com/libraries/materialize/1.0.0-beta))
- Install with [npm](https://www.npmjs.com): `npm install materialize-css` (Beta: `npm install materialize-css@next`)
- Install with [Bower](https://bower.io): `bower install materialize` ([DEPRECATED](https://bower.io/blog/2017/how-to-migrate-away-from-bower/))
- Install with [Atmosphere](https://atmospherejs.com): `meteor add materialize:materialize` (Beta: `meteor add materialize:materialize@=1.0.0-beta`)
## Documentation
The documentation can be found at <http://materializecss.com>. To run the documentation locally on your machine, you need [Node.js](https://nodejs.org/en/) installed on your computer.
### Running documentation locally
Run these commands to set up the documentation:
```bash
git clone https://github.com/Dogfalo/materialize
cd materialize
npm install
```
Then run `grunt monitor` to compile the documentation. When it finishes, open a new browser window and navigate to `localhost:8000`. We use [BrowserSync](https://www.browsersync.io/) to display the documentation.
### Documentation for previous releases
Previous releases and their documentation are available for [download](https://github.com/Dogfalo/materialize/releases).
## Supported Browsers:
Materialize is compatible with:
- Chrome 35+
- Firefox 31+
- Safari 9+
- Opera
- Edge
- IE 11+
## Changelog
For changelogs, check out [the Releases section of materialize](https://github.com/Dogfalo/materialize/releases) or the [CHANGELOG.md](CHANGELOG.md).
## Testing
We use Jasmine as our testing framework and we're trying to write a robust test suite for our components. If you want to help, [here's a starting guide on how to write tests in Jasmine](CONTRIBUTING.md#jasmine-testing-guide).
## Contributing
Check out the [CONTRIBUTING document](CONTRIBUTING.md) in the root of the repository to learn how you can contribute. You can also browse the [help-wanted](https://github.com/Dogfalo/materialize/labels/help-wanted) tag in our issue tracker to find things to do.
## Copyright and license
Code Copyright 2018 Materialize. Code released under the MIT license.

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

File diff suppressed because one or more lines are too long

0
static/scripts/index.php Normal file
View File

2
static/scripts/jquery.min.js vendored Normal file

File diff suppressed because one or more lines are too long

BIN
static/scripts/libx.js Normal file

Binary file not shown.