'post-type', // sometimes used to mark 'series' vs 'film' // Film // Expect a repeater/array of versions with: quality (string), url (string HLS/MP4), subs (array of [label/lang,url]) // We will try in this order: 'film-dl', 'dl-links', 'online_link_film' 'film_versions_primary' => 'film-dl', 'film_versions_fallback1' => 'dl-links', 'film_online_single' => 'online_link_film', // direct string URL (single version) 'film_subs_single' => 'subtitle_online_film', // Series // Expect nested: seasons -> episodes -> versions or direct url+subs // We will try in this order: 'serial-dl' (complex), or per-episode: 'online_link_serial' + 'subtitle_online_serial' 'series_nested' => 'serial-dl', 'series_episode_url' => 'online_link_serial', 'series_episode_subs' => 'subtitle_online_serial', // Common optional labels/fields 'season_name' => 'season-name', 'episode_num' => 'episode', 'quality_key' => 'quality', ]; // Helpers to fetch flexible ACF structures safely function kel_get_field_safe($key, $post_id) { if (function_exists('get_field')) { return get_field($key, $post_id); } return null; } function kel_normalize_url($maybe) { if (is_array($maybe) && isset($maybe['url'])) return $maybe['url']; return is_string($maybe) ? trim($maybe) : ''; } // -------------------------------------- // 2) Determine film vs series // -------------------------------------- $is_series = false; $meta_type = get_post_meta($post_id, $kel_field_map['post_type_meta'], true); if ($meta_type) { $is_series = (stripos($meta_type, 'series') !== false) || (stripos($meta_type, 'serial') !== false); } else { // fallback by post_type slug guess $is_series = (get_post_type($post_id) === 'series' || get_post_type($post_id) === 'serial'); } // -------------------------------------- // 3) Build playable dataset // -------------------------------------- $dataset = [ 'type' => $is_series ? 'series' : 'film', 'postId' => $post_id, 'title' => get_the_title($post_id), 'poster' => get_the_post_thumbnail_url($post_id, 'large'), 'versions' => [], // films: list of versions 'seasons' => [], // series: list of seasons -> episodes -> versions ]; if (!$is_series) { // -------- FILM -------- $versions = []; // Try primary repeater (film-dl) $film_dl = kel_get_field_safe($kel_field_map['film_versions_primary'], $post_id); if (is_array($film_dl) && !empty($film_dl)) { foreach ($film_dl as $row) { $quality = $row[$kel_field_map['quality_key']] ?? ($row['label'] ?? '—'); $url = kel_normalize_url($row['online'] ?? $row['url'] ?? $row['online_link'] ?? ''); if (!$url && isset($row['online_link_film'])) $url = kel_normalize_url($row['online_link_film']); $subs = []; if (!empty($row['subs']) && is_array($row['subs'])) { foreach ($row['subs'] as $s) { $subs[] = [ 'label' => $s['label'] ?? ($s['lang'] ?? 'sub'), 'lang' => $s['lang'] ?? 'und', 'url' => kel_normalize_url($s['url'] ?? ''), ]; } } if ($url) $versions[] = ['label' => (string)$quality, 'url' => $url, 'subs' => $subs]; } } // Fallback: dl-links if (empty($versions)) { $dl_links = kel_get_field_safe($kel_field_map['film_versions_fallback1'], $post_id); if (is_array($dl_links)) { foreach ($dl_links as $row) { $quality = $row[$kel_field_map['quality_key']] ?? ($row['label'] ?? '—'); $url = kel_normalize_url($row['online'] ?? $row['url'] ?? $row['online_link'] ?? ''); $subs = []; if (!empty($row['subs']) && is_array($row['subs'])) { foreach ($row['subs'] as $s) { $subs[] = [ 'label' => $s['label'] ?? ($s['lang'] ?? 'sub'), 'lang' => $s['lang'] ?? 'und', 'url' => kel_normalize_url($s['url'] ?? ''), ]; } } if ($url) $versions[] = ['label' => (string)$quality, 'url' => $url, 'subs' => $subs]; } } } // Fallback: single online link if (empty($versions)) { $single = kel_get_field_safe($kel_field_map['film_online_single'], $post_id); $single_url = kel_normalize_url($single); if ($single_url) { $subs_field = kel_get_field_safe($kel_field_map['film_subs_single'], $post_id); $subs = []; if (is_array($subs_field)) { foreach ($subs_field as $s) { $subs[] = [ 'label' => $s['label'] ?? ($s['lang'] ?? 'sub'), 'lang' => $s['lang'] ?? 'und', 'url' => kel_normalize_url($s['url'] ?? ''), ]; } } $versions[] = ['label' => 'Original', 'url' => $single_url, 'subs' => $subs]; } } $dataset['versions'] = $versions; } else { // -------- SERIES -------- $seasons_out = []; $serial = kel_get_field_safe($kel_field_map['series_nested'], $post_id); if (is_array($serial) && !empty($serial)) { // Expect structure like: [ [season-name, episodes => [ [episode, online_link_serial, subtitle_online_serial...] ] ] ] foreach ($serial as $season_idx => $season) { $s_name = $season[$kel_field_map['season_name']] ?? ('Season '.($season_idx+1)); $episodes_in = $season['episodes'] ?? $season['ep'] ?? $season['parts'] ?? []; $eps_out = []; if (is_array($episodes_in)) { foreach ($episodes_in as $ep_idx => $ep) { $ep_num = $ep[$kel_field_map['episode_num']] ?? ($ep_idx+1); $versions = []; // Versioned per episode if (!empty($ep['versions']) && is_array($ep['versions'])) { foreach ($ep['versions'] as $v) { $quality = $v[$kel_field_map['quality_key']] ?? ($v['label'] ?? '—'); $url = kel_normalize_url($v['url'] ?? $v['online'] ?? $v['online_link'] ?? ''); $subs = []; if (!empty($v['subs']) && is_array($v['subs'])) { foreach ($v['subs'] as $s) { $subs[] = [ 'label' => $s['label'] ?? ($s['lang'] ?? 'sub'), 'lang' => $s['lang'] ?? 'und', 'url' => kel_normalize_url($s['url'] ?? ''), ]; } } if ($url) $versions[] = ['label' => (string)$quality, 'url' => $url, 'subs' => $subs]; } } // Fallback: single URL+subs per episode if (empty($versions)) { $url = kel_normalize_url($ep[$kel_field_map['series_episode_url']] ?? ''); if ($url) { $subs = []; $subs_in = $ep[$kel_field_map['series_episode_subs']] ?? []; if (is_array($subs_in)) { foreach ($subs_in as $s) { $subs[] = [ 'label' => $s['label'] ?? ($s['lang'] ?? 'sub'), 'lang' => $s['lang'] ?? 'und', 'url' => kel_normalize_url($s['url'] ?? ''), ]; } } $versions[] = ['label' => 'Original', 'url' => $url, 'subs' => $subs]; } } $eps_out[] = [ 'episode' => (int)$ep_num, 'title' => isset($ep['title']) ? (string)$ep['title'] : ('قسمت '.(int)$ep_num), 'versions' => $versions, ]; } } $seasons_out[] = [ 'name' => (string)$s_name, 'seasonNo' => $season_idx+1, 'episodes' => $eps_out, ]; } } // If still empty, try a very flat fallback (single season, pulling from post-level episode fields?) if (empty($seasons_out)) { $single_url = kel_get_field_safe($kel_field_map['series_episode_url'], $post_id); $single_url = kel_normalize_url($single_url); if ($single_url) { $subs = []; $subs_in = kel_get_field_safe($kel_field_map['series_episode_subs'], $post_id); if (is_array($subs_in)) { foreach ($subs_in as $s) { $subs[] = [ 'label' => $s['label'] ?? ($s['lang'] ?? 'sub'), 'lang' => $s['lang'] ?? 'und', 'url' => kel_normalize_url($s['url'] ?? ''), ]; } } $seasons_out[] = [ 'name' => 'Season 1', 'seasonNo' => 1, 'episodes' => [ [ 'episode'=>1, 'title'=>'قسمت 1', 'versions'=>[ ['label'=>'Original','url'=>$single_url,'subs'=>$subs] ] ] ], ]; } } $dataset['seasons'] = $seasons_out; } // Preferred default selected index from &row= (1-based per user habit). Safely clamp. $pref_row = isset($_GET['row']) ? max(1, absint($_GET['row'])) : 1; ?>
0%