mirror of
https://github.com/WordPress/five-for-the-future.git
synced 2025-07-06 10:45:44 +03:00
Pledge List: Show hours because it's a more meaningful statistic.
This commit is contained in:
parent
7273057950
commit
33d3bc1933
5 changed files with 28 additions and 18 deletions
|
@ -6,9 +6,7 @@
|
|||
namespace WordPressDotOrg\FiveForTheFuture\PledgeMeta;
|
||||
|
||||
use WordPressDotOrg\FiveForTheFuture;
|
||||
use WordPressDotOrg\FiveForTheFuture\Pledge;
|
||||
use WordPressDotOrg\FiveForTheFuture\PledgeForm;
|
||||
use WordPressDotOrg\FiveForTheFuture\Contributor;
|
||||
use WordPressDotOrg\FiveForTheFuture\{ Pledge, PledgeForm, Contributor, XProfile };
|
||||
use WP_Post, WP_Error;
|
||||
|
||||
defined( 'WPINC' ) || die();
|
||||
|
@ -19,7 +17,7 @@ add_action( 'init', __NAMESPACE__ . '\register_pledge_meta' );
|
|||
add_action( 'admin_init', __NAMESPACE__ . '\add_meta_boxes' );
|
||||
add_action( 'save_post', __NAMESPACE__ . '\save_pledge', 10, 2 );
|
||||
add_action( 'admin_enqueue_scripts', __NAMESPACE__ . '\enqueue_assets' );
|
||||
add_action( 'transition_post_status', __NAMESPACE__ . '\update_confirmed_contributor_count', 10, 3 );
|
||||
add_action( 'transition_post_status', __NAMESPACE__ . '\update_cached_pledge_data', 10, 3 );
|
||||
|
||||
// Both hooks must be used because `updated` doesn't fire if the post meta didn't previously exist.
|
||||
add_action( 'updated_postmeta', __NAMESPACE__ . '\update_generated_meta', 10, 4 );
|
||||
|
@ -76,6 +74,11 @@ function get_pledge_meta_config( $context = 'all' ) {
|
|||
'sanitize_callback' => 'absint',
|
||||
'show_in_rest' => false,
|
||||
),
|
||||
'pledge-total-hours' => array(
|
||||
'single' => true,
|
||||
'sanitize_callback' => 'absint',
|
||||
'show_in_rest' => false,
|
||||
),
|
||||
);
|
||||
|
||||
switch ( $context ) {
|
||||
|
@ -318,7 +321,9 @@ function update_generated_meta( $meta_id, $object_id, $meta_key, $_meta_value )
|
|||
}
|
||||
|
||||
/**
|
||||
* Update the cached count of confirmed contributors for a pledge when a contributor post changes statuses.
|
||||
* Update cached pledge data when a contributor post changes statuses.
|
||||
*
|
||||
* This is saved so that it can be easily queried against, and also to make stats calculations easier.
|
||||
*
|
||||
* Note that contributor posts should always be trashed instead of deleted completely when a contributor is
|
||||
* removed from a pledge.
|
||||
|
@ -329,7 +334,7 @@ function update_generated_meta( $meta_id, $object_id, $meta_key, $_meta_value )
|
|||
*
|
||||
* @return void
|
||||
*/
|
||||
function update_confirmed_contributor_count( $new_status, $old_status, WP_Post $post ) {
|
||||
function update_cached_pledge_data( $new_status, $old_status, WP_Post $post ) {
|
||||
if ( Contributor\CPT_ID !== get_post_type( $post ) ) {
|
||||
return;
|
||||
}
|
||||
|
@ -341,9 +346,11 @@ function update_confirmed_contributor_count( $new_status, $old_status, WP_Post $
|
|||
$pledge = get_post( $post->post_parent );
|
||||
|
||||
if ( $pledge instanceof WP_Post ) {
|
||||
$confirmed_contributors = Contributor\get_pledge_contributors( $pledge->ID, 'publish' );
|
||||
$pledge_data = XProfile\get_aggregate_contributor_data_for_pledge( $pledge->ID );
|
||||
|
||||
update_post_meta( $pledge->ID, META_PREFIX . 'pledge-confirmed-contributors', $pledge_data['contributors'] );
|
||||
update_post_meta( $pledge->ID, META_PREFIX . 'pledge-total-hours', $pledge_data['hours'] );
|
||||
|
||||
update_post_meta( $pledge->ID, META_PREFIX . 'pledge-confirmed-contributors', count( $confirmed_contributors ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -225,6 +225,7 @@ function filter_query( $query ) {
|
|||
}
|
||||
|
||||
$contributor_count_key = META_PREFIX . 'pledge-confirmed-contributors';
|
||||
$hours_count_key = META_PREFIX . 'pledge-total-hours';
|
||||
|
||||
// Set up meta queries to include the "valid pledge" check, added to both search and pledge archive requests.
|
||||
$meta_queries = (array) $query->get( 'meta_query' );
|
||||
|
@ -246,14 +247,15 @@ function filter_query( $query ) {
|
|||
// Archives should only show pledges with contributors.
|
||||
$query->set( 'meta_query', $meta_queries );
|
||||
$order = isset( $_GET['order'] ) ? $_GET['order'] : '';
|
||||
|
||||
switch ( $order ) {
|
||||
case 'alphabetical':
|
||||
$query->set( 'orderby', 'name' );
|
||||
$query->set( 'order', 'ASC' );
|
||||
break;
|
||||
|
||||
case 'contributors':
|
||||
$query->set( 'meta_key', $contributor_count_key );
|
||||
case 'hours':
|
||||
$query->set( 'meta_key', $hours_count_key );
|
||||
$query->set( 'orderby', 'meta_value_num' );
|
||||
$query->set( 'order', 'DESC' );
|
||||
break;
|
||||
|
|
|
@ -76,7 +76,7 @@ function get_aggregate_contributor_data_for_pledge( $pledge_id ) {
|
|||
break;
|
||||
|
||||
case 30: // Teams.
|
||||
$value = maybe_unserialize( $item['value'] );
|
||||
$value = (array) maybe_unserialize( $item['value'] );
|
||||
$carry['teams'] = array_merge( $carry['teams'], $value );
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue