/*========================================================================
1️⃣ النظام الذكي لإدارة المباريات (نسخة المحرك المطور - متزامن مع الموبايل 📱🔄)
========================================================================*/
if (!function_exists('sabri_add_smart_match_stats_box')) {
function sabri_add_smart_match_stats_box() {
add_meta_box('sabri_smart_match_stats', '📋 إدارة المباراة المتكاملة (النظام الذكي ⚡) - 🟢 متصل بالموبايل', 'sabri_smart_match_stats_callback', 'sp_event', 'normal', 'high');
}
add_action('add_meta_boxes', 'sabri_add_smart_match_stats_box');
}
if (!function_exists('sabri_smart_match_stats_callback')) {
function sabri_smart_match_stats_callback($post) {
wp_nonce_field('sabri_save_match_stats', 'sabri_match_stats_nonce');
$team_ids = get_post_meta($post->ID, 'sp_team', false);
$match_seasons = wp_get_post_terms($post->ID, 'sp_season', ['fields' => 'ids']);
$match_leagues = wp_get_post_terms($post->ID, 'sp_league', ['fields' => 'ids']);
$match_season_id = (!empty($match_seasons) && !is_wp_error($match_seasons)) ? $match_seasons[0] : 0;
$match_league_id = (!empty($match_leagues) && !is_wp_error($match_leagues)) ? $match_leagues[0] : 0;
if (empty($team_ids) || count($team_ids) < 2 || empty($match_season_id) || empty($match_league_id)) {
echo '
⚠️ يرجى اختيار أندية المباراة، الموسم، والبطولة من الجانب أولاً ثم الضغط على "حفظ مسودة".
';
return;
}
$all_stats = get_post_meta($post->ID, '_sabri_match_stats', true) ?: [];
$saved_coaches = get_post_meta($post->ID, '_ss_event_manual_coach_map', true) ?: [];
$app_data = ['teams' => [], 'players' => [], 'events' => []];
foreach ($team_ids as $team_id) {
$app_data['teams'][$team_id] = [
'name' => get_the_title($team_id),
'coach' => $saved_coaches[$team_id] ?? 0,
'coaches' => []
];
$coaches = get_posts(['post_type' => 'sp_staff', 'posts_per_page' => -1, 'meta_query' => [['key' => 'sp_current_team', 'value' => $team_id]]]);
foreach ($coaches as $c) { $app_data['teams'][$team_id]['coaches'][] = ['id' => $c->ID, 'name' => $c->post_title]; }
$potential_players = get_posts([
'post_type' => 'sp_player', 'posts_per_page' => -1, 'orderby' => 'title', 'order' => 'ASC',
'meta_query' => ['relation' => 'OR', ['key' => 'sp_current_team', 'value' => $team_id], ['key' => 'sp_team', 'value' => '"'.$team_id.'"', 'compare' => 'LIKE'], ['key' => 'sp_team', 'value' => $team_id]]
]);
foreach ($potential_players as $p) {
$is_valid = false;
$p_leagues = get_post_meta($p->ID, 'sp_leagues', true);
if (is_array($p_leagues) && isset($p_leagues[$match_league_id][$match_season_id])) {
$t_id_matrix = $p_leagues[$match_league_id][$match_season_id];
if (is_array($t_id_matrix) && in_array($team_id, $t_id_matrix)) $is_valid = true;
elseif ($t_id_matrix == $team_id) $is_valid = true;
}
if (!$is_valid) {
$current_team = get_post_meta($p->ID, 'sp_current_team', true);
if ($current_team == $team_id && has_term($match_season_id, 'sp_season', $p->ID)) $is_valid = true;
}
foreach ($all_stats as $stat) {
if ($stat['team_id'] == $team_id && $stat['player_id'] == $p->ID) $is_valid = true;
}
if ($is_valid) {
$shirt = get_post_meta($p->ID, 'sp_number', true) ?: '-';
$app_data['players'][$team_id][$p->ID] = ['id' => $p->ID, 'name' => $p->post_title, 'num' => $shirt, 'status' => 'none', 'is_captain' => 0];
}
}
$app_data['events'][$team_id] = [];
}
foreach ($all_stats as $stat) {
$t = $stat['team_id']; $p = $stat['player_id'];
if (isset($app_data['players'][$t][$p])) {
$app_data['players'][$t][$p]['status'] = $stat['status'] ?? 'none';
$app_data['players'][$t][$p]['is_captain'] = intval($stat['is_captain'] ?? 0);
if(!empty($stat['goals_mins'])) foreach($stat['goals_mins'] as $m) $app_data['events'][$t][] = ['id'=>uniqid(), 'type'=>'goals_mins', 'player'=>$p, 'min'=>$m, 'assist'=>0, 'linked_player'=>0];
if(!empty($stat['pen_goals_mins'])) foreach($stat['pen_goals_mins'] as $m) $app_data['events'][$t][] = ['id'=>uniqid(), 'type'=>'pen_goals_mins', 'player'=>$p, 'min'=>$m, 'assist'=>0, 'linked_player'=>0];
if(!empty($stat['assists_mins'])) foreach($stat['assists_mins'] as $m) $app_data['events'][$t][] = ['id'=>uniqid(), 'type'=>'assists_mins', 'player'=>$p, 'min'=>$m, 'assist'=>0, 'linked_player'=>0];
if(!empty($stat['yellow_mins'])) foreach($stat['yellow_mins'] as $m) $app_data['events'][$t][] = ['id'=>uniqid(), 'type'=>'yellow_mins', 'player'=>$p, 'min'=>$m, 'assist'=>0, 'linked_player'=>0];
if(!empty($stat['red_mins'])) foreach($stat['red_mins'] as $m) $app_data['events'][$t][] = ['id'=>uniqid(), 'type'=>'red_mins', 'player'=>$p, 'min'=>$m, 'assist'=>0, 'linked_player'=>0];
if(!empty($stat['pen_missed_mins'])) foreach($stat['pen_missed_mins'] as $m) $app_data['events'][$t][] = ['id'=>uniqid(), 'type'=>'pen_missed_mins', 'player'=>$p, 'min'=>$m, 'assist'=>0, 'linked_player'=>0];
if(!empty($stat['own_goals_mins'])) foreach($stat['own_goals_mins'] as $m) $app_data['events'][$t][] = ['id'=>uniqid(), 'type'=>'own_goals_mins', 'player'=>$p, 'min'=>$m, 'assist'=>0, 'linked_player'=>0];
if(!empty($stat['sub_in'])) $app_data['events'][$t][] = ['id'=>uniqid(), 'type'=>'sub_in', 'player'=>$p, 'min'=>$stat['sub_in'], 'assist'=>0, 'linked_player'=>0];
if(!empty($stat['sub_out'])) $app_data['events'][$t][] = ['id'=>uniqid(), 'type'=>'sub_out', 'player'=>$p, 'min'=>$stat['sub_out'], 'assist'=>0, 'linked_player'=>0];
}
}
echo '';
echo '';
echo '';
// استخدام NOWDOC لمنع خطأ محرر ووردبريس الوهمي نهائياً
echo <<< 'SABRI_JS'
SABRI_JS;
}
}
if (!function_exists('sabri_save_smart_match_stats')) {
function sabri_save_smart_match_stats($post_id) {
if (!isset($_POST['sabri_match_stats_nonce']) || !wp_verify_nonce($_POST['sabri_match_stats_nonce'], 'sabri_save_match_stats')) return;
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
if (!current_user_can('edit_post', $post_id)) return;
if (isset($_POST['sabri_coaches']) && is_array($_POST['sabri_coaches'])) {
$coaches = []; foreach ($_POST['sabri_coaches'] as $t => $c) $coaches[intval($t)] = intval($c);
update_post_meta($post_id, '_ss_event_manual_coach_map', $coaches);
}
if (isset($_POST['sabri_stats']) && is_array($_POST['sabri_stats'])) {
$clean_stats = [];
foreach ($_POST['sabri_stats'] as $team_id => $players) {
foreach ($players as $p_id => $stat) {
if (!empty($stat['player_id'])) {
$clean_stats[] = [
'team_id' => intval($team_id), 'player_id' => intval($stat['player_id']),
'status' => sanitize_text_field($stat['status']), 'is_captain' => intval($stat['is_captain'] ?? 0),
'sub_in' => intval($stat['sub_in'] ?? 0), 'sub_out' => intval($stat['sub_out'] ?? 0),
'goals' => intval($stat['goals'] ?? 0), 'goals_mins' => isset($stat['goals_mins']) ? array_map('intval', $stat['goals_mins']) : [],
'assists' => intval($stat['assists'] ?? 0), 'assists_mins' => isset($stat['assists_mins']) ? array_map('intval', $stat['assists_mins']) : [],
'yellow' => intval($stat['yellow'] ?? 0), 'yellow_mins' => isset($stat['yellow_mins']) ? array_map('intval', $stat['yellow_mins']) : [],
'red' => intval($stat['red'] ?? 0), 'red_mins' => isset($stat['red_mins']) ? array_map('intval', $stat['red_mins']) : [],
'pen_goals' => intval($stat['pen_goals'] ?? 0), 'pen_goals_mins' => isset($stat['pen_goals_mins']) ? array_map('intval', $stat['pen_goals_mins']) : [],
'pen_missed' => intval($stat['pen_missed'] ?? 0), 'pen_missed_mins' => isset($stat['pen_missed_mins']) ? array_map('intval', $stat['pen_missed_mins']) : [],
'own_goals' => intval($stat['own_goals'] ?? 0), 'own_goals_mins' => isset($stat['own_goals_mins']) ? array_map('intval', $stat['own_goals_mins']) : [],
];
}
}
}
update_post_meta($post_id, '_sabri_match_stats', $clean_stats);
}
}
add_action('save_post_sp_event', 'sabri_save_smart_match_stats');
} دوري الدرجة الأولى - Lo3btna - Page 130