<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class BackOffice extends MY_Controller {

    function __construct() {
        parent::__construct();


        $this->load->library('grocery_CRUD');

        $this->load->library('session');
        if (!is_logged_in()) {
            redirect();
        }
    }

    function _backOffice_output($output = null) {
        $this->load->view('backoffice', $output);
    }

    function index() {
        $this->_backOffice_output((object) array(
                    'output' => '',
                    'js_files' => array(
                        'grocery_crud/themes/datatables/js/jquery-1.7.2.js',
                        'grocery_crud/themes/flexigrid/js/cookies.js',
                        'grocery_crud/themes/flexigrid/js/flexigrid.js',
                        'grocery_crud/themes/flexigrid/js/jquery.form.js',
                        'grocery_crud/themes/flexigrid/js/jquery.numeric.js'
                    )
                    ,
                    'css_files' => array('grocery_crud/themes/flexigrid/css/flexigrid.css')));
    }

    function oportunidades_management() {

        try {
            /* This is only for the autocompletion */
            $crud = new grocery_CRUD();

            $crud->set_js('resources/scripts/tiny_mce/tiny_mce.js');
            $crud->set_js('resources/scripts/tiny_mce/config.js');

            $crud->set_theme('datatables');
            $crud->set_table('oportunidade_emprego');
            $crud->set_subject('Oportunidades de Emprego');
            $crud->required_fields('titulo', 'descricao', 'data_limite');
            $crud->columns('titulo', 'descricao', 'data_limite');
            $crud->fields('titulo', 'descricao', 'data_limite');


            $crud->display_as('data_limite', 'Data limite para candidaturas')
                    ->display_as('descricao', 'Descrição')
                    ->display_as('titulo', 'Título');


            $crud->callback_add_field('descricao', array($this, 'set_descricao_textarea'));
            $crud->callback_edit_field('descricao', array($this, 'set_descricao_textarea'));

            $output = $crud->render();

            $this->_backOffice_output($output);
        } catch (Exception $e) {
            show_error($e->getMessage() . ' --- ' . $e->getTraceAsString());
        }
    }

    function candidaturas_management() {

        try {
            /* This is only for the autocompletion */
            $crud = new grocery_CRUD();

            $crud->set_theme('datatables');
            $crud->set_table('candidatura');
            $crud->set_subject('Candidaturas');
            $crud->columns('data', 'nome', 'morada', 'cod-postal', 'emprego', 'telemovel', 'email', 'data-nascimento', 'estado-civil', 'nacionalidade', 'situacao-militar', 'nivel-de-estudos', 'grau-academico', 'instituicao', 'curso', 'designacao-do-curso', 'duracao-data-conclusao', 'entidade-formadora', 'lingua-estrangeira', 'leitura', 'escrita', 'conversacao', 'optica-do-utilizador', 'optica-do-programador', 'empresa', 'funcao', 'experiencia-prof', 'funcao-candidato', 'disponibilidade', 'observacoes', 'cv_path');
            $crud->fields('data', 'nome', 'morada', 'cod-postal', 'emprego', 'telemovel', 'email', 'data-nascimento', 'estado-civil', 'nacionalidade', 'situacao-militar', 'nivel-de-estudos', 'grau-academico', 'instituicao', 'curso', 'designacao-do-curso', 'duracao-data-conclusao', 'entidade-formadora', 'lingua-estrangeira', 'leitura', 'escrita', 'conversacao', 'optica-do-utilizador', 'optica-do-programador', 'empresa', 'funcao', 'experiencia-prof', 'funcao-candidato', 'disponibilidade', 'observacoes', 'cv_path');

            $crud->set_field_upload('cv_path', 'resources/newsletters');

            $crud->display_as('data', 'Data submissão')
                    ->display_as('nome', 'Nome')
                    ->display_as('morada', 'Morada')
                    ->display_as('cod-postal', 'Código Postal')
                    ->display_as('emprego', 'Contacto emprego')
                    ->display_as('telemovel', 'Contacto telemóvel')
                    ->display_as('email', 'Contacto email')
                    ->display_as('data-nascimento', 'Data de nascimento')
                    ->display_as('estado-civil', 'Estado Cívil')
                    ->display_as('nacionalidade', 'Nacionalidade')
                    ->display_as('situacao-militar', 'Situação militar')
                    ->display_as('grau-academico', 'Grau académico')
                    ->display_as('instituicao', 'Instituição')
                    ->display_as('curso', 'Curso')
                    ->display_as('designacao-do-curso', 'Designação do curso')
                    ->display_as('duracao-data-conclusao', 'Duração até à data de conclusão')
                    ->display_as('entidade-formadora', 'Entidade formadora')
                    ->display_as('lingua-estrangeira', 'Lingua estrangeira')
                    ->display_as('leitura', 'Nível leitura')
                    ->display_as('escrita', 'Nível escrita')
                    ->display_as('conversacao', 'Nível conversação')
                    ->display_as('optica-do-utilizador', 'Informática óptica utilizador')
                    ->display_as('optica-do-programador', 'Informática óptica programador')
                    ->display_as('empresa', 'Empresa onde trabalhou')
                    ->display_as('funcao', 'Função desempenhada')
                    ->display_as('experiencia-prof', 'Período de tempo de trabalho')
                    ->display_as('funcao-candidato', 'Função a que se candidata')
                    ->display_as('disponibilidade', 'Disponibilidade')
                    ->display_as('observacoes', 'Observações')
                    ->display_as('cv_path', 'CV');


            $output = $crud->render();

            $this->_backOffice_output($output);
        } catch (Exception $e) {
            show_error($e->getMessage() . ' --- ' . $e->getTraceAsString());
        }
    }

    function noticias_management() {

        try {
            /* This is only for the autocompletion */
            $crud = new grocery_CRUD();

            $crud->set_js('resources/scripts/tiny_mce/tiny_mce.js');
            $crud->set_js('resources/scripts/tiny_mce/config.js');

            $crud->set_theme('datatables');
            $crud->set_table('noticia');
            $crud->set_subject('Notícias');
            $crud->required_fields('data', 'descricao', 'titulo');
            $crud->columns('data', 'recurso_path', 'descricao', 'titulo', 'youtube_link');
            $crud->fields('data', 'recurso_path', 'descricao', 'titulo', 'youtube_link');

            $crud->set_field_upload('recurso_path', 'resources/noticias');

            $crud->display_as('titulo', 'Título')
                    ->display_as('data', 'Data')
                    ->display_as('descricao', 'Descrição')
                    ->display_as('recurso_path', 'Anexo (PDF)')
                    ->display_as('youtube_link', 'Identificador de Vídeo (Youtube)');

            $crud->callback_add_field('descricao', array($this, 'set_descricao_textarea'));
            $crud->callback_edit_field('descricao', array($this, 'set_descricao_textarea'));

            $output = $crud->render();

            $this->_backOffice_output($output);
        } catch (Exception $e) {
            show_error($e->getMessage() . ' --- ' . $e->getTraceAsString());
        }
    }

    function contactos_management() {

        try {
            /* This is only for the autocompletion */
            $crud = new grocery_CRUD();

            $crud->set_js('resources/scripts/tiny_mce/tiny_mce.js');
            $crud->set_js('resources/scripts/tiny_mce/config.js');

            $crud->set_theme('datatables');
            $crud->set_table('contacto');
            $crud->set_subject('Contactos');
            $crud->required_fields('data');
            $crud->columns('data', 'nome', 'email', 'telefone', 'mensagem');
            $crud->fields('data', 'nome', 'email', 'telefone', 'mensagem');


            $crud->callback_add_field('mensagem', array($this, 'set_mensagem_textarea'));
            $crud->callback_edit_field('mensagem', array($this, 'set_mensagem_textarea'));

            $crud->display_as('nome', 'Nome')
                    ->display_as('data', 'Data')
                    ->display_as('email', 'Email')
                    ->display_as('telefone', 'Telefone')
                    ->display_as('mensagem', 'Mensagem');

            $output = $crud->render();

            $this->_backOffice_output($output);
        } catch (Exception $e) {
            show_error($e->getMessage() . ' --- ' . $e->getTraceAsString());
        }
    }

    function newsletters_management() {

        try {
            /* This is only for the autocompletion */
            $crud = new grocery_CRUD();

            $crud->set_theme('datatables');
            $crud->set_table('newsletter');
            $crud->set_subject('Newsletter');
            $crud->required_fields('data', 'recurso_path');
            $crud->columns('data', 'recurso_path');
            $crud->fields('data', 'recurso_path');

            $crud->set_field_upload('recurso_path', 'resources/newsletters');

            $crud->display_as('data', 'Data')
                    ->display_as('recurso_path', 'pdf');

            $output = $crud->render();

            $this->_backOffice_output($output);
        } catch (Exception $e) {
            show_error($e->getMessage() . ' --- ' . $e->getTraceAsString());
        }
    }
    
    function flash_management() {

        try {
            /* This is only for the autocompletion */
            $crud = new grocery_CRUD();

            $crud->set_theme('datatables');
            $crud->set_table('link_documento');
            $crud->set_subject('Flash News');
            $crud->required_fields('data', 'recurso_path','titulo');
            $crud->columns('data', 'recurso_path','titulo');
            $crud->fields('data', 'recurso_path','titulo');

            $crud->set_field_upload('recurso_path', 'resources/flash_news');

            $crud->display_as('data', 'Data')
                    ->display_as('recurso_path', 'pdf')
                    ->display_as('titulo', 'Título');

            $output = $crud->render();

            $this->_backOffice_output($output);
        } catch (Exception $e) {
            show_error($e->getMessage() . ' --- ' . $e->getTraceAsString());
        }
    }

    function subscricao_newsletter_management() {

        try {
            /* This is only for the autocompletion */
            $crud = new grocery_CRUD();

            $crud->set_theme('datatables');
            $crud->set_table('subscricao_newsletter');
            $crud->set_subject('Subscrições newsletter');
            $crud->required_fields('nome', 'email');
            $crud->columns('nome', 'email');
            $crud->fields('nome', 'email');


            $crud->display_as('nome', 'Nome')
                    ->display_as('email', 'Email')
            ;

            $output = $crud->render();

            $this->_backOffice_output($output);
        } catch (Exception $e) {
            show_error($e->getMessage() . ' --- ' . $e->getTraceAsString());
        }
    }

    function backoffice_user_management() {
        try {
            /* This is only for the autocompletion */
            $crud = new grocery_CRUD();

            $crud->where('is_backoffice', true);

            $crud->set_theme('datatables');
            $crud->set_table('user');
            $crud->set_subject('Utilizadores do Back Office');
            $crud->required_fields('email', 'password');
            $crud->columns('email', 'password');
            $crud->fields('email', 'password');

            $crud->callback_after_insert(array($this, 'post_insert_action'));


            $crud->unset_edit();

            $output = $crud->render();

            $this->_backOffice_output($output);
        } catch (Exception $e) {
            show_error($e->getMessage() . ' --- ' . $e->getTraceAsString());
        }
    }

    function post_work_insert_action($post_array, $primary_key) {
        $this->save_generated_link_work($post_array, $primary_key);
    }

    function post_work_update_action($post_array, $primary_key) {
        $this->save_generated_link_work($post_array, $primary_key);
    }

    function set_descricao_textarea($value, $primary_key) {
        return '<textarea name="descricao" class="texteditor">' . $value . '</textarea>';
    }

    function set_mensagem_textarea($value, $primary_key) {
        return '<textarea name="mensagem" class="texteditor">' . $value . '</textarea>';
    }

    function save_generated_link_work($post_array, $primary_key) {
        $generated_link_update = array(
            "gen_title" => url_title($post_array['work_title'], '-', TRUE)
        );

        $this->db->update('work', $generated_link_update, array('id' => $primary_key));

        return true;
    }

    function post_insert_action($post_array, $primary_key) {

        $this->load->helper('date');
        // insert user as backoffice user
        $user_data = array(
            "is_backoffice" => true,
            "creationDate" => mdate("%Y-%m-%d", now()),
            "state" => User_State::ACTIVE
        );

        $this->db->update('user', $user_data, array('id' => $primary_key));

        $this->save_md5_password_after_action($post_array, $primary_key);
    }

    function post_update_action($post_array, $primary_key) {
        $this->save_md5_password_after_action($post_array, $primary_key);
    }

    function save_md5_password_after_action($post_array, $primary_key) {
        $user_pass_md5_update = array(
            "password" => md5($post_array['password'])
        );

        $this->db->update('user', $user_pass_md5_update, array('id' => $primary_key));

        return true;
    }

}