/** * 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; }
public function fail_enquiry() { global $mdjm, $mdjm_settings; if (MDJM_DEBUG == true) { MDJM()->debug->log_it('*** Starting the Fail Enquiry task ***', true); } $cron_start = microtime(true); $expired = date('Y-m-d', strtotime("-" . $this->schedules['fail-enquiry']['options']['age'])); // Retrieve expired enquiries $enquiries = mdjm_get_events(array('post_status' => 'mdjm-enquiry', 'date_query' => array('before' => $expired))); $notify = array(); $x = 0; if (count($enquiries) > 0) { // Enquiries to process MDJM()->debug->log_it(count($enquiries) . ' ' . _n('enquiry', 'enquiries', count($enquiries)) . ' to expire'); remove_action('save_post_mdjm-event', 'mdjm_save_event_post', 10, 3); /* -- Loop through the enquiries and update as failed -- */ foreach ($enquiries as $enquiry) { $cronned = get_post_meta($event->ID, '_mdjm_event_tasks', true); if (!empty($cronned) && $cronned != '') { $cron_update = json_decode($cronned, true); } if (array_key_exists('request-deposit', $cron_update)) { // Task has already run for this event continue; } if (!is_array($cron_update)) { $cron_update = array(); } $cron_update[$this->schedules['fail-enquiry']['slug']] = time(); mdjm_update_event_status($enquiry->ID, 'mdjm-failed', $enquiry->post_status, array('meta' => array('_mdjm_event_tasks' => json_encode($cron_update)))); /* -- Update Journal -- */ MDJM()->debug->log_it(' -- Adding journal entry'); mdjm_add_journal(array('user_id' => 1, 'event_id' => $enquiry->ID, 'comment_content' => 'Enquiry marked as lost via Scheduled Task <br /><br />' . time()), array('type' => 'update-event', 'visibility' => '1')); $notify_dj = isset($this->schedules['fail-enquiry']['options']['notify_dj']) ? $this->schedules['fail-enquiry']['options']['notify_dj'] : ''; $notify_admin = isset($this->schedules['fail-enquiry']['options']['notify_admin']) ? $this->schedules['fail-enquiry']['options']['notify_admin'] : ''; $client = get_post_meta($enquiry->ID, '_mdjm_event_client', true); $dj = get_post_meta($enquiry->ID, '_mdjm_event_dj', true); $event_date = get_post_meta($enquiry->ID, '_mdjm_event_date', true); $event_dj = !empty($dj) ? get_userdata($dj) : 'DJ not found'; $event_client = !empty($client) ? get_userdata($client) : 'Client not found'; $venue_post_id = get_post_meta($enquiry->ID, '_mdjm_event_venue_id', true); $event_venue = MDJM()->events->mdjm_get_venue_details($venue_post_id, $enquiry->ID); /* Prepare admin notification email data array */ if (!empty($notify_admin) && $notify_admin == 'Y') { MDJM()->debug->log_it(' -- Admin notifications are enabled'); if (!isset($notify['admin']) || !is_array($notify['admin'])) { $notify['admin'] = array(); } $notify['admin'][$enquiry->ID] = array('id' => $enquiry->ID, 'client' => $event_client->display_name, 'venue' => !empty($event_venue['name']) ? $event_venue['name'] : 'No Venue Set', 'djinfo' => $event_dj, 'date' => !empty($event_date) ? date("d M Y", strtotime($event_date)) : 'Date not found'); } // End if( !empty( $notify_admin ) && $notify_admin == 'Y' ) /* Prepare DJ notification email data array */ if (!empty($notify_dj) && $notify_dj == 'Y') { MDJM()->debug->log_it(' -- DJ notifications are enabled'); if (!isset($notify['dj']) || !is_array($notify['dj'])) { $notify['dj'] = array(); } $notify['dj'][$dj] = array(); $notify['dj'][$dj][$enquiry->ID] = array('id' => $enquiry->id, 'client' => $event_client->display_name, 'venue' => !empty($event_venue['name']) ? $event_venue['name'] : 'No Venue Set', 'djinfo' => $event_dj, 'date' => !empty($event_date) ? date("d M Y", strtotime($event_date)) : 'Date not found'); } // End if( !empty( $notify_dj ) && $notify_dj == 'Y' ) $x++; } // End foreach $cron_end = microtime(true); /* -- Prepare the Admin notification email -- */ if (!empty($notify_admin) && $notify_admin == 'Y') { $notify_email_args = array('data' => $notify['admin'], 'taskinfo' => $this->schedules['fail-enquiry'], 'start' => $cron_start, 'end' => $cron_end, 'total' => $x); // $notify_email_args $content = $this->notification_content($notify_email_args); $mdjm->send_email(array('content' => $content, 'to' => $mdjm_settings['email']['system_email'], 'subject' => sanitize_text_field($this->schedules['fail-enquiry']['options']['email_subject']), 'journal' => false, 'html' => false, 'cc_admin' => false, 'cc_dj' => false, 'filter' => false, 'log_comm' => false)); } // if( !empty( $notify_admin ) && $notify_admin == 'Y' ) { /* -- Prepare the DJ notification email -- */ if (!empty($notify_dj) && $notify_dj == 'Y') { foreach ($notify['dj'] as $notify_dj) { foreach ($notify_dj as $dj) { $notify_email_args = array('data' => $notify_dj, 'taskinfo' => $this->schedules['fail-enquiry'], 'start' => $cron_start, 'end' => $cron_end, 'total' => $x); // $notify_email_args $content = $this->notification_content($notify_email_args); $mdjm->send_email(array('content' => $content, 'to' => $dj->ID, 'subject' => sanitize_text_field($this->schedules['fail-enquiry']['options']['email_subject']), 'journal' => false, 'html' => false, 'cc_admin' => false, 'cc_dj' => false, 'filter' => false, 'log_comm' => false)); } // foreach( $notify_dj as $dj ) } // foreach( $notify['dj'] as $notify_dj ) } // if( !empty( $notify_dj ) && $notify_dj == 'Y' ) add_action('save_post_mdjm-event', 'mdjm_save_event_post', 10, 3); } else { MDJM()->debug->log_it('No enquiries to process as failed'); } // Prepare next run time $this->update_nextrun('fail-enquiry'); if (MDJM_DEBUG == true) { MDJM()->debug->log_it('*** Completed the Fail Enquiry task ***', true); } }
/** * Save the meta data for the event * * @since 0.7 * @param int $post_id The current event post ID. * @param obj $post The current event post object (WP_Post). * @param bool $update Whether this is an existing post being updated or not. * * @return void */ function mdjm_save_event_post($post_id, $post, $update) { if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { return; } if ($post->post_status == 'trash') { return; } if (empty($update)) { return; } // Permission Check if (!mdjm_employee_can('manage_events')) { MDJM()->debug->log_it(sprintf('PERMISSION ERROR: User %s is not allowed to edit events', get_current_user_id())); return; } // Remove the save post action to avoid loops. remove_action('save_post_mdjm-event', 'mdjm_save_event_post', 10, 3); // Fire our pre-save hook do_action('mdjm_pre_event_save', $post_id, $post, $update); $debug[] = 'Starting Event Save'; // Get current meta data for the post so we can track changes within the journal. $current_meta = get_post_meta($post_id); /** * Get the Client ID and store it in the event data array. * If a client has been selected from the dropdown, we simply use that ID. * If adding a new client, call the method and use the returned user ID. */ $event_data['_mdjm_event_client'] = $_POST['client_name'] != 'add_new' ? $_POST['client_name'] : mdjm_add_client(); /** * For new events we fire the 'mdjm_add_new_event' action */ if (empty($update)) { do_action('mdjm_create_new_event', $post); } /** * If the client is flagged to have their password reset, set the flag. * The flag will be checked and processed during the content tag filtering process. */ if (!empty($_POST['mdjm_reset_pw'])) { $debug[] = sprintf('Client %s flagged for password reset', $event_data['_mdjm_event_client']); update_user_meta($event_data['_mdjm_event_client'], 'mdjm_pass_action', true); } /** * Determine the Venue ID if an existing venue was selected. * Otherwise, determine if we're using the client's address or adding a manual venue address */ if ($_POST['venue_id'] != 'manual' && $_POST['venue_id'] != 'client') { $event_data['_mdjm_event_venue_id'] = $_POST['venue_id']; } elseif (!empty($_POST['_mdjm_event_venue_id']) && $_POST['_mdjm_event_venue_id'] == 'client') { $event_data['_mdjm_event_venue_id'] = 'client'; } else { $event_data['_mdjm_event_venue_id'] = 'manual'; } /** * If the option was selected to save the venue, prepare the post and post meta data * for the venue. */ if ($_POST['venue_id'] == 'manual' && !empty($_POST['save_venue'])) { foreach ($_POST as $venue_key => $venue_value) { if (substr($venue_key, 0, 6) == 'venue_') { $venue_meta[$venue_key] = $venue_value; if ($venue_key == 'venue_postcode' && !empty($venue_value)) { $venue_meta[$venue_key] = strtoupper($venue_value); } elseif ($venue_key == 'venue_email' && !empty($venue_value)) { $venue_meta[$venue_key] = sanitize_email($venue_value); } else { $venue_meta[$venue_key] = sanitize_text_field(ucwords($venue_value)); } } } // Create the new venue $event_data['_mdjm_event_venue_id'] = mdjm_add_venue($_POST['venue_name'], $venue_meta); } else { // Manual venue address entry if ($_POST['venue_id'] != 'client') { $event_data['_mdjm_event_venue_name'] = sanitize_text_field(ucwords($_POST['venue_name'])); $event_data['_mdjm_event_venue_contact'] = sanitize_text_field(ucwords($_POST['venue_contact'])); $event_data['_mdjm_event_venue_phone'] = sanitize_text_field($_POST['venue_phone']); $event_data['_mdjm_event_venue_email'] = sanitize_email(strtolower($_POST['venue_email'])); $event_data['_mdjm_event_venue_address1'] = sanitize_text_field(ucwords($_POST['venue_address1'])); $event_data['_mdjm_event_venue_address2'] = sanitize_text_field(ucwords($_POST['venue_address2'])); $event_data['_mdjm_event_venue_town'] = sanitize_text_field(ucwords($_POST['venue_town'])); $event_data['_mdjm_event_venue_county'] = sanitize_text_field(ucwords($_POST['venue_county'])); $event_data['_mdjm_event_venue_postcode'] = strtoupper(sanitize_text_field($_POST['venue_postcode'])); } else { // Using clients address $client_data = get_userdata($event_data['_mdjm_event_client']); $event_data['_mdjm_event_venue_name'] = __('Client Address', 'mobile-dj-manager'); $event_data['_mdjm_event_venue_contact'] = sprintf('%s %s', !empty($client_data->first_name) ? sanitize_text_field($client_data->first_name) : '', !empty($client_data->last_name) ? sanitize_text_field($client_data->last_name) : ''); $event_data['_mdjm_event_venue_phone'] = !empty($client_data->phone1) ? $client_data->phone1 : ''; $event_data['_mdjm_event_venue_email'] = !empty($client_data->user_email) ? $client_data->user_email : ''; $event_data['_mdjm_event_venue_address1'] = !empty($client_data->address1) ? $client_data->address1 : ''; $event_data['_mdjm_event_venue_address2'] = !empty($client_data->address2) ? $client_data->address2 : ''; $event_data['_mdjm_event_venue_town'] = !empty($client_data->town) ? $client_data->town : ''; $event_data['_mdjm_event_venue_county'] = !empty($client_data->county) ? $client_data->county : ''; $event_data['_mdjm_event_venue_postcode'] = !empty($client_data->postcode) ? $client_data->postcode : ''; } } /** * Travel data */ $travel_fields = mdjm_get_event_travel_fields(); foreach ($travel_fields as $travel_field) { $field = 'travel_' . $travel_field; $travel_data[$travel_field] = !empty($_POST[$field]) ? $_POST[$field] : ''; if ('cost' == $travel_field && !empty($_POST[$field])) { $travel_data[$travel_field] = mdjm_sanitize_amount($_POST[$field]); } } $event_data['_mdjm_event_travel_data'] = $travel_data; /** * Prepare the remaining event meta data. */ $event_data['_mdjm_event_last_updated_by'] = get_current_user_id(); /** * Event name. * If no name is defined, use the event type. * Allow filtering of the event name with the `mdjm_event_name` filter. */ if (empty($_POST['_mdjm_event_name'])) { $_POST['_mdjm_event_name'] = get_term($_POST['mdjm_event_type'], 'event-types')->name; } $_POST['_mdjm_event_name'] = apply_filters('mdjm_event_name', $_POST['_mdjm_event_name'], $post_id); // Generate the playlist reference for guest access if (empty($update) || empty($current_meta['_mdjm_event_playlist_access'][0])) { $event_data['_mdjm_event_playlist_access'] = mdjm_generate_playlist_guest_code(); } // Set whether or not the playlist is enabled for the event $event_data['_mdjm_event_playlist'] = !empty($_POST['enable_playlist']) ? $_POST['enable_playlist'] : 'N'; /** * All the remaining custom meta fields are prefixed with '_mdjm_event_'. * Loop through all $_POST data and put all event meta fields into the $event_data array */ foreach ($_POST as $key => $value) { if (substr($key, 0, 12) == '_mdjm_event_') { if ($key == '_mdjm_event_dj_wage' || $key == '_mdjm_event_cost' || $key == '_mdjm_event_deposit') { $value = mdjm_sanitize_amount($value); } $event_data[$key] = $value; } } /** * We store all times in H:i:s but the user may prefer a different format so we * determine their time format setting and adjust to H:i:s for saving. */ if (mdjm_get_option('time_format', 'H:i') == 'H:i') { // 24 Hr $event_data['_mdjm_event_start'] = date('H:i:s', strtotime($_POST['event_start_hr'] . ':' . $_POST['event_start_min'])); $event_data['_mdjm_event_finish'] = date('H:i:s', strtotime($_POST['event_finish_hr'] . ':' . $_POST['event_finish_min'])); $event_data['_mdjm_event_djsetup_time'] = date('H:i:s', strtotime($_POST['dj_setup_hr'] . ':' . $_POST['dj_setup_min'])); } else { // 12 hr $event_data['_mdjm_event_start'] = date('H:i:s', strtotime($_POST['event_start_hr'] . ':' . $_POST['event_start_min'] . $_POST['event_start_period'])); $event_data['_mdjm_event_finish'] = date('H:i:s', strtotime($_POST['event_finish_hr'] . ':' . $_POST['event_finish_min'] . $_POST['event_finish_period'])); $event_data['_mdjm_event_djsetup_time'] = date('H:i:s', strtotime($_POST['dj_setup_hr'] . ':' . $_POST['dj_setup_min'] . $_POST['dj_setup_period'])); } if (empty($_POST['_mdjm_event_djsetup'])) { $event_data['_mdjm_event_djsetup'] = $_POST['_mdjm_event_date']; } /** * Set the event end date. * If the finish time is less than the start time, assume following day. */ if (date('H', strtotime($event_data['_mdjm_event_finish'])) > date('H', strtotime($event_data['_mdjm_event_start']))) { $event_data['_mdjm_event_end_date'] = $_POST['_mdjm_event_date']; } else { // End date is following day $event_data['_mdjm_event_end_date'] = date('Y-m-d', strtotime('+1 day', strtotime($_POST['_mdjm_event_date']))); } /** * Determine the state of the Deposit & Balance payments. * */ $event_data['_mdjm_event_deposit_status'] = !empty($_POST['deposit_paid']) ? $_POST['deposit_paid'] : 'Due'; $event_data['_mdjm_event_balance_status'] = !empty($_POST['balance_paid']) ? $_POST['balance_paid'] : 'Due'; $deposit_payment = $event_data['_mdjm_event_deposit_status'] == 'Paid' && $current_meta['_mdjm_event_deposit_status'][0] != 'Paid' ? true : false; $balance_payment = $event_data['_mdjm_event_balance_status'] == 'Paid' && $current_meta['_mdjm_event_balance_status'][0] != 'Paid' ? true : false; // Add-Ons if (mdjm_packages_enabled()) { $event_data['_mdjm_event_addons'] = !empty($_POST['event_addons']) ? $_POST['event_addons'] : ''; } // Assign the event type $existing_event_type = wp_get_object_terms($post_id, 'event-types'); mdjm_set_event_type($post_id, (int) $_POST['mdjm_event_type']); // Assign the enquiry source mdjm_set_enquiry_source($post_id, (int) $_POST['mdjm_enquiry_source']); /** * Update the event post meta data */ $debug[] = 'Beginning Meta Updates'; mdjm_update_event_meta($post_id, $event_data); $debug[] = 'Meta Updates Completed'; if ($deposit_payment == true || $balance_payment == true) { if ($balance_payment == true) { unset($event_data['_mdjm_event_balance_status']); unset($event_data['_mdjm_event_deposit_status']); mdjm_mark_event_balance_paid($post_id); } else { unset($event_data['_mdjm_event_deposit_status']); mdjm_mark_event_deposit_paid($post_id); } } // Set the event status & initiate tasks based on the status if ($_POST['original_post_status'] != $_POST['mdjm_event_status']) { mdjm_update_event_status($post_id, $_POST['mdjm_event_status'], $_POST['original_post_status'], array('client_notices' => empty($_POST['mdjm_block_emails']) ? true : false, 'email_template' => !empty($_POST['mdjm_email_template']) ? $_POST['mdjm_email_template'] : false, 'quote_template' => !empty($_POST['mdjm_online_quote']) ? $_POST['mdjm_online_quote'] : false)); } else { // Event status is un-changed so just log the changes to the journal mdjm_add_journal(array('user_id' => get_current_user_id(), 'event_id' => $post_id, 'comment_content' => sprintf('%s %s via Admin', mdjm_get_label_singular(), empty($update) ? 'created' : 'updated')), array('type' => 'update-event', 'visibility' => '2')); } // Fire the save event hook do_action('mdjm_save_event', $post, $_POST['mdjm_event_status']); // Fire our post save hook do_action('mdjm_after_event_save', $post_id, $post, $update); // Re-add the save post action to avoid loops add_action('save_post_mdjm-event', 'mdjm_save_event_post', 10, 3); $debug[] = sprintf('Completed Event Save for event %s', $post_id); if (!empty($debug) && MDJM_DEBUG == true) { $true = true; foreach ($debug as $log) { MDJM()->debug->log_it($log, $true); $true = false; } } }
/** * Process the sending of the email * * @since 1.3 * @param arr $data Super global $_POST array * @return void */ function mdjm_send_comm_email($data) { $url = remove_query_arg(array('mdjm-message', 'event_id', 'template', 'recipient', 'mdjm-action')); if (!wp_verify_nonce($data['mdjm_nonce'], 'send_comm_email')) { $message = 'nonce_fail'; } elseif (empty($data['mdjm_email_to']) || empty($data['mdjm_email_subject']) || empty($data['mdjm_email_content'])) { $message = 'comm_missing_content'; } else { if (isset($_FILES['mdjm_email_upload_file']) && '' !== $_FILES['mdjm_email_upload_file']['name']) { $upload_dir = wp_upload_dir(); $file_name = $_FILES['mdjm_email_upload_file']['name']; $file_path = $upload_dir['path'] . '/' . $file_name; $tmp_path = $_FILES['mdjm_email_upload_file']['tmp_name']; if (move_uploaded_file($tmp_path, $file_path)) { $attachments[] = $file_path; } } if (empty($attachments)) { $attachments = array(); } $attachments = apply_filters('mdjm_send_comm_email_attachments', $attachments, $data); $email_args = array('to_email' => mdjm_get_client_email($data['mdjm_email_to']), 'from_name' => $data['mdjm_email_from_name'], 'from_email' => $data['mdjm_email_from_address'], 'event_id' => $data['mdjm_email_event'], 'client_id' => $data['mdjm_email_to'], 'subject' => stripslashes($data['mdjm_email_subject']), 'attachments' => !empty($attachments) ? $attachments : array(), 'message' => stripslashes($data['mdjm_email_content']), 'track' => true, 'copy_to' => !empty($data['mdjm_email_copy_to']) ? array($data['mdjm_email_copy_to']) : array(), 'source' => __('Communication Feature', 'mobile-dj-manager')); if (mdjm_send_email_content($email_args)) { $message = 'comm_sent'; if (!empty($data['mdjm_event_reject'])) { $args = array('reject_reason' => !empty($data['mdjm_email_reject_reason']) ? $data['mdjm_email_reject_reason'] : __('No reason specified', 'mobile-dj-manager')); mdjm_update_event_status($email_args['event_id'], 'mdjm-rejected', get_post_status($email_args['event_id']), $args); } } else { $message = 'comm_not_sent'; } } wp_redirect(add_query_arg('mdjm-message', $message, $url)); die; }
/** * Sign the event contract * * @since 1.3 * @param int $event_id The event ID * @param arr $details Contract and event info * @return bool Whether or not the contract was signed */ function mdjm_sign_event_contract($event_id, $details) { $event = new MDJM_Event($event_id); if (!$event) { return false; } $contract_template = mdjm_get_contract(mdjm_get_event_contract($event->ID)); if (!$contract_template) { return false; } do_action('mdjm_pre_sign_event_contract', $event_id, $details); // Prepare the content for the contract. $contract_content = $contract_template->post_content; $contract_content = apply_filters('the_content', $contract_content); $contract_content = str_replace(']]>', ']]>', $contract_content); $contract_content = mdjm_do_content_tags($contract_content, $event->ID, $event->client); // The signatory information displayed at the foot of the contract $contract_signatory_content = '<hr>' . "\r\n"; $contract_signatory_content .= '<p style="font-weight: bold">' . __('Signatory', 'mobile-dj-manager') . ': <span style="text-decoration: underline;">' . ucfirst($details['mdjm_first_name']) . ' ' . ucfirst($details['mdjm_last_name']) . '</span></p>' . "\r\n"; $contract_signatory_content .= '<p style="font-weight: bold">' . __('Date of Signature', 'mobile-dj-manager') . ': <span style="text-decoration: underline;">' . date('jS F Y') . '</span></p>' . "\r\n"; $contract_signatory_content .= '<p style="font-weight: bold">' . __('Verification Method', 'mobile-dj-manager') . ': ' . __('User Password Confirmation', 'mobile-dj-manager') . '</p>' . "\r\n"; $contract_signatory_content .= '<p style="font-weight: bold">' . __('IP Address Used', 'mobile-dj-manager') . ': ' . $_SERVER['REMOTE_ADDR'] . '</p>' . "\r\n"; $contract_signatory_content = apply_filters('mdjm_contract_signatory', $contract_signatory_content); $contract_content .= $contract_signatory_content; // Filter the signed contract post data $signed_contract = apply_filters('mdjm_signed_contract_data', array('post_title' => sprintf(__('Event Contract: %s', 'mobile-dj-manager'), mdjm_get_option('event_prefix') . $event->ID), 'post_author' => get_current_user_id(), 'post_type' => 'mdjm-signed-contract', 'post_status' => 'publish', 'post_content' => $contract_content, 'post_parent' => $event->ID, 'ping_status' => 'closed', 'comment_status' => 'closed'), $event->ID, $event); $signed_contract_id = wp_insert_post($signed_contract, true); if (is_wp_error($signed_contract_id)) { return false; } add_post_meta($signed_contract, '_mdjm_contract_signed_name', ucfirst($details['mdjm_first_name']) . ' ' . ucfirst($details['mdjm_last_name']), true); $event_meta = array('_mdjm_event_signed_contract' => $signed_contract_id, '_mdjm_event_contract_approved' => current_time('mysql'), '_mdjm_event_contract_approver' => strip_tags(addslashes(ucfirst($details['mdjm_first_name']) . ' ' . ucfirst($details['mdjm_last_name']))), '_mdjm_event_contract_approver_ip' => $_SERVER['REMOTE_ADDR'], '_mdjm_event_last_updated_by' => get_current_user_id()); // Update the event status mdjm_update_event_status($event->ID, 'mdjm-approved', $event->post_status, array('meta' => $event_meta, 'client_notices' => mdjm_get_option('booking_conf_to_client'))); mdjm_add_journal(array('user' => get_current_user_id(), 'event' => $event->ID, 'comment_content' => __('Contract Approval completed by ', 'mobile-dj-manager') . ucfirst($details['mdjm_first_name']) . ' ' . ucfirst($details['mdjm_last_name'] . '<br>')), array('type' => 'update-event', 'visibility' => '2')); do_action('mdjm_post_sign_event_contract', $event_id, $details); return true; }