function column_default($item, $column_name)
 {
     /* @var $desconto Desconto */
     $desconto = $this->itemsObj[$item['id']];
     switch ($column_name) {
         case 'desconto':
             if ($item['desconto_por'] == 'percentual') {
                 return $item['desconto'] . '%';
             } else {
                 return PLib::format_cash($item['desconto']);
             }
             break;
         case 'inscritos':
             $inscritos = $desconto->getQtdInscritos();
             if ($inscritos > 0) {
                 $inscritos = "<span style='color:blue;'>" . $inscritos . "</span>";
             }
             $confirmados = PLib::coalesce($desconto->getQtdConfirmados(), 0);
             $restantes = $desconto->getQuantidadeRestante();
             if ($confirmados > 0 && $restantes == 0) {
                 $confirmados = "<span style='color:green;'>" . $confirmados . "</span>";
             } else {
                 if ($confirmados > 0) {
                     $confirmados = "<span style='color:blue;'>" . $confirmados . "</span>";
                 }
             }
             return $inscritos . '/' . $confirmados;
             break;
         case 'pessoa':
             return '<a href="admin.php?page=Pessoas&action=view&id=' . $desconto->id_pessoa . '">' . $desconto->pessoa()->nome . '</a>';
             break;
         case 'validade':
             return PLib::date_relative($desconto->data_validade);
             break;
         case 'vagas':
             $restantes = $desconto->getQuantidadeRestante();
             if ($restantes == 0) {
                 $restantes = "<span style='color:green;'>" . $restantes . "</span>";
             }
             return $desconto->quantidade . '/' . $restantes;
             break;
         default:
             return $item[$column_name];
             //return print_r($item,true); //Show the whole array for troubleshooting purposes
     }
 }
    } elseif ($evento->acontecendo) {
        ?>
                        <div class="">
                            <h3>Data e hora</h3>
                            <p>Evento em andamento agora! Término <?php 
        echo strtolower(PLib::date_relative($evento->dataFim . " " . $evento->horaFim));
        ?>
.</p>
                        </div>
                    <?php 
    } else {
        ?>
                        <div class="">
                            <h3>Data</h3>
                            <p>Evento realizado <?php 
        echo PLib::date_relative($evento->data . " " . $evento->hora, false, false);
        ?>
</p>
                        </div>
                    <?php 
    }
    ?>

                    <?php 
    if (!$evento->preInscricao) {
        ?>
                        <?php 
        if ($evento->id_instrutor) {
            ?>
                            <div class="">
                                <h3>Coordenador</h3>
    ?>
            </h4>
            <p><?php 
    if (get_the_excerpt() != null) {
        the_excerpt();
    } else {
        echo $evento->descricao_2;
    }
    ?>
</p>
        <?php 
} else {
    ?>
            <h4>
                <?php 
    echo "Evento realizado " . PLib::date_relative($evento->data, false, false);
    if ($evento->local()) {
        echo " no " . $evento->local()->titulo;
    }
    ?>
            </h4>

            <p>
                <?php 
    $release = strip_tags($evento->release);
    $limit = 230;
    if (strlen($release) > $limit) {
        $release = substr($release, 0, strrpos(substr($release, 0, $limit), ' ')) . '...';
        $release .= " <a href='" . get_permalink($evento->id) . "'>continuar lendo</a>";
    }
    echo $release;
                            </thead>
                            <?php 
    if (count($inscricoes) > 0) {
        foreach ($inscricoes as $inscricao) {
            ?>
                                    <tr>
                                        <td><?php 
            echo $inscricao->id;
            ?>
</td>
                                        <td><?php 
            echo $inscricao->evento()->titulo;
            ?>
</td>
                                        <td><?php 
            echo PLib::date_relative($inscricao->data_inscricao);
            ?>
</td>
                                        <td><?php 
            echo $inscricao->getSituacaoString() . $inscricao->getSituacaoAcoes(true);
            ?>
</td>
                                    </tr>
                                <?php 
        }
    }
    ?>
                        </table>
                    </div>
                </div>
            </div>
 public function substituirVariaveis($mensagem, Evento $evento = null, Pessoa $pessoa = null, Inscricao $inscricao = null)
 {
     // Evento
     if ($evento != null) {
         $mensagem = str_replace('%evento_titulo%', $evento->titulo, $mensagem);
         $mensagem = str_replace('%evento_data_hora%', mb_strtolower(PLib::date_relative($evento->data . " " . $evento->hora, true, false)), $mensagem);
         if (function_exists('get_permalink')) {
             $mensagem = str_replace('%link_evento%', get_permalink($evento->id), $mensagem);
         }
         // Evento Local
         if ($evento->id_local != null) {
             $mensagem = str_replace('%evento_local%', $evento->local()->titulo, $mensagem);
             $mensagem = str_replace('%evento_local_endereco%', $evento->getLocal()->endereco, $mensagem);
             $mensagem = str_replace('%evento_local_telefone%', $evento->getLocal()->telefone, $mensagem);
         }
     }
     // Pessoa
     if ($pessoa != null) {
         $mensagem = str_replace('%pessoa_nome%', mb_convert_case(mb_strtolower($pessoa->nome), MB_CASE_TITLE, "UTF-8"), $mensagem);
         $mensagem = str_replace('%pessoa_primeiro_nome%', $pessoa->primeiro_nome(), $mensagem);
         $mensagem = str_replace('%pessoa_celular%', $pessoa->celular, $mensagem);
         $mensagem = str_replace('%pessoa_email%', $pessoa->email, $mensagem);
         $mensagem = str_replace('%pessoa_password%', $pessoa->getPassword(), $mensagem);
         if (strpos($mensagem, 'pessoa_extras') !== false) {
             $mensagem = str_replace('%pessoa_extras%', $pessoa->getExtrasExibicao(), $mensagem);
         }
         if (strpos($mensagem, 'pessoa_extras_social') !== false) {
             $mensagem = str_replace('%pessoa_extras_social%', $pessoa->getExtrasExibicao(null, true, false), $mensagem);
         }
     }
     // Inscrição
     if ($inscricao != null) {
         $mensagem = str_replace('%id_inscricao%', $inscricao->id, $mensagem);
         $mensagem = str_replace('%ticket%', $inscricao->id * 13, $mensagem);
         $mensagem = str_replace('%data_confirmacao%', $inscricao->data_confirmacao, $mensagem);
         $mensagem = str_replace('%valor_inscricao%', PLib::format_cash($inscricao->valor_inscricao), $mensagem);
         $mensagem = str_replace('%valor_pago%', PLib::format_cash($inscricao->valor_pago), $mensagem);
         $mensagem = str_replace('%forma_pagamento%', PagSeguroUtil::getFormaPagamentoTituloString($inscricao->forma_pagamento_gateway), $mensagem);
         $mensagem = str_replace('%meio_pagamento%', $inscricao->meio_pagamento, $mensagem);
         if (function_exists('get_permalink')) {
             $mensagem = str_replace('%link_pagamento%', $inscricao->getLinkPagamento(), $mensagem);
             $mensagem = str_replace('%link_avaliacao%', $inscricao->getLinkAvaliacao(), $mensagem);
             $mensagem = str_replace('%link_inscrito%', $inscricao->getLinkPagamento(), $mensagem);
             $mensagem = str_replace('%link_certificado%', $inscricao->getLinkCertificado(), $mensagem);
         }
         $mensagem = str_replace('%link_qrcode%', $inscricao->getLinkQrCode(), $mensagem);
         $mensagem = str_replace('%resumo_inscricoes%', 'Inscritos: ' . $inscricao->evento()->qtdInscritos() . ' - Confirmados: ' . $inscricao->evento()->qtdConfirmados(), $mensagem);
     }
     return $mensagem;
 }
 function column_default($item, $column_name)
 {
     $idEvento = $item['id'];
     /* @var $evento Evento */
     $evento = $this->itemsObj[$idEvento];
     //        var_dump($evento);
     //        var_dump($item);
     switch ($column_name) {
         // Obter total de visitantes
         case 'inscritos':
             global $wpdb;
             $return = null;
             $qtd = $evento->qtdPreInscritos();
             if ($qtd > 0) {
                 $return = 'Pré-inscritos: ' . $qtd . '<br>';
             }
             $return .= $evento->qtdInscritos() . " / " . $evento->qtdConfirmados() . '<br>';
             if ($evento->pago == 'pago') {
                 $return .= "Visitantes Inscritos: <b>{$evento->conversaoVisitantesInscritos}</b><br>";
                 if (!$evento->preInscricao()) {
                     $return .= "Inscritos Confirmados: <b>{$evento->conversaoInscritosConfirmados}</b><br>";
                 }
             }
             return $return;
             break;
             // Obter total de visitantes e pageviews
         // Obter total de visitantes e pageviews
         case 'visitas':
             global $wpdb;
             // Visitantes unicos
             $qtd = getVisitantesEvento($idEvento);
             // PageView
             $qtd2 = getPageViewsEvento($idEvento);
             return $qtd . " / " . $qtd2;
             break;
         case 'data':
             if ($item['data'] == null) {
                 return null;
             }
             $data = PLib::date_relative($item['data'] . " " . $item['hora'], false, false);
             if (strtotime($item['data']) > time()) {
                 $dias = PLib::days_between_dates($item['data']);
                 if ($dias > 0) {
                     $data .= "<br>" . $dias . " dias restantes";
                 }
             }
             return $data;
             break;
         case 'algomais':
             $return = null;
             if ($evento->noFuturo()) {
                 if ($evento->beta) {
                     $return = '[BETA]<br>';
                 }
                 if ($evento->preInscricao()) {
                     $return .= '[PRÉ-INSCRIÇÃO]<BR>';
                 }
                 if ($evento->pago == 'pago' && !$evento->preInscricao()) {
                     $preco = $evento->getPrecoAtual();
                     if ($preco != null) {
                         $vagasRestantes = $preco->getVagasRestantes();
                         if ($vagasRestantes <= 2) {
                             $vagasRestantes = "<span style='color:orangered;'>{$vagasRestantes}</span>";
                         }
                         if ($vagasRestantes <= 0) {
                             $vagasRestantes = "<span style='color:red;'>{$vagasRestantes}</span>";
                         }
                         $return .= "<b>Lote:</b> " . $preco->titulo . ' - ' . PLib::format_cash($evento->valor()) . ' - Vagas Restantes Lote: ' . $vagasRestantes . '<br>';
                     }
                 }
                 if ($evento->noFuturo() && !$evento->preInscricao()) {
                     $vagasDisponiveis = $evento->vagasDisponiveis();
                     if ($vagasDisponiveis <= 2) {
                         $vagasDisponiveis = "<span style='color:orangered;'>{$vagasDisponiveis}</span>";
                     }
                     if ($vagasDisponiveis <= 0) {
                         $vagasDisponiveis = "<span style='color:red;'>{$vagasDisponiveis}</span>";
                     }
                     $return .= "<b>Vagas Disponíveis Evento:</b> " . $vagasDisponiveis;
                 }
                 $erros = $evento->getErros();
                 if (count($erros['error']) > 0) {
                     $return .= '<br><span style="color:red;"><b>Erros: </b>' . count($erros['error']) . '</span>';
                 }
             } else {
                 if ($evento->hasAvaliacao()) {
                     $avaliacao1 = $evento->getAvaliacaoMediaPergunta(1);
                     $avaliacao2 = $evento->getAvaliacaoMediaPergunta(2);
                     $avaliacao3 = $evento->getAvaliacaoMediaPergunta(3);
                     $avaliacao = ($avaliacao1 + $avaliacao2 + $avaliacao3) / 3;
                     $avaliacao = number_format(round(($avaliacao1 + $avaliacao2 + $avaliacao3) / 3, 1), 1, '.', '');
                     $return .= 'Avaliação<br><div id="score_' . $evento->id . '"></div>';
                     $return .= "\n                            <script>\n                                jQuery(document).ready(function () {\n                                    jQuery('#score_{$evento->id}').raty({\n                                        score: {$avaliacao},\n                                        readOnly: true,\n                                        starHalf : 'star-half-big.png',\n                                        starOff : 'star-off-big.png',\n                                        starOn  : 'star-on-big.png',\n                                        path: '" . plugins_url('/Eventos/public/img/') . "'\n                                    });\n                                });\n                            </script>";
                 }
             }
             return $return;
             break;
         default:
             return $item[$column_name];
             //return print_r($item,true); //Show the whole array for troubleshooting purposes
     }
 }
 public static function processarTransacoes($integracao, PagSeguroTransactionSearchResult $transacoes)
 {
     //PLib::var_dump(count($transacoes->getTransactions()));
     if (count($transacoes->getTransactions()) > 0) {
         $results = Inscricoes::getInstance()->processarTransacoes($integracao->servico, $transacoes->getTransactions());
         if (count($results['inscricoes']) > 0) {
             echo "<h2>Inscrições</h2>";
             echo "<table>\n                        <thead>\n                            <th>Codigo<br>Gateway</th>\n                            <th>Ticket</th>\n                            <th>Evento</th>\n                            <th>Pessoa</th>\n                            <th>Forma<br>Pagamento</th>\n                            <th>Status<br>Transação</th>\n                            <th>Ultima<br>Atualização</th>\n                            <th>Pagamento</th>\n                            <th>Valor<br>Pago</th>\n                            <th>Sincronização<br>atual</th>\n                        </thead>";
             /** @var $inscricao Inscricao */
             foreach ($results['inscricoes'] as $inscricao) {
                 echo "<tr>\n                            <td>" . $inscricao->codigo_gateway . "</td>\n                            <td>" . $inscricao->id . "</td>\n                            <td><a href='admin.php?page=Eventos&action=view&id='" . $inscricao->id_evento . "'>" . $inscricao->evento()->titulo . "</a></td>\n                            <td><a href='admin.php?page=Pessoas&action=view&id='" . $inscricao->id_pessoa . "'>" . $inscricao->pessoa()->primeiro_nome() . "</a></td>\n                            <td>" . PagSeguroUtil::getFormaPagamentoTituloString($inscricao->forma_pagamento_gateway) . "</td>\n                            <td>" . $inscricao->_status_gateway . "</td>\n                            <td>" . PLib::date_relative($inscricao->data_atualizacao_gateway, true) . "</td>\n                            <td>" . PLib::date_relative($inscricao->data_pagamento, true) . "</td>\n                            <td>" . ($inscricao->valor_pago > 0 ? PLib::format_cash($inscricao->valor_pago) : '') . "</td>\n                            <td>" . $inscricao->_observacao . "</td>\n                          </tr>";
                 //                            var_dump($inscricao);
             }
             echo "</table>";
         }
         if (count($results['falhas']) > 0) {
             echo "<h2>Falhas</h2>";
             foreach ($results['falhas'] as $falha) {
                 echo $falha . '<br>';
             }
         }
     } else {
         echo "Sem transações no período<br>";
     }
 }
 /**
  * Retorna a situação da inscrição em string para exibição amigável
  */
 public function getSituacaoString()
 {
     $return = null;
     // Fila de espera?
     if ($this->id_situacao == 10) {
         $return .= '<b>Fila Espera</b><br>';
     }
     // Presente? Confirmado?
     if ($this->presente == 1) {
         $return .= '<b>Confirmada e Presente</b>';
     }
     if ($this->presente != 1 && $this->confirmado == '1') {
         $return .= '<b>Confirmada</b>';
     }
     if ($this->confirmado == '1' && $this->data_confirmacao != null) {
         $return .= '<br>' . PLib::date_relative($this->data_confirmacao, true) . '<br>';
     } else {
         if ($this->confirmado === '0') {
             $return .= '<b>Cancelada</b><br>';
             if ($this->data_cancelamento != null) {
                 $return .= 'Cancelamento: ' . PLib::date_relative($this->data_cancelamento) . '<br>';
             }
         } else {
             if ($this->pre_inscricao == 1) {
                 $return .= '<b>Pré-inscrição</b><br>';
             }
         }
     }
     if ($this->confirmado == null) {
         $return .= '<b>Não confirmada</b><br>';
         if ($this->meio_pagamento != null) {
             $return .= 'Meio de Pagamento: ' . $this->meio_pagamento . '<br>';
         }
     }
     // Algo de pagamento?
     if ($this->forma_pagamento) {
         $return .= "Forma Pagamento: " . $this->forma_pagamento . '<br>';
     }
     if ($this->id_pessoa_confirmacao && $this->valor_pago) {
         $return .= "Pessoa Recebimento: " . $this->pessoa_confirmacao()->nome . '<br>';
     } else {
         if ($this->id_pessoa_confirmacao) {
             $return .= "Pessoa Confirmação: " . $this->pessoa_confirmacao()->nome . '<br>';
         }
     }
     if ($this->forma_pagamento_gateway) {
         $return .= "Forma Pgto Gateway: " . PagSeguroUtil::getFormaPagamentoTituloString($this->forma_pagamento_gateway) . '<br>';
     }
     if ($this->status_gateway) {
         $return .= "Status PagSeguro: " . PagSeguroUtil::getStatusTituloString($this->status_gateway) . '<br>';
     }
     if (PLib::coalesce($this->valor_pago, 0) > 0) {
         $return .= "Valor pago: " . PLib::format_cash($this->valor_pago) . '<br>';
     }
     if ($this->valor_liquido !== $this->valor_pago) {
         $return .= "Valor líquido: " . PLib::format_cash(PLib::coalesce($this->valor_liquido, $this->valor_inscricao)) . '<br>';
     }
     if ($this->data_atualizacao_gateway) {
         $return .= "Atualização: " . PLib::date_relative($this->data_atualizacao_gateway, true) . " (" . PLib::days_between_dates($this->data_atualizacao_gateway) . " dias)<br>";
     }
     return $return;
 }
function add_menus()
{
    // Se for author, deixo apenas confirmar inscrições
    if (get_user_role() == 'author') {
        add_menu_page('Inscrições', 'Inscrições', 'read', 'Inscricoes', array('ControllerEventos', 'inscricoes'), 'dashicons-index-card', 6);
    } else {
        add_menu_page('Eventos', 'Eventos', 'edit_pages', 'Eventos', array('ControllerEventos', 'dispatcher'), 'dashicons-calendar-alt', 5);
        // Incluir já eventos no menu
        $eventos = Eventos::getInstance()->getAtuaisERecentes();
        if ($eventos) {
            foreach ($eventos as $evento) {
                add_submenu_page('Eventos', PLib::date_relative($evento->data) . ' - ' . $evento->titulo, PLib::date_relative($evento->data) . ' - ' . $evento->titulo, 'edit_pages', 'Eventos&action=view&id=' . $evento->id, 'AdminPresenca');
            }
        }
        add_menu_page('Inscrições', 'Inscrições', 'read', 'Inscricoes', array('ControllerEventos', 'inscricoes'), 'dashicons-index-card', 6);
        add_menu_page('Pessoas', 'Pessoas', 'edit_pages', 'Pessoas', array('ControllerPessoas', 'dispatcher'), 'dashicons-groups', 7);
        if (TGO_EVENTO_GAMIFICATION === true) {
            add_menu_page('Gamification', 'Gamification', 'edit_pages', 'Gamification', array('ControllerGamification', 'dispatcher'), 'dashicons-smiley', 8);
            add_submenu_page('Gamification', 'Importar Eventos', 'Importar Eventos', 'edit_pages', 'GamificationGDGJF', array('ControllerGamification', 'import'));
            add_submenu_page('Gamification', 'Badges', 'Badges', 'edit_pages', 'badges', array('ControllerGamification', 'dispatcher'));
            add_submenu_page('Gamification', 'Eventos', 'Eventos', 'edit_pages', 'eventos', array('ControllerGamification', 'dispatcher'));
        }
        add_menu_page('Apoio', 'Apoio', 'edit_pages', 'AdminApoio', 'AdminApoio', 'dashicons-nametag', 9);
        add_submenu_page('AdminApoio', 'Tickets de Desconto', 'Tickets de Desconto', 'edit_pages', 'TicketsDesconto', array('ControllerDescontos', 'dispatcher'));
        add_submenu_page('AdminApoio', 'Locais', 'Locais', 'edit_pages', 'Locais', array('ControllerLocais', 'dispatcher'));
        add_submenu_page('AdminApoio', 'Organizadores', 'Organizadores', 'manage_options', 'Organizadores', array('ControllerOrganizadores', 'dispatcher'));
        add_submenu_page('AdminApoio', 'Templates', 'Templates', 'manage_options', 'edit.php?post_type=tgo_template');
        add_submenu_page('AdminApoio', 'Mensagens', 'Mensagens', 'manage_options', 'Mensagens', array('ControllerMensagens', 'dispatcher'));
        add_submenu_page('AdminApoio', 'Integrações', 'Integrações', 'manage_options', 'Integracoes', array('ControllerIntegracoes', 'dispatcher'));
        //    add_submenu_page('AdminApoio', 'Migrar Dados', 'Migrar Dados', 'manage_options', 'MenuConfig', array('AdminConfig', 'adminConfigHome'));
        add_submenu_page('AdminApoio', 'Sincronizar Gateways', 'Sincronizar Gateways', 'manage_options', 'Sincronizar', array('ControllerInscricoes', 'sincronizarGateways'));
    }
    // Actions sem menu
    add_submenu_page(null, 'Categorias', 'Categorias', 'read', 'Categorias', array('ControllerCategorias', 'dispatcher'));
    add_submenu_page(null, 'Inscrições', 'Inscrições', 'read', 'Inscricoes', array('ControllerInscricoes', 'dispatcher'));
    add_submenu_page(null, 'Comunicação', 'Comunicação', 'read', 'Comunicacao', array('ControllerComunicacao', 'dispatcher'));
    add_submenu_page(null, 'Preços', 'Preços', 'read', 'Precos', array('ControllerPrecos', 'dispatcher'));
    add_submenu_page(null, 'Descontos', 'Descontos', 'read', 'Descontos', array('ControllerDescontos', 'dispatcher'));
    add_submenu_page(null, 'Pessoas', 'Pessoas', 'read', 'Pessoas', array('ControllerPessoas', 'dispatcher'));
}
 public function showUserLog()
 {
     $logs = self::$gamification->getUserLog();
     if ($logs) {
         echo "<h4>Log</h4>";
         echo "<table><Tr><th>Data</th><th>Alias</th><th>Evento</th><th>Pontuou</th><th>Badge</th><th>Novo Nível</th></Tr>";
         foreach ($logs as $log) {
             $event = self::$gamification->getEventById($log->getIdEvent());
             if ($log->getIdBadge()) {
                 $badge = self::$gamification->getBadge($log->getIdBadge())->getTitle();
             } else {
                 $badge = null;
             }
             echo "<tr><td>" . PLib::date_relative($log->getEventDate()) . "</td><td>" . $event->getAlias() . " </td><td>" . $event->getDescription() . "</td><td>" . $log->getPoints() . "</td><td> " . $badge . "</td><td>" . $log->getIdLevel() . "</td></tr>";
         }
         echo "</table>";
     }
 }