mirror of
https://github.com/WordPress/five-for-the-future.git
synced 2025-04-21 10:33:44 +03:00
Contributors: Create functionality for My Pledges page.
This don't add the styling yet, just the functionality. See #56 Fixes #51 Fixes #30
This commit is contained in:
parent
dbdcf26bd9
commit
67958d9a1a
|
@ -15,6 +15,8 @@ add_action( 'init', __NAMESPACE__ . '\regis
|
|||
add_filter( 'manage_edit-' . CPT_ID . '_columns', __NAMESPACE__ . '\add_list_table_columns' );
|
||||
add_action( 'manage_' . CPT_ID . '_posts_custom_column', __NAMESPACE__ . '\populate_list_table_columns', 10, 2 );
|
||||
|
||||
add_shortcode( '5ftf_my_pledges', __NAMESPACE__ . '\render_my_pledges' );
|
||||
|
||||
/**
|
||||
* Register the post type(s).
|
||||
*
|
||||
|
@ -209,3 +211,68 @@ function get_contributor_user_objects( array $contributor_posts ) {
|
|||
return get_user_by( 'login', $post->post_title );
|
||||
}, $contributor_posts );
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the My Pledges shortcode.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function render_my_pledges() {
|
||||
$user = wp_get_current_user();
|
||||
$success_message = process_my_pledges_form();
|
||||
$pledge_url = get_permalink( get_page_by_path( 'for-organizations' ) );
|
||||
|
||||
$contributor_posts = get_posts( array(
|
||||
'post_type' => CPT_ID,
|
||||
'post_title' => $user->user_login,
|
||||
'post_status' => array( 'pending', 'publish' ),
|
||||
'numberposts' => 100,
|
||||
) );
|
||||
|
||||
ob_start();
|
||||
require FiveForTheFuture\get_views_path() . 'list-my-pledges.php';
|
||||
return ob_get_clean();
|
||||
}
|
||||
|
||||
/**
|
||||
* Process the My Pledges form.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function process_my_pledges_form() {
|
||||
$message = '';
|
||||
$status = false;
|
||||
$contributor_post_id = filter_input( INPUT_POST, 'contributor_post_id', FILTER_VALIDATE_INT );
|
||||
$pledge = get_post( get_post( $contributor_post_id )->post_parent );
|
||||
$nonce = filter_input( INPUT_POST, '_wpnonce', FILTER_SANITIZE_STRING );
|
||||
|
||||
if ( filter_input( INPUT_POST, 'join_organization' ) ) {
|
||||
wp_verify_nonce( $nonce, 'join_decline_organization' ) || wp_nonce_ays( 'join_decline_organization' );
|
||||
|
||||
$status = 'publish';
|
||||
$message = "You have joined the pledge from {$pledge->post_title}.";
|
||||
|
||||
} elseif ( filter_input( INPUT_POST, 'decline_invitation' ) ) {
|
||||
wp_verify_nonce( $nonce, 'join_decline_organization' ) || wp_nonce_ays( 'join_decline_organization' );
|
||||
|
||||
$status = 'trash';
|
||||
$message = "Your have declined the invitation from {$pledge->post_title}.";
|
||||
|
||||
} elseif ( filter_input( INPUT_POST, 'leave_organization' ) ) {
|
||||
wp_verify_nonce( $nonce, 'leave_organization' ) || wp_nonce_ays( 'leave_organization' );
|
||||
|
||||
$status = 'trash';
|
||||
$message = "Your have left the {$pledge->post_title} pledge.";
|
||||
}
|
||||
|
||||
if ( 'publish' === $status ) {
|
||||
wp_update_post( array(
|
||||
'ID' => $contributor_post_id,
|
||||
'post_status' => $status,
|
||||
) );
|
||||
} elseif ( 'trash' === $status ) {
|
||||
wp_delete_post( $contributor_post_id );
|
||||
}
|
||||
|
||||
return $message;
|
||||
}
|
||||
|
|
92
plugins/wporg-5ftf/views/list-my-pledges.php
Normal file
92
plugins/wporg-5ftf/views/list-my-pledges.php
Normal file
|
@ -0,0 +1,92 @@
|
|||
<?php
|
||||
|
||||
namespace WordPressDotOrg\FiveForTheFuture\View;
|
||||
use WP_User, WP_Post;
|
||||
|
||||
/**
|
||||
* @var WP_User $user
|
||||
* @var array $contributor_posts
|
||||
* @var WP_Post $contributor_post
|
||||
* @var string $success_message
|
||||
* @var string $pledge_url
|
||||
*/
|
||||
|
||||
?>
|
||||
|
||||
<?php if ( is_user_logged_in() ) : ?>
|
||||
|
||||
<?php echo get_avatar( $user->ID, 96, 'blank', "{$user->login}'s avatar" ); ?>
|
||||
|
||||
<p>Pledged 10 hours a week across two organizations</p> <?php // todo pull from profiles. ?>
|
||||
|
||||
<?php if ( $success_message ) : ?>
|
||||
<div class="notice notice-success notice-alt">
|
||||
<p>
|
||||
<?php echo esc_html( $success_message ); ?>
|
||||
</p>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ( $contributor_posts ) : ?>
|
||||
<?php foreach ( $contributor_posts as $contributor_post ) : ?>
|
||||
<?php $pledge = get_post( $contributor_post->post_parent ); ?>
|
||||
|
||||
<?php echo get_the_post_thumbnail( $pledge->ID, 'pledge-logo' ); ?>
|
||||
<?php echo esc_html( $pledge->post_title ); ?>
|
||||
|
||||
<form action="" method="post">
|
||||
<input type="hidden" name="contributor_post_id" value="<?php echo esc_attr( $contributor_post->ID ); ?>" />
|
||||
|
||||
<p>
|
||||
<?php if ( 'pending' === $contributor_post->post_status ) : ?>
|
||||
<?php wp_nonce_field( 'join_decline_organization' ); ?>
|
||||
|
||||
<input
|
||||
type="submit"
|
||||
name="join_organization"
|
||||
value="Join Organization"
|
||||
/>
|
||||
|
||||
<input
|
||||
type="submit"
|
||||
class="button-link"
|
||||
name="decline_invitation"
|
||||
value="Decline Invitation"
|
||||
/>
|
||||
|
||||
<?php elseif ( 'publish' === $contributor_post->post_status ) : ?>
|
||||
<p>
|
||||
You confirmed this pledge on {date}
|
||||
</p>
|
||||
|
||||
<?php wp_nonce_field( 'leave_organization' ); ?>
|
||||
|
||||
<input
|
||||
type="submit"
|
||||
name="leave_organization"
|
||||
value="Leave Organization"
|
||||
/>
|
||||
|
||||
<?php endif; ?>
|
||||
</p>
|
||||
</form>
|
||||
|
||||
<?php endforeach; ?>
|
||||
|
||||
<?php else : ?>
|
||||
|
||||
<p>You don't currently have any sponsorships. If your employer is sponsoring part of your time to contribute to WordPress, please ask them to <a href="<?php echo esc_url( $pledge_url ); ?>">submit a pledge</a> and list you as a contributor.</p>
|
||||
|
||||
<?php // todo add some resources here about how they can convince their boss to sponsor some of their time? ?>
|
||||
|
||||
<?php endif; ?>
|
||||
|
||||
<?php else : ?>
|
||||
|
||||
<div class="notice notice-error notice-alt">
|
||||
<p>
|
||||
Please <a href="<?php echo esc_url( wp_login_url( get_permalink() ) ); ?>">log in to your WordPress.org account</a> in order to view your pledges.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<?php endif; ?>
|
Loading…
Reference in a new issue