Statut : "; } 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')); 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() { $_SERVER['REQUEST_URI'] = ($_SERVER['REQUEST_URI'] == '/') ? '//' : $_SERVER['REQUEST_URI']; //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_role = '|' . implode("|", $user_infos->roles) . '|'; if (strpos($altreport_infos['user_log'], $user_role) !== false) { $report = array( 'post_type' => 'rapport', 'meta_query' => array( array( 'key' => 'altreport_urlbug', 'value' => sanitize_text_field($_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)) { $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.=''; } } } if ((strpos($altreport_infos['user_log'], "|all|") !== false) || (strpos($altreport_infos['user_log'], $user_role) !== 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')); if (strpos($_SERVER['REQUEST_URI'], 'altreport_report') !== false) { 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)) { $issue = array( 'issue' => array( 'notes' => $post_commentaire, 'status_id' => $status_redmine, ) ); $postdata = http_build_query( $issue ); $opts = array('http' => array( 'method' => 'PUT', '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'] . '/issues/' . $ticket_id . '.json'; file_get_contents($url, false, $context); } } } else { $url_absolue = $_SERVER['SERVER_NAME'] . $_POST['REQUEST_URI']; $url_relative = $_POST['REQUEST_URI']; $userAgent = strtolower($_POST['HTTP_USER_AGENT']); $version = ''; // Identify the browser. Check Opera and Safari first in case of spoof. Let Google Chrome be identified as Safari. if (preg_match('/opera/', $userAgent)) { $name = 'opera'; } elseif (preg_match('/chrome/', $userAgent)) { $name = 'chrome'; $url_info = explode('chrome/', $userAgent); $url_info = explode(' ', $url_info[1]); $version = $url_info[0]; } elseif (preg_match('/webkit/', $userAgent)) { $name = 'safari'; } elseif (preg_match('/msie/', $userAgent)) { $name = 'msie'; } elseif (preg_match('/mozilla/', $userAgent) && !preg_match('/compatible/', $userAgent)) { $name = 'mozilla'; } else { $name = 'unrecognized'; } // What version? if ($version == '') { if (preg_match('/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/', $userAgent, $matches)) { $version = $matches[1]; } else { $version = 'unknown'; } } // Running on what platform? if (preg_match('/linux/', $userAgent)) { $platform = 'linux'; } elseif (preg_match('/macintosh|mac os x/', $userAgent)) { $platform = 'mac'; } elseif (preg_match('/windows|win32/', $userAgent)) { $platform = 'windows'; } else { $platform = 'unrecognized'; } $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']), ); $post_id = wp_insert_post($my_post); print_r($post_id); $content.='

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

\r\n"; $content.='

' . __("Opérateur système", 'alt_report') . ' :[' . $platform . "]

\r\n"; $content.='

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

\r\n"; $content.='

' . __("Heure du bug", 'alt_report') . ' :[' . date("Y-m-d H:i:s", $_POST['REQUEST_TIME']) . "]

\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'])) { $status_id = (isset($altreport_redmine['status_new'])) ? $altreport_redmine['status_new'] : '1'; $postdata = http_build_query( 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'], ) ) ); $opts = array('http' => array( 'method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => $postdata ) ); $context = stream_context_create($opts); $result = file_get_contents('' . $altreport_redmine['protocol'] . '://' . $altreport_redmine['login'] . ':' . $altreport_redmine['mdp'] . '@' . $altreport_redmine['adresse'] . '/issues.json', false, $context); $obj = json_decode($result); $issue = $obj->{'issue'}; add_post_meta($post_id, 'altreport_redmine', $issue->id, true); $content.='

' . __("Ticket redmine lier", 'alt_report') . ' :[' . $altreport_redmine['adresse'] . '/issues/' . $issue->id . ']

'; } $my_post['ID'] = $post_id; $my_post['post_content'] = $content; wp_update_post($my_post); add_post_meta($post_id, 'altreport_status', 'new', true); add_post_meta($post_id, 'altreport_urlbug', sanitize_text_field($url_relative), true); 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) { status_header(200); $imagedata = base64_decode($_POST['imgdata']); //$filename = md5(uniqid(rand(), true)); $filename = $_GET['id_post']; $file = ALTREPORT_LOAD . $filename . '.png'; $imageurl = ALTREPORT_LOAD . $filename . '.png'; file_put_contents($file, $imagedata); echo $imageurl; 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" => true, "publicly_queryable" => true, "show_ui" => true, "show_in_rest" => false, "rest_base" => "", "has_archive" => false, "show_in_menu" => true, 'menu_icon' => 'dashicons-tickets', "exclude_from_search" => false, "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)); ?>

array( 'status_id' => $status_redmine, ) ) ); $opts = array('http' => array( 'method' => 'PUT', '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'] . '/issues/' . $ticket_id . '.json'; file_get_contents($url, false, $context); } } } } } /** * * @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")) { $columns = array( 'cb' => '', 'title' => __('Ticket', 'alt_report'), 'status' => __('Statut', 'alt_report'), 'redmine' => __('Redmine', 'alt_report'), 'url_bug' => __('Url bug', 'alt_report'), 'date' => __('Date', 'alt_report') ); //defining the filter that will be used so we can select posts by 'author' } return $columns; } add_filter('manage_edit-rapport_sortable_columns', 'altreport_sortable_columns'); function altreport_sortable_columns($columns) { $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 (isset($altreport_redmine['login'])) { $ticket_id = get_post_meta($post->ID, 'altreport_redmine', true); if (isset($ticket_id)) { echo '#' . $ticket_id . ''; } } 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 ?>