/** * Format the playlist results for emailing/printing. * * @since 1.3 * @param int $event_id The event ID to retrieve the playlist for. * @param str $orderby Which field to order the playlist entries by. * @param str $order Order ASC or DESC. * @param int $repeat_headers Repeat the table headers after this many rows. * @param bool $hide_empty If displaying by category do we hide empty categories? * @return str $results Output of playlist entries. */ function mdjm_format_playlist_content($event_id, $orderby = 'category', $order = 'ASC', $hide_empty = true, $repeat_headers = 0) { global $current_user; $mdjm_event = mdjm_get_event($event_id); // Obtain results ordered by category if ($orderby == 'category') { $playlist = mdjm_get_playlist_by_category($event_id, array('hide_empty' => $hide_empty)); if ($playlist) { foreach ($playlist as $cat => $entries) { foreach ($entries as $entry) { $entry_data = mdjm_get_playlist_entry_data($entry->ID); $results[] = array('ID' => $entry->ID, 'event' => $event_id, 'artist' => stripslashes($entry_data['artist']), 'song' => stripslashes($entry_data['song']), 'added_by' => stripslashes($entry_data['added_by']), 'category' => $cat, 'notes' => stripslashes($entry_data['djnotes']), 'date' => mdjm_format_short_date($entry->post_date)); } } } } else { $args = array('orderby' => $orderby == 'date' ? 'post_date' : 'meta_value', 'order' => $order, 'meta_key' => $orderby == 'date' ? '' : '_mdjm_playlist_entry_' . $orderby); $entries = mdjm_get_playlist_entries($event_id, $args); if ($entries) { foreach ($entries as $entry) { $entry_data = mdjm_get_playlist_entry_data($entry->ID); $categories = wp_get_object_terms($entry->ID, 'playlist-category'); if (!empty($categories)) { $category = $categories[0]->name; } $results[] = array('ID' => $entry->ID, 'event' => $event_id, 'artist' => stripslashes($entry_data['artist']), 'song' => stripslashes($entry_data['song']), 'added_by' => stripslashes($entry_data['added_by']), 'category' => !empty($category) ? $category : '', 'notes' => stripslashes($entry_data['djnotes']), 'date' => mdjm_format_short_date($entry->post_date)); } } } // Build out the formatted display if (!empty($results)) { $i = 0; $output = '<p>' . sprintf(__('Hey %s', 'mobile-dj-manager'), $current_user->first_name) . '</p>' . "\n"; $output .= '<p>' . __('Here is the playlist you requested...', 'mobile-dj-manager') . '</p>' . "\n"; $output .= '<p>' . __('Client Name', 'mobile-dj-manager') . ': ' . mdjm_get_client_display_name($mdjm_event->client) . '<br />' . "\n" . __('Event Date', 'mobile-dj-manager') . ': ' . mdjm_get_event_long_date($mdjm_event->ID) . '<br />' . "\n" . __('Event Type', 'mobile-dj-manager') . ': ' . mdjm_get_event_type($mdjm_event->ID) . '<br />' . "\n" . __('Songs in Playlist', 'mobile-dj-manager') . ': ' . count($results) . '<br />' . "\n" . '</p>'; $output .= '<hr />' . "\n"; $headers = '<tr style="height: 30px">' . "\n" . '<td style="width: 15%"><strong>' . __('Song', 'mobile-dj-manager') . '</strong></td>' . "\n" . '<td style="width: 15%"><strong>' . __('Artist', 'mobile-dj-manager') . '</strong></td>' . "\n" . '<td style="width: 15%"><strong>' . __('Category', 'mobile-dj-manager') . '</strong></td>' . "\n" . '<td style="width: 40%"><strong>' . __('Notes', 'mobile-dj-manager') . '</strong></td>' . "\n" . '<td style="width: 15%"><strong>' . __('Added By', 'mobile-dj-manager') . '</strong></td>' . "\n" . '</tr>' . "\n"; $output .= '<table width="90%" border="0" cellpadding="0" cellspacing="0">' . "\n"; $output .= $headers; foreach ($results as $result) { if ($repeat_headers > 0 && $i == $repeat_headers) { $output .= '<tr>' . "\n" . '<td colspan="5"> </td>' . "\n" . '</tr>' . "\n" . $headers; $i = 0; } if (is_numeric($result['added_by'])) { $user = get_userdata($result['added_by']); $name = $user->display_name; } else { $name = $result['added_by']; } $output .= '<tr>' . "\n" . '<td>' . stripslashes($result['song']) . '</td>' . "\n" . '<td>' . stripslashes($result['artist']) . '</td>' . "\n" . '<td>' . stripslashes($result['category']) . '</td>' . "\n" . '<td>' . stripslashes($result['notes']) . '</td>' . "\n" . '<td>' . stripslashes($name) . '</td>' . "\n" . '</tr>' . "\n"; $i++; } $output .= '</table>' . "\n"; } else { $output = '<p>' . __('The playlist for this event does not contain any entries!', 'mobile-dj-manager') . '</p>' . "\n"; } return $output; }
/** * Retrieve the entries for this playlist. * * @since 1.3 * @param int $per_page The number of items to display per page * @param int $page_num The current page number * @return arr The array of data to display within the table. */ private function get_entries($per_page = -1, $page_num = 1) { if (!isset($_GET['event_id'])) { return false; } $result = array(); $mdjm_event = new MDJM_Event($_GET['event_id']); $orderby = isset($_GET['orderby']) ? $_GET['orderby'] : 'category'; $order = isset($_GET['order']) ? $_GET['order'] : 'ASC'; if ($orderby == 'category') { $args = array('orderby' => 'name', 'order' => $order, 'hide_empty' => true); $playlist = mdjm_get_playlist_by_category($mdjm_event->ID, $args); if ($playlist) { foreach ($playlist as $cat => $entries) { foreach ($entries as $entry) { $entry_data = mdjm_get_playlist_entry_data($entry->ID); $result[] = array('ID' => $entry->ID, 'event' => $mdjm_event->ID, 'artist' => stripslashes($entry_data['artist']), 'song' => stripslashes($entry_data['song']), 'added_by' => stripslashes($entry_data['added_by']), 'category' => $cat, 'notes' => stripslashes($entry_data['djnotes']), 'date' => mdjm_format_short_date($entry->post_date)); } } } } else { $args = array('orderby' => $orderby == 'date' ? 'post_date' : 'meta_value', 'order' => $order, 'meta_key' => $orderby == 'date' ? '' : '_mdjm_playlist_entry_' . $orderby); $entries = mdjm_get_playlist_entries($mdjm_event->ID, $args); if ($entries) { foreach ($entries as $entry) { $entry_data = mdjm_get_playlist_entry_data($entry->ID); $categories = wp_get_object_terms($entry->ID, 'playlist-category'); if (!empty($categories)) { $category = $categories[0]->name; } $result[] = array('ID' => $entry->ID, 'event' => $mdjm_event->ID, 'artist' => stripslashes($entry_data['artist']), 'song' => stripslashes($entry_data['song']), 'added_by' => stripslashes($entry_data['added_by']), 'category' => !empty($category) ? $category : '', 'notes' => stripslashes($entry_data['djnotes']), 'date' => mdjm_format_short_date($entry->post_date)); } } } return apply_filters('mdjm_list_event_playlist', $result, $mdjm_event->ID); }
/** * Check the availability status for the given date * * @since 1.3 * @param Global $_POST * @return arr */ function mdjm_do_availability_check_ajax() { $date = $_POST['check_date']; $avail_text = !empty($_POST['avail_text']) ? $_POST['avail_text'] : mdjm_get_option('availability_check_pass_text'); $unavail_text = !empty($_POST['unavail_text']) ? $_POST['unavail_text'] : mdjm_get_option('availability_check_fail_text'); $search = array('{EVENT_DATE}', '{EVENT_DATE_SHORT}'); $replace = array(date('l, jS F Y', strtotime($date)), mdjm_format_short_date($date)); $result = mdjm_do_availability_check($date); if (!empty($result['available'])) { $result['result'] = 'available'; $result['message'] = str_replace($search, $replace, $avail_text); $result['message'] = mdjm_do_content_tags($result['message']); } else { $result['result'] = 'unavailable'; $result['message'] = str_replace($search, $replace, $unavail_text); $result['message'] = mdjm_do_content_tags($result['message']); } echo json_encode($result); die; }
/** * Output the employee setup row * * @since 1.3.7 * @global obj $mdjm_event MDJM_Event class object * @global bool $mdjm_event_update True if this event is being updated, false if new. * @param int $event_id The event ID. * @return str */ function mdjm_event_metabox_admin_dj_setup_row($event_id) { global $mdjm_event, $mdjm_event_update; mdjm_insert_datepicker(array('id' => 'dj_setup_date', 'altfield' => '_mdjm_event_djsetup')); $setup_date = $mdjm_event->get_setup_date(); $setup_time = $mdjm_event->get_setup_time(); $format = mdjm_get_option('time_format', 'H:i'); ?> <div class="mdjm_field_wrap mdjm_form_fields"> <div class="mdjm_col col2"> <label for="dj_setup_date"><?php _e('Setup Date:', 'mobile-dj-manager'); ?> </label><br /> <?php echo MDJM()->html->text(array('name' => 'dj_setup_date', 'class' => 'mdjm_setup_date', 'value' => $setup_date ? mdjm_format_short_date($setup_date) : '')); ?> <?php echo MDJM()->html->hidden(array('name' => '_mdjm_event_djsetup', 'value' => $setup_date ? $setup_date : '')); ?> </div> <div class="mdjm_col col2"> <label for="dj_setup_hr"><?php _e('Setup Time:', 'mobile-dj-manager'); ?> </label><br /> <?php echo MDJM()->html->time_hour_select(array('name' => 'dj_setup_hr', 'selected' => !empty($setup_time) ? date($format[0], strtotime($setup_time)) : '')); ?> <?php echo MDJM()->html->time_minute_select(array('name' => 'dj_setup_min', 'selected' => !empty($setup_time) ? date($format[2], strtotime($setup_time)) : '')); ?> <?php if ('H:i' != $format) { ?> <?php echo MDJM()->html->time_period_select(array('name' => 'dj_setup_period', 'selected' => !empty($setup_time) ? date('A', strtotime($setup_time)) : '')); ?> <?php } ?> </div> </div> <?php }
/** * Prepare and execute an availability check. * * @since 1.4 * @return void */ public function availability_check() { $result = false; $response = array(); if (!isset($this->request['date'])) { $this->missing_params('date'); } else { do_action('mdjm_before_api_availability_check', $this); $date = $this->request['date']; $employees = isset($this->request['employees']) ? explode(',', $this->request['employees']) : ''; $roles = isset($this->request['roles']) ? explode(',', $this->request['roles']) : ''; $available_text = !empty($this->request['avail_text']) ? $this->request['avail_text'] : mdjm_get_option('availability_check_pass_text'); $unavailable_text = !empty($this->request['unavail_text']) ? $this->request['unavail_text'] : mdjm_get_option('availability_check_fail_text'); $search = array('{EVENT_DATE}', '{EVENT_DATE_SHORT}'); $replace = array(date('l, jS F Y', strtotime($date)), mdjm_format_short_date($date)); $result = mdjm_do_availability_check($date, $employees, $roles); } if ($result) { if (!empty($result['available'])) { $message = str_replace($search, $replace, $available_text); $response['availability'] = array('date' => $date, 'response' => 'available', 'employees' => $result['available'], 'message' => mdjm_do_content_tags($message)); } else { $message = str_replace($search, $replace, $unavailable_text); $response['availability'] = array('date' => $date, 'response' => 'unavailable', 'employees' => '', 'message' => mdjm_do_content_tags($message)); } } do_action('mdjm_after_api_availability_check', $this); $this->data = array_merge($this->data, $response); $this->output(); }
/** * Create the HTML output for the events column * * @param obj $item The object array for the current item * * @return str The HTML output for the checkbox column */ public function column_events($item) { $next_event = mdjm_get_employees_next_event($item->ID); $total_events = mdjm_count_employee_events($item->ID); printf(__('Next: %s', 'mobile-dj-manager'), !empty($next_event) ? '<a href="' . get_edit_post_link($next_event->ID) . '">' . mdjm_format_short_date(get_post_meta($next_event->ID, '_mdjm_event_date', true)) . '</a>' : __('None', 'mobile-dj-manager')); echo '<br />'; printf(__('Total: %s', 'mobile-dj-manager'), !empty($total_events) ? '<a href="' . admin_url('edit.php?s&post_type=mdjm-event&post_status=all' . '&action=-1&mdjm_filter_date=0&mdjm_filter_type&mdjm_filter_employee=' . $item->ID . '&mdjm_filter_client=0&filter_action=Filter&paged=1&action2=-1') . '">' . $total_events . '</a>' : '0'); }
/** * Front-end display of widget. * * @see WP_Widget::widget() * * @param arr $args Widget arguments. * @param arr $instance Saved values from database. */ public function widget($args, $instance) { add_action('wp_head', array(&$this, 'datepicker')); if (!empty($instance['ajax'])) { self::ajax($args, $instance); } echo $args['before_widget']; if (!empty($instance['title'])) { echo $args['before_title'] . apply_filters('widget_title', $instance['title']) . $args['after_title']; } /* Check for form submission & process */ if (isset($_POST['mdjm_widget_avail_submit']) && $_POST['mdjm_widget_avail_submit'] == $instance['submit_text']) { $dj_avail = dj_available('', $_POST['widget_check_date']); if (isset($dj_avail)) { if (!empty($dj_avail['available'])) { if (isset($instance['available_action']) && $instance['available_action'] != 'text') { ?> <script type="text/javascript"> window.location = '<?php echo mdjm_get_formatted_url($instance['available_action']) . 'mdjm_avail=1&mdjm_avail_date=' . $_POST['widget_check_date']; ?> '; </script> <?php } } else { if (isset($instance['unavailable_action']) && $instance['unavailable_action'] != 'text') { ?> <script type="text/javascript"> window.location = '<?php echo mdjm_get_formatted_url($instance['unavailable_action']); ?> '; </script> <?php } } } // if( isset( $dj_avail ) ) } // if( isset( $_POST['mdjm_avail_submit'] ) ... /* We need the jQuery Calendar */ wp_enqueue_script('jquery-ui-datepicker'); wp_enqueue_style('jquery-ui-css', '//ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/themes/smoothness/jquery-ui.css'); mdjm_insert_datepicker(array('class' => 'mdjm_widget_date', 'altfield' => 'widget_check_date', 'mindate' => '1')); if (isset($instance['intro']) && !empty($instance['intro'])) { if (isset($_POST['mdjm_widget_avail_submit']) && $_POST['mdjm_widget_avail_submit'] == $instance['submit_text']) { $search = array('{EVENT_DATE}', '{EVENT_DATE_SHORT}'); $replace = array(date('l, jS F Y', strtotime($_POST['widget_check_date'])), mdjm_format_short_date($_POST['widget_check_date'])); } if (!isset($_POST['mdjm_widget_avail_submit']) || $_POST['mdjm_widget_avail_submit'] != $instance['submit_text']) { echo '<div id="widget_avail_intro">' . $instance['intro'] . '</div>'; } else { if (!empty($instance['ajax'])) { ?> <div id="widget_availability_result"></div> <?php } else { if (!empty($dj_avail['available']) && $instance['available_action'] == 'text' && !empty($instance['available_text'])) { echo str_replace($search, $replace, $instance['available_text']); } else { echo str_replace($search, $replace, $instance['unavailable_text']); } } } } ?> <form name="mdjm-widget-availability-check" id="mdjm-widget-availability-check" method="post"> <label for="widget_avail_date"><?php echo $instance['label']; ?> </label> <input type="text" name="widget_avail_date" id="widget_avail_date" class="mdjm_widget_date" style="z-index:99;" placeholder="<?php echo mdjm_format_datepicker_date(); ?> " /> <input type="hidden" name="widget_check_date" id="widget_check_date" value="" /> <p<?php echo isset($instance['submit_centre']) && $instance['submit_centre'] == 'Y' ? ' style="text-align:center"' : ''; ?> > <input type="submit" name="mdjm_widget_avail_submit" id="mdjm_widget_avail_submit" value="<?php echo $instance['submit_text']; ?> " /> <div id="widget_pleasewait" class="page-content" style="display: none;"><?php _e('Please wait...', 'mobile-dj-manager'); ?> <img src="<?php echo MDJM_PLUGIN_URL; ?> /assets/images/loading.gif" alt="<?php _e('Please wait...', 'mobile-dj-manager'); ?> " /></div> </form> <script type="text/javascript"> jQuery(document).ready(function($){ // Configure the field validator $('#mdjm-widget-availability-check').validate({ rules: { widget_avail_date: { required: true, }, }, messages: { widget_avail_date: { required: "<?php _e('Please enter a date', 'mobile-dj-manager'); ?> ", }, }, errorClass: "mdjm-form-error", validClass: "mdjm-form-valid", } ); }); </script> <?php echo $args['after_widget']; }
/** * Get the Export Data * * @access public * @since 1.4 * @return arr $data The data for the CSV file */ public function get_data() { $data = array(); // Export all events $offset = 30 * ($this->step - 1); $args = array('post_type' => 'mdjm-event', 'posts_per_page' => 30, 'offset' => $offset, 'paged' => $this->step, 'post_status' => $this->status, 'order' => 'ASC', 'orderby' => 'ID'); if (!empty($this->start) || !empty($this->end)) { $args['meta_query'] = array(array('key' => '_mdjm_event_date', 'value' => array(date('Y-m-d', strtotime($this->start)), date('Y-m-d', strtotime($this->end))), 'compare' => 'BETWEEN', 'type' => 'DATE')); } $events = get_posts($args); if ($events) { $i = 0; foreach ($events as $event) { $event_data = mdjm_get_event_data($event->ID); $employees = array(); $package = ''; $addons = array(); if (!empty($event_data['client'])) { $client = '(' . $event_data['client'] . ') ' . mdjm_get_client_display_name($event_data['client']); } if (!empty($event_data['employees']['primary_employee'])) { $primary_employee = '(' . $event_data['employees']['primary_employee'] . ') ' . mdjm_get_employee_display_name($event_data['employees']['primary_employee']); } if (!empty($event_data['employees']['employees'])) { foreach ($event_data['employees']['employees'] as $employee_id => $employee_data) { $employees[] = '(' . $employee_id . ') ' . mdjm_get_employee_display_name($employee_id); } } if (!empty($event_data['equipment']['package'])) { $package = $event_data['equipment']['package']; } if (!empty($event_data['equipment']['addons'])) { foreach ($event_data['equipment']['addons'] as $addon_id) { $addons[] = mdjm_get_addon_name($addon_id); } } $data[$i] = array('id' => $event->ID, 'event_id' => mdjm_get_event_contract_id($event->ID), 'date' => mdjm_format_short_date($event_data['date']), 'status' => $event_data['status'], 'client' => $client, 'primary_employee' => '(' . $event_data['employees']['primary_employee'] . ') ' . mdjm_get_client_display_name($event_data['employees']['primary_employee']), 'employees' => implode(',', $employees), 'package' => $package, 'addons' => implode(', ', $addons), 'cost' => mdjm_format_amount($event_data['cost']['cost']), 'deposit' => mdjm_format_amount($event_data['cost']['deposit']), 'deposit_status' => $event_data['cost']['deposit_status'], 'balance' => mdjm_format_amount($event_data['cost']['balance']), 'balance_status' => $event_data['cost']['balance_status'], 'start_time' => mdjm_format_time($event_data['start_time']), 'end_time' => mdjm_format_time($event_data['end_time']), 'end_date' => mdjm_format_short_date($event_data['end_date']), 'setup_date' => mdjm_format_short_date($event_data['setup_date']), 'setup_time' => mdjm_format_time($event_data['setup_time']), 'duration' => $event_data['duration'], 'contract' => $event_data['contract'], 'contract_status' => $event_data['contract_status'], 'playlist_enabled' => $event_data['playlist']['playlist_enabled'], 'playlist_status' => $event_data['playlist']['playlist_status'], 'source' => $event_data['source'], 'converted' => $event_data['contract_status'], 'venue' => $event_data['venue']['name'], 'address' => !empty($event_data['venue']['address']) ? implode(', ', $event_data['venue']['address']) : ''); $i++; } $data = apply_filters('mdjm_export_get_data', $data); $data = apply_filters('mdjm_export_get_data_' . $this->export_type, $data); return $data; } return false; }
/** * Content tag: ddmmyyyy. * The date in short format. * * @param * * @return str The current date in short format. */ function mdjm_content_tag_ddmmyyyy() { return mdjm_format_short_date(); }
/** * Displays all event transactions within a table. * * @since 1.3.7 * @global obj $mdjm_event MDJM_Event class object * @param int $event_id * @return str */ function mdjm_do_event_txn_table($event_id) { global $mdjm_event; $event_txns = apply_filters('mdjm_event_txns', mdjm_get_event_txns($event_id, array('orderby' => 'post_status'))); $in = 0; $out = 0; ?> <table class="widefat mdjm_event_txn_list"> <thead> <tr> <th style="width: 20%"><?php _e('Date', 'mobile-dj-manager'); ?> </th> <th style="width: 20%"><?php _e('To/From', 'mobile-dj-manager'); ?> </th> <th style="width: 15%"><?php _e('In', 'mobile-dj-manager'); ?> </th> <th style="width: 15%"><?php _e('Out', 'mobile-dj-manager'); ?> </th> <th><?php _e('Details', 'mobile-dj-manager'); ?> </th> <?php do_action('mdjm_event_txn_table_head', $event_id); ?> </tr> </thead> <tbody> <?php if ($event_txns) { ?> <?php foreach ($event_txns as $event_txn) { ?> <?php $txn = new MDJM_Txn($event_txn->ID); ?> <tr class="mdjm_field_wrapper"> <td><a href="<?php echo get_edit_post_link($txn->ID); ?> "><?php echo mdjm_format_short_date($txn->post_date); ?> </a></td> <td><?php echo esc_attr(mdjm_get_txn_recipient_name($txn->ID)); ?> </td> <td> <?php if ($txn->post_status == 'mdjm-income') { ?> <?php $in += mdjm_sanitize_amount($txn->price); ?> <?php echo mdjm_currency_filter(mdjm_format_amount($txn->price)); ?> <?php } else { ?> <?php echo '–'; ?> <?php } ?> </td> <td> <?php if ($txn->post_status == 'mdjm-expenditure') { ?> <?php $out += mdjm_sanitize_amount($txn->price); ?> <?php echo mdjm_currency_filter(mdjm_format_amount($txn->price)); ?> <?php } else { ?> <?php echo '–'; ?> <?php } ?> </td> <td><?php echo $txn->get_type(); ?> </td> </tr> <?php } ?> <?php } else { ?> <tr> <td colspan="5"><?php printf(__('There are currently no transactions for this %s', 'mobile-dj-manager'), mdjm_get_label_singular(true)); ?> </td> </tr> <?php } ?> </tbody> <tfoot> <tr> <th style="width: 20%"> </th> <th style="width: 20%"> </th> <th style="width: 15%"><strong><?php echo mdjm_currency_filter(mdjm_format_amount($in)); ?> </strong></th> <th style="width: 15%"><strong><?php echo mdjm_currency_filter(mdjm_format_amount($out)); ?> </strong></th> <th><strong><?php printf(__('%s Earnings:', 'mobile-dj-manager'), mdjm_get_label_singular()); ?> <?php echo mdjm_currency_filter(mdjm_format_amount($in - $out)); ?> </strong></th> </tr> <?php do_action('mdjm_event_txn_table_foot', $event_id); ?> </tfoot> </table> <?php }
/** * Returns the date for a transaction in short format. * * @since 1.3 * @param int $txn_id The transaction ID. * @return str The date of the transaction. */ function mdjm_get_txn_date($txn_id = '') { if (empty($txn_id)) { return false; } $txn = new MDJM_Txn($txn_id); return mdjm_format_short_date($txn->get_date()); }