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