Printing the users' names as unknown in various places, and excluding purged users from autocomplete suggestions
187 lines
7.5 KiB
PHP
187 lines
7.5 KiB
PHP
<?php
|
|
class ProductPage extends Page {
|
|
private $action = 'list';
|
|
private $product = null;
|
|
|
|
public function __construct() {
|
|
parent::__construct();
|
|
if(isset($_GET['action'])) {
|
|
$this->action = $_GET['action'];
|
|
}
|
|
if(isset($_GET['id'])) {
|
|
$id = $_GET['id'];
|
|
if($id) {
|
|
try {
|
|
$this->product = new Product($id);
|
|
} catch(Exception $e) {
|
|
$this->action = 'list';
|
|
$this->product = null;
|
|
$this->error = i18n('There is no product with that ID.');
|
|
}
|
|
}
|
|
}
|
|
switch($this->action) {
|
|
case 'show':
|
|
$this->subtitle = i18n('Product details');
|
|
break;
|
|
case 'list':
|
|
$this->subtitle = i18n('Product list');
|
|
break;
|
|
}
|
|
}
|
|
|
|
protected function render_body() {
|
|
switch($this->action) {
|
|
case 'list':
|
|
$products = $this->build_product_table(get_items('product'));
|
|
print(replace(array('product_table' => $products),
|
|
$this->fragments['product_page']));
|
|
break;
|
|
case 'show':
|
|
print($this->build_product_form());
|
|
break;
|
|
}
|
|
}
|
|
|
|
private function build_product_form() {
|
|
$discarded = $this->product->get_discardtime();
|
|
|
|
$info_item_fragment = $this->fragments['info_item'];
|
|
$tag_fragment = $this->fragments['tag'];
|
|
$product_details_fragment = $this->fragments['product_details'];
|
|
if($discarded) {
|
|
$info_item_fragment = $this->fragments['info_item_readonly'];
|
|
$tag_fragment = $this->fragments['tag_readonly'];
|
|
$product_details_fragment = $this->fragments['product_details_readonly'];
|
|
}
|
|
$info = '';
|
|
foreach($this->product->get_info() as $key => $value) {
|
|
$name = ucfirst(str_replace('_', ' ', $key));
|
|
$info .= replace(array('name' => $name,
|
|
'key' => $key,
|
|
'value' => $value),
|
|
$info_item_fragment);
|
|
}
|
|
$tags = '';
|
|
foreach($this->escape_tags($this->product->get_tags()) as $tag) {
|
|
$tags .= replace(array('tag' => ucfirst($tag)),
|
|
$tag_fragment);
|
|
}
|
|
$history = $this->build_history_table($this->product->get_history());
|
|
$attachments = $this->build_attachment_list(
|
|
$this->product->get_attachments());
|
|
$presets = $this->build_loan_preset_buttons();
|
|
$fields = array('id' => $this->product->get_id(),
|
|
'brand' => $this->product->get_brand(),
|
|
'name' => $this->product->get_name(),
|
|
'serial' => $this->product->get_serial(),
|
|
'invoice' => $this->product->get_invoice(),
|
|
'tags' => $tags,
|
|
'info' => $info,
|
|
'label' => '',
|
|
'label_hidden' => 'hidden',
|
|
'checkout_hidden' => 'hidden',
|
|
'hidden' => '',
|
|
'service' => i18n('Start service'),
|
|
'history' => $history,
|
|
'attachments' => $attachments,
|
|
'loan_presets' => $presets,
|
|
'end' => format_date(default_loan_end()));
|
|
if(class_exists('QRcode')) {
|
|
$fields['label'] = replace($fields,
|
|
$this->fragments['product_label']);
|
|
}
|
|
if(!$this->product->get_discardtime()) {
|
|
$fields['label_hidden'] = '';
|
|
if($this->product->get_status() == 'service') {
|
|
$fields['service'] = i18n('End service');
|
|
}
|
|
if($this->product->get_status() == 'available') {
|
|
$fields['checkout_hidden'] = '';
|
|
}
|
|
}
|
|
$out = replace($fields, $product_details_fragment);
|
|
$out .= replace($fields, $this->fragments['product_meta']);
|
|
return $out;
|
|
}
|
|
|
|
private function build_history_table($history) {
|
|
if(!$history) {
|
|
return i18n('No history to display.');
|
|
}
|
|
$rows = '';
|
|
foreach($history as $event) {
|
|
$status = $event->get_status();
|
|
$userlink = 'Service';
|
|
$start = $event->get_starttime();
|
|
$end = $event->get_returntime();
|
|
$notes = $event->get_notes();
|
|
$hidden = 'hidden';
|
|
if($notes) {
|
|
$hidden = '';
|
|
}
|
|
$initiator = $event->get_initiator();
|
|
$initiator_link = i18n('Unknown');
|
|
if($initiator) {
|
|
$initiator_name = $initiator->get_name();
|
|
if($initiator_name === null) {
|
|
$initiator_name = i18n('Dropped user');
|
|
}
|
|
$initiator_link = replace(
|
|
array('id' => $initiator->get_id(),
|
|
'name' => $initiator_name,
|
|
'page' => 'users'),
|
|
$this->fragments['item_link']);
|
|
}
|
|
$misc = '';
|
|
if($event instanceof Loan) {
|
|
$user = $event->get_user();
|
|
$product = $event->get_product();
|
|
$user_name = $user->get_name();
|
|
if($user_name === null) {
|
|
$user_name = i18n('Dropped user');
|
|
}
|
|
$userlink = replace(array('id' => $user->get_id(),
|
|
'name' => $user_name,
|
|
'page' => 'users'),
|
|
$this->fragments['item_link']);
|
|
if(!$end) {
|
|
$end = $event->get_endtime();
|
|
$extend = format_date(default_loan_end());
|
|
$misc = replace(array('id' => $product->get_id(),
|
|
'end_new' => $extend),
|
|
$this->fragments['loan_extend_form']);
|
|
}
|
|
}
|
|
$rows .= replace(array('status' => $status,
|
|
'name' => $userlink,
|
|
'start_date' => format_date($start),
|
|
'end_date' => format_date($end),
|
|
'initiator' => $initiator_link,
|
|
'hidden' => $hidden,
|
|
'notes' => $notes,
|
|
'misc' => $misc),
|
|
$this->fragments['product_loan_card']);
|
|
}
|
|
return $rows;
|
|
}
|
|
|
|
|
|
private function build_attachment_list($attachments) {
|
|
if(!$attachments) {
|
|
return '<p>'.i18n('No attachments.').'</p>';
|
|
}
|
|
$items = '';
|
|
foreach($attachments as $attachment) {
|
|
$date = format_date($attachment->get_uploadtime());
|
|
$items .= replace(array('name' => $attachment->get_filename(),
|
|
'id' => $attachment->get_id(),
|
|
'date' => $date),
|
|
$this->fragments['attachment']);
|
|
}
|
|
return replace(array('attachments' => $items),
|
|
$this->fragments['attachment_list']);
|
|
}
|
|
}
|
|
?>
|