/** * Formulário do comentário que é usado para * aprovar, discutir e votar nas pautas. * * Manipula com array usado pelo Wordpress para * compor o formulário de comentário. * * @param array $defaults * * @return array */ function delibera_comment_form($defaults) { global $post, $delibera_comments_padrao, $user_identity, $comment_footer; $temas = get_the_terms($post->ID, 'tema'); // Se foi definido um tema, habilita a opção para abrir a descrição do tema base num modal if (is_array($temas) && count($temas) == 1) { $tema = array_shift($temas); $comment_footer = '<p><a data-target="#modal-' . $tema->slug . '" data-toggle="modal" href="#">Consultar o texto base do tema</a></p> <div class="modal fade" id="modal-' . $tema->slug . '" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> <h5 class="modal-title red font-roboto" id="myModalLabel"><strong>' . $tema->name . '</strong></h5> </div> <div class="modal-body"> ' . apply_filters('the_content', $tema->description) . ' </div> <div class="modal-footer"> <button type="button" class="btn btn-primary" data-dismiss="modal">Fechar</button> </div> </div> </div> </div>'; } else { $comment_footer = ""; } if ($delibera_comments_padrao === true) { $defaults['fields'] = $defaults['must_log_in']; if (!is_user_logged_in()) { $defaults['comment_field'] = ""; $defaults['logged_in_as'] = ''; $defaults['comment_notes_after'] = ""; $defaults['label_submit'] = ""; $defaults['id_submit'] = "botao-oculto"; $defaults['comment_notes_before'] = ' '; } return $defaults; } if (get_post_type($post) == "pauta") { $current_user = wp_get_current_user(); $defaults['id_form'] = 'delibera_commentform'; $defaults['comment_field'] = '<div class="delibera_before_fields">' . $defaults['comment_field']; $situacao = delibera_get_situacao($post->ID); switch ($situacao->slug) { case 'validacao': $user_comments = delibera_get_comments($post->ID, 'validacao', array('user_id' => $current_user->ID)); $temvalidacao = false; foreach ($user_comments as $user_comment) { if (get_comment_meta($user_comment->comment_ID, 'delibera_comment_tipo', true) == 'validacao') { $temvalidacao = true; break; } } if ($temvalidacao) { $defaults['comment_notes_after'] = ' <script type="text/javascript"> jQuery(document).ready(function() { jQuery("#respond").hide(); jQuery(".reply").hide(); }); </script> '; } else { $defaults['title_reply'] = __('Você quer ver essa pauta posta em discussão?', 'delibera'); $defaults['must_log_in'] = sprintf(__('Você precisar <a href="%s">estar logado</a> e ter permissão para votar.', 'delibera'), wp_login_url(apply_filters('the_permalink', get_permalink($post->ID)))); if (delibera_current_user_can_participate()) { $form = ' <div id="painel_validacao" class="actions textcenter"> <button class="btn btn-success">Sim</button> <button class="btn btn-danger">Não</button> <input type="hidden" name="delibera_validacao" id="delibera_validacao" /> <input name="comment" value="A validação de ' . $current_user->display_name . ' foi registrada no sistema." style="display:none;" /> <input name="delibera_comment_tipo" value="validacao" style="display:none;" /> </div>'; $defaults['comment_field'] = $form; $defaults['comment_notes_after'] = '<script type="text/javascript">jQuery(document).ready(function() { jQuery(\'input[name="submit"]\').hide(); });</script><div class="delibera_comment_button">'; $defaults['logged_in_as'] = ""; $defaults['label_submit'] = "__('Votar','delibera')"; } else { $defaults['comment_field'] = ""; $defaults['logged_in_as'] = '<p class="logged-in-as">' . sprintf(__('Você está logado como <a href="%1$s">%2$s</a> que não é um usuário autorizado a votar. <a href="%3$s" title="Sair desta conta?">Sair desta conta</a> e logar com um usuário com permissão de votar?', 'delibera'), admin_url('profile.php'), $user_identity, wp_logout_url(apply_filters('the_permalink', get_permalink($post->ID)))) . '</p>'; $defaults['comment_notes_after'] = ""; $defaults['label_submit'] = ""; $defaults['id_submit'] = "botao-oculto"; } } break; case 'discussao': $defaults['title_reply'] = __('Participar da discussão', 'delibera'); $defaults['must_log_in'] = sprintf(__('Você precisar <a href="%s">estar logado</a> para contribuir com a discussão.', 'delibera'), wp_login_url(apply_filters('the_permalink', get_permalink($post->ID)))); $defaults['comment_notes_after'] = ""; $defaults['logged_in_as'] = ""; $defaults['comment_field'] = '<input name="delibera_comment_tipo" value="discussao" style="display:none;" />' . $defaults['comment_field']; if ($situacao->slug == 'relatoria') { $defaults['comment_field'] = '<input id="delibera-baseouseem" name="delibera-baseouseem" value="" style="display:none;" autocomplete="off" /> <div id="painel-baseouseem" class="painel-baseouseem"><label id="painel-baseouseem-label" class="painel-baseouseem-label" >' . __('Proposta baseada em:', 'delibera') . ' </label></div><br/>' . $defaults['comment_field']; } if (delibera_current_user_can_participate()) { $replace = ''; if (delibera_pautas_suportam_encaminhamento()) { if ($situacao->slug != 'relatoria') { $replace .= '<label class="delibera-encaminha-label" ><input type="radio" name="delibera_encaminha" value="N" checked="checked" />' . __('Opinião', 'delibera') . '</label>'; } $replace .= '<label class="delibera-encaminha-label" ><input type="radio" name="delibera_encaminha" value="S" ' . ($situacao->slug == 'relatoria' ? ' checked="checked" ' : '') . ' />' . __('Proposta de encaminhamento', 'delibera') . '</label>'; } else { $replace .= '<input type="hidden" name="delibera_encaminha" value="N" />'; } $defaults['comment_field'] = preg_replace("/<label for=\"comment\">(.*?)<\\/label>/", $replace, $defaults['comment_field']); } else { $defaults['comment_field'] = ""; $defaults['logged_in_as'] = '<p class="logged-in-as">' . sprintf(__('Você está logado como <a href="%1$s">%2$s</a> que não é um usuário autorizado a votar. <a href="%3$s" title="Sair desta conta?">Sair desta conta</a> e logar com usuário que possa votar?', 'delibera'), admin_url('profile.php'), $user_identity, wp_logout_url(apply_filters('the_permalink', get_permalink($post->ID)))) . '</p>'; $defaults['comment_notes_after'] = ""; $defaults['label_submit'] = ""; $defaults['id_submit'] = "botao-oculto"; } if (has_filter('delibera_discussao_comment_form')) { $defaults = apply_filters('delibera_discussao_comment_form', $defaults, $situacao->slug); } break; case 'relatoria': $defaults['title_reply'] = __('Novo encaminhamento', 'delibera'); $defaults['must_log_in'] = sprintf(__('Você precisar <a href="%s">estar logado</a> para contribuir com a discussão.', 'delibera'), wp_login_url(apply_filters('the_permalink', get_permalink($post->ID)))); $defaults['comment_notes_after'] = '<p class="bottom textright"> <button id="new-encaminhamento-cancel" type="reset" class="btn btn-danger" style="display: none;">Cancelar</button> <button id="new-encaminhamento-save" type="submit" class="btn btn-success">Salvar</button> </p>'; $defaults['logged_in_as'] = ''; $defaults['comment_field'] = '<input name="delibera_comment_tipo" value="discussao" style="display:none;" />' . $defaults['comment_field']; $defaults['id_submit'] = "botao-oculto"; if ($situacao->slug == 'relatoria') { $defaults['comment_field'] = '<input id="delibera-baseouseem" name="delibera-baseouseem" type="hidden" value="" />' . '<p id="baseadoem-title" style="display: none;"><strong>' . __('Proposta de encaminhamento baseado no(s) encaminhamento(s) da(s) seguinte(s) pessoa(s):', 'delibera') . '</strong> <span id="baseadoem-list"></span></p>' . $defaults['comment_field']; } $replace = '<input type="hidden" name="delibera_encaminha" value="S" />'; $defaults['comment_field'] = preg_replace("/<label for=\"comment\">(.*?)<\\/label>/", $replace, $defaults['comment_field']); if (has_filter('delibera_discussao_comment_form')) { $defaults = apply_filters('delibera_discussao_comment_form', $defaults, $situacao->slug); } break; case 'emvotacao': $user_comments = delibera_get_comments($post->ID, 'voto', array('user_id' => $current_user->ID)); $temvoto = false; foreach ($user_comments as $user_comment) { if (get_comment_meta($user_comment->comment_ID, 'delibera_comment_tipo', true) == 'voto') { $temvoto = true; break; } } if ($temvoto) { $defaults['comment_notes_after'] = ' <script type="text/javascript"> var formdiv = document.getElementById("respond"); formdiv.style.display = "none"; </script> '; } else { $defaults['title_reply'] = __('Votação dos encaminhamentos propostos', 'delibera'); $defaults['must_log_in'] = sprintf(__('Você precisar <a href="%s">estar logado</a> e ter permissão para votar.'), wp_login_url(apply_filters('the_permalink', get_permalink($post->ID)))); $encaminhamentos = array(); if (delibera_current_user_can_participate()) { $form = '<div id="encaminhamentos" class="delibera_checkbox_voto">'; $encaminhamentos = delibera_get_comments_encaminhamentos_selecionados($post->ID); if (empty($encaminhamentos)) { // se acabar o prazo e o relator não selecionar nenhum encaminhamento // coloca todos os encaminhamentos para votacao $encaminhamentos = delibera_get_comments_encaminhamentos($post->ID); } $form .= '<div id="nenhum-voto" class="error" style="display: none;"><p><strong>' . __('Você precisa selecionar pelo menos um encaminhamento.', 'delibera') . '</strong></p></div>'; $form .= '<div class="instrucoes-votacao">' . __('Escolha os encaminhamentos que deseja aprovar e depois clique em "Votar":', 'delibera') . '</div>'; $form .= '<ol class="encaminhamentos">'; $i = 0; foreach ($encaminhamentos as $encaminhamento) { $tipo = get_comment_meta($encaminhamento->comment_ID, 'delibera_comment_tipo', true); $form .= '<li class="encaminhamento clearfix' . ($tipo == 'encaminhamento_selecionado' ? ' encaminhamentos-selecionados ' : '') . '"> <div class="alignleft checkbox"> <input type="checkbox" name="delibera_voto' . $i . '" id="delibera_voto' . $i . '" value="' . $encaminhamento->comment_ID . '" /> </div> <div class="alignleft content"> <label for="delibera_voto' . $i++ . '" class="label-voto">' . $encaminhamento->comment_content . '</label> </div> </li>'; } $form .= '</ol>'; $form .= ' <input name="delibera_comment_tipo" value="voto" style="display:none;" /> <input name="comment" value="O voto de ' . $current_user->display_name . ' foi registrado no sistema" style="display:none;" /> </div>'; $defaults['comment_field'] = $form; $defaults['logged_in_as'] = ""; $defaults['label_submit'] = __('Votar', 'delibera'); $defaults['comment_notes_after'] = '<ol class="encaminhamentos"><li class="submit">'; $comment_footer = "</li></ol>"; } else { $defaults['comment_field'] = ""; $defaults['logged_in_as'] = '<p class="logged-in-as">' . sprintf(__('Você está logado como <a href="%1$s">%2$s</a> que não é um usuário autorizado a votar. <a href="%3$s" title="Sair desta conta?">Sair desta conta</a> e logar com um usuário com permisão para votar?', 'delibera'), admin_url('profile.php'), $user_identity, wp_logout_url(apply_filters('the_permalink', get_permalink($post->ID)))) . '</p>'; $defaults['comment_notes_after'] = ""; $defaults['label_submit'] = ""; $defaults['id_submit'] = "botao-oculto"; } } if (has_filter('delibera_resolucoes_comment_form')) { $defaults = apply_filters('delibera_resolucoes_comment_form', $defaults, $temvoto, $encaminhamentos); } break; case 'comresolucao': $defaults['comment_notes_after'] = '<script type="text/javascript"> var formdiv = document.getElementById("respond"); formdiv.style.display = "none"; </script>'; if (has_filter('delibera_comresolucao_comment_form')) { $defaults = apply_filters('delibera_comresolucao_comment_form', $defaults); } break; } if (!is_user_logged_in()) { $defaults['comment_notes_before'] = '<script type="text/javascript"> var formdiv = document.getElementById("respond"); formdiv.style.display = "none"; </script>'; } } return $defaults; }
/** * * Faz a apuração dos votos e toma as devidas ações: * Empate: Mais prazo; * Vencedor: Marco com resolucao e marca o encaminhamento. * @param interger $postID * @param array $votos */ function delibera_computa_votos($postID, $votos = null) { if (is_null($votos)) { $votos = delibera_get_comments_votacoes($postID); } $encaminhamentos = delibera_get_comments_encaminhamentos($postID); $encaminhamentos_votos = array(); foreach ($encaminhamentos as $encaminhamento) { $encaminhamentos_votos[$encaminhamento->comment_ID] = 0; } foreach ($votos as $voto_comment) { $voto = get_comment_meta($voto_comment->comment_ID, 'delibera_votos', true); foreach ($voto as $voto_para) { $encaminhamentos_votos[$voto_para]++; } } $maisvotado = array(-1, -1); $iguais = array(); foreach ($encaminhamentos_votos as $encaminhamentos_voto_key => $encaminhamentos_voto_valor) { if ($encaminhamentos_voto_valor > $maisvotado[1]) { $maisvotado[0] = $encaminhamentos_voto_key; $maisvotado[1] = $encaminhamentos_voto_valor; $iguais = array(); } elseif ($encaminhamentos_voto_valor == $maisvotado[1]) { $iguais[] = $encaminhamentos_voto_key; } delete_comment_meta($encaminhamentos_voto_key, 'delibera_comment_numero_votos'); add_comment_meta($encaminhamentos_voto_key, 'delibera_comment_numero_votos', $encaminhamentos_voto_valor, true); } // nao finaliza a votacao caso haja um empate, exceto quando o administrador clicar no botão "Forçar fim do prazo" if (count($iguais) > 0 && !(isset($_REQUEST['action']) && $_REQUEST['action'] == 'delibera_forca_fim_prazo_action')) { delibera_novo_prazo($postID); } else { wp_set_object_terms($postID, 'comresolucao', 'situacao', false); update_comment_meta($maisvotado[0], 'delibera_comment_tipo', 'resolucao'); add_post_meta($postID, 'data_resolucao', date('d/m/Y H:i:s'), true); ////delibera_notificar_situacao($postID); if (has_action('votacao_concluida')) { do_action('votacao_concluida', $post); } } }
/** * Formulário do comentário * @param array $defaults */ function delibera_comment_form($defaults) { global $post, $delibera_comments_padrao, $user_identity, $comment_footer; $comment_footer = ""; if ($delibera_comments_padrao === true) { $defaults['fields'] = $defaults['must_log_in']; if (!is_user_logged_in()) { $defaults['comment_field'] = ""; $defaults['logged_in_as'] = ''; $defaults['comment_notes_after'] = ""; $defaults['label_submit'] = ""; $defaults['id_submit'] = "botao-oculto"; $defaults['comment_notes_before'] = ' '; } return $defaults; } if (get_post_type($post) == "pauta") { /* @var WP_User $current_user */ $current_user = wp_get_current_user(); $defaults['id_form'] = 'delibera_commentform'; $defaults['comment_field'] = '<div class="delibera_before_fields">' . $defaults['comment_field']; $situacao = delibera_get_situacao($post->ID); switch ($situacao->slug) { case 'validacao': $user_comments = delibera_get_comments($post->ID, 'validacao', array('user_id' => $current_user->ID)); $temvalidacao = false; foreach ($user_comments as $user_comment) { if (get_comment_meta($user_comment->comment_ID, 'delibera_comment_tipo', true) == 'validacao') { $temvalidacao = true; break; } } if ($temvalidacao) { $defaults['comment_notes_after'] = ' <script type="text/javascript"> var formdiv = document.getElementById("respond"); formdiv.style.display = "none"; </script> '; } else { $defaults['title_reply'] = __('Você quer ver essa pauta posta em discussão?', 'delibera'); $defaults['must_log_in'] = sprintf(__('Você precisar <a href="%s">estar logado</a> e ter permissão para votar.', 'delibera'), wp_login_url(apply_filters('the_permalink', get_permalink($post->ID)))); if (delibera_current_user_can_participate()) { $form = ' <div id="painel_validacao" > <input id="delibera_aceitar" type="radio" name="delibera_validacao" value="S" checked /><label for="delibera_aceitar" class="delibera_aceitar_radio_label">' . __('Aceitar', 'delibera') . '</label> <input id="delibera_rejeitar" type="radio" name="delibera_validacao" value="N" /><label for="delibera_rejeitar" class="delibera_aceitar_radio_label">' . __('Rejeitar', 'delibera') . '</label> <input name="comment" value="A validação de ' . $current_user->display_name . ' foi registrada no sistema." style="display:none;" /> <input name="delibera_comment_tipo" value="validacao" style="display:none;" /> </div> '; $defaults['comment_field'] = $form; $defaults['comment_notes_after'] = '<div class="delibera_comment_button">'; $defaults['logged_in_as'] = ""; $defaults['label_submit'] = __('Votar', 'delibera'); $comment_footer = "</div>"; } else { $defaults['comment_field'] = ""; $defaults['logged_in_as'] = '<p class="logged-in-as">' . sprintf(__('Você está logado como <a href="%1$s">%2$s</a> que não é um usuário autorizado a votar. <a href="%3$s" title="Sair desta conta?">Sair desta conta</a> e logar com um usuário com permissão de votar?', 'delibera'), admin_url('profile.php'), $user_identity, wp_logout_url(apply_filters('the_permalink', get_permalink($post->ID)))) . '</p>'; $defaults['comment_notes_after'] = ""; $defaults['label_submit'] = ""; $defaults['id_submit'] = "botao-oculto"; } } break; case 'discussao': case 'relatoria': $defaults['title_reply'] = sprintf(__('Discussão em torno de "%s"', 'delibera'), $post->post_title); $defaults['must_log_in'] = sprintf(__('Você precisar <a href="%s">estar logado</a> para contribuir com a discussão.', 'delibera'), wp_login_url(apply_filters('the_permalink', get_permalink($post->ID)))); $defaults['comment_notes_after'] = ""; $defaults['logged_in_as'] = ""; $defaults['comment_field'] = ' <input name="delibera_comment_tipo" value="discussao" style="display:none;" />' . $defaults['comment_field']; if ($situacao->slug == 'relatoria') { $defaults['comment_field'] = ' <input id="delibera-baseouseem" name="delibera-baseouseem" value="" style="display:none;" autocomplete="off" /> <div id="painel-baseouseem" class="painel-baseouseem"><label id="painel-baseouseem-label" class="painel-baseouseem-label" >' . __('Proposta baseada em:', 'delibera') . ' </label></div><br/> ' . $defaults['comment_field']; } if (delibera_current_user_can_participate()) { $replace = ''; if (delibera_pautas_suportam_encaminhamento()) { if ($situacao->slug != 'relatoria') { $replace .= '<label class="delibera-encaminha-label" ><input type="radio" name="delibera_encaminha" value="N" checked="checked" />' . __('Opinião', 'delibera') . '</label>'; } $replace .= '<label class="delibera-encaminha-label" ><input type="radio" name="delibera_encaminha" value="S" ' . ($situacao->slug == 'relatoria' ? ' checked="checked" ' : '') . ' />' . __('Proposta de encaminhamento', 'delibera') . '</label>'; } else { $replace .= '<input type="hidden" name="delibera_encaminha" value="N" />'; } $defaults['comment_field'] = preg_replace("/<label for=\"comment\">(.*?)<\\/label>/", $replace, $defaults['comment_field']); } else { $defaults['comment_field'] = ""; $defaults['logged_in_as'] = '<p class="logged-in-as">' . sprintf(__('Você está logado como <a href="%1$s">%2$s</a> que não é um usuário autorizado a votar. <a href="%3$s" title="Sair desta conta?">Sair desta conta</a> e logar com usuário que possa votar?', 'delibera'), admin_url('profile.php'), $user_identity, wp_logout_url(apply_filters('the_permalink', get_permalink($post->ID)))) . '</p>'; $defaults['comment_notes_after'] = ""; $defaults['label_submit'] = ""; $defaults['id_submit'] = "botao-oculto"; } if (has_filter('delibera_discussao_comment_form')) { $defaults = apply_filters('delibera_discussao_comment_form', $defaults, $situacao->slug); } break; case 'emvotacao': $user_comments = delibera_get_comments($post->ID, 'voto', array('user_id' => $current_user->ID)); $temvoto = false; foreach ($user_comments as $user_comment) { if (get_comment_meta($user_comment->comment_ID, 'delibera_comment_tipo', true) == 'voto') { $temvoto = true; break; } } if ($temvoto) { $defaults['comment_notes_after'] = ' <script type="text/javascript"> var formdiv = document.getElementById("respond"); formdiv.style.display = "none"; </script> '; } else { $defaults['title_reply'] = sprintf(__('Regime de votação para a pauta "%s"', 'delibera'), $post->post_title); $defaults['must_log_in'] = sprintf(__('Você precisar <a href="%s">estar logado</a> e ter permissão para votar.'), wp_login_url(apply_filters('the_permalink', get_permalink($post->ID)))); $encaminhamentos = array(); if (delibera_current_user_can_participate()) { $form = '<div class="delibera_checkbox_voto">'; $encaminhamentos = delibera_get_comments_encaminhamentos($post->ID); $form .= '<div class="instrucoes-votacao">' . __('Escolha os encaminhamentos que deseja aprovar e depois clique em "Votar":', 'delibera') . '</div>'; $i = 0; foreach ($encaminhamentos as $encaminhamento) { $form .= ' <div class="checkbox-voto"><input type="checkbox" name="delibera_voto' . $i . '" id="delibera_voto' . $i . '" value="' . $encaminhamento->comment_ID . '" /><label for="delibera_voto' . $i++ . '" class="label-voto">' . $encaminhamento->comment_content . '</label></div> '; } $form .= ' <input name="delibera_comment_tipo" value="voto" style="display:none;" /> <input name="comment" value="O voto de ' . $current_user->display_name . ' foi registrado no sistema" style="display:none;" /> </div>'; $defaults['comment_field'] = $form; $defaults['logged_in_as'] = ""; $defaults['label_submit'] = __('Votar', 'delibera'); $defaults['comment_notes_after'] = '<div class="delibera_comment_button">'; $comment_footer = "</div>"; } else { $defaults['comment_field'] = ""; $defaults['logged_in_as'] = '<p class="logged-in-as">' . sprintf(__('Você está logado como <a href="%1$s">%2$s</a> que não é um usuário autorizado a votar. <a href="%3$s" title="Sair desta conta?">Sair desta conta</a> e logar com um usuário com permisão para votar?', 'delibera'), admin_url('profile.php'), $user_identity, wp_logout_url(apply_filters('the_permalink', get_permalink($post->ID)))) . '</p>'; $defaults['comment_notes_after'] = ""; $defaults['label_submit'] = ""; $defaults['id_submit'] = "botao-oculto"; } } if (has_filter('delibera_resolucoes_comment_form')) { $defaults = apply_filters('delibera_resolucoes_comment_form', $defaults, $temvoto, $encaminhamentos); } break; case 'comresolucao': $defaults['comment_notes_after'] = '<script type="text/javascript"> var formdiv = document.getElementById("respond"); formdiv.style.display = "none"; </script>'; if (has_filter('delibera_comresolucao_comment_form')) { $defaults = apply_filters('delibera_comresolucao_comment_form', $defaults); } break; } if (!is_user_logged_in()) { $defaults['comment_notes_before'] = '<script type="text/javascript"> var formdiv = document.getElementById("respond"); formdiv.style.display = "none"; </script>'; } } return $defaults; }