/**
 * Accept an enquiry.
 *
 * When a client clicks the Book Event button to accept an enquiry
 * transition the event to the awaiting contract status.
 *
 * @since	1.3
 * @param	arr		$data	Data for the transition.
 * @return	bool	True on succes, otherwise false
 */
function mdjm_accept_enquiry($data)
{
    global $current_user;
    $mdjm_event = mdjm_get_event($data['event_id']);
    if (!$mdjm_event) {
        return false;
    }
    do_action('mdjm_pre_event_accept_enquiry', $mdjm_event->ID, $data);
    $data['meta'] = array('_mdjm_event_enquiry_accepted' => current_time('mysql'), '_mdjm_event_enquiry_accepted_by' => $current_user->ID);
    $data['client_notices'] = mdjm_get_option('contract_to_client');
    if (!mdjm_update_event_status($mdjm_event->ID, 'mdjm-contract', $mdjm_event->post_status, $data)) {
        return false;
    }
    mdjm_add_journal(array('user' => get_current_user_id(), 'event' => $mdjm_event->ID, 'comment_content' => sprintf(__('%s has accepted their event enquiry', 'mobile-dj-manager'), $current_user->display_name . '<br>')), array('type' => 'update-event', 'visibility' => '2'));
    $content = '<html>' . "\n" . '<body>' . "\n";
    $content .= '<p>' . sprintf(__('Good news... %s has just accepted their %s quotation via %s', 'mobile-dj-manager'), '{client_fullname}', mdjm_get_label_singular(true), '{application_name}') . '</p>';
    $content .= '<hr />' . "\n";
    $content .= '<h4>' . sprintf(__('<a href="%s">%s ID: %s</a>', 'mobile-dj-manager'), admin_url('post.php?post=' . $mdjm_event->ID . '&action=edit'), mdjm_get_label_singular(), '{contract_id}') . '</h4>' . "\n";
    $content .= '<p>' . sprintf(__('Date: %s', 'mobile-dj-manager'), '{event_date}') . '<br />' . "\n";
    $content .= __('Type', 'mobile-dj-manager') . ': ' . mdjm_get_event_type($mdjm_event->ID) . '<br />' . "\n";
    $content .= __('Status', 'mobile-dj-manager') . ': ' . mdjm_get_event_status($mdjm_event->ID) . '<br />' . "\n";
    $content .= __('Client', 'mobile-dj-manager') . ': {client_fullname}<br />' . "\n";
    $content .= __('Value', 'mobile-dj-manager') . ': {total_cost}<br />' . "\n";
    $content .= __('Deposit', 'mobile-dj-manager') . ': {deposit} ({deposit_status})<br />' . "\n";
    $content .= __('Balance Due', 'mobile-dj-manager') . ': {balance}</p>' . "\n";
    $content .= '<p>' . sprintf(__('<a href="%s">View %s</a>', 'mobile-dj-manager'), admin_url('post.php?post=' . $mdjm_event->ID . '&action=edit'), mdjm_get_label_singular()) . '</p>' . "\n";
    $content .= '</body>' . "\n" . '</html>' . "\n";
    $args = array('to_email' => mdjm_get_option('system_email'), 'event_id' => $mdjm_event->ID, 'client_id' => $mdjm_event->client, 'subject' => sprintf(__('%s Quotation Accepted', 'mobile-dj-manager'), mdjm_get_label_singular()), 'message' => $content, 'copy_to' => 'disabled');
    mdjm_send_email_content($args);
    do_action('mdjm_post_event_accept_enquiry', $mdjm_event->ID, $data);
    return true;
}
Example #2
0
/**
 * 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">&nbsp;</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;
}
/**
 * Email the manual payment confirmation to the client from a customisable email template.
 *
 * @since	1.3
 * @param	int		$event_id		The event ID
 * @return	void
 */
function mdjm_email_manual_payment_confirmation($event_id)
{
    if (!mdjm_get_option('manual_payment_cfm_template')) {
        return;
    }
    $mdjm_event = mdjm_get_event($event_id);
    $from_name = mdjm_email_set_from_name('manual_payment', $mdjm_event);
    $from_name = apply_filters('mdjm_email_from_name', $from_name, 'manual_payment', $mdjm_event);
    $from_email = mdjm_email_set_from_address('manual_payment', $mdjm_event);
    $from_email = apply_filters('mdjm_email_from_address', $from_email, 'manual_payment', $mdjm_event);
    $client = get_userdata($mdjm_event->client);
    $to_email = $client->user_email;
    $subject = mdjm_email_set_subject(mdjm_get_option('manual_payment_cfm_template', false));
    $subject = apply_filters('mdjm_manual_payment_subject', wp_strip_all_tags($subject));
    $subject = mdjm_do_content_tags($subject, $event_id, $mdjm_event->client);
    $attachments = apply_filters('mdjm_manual_payment_attachments', array(), $mdjm_event);
    $message = mdjm_get_email_template_content(mdjm_get_option('manual_payment_cfm_template', false));
    $message = mdjm_do_content_tags($message, $event_id, $mdjm_event->client);
    $emails = MDJM()->emails;
    $emails->__set('event_id', $mdjm_event->ID);
    $emails->__set('from_name', $from_name);
    $emails->__set('from_address', $from_email);
    $headers = apply_filters('mdjm_manual_payment_headers', $emails->get_headers(), $event_id, $mdjm_event->client);
    $emails->__set('headers', $headers);
    $emails->__set('track', apply_filters('mdjm_track_email_manual_payment', mdjm_get_option('track_client_emails')));
    if (mdjm_get_option('bcc_admin_to_client')) {
        $emails->__set('copy_to', array(mdjm_get_option('system_email')));
    }
    $emails->send($to_email, $subject, $message, $attachments, sprintf(__('Payment received confirmation for %s', 'mobile-dj-manager'), mdjm_get_label_singular()));
}
 /**
  * Retrieve a single event by id.
  *
  * @since	1.4
  * @return	void
  */
 public function get_event()
 {
     $response = array();
     if (!isset($this->request['event_id'])) {
         $this->missing_params('event_id');
     }
     if (!mdjm_employee_can('read_events', $this->user_id)) {
         $this->no_permsission();
     }
     do_action('mdjm_before_api_get_event', $this);
     $mdjm_event = mdjm_get_event($this->request['event_id']);
     if (!$mdjm_event) {
         $error = array();
         $error['error'] = sprintf(__('%s does not exist.', 'mobile-dj-manager'), mdjm_get_label_singular());
         $this->data = $error;
         $this->output();
     }
     $response['event'] = mdjm_get_event_data($mdjm_event);
     $response['event'] = array_merge(array('id' => $mdjm_event->ID), $response['event']);
     $this->data = array_merge($this->data, $response);
     do_action('mdjm_after_api_get_event', $this);
     $this->output();
 }
Example #5
0
/**
 * Send the playlist via email.
 *
 * @since	1.3
 * @param	arr		$data	The super global $_POST
 * @return	void
 */
function mdjm_email_event_playlist_action($data)
{
    if (!wp_verify_nonce($data['mdjm_nonce'], 'email_playlist_entry')) {
        $message = 'security_failed';
    } else {
        global $current_user;
        $mdjm_event = mdjm_get_event($data['email_playlist_event_id']);
        $content = mdjm_format_playlist_content($mdjm_event->ID, $data['email_order_by'], 'ASC', true);
        $content = apply_filters('mdjm_print_playlist', $content, $data, $mdjm_event);
        $html_content_start = '<html>' . "\n" . '<body>' . "\n";
        $html_content_end = '<p>' . __('Regards', 'mobile-dj-manager') . '</p>' . "\n" . '<p>{company_name}</p>' . "\n";
        '<p>&nbsp;</p>' . "\n";
        '<p align="center" style="font-size: 9px">Powered by <a style="color:#F90" href="http://mdjm.co.uk" target="_blank">' . MDJM_NAME . '</a> version ' . MDJM_VERSION_NUM . '</p>' . "\n" . '</body>' . "\n" . '</html>';
        $args = array('to_email' => $current_user->user_email, 'from_name' => mdjm_get_option('company_name'), 'from_email' => mdjm_get_option('system_email'), 'event_id' => $mdjm_event->ID, 'client_id' => $mdjm_event->client, 'subject' => sprintf(__('Playlist for %s ID {contract_id}', 'mobile-dj-manager'), mdjm_get_label_singular()), 'message' => $html_content_start . $content . $html_content_end);
        if (mdjm_send_email_content($args)) {
            $message = 'playlist_emailed';
        } else {
            $message = 'playlist_email_failed';
        }
    }
    wp_redirect(add_query_arg('mdjm-message', $message));
    die;
}
Example #6
0
/**
 * MDJM Playlist Shortcode.
 *
 * Displays the MDJM playlist management system which will render a client interface for clients
 * or a guest interface for event guests with the access URL.
 * 
 * @since	1.3
 *
 * @return	string
 */
function mdjm_shortcode_playlist($atts)
{
    global $mdjm_event;
    if (isset($_GET['mdjmeventid'])) {
        $_GET['guest_playlist'] = $_GET['mdjmeventid'];
    }
    $visitor = isset($_GET['guest_playlist']) ? 'guest' : 'client';
    $output = '';
    $event_id = '';
    if (!empty($_GET['event_id'])) {
        $event_id = $_GET['event_id'];
    } else {
        $next_event = mdjm_get_clients_next_event(get_current_user_id());
        if ($next_event) {
            $event_id = $next_event[0]->ID;
        }
    }
    if (!isset($event_id) && !isset($_GET['guest_playlist'])) {
        ob_start();
        mdjm_get_template_part('playlist', 'noevent');
        $output .= mdjm_do_content_tags(ob_get_contents(), '', get_current_user_id());
    } else {
        $mdjm_event = $visitor == 'client' ? mdjm_get_event($event_id) : mdjm_get_event_by_playlist_code($_GET['guest_playlist']);
        if ($visitor == 'client') {
            if (!is_user_logged_in()) {
                echo mdjm_login_form(add_query_arg('event_id', $event_id, mdjm_get_formatted_url(mdjm_get_option('playlist_page'))));
            }
        }
        ob_start();
        if ($mdjm_event) {
            mdjm_get_template_part('playlist', $visitor);
            $output .= mdjm_do_content_tags(ob_get_contents(), $mdjm_event->ID, $mdjm_event->client);
        } else {
            mdjm_get_template_part('playlist', 'noevent');
            $output .= mdjm_do_content_tags(ob_get_contents(), '', get_current_user_id());
        }
    }
    ob_get_clean();
    // Reset global var
    $mdjm_event = '';
    return apply_filters('mdjm_playlist_form', $output);
}
/**
 * Retrieve an event by the guest playlist code.
 *
 * @since	1.3
 * @param	int		$access_code	The access code for the event playlist.
 * @return	obj		$event_query	WP_Query object.
 */
function mdjm_get_event_by_playlist_code($access_code)
{
    global $wpdb;
    $query = "SELECT `post_id`\n\t\t\t  AS `event_id` \n\t\t\t  FROM `{$wpdb->postmeta}` \n\t\t\t  WHERE `meta_value` = '{$access_code}' \n\t\t\t  LIMIT 1";
    $result = $wpdb->get_row($query);
    return $result ? mdjm_get_event($result->event_id) : false;
}
Example #8
0
/**
 * Mark event employees salaries as paid.
 *
 * @since	1.3
 * @param	int		$event_id		The event ID.
 * @param	int		$_employee_id	User ID of employee to pay.
 * @param	str		$amount			Amount to pay.
 * @return	mixed	Array of 'success' and 'failed' payments or if individual employee, true or false.
 */
function mdjm_pay_event_employees($event_id, $_employee_id = 0, $amount = 0)
{
    if (!mdjm_get_option('enable_employee_payments')) {
        return;
    }
    $mdjm_event = mdjm_get_event($event_id);
    if (!$mdjm_event) {
        return false;
    }
    $employees = $mdjm_event->get_all_employees();
    if (!$employees) {
        return false;
    }
    do_action('mdjm_pre_pay_event_employees', $event_id, $_employee_id, $mdjm_event);
    foreach ($employees as $employee_id => $employee_data) {
        if ($employee_data['payment_status'] == 'paid') {
            MDJM()->debug->log_it(sprintf('Skipping payment to %s. Employee already paid.', mdjm_get_employee_display_name($employee_id)));
        }
        $mdjm_txn = new MDJM_Txn($employee_data['txn_id']);
        if (!$mdjm_txn) {
            return false;
        }
        MDJM()->debug->log_it(sprintf('Starting payment to %s for %s', mdjm_get_employee_display_name($employee_id), mdjm_currency_filter(mdjm_format_amount($mdjm_txn->price))), true);
        if (!mdjm_set_employee_paid($employee_id, $event_id, $mdjm_txn->ID)) {
            MDJM()->debug->log_it(sprintf('Payment to %s failed', mdjm_get_employee_display_name($employee_id)));
            if (!empty($_employee_id)) {
                $return = false;
            } else {
                $return['failed'] = $employee_id;
            }
        } else {
            MDJM()->debug->log_it(sprintf('%s successfully paid %s', mdjm_get_employee_display_name($employee_id), mdjm_currency_filter(mdjm_format_amount($mdjm_txn->price))));
            mdjm_update_txn_meta($mdjm_txn->ID, array('_mdjm_txn_status' => 'Completed'));
            if (!empty($_employee_id)) {
                $return = true;
            } else {
                $return['success'] = $employee_id;
            }
        }
    }
    do_action('mdjm_post_pay_event_employees', $event_id, $_employee_id, $mdjm_event, $mdjm_txn->ID);
    return $return;
}