summaryrefslogblamecommitdiffstats
path: root/generate-sample-gig-data.php
blob: ecbf67aeb6e0e32da9bc60dae4f2a2d2f9484284 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
     









                                                                               
 








                                             
                                            
 






                                                    


     




                                               
       

                




                                                        


              

      
       

               




                                                                                                               







                      

      
       

             




                                                                                                    






                     

      
       

               




                                                                   



              
             

      



                                    
                       



                                           
 
                                                                              


     




                                            
       

                




                                                                              
           



                  

      
       

                




                                                                                         
           




                  

      
       

                     




                                                                                                    






                     

      



                                     
                       



                                          
 
                                              


     




                                                
       

                               

                     

                                                                     


     




                                           




                                                         
                                  




                        

      




                                            


     

                                
                             
                            

                       




                                                                      
 
                                                                     
                                                                                                                                            
 
<?php
/**
 * Tool to generate random concert entries for importing into giglogadmin.
 *
 * @package giglogadmin
 *
 * SPDX-FileCopyrightText: 2021 Andrea Chirulescu <andrea.chirulescu@gmail.com>
 * SPDX-FileCopyrightText: 2021 Harald Eilertsen <haraldei@anduin.net>
 *
 * SPDX-License-Identifier: AGPL-3.0-or-later
 */

/**
 * Abstract base class for a generator.
 */
abstract class GeneratorBase {

    /**
     * Return a generated string.
     * Must be implemented by derived classes
     */
    abstract public function get() : string;

    /**
     * Return a random element from an array.
     *
     * @param array $arr an array of elements.
     */
    protected function pick( array $arr ) : string {
        return $arr[ array_rand( $arr ) ];
    }
}

/**
 * Generator for band names
 */
class BandNameGenerator extends GeneratorBase {

    /**
     * Prefixes.
     *
     * @var string[]
     *
     * @psalm-var array{0: string, 1: string, 2: string}
     */
    private array $prefixes = array(
        '',
        'a',
        'the',
    );

    /**
     * Adverbs.
     *
     * @var string[]
     *
     * @psalm-var array{0: string, 1: string, 2: string, 3: string, 4: string, 5: string, 6: string, 7: string}
     */
    private array $adverbs = array(
        'Bestial',
        'Dead',
        'Incongruent',
        'Ladylike',
        'Slimy',
        'Dandy',
        'Leftist',
        'Flamboyant',
    );

    /**
     * Verbs.
     *
     * @var string[]
     *
     * @psalm-var array{0: string, 1: string, 2: string, 3: string, 4: string, 5: string, 6: string}
     */
    private array $verbs = array(
        'Kill',
        'Regurgitat',
        'Destroy',
        'Blasphem',
        'Strangl',
        'Terroriz',
        'Mutilat',
    );

    /**
     * Endings.
     *
     * @var string[]
     *
     * @psalm-var array{0: string, 1: string, 2: string, 3: string}
     */
    private array $endings = array(
        'er',
        'ers',
        'ing',
        'ed',
        'or',
    );

    /**
     * Return a generated band name.
     */
    public function get() : string {
        $parts = array(
            $this->pick( $this->prefixes ),
            $this->pick( $this->adverbs ),
            $this->pick( $this->verbs ),
		);

        return trim( implode( ' ', $parts ) . $this->pick( $this->endings ) );
    }
}

/**
 * Generator for venue names
 */
class VenueGenerator extends GeneratorBase {

    /**
     * Prefix 1.
     *
     * @var string[]
     *
     * @psalm-var array{0: string, 1: string, 2: string, 3: string, 4: string}
     */
    private array $prefix1 = array(
        '',
        'Royal',
        'Shabby',
        'Happy',
        'Drunken',
    );

    /**
     * Prefix 2.
     *
     * @var string[]
     *
     * @psalm-var array{0: string, 1: string, 2: string, 3: string, 4: string, 5: string}
     */
    private array $prefix2 = array(
        '',
        'Music',
        'Fiddler',
        'Rock',
        'Metal',
        'Mental',
    );

    /**
     * Type of venue.
     *
     * @var string[]
     *
     * @psalm-var array{0: string, 1: string, 2: string, 3: string, 4: string, 5: string, 6: string}
     */
    private array $type = array(
        'Hall',
        'Museum',
        'Asylum',
        'Stage',
        'Cottage',
        'Opera',
        'Lighthouse',
    );

    /**
     * Return a generated venue name.
     */
    public function get() : string {
        $parts = array(
            $this->pick( $this->prefix1 ),
            $this->pick( $this->prefix2 ),
            $this->pick( $this->type ),
		);

        return trim( implode( ' ', $parts ) );
    }
}

/**
 * Generator for links (event and ticket links.)
 */
class LinkGenerator extends GeneratorBase {

    /**
     * Return a generated link.
     *
     * @return string
     */
    public function get() : string {
        return 'https://example.com/' . bin2hex( random_bytes( 8 ) );
    }
}

/**
 * Generator for cities
 */
class CityGenerator extends GeneratorBase {

    /**
     * A few cities, so we can test filtering for cities.
     *
     * @var array $cities   The cities.
     */
    private array $cities = array(
        'Oslo',
        'Trondheim',
        'Støren',
        'Velstandsbygd',
        'Sommerhytta',
    );

    /**
     * Return a random city.
     */
    public function get() : string {
        return $this->pick( $this->cities );
    }
}

$band = new BandNameGenerator();
$venue = new VenueGenerator();
$links = new LinkGenerator();
$city = new CityGenerator();
$date = new DateTime();

$prog = array_shift( $argv );
$num = intval( array_shift( $argv ) ) ?? 10;

for ( $i = 0; $i < $num; $i++ ) {
    $date->add( new DateInterval( 'P' . random_int( 0, 60 ) . 'D' ) );

    // phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped
    echo implode( "\t", array( $band->get(), $venue->get(), $city->get(), $date->format( 'Y-m-d' ), $links->get(), $links->get() ) ) . "\n";
}