X-Git-Url: https://git.rapsys.eu/packbundle/blobdiff_plain/ef9ee86cb52ee5b4e1ab70c26fd977fa2eb80586..b29d46fa4a1cb6b6cae4274f5bd0f6aaafa27f04:/Util/SluggerUtil.php

diff --git a/Util/SluggerUtil.php b/Util/SluggerUtil.php
index 3b1e6b5..5f7d76d 100644
--- a/Util/SluggerUtil.php
+++ b/Util/SluggerUtil.php
@@ -38,20 +38,25 @@ class SluggerUtil {
 	/**
 	 * Construct slugger util
 	 *
-	 * @description Run "php bin/console rapsyspack:range" to generate RAPSYSPACK_RANGE="ayl[...]z9w" range in .env.local
+	 * Run "bin/console rapsyspack:range" to generate RAPSYSPACK_RANGE="ayl[...]z9w" range in .env.local
 	 *
 	 * @todo Use Cache like in calendar controller through FilesystemAdapter ?
 	 *
-	 * @param string $range The shuffled range string
 	 * @param string $secret The secret string
 	 */
-	public function __construct(protected string $range, protected string $secret) {
+	public function __construct(protected string $secret) {
+		//Without range
+		if (empty($range = $_ENV['RAPSYSPACK_RANGE']) || $range === 'Ch4ng3m3!') {
+			//Protect member variable setup
+			return;
+		}
+
 		/**
 		 * Get pseuto-random alphabet by splitting range string
 		 * TODO: see required range by json_encode result and short input (0->255 ???)
 		 * XXX: The key count mismatch, count(alpha)>count(rev), resulted in a data corruption due to duplicate numeric values
 		 */
-		$this->alpha = str_split($this->range);
+		$this->alpha = str_split($range);
 
 		//Init rev array
 		$this->count = count($rev = $this->rev = array_flip($this->alpha));
@@ -60,6 +65,7 @@ class SluggerUtil {
 		$split = str_split($this->secret);
 
 		//Set offset
+		//TODO: protect undefined index ?
 		$this->offset = array_reduce($split, function ($res, $a) use ($rev) { return $res += $rev[$a]; }, count($split)) % $this->count;
 	}
 
@@ -156,9 +162,10 @@ class SluggerUtil {
 	 * Convert string to safe slug
 	 *
 	 * @param string $data The data string
+	 * @param string $separator The separator string 
 	 * @return ?string The slugged data
 	 */
-	function slug(?string $data): ?string {
+	function slug(?string $data, string $separator = '-'): ?string {
 		//With null
 		if ($data === null) {
 			//Return null
@@ -170,11 +177,11 @@ class SluggerUtil {
 			//Convert from any to latin, then to ascii and lowercase
 			$trans = \Transliterator::create('Any-Latin; Latin-ASCII; Lower()');
 			//Replace every non alphanumeric character by dash then trim dash
-			return trim(preg_replace('/[^a-zA-Z0-9]+/', '-', $trans->transliterate($data)), '-');
+			return trim(preg_replace('/[^a-zA-Z0-9]+/', $separator, $trans->transliterate($data)), $separator);
 		}
 
 		//Convert from utf-8 to ascii, replace quotes with space, remove non alphanumericseparator, replace separator with dash and trim dash
-		return trim(preg_replace('/[\/_|+ -]+/', '-', strtolower(preg_replace('/[^a-zA-Z0-9\/_|+ -]/', '', str_replace(['\'', '"'], ' ', iconv('UTF-8', 'ASCII//TRANSLIT', $data))))), '-');
+		return trim(preg_replace('/[\/_|+ -]+/', $separator, strtolower(preg_replace('/[^a-zA-Z0-9\/_|+ -]/', '', str_replace(['\'', '"'], ' ', iconv('UTF-8', 'ASCII//TRANSLIT', $data))))), $separator);
 	}
 
 	/**