/** * @param $invoice_id * @param $invoice_data * @return array * * todo: make this method call the other 'get_replace_fields' available in website/job/etc.. */ public static function get_replace_fields($invoice_id, $invoice_data = false) { if (!$invoice_data) { $invoice_data = self::get_invoice($invoice_id); } $customer_data = array(); if ($invoice_data['customer_id']) { $customer_data = module_customer::get_replace_fields($invoice_data['customer_id'], $invoice_data['user_id']); } if (!is_array($customer_data)) { $customer_data = array(); } $data = array_merge($customer_data, $invoice_data); // so we get total_amount_due and stuff. $data = array_merge($data, array('invoice_number' => htmlspecialchars($invoice_data['name']), 'project_type' => _l(module_config::c('project_name_single', 'Website')), 'print_link' => self::link_public_print($invoice_id), 'title' => module_config::s('admin_system_name'), 'invoice_paid' => $invoice_data['total_amount_due'] <= 0 ? '<p> <font style="font-size: 1.6em;"><strong>' . _l('INVOICE PAID') . '</strong></font> </p>' : '', 'is_invoice_paid' => $invoice_data['total_amount_due'] <= 0 ? 1 : '', 'date_create' => print_date($invoice_data['date_create']), 'due_date' => print_date($invoice_data['date_due']))); $data['total_amount'] = dollar($invoice_data['total_amount'], true, $invoice_data['currency_id']); $data['total_amount_due'] = dollar($invoice_data['total_amount_due'], true, $invoice_data['currency_id']); $data['total_amount_paid'] = dollar($invoice_data['total_amount_paid'], true, $invoice_data['currency_id']); $data['date_paid'] = print_date($invoice_data['date_paid']); $data['date_due'] = print_date($invoice_data['date_due']); $data['date_sent'] = print_date($invoice_data['date_sent']); $data['invoice_number'] = $invoice_data['name']; $data['invoice_url'] = module_invoice::link_public($invoice_id); $data['invoice_date_range'] = ''; if ($invoice_data['date_renew'] != '0000-00-00') { $data['invoice_date_range'] = _l('%s to %s', print_date($invoice_data['date_create']), print_date(strtotime("-1 day", strtotime($invoice_data['date_renew'])))); } if (isset($invoice_data['credit_note_id']) && $invoice_data['credit_note_id']) { $credit_invoice = module_invoice::get_invoice($invoice_data['credit_note_id'], true); $data['credit_invoice_number'] = htmlspecialchars($credit_invoice['name']); } $data['invoice_notes'] = ''; // grab any public notes if (class_exists('module_note', false) && module_note::is_plugin_enabled()) { $notes = module_note::get_notes(array('public' => 1, 'owner_table' => 'invoice', 'owner_id' => $invoice_id)); if (count($notes) > 1) { $data['invoice_notes'] .= '<ul>'; foreach ($notes as $note) { if ($note['public']) { $data['invoice_notes'] .= '<li>'; $data['invoice_notes'] .= htmlspecialchars($note['note']); $data['invoice_notes'] .= '</li>'; } } $data['invoice_notes'] .= '</ul>'; } else { $note = array_shift($notes); $data['invoice_notes'] .= htmlspecialchars($note['note']); } } $job_names = $website_url = $project_names = $project_names_and_url = array(); foreach ($invoice_data['job_ids'] as $job_id) { $job_data = module_job::get_job($job_id); if ($job_data && $job_data['job_id'] == $job_id) { $job_names[$job_data['job_id']] = $job_data['name']; if (module_config::c('job_invoice_show_date_range', 1)) { // check if this job is a renewable job. if ($job_data['date_renew'] != '0000-00-00') { $data['invoice_date_range'] = _l('%s to %s', print_date($job_data['date_start']), print_date(strtotime("-1 day", strtotime($job_data['date_renew'])))); } } $fields = module_job::get_replace_fields($job_id, $job_data); foreach ($fields as $key => $val) { if (!isset($data[$key]) || !$data[$key] && $val) { $data[$key] = $val; } } if ($job_data['website_id']) { $website_data = module_website::get_website($job_data['website_id']); if ($website_data && $website_data['website_id'] == $job_data['website_id']) { if (isset($website_data['url']) && $website_data['url']) { $website_url[$website_data['website_id']] = module_website::urlify($website_data['url']); $website_data['name_url'] = $website_data['name'] . ' (' . module_website::urlify($website_data['url']) . ')'; } else { $website_data['name_url'] = $website_data['name']; } $project_names[$website_data['website_id']] = $website_data['name']; $project_names_and_url[$website_data['website_id']] = $website_data['name_url']; $fields = module_website::get_replace_fields($website_data['website_id'], $website_data); foreach ($fields as $key => $val) { if (!isset($data[$key]) || !$data[$key] && $val) { $data[$key] = $val; } } } } } } if (isset($invoice_data['website_id']) && $invoice_data['website_id']) { $website_data = module_website::get_website($invoice_data['website_id']); if ($website_data && $website_data['website_id'] == $invoice_data['website_id']) { if (isset($website_data['url']) && $website_data['url']) { $website_url[$website_data['website_id']] = module_website::urlify($website_data['url']); $website_data['name_url'] = $website_data['name'] . ' (' . module_website::urlify($website_data['url']) . ')'; } else { $website_data['name_url'] = $website_data['name']; } $project_names[$website_data['website_id']] = $website_data['name']; $project_names_and_url[$website_data['website_id']] = $website_data['name_url']; $fields = module_website::get_replace_fields($website_data['website_id'], $website_data); foreach ($fields as $key => $val) { if (!isset($data[$key]) || !$data[$key] && $val) { $data[$key] = $val; } } } } $data['website_name'] = $data['project_name'] = forum_text(count($project_names) ? implode(', ', $project_names) : ''); $data['website_name_url'] = forum_text(count($project_names_and_url) ? implode(', ', $project_names_and_url) : ''); $data['website_url'] = forum_text(count($website_url) ? implode(', ', $website_url) : ''); $data['job_name'] = forum_text($job_names ? implode(', ', $job_names) : ''); if (class_exists('module_group', false)) { // get the job groups $wg = array(); $g = array(); foreach ($invoice_data['job_ids'] as $group_job_id) { $group_job_id = (int) trim($group_job_id); if ($group_job_id > 0) { $job_data = module_job::get_job($group_job_id); foreach (module_group::get_groups_search(array('owner_table' => 'job', 'owner_id' => $group_job_id)) as $group) { $g[$group['group_id']] = $group['name']; } // get the website groups if ($job_data['website_id']) { foreach (module_group::get_groups_search(array('owner_table' => 'website', 'owner_id' => $job_data['website_id'])) as $group) { $wg[$group['group_id']] = $group['name']; } } } } if (isset($invoice_data['website_id']) && $invoice_data['website_id']) { foreach (module_group::get_groups_search(array('owner_table' => 'website', 'owner_id' => $invoice_data['website_id'])) as $group) { $wg[$group['group_id']] = $group['name']; } } $data['job_group'] = implode(', ', $g); $data['website_group'] = implode(', ', $wg); } // addition. find all extra keys for this invoice and add them in. // we also have to find any EMPTY extra fields, and add those in as well. if (class_exists('module_extra', false) && module_extra::is_plugin_enabled()) { $all_extra_fields = module_extra::get_defaults('invoice'); foreach ($all_extra_fields as $e) { $data[$e['key']] = _l('N/A'); } // and find the ones with values: $extras = module_extra::get_extras(array('owner_table' => 'invoice', 'owner_id' => $invoice_id)); foreach ($extras as $e) { $data[$e['extra_key']] = $e['extra']; } } $new_data = hook_handle_callback('invoice_replace_fields', $invoice_id, $data); if (is_array($new_data)) { foreach ($new_data as $new_d) { $data = array_merge($data, $new_d); } } return $data; }