Plugin Directory

Changeset 1592607


Ignore:
Timestamp:
02/09/2017 04:03:34 PM (9 years ago)
Author:
CodeCabin_
Message:
  • 1.02 - 2017-02-09 - Medium Priority
  • You can now search for tickets based on the author email address
  • Bug Fix: Correct timestamp shown in search results for last responder
  • Bug Fix: Author name displays correctly in search results
  • Bug Fix: Slashes are now removed from ticket replies
  • Bug Fix: Two PHP errors after submitting a ticket while logged in
  • Bug Fix: Headers already sent once a ticket is submitted and needs to redirect to the thank you page
  • Enhancement: You can now close the 'Merge Tickets' popup by pressing the escape key
  • Bug Fix: Changing originator's email address will change their display name in the ticket too
  • Enhancement: Styling fixes made to the 'Merge Tickets' popup
Location:
nifty-desk
Files:
200 added
13 edited

Legend:

Unmodified
Added
Removed
  • nifty-desk/trunk/css/dashboard.css

    r1535609 r1592607  
     1#wpcontent {
     2    padding-left:0 !important;
     3}
     4.wrap { margin: 0 !important;}
     5
     6.ui-tabs-panel {
     7    /* padding-left: 0 !important; */
     8    padding-right: 0 !important;
     9    margin-top:0 !important;
     10    padding:0 !important;
     11        border-top: 1px solid #eee;
     12}
     13#nifty_desk_tabs_ul {
     14    margin:0;
     15}
     16.ui-tabs-nav li { margin-bottom:0 !important; }
     17
    118a{
    219    color: #303E47;
     
    421}
    522
     23
     24.bold {
     25    font-weight:bold;
     26
     27}
     28.grey {
     29    color:#666;
     30}
     31.italic {
     32    font-style:italic;
     33
     34}
    635a:hover{
    736    color: #303E47;
     
    113142}
    114143.ui-tabs-nav li:first-child {
    115     margin-left: 16px;
     144    /*margin-left: 16px;*/
    116145}
    117146
     
    563592.ui-tabs-panel {
    564593    background: white;
    565     margin-top: -19px !important;
    566     padding: 13px;
     594    /*margin-top: -19px !important; */
     595    /* padding: 13px; */
    567596}
    568597
     
    715744    left: 20px;
    716745    right: 20px;
    717     top: 280px;
     746    top: 330px;
    718747}
    719748#nifty_desk_prompt_content {
     
    745774    bottom: 0;
    746775    width:0px;
    747     height: 300px;
     776    height: 330px;
    748777    background-color: #fff;
    749778    z-index: 10001;
     
    851880
    852881
    853 @media screen and (max-width:1500px) {
     882@media screen and (max-width:1600px) {
    854883    td.ticket_responses { display: none; }
    855884    .ticket_title { max-width:250px; }
     
    893922    height:30px;
    894923}
     924
     925.nifty_desk_seen_list {
     926    opacity: 0.6;
     927    display: inline-block;
     928    width: 15px;
     929    text-align: center;
     930    font-size: 10px;
     931    line-height: 15px;
     932    padding: 0px;
     933    border-radius: 2px;
     934}
     935
     936.nifty_desk_sentiment_block {
     937    opacity: 0.6;
     938    display: inline-block;
     939    text-align: center;
     940    font-size: 10px;
     941    line-height: 15px;
     942    padding: 0px;
     943    padding-left:2px;
     944    padding-right:2px;
     945    border-radius: 2px;
     946}
     947.sent_neutral {
     948    background-color: #666666;
     949    color: #FFF;
     950}
     951
     952.sent_happy {
     953    background-color: #80af74;
     954    color:#FFF;
     955}
     956.sent_very_happy {
     957    background-color: #2e9c12;
     958    color:#FFF;
     959}
     960.sent_very_unhappy {
     961    background-color: #b70000;
     962    color:#fff;
     963}
     964.sent_unhappy {
     965    background-color: #b5626a;
     966    color:#FFF;
     967}
  • nifty-desk/trunk/includes/settings-page.php

    r1535609 r1592607  
    11<?php
    22$nifty_desk_settings = get_option("nifty_desk_settings");
    3 /*
    4 
    5 
    6 $notification_array = array();
    7 $notification_array[1] = 'nick@codecabin.co.za';
    8 $notification_array[7] = 'sales@wp-livechat.com';
    9 $notification_array[9] = 'nick2@codecabin.co.za';
    10 
    11 $notification_array = apply_filters("nifty_filter_notification_email_array",$nifty_desk_settings,$notification_array);
    12 var_dump($notification_array);
    13 exit();
    14 */
    15 
    163
    174$st_notification = get_option("nifty_desk_notifications");
    185$nifty_desk_ajax_nonce = wp_create_nonce("nifty_desk");
     6
     7
     8
    199
    2010if(function_exists('nifty_desk_pro_activate')){
     
    738728
    739729          </div>
     730        </div>
    740731
    741732      <?php } ?>
  • nifty-desk/trunk/js/dashboard.js

    r1535609 r1592607  
    88var nifty_desk_offset = 0;
    99var nifty_desk_rotate_degree = 0, rotate_timer, nifty_desk_is_refreshing;
     10
     11var current_nd_ajax;
    1012
    1113jQuery(document).ready(function(){
     
    4850        view_type = 1;
    4951        nifty_desk_fetch_tickets_by_view(view_type,nifty_desk_limit,0,0,false,false,false);
    50     }
    51 
     52    }   
    5253
    5354});
     
    174175
    175176
    176             jQuery.post( ajaxurl, data, function(response){
     177            current_nd_ajax = jQuery.post( ajaxurl, data, function(response){
    177178                response = JSON.parse(response);
    178179
     
    746747
    747748    var current_ticketid = jQuery(this).attr("tid");
     749    if (typeof current_ticketid == "undefined" || parseInt(current_ticketid) < 1) {
     750        alert("No ticket ID found. Cannot send message");
     751        return;
     752    }
     753
     754    var agent_id = jQuery("#nifty_desk_agent_id_"+current_ticketid).val();
     755    if (typeof agent_id == "undefined" || parseInt(agent_id) < 1) {
     756        alert("No agent ID found. Cannot send message");
     757        return;
     758    }
     759
    748760    jQuery("#submit_ticket_response_"+current_ticketid).attr('disabled', 'disabled');
    749761
     
    755767    formData.append('parent', current_ticketid);
    756768    formData.append('content', jQuery("#nifty_desk_db_response_textarea_"+current_ticketid).val());
    757     formData.append('title', jQuery("#nifty_desk_response_title_"+ticket_id).val());
    758     formData.append('author', jQuery("#nifty_desk_agent_id_"+ticket_id).val());
     769    formData.append('title', jQuery("#nifty_desk_response_title_"+current_ticketid).val());
     770    formData.append('author', agent_id);
    759771
    760772    if (typeof nifty_desk_file !== "undefined" &&  typeof nifty_desk_file[current_ticketid] !== "undefined") {
     
    800812
    801813
    802                         jQuery("#ticket_response_content_holder_"+ticket_id).prepend( response.content );
     814                        jQuery("#ticket_response_content_holder_"+current_ticketid).prepend( response.content );
    803815                        jQuery("#nifty_desk_db_response_textarea_"+current_ticketid).val('');
    804816
     
    862874    jQuery("#nifty_desk_prompt_content").html("<p>"+nifty_desk_dashboard_strings.merge_content1+"</p><p><label>"+nifty_desk_dashboard_strings.merge_label1+"</label> <input type='text' autofocus ticket_id='"+ticket_id+"' name='nifty_desk_ticket_merge_id' value='' placeholder='12345' id='nifty_desk_ticket_merge_id' /> <a href='javascript:void(0);' class='button button-secondary'>"+nifty_desk_dashboard_strings.merge_button1+"</a></p>");
    863875    jQuery("#nifty_desk_prompt_content").prepend("<input type='hidden' id='nifty_desk_ticket_id_merge_id' value='"+ticket_id+"' />");
    864     jQuery("#nifty_desk_prompt_content").append("<div id='nifty_desk_ticket_merge_preview' style='display:none !important; border:1px solid #ccc; padding:5px; width:100%;'></div>");
     876    jQuery("#nifty_desk_prompt_content").append("<div id='nifty_desk_ticket_merge_preview' style='display:none !important; border:1px solid #ccc; padding:5px; width:100%; height:150px; overflow-y: auto;'></div>");
    865877
    866878    jQuery(".nifty_desk_prompt_close").html(nifty_desk_dashboard_strings.merge_cancel);
     
    11431155    jQuery(".nifty_desk_loader_placeholder").html("<img src='"+nifty_desk_db_plugins_url+"/nifty-desk/images/ajax-loader.gif' class='nifty_desk_loader' />");
    11441156    //jQuery(".nifty_desk_db_ticket_container tbody").html("<tr><td colspan='11'><img src='"+nifty_desk_db_plugins_url+"/nifty-desk/images/ajax-loader.gif' style='display: block; margin: 0 auto;' class='nifty_desk_loader' /></td></tr>");
     1157   
     1158    // abort any current ajax requests so they dont overlap
     1159    if (typeof current_nd_ajax !== "undefined" && typeof current_nd_ajax.abort !== "undefined") { current_nd_ajax.abort(); }
    11451160
    11461161    url = document.URL ;
     
    11691184    }
    11701185
    1171     jQuery.post( ajaxurl, data, function(response){
    1172         response = JSON.parse(response);
    1173 
     1186    current_nd_ajax = jQuery.post( ajaxurl, data, function(response){
     1187        response = JSON.parse(response);       
    11741188        if (typeof response.counts !== "undefined") {
    11751189            /* update ticket counts.. */
    11761190            jQuery.each( response.counts, function( index, value ){
     1191                // console.log(index);
     1192                // console.log(value);
    11771193                jQuery("#nifty_desk_view_count_"+index).html(value);
    11781194            });
     
    12101226   
    12111227}
     1228
     1229jQuery(document).keyup(function(e) {
     1230
     1231    if (e.keyCode == 27){
     1232        jQuery(".nifty_desk_prompt_close").click();
     1233    }
     1234
     1235});
  • nifty-desk/trunk/js/widgets.js

    r1535609 r1592607  
    4242                console.log(response);
    4343            }
    44 
     44           
    4545            if (typeof response.user_email !== "undefined") {
    4646                jQuery(".ticket_originator_change_btn_"+tid).remove();
     
    5353                jQuery(".nifty_author_email_"+tid).html(response.user_email);
    5454                jQuery(".ticket_originator_"+tid).html(response.user_email);
     55                jQuery(".author_display_name_"+tid).html(response.user_name);
    5556
    5657
  • nifty-desk/trunk/modules/api/nifty-desk-api-functions.php

    r1535609 r1592607  
    4848                               
    4949                                if(function_exists('send_automated_emails')) {
    50                                     send_automated_emails($email,__('Your support desk log in details','nifty_desk'), __("Login URL:","nifty_desk"). " ". wp_login_url(). " <br/><br/> ".__("Username:","nifty_desk"). " ".$username. " <br/><br/> ".__("Password:","nifty_desk")." ".$random_password,$channel['id'],$post_id);   
     50                                    //send_automated_emails($email,__('Your support desk log in details','nifty_desk'), __("Login URL:","nifty_desk"). " ". wp_login_url(). " <br/><br/> ".__("Username:","nifty_desk"). " ".$username. " <br/><br/> ".__("Password:","nifty_desk")." ".$random_password,$channel['id'],$post_id);   
    5151                                }           
    5252                            }
     
    7878                                add_post_meta($post_id, 'ticket_public', '', true);
    7979                            }
    80 
     80 
    8181
    8282                            if (isset($_POST['nifty_desk_submit_priority'])) {
     
    9191                            }
    9292
    93                             if (!isset($custom_fields['ticket_assigned_to'])) {
    94                                 if (!get_option("nifty_desk_default_assigned_to")) {
    95                                     $super_admins = get_super_admins();
    96                                     $user = get_user_by('slug', $super_admins[0]);
    97                                     if(is_object($user))
    98                                     {
    99                                         add_option('nifty_desk_default_assigned_to', $user->ID);
    100                                     }
    101                                 }
    102                                 $default_user = get_option("nifty_desk_default_assigned_to");
    103                                 add_post_meta($post_id, 'ticket_assigned_to', $default_user, true);
    104                             } else {
    105                                 add_post_meta($post_id, 'ticket_assigned_to', '', true);
    106                             }
    107                             update_post_meta( $parent_id, 'ticket_last_updated', current_time('timestamp'));
     93                            $assigned_to = apply_filters("nifty_desk_assigned_to_new_ticket",false);
     94                            if ($assigned_to) {
     95                                update_post_meta( $post_id, 'ticket_assigned_to', $assigned_to);
     96                            }
     97                           
     98                            update_post_meta( $post_id, 'ticket_last_updated', current_time('timestamp'));
    10899
    109100                            add_post_meta($post_id, 'ticket_origin', 'api', true);
  • nifty-desk/trunk/modules/dashboard-ajax.php

    r1535609 r1592607  
    472472
    473473            $ticket_subject = $post->post_title;
    474             $ticket_content = $post->post_content;         
     474            $ticket_content = stripslashes( $post->post_content );         
    475475           
    476476            $ticket_actual_date = $post->post_date;
     
    709709
    710710            $ret .= "<div class='ticket_container'>";
     711
     712            $ret .= apply_filters("nifty_desk_filter_warning_control","",$ticket_id);
    711713           
    712714            $ret .= nifty_desk_output_ticket_actions($ticket_id);
     
    721723            $ret .= "           <div class='ticket_subject'>$ticket_subject </div>";
    722724
    723             $ret .= "           <div class='ticket_author'><span class='author_name'>$ticket_author_name (<a class='nifty_author_email_".$ticket_id."' href='mailto:".$ticket_author_email."'>".$ticket_author_email."</a>)</span> | <span title='".$ticket_actual_date."'>".$ticket_request_date."</span> | <div class='ticket_id_label'>".__('Ticket #', 'nifty_desk')."$ticket_id</div> <a href='".admin_url('admin.php?page=support-tickets&tid='.$ticket_id)."' target='_BLANK' class='nifty_desk_view_front_end' title='".$ticket_subject."'>".__("Back end link","nifty_desk")."</a> | <a href='".get_permalink($ticket_id)."' target='_BLANK' class='nifty_desk_view_front_end' title='".$ticket_subject."'>".__("Front end link","nifty_desk")."</a></div>";
     725            $ret .= "           <div class='ticket_author'><span class='author_name'><span class='author_display_name_".$ticket_id."'>$ticket_author_name</span> (<a class='nifty_author_email_".$ticket_id."' href='mailto:".$ticket_author_email."'>".$ticket_author_email."</a>)</span> | <span title='".$ticket_actual_date."'>".$ticket_request_date."</span> | <div class='ticket_id_label'>".__('Ticket #', 'nifty_desk')."$ticket_id</div> <a href='".admin_url('admin.php?page=support-tickets&tid='.$ticket_id)."' target='_BLANK' class='nifty_desk_view_front_end' title='".$ticket_subject."'>".__("Back end link","nifty_desk")."</a> | <a href='".get_permalink($ticket_id)."' target='_BLANK' class='nifty_desk_view_front_end' title='".$ticket_subject."'>".__("Front end link","nifty_desk")."</a></div>";
    724726
    725727            $ret .= "       </div>";
     
    753755            $nifty_desk_tags = nifty_desk_get_allowed_tags();
    754756            //$ret .= wp_kses(utf8_decode($ticket_content),$nifty_desk_tags);
    755             $ret .= wp_kses($ticket_content,$nifty_desk_tags);
     757            $ret .= wp_kses(nifty_desk_normalize(html_entity_decode($ticket_content)),$nifty_desk_tags);
    756758
    757759
     
    971973                $response_contents .= " </div>";               
    972974                $response_contents .= "     <div class='ticket_contents ticket_contents_response'>";
    973                 $response_contents .= nl2br($content_current);
     975                $response_contents .= nl2br( stripslashes( $content_current ) );
    974976
    975977                $ticket_attachments = maybe_unserialize(get_post_custom_values('ticket_attachments', $post_id));
     
    11341136            /* SEARCH FOR A TICKET NUMBER FIRST */
    11351137            global $wpdb;
    1136             $search_id = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE ID = '$query' AND post_type = 'nifty_desk_tickets' AND post_status = 'publish' ");
    1137 
     1138
     1139            $search_query = "SELECT * FROM $wpdb->posts WHERE ID = '$query' AND post_type = 'nifty_desk_tickets' AND post_status = 'publish' ";
     1140
     1141            if (strpos($query, "@") !== false) {               
     1142                $split = explode("@", $query);             
     1143                if (strpos($split['1'], ".") !== false) {                   
     1144                    $user_data = get_user_by( "email", sanitize_email( $query ) );                                     
     1145                    $search_query = "SELECT * FROM $wpdb->posts WHERE post_author = '".$user_data->ID."' AND post_type = 'nifty_desk_tickets' AND post_status = 'publish' ";                   
     1146                }
     1147            }
     1148               
     1149            $search_id = $wpdb->get_results( $search_query );                       
    11381150            $ret = "";
    11391151
     
    11481160
    11491161                    $ticket_id = $search->ID;
     1162
     1163
     1164                    $post_meta = get_post_meta($ticket_id);
     1165
     1166                    if (isset($post_meta['ticket_channel_id'])) {
     1167
     1168                        $ticket_channel = $post_meta['ticket_channel_id'][0];
     1169                        if (function_exists('nifty_desk_get_ticket_channel_name')) {
     1170
     1171                            $ticket_channel_id = $ticket_channel;
     1172                            $channel_name_full = nifty_desk_get_ticket_channel_name($ticket_channel);
     1173                            $channel_name = $channel_name_full;
     1174
     1175                        } else {
     1176                            $ticket_channel_id = 0;
     1177                            $channel_name_full = __('Support Desk','nifty_desk');
     1178                            $channel_name = __('s.desk','nifty_desk');
     1179                        }
     1180                    } else {
     1181                        $ticket_channel_id = 0;
     1182                        $channel_name_full = __('Support Desk','nifty_desk');
     1183                        $channel_name = __('s.desk','nifty_desk');
     1184                    }
     1185
     1186                   
    11501187                    $nifty_desk_status = get_post_custom_values('ticket_status', intval( $search->ID ), true);
    11511188                    if ($nifty_desk_status) {
     
    11631200                    $data = nifty_desk_get_last_response( intval( $search->ID ) );
    11641201
    1165                     if (isset($data->post_author)) {
    1166                         $author = $data->post_author;
     1202                    if (isset($search->post_author)) {
     1203                        $author = $search->post_author;
    11671204                        if ($author) {
    11681205                            $author_data = get_userdata( intval( $author ) );
     1206
    11691207                            $author_name = $author_data->display_name;
    11701208                            $author_email = $author_data->user_email;
     
    11721210                            $last_responder .= $author_data->display_name;
    11731211
    1174                             $last_responder .= "<br /><small>" . nifty_desk_time_elapsed_string(strtotime($data->post_date)) . "</small>";
     1212                            $last_responder .= "<br /><small>" . nifty_desk_time_elapsed_string(strtotime($search->post_date)) . "</small>";
    11751213                        } else {
    11761214                            $last_responder .= "-";
    11771215                        }
    1178                     } else {
     1216                    } else {   
     1217                        // $user_data = get_user_by( 'id', $search->post_at)                   
    11791218                        $last_responder .= "-";
    11801219                    }
    11811220                    $ret .= "<tr id='nifty_desk_modern_ticket_row_".$search->ID."' class='nifty_desk_modern_ticket_row'>";
    11821221                    $ret .= "<td><input type='checkbox' class='nifty_desk_checkbox' value='".$search->ID."' /></td>";
    1183                     $ret .= "<td class='nifty_desk_db_single_ticket ticket_status' ticket_id='".$ticket_id."'>" . $post_status . "</td>";
     1222                    $ret .= "<td class='nifty_desk_db_single_ticket ticket_status' ticket_id='".$ticket_id."'>" . $post_status . " ".apply_filters("nifty_desk_return_seen_tag_in_list","",$ticket_id)."</td>";
    11841223                    $ret .= "<td class='nifty_desk_db_single_ticket ticket_id' ticket_id='".$ticket_id."'>#" . $ticket_id . "</td>";
     1224                    if( function_exists( 'nifty_desk_filter_control_sa_ticket_view_list_column_body' ) ){                       
     1225                        $ret .= nifty_desk_filter_control_sa_ticket_view_list_column_body( "", $ticket_id, $post_meta);
     1226                    } else {
     1227                        $ret .= "<td class='nifty_desk_db_single_ticket'>&nbsp;</td>";
     1228                    }                   
    11851229                    $ret .= "<td class='nifty_desk_db_single_ticket ticket_title' ticket_id='".$search->ID."' >" . $search->post_title . "</td>";
    11861230                    $ret .= "<td class='nifty_desk_db_single_ticket ticket_author' ticket_id='".$search->ID."' title='".$author_email."'>" . $author_name . "</td>";
     
    11891233                    $ret .= "<td class='nifty_desk_db_single_ticket ticket_responses' ticket_id='".$search->ID."'>" . $response_count . "</td>";
    11901234                    $ret .= "<td class='nifty_desk_db_single_ticket ticket_responser' ticket_id='".$search->ID."'>" . $last_responder . "</td>";
    1191                     $ret .= "<td class='nifty_desk_db_single_ticket ticket_status' ticket_id='".$search->ID."'>" . $post_status . "</td>";
    1192                     $ret .= "<td class='nifty_desk_db_single_ticket ticket_owner' ticket_id='".$ticket_id."'>" . $user_data->display_name . "</td>";
    1193                     $ret .= "<td class='nifty_desk_db_single_ticket ticket_channel' ticket_id='".$ticket_id."'>" . $channel_name . "</td>";                         
     1235                    $ret .= "<td class='nifty_desk_db_single_ticket ticket_owner' ticket_id='".$ticket_id."'>" . $author_name . "</td>";
     1236                    $ret .= "<td class='nifty_desk_db_single_ticket ticket_channel' ticket_id='".$ticket_id."'>" . nifty_desk_return_ticket_channel_html_block($channel_name,$ticket_channel_id,$channel_name_full) . "</td>";
    11941237                    $ret .= "</tr>";   
    11951238
  • nifty-desk/trunk/modules/dashboard.php

    r1535609 r1592607  
    8787                                                <td class='ticket_status_clause nifty_desk_sortby' sortbytype='meta' sortbyvalue='ticket_status' sortby='ASC'>&nbsp;</td>
    8888                                                <td class='ID nifty_desk_sortby' sortbytype='default' sortbyvalue='ticket_id' sortby='ASC'><?php _e("ID","nifty_desk_"); ?></td>
     89                                                <?php echo apply_filters("nifty_desk_ticket_view_list_column_header",""); ?>
    8990                                                <td class='title nifty_desk_sortby' sortbytype='default' sortbyvalue='ticket_title' sortby='ASC'><?php _e('Subject', 'nifty_desk'); ?></td>
    9091                                                <td class='author nifty_desk_sortby' sortbytype='default' sortbyvalue='ticket_author' sortby='ASC'><?php _e('Requester', 'nifty_desk'); ?></td>
  • nifty-desk/trunk/modules/email.php

    r1535609 r1592607  
    123123
    124124    $content = str_replace("{reply_above_line}",apply_filters("nifty_desk_email_body_user_ticket_reply_above_line",""),$content);
    125     if (isset($data['ticket_reference'])) { $content = str_replace("{ticket_reference}",apply_filters("nifty_desk_email_body_ticket_reference","",$data['ticket_reference'],$data['response_id']),$content); }
     125    if ( isset( $data['ticket_reference'] ) ) {
     126        if( isset( $data['response_id'] ) ){
     127            $content = str_replace("{ticket_reference}",apply_filters("nifty_desk_email_body_ticket_reference","",$data['ticket_reference'],$data['response_id']),$content);
     128        } else {
     129            $content = str_replace("{ticket_reference}",apply_filters("nifty_desk_email_body_ticket_reference","",$data['ticket_reference'],""),$content);
     130        }       
     131    }
    126132
    127133    return $content;
  • nifty-desk/trunk/modules/reporting-ajax.php

    r1535609 r1592607  
    77        if ($_POST['action'] == 'nifty_desk_rep_update_stats') {
    88            if(isset($_POST['payload']['nifty_desk_rep_period'])){
    9                 $return_data = nifty_desk_get_tickets_for_period(intval(sanitize_text_field($_POST['payload']['nifty_desk_rep_period'])), sanitize_text_field( $_POST['payload']) );
     9                $return_data = nifty_desk_get_tickets_for_period(intval(sanitize_text_field($_POST['payload']['nifty_desk_rep_period'])), $_POST['payload'] );
    1010                echo json_encode($return_data);
    1111                wp_die();
  • nifty-desk/trunk/modules/views.php

    r1545853 r1592607  
    11<?php
    22
     3
     4
    35add_action("nifty_desk_view_control","nifty_desk_hook_control_view_control",10);
     6
    47function nifty_desk_hook_control_view_control() {
     8
    59    $current_views = get_option("nifty_desk_views");
     10
    611    echo '<ul class="nifty_desk_db_controls">';
     12
    713    foreach ($current_views as $key => $view) {
     14
    815        echo '<li><a href="javascript:void(0)" class="nifty_desk_view_control" id="nifty_desk_view_control_'.$key.'" view="'.$key.'"><span class="nifty_desk_view_control_ticket_name" id="nifty_desk_view_control_ticket_name_'.$key.'">'.$view['title'].'</span><span class="nifty_desk_view_control_ticket_count" id="nifty_desk_view_count_'.$key.'"">'.nifty_desk_ticket_count_by_view($key).'</span></a></li>';
     16
    917    }
     18
    1019    echo '</ul>';
     20
    1121}
    1222
     23
     24
    1325function nifty_desk_ticket_count_by_view($key) {
    1426
    15     $check = json_decode(nifty_desk_get_tickets_by_view($key,0,1,false));
     27
     28
     29    $check = json_decode(nifty_desk_get_tickets_by_view($key,0,1,0,false,false,false,false,true));
     30
    1631    return $check->cnt;
     32
    1733}
    1834
    1935
    20 function nifty_desk_get_tickets_by_view($view,$offset = 0,$limit = 20,$return_all_counts = 0,$sortbytype = false,$sortbyvalue = false,$sortby = false,$search_string = false) {
     36
     37
     38
     39function nifty_desk_get_tickets_by_view($view, $offset = 0, $limit = 20, $return_all_counts = 0, $sortbytype = false, $sortbyvalue = false, $sortby = false, $search_string = false, $just_count = false) {
     40
    2141    $return_all_counts = intval($return_all_counts);
    2242
     43
     44
    2345    $orderby = 'date';
     46
    2447    $order = 'DESC';
    2548
     49
    2650    if (!$search_string) {
     51
    2752        $current_views = get_option("nifty_desk_views");
    2853
     54
     55
    2956        if (isset($current_views[$view])) { } else {  echo "error2"; wp_die(); }
    3057
     58
     59
    3160        $orderby = $current_views[$view]['data']['orderby'];
     61
    3262        if (!isset($current_views[$view]['data']['channel'])) {
     63
    3364            $channel = false;
     65
    3466        } else {
     67
    3568            $channel = $current_views[$view]['data']['channel'];
    36         }
     69
     70        }
     71
    3772       
     73
    3874        $order = $current_views[$view]['data']['order'];
     75
    3976        $priority = $current_views[$view]['data']['priority'];
     77
    4078        if (isset($current_views[$view]['data']['department'])) { $department = $current_views[$view]['data']['department']; } else { $department = false; }
     79
    4180        if (!isset($current_views[$view]['data']['status'])) {
     81
    4282            /* if a user created a view and selected no statuses, select all by default now  */
     83
    4384            $status = array(
     85
    4486                0 => true,
     87
    4588                1 => true,
     89
    4690                2 => true,
     91
    4792                3 => true,
     93
    4894                9 => true
     95
    4996                );
     97
    5098        } else {
     99
    51100            $status = $current_views[$view]['data']['status'];
    52         }
     101
     102        }
     103
    53104        $agents = $current_views[$view]['data']['agents'];
     105
    54106    }
     107
    55108   
     109
    56110   
    57111
     112
     113
    58114    $department_string = "";
    59115
     116
     117
    60118    $and_relation = array("relation" => "AND");
    61119
     
    64122
    65123
     124
     125
     126
     127
     128
     129
    66130    $meta_query = array();
    67131
     132
     133
    68134    if (!$search_string) {
     135
    69136        if (count($status) > 1) {
     137
    70138            $status_meta_query = array("relation" => "OR");
    71139
     140
     141
    72142            /* multiple status values requested */
     143
    73144            $cnter = 0;
     145
    74146            foreach ($status as $key => $status_val) {
    75147
     148
     149
    76150                if ((string)$key == "-1") {
     151
    77152                    /* Unassigned statuses */
     153
    78154                    $status_meta_query_sub = array(
     155
    79156                        'key'     => 'ticket_status',
     157
    80158                        'compare' => 'NOT EXISTS',
     159
    81160                    );
    82161
     162
     163
    83164                } else {
     165
    84166                    $status_meta_query_sub = array(
     167
    85168                        'key'     => 'ticket_status',
     169
    86170                        'value'   => (string)$key,
     171
    87172                        'compare' => '=',
     173
    88174                    );
     175
    89176                }
     177
    90178                array_push($status_meta_query,$status_meta_query_sub);
     179
    91180            }
     181
    92182           
     183
    93184           
     185
    94186        } else {
     187
    95188            /* single status value requested */
     189
    96190            if ((string)key($status) == "-1") {
     191
    97192                /* Unassigned statuses */
     193
    98194                $status_meta_query = array(
     195
    99196                    'key'     => 'ticket_status',
     197
    100198                    'compare' => 'NOT EXISTS',
     199
    101200                );
    102201
     202
     203
    103204            } else {
     205
    104206                $status_meta_query = array(
     207
    105208                    'key'     => 'ticket_status',
     209
    106210                    'value'   => (string)key($status),
     211
    107212                    'compare' => '=',
     213
    108214                );
     215
    109216            }
     217
    110218           
    111         }
     219
     220        }
     221
    112222       
     223
    113224        if ($department) {
    114225
     226
     227
    115228            $cnter = 0;
     229
    116230            foreach ($department as $key => $department_val) {
     231
    117232                if ($cnter == 0) {
     233
    118234                    $department_string = $key;
     235
    119236                } else {
     237
    120238                    $department_string = $department_string.",".$key;
     239
    121240                }
     241
    122242                $cnter++;
     243
    123244            }
    124         }
     245
     246        }
     247
    125248       
    126249
    127250
    128251
     252
     253
     254
     255
    129256        if ($priority > 0) {
    130257
     258
     259
    131260            if (count($priority) > 1) {
     261
    132262                $priority_meta_query = array("relation" => "OR");
    133263
     264
     265
    134266                /* multiple priority values requested */
     267
    135268                $cnter = 0;
     269
    136270                foreach ($priority as $key => $priority_val) {
     271
    137272                    if ((string)$key == "0") {
     273
    138274                        /* all priorities, so just ignore this meta query build subset */
     275
    139276                        /* set $priority to zero so that we do not include this meta query sub build */
     277
    140278                        $priority = 0;
     279
    141280                        break;
    142281
    143282
     283
     284
     285
    144286                    } else if ((string)$key == "-1") {
     287
    145288                        /* Unassigned tickets */
     289
    146290                        $priority_meta_query_sub = array(
     291
    147292                            'key'     => 'ticket_priority',
     293
    148294                            'compare' => 'NOT EXISTS',
     295
    149296                        );
    150297
     298
     299
    151300                    } else {
     301
    152302                        $priority_meta_query_sub = array(
     303
    153304                            'key'     => 'ticket_priority',
     305
    154306                            'value'   => (string)$key,
     307
    155308                            'compare' => '=',
     309
    156310                        );
     311
    157312                    }
     313
    158314                    array_push($priority_meta_query,$priority_meta_query_sub);
     315
    159316                }
     317
    160318               
     319
    161320               
     321
    162322            } else {
     323
    163324                /* single priority value requested */
     325
    164326                if ((string)key($priority) == "0") {
     327
    165328                    /* all agents, so just ignore this meta query build subset */
     329
    166330                } else if ((string)key($priority) == "-1") {
     331
    167332                    /* Unassigned tickets */
     333
    168334                    $priority_meta_query = array(
     335
    169336                        'key'     => 'ticket_priority',
     337
    170338                        'compare' => 'NOT EXISTS',
     339
    171340                    );
    172341
     342
     343
    173344                } else {
    174345
     346
     347
    175348                    $priority_meta_query = array(
     349
    176350                                'key'     => 'ticket_priority',
     351
    177352                                'value'   => (string)key($priority),
     353
    178354                                'compare' => '=',
     355
    179356                            );
     357
    180358                }
     359
    181360                $include_priority = true;
     361
    182362            }
    183         }
     363
     364        }
     365
     366
    184367
    185368        if ($agents > 0) {
    186369
     370
     371
    187372            if (count($agents) > 1) {
    188373
     374
     375
    189376                $agent_meta_query = array("relation" => "OR");
    190377
     378
     379
    191380                /* multiple agent values requested */
     381
    192382                $cnter = 0;
     383
    193384                foreach ($agents as $key => $agents_val) {
     385
    194386                    if ((string)$key == "0") {
     387
    195388                        /* all agents, so just ignore this meta query build subset */
     389
    196390                        /* set $agents to zero so that we do not include this meta query sub build */
     391
    197392                        $agents = 0;
     393
    198394                        break;
    199395
    200396
     397
     398
     399
    201400                    } else if ((string)$key == "-1") {
     401
    202402                        /* Unassigned tickets */
     403
    203404                        $agent_meta_query_sub = array(
     405
    204406                            'key'     => 'ticket_assigned_to',
     407
    205408                            'compare' => 'NOT EXISTS',
     409
    206410                        );
    207411
     412
     413
    208414                    } else if ((string)$key == "current_agent") {
     415
    209416                        /* Tickets for this current user only */
     417
    210418                        $agent_meta_query_sub = array(
     419
    211420                            'key'     => 'ticket_assigned_to',
     421
    212422                            'value'   => get_current_user_id(),
     423
    213424                            'compare' => '=',
    214425
     426
     427
    215428                        );
    216429
    217430
     431
     432
     433
    218434                    } else {
     435
    219436                        $agent_meta_query_sub = array(
     437
    220438                            'key'     => 'ticket_assigned_to',
     439
    221440                            'value'   => (string)$key,
     441
    222442                            'compare' => '=',
     443
    223444                        );
     445
    224446                    }
     447
    225448                    array_push($agent_meta_query,$agent_meta_query_sub);
     449
    226450                }
     451
    227452               
     453
    228454               
     455
    229456            } else {
    230457
     458
     459
    231460                /* single priority value requested */
     461
    232462                if ((string)key($agents) == "0") {
     463
    233464                    /* all agents, so just ignore this meta query build subset */
     465
    234466                } else if ((string)key($agents) == "-1") {
     467
    235468                    /* Unassigned tickets */
     469
    236470                    $agent_meta_query = array(
     471
    237472                        'key'     => 'ticket_assigned_to',
     473
    238474                        'compare' => 'NOT EXISTS',
     475
    239476                    );
    240477
     478
     479
    241480                } else if ((string)key($agents) == "current_agent") {
    242481
     482
     483
    243484                    /* Tickets for this current user only */
     485
    244486                    $agent_meta_query = array(
     487
    245488                        'key'     => 'ticket_assigned_to',
     489
    246490                        'value'   => get_current_user_id(),
     491
    247492                        'compare' => '=',
    248493
     494
     495
    249496                    );
    250497
    251498
     499
     500
     501
    252502                }
     503
    253504                else {
     505
    254506                    $agent_meta_query = array(
     507
    255508                                'key'     => 'ticket_assigned_to',
     509
    256510                                'value'   => (string)key($agents),
     511
    257512                                'compare' => '=',
     513
    258514                            );
     515
    259516                    $include_agent = true;
     517
    260518                }
     519
    261520            }
    262         }
     521
     522        }
     523
    263524   
    264525
     526
     527
    265528        if ($priority > 0 || $agents > 0) {
    266529
    267530
     531
     532
     533
    268534            $meta_query = array("relation" => "AND");
     535
    269536            $meta_query['status_query_clause'] = $status_meta_query;
     537
    270538            //array_push($meta_query,$status_meta_query);
     539
    271540           
     541
    272542            if ($priority) {
     543
    273544                $meta_query['priority_query_clause'] = $priority_meta_query;
     545
    274546                //array_push($meta_query,$priority_meta_query);
     547
    275548            }
     549
    276550            if ($agents) {
     551
    277552                $meta_query['agent_query_clause'] = $agent_meta_query;
     553
    278554                //array_push($meta_query,$agent_meta_query);
     555
    279556            }
    280557
     558
     559
    281560        } else {
     561
    282562            /* one line query, do not use AND or OR */
     563
    283564            $meta_query = array("relation" => "AND");
     565
    284566           
    285567
    286568
     569
     570
     571
    287572            $meta_query['status_query_clause'] = $status_meta_query;
    288573
    289574
    290         }
     575
     576
     577
     578        }
     579
    291580    }   
    292581
    293582
    294583
     584
     585
     586
     587
    295588    global $wpdb;
     589
    296590    //$meta_sql = get_meta_sql( $meta_query, 'post', $wpdb->posts, 'ID' );
    297591
    298592
     593
     594
     595
    299596    //echo $required_action;
    300597
     598
     599
    301600    $ret = "";
    302601
    303602
     603
     604
     605
    304606    /* limit is set to $limit+1 here because we are actively seeking if there are more posts than what has been asked for, if true, then we can let the JS know that it can keep the "next" button active. */
    305607
     608
     609
    306610    $posts_per_page_default = get_option("posts_per_page");
    307611
     612
     613
    308614    update_option("posts_per_page",$limit+1);
    309615
     616
     617
    310618    if ($department) {
    311619
     620
     621
    312622        $terms = explode(",",$department_string);
     623
    313624        $terms = array_values($terms);
    314625
     626
     627
    315628        $tax_query = array(
     629
    316630            array(
     631
    317632                'taxonomy' => 'nifty_desk_departments',
     633
    318634                'field'    => 'term_id',
     635
    319636                'terms'    => $terms
     637
    320638            )
     639
    321640        );
     641
    322642        $args = array(
     643
    323644            'post_type' => 'nifty_desk_tickets',
     645
    324646            'posts_per_page ' => $limit+1,
     647
    325648            'offset' => $offset,
     649
    326650            'meta_query' => array($meta_query),
     651
    327652            'orderby' => $orderby,
     653
    328654            'order' => $order,
     655
    329656            'tax_query' => $tax_query
     657
    330658        );
     659
    331660    } else {
     661
    332662        $args = array(
     663
    333664            'post_type' => 'nifty_desk_tickets',
     665
    334666            'posts_per_page ' => $limit+1,
     667
    335668            'offset' => $offset,
     669
    336670            'meta_query' => array($meta_query),
     671
    337672            'orderby' => $orderby,
     673
    338674            'order' => $order
     675
    339676        );
     677
    340678    }
     679
    341680   
     681
    342682    if ($search_string) {
     683
    343684        $args['s'] = $search_string;
     685
    344686    }
     687
    345688   
    346689
     690
     691
    347692   
    348693
     694
     695
    349696    /* do sort by over-rides (when users click on the table headings */
     697
    350698    if ($sortbytype == 'meta')  {
     699
    351700        if ($sortbyvalue=='ticket_last_updated') {
     701
    352702            /* this is a date.. */
    353703
    354704
     705
     706
     707
    355708            $last_updated_meta_query_sub = array(
     709
    356710                'key' => 'ticket_last_updated',
     711
    357712                'compare' => "EXISTS"
    358713
     714
     715
    359716            );
     717
    360718            $meta_query['ticket_last_updated_clause'] = $last_updated_meta_query_sub;
     719
    361720            $args['orderby'] = 'ticket_last_updated_clause';
     721
    362722            $args['order'] = $sortby;
     723
    363724            $args['meta_query'] = $meta_query;
     725
    364726           
     727
    365728           
    366         }
     729
     730        }
     731
     732        if ($sortbyvalue=='ticket_sentiment') {
     733
     734            /* this is a date.. */
     735
     736
     737
     738
     739
     740            $last_updated_meta_query_sub = array(
     741
     742                'key' => 'ticket_sentiment',
     743
     744                'compare' => "EXISTS"
     745
     746
     747
     748            );
     749
     750            $meta_query['ticket_sentiment_clause'] = $last_updated_meta_query_sub;
     751
     752            $args['orderby'] = 'ticket_sentiment_clause';
     753
     754            $args['order'] = $sortby;
     755
     756            $args['meta_query'] = $meta_query;
     757
     758           
     759
     760           
     761
     762        }
     763
     764
    367765
    368766        if ($sortbyvalue=='ticket_priority') {
     767
    369768            /* this is a date.. */
     769
    370770            $priority_meta_query_sub = array(
     771
    371772                'key' => 'ticket_priority',
     773
    372774                'compare' => "EXISTS"
     775
    373776            );
     777
    374778            $meta_query['ticket_priority_clause'] = $priority_meta_query_sub;
     779
    375780            $args['orderby'] = 'ticket_priority_clause';
     781
    376782            $args['order'] = $sortby;
     783
    377784            $args['meta_query'] = $meta_query;
     785
    378786           
    379         }
     787
     788        }
     789
    380790        if ($sortbyvalue=='ticket_status') {
     791
    381792            /* this is a date.. */
     793
    382794            $status_meta_query_sub = array(
     795
    383796                'key' => 'ticket_status',
     797
    384798                'compare' => "EXISTS"
     799
    385800            );
     801
    386802            $meta_query['ticket_status_clause'] = $status_meta_query_sub;
     803
    387804            $args['orderby'] = 'ticket_status_clause';
     805
    388806            $args['order'] = $sortby;
     807
    389808            $args['meta_query'] = $meta_query;
     809
    390810           
    391         }
     811
     812        }
     813
    392814        if ($sortbyvalue=='ticket_assigned_to') {
     815
    393816            /* this is a date.. */
     817
    394818            $status_meta_query_sub = array(
     819
    395820                'key' => 'ticket_assigned_to',
     821
    396822                'compare' => "EXISTS"
     823
    397824            );
     825
    398826            $meta_query['ticket_assigned_to_clause'] = $status_meta_query_sub;
     827
    399828            $args['orderby'] = 'ticket_assigned_to_clause';
     829
    400830            $args['order'] = $sortby;
     831
    401832            $args['meta_query'] = $meta_query;
     833
    402834           
    403         }
     835
     836        }
     837
    404838        if ($sortbyvalue=='ticket_channel_id') {
     839
    405840            /* this is a date.. */
     841
    406842            $status_meta_query_sub = array(
     843
    407844                'key' => 'ticket_channel_id',
     845
    408846                'compare' => "EXISTS"
     847
    409848            );
     849
    410850            $meta_query['ticket_channel_id_clause'] = $status_meta_query_sub;
     851
    411852            $args['orderby'] = 'ticket_channel_id_clause';
     853
    412854            $args['order'] = $sortby;
     855
    413856            $args['meta_query'] = $meta_query;
     857
    414858           
     859
    415860        }   
     861
    416862    } else if ($sortbytype == 'default') {
    417863
     864
     865
    418866        if ($sortbyvalue=='ticket_id') {
     867
    419868            $args['orderby'] = 'ID';
     869
    420870            $args['order'] = $sortby;
    421         }
     871
     872        }
     873
    422874        if ($sortbyvalue=='ticket_title') {
     875
    423876            $args['orderby'] = 'title';
     877
    424878            $args['order'] = $sortby;
    425         }
     879
     880        }
     881
    426882        if ($sortbyvalue=='ticket_author') {
     883
    427884            $args['orderby'] = 'author';
     885
    428886            $args['order'] = $sortby;
    429         }
     887
     888        }
     889
    430890        if ($sortbyvalue=='ticket_created') {
     891
    431892            $args['orderby'] = 'date';
     893
    432894            $args['order'] = $sortby;
    433         }
     895
     896        }
     897
     898
    434899
    435900    }   
    436901
     902
     903
     904
     905
    437906    $my_query = new WP_Query( $args );
    438907
     908
     909
     910
     911    if ($just_count) {
     912
     913        $js = json_encode(array(
     914
     915            'cnt' => $my_query->found_posts
     916
     917            )
     918
     919        );
     920
     921        return $js;
     922
     923    }
     924
     925
     926
    439927    $ticket_counter = 0;
     928
    440929    $is_more = false;
     930
    441931    $is_less = false;
    442932
     933
     934
    443935    if ($offset > 0) { $is_less = true; } /* if we've offset anything, logically there would be previous items so set is_less to true */
    444936
     937
    445938    if ( $my_query->have_posts() ) {
    446939
     940
     941
    447942        while ( $my_query->have_posts() ) {
     943
    448944            $my_query->the_post();
     945
    449946            $ticket_id = get_the_ID();
    450947
     948
     949
     950
    451951            $post_meta = get_post_meta($ticket_id);
     952
     953
     954
     955            $post_status = nifty_desk_return_ticket_status_html_block( $post_meta['ticket_status'][0] );
     956
     957
     958            if (isset($post_meta['ticket_channel_id'])) {
     959
     960
     961
     962                $ticket_channel = $post_meta['ticket_channel_id'][0];
     963
     964                if (function_exists('nifty_desk_get_ticket_channel_name')) {
     965
     966
     967
     968                    $ticket_channel_id = $ticket_channel;
     969
     970                    $channel_name_full = nifty_desk_get_ticket_channel_name($ticket_channel);
     971
     972                    $channel_name = $channel_name_full;
     973
     974
     975
     976                } else {
     977
     978                    $ticket_channel_id = 0;
     979
     980                    $channel_name_full = __('Support Desk','nifty_desk');
     981
     982                    $channel_name = __('s.desk','nifty_desk');
     983
     984                }
     985
     986            } else {
     987
     988                $ticket_channel_id = 0;
     989
     990                $channel_name_full = __('Support Desk','nifty_desk');
     991
     992                $channel_name = __('s.desk','nifty_desk');
     993
     994            }
     995
     996            if (isset($post_meta['ticket_status'][0])) { $is_public = $post_meta['ticket_public'][0]; } else { $is_public = false; }
     997
     998            if (isset($post_meta['ticket_assigned_to'][0])) { $assigned_to = $post_meta['ticket_assigned_to'][0]; } else { $assigned_to = false; }
     999
     1000
     1001
     1002            $user_data = get_user_by('id', $assigned_to);
     1003
     1004            if (!$user_data) { $user_data = (object)[]; $user_data->display_name = "-"; }
     1005
     1006
     1007
     1008
     1009
     1010            $response_count = nifty_desk_cnt_responses( $ticket_id );
     1011
     1012
     1013            $priority = nifty_desk_return_ticket_priority_returns( $ticket_id );
     1014
     1015
     1016
     1017            $last_updated = false;
     1018
     1019            if (isset($post_meta['ticket_last_updated'][0])) {
     1020
     1021                $last_updated = $post_meta['ticket_last_updated'][0];
     1022
     1023            } else {
     1024
     1025                /* backwards compatibility - get last response date and then save it to the 'ticket_last_updated' meta */
     1026
     1027                $last_updated = nifty_desk_get_last_updated_time( $ticket_id );
     1028
     1029                if ($last_updated) {
     1030
     1031                    /* we found a response date via backwards compa, let's save it so we dont need to do that again. */
     1032
     1033                    update_post_meta( $ticket_id, 'ticket_last_updated', strtotime($last_updated));
     1034
     1035                }
     1036
     1037            }
     1038
     1039            if ($last_updated) {
     1040
     1041               
     1042
     1043                $last_updated_actual = date("Y-m-d H:i:s",intval($last_updated));
     1044
     1045                $last_updated = nifty_desk_time_elapsed_string($last_updated);
     1046
     1047            } else {
     1048
     1049                $last_updated_actual = '-';
     1050
     1051                $last_updated = "-";
     1052
     1053            }
     1054
     1055
     1056
     1057            $author_id = get_the_author_meta('ID');
     1058
     1059            $user_info = get_userdata($author_id);
     1060
     1061
     1062
     1063
     1064
     1065            $author_name = $user_info->display_name;
     1066
     1067            $author_email = $user_info->user_email;
     1068
     1069
     1070
     1071
     1072
    4521073           
    453             if( isset( $post_meta['ticket_status'] ) ){ $nd_ticket_status = $post_meta['ticket_status'][0]; } else { $nd_ticket_status = null; }
    454 
    455             $post_status = nifty_desk_return_ticket_status_html_block( $nd_ticket_status );
    456 
    457             if (isset($post_meta['ticket_channel_id'])) {
    458 
    459                 $ticket_channel = $post_meta['ticket_channel_id'][0];
    460                 if (function_exists('nifty_desk_get_ticket_channel_name')) {
    461 
    462                     $ticket_channel_id = $ticket_channel;
    463                     $channel_name_full = nifty_desk_get_ticket_channel_name($ticket_channel);
    464                     $channel_name = $channel_name_full;
    465 
    466                 } else {
    467                     $ticket_channel_id = 0;
    468                     $channel_name_full = __('Support Desk','nifty_desk');
    469                     $channel_name = __('s.desk','nifty_desk');
    470                 }
     1074
     1075            $ticket_counter++;
     1076
     1077            if ($ticket_counter <= $limit) {
     1078
     1079
     1080
     1081
     1082
     1083                $ret .= "<tr id='nifty_desk_modern_ticket_row_".$ticket_id."' class='nifty_desk_modern_ticket_row'>";
     1084
     1085                $ret .= "<td class='ticket_checkbox'><input type='checkbox' class='nifty_desk_checkbox' value='".$ticket_id."' /></td>";
     1086
     1087                $ret .= "<td class='nifty_desk_db_single_ticket ticket_status' ticket_id='".$ticket_id."'>" . $post_status . " ".apply_filters("nifty_desk_return_seen_tag_in_list","",$ticket_id)."</td>";
     1088
     1089                $ret .= "<td class='nifty_desk_db_single_ticket ticket_id' ticket_id='".$ticket_id."'>#" . $ticket_id . "</td>";
     1090
     1091                $ret .= apply_filters("nifty_desk_ticket_view_list_column_body","",$ticket_id,$post_meta);
     1092
     1093                $ret .= "<td class='nifty_desk_db_single_ticket ticket_title' ticket_id='".$ticket_id."' ><span title='".get_the_title()."'>" . get_the_title() . "</span></td>";
     1094
     1095                $ret .= "<td class='nifty_desk_db_single_ticket ticket_author' ticket_id='".$ticket_id."'><span title='".$author_email."'>" . $author_name . "</span></td>";
     1096
     1097                $ret .= "<td class='nifty_desk_db_single_ticket ticket_date' ticket_id='".$ticket_id."'><span title='".date("Y-m-d H:i:s",get_the_date('U'))."'>".nifty_desk_time_elapsed_string(get_the_time('U')) . "</span></td>";
     1098
     1099                $ret .= "<td class='nifty_desk_db_single_ticket ticket_updated' ticket_id='".$ticket_id."'><span title='".$last_updated_actual."'>" . $last_updated . "</span></td>";
     1100
     1101                $ret .= "<td class='nifty_desk_db_single_ticket ticket_priority' ticket_id='".$ticket_id."'>" . $priority . "</td>";
     1102
     1103                $ret .= "<td class='nifty_desk_db_single_ticket ticket_responses' ticket_id='".$ticket_id."'>" . $response_count . "</td>";
     1104
     1105                $ret .= "<td class='nifty_desk_db_single_ticket ticket_owner' ticket_id='".$ticket_id."'>" . $user_data->display_name . "</td>";
     1106
     1107                $ret .= "<td class='nifty_desk_db_single_ticket ticket_channel' ticket_id='".$ticket_id."'>" . nifty_desk_return_ticket_channel_html_block($channel_name,$ticket_channel_id,$channel_name_full) . "</td>";
     1108
     1109                $ret .= "</tr>";
     1110
    4711111            } else {
    472                 $ticket_channel_id = 0;
    473                 $channel_name_full = __('Support Desk','nifty_desk');
    474                 $channel_name = __('s.desk','nifty_desk');
     1112
     1113                $is_more = true;
     1114
    4751115            }
    476             if ( isset( $post_meta['ticket_status'] ) ) { $is_public = $post_meta['ticket_public'][0]; } else { $is_public = false; }
    477             if ( isset( $post_meta['ticket_assigned_to'] ) ) { $assigned_to = $post_meta['ticket_assigned_to'][0]; } else { $assigned_to = false; }
    478 
    479             $user_data = get_user_by('id', $assigned_to);
    480             if (!$user_data) { $user_data = (object)[]; $user_data->display_name = "-"; }
    481 
    482             $response_count = nifty_desk_cnt_responses( $ticket_id );
    483             $priority = nifty_desk_return_ticket_priority_returns( $ticket_id );
    484 
    485             $last_updated = false;
    486             if ( isset( $post_meta['ticket_last_updated'] ) ) {
    487                 $last_updated = $post_meta['ticket_last_updated'][0];
    488             } else {
    489                 /* backwards compatibility - get last response date and then save it to the 'ticket_last_updated' meta */
    490                 $last_updated = nifty_desk_get_last_updated_time( $ticket_id );
    491                 if ($last_updated) {
    492                     /* we found a response date via backwards compa, let's save it so we dont need to do that again. */
    493                     update_post_meta( $ticket_id, 'ticket_last_updated', strtotime($last_updated));
    494                 }
    495             }
    496             if ($last_updated) {
    497                
    498                 $last_updated_actual = date("Y-m-d H:i:s",intval($last_updated));
    499                 $last_updated = nifty_desk_time_elapsed_string($last_updated);
    500             } else {
    501                 $last_updated_actual = '-';
    502                 $last_updated = "-";
    503             }
    504 
    505             $author_id = get_the_author_meta('ID');
    506             $user_info = get_userdata($author_id);
    507 
    508 
    509             $author_name = $user_info->display_name;
    510             $author_email = $user_info->user_email;
    511 
    512 
    513            
    514             $ticket_counter++;
    515             if ($ticket_counter <= $limit) {
    516 
    517 
    518                 $ret .= "<tr id='nifty_desk_modern_ticket_row_".$ticket_id."' class='nifty_desk_modern_ticket_row'>";
    519                 $ret .= "<td class='ticket_checkbox'><input type='checkbox' class='nifty_desk_checkbox' value='".$ticket_id."' /></td>";
    520                 $ret .= "<td class='nifty_desk_db_single_ticket ticket_status' ticket_id='".$ticket_id."'>" . $post_status . "</td>";
    521                 $ret .= "<td class='nifty_desk_db_single_ticket ticket_id' ticket_id='".$ticket_id."'>#" . $ticket_id . "</td>";
    522                 $ret .= "<td class='nifty_desk_db_single_ticket ticket_title' ticket_id='".$ticket_id."' ><span title='".get_the_title()."'>" . get_the_title() . "</span></td>";
    523                 $ret .= "<td class='nifty_desk_db_single_ticket ticket_author' ticket_id='".$ticket_id."'><span title='".$author_email."'>" . $author_name . "</span></td>";
    524                 $ret .= "<td class='nifty_desk_db_single_ticket ticket_date' ticket_id='".$ticket_id."'><span title='".date("Y-m-d H:i:s",get_the_date('U'))."'>".nifty_desk_time_elapsed_string(get_the_time('U')) . "</span></td>";
    525                 $ret .= "<td class='nifty_desk_db_single_ticket ticket_updated' ticket_id='".$ticket_id."'><span title='".$last_updated_actual."'>" . $last_updated . "</span></td>";
    526                 $ret .= "<td class='nifty_desk_db_single_ticket ticket_priority' ticket_id='".$ticket_id."'>" . $priority . "</td>";
    527                 $ret .= "<td class='nifty_desk_db_single_ticket ticket_responses' ticket_id='".$ticket_id."'>" . $response_count . "</td>";
    528                 $ret .= "<td class='nifty_desk_db_single_ticket ticket_owner' ticket_id='".$ticket_id."'>" . $user_data->display_name . "</td>";
    529                 $ret .= "<td class='nifty_desk_db_single_ticket ticket_channel' ticket_id='".$ticket_id."'>" . nifty_desk_return_ticket_channel_html_block($channel_name,$ticket_channel_id,$channel_name_full) . "</td>";
    530                 $ret .= "</tr>";
    531             } else {
    532                 $is_more = true;
    533             }
    534 
    535 
    536         }
     1116
     1117
     1118
     1119
     1120        }
     1121
    5371122    } else {
     1123
    5381124        $ret .= "<tr><td colspan='11' style='padding: 10px 0;'>".__('No tickets found', 'nifty_desk')."</td></tr>";
     1125
    5391126    }
     1127
    5401128    if ($return_all_counts) {
     1129
    5411130        $js = json_encode(array(
     1131
    5421132            'ticket_cnt' => $ticket_counter,
     1133
    5431134            'ticket_html' => $ret,
     1135
    5441136            'is_more' => $is_more,
     1137
    5451138            'is_less' => $is_less,
     1139
    5461140            'orderby' => $args['orderby'],
     1141
    5471142            'order' => $args['order'],
     1143
    5481144            'priority' => $priority,
     1145
    5491146            'ticket_status' => $status,
     1147
    5501148            'cnt' => $my_query->found_posts,
     1149
    5511150            'limit' => $limit,
     1151
    5521152            'offset' => $offset,
     1153
    5531154            'counts' => nifty_desk_return_ticket_count_array()
     1155
    5541156            )
     1157
    5551158        );
     1159
    5561160    } else {
     1161
    5571162        $js = json_encode(array(
     1163
    5581164            'ticket_cnt' => $ticket_counter,
     1165
    5591166            'ticket_html' => $ret,
     1167
    5601168            'is_more' => $is_more,
     1169
    5611170            'is_less' => $is_less,
     1171
    5621172            'orderby' => $args['orderby'],
     1173
    5631174            'order' => $args['order'],
     1175
    5641176            'priority' => $priority,
     1177
    5651178            'ticket_status' => $status,
     1179
    5661180            'cnt' => $my_query->found_posts,
     1181
    5671182            'limit' => $limit,
     1183
    5681184            'offset' => $offset
     1185
    5691186            )
     1187
    5701188        );
    5711189
     1190
     1191
    5721192    }
     1193
    5731194    //var_dump($js);
     1195
    5741196    update_option("posts_per_page",$posts_per_page_default);
    5751197
     1198
     1199
    5761200    return $js;
     1201
    5771202}
    5781203
     1204
     1205
    5791206function nifty_desk_return_ticket_count_array() {
     1207
    5801208    $current_views = get_option("nifty_desk_views");
    5811209
    5821210
     1211
     1212
     1213
    5831214    $view_array = array();
     1215
    5841216    foreach ($current_views as $key => $view) {
     1217
    5851218        $view_array[$key] = intval(nifty_desk_ticket_count_by_view($key));
    5861219
     1220
     1221
    5871222    }
     1223
    5881224    return $view_array;
    5891225
     1226
     1227
    5901228   
     1229
    5911230}
    5921231
     1232
     1233
    5931234function nifty_desk_views_html_output() {
    5941235
     1236
     1237
    5951238    $current_views = get_option("nifty_desk_views");
    5961239
     1240
     1241
    5971242    echo "<p><span class='update-nag'>".sprintf(__("Upgrade to the <a href='%s' target='_BLANK'>Pro version</a> of Nifty Desk and create an unlimited amount of customizable views.","nifty_desk"),'http://niftydesk.org/pro-version/?utm_source=plugin&utm_medium=link&utm_campaign=views')."</span></p>";
    5981243
    5991244
     1245
     1246
     1247
    6001248    echo "<table class='wp-list-table widefat fixed striped pages'>";
     1249
    6011250    echo "<thead>";
     1251
    6021252    echo "<tr>";
     1253
    6031254    echo "<th>Name</th>";
     1255
    6041256    echo "<th class='nifty_desk_table_action'>Action</th>";
     1257
    6051258    echo "</tr>";
     1259
    6061260    echo "</thead>";
     1261
    6071262    echo "<tbody>";
     1263
    6081264    foreach ($current_views as $key => $view) {
     1265
    6091266        echo "<tr id='view_tr_'".$key.">";
     1267
    6101268        echo "<td>".$view['title']."</td>";
     1269
    6111270        echo "<td>".apply_filters("nifty_desk_filter_view_action_control","",$key)."</td>";
     1271
    6121272        echo "</tr>";
    6131273
    6141274
     1275
     1276
     1277
    6151278    }
     1279
    6161280    echo "</tbody>";
     1281
    6171282    echo "</table>";
    6181283
    6191284
     1285
     1286
     1287
    6201288}
    6211289
     1290
     1291
    6221292function nifty_desk_set_default_views() {
     1293
    6231294    $current_views = array(
     1295
    6241296        1 => array(
     1297
    6251298            "readonly" => true,
     1299
    6261300            "active" => 1,
     1301
    6271302            "title" => __("Your unsolved tickets","nifty_desk"),
     1303
    6281304            "data" => array(
     1305
    6291306                "status" => array(
     1307
    6301308                    "-1" => true,
     1309
    6311310                    "0" => true,
     1311
    6321312                    "3" => true,
     1313
    6331314                    "9" => true
     1315
    6341316                ),
     1317
    6351318                "priority" => false,
     1319
    6361320                "agents" => array(
     1321
    6371322                    "current_agent" => true
     1323
    6381324                ),
     1325
    6391326                "orderby" => "date",
     1327
    6401328                "order" => "asc",
     1329
    6411330                "department" => false
     1331
    6421332            )
     1333
    6431334        ),
     1335
    6441336        2 => array(
     1337
    6451338            "readonly" => true,
     1339
    6461340            "active" => 1,
     1341
    6471342            "title" => __("All unsolved tickets","nifty_desk"),
     1343
    6481344            "data" => array(
     1345
    6491346                "status" => array(
     1347
    6501348                    "0" => true,
     1349
    6511350                    "3" => true,
     1351
    6521352                    "9" => true
     1353
    6531354                ),
     1355
    6541356                "priority" => false,
     1357
    6551358                "agents" => false,
     1359
    6561360                "orderby" => "date",
     1361
    6571362                "order" => "asc",
     1363
    6581364                "department" => false
     1365
    6591366            )
     1367
    6601368        ),
     1369
    6611370        3 => array(
     1371
    6621372            "readonly" => true,
     1373
    6631374            "active" => 1,
     1375
    6641376            "title" => __("New tickets","nifty_desk"),
     1377
    6651378            "data" => array(
     1379
    6661380                "status" => array(
     1381
    6671382                    "9" => true
     1383
    6681384                ),
     1385
    6691386                "priority" => false,
     1387
    6701388                "agents" => false,
     1389
    6711390                "orderby" => "date",
     1391
    6721392                "order" => "asc",
     1393
    6731394                "department" => false
     1395
    6741396            )
     1397
    6751398        ),
     1399
    6761400        4 => array(
     1401
    6771402            "readonly" => true,
     1403
    6781404            "active" => 1,
     1405
    6791406            "title" => __("Open tickets","nifty_desk"),
     1407
    6801408            "data" => array(
     1409
    6811410                "status" => array(
     1411
    6821412                    "0" => true
     1413
    6831414                ),
     1415
    6841416                "priority" => false,
     1417
    6851418                "agents" => false,
     1419
    6861420                "orderby" => "date",
     1421
    6871422                "order" => "asc",
     1423
    6881424                "department" => false
     1425
    6891426            )
     1427
    6901428        ),
     1429
    6911430        5 => array(
     1431
    6921432            "readonly" => true,
     1433
    6931434            "active" => 1,
     1435
    6941436            "title" => __("Pending tickets","nifty_desk"),
     1437
    6951438            "data" => array(
     1439
    6961440                "status" => array(
     1441
    6971442                    "3" => true
     1443
    6981444                ),
     1445
    6991446                "priority" => false,
     1447
    7001448                "agents" => false,
     1449
    7011450                "orderby" => "date",
     1451
    7021452                "order" => "asc",
     1453
    7031454                "department" => false
     1455
    7041456            )
     1457
    7051458        ),
     1459
    7061460        6 => array(
     1461
    7071462            "readonly" => true,
     1463
    7081464            "active" => 0,
     1465
    7091466            "title" => __("Closed Tickets","nifty_desk"),
     1467
    7101468            "data" => array(
     1469
    7111470                "status" => array(
     1471
    7121472                    "1" => true,
     1473
    7131474                    "2" => true
     1475
    7141476                ),
     1477
    7151478                "priority" => false,
     1479
    7161480                "agents" => false,
     1481
    7171482                "orderby" => "date",
     1483
    7181484                "order" => "asc",
     1485
    7191486                "department" => false
     1487
    7201488            )
     1489
    7211490        )
    7221491
    7231492
     1493
     1494
     1495
    7241496    );
    7251497
     1498
     1499
    7261500    update_option("nifty_desk_views",$current_views);
     1501
    7271502}
    7281503
     1504
     1505
    7291506function nifty_desk_output_ticket_actions($ticket_id) {
    7301507
    7311508
     1509
     1510
     1511
    7321512        if( current_user_can('manage_options' ) ){
     1513
    7331514            $delete_button = '<a href="javascript:void(0);" id="nifty_desk_delete_ticket" ticket_id="'.$ticket_id.'">'.__('Delete', 'nifty_desk').'</a>';
     1515
    7341516        } else {
     1517
    7351518            $delete_button = "";
    736         }
     1519
     1520        }
     1521
     1522
     1523
    7371524
    7381525
    7391526        $ret .= '<div class="nifty_desk_dropdown_button">';
     1527
    7401528        $ret .= '   <span><a href="javascript:void(0);" class="button button-secondary nifty_desk_action_button">'.__("Actions","nifty_desk").' <span class="nifty_desk_more_button">&nbsp;<span></a></span>';
     1529
    7411530        $ret .= '       <div class="nifty_desk_dropdown-content">';
     1531
    7421532        $ret .=             $delete_button.'';
     1533
    7431534        $ret .= '           <a href="javascript:void(0);" id="nifty_desk_merge_ticket" ticket_id="'.$ticket_id.'">'.__('Merge into another ticket', 'nifty_desk').'</a>';
     1535
    7441536        $ret .= '       </div>';
     1537
    7451538        $ret .= '</div>';
    7461539
    7471540
     1541
     1542
     1543
    7481544        return $ret;
    7491545
     1546
     1547
    7501548}
    7511549
     1550
     1551
    7521552function nifty_desk_check_for_followup($ticket_id) {
     1553
    7531554    $check = get_post_meta( $ticket_id, '_ticket_follow_up', true );
     1555
    7541556    if ($check) {
    7551557
     1558
     1559
    7561560        $merged_link = sprintf( __( 'This ticket was a follow up from <a href="javascript:void(0);" tid="%1$s" class="nifty_desk_followup_from">#%1$s</a>.</a>', 'nifty_desk' ),
     1561
    7571562            $check           
     1563
    7581564        );
     1565
    7591566        return "<span class='nifty_desk_error' id='nifty_desk_followup_from_".$check."'>".$merged_link."</span>";
     1567
    7601568    }
     1569
    7611570}
    7621571
    7631572
     1573
     1574
     1575
    7641576function nifty_desk_check_for_merge($ticket_id) {
     1577
    7651578    $check = get_post_meta( $ticket_id, '_nifty_desk_merged_with', true );
     1579
    7661580    if ($check) {
    7671581
     1582
     1583
    7681584        $merged_link = sprintf( __( 'This ticket was merged into <a href="javascript:void(0);" tid="%1$s" class="nifty_desk_merged_with">#%1$s</a>.</a>', 'nifty_desk' ),
     1585
    7691586            $check           
     1587
    7701588        );
     1589
    7711590        return "<span class='nifty_desk_error' id='nifty_desk_merged_with_".$check."'>".$merged_link."</span>";
     1591
    7721592    }
     1593
    7731594}
    7741595
    7751596
     1597
     1598
     1599
    7761600function nifty_desk_check_for_merge_from($ticket_id) {
     1601
    7771602    $check = get_post_meta( $ticket_id, '_nifty_desk_merged_from', true );
     1603
    7781604    if ($check) {
    7791605
     1606
     1607
    7801608        $merged_link = sprintf( __( 'This ticket was merged from <a href="javascript:void(0);" tid="%1$s" class="nifty_desk_merged_with">#%1$s</a>.</a>', 'nifty_desk' ),
     1609
    7811610            $check           
     1611
    7821612        );
     1613
    7831614        return "<span class='nifty_desk_error' id='nifty_desk_merged_with_".$check."'>".$merged_link."</span>";
     1615
    7841616    }
     1617
    7851618}
    7861619
     1620
     1621
    7871622function nifty_desk_get_last_updated_time($ticket_id) {
     1623
    7881624   
     1625
    7891626    $data = nifty_desk_get_last_response( $ticket_id );
     1627
    7901628    if (isset($data->post_author)) {
     1629
    7911630        $author = $data->post_author;
     1631
    7921632        if ($author) {
     1633
    7931634            $author_data = get_userdata($author);
     1635
    7941636            return $data->post_date;
     1637
    7951638        } else {
     1639
    7961640            return false;
     1641
    7971642        }
     1643
    7981644    } else {
     1645
    7991646        return false;
     1647
    8001648    }
     1649
    8011650}
    8021651
    8031652
     1653
     1654
     1655
    8041656add_filter("nifty_desk_response_after_author_name","nifty_desk_filter_control_response_after_author_name",10,2);
     1657
    8051658function nifty_desk_filter_control_response_after_author_name($content,$ticket_id) {
     1659
    8061660    $ticket_raw = get_post_meta($ticket_id, 'ticket_full_raw', true );
     1661
    8071662    $ticket_html = get_post_meta($ticket_id, 'ticket_html', true );
    8081663
     1664
     1665
    8091666    if ($ticket_raw) {
     1667
    8101668        $content .= " | <a href='".admin_url("?nifty_desk_raw=".$ticket_id)."' target='_BLANK' class='nifty_desk_view_front_end'>view email source</a>";
     1669
    8111670    }
     1671
    8121672    if ($ticket_html) {
     1673
    8131674        $content .= " | <a href='".admin_url("?nifty_desk_html=".$ticket_id)."' target='_BLANK' class='nifty_desk_view_front_end'>view HTML</a>";
     1675
    8141676    }
    8151677
     1678
     1679
    8161680    return $content;
    8171681
     1682
     1683
    8181684}
    8191685
     1686
     1687
    8201688function nifty_desk_mark_ticket_as_read($tid) {
     1689
    8211690    update_post_meta ($tid, 'nifty_desk_seen', current_time('timestamp'));
     1691
    8221692}
  • nifty-desk/trunk/modules/widgets.php

    r1535609 r1592607  
    4343                      $post_user_data = get_user_by('email',$originator_email);
    4444                      $post_user = $post_user_data->ID;
    45 
    46 
     45                      $username = $post_user_data->data->display_name;
     46                     
    4747                } else {
    4848                    /* create the user */
  • nifty-desk/trunk/nifty-desk.php

    r1545853 r1592607  
    44  Plugin URI: http://niftydesk.org/
    55  Description: Create a support centre within your WordPress admin. No need for third party systems!
    6   Version: 1.01
     6  Version: 1.02
    77  Author: CODECABIN_
    88  Author URI: http://niftydesk.org/
    99 */
    1010
    11 /**
    12  * 1.01 - 2016-11-29 - Medium Priority
    13  * Fixed a PHP syntax error
     11/*
     12 * 1.02 - 2017-02-09 - Medium Priority
     13 * You can now search for tickets based on the author email address
     14 * Bug Fix: Correct timestamp shown in search results for last responder
     15 * Bug Fix: Author name displays correctly in search results
     16 * Bug Fix: Slashes are now removed from ticket replies
     17 * Bug Fix: Two PHP errors after submitting a ticket while logged in
     18 * Bug Fix: Headers already sent once a ticket is submitted and needs to redirect to the thank you page
     19 * Enhancement: You can now close the 'Merge Tickets' popup by pressing the escape key
     20 * Bug Fix: Changing originator's email address will change their display name in the ticket too
     21 * Enhancement: Styling fixes made to the 'Merge Tickets' popup
     22 *
     23 * 1.01 - 2016-11-22
     24 * Fixed bugs when creating a ticket from the API (no last_update timestamp and support tickets were being incorrectly assigned)
     25 * Fixed a bug when creating a ticket from the front end (user's side)
     26 * Fixed a bug that caused html entities to show up incorrectly in tickets
     27 * Added a check in place to abort the previous XHR requests when clicking on views sequentially
    1428 *
    1529 * 1.00 - 2016-11-17 - Launch
     
    2135global $nifty_desk_version;
    2236global $nifty_desk_version_string;
    23 $nifty_desk_version = "1.01";
     37$nifty_desk_version = "1.02";
    2438$nifty_desk_version_string = "basic";
    2539
     
    3347include_once "modules/email.php";
    3448include_once "modules/widgets.php";
     49include_once "modules/archive.php";
    3550include_once "templates/templates.php";
    3651
     
    5065
    5166if (function_exists("nifty_desk_pro_user_head")) {
    52     add_action('wp_head', 'nifty_desk_pro_user_head');
     67    add_action('init', 'nifty_desk_pro_user_head');
    5368} else {
    54     add_action('wp_head', 'nifty_desk_user_head');
     69    add_action('init', 'nifty_desk_user_head');
    5570}
    5671if (function_exists("nifty_desk_pro_admin_head")) {
     
    351366}
    352367
     368function nifty_desk_normalize($text) {
     369    return $text;
     370}
     371
     372
    353373/**
    354374 * Nifty Desk Activation Function
     
    908928            /* update parent's 'last updated' time */
    909929            update_post_meta( $parent_id, 'ticket_last_updated', current_time('timestamp') );
     930
     931
     932            $ticket_array = array(
     933                'ticket_id' => $post_id,
     934                'parent_id' => $parent_id,
     935                'content' => $content,
     936                'userid' => $author
     937            );
     938            do_action("nifty_desk_after_create_response",$ticket_array);           
    910939
    911940           
     
    11591188        if(is_object(get_userdata($userid))) {
    11601189            $user_email = get_userdata($userid)->user_email;
     1190        } else {
     1191            $user_email = null;
    11611192        }
    11621193
     
    18861917
    18871918        $nifty_desk_settings = get_option("nifty_desk_settings");
    1888 
     1919        $title = sanitize_text_field( $_POST['nifty_desk_ticket_title'] );
    18891920        $data = array(
    18901921            'post_content' => $content,
    18911922            'post_status' => 'publish',
    1892             'post_title' => sanitize_text_field( $_POST['nifty_desk_ticket_title'] ),
     1923            'post_title' => $title,
    18931924            'post_type' => 'nifty_desk_tickets',
    18941925            'post_author' => get_current_user_id(),
     
    18991930
    19001931        $custom_fields = get_post_custom($post_id);
    1901         if (!isset($custom_fields['ticket_status'])) {
    1902             add_post_meta($post_id, 'ticket_status', '9', true);
    1903         } else {
    1904             add_post_meta($post_id, 'ticket_status', '', true);
    1905         }
    1906         if (!isset($custom_fields['ticket_public'])) {
    1907             add_post_meta($post_id, 'ticket_public', '0', true);
    1908         } else {
    1909             add_post_meta($post_id, 'ticket_public', '', true);
    1910         }
     1932        if (!isset($custom_fields['ticket_status'])) { add_post_meta($post_id, 'ticket_status', '9', true); } else { add_post_meta($post_id, 'ticket_status', '', true); }
     1933        if (!isset($custom_fields['ticket_public'])) { add_post_meta($post_id, 'ticket_public', '0', true); } else { add_post_meta($post_id, 'ticket_public', '', true); }
    19111934
    19121935        if (isset($_POST['nifty_desk_submit_priority'])) {
     
    19211944        }
    19221945
    1923         if (!isset($custom_fields['ticket_assigned_to'])) {
    1924             if (!get_option("nifty_desk_default_assigned_to")) {
    1925                 $super_admins = get_super_admins();
    1926                 $user = get_user_by('slug', $super_admins[0]);
    1927                 if(is_object($user)) {
    1928                     add_option('nifty_desk_default_assigned_to', $user->ID);
    1929                 }
    1930             }
    1931             $default_user = get_option("nifty_desk_default_assigned_to");
    1932             add_post_meta($post_id, 'ticket_assigned_to', $default_user, true);
    1933         } else {
    1934             add_post_meta($post_id, 'ticket_assigned_to', '', true);
    1935         }
     1946        $ticket_array = array(
     1947            'ticket_id' => $post_id,
     1948            'title' => $title,
     1949            'content' => $content
     1950        );
     1951        do_action("nifty_desk_after_create_ticket",$ticket_array);
     1952
     1953        $assigned_to = apply_filters("nifty_desk_assigned_to_new_ticket",false);
     1954        if ($assigned_to) { update_post_meta( $post_id, 'ticket_assigned_to', $assigned_to); }
    19361955        update_post_meta( $post_id, 'ticket_last_updated', current_time('timestamp'));
    1937 
    19381956        add_post_meta($post_id, 'ticket_reference', md5($post_id . get_current_user_id()), true);
    19391957        nifty_desk_notification_control('ticket', $post_id, get_current_user_id());
     
    33683386            $php_mailer_object->msgHTML($message."<br/><br/> <b>Sent using SMTP settings</b>");
    33693387       
    3370             if(!$php_mailer_object->send()) { $result=use_wp_mail_as_default($email, $subject, $message, $wp_mail_headers,$attachments); }
     3388            if(!$php_mailer_object->send()) { $result=use_wp_mail_as_default($email, $subject, $message, $wp_mail_headers,$attachments, $post_id); }
    33713389            else {
    33723390                $result=true;
     
    33753393    }
    33763394    else {
    3377         $result=use_wp_mail_as_default($email, $subject, $message, $wp_mail_headers,$attachments);
     3395        $result=use_wp_mail_as_default($email, $subject, $message, $wp_mail_headers,$attachments, $post_id);
    33783396    }
    33793397    if (!$result && $post_id) {
     
    34543472 * @return boolean ?
    34553473*/
    3456 function use_wp_mail_as_default($email,$subject,$message,$wp_mail_headers,$attachments = false) {
     3474function use_wp_mail_as_default($email,$subject,$message,$wp_mail_headers,$attachments = false, $post_id = false) {
    34573475    add_filter( 'wp_mail_content_type', 'nifty_desk_set_html_mail_content_type' );
    34583476    $message = apply_filters("nifty_desk_wrap_body_in_html",$message);
     
    34623480    if(is_array($wp_mail_headers))
    34633481    {
    3464         $headers_mail = 'From: '.$wp_mail_headers['from_name'].' < '.$wp_mail_headers['from_email'].' >' ."\r\n";
    3465         $headers_mail.= 'Reply-To: '.$wp_mail_headers['replyto_name'].' < '.$wp_mail_headers['replyto_address'].' >' ."\r\n";
     3482        $headers_mail = array();
     3483        $headers_mail[] = 'From: '.$wp_mail_headers['from_name'].' < '.$wp_mail_headers['from_email'].' >' ;
     3484        $headers_mail[] = 'Reply-To: '.$wp_mail_headers['replyto_name'].' < '.$wp_mail_headers['replyto_address'].' >' ;
    34663485        if (isset($wp_mail_headers['In-Reply-To'])) {
    3467             $headers_mail.= 'In-Reply-To: '.$wp_mail_headers['In-Reply-To']."\r\n";
    3468             $headers_mail.= 'References: '.$wp_mail_headers['References']."\r\n";
     3486            $headers_mail[] = 'In-Reply-To: '.$wp_mail_headers['In-Reply-To'];
     3487            $headers_mail[] = 'References: '.$wp_mail_headers['References'];
    34693488        }
    34703489        //$headers_mail.= 'Content-type: text/html; charset=utf-8' . "\r\n";
    3471         //$headers_mail.= 'MIME-Version: 1.0' . "\r\n";
    3472         $result=wp_mail($email,$subject,$message.nifty_desk_signature(),$headers_mail,$attachments);
     3490        //$headers_mail.= 'MIME-Version: 1.0' . "\r\n";       
     3491
     3492        $headers_mail = apply_filters( 'nifty_desk_email_header_filter_string', $headers_mail, $post_id );
     3493
     3494        $result=wp_mail($email,$subject,$message.nifty_desk_signature(),$headers_mail,$attachments);
    34733495    }
    34743496    else
     
    40654087
    40664088
     4089function nifty_desk_get_post_meta_last_non_agent($post_id){
     4090    global $wpdb;
     4091    $data   =   array();
     4092    $sql = "SELECT `meta_key`, `meta_value`, `post_id` FROM $wpdb->postmeta WHERE `meta_key` = '_response_parent_id' AND `meta_value` = '$post_id' ORDER BY `meta_id` DESC LIMIT 3";
     4093
     4094    $results = $wpdb->get_results($sql);
     4095    $i = 0;
     4096
     4097    foreach($results as $k => $v){
     4098        if (isset($v->post_id)) {
     4099            $tmp_post_id = $v->post_id;
     4100            $post_data = get_post($tmp_post_id);
     4101            $post_author = $post_data->post_author;
     4102            if (get_the_author_meta('nifty_desk_agent', $post_author) != "1") {
     4103                /* this came from a non-agent */
     4104                $data[0] = $v;
     4105                break;       
     4106            }
     4107        }
     4108
     4109       
     4110        $i++;
     4111    };
     4112    return $data;
     4113}
     4114
     4115
     4116
     4117
    40674118/**
    40684119 * Checks if any of the system pages have been trashed (not deleted forever)
  • nifty-desk/trunk/readme.txt

    r1545854 r1592607  
    44Tags: support ticket, support tickets, support, support plugin, ticket plugin, tickets, helpdesk, help desk, support desk
    55Requires at least: 3.5
    6 Tested up to: 4.7
     6Tested up to: 4.7.2
    77Stable tag: trunk
    88License: GPLv2
     
    9898== Changelog  ==
    9999
    100 = 1.01 - 2016-12-05 - Medium Priority =
    101 * Fixed a PHP syntax error
     100= 1.02 - 2017-02-09 - Medium Priority =
     101* You can now search for tickets based on the author email address
     102* Bug Fix: Correct timestamp shown in search results for last responder
     103* Bug Fix: Author name displays correctly in search results
     104* Bug Fix: Slashes are now removed from ticket replies
     105* Bug Fix: Two PHP errors after submitting a ticket while logged in
     106* Bug Fix: Headers already sent once a ticket is submitted and needs to redirect to the thank you page
     107* Enhancement: You can now close the 'Merge Tickets' popup by pressing the escape key
     108* Bug Fix: Changing originator's email address will change their display name in the ticket too
     109* Enhancement: Styling fixes made to the 'Merge Tickets' popup
     110 
     111= 1.01 - 2016-11-22 =
     112* Fixed bugs when creating a ticket from the API (no last_update timestamp and support tickets were being incorrectly assigned)
     113* Fixed a bug when creating a ticket from the front end (user's side)
     114* Fixed a bug that caused html entities to show up incorrectly in tickets
     115* Added a check in place to abort the previous XHR requests when clicking on views sequentially
    102116
    103117= 1.00 - 2016-11-17 - Launch =
Note: See TracChangeset for help on using the changeset viewer.