1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90:
<?php
/*
* This file is part of the Incipio package.
*
* (c) Théo FIDRY <theo.fidry@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace ApiBundle\DataFixtures\Faker\Provider;
use Faker\Generator;
/**
* @see ApiBundle\Entity\StudentConvention
*
* @author Théo FIDRY <theo.fidry@gmail.com>
*/
class StudentConventionProvider
{
/**
* @var Generator
*/
private $faker;
/**
* @param Generator $faker
*/
public function __construct(Generator $faker)
{
$this->faker = $faker;
}
/**
* Generates a student convention reference from the student full name and the date of signature of the convention.
*
* @param \DateTime $dateOfSignature
* @param string|null $fullname If is null, a random name is used instead
*
* @return string
*/
public function generateReference(\DateTime $dateOfSignature, $fullname = null)
{
if (null === $fullname || '' === $fullname) {
// It does not matter if the Faker instance is not based on the application locale as we don't really
// care of the real value of the name. Keeping this avoid having to inject a faker instance which is
// more difficul to properly test.
$fullname = $this->faker->name();
}
$fullnameParts = array_merge(explode(' ', $this->normalizeString($fullname)), ['a', 'b', 'c', 'd', 'e', 'f']);
$reference = '';
foreach ($fullnameParts as $part) {
$referenceLength = strlen($reference);
if (6 === $referenceLength) {
break;
}
$remaining = 6 - $referenceLength;
if (3 < $remaining) {
$remaining = 3;
}
$reference .= substr($part, 0, $remaining);
}
$reference .= $dateOfSignature->format('Ymd');
return strtoupper($reference);
}
/**
* Removes any non letter characters from the string except for whitespaces.
*
* @param string $string
*
* @return string
*/
private function normalizeString($string)
{
$string = str_replace(' ', '______', $string); // Secure spaces
$string = preg_replace('/[^A-Za-z\_]/', '', $string); // Removes special characters
return str_replace('______', ' ', $string);
}
}