Skip to content
Code-Schnipsel Gruppen Projekte
CodeGenerator.php 1,64 KiB
Newer Older
Patrick Müller's avatar
Patrick Müller committed
<?php

namespace QUI\ERP\Coupons;

use QUI;
use QUI\Exception;
Patrick Müller's avatar
Patrick Müller committed
use QUI\Utils\System\File;

use function basename;
use function call_user_func;

Patrick Müller's avatar
Patrick Müller committed
/**
 * Class CodeGenerator
 *
 * Generated unique, random Invite Codes
 */
class CodeGenerator
{
    /**
     * Generate a new, random Invite Code
     *
     * @return string
     * @throws Exception
Patrick Müller's avatar
Patrick Müller committed
     */
    public static function generate(): string
Patrick Müller's avatar
Patrick Müller committed
    {
        $generator = '\\QUI\\ERP\\Coupons\\CodeGenerators\\' . self::getCurrentGenerator();
Patrick Müller's avatar
Patrick Müller committed

        $Config = QUI::getPackage('quiqqer/coupons')->getConfig();
        $prefix = $Config->get('settings', 'prefix');

        if (empty($prefix)) {
            $prefix = '';
        }

        return call_user_func($generator . '::generate', $prefix);
Patrick Müller's avatar
Patrick Müller committed
    }

    /**
     * Get CodeGenerator that is currently set
     *
     * @return string - FQ class name
     * @throws Exception
Patrick Müller's avatar
Patrick Müller committed
     */
    protected static function getCurrentGenerator(): string
Patrick Müller's avatar
Patrick Müller committed
    {
        $Config = QUI::getPackage('quiqqer/coupons')->getConfig();
Patrick Müller's avatar
Patrick Müller committed
        $currentGenerator = $Config->get('settings', 'codeGenerator');

        if (empty($currentGenerator)) {
            return 'SimpleString';
        }

        return $currentGenerator;
    }

    /**
     * Get list of all available CodeGenerators
     *
     * @return array
     * @throws Exception
Patrick Müller's avatar
Patrick Müller committed
     */
    public static function getList(): array
Patrick Müller's avatar
Patrick Müller committed
    {
        $dir = QUI::getPackage('quiqqer/coupons')->getDir() . 'src/QUI/ERP/Coupons/CodeGenerators';
        $generators = [];
Patrick Müller's avatar
Patrick Müller committed

        foreach (File::readDir($dir, true) as $file) {
            $generators[] = basename($file, '.php');
Patrick Müller's avatar
Patrick Müller committed
        }

        return $generators;
    }
}