/**
  * 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;
 }
Example #4
0
 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&#8217; 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();
     }
 }
Example #10
0
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;
}
Example #11
0
/**
 * 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));
}