ordre - test
add_roles();
$this->create_tables();
$this->register_post_types();
flush_rewrite_rules();
}
private function add_roles() {
add_role('ablock_montor', 'Montør', [
'read' => true,
self::CAP_VIEW_OWN_ORDERS => true,
]);
add_role('ablock_kontor', 'Kontor', [
'read' => true,
self::CAP_MANAGE_ORDERS => true,
self::CAP_VIEW_OWN_ORDERS => true,
]);
$admin = get_role('administrator');
if ($admin) {
$admin->add_cap(self::CAP_MANAGE_ORDERS);
$admin->add_cap(self::CAP_VIEW_OWN_ORDERS);
}
}
private function create_tables() {
global $wpdb;
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
$charset_collate = $wpdb->get_charset_collate();
$table = $wpdb->prefix . 'ablock_order_hours';
$sql = "CREATE TABLE {$table} (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
order_id BIGINT UNSIGNED NOT NULL,
user_id BIGINT UNSIGNED NOT NULL,
work_date DATE NOT NULL,
hours DECIMAL(5,2) NOT NULL DEFAULT 0,
note TEXT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
KEY order_id (order_id),
KEY user_id (user_id)
) {$charset_collate};";
dbDelta($sql);
}
public function register_post_types() {
register_post_type('ab_order', [
'labels' => [
'name' => 'Ordrer',
'singular_name' => 'Ordre',
'add_new_item' => 'Opret ny ordre',
'edit_item' => 'Rediger ordre',
],
'public' => false,
'show_ui' => true,
'menu_icon' => 'dashicons-clipboard',
'supports' => ['title', 'editor'],
'capability_type' => 'post',
]);
register_post_type('ab_customer', [
'labels' => [
'name' => 'Kunder',
'singular_name' => 'Kunde',
],
'public' => false,
'show_ui' => true,
'menu_icon' => 'dashicons-groups',
'supports' => ['title'],
'capability_type' => 'post',
]);
}
public function register_admin_menu() {
add_menu_page(
'Ordrestyring',
'Ordrestyring',
self::CAP_VIEW_OWN_ORDERS,
'ablock-ordrestyring',
[$this, 'render_dashboard'],
'dashicons-clipboard',
25
);
add_submenu_page(
'ablock-ordrestyring',
'Dashboard',
'Dashboard',
self::CAP_VIEW_OWN_ORDERS,
'ablock-ordrestyring',
[$this, 'render_dashboard']
);
}
public function enqueue_assets($hook) {
if (strpos($hook, 'ablock-ordrestyring') === false && $hook !== 'post.php' && $hook !== 'post-new.php') {
return;
}
wp_enqueue_style('ablock-ordrestyring', plugin_dir_url(__FILE__) . 'assets/admin.css', [], self::VERSION);
}
public function render_dashboard() {
if (!current_user_can(self::CAP_VIEW_OWN_ORDERS)) {
wp_die('Du har ikke adgang til denne side.');
}
$args = [
'post_type' => 'ab_order',
'posts_per_page' => 20,
'post_status' => 'publish',
];
if (!current_user_can(self::CAP_MANAGE_ORDERS)) {
$args['meta_query'] = [[
'key' => '_ab_assigned_user',
'value' => get_current_user_id(),
'compare' => '=',
]];
}
$orders = get_posts($args);
echo '
';
echo '';
echo '
';
echo '
';
}
public function register_meta_boxes() {
add_meta_box('ab_order_details', 'Ordredetaljer', [$this, 'render_order_meta_box'], 'ab_order', 'normal', 'high');
}
public function render_order_meta_box($post) {
wp_nonce_field('ab_save_order_meta', 'ab_order_nonce');
$status = get_post_meta($post->ID, '_ab_status', true);
$customer_id = get_post_meta($post->ID, '_ab_customer_id', true);
$assigned_user = get_post_meta($post->ID, '_ab_assigned_user', true);
$order_date = get_post_meta($post->ID, '_ab_order_date', true);
$customers = get_posts([
'post_type' => 'ab_customer',
'posts_per_page' => -1,
'post_status' => 'publish',
]);
$users = get_users([
'role__in' => ['administrator', 'ablock_kontor', 'ablock_montor'],
]);
?>
Ordrestyring
'; echo 'Her er de seneste ordrer.
'; echo '| Ordre | Status | Kunde | Tildelt |
|---|---|---|---|
| ' . esc_html($order->post_title) . ' | '; echo '' . esc_html($status ?: 'Ny') . ' | '; echo '' . esc_html($customer_name) . ' | '; echo '' . esc_html($assigned_name) . ' | '; echo '
| Ingen ordrer fundet. | |||
';
echo '
';
return ob_get_clean();
}
}
new ABlock_Ordrestyring();
Mine ordrer
'; if (!$orders) { echo 'Du har ingen ordrer.
'; } else { echo '- ';
foreach ($orders as $order) {
$status = get_post_meta($order->ID, '_ab_status', true);
echo '
- ' . esc_html($order->post_title) . ' - ' . esc_html($status) . ' '; } echo '
