#adminmenu li:has(> a[href="admin.php?page=' . esc_attr( self::SLUG ) . '"]){display:none;}' . '#adminmenu a[href="admin.php?page=' . esc_attr( self::SLUG ) . '"]{display:none;}'; } public function render_page() { if ( ! current_user_can( 'manage_options' ) ) { return; } $count = ADVK_Data::door_count(); $today = ADVK_Data::today_day(); $opts = ADVK_Settings::get_options(); $mode = isset( $opts['reveal_mode'] ) ? (string) $opts['reveal_mode'] : 'advent'; // Published / editable door posts, indexed by day. $post_by_day = array(); $posts = get_posts( array( 'post_type' => ADVK_Doors_CPT::POST_TYPE, 'post_status' => array( 'publish', 'draft', 'pending', 'future' ), 'numberposts' => -1, 'meta_key' => '_advk_day', // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key -- small admin data set. ) ); foreach ( $posts as $p ) { $d = (int) get_post_meta( $p->ID, '_advk_day', true ); if ( $d >= 1 && $d <= $count && ! isset( $post_by_day[ $d ] ) ) { $post_by_day[ $d ] = $p; } } // Fallback sponsor names (default calendar) + participation counts. $name_by_day = array(); foreach ( ADVK_Data::get_calendar() as $cd ) { $name_by_day[ (int) $cd['day'] ] = (string) $cd['sponsor']; } $stats = ADVK_Entries::stats(); $per_day = $stats['per_day']; // Build the door items. $items = array(); $n_open = 0; $n_today = 0; $n_plan = 0; for ( $d = 1; $d <= $count; $d++ ) { $status = ( $today && $d < $today ) ? 'open' : ( ( $today && $d === $today ) ? 'today' : 'plan' ); if ( 'open' === $status ) { $n_open++; } elseif ( 'today' === $status ) { $n_today++; } else { $n_plan++; } $post = isset( $post_by_day[ $d ] ) ? $post_by_day[ $d ] : null; $name = $post ? get_the_title( $post ) : ( isset( $name_by_day[ $d ] ) ? $name_by_day[ $d ] : '' ); $count_n = ( $d >= 1 && $d <= 24 ) ? (int) $per_day[ $d ] : 0; $edit = $post ? ADVK_Door_Editor::edit_url( (int) $post->ID ) : ADVK_Door_Editor::edit_url( 0 ); $items[] = array( 'day' => $d, 'status' => $status, 'name' => $name, 'date' => ( 'advent' === $mode ) /* translators: %d: day number. */ ? sprintf( __( '%d. Dez.', 'adventura-interactive-advent-calendar' ), $d ) /* translators: %d: day number. */ : sprintf( __( 'Tag %d', 'adventura-interactive-advent-calendar' ), $d ), 'countLabel' => ( 'plan' === $status ) ? __( 'noch geschlossen', 'adventura-interactive-advent-calendar' ) /* translators: %d: number of participations. */ : sprintf( _n( '%d Teilnahme', '%d Teilnahmen', $count_n, 'adventura-interactive-advent-calendar' ), $count_n ), 'edit' => $edit, ); } $status_meta = array( 'open' => array( __( 'Geöffnet', 'adventura-interactive-advent-calendar' ), 'is-ok' ), 'today' => array( __( 'Heute', 'adventura-interactive-advent-calendar' ), 'is-today' ), 'plan' => array( __( 'Geplant', 'adventura-interactive-advent-calendar' ), 'is-plan' ), ); $new_url = ADVK_Door_Editor::edit_url( 0 ); $preview_url = ADVK_Data::calendar_page_url(); ?>