/** * Remove comments and comments links from the front end for non-admins. * * @since 1.3 * @param * @return */ function mdjm_no_comments() { add_filter('get_comments_number', '__return_false'); if (!current_user_can('edit_posts') && (mdjm_is_employee() || current_user_can('client'))) { add_filter('get_edit_post_link', '__return_false'); } }
/** * Update the email content field with the selected template. * * * @since 1.3 * @return void */ function mdjm_user_events_dropdown_ajax() { $result['event_list'] = '<option value="0">' . __('Select an Event', 'mobile-dj-manager') . '</option>'; if (!empty($_POST['recipient'])) { $statuses = 'any'; if (mdjm_is_employee($_POST['recipient'])) { if (mdjm_get_option('comms_show_active_events_only')) { $statuses = array('post_status' => mdjm_active_event_statuses()); } $events = mdjm_get_employee_events($_POST['recipient'], $statuses); } else { if (mdjm_get_option('comms_show_active_events_only')) { $statuses = mdjm_active_event_statuses(); } $events = mdjm_get_client_events($_POST['recipient'], $statuses); } if ($events) { foreach ($events as $event) { $result['event_list'] .= '<option value="' . $event->ID . '">'; $result['event_list'] .= mdjm_get_event_date($event->ID) . ' '; $result['event_list'] .= __('from', 'mobile-dj-manager') . ' '; $result['event_list'] .= mdjm_get_event_start($event->ID) . ' '; $result['event_list'] .= '(' . mdjm_get_event_status($event->ID) . ')'; $result['event_list'] .= '</option>'; } } } $result['type'] = 'success'; $result = json_encode($result); echo $result; die; }
/** * Determine if the currently logged in employee user has the relevant permissions to perform the action/view the page * * @since 1.3 * @param str $action Required: The action being performed * @param int $user_id Optional: The ID of the user to query. Default current user * @return bool $granted true|false */ public function employee_can($action, $user_id = '') { if (empty($user_id)) { $user = wp_get_current_user(); } else { $user = get_user_by('id', $user_id); } // MDJM Admins can do everything if (mdjm_is_admin($user->ID)) { return true; } // Non employees can't do anything if (!mdjm_is_employee($user->ID)) { return false; } switch ($action) { case 'view_clients_list': $allowed_roles = array('mdjm_client_edit', 'mdjm_client_edit_own'); break; case 'list_all_clients': $allowed_roles = array('mdjm_client_edit'); break; case 'manage_employees': $allowed_roles = array('mdjm_employee_edit'); break; case 'read_events': $allowed_roles = array('mdjm_event_read', 'mdjm_event_read_own', 'mdjm_event_edit', 'mdjm_event_edit_own'); break; case 'read_events_all': $allowed_roles = array('mdjm_event_read', 'mdjm_event_edit'); break; case 'manage_events': $allowed_roles = array('mdjm_event_edit', 'mdjm_event_edit_own'); break; case 'manage_all_events': $allowed_roles = array('mdjm_event_edit'); break; case 'manage_packages': $allowed_roles = array('mdjm_package_edit', 'mdjm_package_edit_own'); break; case 'manage_templates': $allowed_roles = array('mdjm_template_edit'); break; case 'edit_txns': $allowed_roles = array('mdjm_txn_edit'); break; case 'list_all_quotes': $allowed_roles = array('mdjm_quote_view'); break; case 'list_own_quotes': $allowed_roles = array('mdjm_quote_view_own', 'mdjm_quote_view'); break; case 'list_venues': $allowed_roles = array('mdjm_venue_read', 'mdjm_venue_edit'); break; case 'add_venues': $allowed_roles = array('mdjm_venue_edit'); break; case 'send_comms': $allowed_roles = array('mdjm_comms_send'); break; case 'run_reports': $allowed_roles = array('view_event_reports'); default: return false; break; } // switch if (empty($allowed_roles)) { return false; } foreach ($allowed_roles as $allowed) { if (user_can($user->ID, $allowed)) { return true; } } return false; }
/** * Retrieve an employee. * * @since 1.4 * @return void */ public function get_employee() { global $wp_roles; if (!isset($this->request['employee_id']) && !isset($this->request['employee_email'])) { $this->missing_params('employee_id or employee_email'); } do_action('mdjm_before_api_get_employee', $this); if (isset($this->request['employee_email']) && !isset($this->request['employee_id'])) { $field = 'email'; $value = $this->request['employee_email']; } else { $field = 'id'; $value = $this->request['employee_id']; } $employee = get_user_by($field, $value); if (!$employee) { $response['error'] = __('Employee could not be found.', 'mobile-dj-manager'); $this->data = array_merge($response, $this->data); $this->output(); } if (!mdjm_is_employee($employee->ID)) { $response['error'] = __('Error retrieving employee.', 'mobile-dj-manager'); $this->data = array_merge($response, $this->data); $this->output(); } $events = array(); $roles = array(); $mdjm_roles = MDJM()->roles->get_roles(); $employee_events = mdjm_get_employee_events($employee->ID); $next_event = mdjm_get_employees_next_event($employee->ID); $i = 0; if ($employee_events) { foreach ($employee_events as $event) { $events[$event->ID] = get_post_meta($event->ID, '_mdjm_event_date', true); $i++; } } if (!empty($employee->roles)) { foreach ($employee->roles as $role) { if (array_key_exists($role, $mdjm_roles)) { $roles[$role] = $mdjm_roles[$role]; } } } $response['employee'] = array('ID' => $employee->ID, 'first_name' => $employee->first_name, 'last_name' => $employee->last_name, 'email' => $employee->user_email, 'roles' => $roles, 'last_login' => $employee->last_login, 'events' => $events, 'next_event' => array('id' => !empty($next_event) ? $next_event->ID : '', 'date' => !empty($next_event) ? get_post_meta($next_event->ID, '_mdjm_event_date', true) : ''), 'total_events' => $i); $this->data = array_merge($this->data, $response); do_action('mdjm_after_api_get_employee', $this); $this->output(); }
/** * Mark an event employee as paid. * * @since 1.3 * @param int $employee_id User ID of employee * @param int $event_id Event ID * @param int $txn_id The transaction ID associated with this payment. * @return bool True if payment data updated for event employee, otherwise false. */ function mdjm_set_employee_paid($employee_id, $event_id, $txn_id = '') { global $wp_roles; if (!mdjm_get_option('enable_employee_payments')) { return; } if (!mdjm_is_employee($employee_id)) { return false; } $return = false; if ($employee_id == mdjm_get_event_primary_employee($event_id)) { /** * * Hook fires before marking event employee as paid. * * @since 1.3 * @param int $event_id The event ID. */ do_action("mdjm_pre_mdjm_set_employee_paid_{$employee_id}", $event_id); $role = 'dj'; $payment = mdjm_get_txn_price($txn_id); $payment_data = get_post_meta($event_id, '_mdjm_event_dj_payment_status', true); $payment_data['payment_status'] = mdjm_get_employees_event_wage($event_id, $employee_id) > $payment ? 'part-paid' : 'paid'; $payment_data['payment_date'] = current_time('mysql'); $payment_data['txn_id'] = $txn_id; $payment_data['payment_amount'] = $payment; $payment_update = update_post_meta($event_id, '_mdjm_event_dj_payment_status', $payment_data); if (!empty($payment_update)) { MDJM()->debug->log_it(sprintf('%s successfully paid %s for Event %d', mdjm_get_employee_display_name($employee_id), mdjm_currency_filter(mdjm_get_txn_price($txn_id)), $event_id)); $return = true; } else { MDJM()->debug->log_it(sprintf('Unable to pay %s for Event %d', mdjm_get_employee_display_name($employee_id), $event_id)); $return = false; } } else { $payment_data = get_post_meta($event_id, '_mdjm_event_employees_data', true); if (!mdjm_employee_working_event($event_id, $employee_id)) { MDJM()->debug->log_it('Employee not working this event'); return false; } else { /** * * Hook fires before marking event employee as paid. * * @since 1.3 * @param int $event_id The event ID. */ do_action("mdjm_pre_mdjm_set_employee_paid_{$employee_id}", $event_id); $role = $payment_data[$employee_id]['role']; $payment = mdjm_get_txn_price($payment_data[$employee_id]['txn_id']); $payment_data[$employee_id]['payment_status'] = mdjm_get_employees_event_wage($event_id, $employee_id) > $payment ? 'part-paid' : 'paid'; $payment_data[$employee_id]['payment_date'] = current_time('mysql'); $payment_data[$employee_id]['payment_amount'] = $payment; $payment_update = mdjm_update_txn_meta($payment_data[$employee_id]['txn_id'], array('_mdjm_txn_status' => 'Completed')); if (!empty($payment_update)) { $payment_update = update_post_meta($event_id, '_mdjm_event_employees_data', $payment_data); } if (!empty($payment_update)) { MDJM()->debug->log_it(sprintf('%s successfully paid %s for Event %d', mdjm_get_employee_display_name($employee_id), mdjm_currency_filter(mdjm_get_txn_price($txn_id)), $event_id)); $return = true; } else { MDJM()->debug->log_it(sprintf('Unable to pay %s for Event %d', mdjm_get_employee_display_name($employee_id), $event_id)); $return = false; } } } if (!empty($return)) { $journal_args = array('user_id' => 1, 'event_id' => $event_id, 'comment_content' => sprintf(__('Employee %s paid %s for their role as %s', 'mobile-dj-manager'), mdjm_get_employee_display_name($employee_id), $payment, translate_user_role($wp_roles->roles[$role]['name']))); $journal_meta = array('mdjm_visibility' => !empty($meta['visibility']) ? $meta['visibility'] : '2'); mdjm_add_journal($journal_args, $journal_meta); /** * * Hook fires after successfully marking event employee as paid. * * @since 1.3 * @param int $event_id The event ID. * @param int $txn_id The transaction ID associated with the payment */ do_action("mdjm_post_mdjm_set_employee_paid_{$employee_id}", $event_id, $txn_id); } return $return; }
/** * Retrieve an employees address. * * @since 1.4 * @param int $employee_id User ID of an employee. * @return arr|false $address Array of address fields, or false. */ public function get_employee_address($employee_id) { if (!mdjm_is_employee($employee_id)) { return false; } $employee_address = mdjm_get_employee_address($employee_id); if (is_array($employee_address)) { $employee_address = implode(',', array_filter($employee_address)); } // To filter this use apply_filters( 'mdjm_get_employee_address', $address, $user_id ); $address = !empty($employee_address) ? $employee_address : false; return $address; }