/** * Setup the availability checker. * * @since 1.3 * @param str $date The date to check * @return bool */ public function setup_check($date, $_employees, $_roles, $_status) { if (empty($date)) { $date = date('Y-m-d'); } $this->date = !empty($date) ? strtotime($date) : date('Y-m-d'); if (empty($_employees) && !empty($_roles)) { $theemployees = mdjm_get_employees($_roles); } elseif (empty($_employees)) { $theemployees = mdjm_get_employees(mdjm_get_option('availability_roles')); } else { $theemployees = is_array($_employees) ? $_employees : array($_employees); } $employees = array(); foreach ($theemployees as $employee) { if (is_object($employee)) { $employees[] = $employee->ID; } else { $employees[] = $employee; } } $this->employees = $employees; $this->roles = !empty($_roles) ? $_roles : mdjm_get_roles(mdjm_get_option('availability_roles')); $this->status = !empty($_status) ? $_status : mdjm_get_option('availability_status', 'any'); if (!is_array($this->roles)) { array($this->roles); } if (!is_array($this->status)) { array($this->status); } return true; }
/** * Build all the reports data * * @access public * @since 1.4 * @return arr $reports_data All the data for customer reports */ public function reports_data() { $stats = new MDJM_Stats(); $dates = mdjm_get_report_dates(); $stats->setup_dates($dates['range']); $cached_reports = false; if (false !== $cached_reports) { $reports_data = $cached_reports; } else { $reports_data = array(); $term_args = array('parent' => 0, 'hierarchical' => 0); $employees = mdjm_get_employees(); foreach ($employees as $employee) { $event_count = 0; $employee_id = $employee->ID; $event_args = array('post_status' => apply_filters('mdjm_events_by_type_statuses', array('mdjm-contract', 'mdjm-approved', 'mdjm-completed')), 'fields' => 'ids', 'meta_query' => array('relation' => 'AND', array('key' => '_mdjm_event_date', 'value' => array(date('Y-m-d', $stats->start_date), date('Y-m-d', $stats->end_date)), 'type' => 'date', 'compare' => 'BETWEEN'), array('relation' => 'OR', array('key' => '_mdjm_event_dj', 'value' => $employee_id, 'compare' => '=', 'type' => 'numeric'), array('key' => '_mdjm_event_employees', 'value' => sprintf(':"%s";', $employee_id), 'compare' => 'LIKE')))); $wages = 0.0; $paid = 0.0; $owed = 0.0; $events = mdjm_get_events($event_args); if ($events) { foreach ($events as $event) { $event_count++; $payment_status = mdjm_event_employees_paid($event, $employee_id); $current_wages = mdjm_get_employees_event_wage($event, $employee_id); $current_paid_wages = 0; $current_owed_wages = 0; $wages += $current_wages; $paid += $payment_status ? $current_wages : 0.0; $owed += $payment_status ? 0.0 : $current_wages; } } else { continue; } $reports_data[] = array('ID' => $employee->ID, 'employee' => $employee->display_name, 'total_events' => $event_count, 'total_wages' => mdjm_currency_filter(mdjm_format_amount($wages)), 'total_wages_raw' => $wages, 'wages_paid' => mdjm_currency_filter(mdjm_format_amount($paid)), 'wages_owed' => mdjm_currency_filter(mdjm_format_amount($owed)), 'is_child' => false); } } return $reports_data; }
/** * Renders a dropdown list of employees. * * @since 1.3.7 * @param arr $args @see $default * @return str */ public function employee_dropdown($args = array()) { global $wp_roles; $defaults = array('name' => '_mdjm_event_dj', 'id' => '', 'class' => '', 'selected' => '', 'show_option_none' => '', 'show_option_all' => false, 'chosen' => false, 'employee' => false, 'role' => '', 'group' => false, 'exclude' => false, 'placeholder' => __('Select an Employee', 'mobile-dj-manager'), 'multiple' => false, 'blank_first' => true, 'data' => array()); $args = wp_parse_args($args, $defaults); $options = array(); $employees = mdjm_get_employees($args['role']); if ($employees) { foreach ($employees as $employee) { $roles = array_values($employee->roles); $role = $roles[0]; if ($role == 'administrator') { if (!empty($roles[1])) { $role = $roles[1]; } else { $role = 'dj'; } } if (!empty($args['exclude']) && in_array($employee->ID, $args['exclude'])) { continue; } if (!empty($args['group'])) { $options['groups'][translate_user_role($wp_roles->roles[$role]['name'])][] = array($employee->ID => $employee->display_name); } else { $options[$user->ID] = $user->display_name; } } } if (!empty($options)) { if (!empty($options['groups'])) { ksort($options['groups']); } else { asort($options); } } $output = $this->select(array('name' => $args['name'], 'class' => $args['class'], 'id' => $args['id'], 'selected' => $args['selected'], 'options' => $options, 'chosen' => $args['chosen'], 'placeholder' => $args['placeholder'], 'multiple' => $args['multiple'], 'show_option_none' => $employees ? $args['show_option_none'] : __('No Employees', 'mobile-dj-manager'), 'show_option_all' => $args['show_option_all'], 'blank_first' => $args['blank_first'], 'data' => $args['data'])); return $output; }
public function employee_bookings($dj = '', $date = '') { global $mdjm_settings; $date = !empty($date) ? $date : date('Y-m-d'); $dj = !empty($dj) ? $dj : mdjm_get_employees(); if (is_array($dj)) { foreach ($dj as $employee) { $user[] = $employee->ID; } } else { $user[] = $dj; } //$status = array( 'mdjm-enquiry', 'mdjm-contract', 'mdjm-approved' ); $status = $mdjm_settings['availability']['availability_status']; $events = $this->dj_events($user, '_mdjm_event_dj', 'ASC', $status, $date); return $events; }
/** * Display the send email form on the communications page. * * @since 1.3 * @param * @return Outputs the page content */ function mdjm_comms_page() { if (!mdjm_employee_can('send_comms')) { wp_die('<h1>' . __('Cheatin’ uh?') . '</h1>' . '<p>' . __('You do not have permission to access this page.', 'mobile-dj-manager') . '</p>', 403); } global $current_user; if (mdjm_employee_can('list_all_clients')) { $clients = mdjm_get_clients(); } else { $clients = mdjm_get_employee_clients(); } if (mdjm_employee_can('mdjm_employee_edit')) { $employees = mdjm_get_employees(); } ?> <div class="wrap"> <h1><?php _e('Client and Employee Communications', 'mobile-dj-manager'); ?> </h1> <form name="mdjm_form_send_comms" id="mdjm_form_send_comms" method="post" enctype="multipart/form-data"> <?php wp_nonce_field('send_comm_email', 'mdjm_nonce', true, true); ?> <?php mdjm_admin_action_field('send_comm_email'); ?> <input type="hidden" name="mdjm_email_from_address" id="mdjm_email_from_address" value="<?php echo $current_user->user_email; ?> " /> <input type="hidden" name="mdjm_email_from_name" id="mdjm_email_from_name" value="<?php echo $current_user->display_name; ?> " /> <?php do_action('mdjm_pre_comms_table'); ?> <table class="form-table"> <?php do_action('mdjm_add_comms_fields_before_recipient'); ?> <tr> <th scope="row"><label for="mdjm_email_to"><?php _e('Select a Recipient', 'mobile-dj-manager'); ?> </label></th> <td> <select name="mdjm_email_to" id="mdjm_email_to"> <option value=""><?php _e('Select a Recipient', 'mobile-dj-manager'); ?> </option> <optgroup label="<?php _e('Clients', 'mobile-dj-manager'); ?> "> <?php if (empty($clients)) { echo '<option disabled="disabled">' . __('No Clients Found', 'mobile-dj-manager') . '</option>'; } else { foreach ($clients as $client) { echo '<option value="' . $client->ID . '">' . $client->display_name . '</option>'; } } ?> </optgroup> <?php if (!empty($employees)) { echo '<optgroup label="' . __('Employees', 'mobile-dj-manager') . '">'; foreach ($employees as $employee) { echo '<option value="' . $employee->ID . '">' . $employee->display_name . '</option>'; } echo '</optgroup>'; } ?> </select> </td> </tr> <?php do_action('mdjm_add_comms_fields_before_subject'); ?> <tr> <th scope="row"><label for="mdjm_email_subject"><?php _e('Subject', 'mobile-dj-manager'); ?> </label></th> <td><input type="text" name="mdjm_email_subject" id="mdjm_email_subject" class="regular-text" value="<?php echo isset($_GET['template']) ? esc_attr(get_the_title($_GET['template'])) : ''; ?> " /></td> </tr> <tr> <th scope="row"><label for="mdjm_email_copy_to"><?php _e('Copy Yourself?', 'mobile-dj-manager'); ?> </label></th> <td><input type="checkbox" name="mdjm_email_copy_to" id="mdjm_email_copy_to" value="<?php echo $current_user->user_email; ?> " /> <span class="description"><?php _e('Settings may dictate that additional email copies are also sent', 'mobile-dj-manager'); ?> </span></td> </tr> <?php do_action('mdjm_add_comms_fields_before_template'); ?> <tr> <th scope="row"><label for="mdjm_email_template"><?php _e('Select a Template', 'mobile-dj-manager'); ?> </label></th> <td> <select name="mdjm_email_template" id="mdjm_email_template"> <option value="0"><?php _e('No Template', 'mobile-dj-manager'); ?> </option> <?php $template = isset($_GET['template']) ? $_GET['template'] : 0; ?> <?php echo mdjm_comms_template_options($template); ?> </select> </td> </tr> <?php do_action('mdjm_add_comms_fields_before_event'); ?> <tr> <th scope="row"><label for="mdjm_email_event"><?php printf(__('Associated %s', 'mobile-dj-manager'), mdjm_get_label_singular()); ?> </label></th> <td> <?php if (isset($_GET['event_id']) || isset($_GET['mdjm-action']) && $_GET['mdjm-action'] == 'respond_unavailable') { ?> <?php $value = mdjm_get_event_date($_GET['event_id']) . ' '; $value .= __('from', 'mobile-dj-manager') . ' '; $value .= mdjm_get_event_start($_GET['event_id']) . ' '; $value .= '(' . mdjm_get_event_status($_GET['event_id']) . ')'; ?> <input type="text" name="mdjm_email_event_show" id="mdjm_email_event_show" value="<?php echo $value; ?> " readonly="readonly" size="50" /> <input type="hidden" name="mdjm_email_event" id="mdjm_email_event" value="<?php echo $_GET['event_id']; ?> " /> <?php } else { ?> <select name="mdjm_email_event" id="mdjm_email_event"> <option value="0"><?php _e('Select an Event', 'mobile-dj-manager'); ?> </option> </select> <?php } ?> <p class="description"><?php printf(__('If no %s is selected <code>{event_*}</code> content tags may not be used', 'mobile-dj-manager'), mdjm_get_label_singular(true)); ?> </p> </td> </tr> <?php do_action('mdjm_add_comms_fields_before_file'); ?> <tr> <th scope="row"><label for="mdjm_email_upload_file"><?php _e('Attach a File', 'mobile-dj-manager'); ?> </label></th> <td><input type="file" name="mdjm_email_upload_file" id="mdjm_email_upload_file" class="regular-text" value="" /> <p class="description"><?php printf(__('Max file size %dMB. Change php.ini <code>post_max_size</code> to increase', 'mobile-dj-manager'), ini_get('post_max_size')); ?> </p> </td> </tr> <?php do_action('mdjm_add_comms_fields_before_content'); ?> <tr> <td colspan="2"> <?php $content = isset($_GET['template']) ? mdjm_get_email_template_content($_GET['template']) : ''; wp_editor($content, 'mdjm_email_content', array('media_buttons' => true, 'textarea_rows' => '10', 'editor_class' => 'required')); ?> </td> </tr> </table> <?php do_action('mdjm_post_comms_table'); ?> <?php submit_button(__('Send Email', 'mobile-dj-manager'), 'primary', 'submit', true); ?> </form> </div> <?php }
/** * Retrieve a list of all employees * * @param str|arr $roles Optional: The roles for which we want to retrieve the employees from. * str $orderby Optional: The field by which to order. Default display_name * str $order Optional: ASC (default) | Desc * * @return $arr $employees or false if no employees for the specified roles */ public function get($roles = '', $orderby = 'display_name', $order = 'ASC') { return mdjm_get_employees($roles = '', $orderby = 'display_name', $order = 'ASC'); }
/** * Delete MDJM user role(s). * If any users are still assigned to the role, do not delete but report an error * * @param str|arr $roles Required: The role name to delete. $_POST['all_roles'] takes priority if exists * * @return arr $result JSON encoded array */ public function delete_roles($roles = '') { if (isset($_POST['delete-roles']) && !empty($_POST['all_roles'])) { $roles = $_POST['all_roles']; } // No roles if (empty($roles)) { wp_redirect($_SERVER['HTTP_REFERER'] . '&role_action=1&message=5'); exit; } // $roles must be an array so let's ensure it is if (!is_array($roles)) { $roles = array($roles); } // Make sure there are no employees assigned to the roles marked for deletion $employees = mdjm_get_employees($roles); if (!empty($employees)) { wp_redirect($_SERVER['HTTP_REFERER'] . '&role_action=1&message=6'); exit; } // Loop through the roles and remove after ensuring there are no users assigned foreach ($roles as $role) { remove_role($role); } wp_redirect($_SERVER['HTTP_REFERER'] . '&role_action=1&message=1'); exit; }
/** * Display a dropdown select list with all employees. The label must be handled seperately. * * @param arr $args Settings for the dropdown. See $defaults * 'role' (str|arr) Optional: Only display employees with the given role. Default empty (all). * 'name' (str) Optional: The name of the input. Defaults to '_mdjm_employees' * 'id' (str) Optional: ID for the field (uses name if not present) * 'class' (str) Optional: Class of the input field * 'selected' (str) Optional: Initially selected option * 'first_entry' (str) Optional: First entry to be displayed (default none) * 'first_entry_val' (str) Optional: First entry value. Only valid if first_entry is set * 'multiple' (bool) Optional: Whether multiple options can be selected * 'group' (bool) Optional: True to group employees by role * 'structure' (bool) Optional: True outputs the <select> tags, false just the <options> * 'exclude' (int|arr) Optional: Employee ID's to exclude * 'echo' (bool) Optional: Echo the HTML output (default) or false to return as $output * * @return str $output The HTML output for the dropdown list */ function mdjm_employee_dropdown($args = '') { global $wp_roles; // Define the default args for the dropdown $defaults = array('role' => '', 'name' => '_mdjm_employees', 'id' => '', 'class' => '', 'selected' => '', 'first_entry' => '', 'first_entry_val' => '0', 'multiple' => false, 'group' => false, 'structure' => true, 'exclude' => false, 'echo' => true); // Merge default args with those passed to function $args = wp_parse_args($args, $defaults); $args['id'] = !empty($args['id']) ? $args['id'] : $args['name']; if (!empty($args['exclude']) && !is_array($args['exclude'])) { $args['exclude'] = array($args['exclude']); } // We'll store the output here $output = ''; // Start the structure if (!empty($args['structure'])) { $output .= '<select name="' . $args['name']; if (!empty($args['multiple'])) { $output .= '[]'; } $output .= '" id="' . $args['id'] . '"'; if (!empty($args['class'])) { $output .= ' class="' . $args['class'] . '"'; } if (!empty($args['multiple'])) { $output .= ' multiple="multiple"'; } $output .= '>' . "\r\n"; } $employees = mdjm_get_employees($args['role']); if (empty($employees)) { $output .= '<option value="">' . __('No employees found', 'mobile-dj-manager') . '</option>' . "\r\n"; } else { if (!empty($args['first_entry'])) { $output .= '<option value="' . $args['first_entry_val'] . '">'; $output .= $args['first_entry'] . '</option>' . "\r\n"; } $results = new stdClass(); $results->role = array(); foreach ($employees as $employee) { if ($employee->roles[0] == 'administrator' && !empty($employee->roles[1])) { $employee->roles[0] = $employee->roles[1]; } else { $employee->roles[0] = 'dj'; } if (!empty($args['exclude']) && in_array($employee->ID, $args['exclude'])) { continue; } $results->role[$employee->roles[0]][] = $employee; } // Loop through the roles and employees to create the output foreach ($results->role as $role => $userobj) { if (!empty($args['group'])) { $output .= '<optgroup label="' . translate_user_role($wp_roles->roles[$role]['name']) . '">' . "\r\n"; } foreach ($userobj as $user) { $output .= '<option value="' . $user->ID . '"'; if (!empty($args['selected']) && $user->ID == $args['selected']) { $output .= ' selected="selected"'; } $output .= '>' . $user->display_name . '</option>' . "\r\n"; } if (!empty($args['group'])) { $output .= '</optgroup>' . "\r\n"; } } } // End the structure if ($args['structure'] == true) { $output .= '</select>' . "\r\n"; } if (!empty($args['echo'])) { echo $output; } else { return $output; } }
/** * Init * * * */ public static function init() { global $wp_roles; // Listen for post requests // Update the user role if (isset($_POST['change_role'], $_POST['new_role'], $_POST['employees'])) { foreach ($_POST['employees'] as $employee) { mdjm_set_employee_role($employee, $_POST['new_role']); } mdjm_update_notice('updated', __('Employee roles updated.', 'mobile-dj-manager'), true); } wp_enqueue_script('jquery-validation-plugin'); self::$all_roles = $wp_roles; // Filter our search by role if we need to self::$display_role = !empty($_GET['display_role']) ? $_GET['display_role'] : ''; self::$orderby = !empty($_GET['orderby']) ? $_GET['orderby'] : ''; self::$order = !empty($_GET['order']) ? $_GET['order'] : ''; // Which tab? self::$active_tab = isset($_GET['tab']) ? $_GET['tab'] : 'user_roles'; // Display the page tabs self::page_header(); // Retrieve all MDJM roles self::$mdjm_roles = mdjm_get_roles(); self::$total_roles = count(self::$mdjm_roles); // Determine the page to display if (self::$active_tab == 'permissions') { self::permissions_manager(); } else { // Instantiate the user table class self::$mdjm_employee_table = new MDJM_Employee_Table(); self::$mdjm_employee_table->process_bulk_actions(); // Retrieve employee list self::$employees = empty($_POST['s']) ? mdjm_get_employees(self::$display_role, self::$orderby, self::$order) : self::search(); self::$total_employees = count(mdjm_get_employees()); self::$mdjm_employee_table->prepare_items(); // The header for the user management page self::employee_page(); } }
function dj_available($dj = '', $roles = '', $date = '') { global $mdjm; MDJM()->debug->log_it('Check availability for ' . $date, true); $required_roles = array('administrator'); if (!empty($GLOBALS['mdjm_settings']['availability']['availability_roles'])) { $required_roles = array_merge($required_roles, $GLOBALS['mdjm_settings']['availability']['availability_roles']); } // If no DJ is specified but roles are, retrieve all employees for the roles if (empty($dj) && !empty($roles)) { $dj = mdjm_get_employees($roles); } $dj = !empty($dj) ? $dj : mdjm_get_employees($required_roles); $date = !empty($date) ? $date : date('Y-m-d'); if (is_array($dj)) { foreach ($dj as $employee) { $user[] = $employee->ID; } } else { $user[] = $dj; } foreach ($user as $dj) { if (MDJM()->events->employee_bookings($dj, $date) || is_on_holiday($dj, $date)) { // Unavailable $status['unavailable'][] = $dj; } else { $status['available'][] = $dj; } } return $status; }
/** * Display the filter drop down list to enable user to select and filter event by Employee. * * @since 1.0 * @param * @return str Outputs the dropdown for the employee filter */ function mdjm_event_employee_filter_dropdown() { $employees = mdjm_get_employees(); $employee_count = count($employees); if (!$employee_count || 1 == $employee_count) { return; } ?> <label for="filter-by-employee" class="screen-reader-text"><?php _e('Filter by Employee', 'mobile-dj-manager'); ?> </label> <?php mdjm_employee_dropdown(array('name' => 'mdjm_filter_employee', 'id' => 'filter-by-employee', 'selected' => isset($_GET['mdjm_filter_employee']) ? $_GET['mdjm_filter_employee'] : 0, 'first_entry' => __('All Employees', 'mobile-dj-manager'), 'first_entry_val' => 0, 'group' => true, 'structure' => true, 'echo' => true)); }