array( 'notes' => $content, 'status_id' => $type, ) ); $post_type = 'PUT'; $fin_url = '/issues/' . $post_id . '.json'; } else { $status_id = (isset($altreport_redmine['status0'])) ? $altreport_redmine['status0'] : '1'; $issue = array( 'issue' => array( 'project_id' => $altreport_redmine['projet'], 'reporter_id' => 1, 'status_id' => $status_id, 'subject' => sanitize_text_field($_POST['REQUEST_URI'] . '] ' . $_POST['issue']['subject']), 'description' => $content, //'assigned_to_id' => $altreport_redmine['user_id'], ) ); $post_type = 'POST'; $fin_url = '/issues.json'; } $postdata = http_build_query( $issue ); $opts = array('http' => array( 'method' => $post_type, 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => $postdata ) ); $context = stream_context_create($opts); $url = $altreport_redmine['protocol'] . '://' . $altreport_redmine['login'] . ':' . $altreport_redmine['mdp'] . '@' . $altreport_redmine['adresse'] . '/' . $fin_url; $result = file_get_contents($url, false, $context); if ($type == '') { $obj = json_decode($result); $issue = $obj->{'issue'}; add_post_meta($post_id, 'altreport_redmine', $issue->id, true); return '

' . __("Redmine", 'alt_report') . ' :[' . $issue->id . ']

'; } } } function altreport_list_status($status) { $altreport_status = unserialize(get_option('altreport_status')); $liste_status = ''; if (!empty($altreport_status)) { $liste_status = '"; } return $liste_status; } /** * * @param type $status * @param type $picto * @return string */ function altreport_label_status($status, $picto = '0') { $altreport_status = unserialize(get_option('altreport_status')); $label = 'N/A'; foreach ($altreport_status as $value) { if ($value['value'] == $status) { if ($picto == '0') { $label = $value['label']; } else { $label = ' ' . $value['label']; } } } return $label; } /** * * @param type $status * @return type */ function altreport_status_redmine($status) { $altreport_status = unserialize(get_option('altreport_status')); $altreport_redmine = unserialize(get_option('altreport_redmine')); foreach ($altreport_status as $key => $value) { if ($value['value'] == $status) { return $altreport_redmine['status' . $key]; } } } add_action('wp_footer', 'altreport_footer'); function altreport_footer($script_co = '') { //todo vérifier les roles $altreport_infos = unserialize(get_option('altreport_infos')); $altreport_redmine = unserialize(get_option('altreport_redmine')); $user_infos = wp_get_current_user(); $user_role = $reports = $infos = ''; /* définiton par défaut du parametrage */ //todo limiter au meta diférent de fini /* récupération des post de type rapport différent de fini et par rapport a la page en cours */ if (isset($user_infos) && $user_infos->ID != 0) { $user_role = '|' . implode("|", $user_infos->roles) . '|'; if (strpos($altreport_infos['user_log'], $user_role) !== false) { $report = array( 'posts_per_page' => '-1', 'post_type' => 'rapport', 'meta_query' => array( array( 'key' => 'altreport_urlbug', 'value' => sanitize_text_field($_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']), 'compare' => 'LIKE' ) ), 'meta_key' => 'altreport_status', 'orderby' => 'meta_value', 'order' => 'DESC' ); $post_report = new WP_Query($report); $type_statut = array(); foreach ($post_report->posts as $value) { $status = esc_attr(get_post_meta($value->ID, 'altreport_status', true)); $picto = altreport_label_status($status, 1); $type_statut[$status]['title'] = $picto; $list_status = altreport_list_status($status); $ticket_id = get_post_meta($value->ID, 'altreport_redmine', true); $url_redmine = ''; if (isset($ticket_id) && ($altreport_redmine['actif'] == 'on')) { $url_redmine = $altreport_redmine['protocol'] . '://' . $altreport_redmine['login'] . ':' . $altreport_redmine['mdp'] . '@' . $altreport_redmine['adresse'] . '/issues/' . $ticket_id . ''; $url_redmine = '#' . $ticket_id . ' ticket'; } $url_back = 'Edit'; $infos = '
' . $value->post_title . '
' . '
Commentaire: ' . $value->post_excerpt . '

' . '
' . '' . '' . $list_status . '' . '' . '
' . 'Suivis du ticket : ' . $url_redmine . ' - ' . $url_back . '' . '
'; $type_statut[$status]['report'][] = $infos; } foreach ($type_statut as $key => $un_status) { $nb_report = count($un_status['report']); $reports .= '
(' . $nb_report . ') ' . $un_status['title'] . '
'; $reports .= ''; } require_once 'modales.php'; } } else if (strpos($altreport_infos['user_log'], "|all|") !== false) { require_once 'modales.php'; } } add_action('send_headers', "altreport_rooter"); function altreport_rooter() { $altreport_infos = unserialize(get_option('altreport_infos')); $altreport_redmine = unserialize(get_option('altreport_redmine')); $user_infos = wp_get_current_user(); /* définiton par défaut du parametrage */ //todo limiter au meta diférent de fini /* récupération des post de type rapport différent de fini et par rapport a la page en cours */ if (strpos($_SERVER['REQUEST_URI'], 'altreport_report') !== false) { header("Access-Control-Allow-Origin: *"); status_header(200); if ((isset($_POST['nonce'])) && (wp_verify_nonce($_POST['nonce'], 'altreport_nonce'))) { if (isset($_POST['edit'])) { $post = get_post($_POST['edit']); $post_content = $post->post_content; $post_commentaire = "Commentaire :[" . $_POST['commentaire'] . "]"; $post_content .= "

-------------------------------

\r\n" . "

" . $post_commentaire . "]

\r\n"; $my_post_update['ID'] = $post->ID; $my_post_update['post_content'] = $post_content; altreport_updatemeta($post->ID, 'altreport_status', $_POST['altreport_status']); wp_update_post($my_post_update); if (isset($altreport_redmine['login'])) { $status_redmine = altreport_status_redmine($_POST['altreport_status']); $ticket_id = get_post_meta($post->ID, 'altreport_redmine', true); if (isset($ticket_id)) { liaison_redmine($altreport_redmine, $post_commentaire, $ticket_id, $status_redmine); } } } else { $url_absolue = $_POST['REQUEST_URI']; $navigateur = $_POST['HTTP_USER_AGENT']; $content = ''; $my_post = array( 'post_title' => sanitize_text_field(wp_strip_all_tags($_POST['issue']['subject'])), 'post_content' => sanitize_text_field($content), 'post_status' => 'publish', //new //ok //fin 'post_type' => 'rapport', 'post_excerpt' => sanitize_text_field($_POST['issue']['description']), ); if (isset($user_infos) && $user_infos->ID != 0) { $my_post['post_author'] = $user_infos->ID; } $post_id = wp_insert_post($my_post); echo $post_id . get_current_blog_id(); $content .= '

' . __("Navigateur", 'alt_report') . ' :[' . $navigateur . "]

\r\n"; $content .= '

' . __("Url du bug", 'alt_report') . ' :[' . $url_absolue . "]

\r\n"; $content .= '

' . __("Largeur fenêtre", 'alt_report') . ' :[' . $_POST['innerWidth'] . "px]

\r\n"; $content .= '

' . __("Hauteur fenêtre", 'alt_report') . ' :[' . $_POST['innerHeight'] . "px]

\r\n"; $content .= '

' . __("Impression écran", 'alt_report') . ':

'; $content .= '

' . __("Description", 'alt_report') . ' :[' . $_POST['issue']['description'] . "]

\r\n"; if (isset($altreport_redmine['login'])) { $content .= liaison_redmine($altreport_redmine, $content, $post_id, ''); } $my_post['ID'] = $post_id; $my_post['post_content'] = $content; wp_update_post($my_post); if (isset($altreport_infos['default_status']) && $altreport_infos['default_status'] != '') { add_post_meta($post_id, 'altreport_status', $altreport_infos['default_status'], true); } add_post_meta($post_id, 'altreport_urlbug', sanitize_text_field($url_absolue), true); if (isset($_POST['email_user']) && $_POST['email_user'] != '') { if (filter_var($_POST['email_user'], FILTER_VALIDATE_EMAIL)) { add_post_meta($post_id, 'altreport_email_user', sanitize_text_field($_POST['email_user']), true); wp_mail($_POST['email_user'], 'Rapport :' . sanitize_text_field($_POST['issue']['subject']), $altreport_infos['rapport_message']); } } } if (isset($altreport_infos['user_email'])) { $emails = explode(',', $altreport_infos['user_email']); if (!empty($emails)) { foreach ($emails as $email) { add_filter('wp_mail_content_type', 'wpdocs_set_html_mail_content_type'); wp_mail($email, 'Rapport :' . sanitize_text_field($_POST['issue']['subject']), $content); remove_filter('wp_mail_content_type', 'wpdocs_set_html_mail_content_type'); } } } } die(); } if (strpos($_SERVER['REQUEST_URI'], 'altreport_image') !== false) { header("Access-Control-Allow-Origin: *"); status_header(200); $imagedata = base64_decode($_POST['imgdata']); $filename = trim($_GET['id_post']); $file = ALTREPORT_LOAD . $filename . '.png'; $imageurl = ALTREPORT_LOAD . $filename . '.png'; file_put_contents($file, $imagedata); echo $imageurl; die(); } if (strpos($_SERVER['REQUEST_URI'], 'altreport_script') !== false) { header("Access-Control-Allow-Origin: *"); status_header(200); require_once 'script.php'; die(); } } add_action('init', 'altreport_create_post_type_rapport'); function altreport_create_post_type_rapport() { $labels = array( "name" => __('Report tickets'), "singular_name" => __('Rapport'), ); $args = array( "label" => __('Rapports'), "labels" => $labels, "description" => "", "public" => false, "publicly_queryable" => false, "show_ui" => true, "show_in_rest" => false, "rest_base" => "", "has_archive" => false, "show_in_menu" => true, 'menu_icon' => 'dashicons-tickets', "exclude_from_search" => true, "capability_type" => "post", "map_meta_cap" => true, "hierarchical" => false, "rewrite" => array("slug" => "Rapport", "with_front" => true), "query_var" => true, "supports" => array("title", "editor", "excerpt"),); register_post_type("rapport", $args); } add_action('add_meta_boxes', 'altreport_add_post_meta_boxes'); function altreport_add_post_meta_boxes() { add_meta_box( 'altreport-bugurl', // Unique ID 'Parametrage', 'altreport_post_bug_meta_box', // Callback function 'rapport', // Admin page (or post type) 'side', // Context 'default' // Priority ); } function altreport_post_bug_meta_box($object, $box) { $status = esc_attr(get_post_meta($object->ID, 'altreport_status', true)); $altreport_email_user = get_post_meta($object->ID, 'altreport_email_user', true); ?>

post_content; $_POST['REQUEST_URI'] = $_POST['altreport_urlbug']; $_POST['issue']['subject'] = $content_post->post_title; liaison_redmine($altreport_redmine, $content, $post_id, ''); } } } } } /** * * @param type $post_id * @param type $meta_key * @param type $new_meta_value */ function altreport_updatemeta($post_id, $meta_key, $new_meta_value) { /* Get the meta value of the custom field key. */ $meta_value = get_post_meta($post_id, $meta_key, true); /* If a new meta value was added and there was no previous value, add it. */ if ($new_meta_value && '' == $meta_value) add_post_meta($post_id, $meta_key, $new_meta_value, true); /* If the new meta value does not match the old value, update it. */ elseif ($new_meta_value && $new_meta_value != $meta_value) update_post_meta($post_id, $meta_key, $new_meta_value); /* If there is no new meta value but an old value exists, delete it. */ elseif ('' == $new_meta_value && $meta_value) delete_post_meta($post_id, $meta_key, $meta_value); } add_filter('manage_edit-rapport_columns', 'altreport_columns'); function altreport_columns($columns) { global $wp_query; if (isset($wp_query->query) && ($wp_query->query['post_type'] == "rapport")) { $altreport_redmine = unserialize(get_option('altreport_redmine')); $columns['cb'] = __('', 'alt_report'); $columns['title'] = __('Statut', 'alt_report'); $columns['status'] = __('Statut', 'alt_report'); if ($altreport_redmine['actif'] == 'on') { $columns['redmine'] = __('Redmine', 'alt_report'); } $columns['url_bug'] = __('Url bug', 'alt_report'); $columns['date'] = __('Date', 'alt_report'); } return $columns; } add_filter('manage_edit-rapport_sortable_columns', 'altreport_sortable_columns'); function altreport_sortable_columns($columns) { $altreport_redmine = unserialize(get_option('altreport_redmine')); if (isset($altreport_redmine['login'])) { $columns['redmine'] = 'redmine'; } $columns['url_bug'] = 'url_bug'; return $columns; } add_action('manage_posts_custom_column', 'altreport_columns_values', 10, 2); function altreport_columns_values($column, $post_id) { $altreport_redmine = unserialize(get_option('altreport_redmine')); global $post, $wp_query; if (isset($wp_query->query) && ($wp_query->query['post_type'] == "rapport")) { switch ($column) { /* If displaying the 'duration' column. */ case 'status' : $status = esc_attr(get_post_meta($post->ID, 'altreport_status', true)); echo altreport_label_status($status, 1); break; case 'redmine' : if ($altreport_redmine['actif'] == 'on') { $ticket_id = get_post_meta($post->ID, 'altreport_redmine', true); if (isset($ticket_id) && $ticket_id != '') { echo '#' . $ticket_id . ''; } else { if ($_GET['altreport_refresh_post'] == $post->ID) { $content = $post->post_content; $_POST['REQUEST_URI'] = get_post_meta($post->ID, 'altreport_urlbug', true); $_POST['issue']['subject'] = $post->post_title; echo liaison_redmine($altreport_redmine, $content, $post_id, ''); } else { echo'
'; } } } break; case 'url_bug' : $altreport_urlbug = get_post_meta($post->ID, 'altreport_urlbug', true); if (isset($altreport_urlbug)) { echo '' . $altreport_urlbug . ''; } break; default : break; } } } //defining the filter that will be used so we can select posts by 'author' function custom_restrict_manage_posts() { global $wp_query; if (isset($wp_query->query) && ($wp_query->query['post_type'] == "rapport")) { //rapport $altreport_status = unserialize(get_option('altreport_status')); //todo prévoir un asset avec l'inclusion du js et et du css pour la partie admin et pour la partie front ?>