<commit_before><?php defined('BASEPATH') OR exit('No direct script access allowed');

class Pessoa extends MY_Controller {
    private $id_docente = 4;

    /**
    * Página inicial de pessoa
    * @author Vitor "Pliavi"
    */
    function index() {
        $pessoas = Pessoa_model::withTrashed()->get();
        $this->load->template('pessoas/pessoas', compact('pessoas'),'pessoas/js_pessoas');
    }

    /**
    * Formulário de cadastro
    * @author Vitor "Pliavi"
    */
    function cadastrar() {
        $tipos = Tipo_model::all();
        $this->load->template('pessoas/cadastrar', compact('tipos'),'pessoas/js_pessoas');
    }

    /**
    * Salva uma pessoa no banco
    * @author Vitor "Pliavi"
    */
    function salvar() {
        $has_docente = in_array($this->id_docente, $this->request('tipos')?:[]);
        
        $this->set_validations([
            ['nome', 'nome', 'required|min_length[5]'],
            ['prontuario', 'prontuário', 'required|is_unique[pessoa.prontuario]|exact_length[6]|numeric'],
            ['senha', 'senha', 'required|min_length[6]'],
            ['email', 'email', 'required|valid_email'],
            ['tipos[]', 'tipos', 'required']
            ]);
            
        if($has_docente) {
            $this->set_validations([
                ['nascimento', 'data de nascimento', 'required|valid_date'],
                ['ingresso_campus', 'data de ingresso no câmpus', 'required|valid_date'],
                ['ingresso_ifsp', 'data de ingresso no IFSP', 'required|valid_date'],
                ['area', 'área', 'required'],
                ['regime_contrato', 'regime de contrato', 'required|in_list[20, 40]'],
            ]);
        }
                
        if($this->run_validation()) {
            DB::transaction(function() {
                $pessoa = Pessoa_model::create($this->request_all());
                if($has_docente) {
                    $docente = Docente_model::create($this->request_all());
                }

                // Monta as relações de tipo
                $pessoa->tipos()->sync($this->request('tipos'));
            });
            $this->session->set_flashdata('success', 'Pessoa cadastrada com sucesso');
            redirect('/pessoa');
        } else {
            $this->session->set_flashdata('danger', 'Não foi possível cadastrar a pessoa');
            $this->cadastrar();
        }
    }

    /**
    * Formulário de edição
    * @author Vitor "Pliavi"
    * @param $id ID da pessoa a ser desativada
    */
    function editar($id) {
        $pessoa = Pessoa_model::findOrFail($id);
        $tipos = Tipo_model::all();
		$tipos_pessoa=[];

		foreach($pessoa->tipos as $t){
			$tipos_pessoa[] = $t->id;
		}

        $this->load->template('pessoas/editar', compact('pessoa', 'tipos_pessoa', 'tipos'));
    }

    /**
    * Atualiza os dados da pessoa
    * @author Vitor "Pliavi"
    * @param $id ID da pessoa a ser atualizada
    */
    function atualizar($id) {
        DB::transaction(function() use ($id) {
            $pessoa = Pessoa_model::findOrFail($id);
            $has_docente = in_array($this->id_docente, $this->request('tipos')?:[]); // Se o docente estiver na lista de tipos

            $this->set_validations([
                ['nome', 'nome', 'required|min_length[5]'],
                ['prontuario', 'prontuário', 'required|exact_length[6]'],
                ['senha', 'senha', 'required|min_length[6]'],
                ['email', 'email', 'required|valid_email'],
                ['tipos[]', 'tipos', 'required']
            ]);

            if($has_docente) {
                $this->set_validations([
                    ['nascimento', 'data de nascimento', 'required|valid_date'],
                    ['ingresso_campus', 'data de ingresso no câmpus', 'required|valid_date'],
                    ['ingresso_ifsp', 'data de ingresso no IFSP', 'required|valid_date'],
                    ['area', 'área', 'required'],
                    ['regime_contrato', 'regime de contrato', 'required|in_list[20, 40]'],
                ]);
            }

            if ($this->run_validation()) {
                $pessoa->update($this->request_all());
                if($has_docente) {
                    $docente = $pessoa->docente;
                    $docente->update($this->request_all());
                } else if(!is_null($pessoa->docente)){
                    $pessoa->docente->delete();
                }

                // Realinha os tipos
                $pessoa->tipos()->sync($this->request('tipos'));

                $this->session->set_flashdata('success', 'Pessoa atualizada com sucesso');
                redirect('/pessoa');
            } else {
                $this->session->set_flashdata('danger', 'Não foi possível atualizar a pessoa');
                $this->editar();
            }

        });

    }

    /**
    * Desativa a pessoa
    * @author Vitor "Pliavi"
    * @param $id ID da pessoa a ser desativada
    */
    function deletar($id) {
        Pessoa_model::findOrFail($id)->delete();
        $this->session->set_flashdata('success', 'Pessoa deletada com sucesso');
		redirect('/pessoa');
    }

    /**
     * Ativa a Pessoa
     * @author <NAME>
     * @since 2017/09/11
     * @param ID da Pessoa
    */
    function ativar ($id) {
        Pessoa_model::withTrashed()->findOrFail($id)->restore();
        $this->session->set_flashdata('success','Pessoa ativada com sucesso');
		redirect('/pessoa');
    }

    /**
     * Verifica se o prontuário é único
     * @author <NAME>
     * @since 2017/09/17
     * @param Prontuario
    */
    public function verificaProntuario() {
        $validate_data = array('prontuario' => $this->request('prontuario'));
        $this->form_validation->set_data($validate_data);
        $this->form_validation->set_rules('prontuario', 'prontuario', 'is_unique[pessoa.prontuario]');

        if($this->form_validation->run()) {
            echo "true";
        } else {
            echo "false";
        }
    }

}
<commit_msg>Corrigindo o atualizar e liberando não traocar senha<commit_after><?php defined('BASEPATH') OR exit('No direct script access allowed');

class Pessoa extends MY_Controller {
    private $id_docente = 4;

    /**
    * Página inicial de pessoa
    * @author Vitor "Pliavi"
    */
    function index() {
        $pessoas = Pessoa_model::withTrashed()->get();
        $this->load->template('pessoas/pessoas', compact('pessoas'),'pessoas/js_pessoas');
    }

    /**
    * Formulário de cadastro
    * @author Vitor "Pliavi"
    */
    function cadastrar() {
        $tipos = Tipo_model::all();
        $this->load->template('pessoas/cadastrar', compact('tipos'),'pessoas/js_pessoas');
    }

    /**
    * Salva uma pessoa no banco
    * @author Vitor "Pliavi"
    */
    function salvar() {
        $has_docente = in_array($this->id_docente, $this->request('tipos')?:[]);

        $this->set_validations([
            ['nome', 'nome', 'required|min_length[5]'],
            ['prontuario', 'prontuário', 'required|is_unique[pessoa.prontuario]|exact_length[6]|numeric'],
            ['senha', 'senha', 'required|min_length[6]'],
            ['email', 'email', 'required|valid_email'],
            ['tipos[]', 'tipos', 'required']
            ]);

        if($has_docente) {
            $this->set_validations([
                ['nascimento', 'data de nascimento', 'required|valid_date'],
                ['ingresso_campus', 'data de ingresso no câmpus', 'required|valid_date'],
                ['ingresso_ifsp', 'data de ingresso no IFSP', 'required|valid_date'],
                ['area', 'área', 'required'],
                ['regime_contrato', 'regime de contrato', 'required|in_list[20, 40]'],
            ]);
        }

        if($this->run_validation()) {
            DB::transaction(function() {
                $pessoa = Pessoa_model::create($this->request_all());
                if($has_docente) {
                    $docente = Docente_model::create($this->request_all());
                }

                // Monta as relações de tipo
                $pessoa->tipos()->sync($this->request('tipos'));
            });
            $this->session->set_flashdata('success', 'Pessoa cadastrada com sucesso');
            redirect('/pessoa');
        } else {
            $this->session->set_flashdata('danger', 'Não foi possível cadastrar a pessoa');
            $this->cadastrar();
        }
    }

    /**
    * Formulário de edição
    * @author Vitor "Pliavi"
    * @param $id ID da pessoa a ser desativada
    */
    function editar($id) {
        $pessoa = Pessoa_model::findOrFail($id);
        $tipos = Tipo_model::all();
		$tipos_pessoa = [];

		foreach($pessoa->tipos as $t){
			$tipos_pessoa[] = $t->id;
		}

        $this->load->template('pessoas/editar', compact('pessoa', 'tipos_pessoa', 'tipos'));
    }

    /**
    * Atualiza os dados da pessoa
    * @author Vitor "Pliavi"
    * @param $id ID da pessoa a ser atualizada
    */
    function atualizar($id) {
        $pessoa = Pessoa_model::findOrFail($id);
        $has_docente = in_array($this->id_docente, $this->request('tipos')?:[]); // Se o docente estiver na lista de tipos

        $this->set_validations([
            ['nome', 'nome', 'required|min_length[5]'],
            ['prontuario', 'prontuário', 'required|exact_length[6]'],
            ['senha', 'senha', 'min_length[6]'],
            ['email', 'email', 'required|valid_email'],
            ['tipos[]', 'tipos', 'required']
        ]);

        if($has_docente) {
            $this->set_validations([
                ['nascimento', 'data de nascimento', 'required|valid_date'],
                ['ingresso_campus', 'data de ingresso no câmpus', 'required|valid_date'],
                ['ingresso_ifsp', 'data de ingresso no IFSP', 'required|valid_date'],
                ['area', 'área', 'required'],
                ['regime_contrato', 'regime de contrato', 'required|in_list[20, 40]'],
            ]);
        }

        if ($this->run_validation()) {
            $pessoa_data = $this->request_all();
            if(empty(trim($pessoa_data['senha']))){
                unset($pessoa_data['senha']);
            }

            DB::transaction(function() use ($id, $pessoa, $pessoa_data, $has_docente) {
                $pessoa->update($pessoa_data);
                if($has_docente) {
                    $docente = $pessoa->docente;
                    $docente->update($this->request_all());
                } else if(!is_null($pessoa->docente)){
                    $pessoa->docente->delete();
                }

                // Realinha os tipos
                $pessoa->tipos()->sync($this->request('tipos'));
            });

            $this->session->set_flashdata('success', 'Pessoa atualizada com sucesso');
            redirect('/pessoa');
        } else {
            $this->session->set_flashdata('danger', 'Não foi possível atualizar a pessoa');
            $this->editar();
        }
    }

    /**
    * Desativa a pessoa
    * @author Vitor "Pliavi"
    * @param $id ID da pessoa a ser desativada
    */
    function deletar($id) {
        Pessoa_model::findOrFail($id)->delete();
        $this->session->set_flashdata('success', 'Pessoa deletada com sucesso');
		redirect('/pessoa');
    }

    /**
     * Ativa a Pessoa
     * @author <NAME>
     * @since 2017/09/11
     * @param ID da Pessoa
    */
    function ativar ($id) {
        Pessoa_model::withTrashed()->findOrFail($id)->restore();
        $this->session->set_flashdata('success','Pessoa ativada com sucesso');
		redirect('/pessoa');
    }

    /**
     * Verifica se o prontuário é único
     * @author <NAME>
     * @since 2017/09/17
     * @param Prontuario
    */
    public function verificaProntuario() {
        $validate_data = array('prontuario' => $this->request('prontuario'));
        $this->form_validation->set_data($validate_data);
        $this->form_validation->set_rules('prontuario', 'prontuario', 'is_unique[pessoa.prontuario]');

        if($this->form_validation->run()) {
            echo "true";
        } else {
            echo "false";
        }
    }

}

{'fraction_non_alphanumeric': 0.16544208701395197, 'fraction_numerical': 0.005118467761908693, 'mean_word_length': 2.13347128815313, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 127, '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': '3609298', 'n_tokens_mistral': 4023, 'n_tokens_neox': 3861, 'n_words': 688}