public function get_full_link()
 {
     $data = $this->get('user_data');
     if (empty($data)) {
         $this->refresh_data_from_api();
     }
     return parent::get_full_link();
 }
 public function get_image()
 {
     $default = parent::get_image();
     if (!$default) {
         return plugins_url('extensions/bbpress/default-user.jpg', _DTBAKER_SUPPORT_HUB_CORE_FILE_);
     }
     return $default;
 }
 public function get_message_user_summary($user_hints, $current_extension, $message_object)
 {
     // here we hunt down other messages from this user and bring them back to the UI
     $return = array('extra_datas' => array(), 'user_details' => array());
     $user_details = array();
     $other_messages = array();
     if (!empty($user_hints['shub_user_id']) && !is_array($user_hints['shub_user_id'])) {
         $user_hints['shub_user_id'] = array($user_hints['shub_user_id']);
     }
     $possible_new_user_ids = array();
     do {
         $this_user_hints = $user_hints;
         if (count($possible_new_user_ids)) {
             $this_user_hints['shub_user_id'] = array();
             foreach ($possible_new_user_ids as $possible_new_user_id) {
                 if (!in_array($possible_new_user_id, $user_hints['shub_user_id'])) {
                     $user_hints['shub_user_id'][] = $possible_new_user_id;
                     $this_user_hints['shub_user_id'][] = $possible_new_user_id;
                 }
             }
             $possible_new_user_ids = array();
         }
         foreach ($this->message_managers as $name => $message_manager) {
             $details = $message_manager->find_other_user_details($this_user_hints, $current_extension, $message_object);
             if ($details && isset($details['messages']) && is_array($details['messages'])) {
                 $other_messages = array_merge_recursive($other_messages, $details['messages']);
             }
             if ($details && isset($details['user']) && is_array($details['user'])) {
                 $user_details = array_merge_recursive($user_details, $details['user']);
             }
             if ($details && isset($details['user_ids']) && is_array($details['user_ids'])) {
                 foreach ($details['user_ids'] as $possible_new_user_id) {
                     if ((int) $possible_new_user_id > 0 && !in_array($possible_new_user_id, $user_hints['shub_user_id'])) {
                         //echo "GOT A NEW USER ID BACK $possible_new_user_id <br><br>";
                         // re-run the search loop with this new user id t oget even more data.
                         $possible_new_user_ids[] = $possible_new_user_id;
                     }
                 }
             }
         }
     } while (count($possible_new_user_ids));
     // pull out the 'extra data' linked to this ticket
     $extras = SupportHubExtra::get_all_extras();
     $extra_datas = array();
     foreach ($extras as $extra_id => $extra) {
         $shub_user_ids = !empty($user_hints['shub_user_id']) ? $user_hints['shub_user_id'] : array(0);
         // stop duplicate values (if a user submits two support tickets with different email addresses and the same data, the extra data will be inserted into the database under his new user account, but it will show up here as a linked data info account, so we prevent duplicate data showing in this step)
         // todo: highlight data related to this support message, fade out data related to other support messages
         $this_data = array();
         foreach ($shub_user_ids as $shub_user_id) {
             $this_extras = array();
             foreach ($extra->get_data($current_extension, $message_object->get('shub_account_id'), $message_object->get('shub_message_id'), $shub_user_id) as $this_extra) {
                 if (!in_array($this_extra->get('extra_value'), $this_data)) {
                     $this_extras[] = $this_extra;
                     $this_data[] = $this_extra->get('extra_value');
                 }
                 // build up the list of linked user accounts based on user data.
                 // example: if two users submit
                 $extra_shub_user_id = $this_extra->get('shub_user_id');
                 if (!empty($extra_shub_user_id) && !in_array($extra_shub_user_id, $user_hints['shub_user_id'])) {
                     echo " <br><br><Br>Error: Displaying extra data for the user '{$extra_shub_user_id}' when that user ID isn't already in the list. Please report this bug to dtbaker.<br><br><br> ";
                     // moved the user_hints loop to the top to build up the user id list first.
                     $user_hints['shub_user_id'][] = $extra_shub_user_id;
                 }
             }
             $return['extra_datas'] = $return['extra_datas'] + $this_extras;
         }
     }
     $user_bits = array();
     //$user_bits[] = array('Support Pack','UNKNOWN');
     if (!empty($user_hints['shub_user_id'])) {
         foreach ($user_hints['shub_user_id'] as $shub_user_id) {
             $user = new SupportHubUser($shub_user_id);
             if ($user->get('shub_user_id')) {
                 // find messages and comments from this user
                 /*$messages = shub_get_multiple('shub_message', array(
                       'shub_user_id' => $shub_user_id
                   ), 'shub_message_id');*/
                 global $wpdb;
                 $sql = "SELECT sm.*, sa.shub_extension FROM `" . _support_hub_DB_PREFIX . "shub_message` sm ";
                 $sql .= " LEFT JOIN `" . _support_hub_DB_PREFIX . "shub_account` sa USING (shub_account_id) WHERE 1 ";
                 $sql .= " AND sm.`shub_user_id` = " . (int) $user->get('shub_user_id');
                 $sql .= " AND sm.`shub_message_id` != " . (int) $message_object->get('shub_message_id');
                 $sql .= ' ORDER BY shub_message_id';
                 $messages = $wpdb->get_results($sql, ARRAY_A);
                 if (is_array($messages)) {
                     foreach ($messages as $message) {
                         if (!isset($other_messages[$message['shub_message_id']])) {
                             $other_messages[$message['shub_message_id']] = array('link' => '?page=support_hub_main&network=' . $message['shub_extension'] . '&message_id=' . $message['shub_message_id'], 'summary' => $message['title'], 'time' => $message['last_active'], 'network' => $message['shub_extension'], 'icon' => $this->message_managers[$message['shub_extension']]->get_friendly_icon(), 'message_id' => $message['shub_message_id'], 'message_comment_id' => 0, 'message_status' => $message['shub_status']);
                         }
                     }
                 }
                 /*$comments = shub_get_multiple('shub_message_comment', array(
                       'shub_user_id' => $shub_user_id
                   ), 'shub_message_comment_id');*/
                 $sql = "SELECT smc.*, sa.shub_extension, sm.shub_status FROM `" . _support_hub_DB_PREFIX . "shub_message_comment` smc ";
                 $sql .= " LEFT JOIN `" . _support_hub_DB_PREFIX . "shub_message` sm USING (shub_message_id)  ";
                 $sql .= " LEFT JOIN `" . _support_hub_DB_PREFIX . "shub_account` sa USING (shub_account_id) WHERE 1 ";
                 $sql .= " AND smc.`shub_user_id` = " . (int) $user->get('shub_user_id');
                 $sql .= " AND sm.`shub_message_id` != " . (int) $message_object->get('shub_message_id');
                 $sql .= ' ORDER BY shub_message_comment_id';
                 $comments = $wpdb->get_results($sql, ARRAY_A);
                 if (is_array($comments)) {
                     foreach ($comments as $comment) {
                         if (!isset($other_messages[$comment['shub_message_id']])) {
                             $other_messages[$comment['shub_message_id']] = array('link' => '?page=support_hub_main&network=' . $comment['shub_extension'] . '&message_id=' . $comment['shub_message_id'] . '&message_comment_id=' . $comment['shub_message_comment_id'], 'summary' => $comment['message_text'], 'time' => $comment['time'], 'network' => $comment['shub_extension'], 'icon' => $this->message_managers[$comment['shub_extension']]->get_friendly_icon(), 'message_id' => $comment['shub_message_id'], 'message_comment_id' => $comment['shub_message_comment_id'], 'message_status' => $comment['shub_status']);
                         }
                     }
                 }
                 // for debugging:
                 $user_bits[] = array('shub_user_id', $user->get('shub_user_id'));
                 if (!empty($user->details['user_fname'])) {
                     $user_bits[] = array('FName', esc_html($user->details['user_fname']));
                 }
                 if (!empty($user->details['user_lname'])) {
                     $user_bits[] = array('LName', esc_html($user->details['user_lname']));
                 }
                 if (!empty($user->details['user_username'])) {
                     // add this code in here ( as well as below ) so we don't duplicate up on the 'username' field display
                     if (isset($user_details['url']) && isset($user_details['username']) && $user->details['user_username'] == $user_details['username']) {
                         $user_bits[] = array('Username', '<a href="' . esc_url($user_details['url']) . '" target="_blank">' . esc_html($user_details['username']) . '</a>');
                         unset($user_details['username']);
                         // stop it displaying again below
                     } else {
                         if (isset($user_details['username']) && $user->details['user_username'] == $user_details['username']) {
                             $user_bits[] = array('Username', esc_html($user_details['username']));
                             unset($user_details['username']);
                             // stop it displaying again below
                         } else {
                             $user_bits[] = array('Username', esc_html($user->details['user_username']));
                         }
                     }
                 }
                 if (!empty($user->details['user_email'])) {
                     $user_bits[] = array('Email', '<a href="mailto:' . esc_html($user->details['user_email']) . '">' . esc_html($user->details['user_email']) . '</a>');
                 }
             }
         }
     }
     //var_export($this->message_managers['envato']->pull_purchase_code(false,'61782ac6-1f67-4302-b34a-17c9e4d4f123',array(),3452)); echo 'done';exit;
     if (isset($user_details['url']) && isset($user_details['username'])) {
         if (!is_array($user_details['url'])) {
             $user_details['url'] = array($user_details['url']);
         }
         if (!is_array($user_details['username'])) {
             $user_details['username'] = array($user_details['username']);
         }
         foreach ($user_details['url'] as $key => $url) {
             $user_bits[] = array('Username', '<a href="' . esc_url($url) . '" target="_blank">' . esc_html(isset($user_details['username'][$key]) ? $user_details['username'][$key] : 'N/A') . '</a>');
         }
     } else {
         if (isset($user_details['username'])) {
             if (!is_array($user_details['username'])) {
                 $user_details['username'] = array($user_details['username']);
             }
             foreach ($user_details['username'] as $key => $username) {
                 $user_bits[] = array('Username', esc_html($username));
             }
         }
     }
     /*
     if(isset($user_details['codes'])){
         // todo: pull in information about this purchase code via ajax after the page has loaded.
         // cache and re-validate the purchase code from time to time.
         $purchase_codes = (is_array($user_details['codes']) ? implode(', ',$user_details['codes']) : $user_details['codes']);
         if(!empty($purchase_codes)){
             $user_bits[] = array('Purchase Codes',$purchase_codes);
         }
     }
     */
     $user_bits = apply_filters('supporthub_message_user_sidebar', $user_bits, $user_hints['shub_user_id']);
     // todo - group user output together nicely (e.g. Name <email>) so it looks better when there are multiple linked user accounts
     foreach ($user_bits as $key => $val) {
         // check if this one exists yet?
         foreach ($user_bits as $key_check => $val_check) {
             if ($key != $key_check && $val[0] == $val_check[0]) {
                 // we're matching something like 'Username' with 'Username'
                 if (trim(strip_tags($val[1])) == trim(strip_tags($val_check[1]))) {
                     // same same! keep one, the longer one (which might contian a link)
                     if (strlen($val[1]) > strlen($val_check[1])) {
                         unset($user_bits[$key_check]);
                     } else {
                         unset($user_bits[$key]);
                     }
                 }
             }
         }
     }
     $return['user_bits'] = $user_bits;
     $return['user_details'] = $user_details;
     $return['other_messages'] = $other_messages;
     return $return;
 }