<commit_before><?php

class Fpa extends CI_Controller{

  function index(){
    $fpas=[];
    $this->load->template('fpas/fpas',compact('fpas'),'fpas/js_fpas');
  }

  public function cadastrar(){
    $horarios = Horario_model::orderBy('inicio')->get();

    $this->load->template('fpas/fpaCadastrar', compact('horarios'), 'fpas/js_fpas');
  }

  public function salvar(){
    $disponibilidade    = $this->input->post('disp');
    $indisponibilidade  = $this->input->post('indisponibilidade');

    $fpa = Fpa_model::firstOrCreate($dados);
    $fpa->disponibilidade->sync([]);

    if(isset($disponibilidade)){
      $this->disponibilidade($disponibilidade);
    }else if(isset($indisponibilidade)){
      $this->indisponibilidade($indisponibilidade);
    }

    $disciplinas = $this->input->post('disc');
    $fpa->preferencia->sync([]);
    $ordem = 1;
    foreach($disciplinas as $disciplina){
      Preferencia_model::firstOrCreate([
        'fpa_id' => $fpa->id,
        'disciplina_id' => $disciplina->id,
        'preferencia' => $ordem++
      ]);  
    }

    $this->index();
  }

  private function disponibilidade($disponibilidade){
    try{
      DB::transaction(function (){
        $dados = [
          "docente_id" => 1,//$_SESSION['usuarioLogado']['id'],
          "periodo_id" => Periodo_model::periodoAtivo()->id
        ];
        
        foreach($disponibilidade as $dia_semana => $horarios){
          foreach($horarios as $horario_id){
            Disponibilidade_model::firstOrCreate([
              'fpa_id' => $fpa->id,
              'horario_id' => $horario_id, 
              'dia_semana' => $dia_semana
            ]);
          }
        }
      });
      $this->session->set_flashdata('success','FPA cadastrado com sucesso');
    } catch (Exception $e){
      $this->session->set_flashdata('danger','Problemas ao cadastrar a FPA, tente novamente!');
      echo $e->getMessage();
    }
  }

  private function indisponibilidade($indisponibilidade){
    $horarios = Horario_model::orderBy('inicio')->get();

    $dia_semana = ['seg', 'ter', 'qua', 'qui', 'sex', 'sab'];
    $dia_semana = array_diff($dia_semana, array($indisponibilidade));

    $dados = [
      "docente_id" => 1,//$_SESSION['usuarioLogado']['id'],
      "periodo_id" => Periodo_model::periodoAtivo()->id
    ];

    foreach($dia_semana as $dia_semana){
      foreach($horarios as $horario){
        Disponibilidade_model::firstOrCreate([
          'fpa_id' => $fpa->id,
          'horario_id' => $horario->id, 
          'dia_semana' => $dia_semana
        ]);
      }
    }
  }

  public function editar(){
    $fpa = Fpa::where('docente_id', $_SESSION['usuarioLogado']['id'])->where('ativo', 1);
    $horarios = Horario::orderBy('inicio')->get();
    $disponibilidade = $fpa->disponibilidade()->get();
    $disciplinas = $fpa->preferencia()->get();
    $this->load->template('fpas/fpaEditar', [$fpa, $horarios, $disponibilidade, $disciplinas], 'fpas/js_fpa');
  }

}<commit_msg>Correção do controller de FPA. Falta ser realizado testes.<commit_after><?php

class Fpa extends CI_Controller{

  function index(){
    $fpas=[];
    $this->load->template('fpas/fpas',compact('fpas'),'fpas/js_fpas');
  }

  public function cadastrar(){
    $horarios = Horario_model::orderBy('inicio')->get();

    $this->load->template('fpas/fpaCadastrar', compact('horarios'), 'fpas/js_fpas');
  }

  public function salvar(){
    $dados = [
      "docente_id" => $_SESSION['usuarioLogado']['id'],
      "periodo_id" => Periodo_model::periodoAtivo()->id
    ];
    $fpa = Fpa_model::firstOrCreate($dados);
    
  }

  public function salvarDisponibilidade($id){
    $periodoAtivo = Periodo_model::periodoAtivo();
    $fpa = Fpa_model::where('docente_id', $_SESSION['usuarioLogado']['id'])->where('periodo_id', $periodoAtivo->id);
    $fpa->disponibilidade->sync([]);

    try{
      DB::transaction(function (){
        if(isset($disponibilidade)){
          $this->disponibilidade($fpa);
        }else if(isset($indisponibilidade)){
          $this->indisponibilidade($fpa);
        }
      });
      $this->session->set_flashdata('success','FPA cadastrado com sucesso');
    } catch (Exception $e){
      $this->session->set_flashdata('danger','Problemas ao cadastrar a FPA, tente novamente!');
      echo $e->getMessage();
    }
    $this->index();
  }

  private function disponibilidade($fpa){
    $disponibilidade = $this->input->post('disp');
    foreach($disponibilidade as $dia_semana => $horarios){
      foreach($horarios as $horario_id){
        Disponibilidade_model::firstOrCreate([
          'fpa_id' => $fpa->id,
          'horario_id' => $horario_id, 
          'dia_semana' => $dia_semana
        ]);
      }
    }
  }

  private function indisponibilidade($fpa){
    $indisponibilidade  = $this->input->post('indisponibilidade');
    $horarios = Horario_model::orderBy('inicio')->get();
    $dia_semana = ['seg', 'ter', 'qua', 'qui', 'sex', 'sab'];
    $dia_semana = array_diff($dia_semana, array($indisponibilidade));
    foreach($dia_semana as $dia_semana){
      foreach($horarios as $horario){
        Disponibilidade_model::firstOrCreate([
          'fpa_id' => $fpa->id,
          'horario_id' => $horario->id, 
          'dia_semana' => $dia_semana
        ]);
      }
    }
  }

  public function editarDisponibilidade(){
    $periodoAtivo = Periodo_model::periodoAtivo();
    $fpa = Fpa_model::where('docente_id', $_SESSION['usuarioLogado']['id'])->where('periodo_id', $periodoAtivo->id);
    $horarios = Horario::orderBy('inicio')->get();
    $disponibilidade = $fpa->disponibilidade()->get();
    $this->load->template('fpas/fpaEditarDisponibilidade', [$fpa, $horarios, $disponibilidade], 'fpas/js_fpa');
  }

  public function salvarPreferencias($id){
    $periodoAtivo = Periodo_model::periodoAtivo();
    $fpa = Fpa_model::where('docente_id', $_SESSION['usuarioLogado']['id'])->where('periodo_id', $periodoAtivo->id);
    $disciplinas = $this->input->post('disc');
    $fpa->preferencia->sync([]);
    $ordem = 1;
    try{
      DB::transaction(function (){
        foreach($disciplinas as $disciplina){
          Preferencia_model::firstOrCreate([
            'fpa_id' => $fpa->id,
            'disciplina_id' => $disciplina->id,
            'preferencia' => $ordem++
          ]);  
        }
      });
      $this->session->set_flashdata('success','Preferências de disciplinas cadastrado com sucesso');
    } catch (Exception $e){
      $this->session->set_flashdata('danger','Problemas ao cadastrar as preferências de disciplinas, tente novamente!');
      echo $e->getMessage();
    }
  }

  public function editarPreferencias(){
    $periodoAtivo = Periodo_model::periodoAtivo();
    $fpa = Fpa_model::where('docente_id', $_SESSION['usuarioLogado']['id'])->where('periodo_id', $periodoAtivo->id);
    $disciplinas = Disciplina_model::all();
    $disciplinasSelecionadas = $fpa->preferencia()->get();
    $this->load->template('fpas/fpaEditarPreferencia', [$fpa, $disciplinas, $disciplinasSelecionadas], 'fpas/js_fpa');
  }


}
{'fraction_non_alphanumeric': 0.1829666430092264, 'fraction_numerical': 0.0007097232079489, 'mean_word_length': 3.5022364217252395, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 120, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2862568', 'n_tokens_mistral': 2531, 'n_tokens_neox': 2471, 'n_words': 340}