Example #1
0
 function editar($id = NULL)
 {
     $imagem = $_FILES['icone'];
     if ($this->input->post('submit')) {
         $dados = $this->input->post();
     } elseif ($id) {
         $dados['site'] = $this->Sites_model->obter($id);
         $dados['templates'] = montar_assoc($this->db->select('id, titulo')->where('site_id', $id)->get('cms_templates')->result_array());
     }
     // Validação
     $this->form_validation->set_rules('site[titulo]', 'Título', 'trim|required');
     $this->form_validation->set_rules('site[url]', 'Url', 'trim|required');
     if ($this->form_validation->run()) {
         // Salva o icone do site
         if (strlen($imagem['name']) > 0) {
             $img = $imagem;
             $img['name'] = $dados['site']['id'] . '.png';
             $ok = MY_Utils::redimensionar_imagem($imagem, $this->path . $img['name'], 16, 16);
             if ($ok) {
                 $dados['site']['icone'] = $img['name'];
             }
         }
         $id = $this->Sites_model->salvar($dados['site']);
         redirect('sites');
     } else {
         $dados['erro'] = validation_errors();
     }
     $this->load->view('sites_editar', $dados);
 }
Example #2
0
 function editar($id = NULL)
 {
     if ($this->input->post('submit')) {
         $dados = $this->input->post();
         $respostas = array();
         for ($i = 0; $i < count($dados['respostas']['descricao']); ++$i) {
             $respostas[$i]['descricao'] = $dados['respostas']['descricao'][$i];
             if ($dados['respostas_com_cores_personalizadas'] == 't') {
                 $respostas[$i]['cor'] = $dados['respostas']['cor'][$i];
             }
         }
         $dados['respostas'] = $respostas;
     } elseif ($id) {
         $dados['enquete'] = $this->Enquetes_model->obter($id);
         $dados['respostas'] = $this->Enquetes_model->obter_respostas($id);
     }
     // Site ID
     $dados['enquete']['site_id'] = (int) $this->site_id;
     // Campo multipla_resposta
     $dados['enquete']['multipla_resposta'] = $dados['enquete']['multipla_resposta'] == 't' ? 't' : 'f';
     // Campo multiplicar_tempo
     $dados['multiplicar_tempo'] = $dados['multiplicar_tempo'] > 0 ? $dados['multiplicar_tempo'] : '1';
     // Campo intervalo_entre_votos (tempo entre um voto e outro (por IP))
     $dados['multipla_resposta'] = $dados['multipla_resposta'] > 0 ? $dados['multipla_resposta'] : '1';
     $dados['enquete']['intervalo_entre_votos'] = $dados['enquete']['intervalo_entre_votos'] > 0 ? $dados['enquete']['intervalo_entre_votos'] : '0';
     $dados['enquete']['intervalo_entre_votos'] = (int) $dados['enquete']['intervalo_entre_votos'] * (int) $dados['multiplicar_tempo'];
     // Validação
     $this->form_validation->set_rules('enquete[titulo]', 'Título', 'trim|required');
     $this->form_validation->set_rules('enquete[descricao]', 'Descrição', 'trim|required');
     $this->form_validation->set_rules('enquete[dt_inicio]', 'Data de início', 'trim|required');
     $this->form_validation->set_rules('enquete[hora_inicio]', 'Hora de início', 'trim|required');
     $this->form_validation->set_rules('enquete[ativo]', 'Ativo', 'trim|required');
     if ($this->input->post('submit')) {
         if ($this->form_validation->run()) {
             $dados['enquete']['dt_inicio'] = MY_Utils::montar_timestamp($dados['enquete']['dt_inicio'], $dados['enquete']['hora_inicio']);
             $dados['enquete']['dt_fim'] = MY_Utils::montar_timestamp($dados['enquete']['dt_fim'], $dados['enquete']['hora_fim']);
             unset($dados['enquete']['hora_inicio']);
             unset($dados['enquete']['hora_fim']);
             $id = $this->Enquetes_model->salvar($dados['enquete']);
             if ($id) {
                 $ok = $this->Enquetes_model->salvar_respostas($id, $dados['respostas']);
                 if ($ok) {
                     redirect('enquetes');
                 } else {
                     $dados['erro'] = 'Não foi possível inserir as opções de resposta';
                 }
             } else {
                 $dados['erro'] = 'Não foi possível inserir o registro.';
             }
         } else {
             $dados['erro'] = validation_errors();
         }
     }
     $this->load->view('enquetes_editar', $dados);
 }
Example #3
0
 function gravar_voto($enquete_id, $resposta, $cod_aluno = null)
 {
     $ok = false;
     if (!is_array($resposta)) {
         $resposta = array($resposta);
     }
     $ip = $_SERVER['HTTP_X_REAL_IP'] ? $_SERVER['HTTP_X_REAL_IP'] : $_SERVER['REMOTE_ADDR'];
     $opcao = MY_Utils::to_pg_array($resposta);
     $voto = array('enquete_id' => $enquete_id, 'opcao_id' => $opcao, 'ip' => $ip, 'cod_aluno' => $cod_aluno);
     $ok = $this->db->insert('cms_enquetes_votos', $voto);
     return $ok;
 }
Example #4
0
 function exibir($params = array())
 {
     $enquete_id = $params['enquete_id'];
     $dados = array();
     $dados['enquete'] = $this->Enquetes_model->obter($enquete_id);
     $dados['opcoes'] = $this->Enquetes_model->obter_opcoes($enquete_id);
     $dados['resultados'] = $this->Enquetes_model->obter_resultados($enquete_id);
     $this->form_validation->set_rules('resposta', 'Resposta', 'trim|required');
     $this->form_validation->set_message('required', 'É necessário escolher ao menos uma opção.');
     $dados['enquete']['pag_resultados'] = strlen($params['pag_resultados']) > 0 ? $params['pag_resultados'] : 'enquete/resultados';
     // Agora:
     $agora = date('Y-m-d H:i:00');
     // Se está inativa
     if ($dados['enquete']['ativo'] != 't') {
         $dados['erro'][] = 'Desculpe, mas esta enquete não está mais ativa.';
         $dados['disabled'] = true;
     } elseif ($agora < $dados['enquete']['dt_inicio']) {
         $dados['erro'][] = 'Desculpe, mas esta enquete ainda não iniciou. Aguarde até: ' . MY_Utils::formata_data_hora($dados['enquete']['dt_inicio']);
         $dados['disabled'] = true;
     } elseif (strlen($dados['enquete']['dt_fim']) > 0 && $agora > $dados['enquete']['dt_fim']) {
         $dados['erro'][] = 'Desculpe, mas esta enquete encerrou em: ' . MY_Utils::formata_data_hora($dados['enquete']['dt_fim']);
         $dados['disabled'] = true;
     } elseif ($this->input->post('votar')) {
         // Obtém a(s) resposta(s) do POST
         $resposta = $this->input->post('resposta');
         if ($this->form_validation->run()) {
             if ($this->pode_votar($enquete_id)) {
                 $cod_aluno = $this->obter_codigo_aluno();
                 $ok = $this->Enquetes_model->gravar_voto($enquete_id, $resposta, $cod_aluno);
                 if ($ok) {
                     $dados['info'][] = 'Voto computado com sucesso!';
                 } else {
                     $dados['erro'][] = 'Desculpe, mas não foi possível computar seu voto. Tente novamente mais tarde.';
                 }
             } else {
                 $dados['erro'][] = 'Você já votou nesta enquete.';
             }
         } else {
             $dados['erro'][] = '<b>Não foi possível computar seu voto.</b>';
             $dados['erro'][] = validation_errors();
         }
     }
     $this->load->view('enquete', $dados);
 }
Example #5
0
 /**
  * Função para redimensionar imagens
  * @param ($_FILE) $tmp_file - Arquivo que veio no post do form
  * @param (string) $dest_img - Destino da imagem
  * @param (int) $maxW - Largura máxima
  * @param (int) $maxH - Altura máxima
  * @return (bool) - Sucesso
  */
 public static function redimensionar_imagem($tmp_file, $dest_img, $maxW, $maxH, $keepRatio = true)
 {
     if (!is_file($tmp_file['tmp_name'])) {
         vdie($tmp_file['tmp_name'] . ' não existe.');
     }
     if ($keepRatio) {
         // Dimensões originais
         list($width, $height) = getimagesize($tmp_file['tmp_name']);
         // Limites
         $max_width = $maxW > 0 ? $maxW : $width;
         $max_height = $maxH > 0 ? $maxH : $height;
         // Novas dimensões
         list($new_height, $new_width) = MY_Utils::calcular_novas_dimensoes($height, $width, $max_height, $max_width);
         $new_width = $maxW > 0 ? $maxW : $max_width;
         $new_height = $maxH > 0 ? $maxH : $max_heigth;
     } else {
         // Dimensões originais
         list($width, $height) = getimagesize($tmp_file['tmp_name']);
         // Limites
         $max_width = $maxW > 0 ? $maxW : $width;
         $max_height = $maxH > 0 ? $maxH : $height;
         // Novas dimensões
         list($new_height, $new_width) = MY_Utils::calcular_novas_dimensoes_2($height, $width, $max_height, $max_width);
     }
     // Converte/redimensiona
     $tmp_img = $tmp_file['tmp_name'];
     if (copy($tmp_img, $dest_img) && is_file($tmp_img)) {
         // Chama o arquivo com a classe WideImage
         require_once 'WideImage/lib/WideImage.php';
         // Carrega a imagem a ser manipulada
         $image = WideImage::load($tmp_img);
         // Redimensiona a imagem
         $image = $image->resize($new_width, $new_height);
         if (!$keepRatio) {
             // Corta a imagem
             $image = $image->crop(0, 0, $maxW, $maxH);
         }
         // JPG to progressive
         if (array_pop(explode('.', $dest_img)) == 'jpg') {
             imageinterlace($image->getHandle(), true);
         }
         // Salva a imagem em um arquivo (novo ou não)
         $image->saveToFile($dest_img);
     } else {
         vdie('Não foi possível gravar a imagem no servidor.');
     }
     // Se ok
     $ok = is_file($dest_img);
     if (!$ok) {
         vdie('Não foi possível receber a imagem no servidor.');
     }
     return $ok;
 }
Example #6
0
 /**
  * Redimensiona e salva as imagens
  */
 function salvar_imagens($noticia_id, $imagens, $path, $path_temporario)
 {
     $site_path = SERVERPATH . $path;
     foreach ($imagens as $imagem) {
         // Se a imagem existe
         if (is_file($imagem['arquivo'])) {
             // Paths
             $imagem['dir'] = $imagem['dir'] ? $imagem['dir'] : 'noticias/' . $noticia_id;
             $path = $site_path . $imagem['dir'];
             // Se não existir e não conseguir criar o path, erro!
             if (!is_dir($site_path . 'noticias') && !mkdir($site_path . 'noticias')) {
                 throw new Exception('Não foi possível criar o diretório(' . $site_path . 'noticias) para as imagens.');
             }
             if (!is_dir($path) && !mkdir($path)) {
                 throw new Exception('Não foi possível criar o diretório(' . $path . ') para as imagens.');
             }
             $path .= '/';
             // Quebra o nome da imagem e a extensão
             $nome_imagem = array_pop(explode('/', $imagem['arquivo']));
             $array = explode('.', $nome_imagem);
             array_pop($array);
             $nome_imagem = implode('.', $array);
             $ext = MY_Utils::obter_extensao_imagem($imagem['arquivo']);
             $nome_imagem = MY_Utils::removeSpecialChars($nome_imagem);
             // Redimensiona a imagem
             $img = array('name' => $nome_imagem . '.' . ($ext ? $ext : 'jpg'), 'tmp_name' => $imagem['arquivo']);
             if (!MY_Utils::redimensionar_imagem($img, $path . $img['name'], $this->image_h, $this->image_w)) {
                 throw new Exception('Não foi possível redimensionar a imagem: ' . $img['name']);
             }
             // Redimensiona a miniatura da imagem
             $img_thumb = array('name' => 'thumb_' . $nome_imagem . '.' . $ext, 'tmp_name' => $imagem['arquivo']);
             if (!MY_Utils::redimensionar_imagem($img_thumb, $path . $img_thumb['name'], $this->thumb_h, $this->thumb_w)) {
                 throw new Exception('Não foi possível redimensionar a miniatura: ' . $img_thumb['name']);
             }
             // Confere se gravou certo as imagens
             if (!is_file($path . $img['name'])) {
                 throw new Exception('Não foi possível armazenar a imagem: ' . $path . $img['name']);
             } else {
                 if (!is_file($path . $img_thumb['name'])) {
                     throw new Exception('Não foi possível armazenar a imagem: ' . $path . $img['name']);
                 } else {
                     // Se a imagem em questão for capa, tira a capa anterior
                     if ($imagem['capa'] == 1) {
                         $imagem['capa'] = 1;
                         $where = array('capa' => 1, 'noticia_id' => $noticia_id);
                         if (!$this->db->update('cms_noticias_imagens', array('capa' => 0), $where)) {
                             throw new Exception('Não foi possível trocar imagem capa.');
                         }
                     } else {
                         $imagem['capa'] = 0;
                     }
                     // Tudo ok, salva na base
                     $dados_img = array('noticia_id' => $noticia_id, 'criado_por' => $this->usuario_id, 'arquivo' => $img['name'], 'arquivo_thumb' => $img_thumb['name'], 'credito' => $imagem['credito'], 'legenda' => $imagem['legenda'], 'dir' => $imagem['dir'], 'capa' => $imagem['capa']);
                     if (!$this->db->insert('cms_noticias_imagens', $dados_img)) {
                         throw new Exception('Não foi possível salvar os dados da imagem.');
                     }
                 }
             }
             // Apaga a imagem temporária
             if (!unlink($imagem['arquivo'])) {
                 throw new Exception('Não foi possível remover a imagem temporária: ' . $nome_imagem . '.' . $ext);
             }
         } else {
             if ($imagem['id']) {
                 if ($imagem['capa'] == 1) {
                     $imagem['capa'] = 1;
                 } else {
                     $imagem['capa'] = 0;
                 }
                 // Atualiza crédito/legenda/capa
                 $dados_img = array('noticia_id' => $noticia_id, 'criado_por' => $this->usuario_id, 'credito' => $imagem['credito'], 'legenda' => $imagem['legenda'], 'capa' => $imagem['capa']);
                 if (!$this->db->update('cms_noticias_imagens', $dados_img, array('id' => $imagem['id']))) {
                     throw new Exception('Não foi possível salvar os dados da imagem.');
                 }
             } else {
                 throw new Exception('Não foi possível obter a imagem: ' . $imagem['arquivo']);
             }
         }
     }
     // Chegando aqui sem dar Exception, está tudo OK ;)
 }
Example #7
0
 /**
  * Envia o(s) email(s)
  */
 function enviar_email($dados = array(), $campos = array(), $assunto, $de, $para, $cc = '')
 {
     $ok = false;
     // 'CC'
     $copias = array();
     foreach ((array) explode(',', $cc) as $email) {
         if (MY_Utils::email_valido($email)) {
             $copias[] = $email;
         }
     }
     // "De" default
     $de_email = MY_Utils::removeSpecialChars(strtolower($de['email']), true);
     // Se o rementente tá no form
     foreach ($campos['input'] as $campo) {
         if ($de['nome'] == $campo['label']) {
             $de['nome'] = $dados[$campo['name']];
         }
         if ($de['email'] == $campo['label']) {
             $de['email'] = $dados[$campo['name']];
         }
     }
     // Se o nome do rementente foi preenchido
     if (strlen($de['nome']) == 0 || in_array($de['nome'], $campos)) {
         $de['nome'] = 'Sinaliza';
     }
     // Se o email do rementente foi preenchido corretamente
     if (strlen($de['email']) == 0 || !MY_Utils::email_valido($de['email'])) {
         $de['email'] = '*****@*****.**';
     }
     // "Para" default
     $para_email = MY_Utils::removeSpecialChars(strtolower($para['email']), true);
     // Se o destinatário tá no form
     if (in_array($para['email'], (array) $campos)) {
         $para_nome = MY_Utils::removeSpecialChars(strtolower($para['nome']), true);
         $para['nome'] = $dados[$para_nome];
         $para['email'] = $dados[$para_email];
     }
     // Se o nome do destinatário foi preenchido
     if (strlen($para['nome']) == 0 || in_array($para['nome'], $campos)) {
         $para['nome'] = 'Sinaliza';
     }
     // Se o email do destinatário foi preenchido corretamente
     if (strlen($para['email']) == 0 || !MY_Utils::email_valido($para['email'])) {
         $para['email'] = '*****@*****.**';
     }
     $mensagem = 'Dados preenchidos:<br />';
     $vazio = true;
     // Campos
     foreach ($campos['input'] as $k => $campo) {
         // Une os valores preenchidos
         $valor = $dados[$campo['name']];
         if (strlen($valor) > 0 && $valor != $campo['name']) {
             $mensagem .= $campo['label'] . ' : ' . $valor . '<br />';
             $vazio = false;
         }
     }
     // Textarea
     foreach ($campos['textarea'] as $k => $campo) {
         // Une os valores preenchidos
         $valor = $dados[$campo['name']];
         if (strlen($valor) > 0 && $valor != $campo['name']) {
             $mensagem .= $campo['label'] . ' :<br />' . $valor . '<br />';
             $vazio = false;
         }
     }
     // Envia email
     if (!$vazio) {
         $this->load->library('MY_PHPMailer');
         $mail = new MY_PHPMailer();
         $mail->SetFrom($de['email'], mb_encode_mimeheader($de['nome']));
         $mail->AddAddress($para['email'], mb_encode_mimeheader($para['nome']));
         foreach ($copias as $email) {
             // Nem funciona esses CC, nem BCC... :(
             $mail->AddBCC($email, mb_encode_mimeheader($para['nome']));
         }
         $mail->Subject = mb_encode_mimeheader($assunto);
         $mail->MsgHTML(str_replace("\n", '<br />', $mensagem));
         $ok = $mail->Send();
     }
     return $ok;
 }
Example #8
0
    function editar($id = null)
    {
        // Array de dados para a view
        $dados = array();
        // Carrega a model
        $this->load->model('Produtos_model');
        // Obtém os dados
        if ($this->input->post('submit')) {
            // se tem post, obtém do formulário
            $dados = $this->input->post();
        } elseif ((int) $id > 0) {
            // se tem id, obtém da base
            $dados['registro'] = $produto = $this->Produtos_model->obter($id);
        }
        // Se tem post, salva os dados
        if ($this->input->post('submit')) {
            // Validação
            $this->form_validation->set_rules('registro[categoria_id]', 'Categoria', 'trim|required');
            $this->form_validation->set_rules('registro[tipo_id]', 'Tipo', 'trim|required');
            $this->form_validation->set_rules('registro[titulo]', 'Título', 'trim|required');
            $this->form_validation->set_rules('registro[ativo]', 'Ativo', 'trim|required');
            if ($this->form_validation->run()) {
                $dados['registro']['link'] = str_replace('-', '_', MY_Utils::removeSpecialChars(strtolower(utf8_decode($dados['registro']['titulo']))));
                $dados['registro']['link'] = preg_replace('/_{2,}/', '_', $dados['registro']['link']);
                // Converte tudo pra maiusculo
                foreach ($dados['registro'] as $k => $valor) {
                    $dados['registro'][$k] = strtoupper($valor);
                }
                // Salva o produto
                $dados['registro']['id'] = $ok = $this->Produtos_model->salvar($dados['registro']);
                // Salva os componentes do kit
                if ($dados['registro']['tipo_id'] == '2') {
                    // Produtos componentes do kit
                    $componentes = array();
                    if ($dados['registro']['tipo_id'] == '2') {
                        foreach ($dados['produto_id'] as $k => $valor) {
                            $componentes[] = array('produto_id' => $dados['registro']['id'], 'componente_id' => $valor, 'quantidade' => $dados['produto_quantidade'][$k]);
                        }
                    }
                    $this->Default_model->set_table_name('site_produtos_kits');
                    $this->Default_model->remover($dados['registro']['id'], 'produto_id');
                    foreach ($componentes as $componente) {
                        $this->Default_model->salvar($componente);
                    }
                }
                $dados['registro']['id'] = $ok;
                $path_destino_imagens = SERVERPATH . $this->path . $dados['registro']['id'] . '/';
                // Se existe procede, se não exibe erro!
                if (is_dir(SERVERPATH . $this->path . $dados['registro']['id']) || mkdir(SERVERPATH . $this->path . $dados['registro']['id'])) {
                    if ($ok) {
                        // Obtém as imagens do diretório temporário:
                        $imagens_temporarias = glob("{$this->path_temporario}{*.*}", GLOB_BRACE);
                        // percorre o array de img temp
                        if (is_array($imagens_temporarias) && count($imagens_temporarias) > 0) {
                            foreach ($imagens_temporarias as $img) {
                                // Redimensiona a imagem
                                $imagem = array('name' => generate_url(current(explode('.', basename($img)))) . '.' . MY_Utils::obter_extensao_imagem($img), 'tmp_name' => $img);
                                MY_Utils::redimensionar_imagem($imagem, $path_destino_imagens . $imagem['name'], 1280, 1280);
                                // Redimensiona a miniatura
                                $imagem_thumb = array('name' => generate_url(current(explode('.', basename($img)))) . '_thumb.' . MY_Utils::obter_extensao_imagem($img), 'tmp_name' => $img);
                                MY_Utils::redimensionar_imagem($imagem_thumb, $path_destino_imagens . $imagem_thumb['name'], 168, 168);
                                if (strlen($dados['registro']['foto_capa']) == 0) {
                                    $dados['registro']['foto_capa'] = $imagem_thumb['name'];
                                    $ok = $this->Produtos_model->salvar($dados['registro']);
                                }
                                // Apaga a imagem temporária
                                if (!unlink($img)) {
                                    $dados['erro'] = 'Não foi possível apagar a imagem temporária ' . $img . '.';
                                }
                                $cont++;
                            }
                        }
                        // Apaga o diretório temporário
                        if (!rmdir($this->path_temporario)) {
                            $dados['erro'] = 'Não foi possível apagar o diretório temporário.';
                        }
                        redirect('site/produtos');
                    } else {
                        $dados['erro'] = 'Não foi possível salvar o registro.';
                    }
                } else {
                    $dados['erro'] = 'Não foi possível criar o diretório destino das imagens.';
                }
            } else {
                if (rtrim(trim(strip_tags(validation_errors()))) == 'Unable to access an error message corresponding to your field name.') {
                    $dados['erro'] = 'O título deve ser único. Este título já está em uso.';
                } else {
                    $dados['erro'] = validation_errors();
                }
            }
        }
        $dados['path'] = $this->path;
        $dados['path_temporario'] = $this->path_temporario;
        // Definição dos campos
        // Codigo
        $campos = array();
        $campo = array();
        $campo['id'] = 'id';
        $campo['name'] = 'registro[id]';
        $campo['tamanho'] = 2;
        $campo['type'] = 'text';
        $campo['label'] = 'Código';
        $campo['placeholder'] = 'Código do produto';
        $campo['value'] = $dados['registro']['id'];
        if ((int) $dados['registro']['id'] == 0) {
            $campo['attrs'] = 'readonly';
        }
        $campos[] = $campo;
        // Tipo
        $campo = array();
        $tipos = array();
        $this->Default_model->set_table_name('site_produtos_tipos');
        $arr_aux = $this->Default_model->listar();
        foreach ($arr_aux as $tipo) {
            $tipos[$tipo['id']] = $tipo['titulo'];
        }
        $campo['id'] = 'tipo_id';
        $campo['name'] = 'registro[tipo_id]';
        $campo['tamanho'] = 2;
        $campo['type'] = 'dropdown';
        $campo['label'] = 'Tipo';
        $campo['placeholder'] = 'Tipo de produto';
        $campo['value'] = $dados['registro']['tipo_id'];
        $campo['options'] = $tipos;
        $campo['required'] = true;
        //$campo['attrs'] = 'readonly';
        //$campo['hidden'] = 'true';
        $campos[] = $campo;
        // Nome do produto
        $campo = array();
        $campo['id'] = 'titulo';
        $campo['name'] = 'registro[titulo]';
        $campo['tamanho'] = 5;
        $campo['type'] = 'text';
        $campo['label'] = 'Nome';
        $campo['placeholder'] = 'Nome do produto';
        $campo['value'] = $dados['registro']['titulo'];
        $campo['required'] = true;
        $campos[] = $campo;
        // Categoria
        $campo = array();
        $categorias = array();
        $arr_aux = $this->Produtos_model->listar_categorias();
        foreach ($arr_aux as $categoria) {
            $categorias[$categoria['id']] = $categoria['titulo'];
        }
        $campo['id'] = 'categoria_id';
        $campo['name'] = 'registro[categoria_id]';
        $campo['tamanho'] = 3;
        $campo['type'] = 'dropdown';
        $campo['label'] = 'Categoria';
        $campo['placeholder'] = 'Categoria do produto';
        $campo['value'] = $dados['registro']['categoria_id'];
        $campo['options'] = $categorias;
        $campo['required'] = true;
        $campos[] = $campo;
        // Marca do produto
        $campo = array();
        $campo['id'] = 'marca';
        $campo['name'] = 'registro[marca]';
        $campo['tamanho'] = 3;
        $campo['type'] = 'text';
        $campo['label'] = 'Marca';
        $campo['placeholder'] = 'Marca do produto';
        $campo['value'] = $dados['registro']['titulo'];
        $campo['autocomplete'] = 'autocomplete_marca';
        $campos[] = $campo;
        // Descrição do produto
        $campo = array();
        $campo['id'] = 'descricao';
        $campo['name'] = 'registro[descricao]';
        $campo['tamanho'] = 9;
        $campo['type'] = 'text';
        $campo['label'] = 'Descrição';
        $campo['placeholder'] = 'Descrição do produto';
        $campo['value'] = $dados['registro']['descricao'];
        $campos[] = $campo;
        // Valor do produto
        $campo = array();
        $campo['id'] = 'valor_compra';
        $campo['name'] = 'registro[valor_compra]';
        $campo['tamanho'] = 4;
        $campo['type'] = 'number';
        $campo['label'] = 'Valor de compra';
        $campo['placeholder'] = 'Valor de compra do produto';
        $campo['value'] = $dados['registro']['valor_compra'];
        $campo['attrs'] = 'pattern="^\\d+(\\.|\\,)\\d{2}$" step="any"';
        $campo['required'] = true;
        $campo['pre'] = '<span class="input-group-addon">R$</span>';
        $campos[] = $campo;
        // Promoção
        $campo = array();
        $campo['id'] = 'promocao';
        $campo['name'] = 'registro[promocao]';
        $campo['tamanho'] = 2;
        $campo['type'] = 'dropdown';
        $campo['label'] = 'Promoção';
        $campo['placeholder'] = 'Produto em promoção';
        $campo['value'] = $dados['registro']['promocao'];
        $campo['options'] = array('0' => 'Não', '1' => 'Sim');
        $campos[] = $campo;
        // Vigencia da Promoção
        $campo = array();
        $campo['id'] = 'promocao_inicio';
        $campo['name'] = 'registro[promocao_inicio]';
        $campo['tamanho'] = 3;
        $campo['type'] = 'date';
        $campo['label'] = 'Promoção de';
        $campo['placeholder'] = 'Produto em promoção a partir de';
        $campo['value'] = $dados['registro']['promocao_inicio'];
        if ((int) $dados['registro']['promocao'] != 1) {
            $campo['attrs'] = 'readonly display';
        }
        $campos[] = $campo;
        // Vigencia da Promoção
        $campo = array();
        $campo['id'] = 'promocao_fim';
        $campo['name'] = 'registro[promocao_fim]';
        $campo['tamanho'] = 3;
        $campo['type'] = 'date';
        $campo['label'] = 'Promoção até';
        $campo['placeholder'] = 'Produto em promoção até';
        $campo['value'] = $dados['registro']['promocao_fim'];
        if ((int) $dados['registro']['promocao'] != 1) {
            $campo['attrs'] = 'readonly disabled';
        }
        $campos[] = $campo;
        // Valor de venda minimo do produto
        $campo = array();
        $campo['id'] = 'valor_venda_minimo';
        $campo['name'] = 'registro[valor_venda_minimo]';
        $campo['tamanho'] = 4;
        $campo['type'] = 'number';
        $campo['label'] = 'Valor mínimo p/ venda';
        $campo['placeholder'] = 'Valor de venda mínimo do produto';
        $campo['value'] = $dados['registro']['valor_venda_minimo'];
        $campo['attrs'] = 'pattern="^\\d+(\\.|\\,)\\d{2}$" step="any"';
        $campo['required'] = true;
        $campo['pre'] = '<span class="input-group-addon">R$</span>';
        $campos[] = $campo;
        // Valor de venda do produto
        $campo = array();
        $campo['id'] = 'valor_venda';
        $campo['name'] = 'registro[valor_venda]';
        $campo['tamanho'] = 4;
        $campo['type'] = 'number';
        $campo['label'] = 'Valor venda atual';
        $campo['placeholder'] = 'Valor de venda do produto';
        $campo['value'] = $dados['registro']['valor_venda'];
        $campo['attrs'] = 'pattern="^\\d+(\\.|\\,)\\d{2}$" step="any"';
        $campo['required'] = true;
        $campo['pre'] = '<span class="input-group-addon">R$</span>';
        $campos[] = $campo;
        // Ativo
        $campo = array();
        $campo['id'] = 'ativo';
        $campo['name'] = 'registro[ativo]';
        $campo['tamanho'] = 4;
        $campo['type'] = 'dropdown';
        $campo['label'] = 'Ativo';
        $campo['placeholder'] = 'Situação do produto';
        $campo['value'] = $dados['registro']['ativo'];
        $campo['options'] = array('1' => 'Sim', '0' => 'Não');
        $campo['required'] = true;
        $campos[] = $campo;
        // Fotos do produto
        /*
        $campo = array();
        $campo['id'] = 'imagens';
        $campo['tamanho'] = 12;
        $campo['type'] = 'multi_upload';
        $campo['foto_capa'] = true;
        $campo['value'] = $campo['foto_capa'];
        $campos[] = $campo;
        */
        // Produtos
        $campo = array();
        $campo['id'] = 'produtos';
        $campo['name'] = 'registro[produtos]';
        $campo['tamanho'] = 12;
        $campo['type'] = 'subdetail';
        $campo['label'] = 'Produtos';
        $campo['colunas'] = array('id' => array('titulo' => 'Código', 'attr' => array('data-identifier="true"', 'data-type="numeric"', 'data-order="desc"', 'width="10%"')), 'titulo' => array('titulo' => 'Nome', 'attr' => array('width="50%"')), 'valor_compra' => array('titulo' => 'Valor compra', 'attr' => array('data-type="numeric"', 'width="10%"')), 'valor_venda_minimo' => array('titulo' => 'Valor venda mínimo', 'attr' => array('data-type="numeric"', 'width="10%"')), 'valor_venda' => array('titulo' => 'Valor venda atual', 'attr' => array('data-type="numeric"', 'width="10%"')), 'quantidade' => array('titulo' => 'Quantidade', 'attr' => array('data-type="numeric"', 'width="10%"')), 'acoes' => array('titulo' => 'Ações', 'attr' => array('data-formatter="commands"', 'data-sortable="false"', 'width="10%"')));
        $campo['colunas_editaveis'] = array('quantidade');
        $campo['json'] = 'ajax_listar_produtos';
        $componentes = array();
        if ($dados['registro']['id']) {
            $componentes = $this->Produtos_model->kit_obter_componentes($dados['registro']['id']);
        }
        $cols = array();
        if ($componentes && is_array($componentes) && count($componentes) > 0) {
            foreach ($componentes as $componente) {
                $prod = $this->Produtos_model->obter($componente['componente_id']);
                $coluna = array();
                $coluna[] = '<td>' . $prod['id'] . '<input type="hidden" name="produto_id[]" value="' . $prod['id'] . '"/></td>';
                $coluna[] = '<td>' . $prod['titulo'] . '</td>';
                $coluna[] = '<td>R$ ' . str_replace('.', ',', $prod['valor_compra']) . '</td>';
                $coluna[] = '<td>R$ ' . str_replace('.', ',', $prod['valor_venda_minimo']) . '</td>';
                $coluna[] = '<td>R$ ' . str_replace('.', ',', $prod['valor_venda']) . '</td>';
                $coluna[] = '<td><input type="number" name="produto_quantidade[]" pattern="^\\d+(\\.|\\,)\\d{2}$" step="any" value="' . $componente['quantidade'] . '" class="input_quantidade"/></td>';
                $coluna[] = '<td><button class="btn btn-danger bt_remover" title="Remover"><i class="fa fa-trash"></i></button></td>';
                $cols[] = $coluna;
            }
        }
        $campo['value'] = $cols;
        $campo['required'] = true;
        if ($dados['registro']['tipo_id'] != '2') {
            $campo['hidden'] = true;
        }
        $campos[] = $campo;
        // Campos do formulário
        $dados['campos'] = $campos;
        // Adiciona JS
        $dados['custom_js'] = <<<HTML
\$('body').on('change', '#tipo_id', function()
{
  if ( \$(this).val() == 1 )
  {
    \$('#campo_produtos').hide(100);
  }
  else
  {
    \$('#campo_produtos').show(100);
  }
});

\$('body').on('change', '#promocao', function()
{
  if ( \$(this).val() == 1 )
  {
    // habilita campo de
    \$('#promocao_inicio').removeAttr('readonly');
    \$('#promocao_inicio').removeAttr('disabled');
    \$(\$('#promocao_inicio').parent().children()[0]).append('<span class="required">*</span>')
    // habilita campo ate
    \$('#promocao_fim').removeAttr('readonly');
    \$('#promocao_fim').removeAttr('disabled');
    \$(\$('#promocao_fim').parent().children()[0]).append('<span class="required">*</span>')
  }
  else
  {
    // desabilita campo de
    \$('#promocao_inicio').attr('readonly', true);
    \$('#promocao_inicio').attr('disabled', true);
    \$(\$(\$('#promocao_inicio').parent().children()[0]).children()[0]).remove()
    // desabilita campo ate
    \$('#promocao_fim').attr('readonly', true);
    \$('#promocao_fim').attr('disabled', true);
    \$(\$(\$('#promocao_fim').parent().children()[0]).children()[0]).remove()
  }
});

\$('#bt_add_produto').click(function(event)
{
    event.preventDefault();

    \$('body').append('<div id="add_produto_subdetail" class="modal">\\
    <div class="modal-dialog">\\
        <div class="modal-content">\\
            <div class="modal-header">\\
                <button type="button" class="close" data-dismiss="modal" aria-label="Fechar">\\
                <span aria-hidden="true">×</span></button>\\
                <h4 class="modal-title">Adicionar componente do kit</h4>\\
            </div>\\
            <div class="modal-body">\\
                <div class="input-group">\\
<span class="input-group-addon"><i class="fa fa-search"></i></span>\\
<input type="text" id="busca_produto" class="form-control" name="busca[produto]" placeholder="Nome do produto" title="Pesquise aqui pelo nome do produto" value="" autofocus>\\
  </div>\\
                <br>\\
                <table class="zebra">\\
                    <thead>\\
                        <tr>\\
                            <th style="width:10px">Código</th>\\
                            <th style="width:50%">Nome</th>\\
                            <th style="width:10%">Valor compra</th>\\
                            <th style="width:10%">Valor venda mínimo</th>\\
                            <th style="width:10%">Valor venda atual</th>\\
                            <th style="width:10%">Açoes</th>\\
                        </tr>\\
                    </thead>\\
                    <tbody id="subdetail_produtos_adicionar">\\
                    </tbody>\\
                </table>\\
            </div>\\
            <div class="modal-footer">\\
                <button type="button" class="btn btn-danger pull-right" data-dismiss="modal">Fechar</button>\\
            </div>\\
        </div>\\
    </div>\\
</div>');
    \$('#add_produto_subdetail.modal').show(100);

    var ajax_interval = 0;
    \$('body').on('keyup', '#busca_produto', function()
    {
        var busca = \$(this).val();
        //loading
        \$('#subdetail_produtos_adicionar').html('<tr><td colspan="6"><div style="width:100%;padding:25px 0px;text-align:center"><i class="glyphicon glyphicon-refresh glyphicon-refresh-animate"></i></div></td></tr>');
        if ( busca.length >= 3 )
        {
            var ids = new Array();

            // começa a contar o tempo
            clearInterval(ajax_interval);

            // 500ms após o usuário parar de digitar a função é chamada  
            ajax_interval = window.setTimeout(function()
            {
                ids.push('%id%');
                \$('#subdetail_produtos td input[type="hidden"]').each(function(index, element)
                {
                    ids.push(\$(element).val());
                });

                \$.ajax(
                {
                    type: 'POST',
                    url: '%url_ajax%',
                    data: {busca:busca,ids:ids},
                    success: function(data)
                    {
                        \$('#subdetail_produtos_adicionar').html(data);
                    }
                });
            }, 500);
        }
        else
        {
            \$('#subdetail_produtos_adicionar').html('<tr><td colspan="6">Digite pelo menos 3 caracteres.</td></tr>');
        }
    });

    \$('#busca_produto').focus();
});

var primeiraVez = true;
\$('body').on('click', '.bt_add', function()
{
    // Obtém os valores
    var _valor_compra = +\$('#valor_compra').val();
    var _valor_venda_minimo = +\$('#valor_venda_minimo').val();
    var _valor_venda = +\$('#valor_venda').val();
    if ( primeiraVez )
    {
        primeiraVez = false;

        // Zera
        _valor_compra = 0;
        _valor_venda_minimo = 0;
        _valor_venda = 0;
    }

    var id = \$(\$(this).parent().parent().children()[0]).html().trim();
    var titulo = \$(\$(this).parent().parent().children()[1]).html().trim();
    var valor_compra = \$(\$(this).parent().parent().children()[2]).html().trim();
    var valor_venda_minimo = \$(\$(this).parent().parent().children()[3]).html().trim();
    var valor_venda = \$(\$(this).parent().parent().children()[4]).html().trim();

    \$('#subdetail_produtos').append('<tr>\\
        <td>'+id+'<input type="hidden" name="produto_id[]" value="'+id+'"/></td>\\
        <td>'+titulo+'</td>\\
        <td>'+valor_compra+'</td>\\
        <td>'+valor_venda_minimo+'</td>\\
        <td>'+valor_venda+'</td>\\
        <td><input type="number" name="produto_quantidade[]" pattern="^\\d+(\\.|\\,)\\d{2}\$" step="any" class="input_quantidade" value="1"/>\\
</td>\\
        <td><button class="btn btn-danger bt_remover" title="Remover"><i class="fa fa-trash"></i></button></td>\\
    </tr>');

    \$(this).parent().parent().remove();
    //\$('#add_produto_subdetail .modal-footer button').click();

    // Atualiza os valores
    \$('#valor_compra').val((_valor_compra + +valor_compra.replace('R\$ ', '').replace(',', '.')).toFixed(2));
    \$('#valor_venda_minimo').val((_valor_venda_minimo + +valor_venda_minimo.replace('R\$ ', '').replace(',', '.')).toFixed(2));
    \$('#valor_venda').val((_valor_venda + +valor_venda.replace('R\$ ', '').replace(',', '.')).toFixed(2));
});

\$('body').on('click', '.bt_remover', function(event)
{
    event.preventDefault();
    \$(this).parent().parent().remove();

    // Dados do produto
    var valor_compra = \$(\$(this).parent().parent().children()[2]).html().trim();
    var valor_venda_minimo = \$(\$(this).parent().parent().children()[3]).html().trim();
    var valor_venda = \$(\$(this).parent().parent().children()[4]).html().trim();

    // Valores atuais
    var _valor_compra = \$('#valor_compra').val();
    var _valor_venda_minimo = \$('#valor_venda_minimo').val();
    var _valor_venda = \$('#valor_venda').val();

    // Atualiza os valores
    \$('#valor_compra').val((_valor_compra - +valor_compra.replace('R\$ ', '').replace(',', '.')).toFixed(2));
    \$('#valor_venda_minimo').val((_valor_venda_minimo - +valor_venda_minimo.replace('R\$ ', '').replace(',', '.')).toFixed(2));
    \$('#valor_venda').val((_valor_venda - +valor_venda.replace('R\$ ', '').replace(',', '.')).toFixed(2));
});

\$('body').on('keyup', '.input_quantidade', function(event)
{
    // Dados do produto
    var valor_compra = \$(\$(this).parent().parent().children()[2]).html().trim();
    var valor_venda_minimo = \$(\$(this).parent().parent().children()[3]).html().trim();
    var valor_venda = \$(\$(this).parent().parent().children()[4]).html().trim();
console.log(\$(this));

    // Valores atuais
    var _valor_compra = \$('#valor_compra').val();
    var _valor_venda_minimo = \$('#valor_venda_minimo').val();
    var _valor_venda = \$('#valor_venda').val();

    // Atualiza os valores
    \$('#valor_compra').val((_valor_compra + +valor_compra.replace('R\$ ', '').replace(',', '.')).toFixed(2));
    \$('#valor_venda_minimo').val((_valor_venda_minimo + +valor_venda_minimo.replace('R\$ ', '').replace(',', '.')).toFixed(2));
    \$('#valor_venda').val((_valor_venda + +valor_venda.replace('R\$ ', '').replace(',', '.')).toFixed(2));
});

\$('body').on('change', '.input_quantidade', function(event)
{
    // Dados do produto
    var valor_compra = \$(\$(this).parent().parent().children()[2]).html().trim();
    var valor_venda_minimo = \$(\$(this).parent().parent().children()[3]).html().trim();
    var valor_venda = \$(\$(this).parent().parent().children()[4]).html().trim();
console.log(\$(this));

    // Valores atuais
    var _valor_compra = \$('#valor_compra').val();
    var _valor_venda_minimo = \$('#valor_venda_minimo').val();
    var _valor_venda = \$('#valor_venda').val();

    // Atualiza os valores
    \$('#valor_compra').val((_valor_compra + +valor_compra.replace('R\$ ', '').replace(',', '.')).toFixed(2));
    \$('#valor_venda_minimo').val((_valor_venda_minimo + +valor_venda_minimo.replace('R\$ ', '').replace(',', '.')).toFixed(2));
    \$('#valor_venda').val((_valor_venda + +valor_venda.replace('R\$ ', '').replace(',', '.')).toFixed(2));
});

\$('#titulo').focus();
HTML;
        $dados['custom_js'] = str_replace('%id%', $id, $dados['custom_js']);
        $dados['custom_js'] = str_replace('%url_ajax%', base_url('site/produtos/ajax_listar_produtos'), $dados['custom_js']);
        $dados['custom_js'] = str_replace('%url_ajax_precos%', base_url('site/produtos/ajax_precos'), $dados['custom_js']);
        parent::load_view($dados);
    }
Example #9
0
    function editar($id = null)
    {
        // Array de dados para a view
        $dados = array();
        // Carrega a model
        $this->load->model('Agenda_model');
        // Obtém os dados
        if ($this->input->post('submit')) {
            // se tem post, obtém do formulário
            $dados = $this->input->post();
        } elseif ((int) $id > 0) {
            // se tem id, obtém da base
            $dados['registro'] = $this->Produtos_model->obter($id);
        }
        // Se tem post, salva os dados
        if ($this->input->post('submit')) {
            // Validação
            $this->form_validation->set_rules('registro[titulo]', 'Título', 'trim|required');
            $this->form_validation->set_rules('registro[descricao]', 'Descrição', 'trim|required');
            $this->form_validation->set_rules('registro[cliente]', 'Cliente', 'trim|required');
            $this->form_validation->set_rules('registro[data]', 'Data', 'trim|required');
            $this->form_validation->set_rules('registro[hora]', 'Hora', 'trim|required');
            if ($this->form_validation->run()) {
                $dados['registro']['link'] = str_replace('-', '_', MY_Utils::removeSpecialChars(strtolower(utf8_decode($dados['agenda']['titulo']))));
                $dados['registro']['link'] = preg_replace('/_{2,}/', '_', $dados['agenda']['link']);
                $ok = $this->Agenda_model->salvar($dados['agenda']);
                $dados['agenda']['id'] = $ok;
            } else {
                if (rtrim(trim(strip_tags(validation_errors()))) == 'Unable to access an error message corresponding to your field name.') {
                    $dados['erro'] = 'O título deve ser único. Este título já está em uso.';
                } else {
                    $dados['erro'] = validation_errors();
                }
            }
        }
        // Definição dos campos
        // Codigo
        $campos = array();
        $campo = array();
        $campo['id'] = 'id';
        $campo['tamanho'] = 2;
        $campo['type'] = 'text';
        $campo['label'] = 'Código';
        $campo['placeholder'] = 'Código';
        $campo['value'] = $registro['id'];
        if ((int) $registro['id'] == 0) {
            $campo['attrs'] = 'disabled readonly';
        }
        $campos[] = $campo;
        // Descrição
        $campo = array();
        $campo['id'] = 'descricao';
        $campo['tamanho'] = 8;
        $campo['type'] = 'text';
        $campo['label'] = 'Descrição';
        $campo['placeholder'] = 'Descrição';
        $campo['value'] = $registro['descricao'];
        $campos[] = $campo;
        // Cidade
        $campo = array();
        $cidades = array();
        $arr_aux = $this->Cidades_model->listar();
        foreach ($arr_aux as $cidade) {
            $cidades[$cidade['id']] = $cidade['nome'];
        }
        $campo['id'] = 'cidade_id';
        $campo['tamanho'] = 2;
        $campo['type'] = 'dropdown';
        $campo['label'] = 'Cidade';
        $campo['placeholder'] = 'Cidade';
        $campo['value'] = $registro['cidade_id'];
        $campo['options'] = $cidades;
        $campos[] = $campo;
        // Cliente
        $campo = array();
        $cidades = array();
        $arr_aux = $this->Clientes_model->listar();
        foreach ($arr_aux as $cliente) {
            $clientes[$cliente['id']] = $cliente['nome'];
        }
        $campo['id'] = 'cliente_id';
        $campo['tamanho'] = 5;
        $campo['type'] = 'dropdown';
        $campo['label'] = 'Cliente';
        $campo['placeholder'] = 'Cliente';
        $campo['value'] = $registro['cliente_id'];
        $campo['options'] = $clientes;
        $campos[] = $campo;
        // Data
        $campo = array();
        $campo['id'] = 'data';
        $campo['tamanho'] = 3;
        $campo['type'] = 'date';
        $campo['label'] = 'Data';
        $campo['placeholder'] = 'Data';
        $campo['value'] = $registro['data'];
        $campos[] = $campo;
        // Hora
        $campo = array();
        $campo['id'] = 'hora';
        $campo['tamanho'] = 2;
        $campo['label'] = 'Hora';
        $campo['placeholder'] = 'Hora';
        $campo['value'] = $registro['hora'];
        $campo['class'] = 'timepicker';
        $campo['type'] = 'text';
        $campo['name'] = 'hora';
        $campo['pos'] = <<<HTML
<div class="input-group-addon"><i class="fa fa-clock-o"></i></div>
HTML;
        $campos[] = $campo;
        // Concluido
        $campo = array();
        $campo['id'] = 'concluido';
        $campo['tamanho'] = 2;
        $campo['type'] = 'dropdown';
        $campo['label'] = 'Concluído';
        $campo['placeholder'] = 'Concluído';
        $campo['value'] = $registro['ativo'];
        $campo['options'] = array('1' => 'Sim', '0' => 'Não');
        $campos[] = $campo;
        $dados['campos'] = $campos;
        $dados['titulo'] = $this->titulo;
        // Adiciona JS
        $dados['custom_js'] = <<<JS
//Timepicker
\$('#hora').timepicker(
{
    showInputs: false
});
JS;
        parent::load_view($dados);
    }
Example #10
0
 /**
  * Lista os registros na tela
  */
 function listar($dados = array())
 {
     // Se não tiver definido para exibir a coluna ordem, remove-a
     if (!$this->exibir_coluna_ordem) {
         unset($this->colunas_default[self::COLUNA_ORDEM]);
     }
     // Define a tabela
     $this->default_model->set_table_name($this->table_name);
     if (strlen($dados['function']) == 0) {
         $dados['function'] = 'listar';
     }
     // Define a página atual
     $dados['pagina_atual'] = $dados['pagina_atual'] ? $dados['pagina_atual'] : $_POST['pagina_atual'];
     // $dados ou $_POST
     $dados['pagina_atual'] = $dados['pagina_atual'] ? $dados['pagina_atual'] : $this->uri->segment(4);
     // $dados ou URI
     $dados['pagina_atual'] = $dados['pagina_atual'] ? $dados['pagina_atual'] : 1;
     // $dados ou 1
     // Caso tenha algum filtro, troca para a primeira página
     if ($this->busca) {
         $dados['pagina_atual'] = 1;
     }
     $this->pagina_atual = $dados['pagina_atual'];
     $dados['filtro'] = $_POST['filtro'];
     $dados['params'] = $_POST['params'];
     $params = MY_Utils::deserializar_dados_jquery($_POST['params']);
     // Organiza os dados recebidos via POST
     $filtros = (array) $this->processa_filtros($params);
     $dados['filtros'] = $filtros;
     // Deixa os filtros prontos pro SQL
     $this->filtros = $this->organiza_filtros($dados['filtros']);
     // Se for listagem, verifica se tem hierarquia, se for busca, remove hierarquia
     if ($this->tem_hierarquia && count($filtros) == 0) {
         $this->where[] = 'parent_id IS NULL';
     } else {
         $this->tem_hierarquia = false;
         unset($this->colunas_default[self::COLUNA_HIERARQUIA]);
     }
     // Define o título da tela
     $dados['titulo'] = $this->titulo;
     // Registros que irão ser exibidos na "grid"
     $dados['registros'] = $this->registros;
     // Colunas da tabela:
     $colunas = $this->colunas + $this->colunas_default;
     // array_merge(), mantendo as chaves numéricas
     ksort($colunas);
     // reordena
     $this->colunas = $colunas;
     // Ordem (quando clica no titulo de uma coluna) (listagem)
     $ordem = $_POST['ordem'];
     $this->ordem = $this->organiza_ordem($ordem);
     $dados['ordem'] = $this->ordem;
     $dados['params'] = $_POST['params'];
     $params = MY_Utils::deserializar_dados_jquery($_POST['params']);
     // Ordem (coluna na base de dados)
     $ordens = $this->processa_ordens($params);
     if (is_array($ordens) && count($ordens) > 0) {
         $dados['info'] = $this->altera_ordens($ordens);
     }
     /*
      * Filtro (busca/pesquisa)
      */
     $this->where = array_merge((array) $this->filtros, (array) $this->where);
     if (!$this->desabilitar_paginacao) {
         // Obtém o total de registros
         $this->total_de_registros = $this->default_model->obter_total($this->where);
     }
     $dados['total_de_registros'] = $this->total_de_registros;
     $dados['registros_por_pagina'] = $this->registros_por_pagina;
     // (total de páginas - página atual) > 0
     $dados['tem_mais_paginas'] = $this->total_de_registros / $this->registros_por_pagina - $this->pagina_atual > 0;
     // Ações
     ksort($this->acoes);
     $dados['acoes'] = $this->acoes;
     // Where
     $dados['where'] = $this->where;
     // Colunas
     $dados['colunas'] = $this->colunas;
     /*
      * Dados
      */
     // Obtém as colunas para o SQL
     $cols = array();
     foreach ($colunas as $coluna) {
         if ($coluna['coluna']) {
             $col = $coluna['coluna_sql'] ? $coluna['coluna_sql'] . ' AS ' . $coluna['coluna'] : $coluna['coluna'];
             if (strpos($col, 'TO_CHAR') !== false) {
                 $col = str_replace('TO_CHAR', 'DATE_FORMAT', $col);
                 $col = str_replace('DD/MM/YYYY', '%e/%m/%Y', $col);
                 $col = str_replace('HH24:MI:SS', '%H:%i:%s', $col);
             }
             $cols[] = $col;
         }
     }
     // Obtém os dados para popular a Grid
     if (!isset($this->registros)) {
         $this->registros = $this->default_model->listar(array('columns' => $cols, 'order_by' => $this->ordem, 'limit' => $this->registros_por_pagina, 'offset' => ($this->pagina_atual - 1) * $this->registros_por_pagina, 'where' => $this->where));
     }
     $dados['registros'] = $this->registros;
     // Fim da parte dos dados da grid
     // Define o modulo
     $dados['module'] = $this->module;
     // Define o controller
     $dados['controller'] = $this->controller;
     // Define botões extras antes do botão de busca
     $dados['botoes'] = $this->botoes;
     // Se tem hierarquia
     $dados['tem_hierarquia'] = $this->tem_hierarquia;
     // Desabilita paginação
     $dados['desabilitar_paginacao'] = $this->desabilitar_paginacao;
     // Desabilita a busca
     $dados['desabilitar_buscar'] = $this->desabilitar_buscar;
     // Desabilita a ordenacao
     $dados['desabilitar_ordenacao'] = $this->desabilitar_ordenacao;
     // Desabilita botão inserir
     $dados['desabilitar_inserir'] = $this->desabilitar_inserir;
     // Função inserir
     $dados['funcao_inserir'] = $this->funcao_inserir;
     // Função editar
     $dados['funcao_editar'] = $this->funcao_editar;
     // Função remover
     $dados['funcao_remover'] = $this->funcao_remover;
     // Função ativar_inativar
     $dados['funcao_ativar_inativar'] = $this->funcao_ativar_inativar;
     // View da linha
     $dados['view_linha'] = $this->view_linha;
     $this->load->view($this->view, $dados);
 }
Example #11
0
 function valida_campos($requeridos)
 {
     $erros = array();
     // Se tem o parâmetro captcha, e for "true", valida o captcha
     if (isset($this->dados['recaptcha_response_field'])) {
         if (!$this->my_captcha->validar()) {
             $erros[] = 'Preencha o corretamente o Captcha.';
         }
     }
     // Valida os campos
     $requeridos = (array) explode(',', $requeridos);
     foreach ($requeridos as $k => $campo) {
         $requeridos[$k] = MY_Utils::removeSpecialChars(strtolower($campo));
     }
     foreach ($this->dados as $campo => $valor) {
         $valor_do_campo = MY_Utils::removeSpecialChars(strtolower(trim($valor)), true);
         if (strlen($valor_do_campo) == 0 || $valor_do_campo == $campo) {
             if (in_array($campo, $requeridos)) {
                 $label = ucfirst(str_replace('_', ' ', $campo));
                 $erros[] = 'O campo ' . $label . ' é de preenchimento obrigatório.';
             } elseif (MY_Utils::removeSpecialChars(strtolower($campo)) == 'email') {
                 vdie($email);
             } else {
                 $this->dados[$campo] = '';
             }
         }
     }
     return $erros;
 }
Example #12
0
 function baixar($id)
 {
     if ($id) {
         $modulo = $this->Modulos_model->obter($id);
         // Verifica se já existe o código fonte
         $arr = explode('/', $modulo['path']);
         if (count($arr) == 1) {
             if (is_file(APPPATH . 'controllers/' . $arr[0] . '.php')) {
                 $zipfile = '/tmp/' . MY_Utils::removeSpecialChars($modulo['titulo']) . '.zip';
                 // cria zip, adiciona arquivos...
                 $zip = new ZipArchive();
                 if ($zip->open($zipfile, ZIPARCHIVE::CREATE) !== TRUE) {
                     exit("Não foi possível criar .zip: <{$zipfile}>\n");
                 }
                 // Lê os arquivos e armazena em um array
                 $filenames = ler_diretorio($directory);
                 foreach ($filenames as $filename) {
                     $file = $filename;
                     $arquivo = substr($file, -3);
                     $zip->addFile($filename, $filename);
                 }
                 $zip->close();
             }
         } elseif (count($arr) == 2) {
             if (is_file(APPPATH . 'modules/' . $arr[0] . '/controllers/' . $arr[1] . '.php')) {
                 $dir = APPPATH . 'modules/' . $arr[0] . '/';
                 $filename = MY_Utils::removeSpecialChars($modulo['titulo']) . '.zip';
                 $zipfile = '/tmp/' . $filename;
                 // Lê os arquivos e comprime
                 comprimir_diretorio($dir, $zipfile);
                 if (!is_file($zipfile)) {
                     exit("Não foi possível criar .zip: <{$zipfile}>\n");
                 } else {
                     header("Pragma: public");
                     header("Expires: 0");
                     header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
                     header("Cache-Control: public");
                     header("Content-Description: File Transfer");
                     header("Content-type: application/octet-stream");
                     header("Content-Disposition: attachment; filename=\"" . $filename . "\"");
                     header("Content-Transfer-Encoding: binary");
                     header("Content-Length: " . filesize($zipfile));
                     readfile($zipfile);
                     unlink($zipfile);
                     return;
                 }
             }
         }
     }
     //redirect('modulos');
 }
Example #13
0
 function editar($id = null)
 {
     $img_banner = $_FILES['img_banner'];
     // Se for edição, obtém os dados "antigos"
     if (strlen($id) > 0) {
         $banner = $this->Banners_model->obter($id);
         // Catrgoria
         $categoria = $this->Banners_model->obter_categoria($banner['categoria_id']);
     }
     // Coluna ordem
     if (strlen($banner['ordem']) == 0) {
         // Obtém a maior ordem e soma 10
         $max_ordem = $this->Banners_model->max_ordem($banner['categoria_id']);
         $banner['ordem'] = $max_ordem + 10;
     }
     // Se não for submit
     if (!$this->input->post('submit')) {
         // Se não tem ID (inserção): obtém o próximo id da sequence
         $banner['id'] = is_null($banner['id']) ? $this->Banners_model->proximo_id() : $banner['id'];
     }
     // Se tem post, valida os dados
     if ($this->input->post('submit')) {
         $dados = $this->input->post();
         $banner = $this->input->post('banner');
         // Catrgoria
         $categoria = $this->Banners_model->obter_categoria($banner['categoria_id']);
         // Quem postou o banner
         $banner['usuario_id'] = (int) $this->session->userdata('usuario_id');
         // Validação
         $this->form_validation->set_rules('banner[categoria_id]', 'Categoria', 'trim|required');
         $this->form_validation->set_rules('banner[ativo]', 'Ativo', 'trim|required');
         // Se não tem erros
         if ($this->form_validation->run()) {
             $ok = false;
             if (is_dir($this->path . $banner['categoria_id']) || mkdir($this->path . $banner['categoria_id'])) {
                 // Banner OLD
                 $banner_old = $this->Banners_model->obter($banner['id']);
                 // Se foi enviado um banner, armazena-o
                 if (strlen($img_banner['tmp_name']) > 0) {
                     $imagem = array('name' => generate_url(current(explode('.', $img_banner['name']))) . '.jpg', 'tmp_name' => $img_banner['tmp_name']);
                     @unlink($this->path . $banner_old['img_banner']);
                     // Redimensiona a imagem
                     $ok = MY_Utils::redimensionar_imagem($imagem, $this->path . $banner['categoria_id'] . '/' . $imagem['name'], $categoria['largura'], $categoria['altura']);
                     if (strlen($categoria['largura_miniatura']) > 0 && strlen($categoria['altura_miniatura']) > 0) {
                         $ok = MY_Utils::redimensionar_imagem($imagem, $this->path . $banner['categoria_id'] . '/thumb_' . $imagem['name'], $categoria['largura_miniatura'], $categoria['altura_miniatura'], false);
                         if ($ok) {
                             $banner['img_thumb'] = $banner['categoria_id'] . '/thumb_' . $imagem['name'];
                         }
                     }
                     // Apaga a imagem temporária
                     @unlink($imagem['tmp_name']);
                     if ($ok) {
                         $banner['img_banner'] = $banner['categoria_id'] . '/' . $imagem['name'];
                     }
                 } else {
                     if (strlen($banner_old['img_banner']) > 0) {
                         $banner['img_banner'] = $banner_old['img_banner'];
                     }
                     if ($banner_old['categoria_id'] != $banner['categoria_id'] && is_file($this->path . $banner_old['img_banner'])) {
                         // Copia banner
                         copy($this->path . $banner_old['img_banner'], $this->path . $banner['categoria_id'] . '/' . $banner['img_banner'] . '.jpg');
                         unlink($this->path . $banner_old['img_banner']);
                         $banner['img_banner'] = $banner['categoria_id'] . '/' . $banner['img_banner'] . '.jpg';
                     }
                 }
                 if (strlen($banner['img_banner']) > 0) {
                     list($img_width, $img_height) = getImageSize($this->path . $banner['img_banner']);
                     $voltar_para_cortar = false;
                     if ($dados['imageW']) {
                         $targ_w = $categoria['largura'] > 0 ? $categoria['largura'] : $img_width;
                         $targ_h = $categoria['altura'] > 0 ? $categoria['altura'] : $img_height;
                         $jpeg_quality = 72;
                         $src = $this->path . $banner['img_banner'];
                         $img_r = imageCreateFromJpeg($src);
                         $dst_r = imageCreateTrueColor($targ_w, $targ_h);
                         $ok = imageCopyResampled($dst_r, $img_r, 0, 0, $dados['imageX'], $dados['imageY'], $targ_w, $targ_h, $dados['imageW'], $dados['imageH']);
                         $ok = imagejpeg($dst_r, $src, $jpeg_quality);
                     } elseif ($categoria['largura'] > 0 || $categoria['largura'] > 0) {
                         if ($categoria['largura'] != $img_width || $categoria['altura'] != $img_height) {
                             $voltar_para_cortar = true;
                         }
                     }
                 } else {
                     $dados['erros'][] = 'Você precisa enviar ao menos uma imagem.';
                 }
                 // Salva o registro
                 $id = $this->Banners_model->salvar($banner);
                 if ($id) {
                     if ($voltar_para_cortar) {
                         redirect('banners/editar/' . $id);
                     } else {
                         redirect('banners');
                     }
                 } else {
                     $dados['erros'][] = 'Desculpe, mas não foi possível salvar o registro. Tente novamente.';
                 }
             } else {
                 $dados['erros'][] = 'Desculpe, mas não foi possível criar pasta para armazenar a imagem. Tente novamente.';
             }
         } else {
             $dados['erros'][] = 'Desculpe, mas não foi possível inserir o registo.';
             $dados['erros'][] = validation_errors();
         }
     }
     $dados['banner'] = $banner;
     $dados['categoria'] = $categoria;
     $dados['categorias'] = $this->Banners_model->listar_categorias($this->site_id);
     $dados['site_id'] = $this->site_id;
     $dados['path'] = $this->path;
     $dados['site_dir'] = $this->session->userdata('site_dir');
     $this->load->view('banners_editar', $dados);
 }