array( 'single' => true, 'sanitize_callback' => 'sanitize_text_field', 'show_in_rest' => true, 'php_filter' => FILTER_SANITIZE_STRING, ), 'org-name' => array( 'single' => true, 'sanitize_callback' => 'sanitize_text_field', 'show_in_rest' => true, 'php_filter' => FILTER_SANITIZE_STRING, ), 'org-url' => array( 'single' => true, 'sanitize_callback' => 'esc_url_raw', 'show_in_rest' => true, 'php_filter' => FILTER_VALIDATE_URL, ), 'org-pledge-email' => array( 'single' => true, 'sanitize_callback' => 'sanitize_email', 'show_in_rest' => false, 'php_filter' => FILTER_VALIDATE_EMAIL, ), ); $generated = array( 'org-domain' => array( 'single' => true, 'sanitize_callback' => 'sanitize_text_field', 'show_in_rest' => false, ), 'pledge-email-confirmed' => array( 'single' => true, 'sanitize_callback' => 'wp_validate_boolean', 'show_in_rest' => false, ), 'pledge-confirmed-contributors' => array( 'single' => true, 'sanitize_callback' => 'absint', 'show_in_rest' => false, ), ); switch ( $context ) { case 'user_input': $return = $user_input; break; case 'generated': $return = $generated; break; default: $return = array_merge( $user_input, $generated ); break; } return $return; } /** * Register post meta keys for the custom post type. * * @return void */ function register_pledge_meta() { $meta = get_pledge_meta_config(); foreach ( $meta as $key => $args ) { $meta_key = META_PREFIX . $key; register_post_meta( Pledge\CPT_ID, $meta_key, $args ); } } /** * Adds meta boxes for the custom post type. * * @return void */ function add_meta_boxes() { add_meta_box( 'pledge-email', __( 'Pledge Email', 'wordpressorg' ), __NAMESPACE__ . '\render_meta_boxes', Pledge\CPT_ID, 'normal', 'high' ); add_meta_box( 'org-info', __( 'Organization Information', 'wordpressorg' ), __NAMESPACE__ . '\render_meta_boxes', Pledge\CPT_ID, 'normal', 'high' ); add_meta_box( 'pledge-contributors', __( 'Contributors', 'wordpressorg' ), __NAMESPACE__ . '\render_meta_boxes', Pledge\CPT_ID, 'normal', 'high' ); } /** * Builds the markup for all meta boxes * * @param WP_Post $pledge * @param array $box */ function render_meta_boxes( $pledge, $box ) { $readonly = ! current_user_can( 'edit_page', $pledge->ID ); $data = array(); foreach ( get_pledge_meta_config() as $key => $config ) { $data[ $key ] = get_post_meta( $pledge->ID, META_PREFIX . $key, $config['single'] ); } $contributors = Contributor\get_pledge_contributors( $pledge->ID, 'all' ); echo '
%s
field does not have a value.', 'wporg' ),
sanitize_key( $key )
)
);
} elseif ( false === $submission[ $key ] ) {
$error->add(
'required_field_invalid',
sprintf(
__( 'The %s
field has an invalid value.', 'wporg' ),
sanitize_key( $key )
)
);
}
}
if ( ! empty( $error->get_error_messages() ) ) {
return $error;
}
return true;
}
/**
* Get the metadata for a given pledge, or a default set if no pledge is provided.
*
* @param int $pledge_id
* @param string $context
* @return array Pledge data
*/
function get_pledge_meta( $pledge_id = 0, $context = '' ) {
// Get existing pledge, if it exists.
$pledge = get_post( $pledge_id );
$keys = get_pledge_meta_config( $context );
$meta = array();
// Get POST'd submission, if it exists.
$submission = PledgeForm\get_form_submission();
foreach ( $keys as $key => $config ) {
if ( isset( $submission[ $key ] ) ) {
$meta[ $key ] = $submission[ $key ];
} elseif ( $pledge instanceof WP_Post ) {
$meta_key = META_PREFIX . $key;
$meta[ $key ] = get_post_meta( $pledge->ID, $meta_key, true );
} else {
$meta[ $key ] = $config['default'] ?: '';
}
}
return $meta;
}
/**
* Isolate the domain from a given URL and remove the `www.` if necessary.
*
* @param string $url
*
* @return string
*/
function get_normalized_domain_from_url( $url ) {
$domain = wp_parse_url( $url, PHP_URL_HOST );
$domain = preg_replace( '#^www\.#', '', $domain );
return $domain;
}
/**
* Enqueue CSS file for admin page.
*
* @return void
*/
function enqueue_assets() {
$ver = filemtime( FiveForTheFuture\PATH . '/assets/css/admin.css' );
wp_register_style( '5ftf-admin', plugins_url( 'assets/css/admin.css', __DIR__ ), [], $ver );
$current_page = get_current_screen();
if ( Pledge\CPT_ID === $current_page->id ) {
wp_enqueue_style( '5ftf-admin' );
}
}