--- tags: [projeto, intranet, sessao, social-media, bugfix, deploy] date: 2026-04-15 --- # Sessao 15/04/2026 - Social Media Correcoes Completas ## Resumo Sessao focada em corrigir bugs criticos no modulo Social Media: status incorretos, mensagens duplicadas para clientes, area do cliente sem planejamentos, modais inconsistentes e chat nao integrado. --- ## Bug 1: Modal "Aprovado" quando NAO foi aprovado - `renderModalPostAceito()` mostrava "Publicacao aprovada pelo cliente" com badge "Aprovado" verde - `status='aceito'` significa apenas planejamento aprovado, NAO publicacao - **Fix**: Titulo alterado para "Planejamento aprovado - inserir conteudo", badge "Planj. Aprovado" amarelo - Label do calendario `stMap.aceito` mudou de "Aprovado" para "Planj. Aprovado" - Arquivo: `app/Views/social_media/index.php` ## Bug 2: Crava Artes - cronograma aprovado mas posts rascunho - Cronograma #9 tinha `status='aprovado'` mas 5 posts com `status='rascunho'` - **Causa raiz**: `cronogramaSalvarCompleto()` adicionava novos posts como rascunho em cronograma ja aprovado sem resetar o status - **Fix no codigo**: Se cronograma existente esta `aprovado`, volta para `enviado` para o cliente aprovar os novos itens - **Fix no banco**: Cronograma #9 revertido para `status='enviado'` com posts em `rascunho` (cliente precisa aprovar) - Arquivo: `app/Controllers/SocialMedia.php` ## Bug 3: Anti-duplicata envio cronograma - Usava `aprovacao_token_expira` que era sempre NULL para cronogramas - **Fix**: Agora usa `updated_at` do cronograma - Arquivo: `app/Controllers/SocialMedia.php` ## Bug 4: Cron lembrete enviando para clientes com tudo aprovado - Lembrete verificava posts rascunho mas nao auto-corrigia cronogramas com 0 pendentes - **Fix**: Se cronograma `enviado` mas sem posts rascunho, auto-corrige para `aprovado` e para de enviar - Adicionado verificacao de token existente antes de enviar - Prioridade telefone: cadastro principal > social_clientes - Arquivo: `app/Controllers/CronSocialMedia.php` ## Bug 5: AprovacaoCronograma bloqueava cronograma ja aprovado - `index()`, `aprovar()`, `aprovarPost()`, `recusarPost()`, `rejeitar()` so aceitavam `status='enviado'` - Novos posts adicionados em cronograma aprovado nao podiam ser aprovados pelo cliente - **Fix**: Aceita `['enviado', 'aprovado']` em todas as rotas - Arquivo: `app/Controllers/AprovacaoCronograma.php` ## Bug 6: notificarAutoAprovacao telefone inline - Tinha logica inline de DDD em vez de usar `formatarTelefoneDDD()` centralizado - **Fix**: Usa `$this->formatarTelefone()` que chama `WhatsApp::formatarTelefoneDDD()` - Arquivo: `app/Controllers/CronSocialMedia.php` ## Botoes aprovacao cronograma (link publico + area cliente) - Botao individual: **"Aprovar somente este"** (era "Aprovar") - Botao geral: **"Aprovar todos os planejamentos"** (era "Aprovar todos os X pendentes") - Arquivos: `app/Views/aprovacao_publica/cronograma.php`, `app/Views/area_cliente/social/calendario.php` ## Area do cliente - planejamentos nao apareciam no calendario - Query excluia posts `rascunho` + `nao_requer` que pertenciam a cronogramas enviados - **Fix**: Incluir posts rascunho de cronogramas com status `enviado` ou `aprovado` - Cor azul para planejamentos pendentes no calendario - Arquivo: `app/Controllers/AreaClienteSocial.php` ## Area do cliente - status corrigidos para linguagem do cliente | Estado | Antes | Agora | |--------|-------|-------| | Planejamento pendente | Nao aparecia | Aguardando sua aprovacao | | Planejamento recusado | Planj. recusado | Alteracao solicitada | | Em producao | Planj. aprovado | Em producao | | Publicacao pendente | Aguardando aprov. publicacao | Aguardando sua aprovacao | | Publicacao recusada | Pub. recusada | Alteracao solicitada | | Aprovado agendado | Agendado | Aprovado | | Publicado | Publicado | Publicado | ## Area do cliente - modal completo (igual admin sem edicao) - Grid de props: Data, Tipo, **Status**, **Cronograma** (adicionados) - Bloco planejamento com icone e label - **recolhivel com setinha** - Bloco conteudo com icone e label - **recolhivel com setinha** - Hashtags - Motivo recusa - **Chat/historico de mensagens**: secao recolhivel (comeca fechado) - Mensagens da Equipe em fundo roxo, Cliente ("Voce") em fundo azul - Nome, badge, data/hora, anexos clicaveis - Scroll automatico quando tem muitas mensagens (max 200px) - Alertas contextuais por estado - Botoes: Aprovar somente este / Solicitar alteracao / Fechar - Funcao JS `toggleBloco(id)` para recolher/expandir - **Planejamento e Conteudo**: comecam FECHADOS, cliente expande se quiser - **Mensagens (chat)**: comeca ABERTO (setinha ja virada) ## Nova funcionalidade: aprovar post individual do cronograma pela area do cliente - Metodo: `AreaClienteSocial::aprovarPostCronograma($postId)` - Rota: `POST social/cronograma/aprovar-post/(:num)` (nos dois blocos de rotas) - Cria demanda automaticamente ao aprovar - Verifica se todos aprovados e muda cronograma para `aprovado` - JS: `aprovarPlanejamento(id)` com SweetAlert confirmacao ## Rejeicao do cliente agora aparece no chat - `AreaClienteSocial::rejeitar()` agora insere em `social_post_comentarios` como `autor_tipo='cliente'` - `AprovacaoPublica::rejeitar()` idem - com nome do cliente via tabela clientes - Antes so salvava em `aprovacao_comentario` (nao aparecia no chat) - Anexos tambem registrados no chat ## Bug fix: erro "Undefined constant _recusaUrl" - Aspa simples dentro de string JS/PHP quebrava o contexto - Fix: usar concatenacao JS pura `"+_recusaUrl+esc(c.anexo)+"` ## Juliana (cronograma #4) - Posts 122 e 123 REALMENTE nao foram aprovados pelo cliente - Cron de lembrete esta correto para ela ## Arquivos deployados (9 arquivos) 1. `app/Controllers/CronSocialMedia.php` 2. `app/Controllers/SocialMedia.php` 3. `app/Controllers/AprovacaoCronograma.php` 4. `app/Controllers/AprovacaoPublica.php` 5. `app/Controllers/AreaClienteSocial.php` 6. `app/Views/social_media/index.php` 7. `app/Views/aprovacao_publica/cronograma.php` 8. `app/Views/area_cliente/social/calendario.php` 9. `app/Config/Routes.php` ## Labels calendário e modais ADMIN alinhados (todos consistentes) | Etapa | Label calendario | Badge modal | |-------|-----------------|-------------| | Rascunho (sem cronograma) | Rascunho | Rascunho | | Cronograma enviado/aprovado, post rascunho | Aguardando aprov. planejamento | Aguardando aprov. planejamento | | Cliente recusou planejamento | Alteracao solicitada | Alteracao solicitada | | Planejamento aprovado, equipe trabalhando | Em producao | Em producao | | Publicacao enviada, aguardando cliente | Aguardando aprov. publicacao | Aguardando aprov. publicacao | | Cliente recusou publicacao | Alteracao solicitada | Alteracao solicitada | | Publicacao aprovada | Aprovado | Aprovado | | Publicado | Publicado | Publicado | - Fix: `cronSt==='aprovado'` agora tambem tratado como `plan_enviado` no calendario (posts novos em cronograma aprovado) - Arquivo: `app/Views/social_media/index.php` ## Regras do fluxo confirmadas 1. Cronograma criado -> status='rascunho' 2. Enviado ao cliente -> status='enviado' + token 3. Lembrete a cada 2h (8h-21h) enquanto tem posts rascunho 4. Cliente aprova -> posts='aceito', cronograma='aprovado' 5. Equipe insere conteudo final (arte/video) 6. Envia para aprovacao -> aprovacao_status='pendente', token 4h 7. Lembrete publicacao a cada 2h (8h-21h) 8. Auto-aprovacao apos 4h se cliente nao responder 9. Post aprovado -> status='agendado' (NAO publicado!) 10. Cron publica na data/hora -> status='publicado'