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;
}
}