Skip to content

Commit

Permalink
Docs: Pre-fill sponsor agreement details from sponsor CPT (#1052)
Browse files Browse the repository at this point in the history
  • Loading branch information
timiwahalahti authored Oct 9, 2023
1 parent 08845e0 commit 767d854
Show file tree
Hide file tree
Showing 2 changed files with 127 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -86,21 +86,36 @@ public static function form_handler() {

// Check selected template on any step.
$templates = self::get_templates();
$template = sanitize_text_field( $_POST['wcdocs_template'] );
if ( ! array_key_exists( $template, $templates ) )
$template_selected = sanitize_text_field( $_POST['wcdocs_template'] );
if ( ! array_key_exists( $template_selected, $templates ) ) {
return self::error( __( 'Selected template does not exist', 'wordcamporg' ) );
}

$template = $templates[ $template ];
$template = $templates[ $template_selected ];

switch ( $step ) {
case 1: // submitted step 1
case 1: // submitted step 1.
if ( 'sponsorship-agreement' == $template_selected ) {
self::$step = 10;
} else {
// Nothing else to check on this step.
self::$step = 20;
}

// Nothing else to check on this step.
self::$step = 2;
break;

case 2: // submitted step 2
case 10: // submitted step 10.
$data = $template->sanitize( $_POST );

if ( 'sponsorship-agreement' == $template_selected ) {
if ( 'wcb_sponsor' === get_post_type( $data['sponsor_id'] ) ) {
self::$step = 20;
}
}

break;

case 20: // submitted step 20.
require_once( WORDCAMP_DOCS__PLUGIN_DIR . 'classes/class-wordcamp-docs-pdf-generator.php' );
$generator = new WordCamp_Docs_PDF_Generator;

Expand Down Expand Up @@ -133,6 +148,9 @@ private static function error( $message ) {

/**
* Render the contents of our admin section.
*
* phpcs:disable WordPress.Security.NonceVerification.Missing
* nonce is checked on form_handler function
*/
public static function render_menu_page() {
?>
Expand Down Expand Up @@ -166,12 +184,29 @@ public static function render_menu_page() {
</p>
</form>

<?php elseif ( self::$step == 2 ) : ?>
<?php elseif ( 10 == self::$step ) : ?>

<form method="POST">
<input type="hidden" name="wcdocs_submit" value="10" />
<input type="hidden" name="wcdocs_template" value="<?php echo esc_attr( $_POST['wcdocs_template'] ); ?>">
<?php wp_nonce_field( 'wcdocs_step_10' ); ?>

<?php
$template = self::get_template( $_POST['wcdocs_template'] );
$template->form_prefill_select( $_POST );
?>

<p class="submit">
<input type="submit" class="button-primary" value="Next &rarr;">
</p>
</form>

<?php elseif ( 20 == self::$step ) : ?>

<form method="POST">
<input type="hidden" name="wcdocs_submit" value="2" />
<input type="hidden" name="wcdocs_submit" value="20" />
<input type="hidden" name="wcdocs_template" value="<?php echo esc_attr( $_POST['wcdocs_template'] ); ?>">
<?php wp_nonce_field( 'wcdocs_step_2' ); ?>
<?php wp_nonce_field( 'wcdocs_step_20' ); ?>

<?php
$template = self::get_template( $_POST['wcdocs_template'] );
Expand All @@ -187,6 +222,7 @@ public static function render_menu_page() {
</div>
<?php
}
// phpcs:enable WordPress.Security.NonceVerification.Missing

private function __construct() {} // Not this time.
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,85 @@
* Sponsorship Agreement Template
*/
class WordCamp_Docs_Template_Sponsorship_Agreement implements WordCamp_Docs_Template {
/**
* Step 10. Select the sponsor post from which the form will be pre-filled.
*/
public function form_prefill_select( $data ) {
$sponsors = get_posts( array(
'post_type' => 'wcb_sponsor',
'post_status' => 'publish',
'posts_per_page' => 500,
) );

?>

<style>
.wcorg-sponsorship-agreement-form label {
display: block;
clear: both;
margin-top: 12px;
}

.wcorg-sponsorship-agreement-form input,
.wcorg-sponsorship-agreement-form textarea,
.wcorg-sponsorship-agreement-form select {
width: 360px;
}

.wcorg-sponsorship-agreement-form textarea {
height: 120px;
}

.wcorg-sponsorship-agreement-form .description {
display: block;
clear: both;
}
</style>

<div class="wcorg-sponsorship-agreement-form">
<label><?php esc_html_e( 'Sponsor:', 'wordcamporg' ); ?></label>
<select name="sponsor_id">
<?php foreach ( $sponsors as $sponsor ) : ?>
<option value="<?php echo esc_attr( $sponsor->ID ); ?>"><?php echo esc_html( get_the_title( $sponsor ) ); ?></option>
<?php endforeach; ?>
</select>
<span class="description"><?php esc_html_e( 'Sponsorship details will be pre-filled with the data on sponsor post.', 'wordcamporg' ); ?></span>

<label><?php esc_html_e( 'Sponsorship Benefits:', 'wordcamporg' ); ?></label>
<textarea name="sponsorship_benefits"><?php echo esc_textarea( $data['sponsorship_benefits'] ?? '' ); ?></textarea>
<span class="description"><?php esc_html_e( 'Use multiple lines.', 'wordcamporg' ); ?></span>
</div>

<?php
}

public function form( $data ) {
$data = wp_parse_args( $data, array(
'sponsor_name' => '',
'sponsor_rep_name' => '',
'sponsor_rep_title' => '',

'agreement_date' => '',
'wordcamp_location' => '',
'wordcamp_date' => '',

'sponsorship_amount' => '',
'sponsorship_amount_num' => '',
'sponsorship_benefits' => '',
$date_format = get_option( 'date_format' );

$sponsor_id = absint( $data['sponsor_id'] );
$sponsor_amount = get_post_meta( $sponsor_id, '_wcb_sponsor_amount', true );
$sponsor_currency = get_post_meta( $sponsor_id, '_wcb_sponsor_currency', true );

$wordcamp = get_wordcamp_post();
$start_date = ! empty( $wordcamp->meta['Start Date (YYYY-mm-dd)'][0] ) ? gmdate( $date_format, $wordcamp->meta['Start Date (YYYY-mm-dd)'][0] ) : '';
$end_date = ! empty( $wordcamp->meta['End Date (YYYY-mm-dd)'][0] ) ? gmdate( $date_format, $wordcamp->meta['End Date (YYYY-mm-dd)'][0] ) : $start_date;

$number_formatter = new NumberFormatter( get_locale(), NumberFormatter::SPELLOUT );
$sponsorship_amount = $number_formatter->format( $sponsor_amount ) . " {$sponsor_currency}";

$number_formatter = new NumberFormatter( get_locale(), NumberFormatter::CURRENCY );
$sponsorship_amount_num = $number_formatter->formatCurrency( $sponsor_amount, $sponsor_currency );

$data = wp_parse_args( $data, array( // phpcs:ignore PEAR.Functions.FunctionCallSignature.MultipleArguments
'sponsor_name' => get_the_title( $sponsor_id ),
'sponsor_rep_name' => get_post_meta( $sponsor_id, '_wcpt_sponsor_first_name', true ) . ' ' . get_post_meta( $sponsor_id, '_wcpt_sponsor_last_name', true ),
'sponsor_rep_title' => '',
'agreement_date' => wp_date( $date_format ),
'wordcamp_location' => $wordcamp->meta['Location'][0],
'wordcamp_date' => ( $start_date !== $end_date ) ? "{$start_date} - {$end_date}" : $start_date,
'sponsorship_amount' => $sponsorship_amount,
'sponsorship_amount_num' => $sponsorship_amount_num,
'sponsorship_benefits' => '',
) );
?>
<style>
Expand All @@ -28,7 +94,7 @@ public function form( $data ) {
.wcorg-sponsorship-agreement-form input,
.wcorg-sponsorship-agreement-form textarea,
.wcorg-sponsorship-agreement-form select {
width: 240px;
width: 360px;
}

.wcorg-sponsorship-agreement-form textarea {
Expand Down Expand Up @@ -262,6 +328,7 @@ public function render( $data ) {
public function sanitize( $input ) {
$output = array();
foreach ( array(
'sponsor_id',
'sponsor_name',
'sponsor_rep_name',
'sponsor_rep_title',
Expand All @@ -271,7 +338,7 @@ public function sanitize( $input ) {
'sponsorship_amount',
'sponsorship_amount_num',
) as $field )
$output[ $field ] = sanitize_text_field( wp_strip_all_tags( $input[ $field ] ) );
$output[ $field ] = sanitize_text_field( wp_strip_all_tags( $input[ $field ] ?? '' ) );

$output['sponsorship_benefits'] = wp_strip_all_tags( $input['sponsorship_benefits'] );
return $output;
Expand Down

0 comments on commit 767d854

Please sign in to comment.