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); }
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); }
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; }
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); }
/** * 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; }
/** * 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 ;) }
/** * 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; }
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); }
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); }
/** * 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); }
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; }
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'); }
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); }