get_id(), $format); if (null === $has_note) return false; if ('yes' !== $order->get_meta(self::META_KEY, true)) { $order->update_meta_data(self::META_KEY, 'yes'); if (!$order->save()) return false; $order = wc_get_order($order->get_id()); if (!is_object($order) || 'yes' !== $order->get_meta(self::META_KEY, true)) return false; } if ($has_note) return true; return (bool) $order->add_order_note(sprintf( $format, $verified_at ? $verified_at : current_time('c') )); } catch (Throwable $error) { unset($error); return false; } } private static function has_note($order_id, $format) { $notes = wc_get_order_notes(array('order_id' => $order_id)); if (!is_array($notes)) return null; $pattern = '/^' . str_replace('%s', '.+', preg_quote($format, '/')) . '$/u'; foreach ($notes as $note) { if (is_object($note) && isset($note->content) && is_string($note->content) && preg_match($pattern, $note->content)) return true; } return false; } public static function add_column($columns) { $result = array(); foreach ($columns as $key => $label) { $result[$key] = $label; if ('order_status' === $key) $result[self::COLUMN_KEY] = esc_html__('حالة أكدلي', 'akkedli-connector'); } if (!isset($result[self::COLUMN_KEY])) $result[self::COLUMN_KEY] = esc_html__('حالة أكدلي', 'akkedli-connector'); return $result; } public static function render_classic_column($column, $post_id) { if (self::COLUMN_KEY === $column) self::render_order(wc_get_order($post_id)); } public static function render_hpos_column($column, $order) { if (self::COLUMN_KEY === $column) self::render_order($order); } private static function render_order($order) { $record = is_object($order) ? $order->get_meta(Akkedli_Customer_State::SNAPSHOT, true) : null; $status = is_array($record) && isset($record['state']) ? Akkedli_Customer_State::derive($record['state']) : ''; $badges = self::badges(); if (!isset($badges[$status])) { echo '—'; return; } $badge = $badges[$status]; echo '' . esc_html($badge[0]) . ''; } private static function badges() { return array( 'confirmed' => array(__('تأكيد', 'akkedli-connector'), '#e7f5ec', '#14532d'), 'customer_cancelled' => array(__('إلغاء', 'akkedli-connector'), '#fee2e2', '#991b1b'), 'help_pending' => array(__('طلب مساعدة', 'akkedli-connector'), '#fef3c7', '#713f12'), 'awaiting_customer' => array(__('انتظار', 'akkedli-connector'), '#f3f4f6', '#374151'), 'confirmation_delivery_failed' => array(__('تعذر التوصيل', 'akkedli-connector'), '#dbeafe', '#1e40af'), ); } private static function requested_status() { if (!current_user_can('manage_woocommerce') || !isset($_GET['akkedli_status']) || !is_string($_GET['akkedli_status'])) return ''; $status = sanitize_key(wp_unslash($_GET['akkedli_status'])); return isset(self::badges()[$status]) ? $status : ''; } public static function render_filter($order_type, $which = 'top') { if ('shop_order' !== $order_type || 'top' !== $which || !current_user_can('manage_woocommerce')) return; $selected = self::requested_status(); echo ''; } private static function with_status($existing, $status) { $clause = array('key' => Akkedli_Customer_State::STATUS, 'value' => $status, 'compare' => '='); return empty($existing) ? array($clause) : array('relation' => 'AND', $existing, $clause); } public static function filter_classic($query) { $status = self::requested_status(); if ('' === $status || !is_admin() || !$query->is_main_query() || 'shop_order' !== $query->get('post_type')) return; $query->set('meta_query', self::with_status($query->get('meta_query'), $status)); } public static function filter_hpos($args) { if (isset($args['type']) && 'shop_order' !== $args['type']) return $args; $status = self::requested_status(); if ('' !== $status) $args['meta_query'] = self::with_status(isset($args['meta_query']) ? $args['meta_query'] : array(), $status); return $args; } }