<?php
include_once '../classes/pagina.php';
include_once '../classes/questao.php';

class CRUDQuestao extends Pagina {
    
    public function __construct() {
        parent::checarPermissao(array('administrador', 'elaboradorquestoes'));
        parent::__construct();
        $this->includehead = "<script src='/olimpiadageografia/lib/ckeditor/ckeditor.js'></script>";
    }
    
    public function corpo() {
        if(empty($_REQUEST[acao]) AND empty($_REQUEST[executarAcao])) echo "<div><a href='home.php' class='voltar'>Voltar para a tela inicial</a></div><br/>";
        
        if($_REQUEST[executarAcao] == 'inserir' OR $_REQUEST[executarAcao] == 'editar' OR $_REQUEST[executarAcao] == 'excluir'){
            $this->salvar($_REQUEST[executarAcao]);
        }elseif($_REQUEST[acao] == 'inserir' OR $_REQUEST[acao] == 'editar' OR $_REQUEST[acao] == 'excluir'){
            $this->formulario($_REQUEST[acao], $_REQUEST[id]);
        }else{
            $this->lista();
        }
    }
    
    public function lista(){
        $questao = new Questao();
        
        echo "<div align='center'><a href='crudquestao.php?acao=inserir' target='_blank' class='adicionar'>Inserir Nova Questão</a></div><br/>";
        
        echo "<form action='crudquestao.php' method='POST'>";
        echo "<fieldset><legend>Filtro</legend>";
        echo "<table align='center'>";
        echo "<tr style='display:block'>";
        $provafase_id = (!empty($_REQUEST[provafase_id]))? $_REQUEST[provafase_id] : $_SESSION[provafase_id];
        echo "<th>Prova: </th><td>";parent::selectProvaFase($provafase_id);echo "</td>";
        echo "</tr>";
        echo "<tr style='display:block'>";
        echo "<th>Categoria:</th><td>";parent::selectCategoria($_REQUEST[categoria_id]);echo "</td>";
        echo "<th>Numero:</th><td><input type='text' name='numero' value='$_REQUEST[numero]' size='3' /></td>";
        echo "<th>Peso:</th><td><input type='text' name='peso' value='$_REQUEST[peso]' size='3' /></td>";
        echo "</tr>";
        echo "<tr style='display:block'>";
        echo "<th>Descrição:</th><td><input type='text' name='descricao' value='$_REQUEST[descricao]' size='50' /></td>";
        echo "</tr>";
        echo "</table>";
        echo "<div align='center'><input type='submit' value='Filtrar' class='pesquisar' /></div>";
        echo "</fieldset>";
        echo "</form>";
        echo "<br/>";
        
        $where[] = "questao.status IN ('ATIVO', 'ANULADA')";
        $where[] = "questao.provafase_id = '$provafase_id'";
        if(!empty($_REQUEST[categoria_id])) $where[] = "questao.categoria_id = '$_REQUEST[categoria_id]'";
        if(!empty($_REQUEST[numero])) $where[] = "questao.numero = '$_REQUEST[numero]'";
        if(!empty($_REQUEST[peso])) $where[] = "questao.peso = '$_REQUEST[peso]'";
        if(!empty($_REQUEST[descricao])) $where[] = "questao.descricao LIKE '%$_REQUEST[descricao]%'";
        $where = implode(' AND ', $where);
        
        $sql = "SELECT questao.id, questao.categoria_id, COALESCE(categoria.descricao, 'CATEGORIA ABERTA') AS categoria 
                FROM imediaco_geo.questao 
                LEFT JOIN imediaco_geo.categoria ON questao.categoria_id = categoria.id 
                WHERE $where 
                ORDER BY questao.numero";//categoria.descricao, categoria.id, 
        $this->bd->executarSQL($sql);
        $categoria_id = null;
        echo "<table>";
        while($objloop = $this->bd->getObjeto()){
            $obj = $questao->encontrar($objloop->id);
//            if($categoria_id != $obj->categoria_id){
//                echo "<tr><td colspan='2'><h3>$objloop->categoria</h3></td></tr>";
//                $categoria_id = $obj->categoria_id;
//            }
            $anulada = ($obj->status == 'ANULADA')? "<font color='red'><b>ANULADA</b></font><br/>" : null;
            $numeroquestao = $this->formataNumeroQuestao($obj->numero);
            echo "<tr><td style='vertical-align: top;'><p><b>$numeroquestao-</b> </p></td><td>{$anulada}$obj->descricao</td></tr>";
            $peso = ($obj->peso != null AND $obj->peso != '')? $obj->peso : 1;
            echo "<tr><td style='vertical-align: top;'><p><b>Peso: </b> </p></td><td>$peso</td></tr>";
            echo "<tr><td colspan='2'><br/></td></tr>";
            foreach($obj->alternativas as $alternativa){
                if($alternativa->correta){
                    echo "<tr><td colspan='2'><br/>CORRETA $alternativa->letra</td></tr>";
                    $corletra = 'blue';
                }else{
                    $corletra = 'black';
                }
                echo "<tr><td style='vertical-align: top;'><p><b><font color='$corletra'>$alternativa->letra</font></b>) </p></td><td>$alternativa->descricao</td></tr>";
                echo "<tr><td colspan='2'><br/></td></tr>";
            }
            echo "<tr><td colspan='2'>";
            echo "<a href='crudquestao.php?acao=editar&id=$obj->id' target='_blank' class='editar'>Editar</a> &nbsp;&nbsp; ";
            echo "<a href='crudquestao.php?acao=excluir&id=$obj->id' target='_blank' class='excluir'>Excluir</a> &nbsp;&nbsp; ";
            echo "<hr/>";
            echo "</td></tr>";
        }
        echo "</table>";
    }

    public function formulario($acao, $id=null){
        if(!empty($id)){
            $questao = new Questao();
            $obj = $questao->encontrar($id);
        }
        $tipo = (!empty($obj->tipo))? $obj->tipo : 'alternativaletra';//echo "$tipo ***";
        
        echo "<h1>Cadastro de Questões</h1>";
        
        //vendo se a fase ja iniciou
        $executarformulario = true;
        $provafase_id = (!empty($obj->provafase_id))? $obj->provafase_id : $_SESSION[provafase_id];
        if(!empty($provafase_id)){
            $sql = "SELECT DATE_FORMAT(provafase.datainicio, '%Y%m%d') AS ymddatalimite FROM imediaco_geo.provafase WHERE id = $provafase_id";
            $this->bd->executarSQL($sql);
            $objdatafim = $this->bd->getObjeto();
            $hoje = date('Ymd');
           if($hoje > $objdatafim->ymddatalimite){//a fase ja inicio
                if($acao == 'inserir'){
                    //$provafase_id = null;//usado no selectProvaFase (para nao inserir em uma fase que ja iniciou)
                }else{
                    echo "<div class='mensagemalerta'>Essa questão não pode ser $acao pois a fase em que ela esta inserida já iniciou!<br/>Somente os administradores do sistema podem alterá-la.</div>";
                    if(!parent::temPermissao(array('administrador'))) $executarformulario = false;
                    else echo "<div class='mensagemalerta'>Você é administrador, assim pode alterá-la.<br/>ATENÇÃO, isto pode prejudicar as equipes que já tenham respondido a questão. MUITO CUIDADO e tenha conciência da alteração e impactos da mesma.</div>";
                }
            }
        }
        
        if($executarformulario){
            echo "<form action='crudquestao.php' method='POST'>";
            echo "<input type='hidden' name='executarAcao' value='$acao' />";
            echo "<input type='hidden' name='id' value='$id' />";
        }
        
        echo "<table>";
        
        if(!empty($id)){
            echo "<tr><td colspan='2'><b>Status:</b>";parent::montaSelect('status', array('ATIVO', 'ANULADA'), $obj->status, true);echo "</td></tr>";
        }
        
        echo "<tr><td colspan='2'><b>Prova:</b>";parent::selectProvaFase($provafase_id, true, null, "prova.status='ATIVO'", true);echo "</td></tr>";
        
        echo "<tr><td colspan='2'><b>Categoria:</b>";parent::selectCategoria($obj->categoria_id, false);echo "</td></tr>";
        
        echo "<tr><td colspan='2'><b>Número:</b><input type='text' name='numero' value='$obj->numero' size='3' /> (<font size='1'><i>pode ser inteiro (ex.: 1, 2, 3 etc) ou real (1.01, 1.02, 1.09, 1.10, 1.11, 2.01, 2.09, 2.10, 2.11  etc)</i></font>)</td></tr>";
        
        echo "<tr><td colspan='2'><b>Peso:</b><input type='text' name='peso' value='$obj->peso' size='3' /> (<font size='1'><i>pode ser inteiro (ex.: 1, 2, 3 etc) ou real (0.1, 0.5, 1.5, 2.5 etc)</i></font>)</td></tr>";
        
        echo "<tr><td><b>Tipo:</b></td><td>";
        $checked = ($tipo == 'alternativaletra')? 'checked' : null;
        echo "[<input type='radio' name='tipo' value='alternativaletra' onclick=\"mostrarTipo('alternativaletra');\" $checked />Alternativas] &nbsp; &nbsp; ";
        $checked = ($tipo == 'falsoverdadeiro')? 'checked' : null;
        echo "[<input type='radio' name='tipo' value='falsoverdadeiro' onclick=\"mostrarTipo('falsoverdadeiro');\" $checked />Verdadeiro ou Falso] &nbsp; &nbsp;";
        $checked = ($tipo == 'texto')? 'checked' : null;
        echo "[<input type='radio' name='tipo' value='texto' onclick=\"mostrarTipo('texto');\" $checked />Texto]";
        echo "</td></tr>";
        
        echo "<tr><td colspan='2'><b>Descrição Questão:</b></td></tr>";
        echo "<tr><td colspan='2'><textarea name='descricao' class='ckeditor' cols='100' rows='10' required>$obj->descricao</textarea></td></tr>";
        
        
        $display = ($tipo != 'texto')? null : "style='display:none'";
        echo "<tr class='alternativas' $display><td colspan='2'><b>Alternativas:</b></td></tr>";   

        //alternativaletra
        $letras = array('A', 'B', 'C', 'D', 'E');
        $display = ($tipo == 'alternativaletra')? null : "style='display:none'";
        foreach ($letras as $letra){
            $alternativa = (!empty($id))? $questao->encontrarAlternativa($id, $letra) : null;
            $correta = ($alternativa->correta)? 'checked' : null;
            echo "<tr class='alternativaletra' $display><td colspan='2'><b>$letra)</b>";
            echo " <input type='radio' name='alternativacorreta' value='$letra' $correta />CORRETA";
            echo "<input type='hidden' name='alternativaletra[$letra]' value='$letra' />";
            echo "<input type='hidden' name='alternativa_id[$letra]' value='$alternativa->id' />";
            echo "</td></tr>";
            echo "<tr class='alternativaletra' $display><td colspan='2'><textarea name='alternativadescricao[$letra]' class='ckeditor' cols='100' rows='10' required>$alternativa->descricao</textarea></td></tr>";
        }
            
        //falsoverdadeiro
        $letras = array('F', 'V');
        $display = ($tipo == 'falsoverdadeiro')? null : "style='display:none'";
        foreach ($letras as $letra){
            $alternativa = (!empty($id))? $questao->encontrarAlternativa($id, $letra) : null;
            $correta = ($alternativa->correta)? 'checked' : null;
            $letradescricao = ($letra == 'V')? 'Verdadeiro' : (($letra == 'F')? 'Falso' : $letra);
            $alternativadescricao = $letradescricao;
            echo "<tr class='falsoverdadeiro' $display><td colspan='2'><b>$letradescricao</b>";
            echo " <input type='radio' name='alternativacorreta' value='$letra' $correta />CORRETA";
            echo "<input type='hidden' name='falsoverdadeiro[$letra]' value='$letra' />";
            echo "<input type='hidden' name='alternativa_id[$letra]' value='$alternativa->id' />";
            echo "</td></tr>";
            echo "<tr style='display:none'><td colspan='2'><textarea name='alternativadescricao[$letra]' class='ckeditor' cols='100' rows='10' >$alternativadescricao</textarea></td></tr>";
        }
        
        echo "</table>";
        
        echo "<br/>";
        
        if($executarformulario){
            echo "<div align='center'>";
            echo "<input type='submit' name='cadastrar' value='".ucwords($acao)."' class='confirmar'/> &nbsp;&nbsp; ";
            echo "<input type='button' name='cancelar' value='Cancelar' onclick=\"window.close();\" class='cancelar' />";
            echo "</div>";
            echo "</form>";
        }else{
            echo "<div align='center'>";
            echo "<input type='button' name='cancelar' value='Fechar' onclick=\"window.close();\" class='cancelar' />";
            echo "</div>";
        }
    }
    
    public function salvar($acao){
        $questao = new Questao();
        
        if(!empty($_POST[id])) $questao->encontrar($_POST[id]);
        
        $questao->status = (!empty($_POST[status]))? $_POST[status] : 'ATIVO';
        $questao->provafase_id = $_POST[provafase_id];
        $questao->descricao = parent::acertarString($_POST[descricao]);
        $questao->categoria_id = $_POST[categoria_id];
        $questao->numero = floatval(str_replace(',', '.', $_POST[numero]));
        $questao->peso = (isset($_POST[peso]) AND $_POST[peso] != '' AND $_POST[peso] != null)? floatval(str_replace(',', '.', $_POST[peso])) : null;
        
        //alternativas
        //letras
        if($_POST[tipo] == 'alternativaletra'){
            foreach($_POST[alternativaletra] as $letra=>$valor){
                unset($alternativa);
                $alternativa->id = $_POST[alternativa_id][$letra];
                $alternativa->letra = $_POST[alternativaletra][$letra];
                $alternativa->correta = ($_POST[alternativacorreta] == $letra)? '1' : '0';
                $alternativa->descricao = parent::acertarString($_POST[alternativadescricao][$letra]);
                $questao->alternativas[] = $alternativa;
            }
        }
        //falsoverdadeiro
        elseif($_POST[tipo] == 'falsoverdadeiro'){
            foreach($_POST[falsoverdadeiro] as $letra=>$valor){
                unset($alternativa);
                $alternativa->id = $_POST[alternativa_id][$letra];
                $alternativa->letra = $_POST[falsoverdadeiro][$letra];
                $alternativa->correta = ($_POST[alternativacorreta] == $letra)? '1' : '0';
                $alternativa->descricao = parent::acertarString($_POST[alternativadescricao][$letra]);
                $questao->alternativas[] = $alternativa;
            }
        }
        
        switch($acao){
            case 'inserir':
                $executou = $questao->inserir();
                break;
            case 'editar':
                $executou = $questao->editar();
                break;
            case 'excluir':
                $executou = $questao->excluir();
                break;
        }
        
        $_SESSION[provafase_id] = $_POST[provafase_id];
        
        echo "<script type='text/javascript'>window.opener.location.reload(); window.close();</script>";
    }
}

$pagina = new CRUDQuestao();
$pagina->montar();
