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 '

Ordrestyring

'; echo '

Her er de seneste ordrer.

'; echo ''; echo ''; if ($orders) { foreach ($orders as $order) { $status = get_post_meta($order->ID, '_ab_status', true); $customer_id = (int) get_post_meta($order->ID, '_ab_customer_id', true); $assigned_user = (int) get_post_meta($order->ID, '_ab_assigned_user', true); $customer_name = $customer_id ? get_the_title($customer_id) : '-'; $user = $assigned_user ? get_userdata($assigned_user) : null; $assigned_name = $user ? $user->display_name : '-'; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; } } else { echo ''; } echo '
OrdreStatusKundeTildelt
' . esc_html($order->post_title) . '' . esc_html($status ?: 'Ny') . '' . esc_html($customer_name) . '' . esc_html($assigned_name) . '
Ingen ordrer fundet.
'; 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'], ]); ?>





Du skal være logget ind for at se dine ordrer.

'; } $orders = get_posts([ 'post_type' => 'ab_order', 'posts_per_page' => 50, 'post_status' => 'publish', 'meta_query' => [[ 'key' => '_ab_assigned_user', 'value' => get_current_user_id(), 'compare' => '=', ]], ]); ob_start(); echo '
'; echo '

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 '
'; } echo '
'; return ob_get_clean(); } } new ABlock_Ordrestyring();