> */ public static function all() { $items = get_option( self::OPTION, array() ); return is_array( $items ) ? array_values( array_filter( $items, 'is_array' ) ) : array(); } /** * Find one report. * * @param string $id Report id. * @return array|null */ public static function find( $id ) { if ( ! self::is_id( $id ) ) { return null; } foreach ( self::all() as $report ) { if ( ( $report['id'] ?? '' ) === $id ) { return $report; } } return null; } /** * Save a new report. * * @param array $report Report data. * @return string New report id. */ public static function save( array $report ) { $items = self::all(); $id = wp_generate_uuid4(); $report['id'] = $id; if ( ! isset( $report['schema'] ) ) { $report['schema'] = 2; } array_unshift( $items, $report ); update_option( self::OPTION, array_slice( $items, 0, self::MAX_REPORTS ), false ); return $id; } /** * Merge fields into an existing report. * * @param string $id Report id. * @param array $patch Fields to set. * @return bool Whether the report was found. */ public static function annotate( $id, array $patch ) { if ( ! self::is_id( $id ) ) { return false; } $items = self::all(); $found = false; foreach ( $items as $i => $report ) { if ( ( $report['id'] ?? '' ) === $id ) { $items[ $i ] = array_merge( $report, $patch ); $found = true; break; } } if ( $found ) { update_option( self::OPTION, $items, false ); } return $found; } /** * Delete a report. * * @param string $id Report id. */ public static function delete( $id ) { $items = array_values( array_filter( self::all(), function ( $r ) use ( $id ) { return ( $r['id'] ?? '' ) !== $id; } ) ); update_option( self::OPTION, $items, false ); } }