diff --git a/plugins/wporg-5ftf/includes/pledge-form.php b/plugins/wporg-5ftf/includes/pledge-form.php
index f059898..3cd808d 100755
--- a/plugins/wporg-5ftf/includes/pledge-form.php
+++ b/plugins/wporg-5ftf/includes/pledge-form.php
@@ -144,6 +144,23 @@ function render_form_manage() {
$messages[] = __( 'You must confirm your new email address before it will be visible.', 'wporg-5ftf' );
}
}
+ } else if ( 'remove-pledge' === $action ) {
+ $results = process_form_remove( $pledge_id, $auth_token );
+
+ if ( is_wp_error( $results ) ) {
+ $errors = $results->get_error_messages();
+ } else {
+ $messages = array(
+ sprintf(
+ __( 'Your pledge has been removed. If this was a mistake, please contact us to reactivate your pledge.', 'wporg-5ftf' ),
+ get_permalink( get_page_by_path( 'report' ) )
+ ),
+ );
+ }
+
+ ob_start();
+ require FiveForTheFuture\PATH . 'views/partial-result-messages.php';
+ return ob_get_clean();
}
$data = PledgeMeta\get_pledge_meta( $pledge_id );
@@ -215,12 +232,48 @@ function process_form_manage( $pledge_id, $auth_token ) {
}
}
- // @todo Save contributors.
-
// If we made it to here, we've successfully saved the pledge.
return true;
}
+/**
+ * Process a submission from the Manage Pledge form.
+ *
+ * @return WP_Error|true An error if the pledge could not be saved. Otherwise true.
+ */
+function process_form_remove( $pledge_id, $auth_token ) {
+ $errors = array();
+ $nonce = filter_input( INPUT_POST, '_wpnonce', FILTER_SANITIZE_STRING );
+ $nonce_action = 'remove_pledge_' . $pledge_id;
+ $has_valid_nonce = wp_verify_nonce( $nonce, $nonce_action );
+ $can_view_form = Auth\can_manage_pledge( $pledge_id, $auth_token );
+
+ if ( ! $has_valid_nonce || is_wp_error( $can_view_form ) ) {
+ return new WP_Error(
+ 'invalid_token',
+ sprintf(
+ __( 'Your link has expired, please obtain a new one.', 'wporg-5ftf' ),
+ get_permalink( $pledge_id )
+ )
+ );
+ }
+
+ $result = wp_update_post(
+ array(
+ 'ID' => $pledge_id,
+ 'post_status' => Pledge\DEACTIVE_STATUS,
+ ),
+ true // Return a WP_Error.
+ );
+
+ if ( is_wp_error( $result ) ) {
+ return $result;
+ }
+
+ // If we made it to here, we've successfully removed the pledge.
+ return true;
+}
+
/**
* Process a request to confirm a company's email address.
*