Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
206 changes: 206 additions & 0 deletions src/Tribe/Generator/Preset.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,206 @@
<?php
namespace Tribe\Extensions\ET_Test_Data_Generator\Generator;

use TEC\Tickets_Plus\Ticket_Presets\Repositories\Ticket_Presets;
use TEC\Tickets_Plus\Ticket_Presets\Models\Ticket_Preset;

class Preset {

/**
* A boolean to mark whether the Presets will have unlimited capacity.
*
* @since 1.0.0
*
* @var boolean
*/
protected $unlimited_capacity = false;

/**
* An int to set custom Capacity for Presets.
*
* @since 1.0.0
*
* @var int|null
*/
protected $custom_capacity;

/**
* Stores the arguments passed to the create method.
*
* @since 1.0.0
*
* @var array<string,string|int|bool>
*/
protected $args = [];

/**
* Creates randomly generated Ticket Presets.
*
* @since 1.0.0
*
* @param int $quantity The number of Presets to create.
* @param array<string,string|int|bool> $args An array of arguments to customize the Preset creation.
* @param ?callable $tick An optional callback that will be fired after each Preset creation;
* the callback will receive the just created Preset ID as argument.
*
* @return array<int> An array of the generated Preset IDs.
*/
public function create( $quantity = 1, array $args = [], ?callable $tick = null ) {
$presets = [];
// Store args for use in other methods
$this->args = $args;

// Get current number of existing presets.
$repository = tribe( Ticket_Presets::class );
$existing_presets = $repository->count_all();

// Generate Presets.
for ( $i = 1; $i <= $quantity; $i++ ) {
$args['name'] = ! empty( $args['title_prefix'] )
? $args['title_prefix'] . ' ' . ( $existing_presets + $i )
: 'Preset ' . ( $existing_presets + $i );

$preset_id = $this->add_preset( $args );

if ( $preset_id ) {
$presets[] = $preset_id;

if ( is_callable( $tick ) ) {
$tick( $preset_id );
}
}
}

return $presets;
}

/**
* Creates a single Ticket Preset.
*
* @since 1.0.0
*
* @param array<string,string|int|bool> $args The preset arguments.
*
* @return int|false The preset ID if successful, false otherwise.
*/
public function add_preset( $args ) {
if ( ! class_exists( 'TEC\Tickets_Plus\Ticket_Presets\Repositories\Ticket_Presets' ) ) {
return false;
}

$type = $this->get_random_ticket_type();
// Use fixed price if provided in args.
$price = $this->args['fixed_price'] ?? $this->get_random_ticket_price( $type );

// Check Capacity type.
if ( ! empty( $args['capacity_type'] ) && $args['capacity_type'] === 'unlimited' ) {
$capacity = -1;
$capacity_type = 'unlimited';
} else if ( ! empty( $args['capacity'] ) ) {
$capacity = absint( $args['capacity'] );
$capacity_type = 'own';
} else {
$capacity = random_int( 1, 9 ) * 10;
$capacity_type = 'own';
}

// Use custom description if provided
$description = isset( $this->args['description'] )
? $this->args['description']
: "Preset for {$type} ticket.";

$ticket_name = isset( $this->args['ticket_name'] )
? $this->args['ticket_name']
: "Generated {$type} Ticket";

// Construct the preset data structure.
$data = [
'name' => $args['name'],
'description' => $description,
'cost' => $price,
'ticket_name' => $ticket_name,
'ticket_type' => $type,
'aic' => [],
'capacity' => [
'type' => $capacity_type,
'amount' => $capacity,
],
'sale_start_logic' => [
'relative_to' => $args['sale_start_logic']['relative_to'] ?? 'start',
'direction' => $args['sale_start_logic']['direction'] ?? 'before',
'period' => $args['sale_start_logic']['period'] ?? 'day',
'length' => $args['sale_start_logic']['length'] ?? 1
],
'sale_end_logic' => [
'relative_to' => $args['sale_end_logic']['relative_to'] ?? 'start',
'direction' => $args['sale_end_logic']['direction'] ?? 'after',
'period' => $args['sale_end_logic']['period'] ?? 'hour',
'length' => $args['sale_end_logic']['length'] ?? 1
],
];

$preset = Ticket_Preset::create(
[
'slug' => sanitize_title( $data['name'] ),
'data' => wp_json_encode( $data ),
]
);

// Save the preset using the repository.
$repository = tribe( Ticket_Presets::class );
return $repository->insert( $preset );
}

/**
* Randomly pick a ticket type from a list.
*
* @since 1.0.0
*
* @return string
*/
public function get_random_ticket_type() {
$type_list = [ 'Standard', 'General', 'Basic', 'Student', 'Early Bird', 'VIP', 'Platinum' ];
$index = array_rand( $type_list, 1 );

return $type_list[$index];
}

/**
* Creates random price for the preset, based on ticket type.
*
* @since 1.0.0
*
* @param string $type The ticket type.
*
* @return float
*/
public function get_random_ticket_price( $type ) {
$random_price = 9.99;

switch ( $type ) {
case 'Student':
$random_price = random_int( 1, 5 ) * 5;
break;
case 'Early Bird':
$random_price = random_int( 3, 6 ) * 6;
break;
case 'Basic':
$random_price = random_int( 2, 5 ) * 10;
break;
case 'Standard':
$random_price = random_int( 2, 4 ) * 10;
break;
case 'General':
$random_price = random_int( 3, 4 ) * 10;
break;
case 'VIP':
$random_price = random_int( 5, 7 ) * 10;
break;
case 'Platinum':
$random_price = random_int( 6, 9 ) * 13;
break;
}

return $random_price;
}
}
38 changes: 21 additions & 17 deletions src/Tribe/Generator/Ticket.php
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
<?php
namespace Tribe\Extensions\ET_Test_Data_Generator\Generator;

use Tribe__Tickets__RSVP;
use Tribe__Tickets__Global_Stock;
use Tribe__Tickets__Tickets;

class Ticket {

/**
* A boolean to mark whether the Tickets will have unlimited capacity.
*
Expand Down Expand Up @@ -43,10 +47,10 @@ class Ticket {
* Creates randomly generated Tickets.
*
* @since 1.0.0
*
*
* @param int $quantity The number of Tickets to create.
* @param array<string,string|int|bool> $args An array of arguments to customize the Ticket creation.
* @param callable|null $tick An optional callback that will be fired after each Ticket creation;
* @param ?callable $tick An optional callback that will be fired after each Ticket creation;
* the callback will receive the just created Ticket post object as
* argument.
*
Expand All @@ -55,15 +59,15 @@ class Ticket {
* creation.
*
*/
public function create( $quantity = 1, array $args = [], callable $tick = null ) {
public function create( $quantity = 1, array $args = [], ?callable $tick = null ) {
if( empty( $args['event_id'] ) ) {
die('Event ID is required to generate Tickets.');
}

$event_id = $args['event_id'];


//Check Capacity type
// Check Capacity type
if( !empty( $args['capacity_type'] ) ) {
switch( $args['capacity_type'] ) {
case 'shared':
Expand All @@ -77,25 +81,25 @@ public function create( $quantity = 1, array $args = [], callable $tick = null

if( !$this->unlimited_capacity && !empty( $args['capacity'] ) ) {
$this->custom_capacity = $args['capacity'];
//If custom Capacity is set, but not custom Stock, Custom Stock will equal the Custom Capacity.
// If custom Capacity is set, but not custom Stock, Custom Stock will equal the Custom Capacity.
$this->custom_stock = !empty( $args['stock'] ) ? $args['stock'] : $this->custom_capacity;
}

//Get number of existing tickets for Event
// Get number of existing tickets for Event.
$provider = \Tribe__Tickets__Tickets::get_event_ticket_provider( $event_id );
$existing_tickets = count( tribe( $provider )->get_tickets($event_id) );

//Generate Tickets
// Generate Tickets.
for ( $i = 1; $i <= $quantity; $i++ ) {
$title = 'Ticket ' . ( $existing_tickets + $i );
$Tickets[] = $this->add_ticket( $event_id, $title );
$tickets[] = $this->add_ticket( $event_id, $title );

if ( is_callable( $tick ) ) {
$tick( end( $Tickets ) );
$tick( end( $tickets ) );
}
}

return $Tickets;
return $tickets;
}

/**
Expand All @@ -116,13 +120,13 @@ public function add_ticket( $event_id, $title ) {
if ( is_string( $provider ) ) {
$provider = new $provider;
}

// If we don't have a paid provider as default, bail.
if ( Tribe__Tickets__RSVP::class === $provider->class_name ) {
return;
}


$type = $this->get_random_ticket_type();
$price = $this->get_random_ticket_price( $type );

Expand Down Expand Up @@ -161,7 +165,7 @@ public function add_ticket( $event_id, $title ) {
],
];
}


$provider->ticket_add( $event_id, $data );
add_post_meta( $event_id, '_AttendeeCost', $price );
Expand All @@ -188,11 +192,11 @@ public function get_random_ticket_type() {
* @param $type
*/
public function get_random_ticket_price( $type ) {

$random_price = 9.99;

switch( $type ) {

case 'Student':
$random_price = random_int(1,5) * 5;
break;
Expand All @@ -215,7 +219,7 @@ public function get_random_ticket_price( $type ) {
$random_price = random_int(6,9) * 13;
break;
}

return $random_price;
}
}
28 changes: 21 additions & 7 deletions src/Tribe/Page.php
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ public function render() {
}

/**
*Parse POST request from Admin menu
* Parse POST request from Admin menu
*
* @since 1.0.0
*/
Expand All @@ -120,28 +120,42 @@ public function parse_request() {
}

$redirect_url = tribe_get_request_var( '_wp_http_referer', admin_url( 'admin.php?page=et-test-data-generator' ) );
$nonce = tribe_get_request_var( '_wpnonce' );
$nonce = tribe_get_request_var( '_wpnonce' );

if ( ! wp_verify_nonce( $nonce, static::$nonce_action_key ) ) {
$redirect_url = add_query_arg( [ 'tribe_error' => 1 ] );
wp_redirect( $redirect_url );
exit;
}

$rsvps = tribe_get_request_var( [ 'tec-ext-et-test-data-generator', 'rsvps' ], [] );
$tickets = tribe_get_request_var( [ 'tec-ext-et-test-data-generator', 'tickets' ], [] );
if ( empty( tribe_get_request_var( 'tec-ext-et-test-data-generator' ) ) ) {
$redirect_url = add_query_arg( [ 'tribe_error' => 1 ] );
wp_redirect( $redirect_url );
exit;
}

$rsvps = tribe_get_request_var( [ 'tec-ext-et-test-data-generator', 'rsvps' ], [] );
$tickets = tribe_get_request_var( [ 'tec-ext-et-test-data-generator', 'tickets' ], [] );
$attendees = tribe_get_request_var( [ 'tec-ext-et-test-data-generator', 'attendees' ], [] );

$presets = tribe_get_request_var( [ 'tec-ext-et-test-data-generator', 'presets' ], [] );

if ( ! empty( $rsvps['quantity'] ) ) {
$created_rsvps = tribe( Generator\RSVP::class )->create( $rsvps['quantity'], $rsvps );
}

if ( ! empty( $tickets['quantity'] ) ) {
$created_tickets = tribe( Generator\Ticket::class )->create( $tickets['quantity'], $tickets );
}

if ( ! empty( $attendees['quantity'] ) ) {
$created_attendees = tribe( Generator\Attendee::class )->create( $attendees['quantity'], $attendees );
}
}

if ( ! empty( $presets['quantity'] ) ) {
$created_presets = tribe( Generator\Preset::class )->create( $presets['quantity'], $presets );
}

if ( ! empty( $created_rsvps ) || ! empty( $created_tickets ) || ! empty( $created_attendees ) ) {
if ( ! empty( $created_rsvps ) || ! empty( $created_tickets ) || ! empty( $created_attendees ) || ! empty( $created_presets ) ) {
$redirect_url = add_query_arg( [ 'tribe_success' => 1 ] );
wp_redirect( $redirect_url );
exit;
Expand Down
Loading