public static function add_records_to_client_history($history = array(), Sprout_Client $client, $type = '')
 {
     $records = SC_Record::get_records_by_association($client->get_id());
     if (!empty($records)) {
         foreach ($records as $record_id) {
             $record = SC_Record::get_instance($record_id);
             if ('' !== $type && $type != $record->get_type()) {
                 continue;
             }
             // Take care of the standard records only
             if ($record->get_type() !== SC_Controller::PRIVATE_NOTES_TYPE) {
                 continue;
             }
             $r_post = $record->get_post();
             $time = strtotime($r_post->post_date);
             $history[$time] = array('id' => $record_id, 'record_id' => $record_id, 'title' => esc_html($r_post->post_title), 'content' => wpautop($r_post->post_content), 'date' => wpautop($r_post->post_date), 'type' => sc__('Private Note'), 'type_slug' => SC_Controller::PRIVATE_NOTES_TYPE, 'edit' => true);
         }
     }
     return $history;
 }
 public static function show_twitter_feed()
 {
     $client = Sprout_Client::get_instance(get_the_id());
     if (!is_a($client, 'Sprout_Client')) {
         return;
     }
     if ('' === $client->get_twitter()) {
         self::_e('No twitter username assigned.');
         return;
     }
     printf('<a class="twitter-timeline" href="https://twitter.com/%1$s" data-widget-id="%2$s" data-screen-name="%1$s">Tweets by %1$s</a><script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?"http":"https";if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>', $client->get_twitter(), apply_filters('sc_twitter_widget_id', '492426361349234688'));
 }
    function sc_get_status_select($client_id = 0)
    {
        if (!$client_id) {
            $client_id = get_the_ID();
        }
        $client = Sprout_Client::get_instance($client_id);
        $statuses = $client->get_statuses();
        $all_statuses = sc_get_client_statuses();
        $status_terms = get_terms(Sprout_Client::STATUS_TAXONOMY, array('hide_empty' => false));
        $status_ids = !empty($statuses) ? wp_list_pluck($statuses, 'term_id') : array();
        ob_start();
        ?>
		<div id="statuses_<?php 
        echo (int) $client_id;
        ?>
" class="sc_statuses_update">
			<span class="status_change_button" data-sa-dropdown="#add_status_<?php 
        echo (int) $client_id;
        ?>
">
				<?php 
        printf('<button class="sc_add_status button" title="%1$s">%1$s&nbsp;<span class="dashicons dashicons-arrow-down"></span></button>', esc_attr(sc__('Status')));
        ?>
			</span>&nbsp;<span class="helptip client_status_help" data-sa-dropdown="#client_status_select_help_<?php 
        echo (int) $client_id;
        ?>
"></span>
			<div id="client_status_select_help_<?php 
        echo (int) $client_id;
        ?>
" class="sa-dropdown sa-dropdown-tip sa-dropdown-relative ">
				<div class="sa-dropdown-panel">
					<?php 
        sc_e('Select all statuses that currently fit this contact.');
        ?>
				</div>
			</div>
			<div id="add_status_<?php 
        echo (int) $client_id;
        ?>
" class="sa-dropdown sa-dropdown-tip sa-dropdown-relative status_change_selection" data-item-id="<?php 
        echo (int) $client_id;
        ?>
" data-nonce="<?php 
        echo esc_attr(wp_create_nonce(SC_Controller::NONCE));
        ?>
" data-vertical-offset="50">
				<ul class="sa-dropdown-menu">
					<?php 
        foreach ($all_statuses as $term_id => $label) {
            ?>
						<?php 
            $checked = !empty($statuses) && in_array($term_id, $status_ids) ? 'checked="checked"' : '';
            printf('<li><label><input type="checkbox" value="%1$s" %3$s/><b>%2$s</b></label></li>', (int) $term_id, esc_html($label), esc_attr($checked));
            ?>
					
					<?php 
        }
        ?>
					<li class="sa-dropdown-divider"></li>
					<li><a href="<?php 
        echo esc_url(admin_url('edit-tags.php?taxonomy=sc_client_status&post_type=sa_client'));
        ?>
"><?php 
        sc_e('Add/Edit Client Statuses');
        ?>
</a></li>
				</ul>
			</div>
		</div>
		<div id="current_statuses_<?php 
        echo (int) $client_id;
        ?>
" class="sc_current_statuses">
			<?php 
        foreach ($status_terms as $term) {
            ?>
				<?php 
            $current_status = !empty($statuses) && in_array($term->term_id, $status_ids) ? 'current' : '';
            $url = add_query_arg(array('post_type' => Sprout_Client::POST_TYPE, Sprout_Client::STATUS_TAXONOMY => $term->slug), admin_url('edit.php'));
            ?>
				<?php 
            printf('<a href="%4$s" class="button button-small sc_status %2$s status_id_%3$s" title="%1$s">%1$s</a>', esc_attr($term->name), esc_attr($current_status), (int) $term->term_id, esc_url_raw($url));
            ?>
			<?php 
        }
        ?>
		</div>
		<?php 
        $view = ob_get_clean();
        return apply_filters('sc_get_status_select', $view, $client_id);
    }
 public static function user_profile_fields($user)
 {
     $user_id = $user->ID;
     self::load_view('admin/user/profile_fields.php', array('user' => $user, 'phone' => self::get_users_phone($user_id), 'twitter' => self::get_users_twitter($user_id), 'linkedin' => self::get_users_linkedin($user_id), 'dob' => self::get_users_dob($user_id), 'note' => self::get_users_note($user_id), 'clients' => Sprout_Client::get_clients_by_user($user_id)));
 }
 /**
  * Meta box view
  * Abstracted to be called via AJAX
  * @param int $client_id
  *
  */
 public static function associated_users_meta_box_view($client_id = 0)
 {
     if (!current_user_can('edit_posts')) {
         self::ajax_fail('User cannot create new posts!');
     }
     if (!$client_id && isset($_REQUEST['client_id'])) {
         $client_id = $_REQUEST['client_id'];
     }
     $client = Sprout_Client::get_instance($client_id);
     if (!is_a($client, 'Sprout_Client')) {
         self::ajax_fail('Client not found.');
     }
     global $post;
     setup_postdata($client->get_post());
     print SC_Clients_Admin_Meta_Boxes::show_people_meta_box($client->get_post());
     exit;
 }
/**
 * Load the SC application
 *
 * @package Sprout_Clients
 * @return void
 */
function sprout_clients_load()
{
    if (class_exists('Sprout_Client')) {
        sc_deactivate_plugin();
        return;
        // already loaded, or a name collision
    }
    do_action('sprout_clients_preload');
    //////////
    // Load //
    //////////
    /**
     * Master class
     */
    require_once SC_PATH . '/Sprout_Clients.php';
    // models
    require_once SC_PATH . '/models/_Model.php';
    require_once SC_PATH . '/models/Client.php';
    require_once SC_PATH . '/models/Message.php';
    require_once SC_PATH . '/models/Record.php';
    // controllers
    require_once SC_PATH . '/controllers/_Controller.php';
    require_once SC_PATH . '/languages/Sprout_Clients_l10n.php';
    if (!class_exists('Sprout_Invoices')) {
        require_once SC_PATH . '/controllers/admin/_Settings.php';
    }
    require_once SC_PATH . '/controllers/admin/Settings.php';
    // controllers -- clients
    require_once SC_PATH . '/controllers/clients/Clients.php';
    require_once SC_PATH . '/controllers/clients/Clients_Users.php';
    require_once SC_PATH . '/controllers/clients/Clients_Admin_Meta_Boxes.php';
    require_once SC_PATH . '/controllers/clients/Clients_Admin_Table.php';
    require_once SC_PATH . '/controllers/clients/Clients_AJAX.php';
    // controllers -- history
    require_once SC_PATH . '/controllers/history/Client_History.php';
    require_once SC_PATH . '/controllers/history/SI_History.php';
    // controllers -- messages
    require_once SC_PATH . '/controllers/messages/Messages.php';
    require_once SC_PATH . '/controllers/messages/Message_Triggers.php';
    require_once SC_PATH . '/controllers/messages/Messages_Admin_Meta_Boxes.php';
    require_once SC_PATH . '/controllers/messages/Messages_Admin_Settings.php';
    require_once SC_PATH . '/controllers/messages/Messages_Admin_Table.php';
    require_once SC_PATH . '/controllers/messages/Messages_Route.php';
    require_once SC_PATH . '/controllers/messages/Messages_Shortcodes.php';
    require_once SC_PATH . '/controllers/messages/Messages_Templates.php';
    require_once SC_PATH . '/controllers/records/Internal_Records.php';
    require_once SC_PATH . '/controllers/records/Records_Admin_Table.php';
    require_once SC_PATH . '/controllers/updates/Updates.php';
    // template-tags
    require_once SC_PATH . '/template-tags/sprout-clients.php';
    require_once SC_PATH . '/template-tags/forms.php';
    require_once SC_PATH . '/template-tags/ui.php';
    require_once SC_PATH . '/template-tags/users.php';
    require_once SC_PATH . '/template-tags/utility.php';
    /**
     * Master Model
     */
    SC_Post_Type::init();
    /**
     * Client Model
     */
    Sprout_Client::init();
    /**
     * Messages Model
     */
    SC_Message::init();
    /**
     * Shared Models
     */
    SC_Record::init();
    /**
     * Master Controller
     */
    SC_Controller::init();
    /**
     * Records is shared with Sprout Invoices
     */
    SC_Internal_Records::init();
    /**
     * l10n
     */
    SC_l10n::init();
    /**
     * Settings
     */
    if (!class_exists('Sprout_Invoices')) {
        SA_Settings_API::init();
    }
    SC_Settings::init();
    /**
     * Clients
     */
    SC_Clients::init();
    SC_Users::init();
    SC_Clients_Admin_Meta_Boxes::init();
    SC_Clients_Admin_Table::init();
    SC_Clients_AJAX::init();
    SC_Client_History::init();
    SC_Invoices_History::init();
    /**
     * Messaging
     */
    /*/
    	SC_Messages::init();
    	SC_Messages_Meta::init();
    	SC_Messages_Admin_Settings::init();
    	SC_Messages_Route::init();
    	SC_Message_Shortcodes::init();
    	SC_Templates::init();
    	SC_Message_Triggers::init();
    	/**/
    SC_Updates::init();
    do_action('sprout_clients_loaded');
}
    public static function add_records_to_client_history($history = array(), Sprout_Client $client, $type = '')
    {
        $records = array();
        $invoices = $client->get_invoices();
        if (!empty($invoices)) {
            foreach ($invoices as $invoice_id) {
                $records += SC_Record::get_records_by_association($invoice_id);
            }
        }
        $estimates = $client->get_estimates();
        if (!empty($estimates)) {
            foreach ($estimates as $estimate_id) {
                $records += SC_Record::get_records_by_association($estimate_id);
            }
        }
        if (!empty($records)) {
            foreach ($records as $record_id) {
                $record = SC_Record::get_instance($record_id);
                if ('' !== $type && $type !== $record->get_type()) {
                    continue;
                }
                // parent taking care of this one.
                if ($record->get_type() === SC_Controller::PRIVATE_NOTES_TYPE) {
                    continue;
                }
                $r_post = $record->get_post();
                $time = strtotime($r_post->post_date);
                $history[$time] = array('id' => $record_id, 'record_id' => $record_id, 'title' => esc_html($r_post->post_title), 'content' => wpautop($r_post->post_content), 'date' => wpautop($r_post->post_date), 'type_slug' => $record->get_type());
                switch ($record->get_type()) {
                    // Sprout Invoices
                    case 'si_history_update':
                        $history[$time]['type'] = sc__('Estimate Updated');
                        break;
                    case 'si_history_update':
                        $history[$time]['type'] = sc__('Estimate Viewed');
                        break;
                    case 'si_notification':
                        $history[$time]['type'] = sc__('Notification');
                        ob_start();
                        ?>
							<p>
								<p>
									<a href="#TB_inline?width=600&height=380&inlineId=notification_message_<?php 
                        echo (int) $r_post->ID;
                        ?>
" id="show_notification_tb_link_<?php 
                        echo (int) $r_post->ID;
                        ?>
" class="thickbox si_tooltip notification_message" title="<?php 
                        si_e('View Message');
                        ?>
"><?php 
                        si_e('View Message');
                        ?>
</a>
								</p>
								<div id="notification_message_<?php 
                        echo (int) $r_post->ID;
                        ?>
" class="cloak">
									<?php 
                        echo wpautop($r_post->post_content);
                        ?>
								</div>
							</p>
						<?php 
                        $notification_message = ob_get_clean();
                        $history[$time]['content'] = $notification_message;
                        break;
                    case 'si_invoice_created':
                        $history[$time]['type'] = sc__('Invoice Created');
                        break;
                    case 'si_history_status_update':
                    default:
                        $history[$time]['type'] = sc__('Status Update');
                        unset($history[$time]['title']);
                        break;
                }
            }
        }
        return $history;
    }
 /**
  * User column display
  * @param  string $empty
  * @param  string $column_name
  * @param  int $id
  * @return string
  */
 public static function user_column_display($empty = '', $column_name, $id)
 {
     switch ($column_name) {
         case 'contact':
             $client_ids = Sprout_Client::get_clients_by_user($id);
             if (!empty($client_ids)) {
                 $string = '';
                 foreach ($client_ids as $client_id) {
                     $string .= sprintf(self::__('<a class="doc_link" title="%s" href="%s">%s</a>'), get_the_title($client_id), get_edit_post_link($client_id), '<div class="dashicons dashicons-businessman"></div>');
                 }
                 return $string;
             }
             break;
         default:
             break;
     }
 }