X-Git-Url: https://git.rapsys.eu/packbundle/blobdiff_plain/0630ec4bdb74d50e2cc6353dca9d8c691fe22479..HEAD:/Command.php?ds=sidebyside

diff --git a/Command.php b/Command.php
index 0097d12..ca0e3cc 100644
--- a/Command.php
+++ b/Command.php
@@ -20,12 +20,39 @@ use Symfony\Component\DependencyInjection\Container;
  * {@inheritdoc}
  */
 class Command extends BaseCommand {
+	/**
+	 * Alias string
+	 */
+	protected string $alias = '';
+
+	/**
+	 * Bundle string
+	 */
+	protected string $bundle = '';
+
 	/**
 	 * {@inheritdoc}
 	 */
 	public function __construct(protected ?string $name = null) {
+		//Get class
+		$class = strrchr(static::class, '\\', true);
+
+		//Without command name
+		if (substr(static::class, -strlen('\\Command')) !== '\\Command') {
+			$class = strrchr($class, '\\', true);
+		}
+
+		//Set bundle
+		$this->bundle = strtolower($class);
+
+		//With full class name
+		if (class_exists($class .= '\\'.str_replace('\\', '', $class)) && method_exists($class, 'getAlias')) {
+			//Set alias
+			$this->alias = call_user_func([$class, 'getAlias']);
+		}
+
 		//Fix name
-		$this->name = $this->name ?? static::getName();
+		$this->name = $this->name ?? static::getName($this->alias);
 
 		//Call parent constructor
 		parent::__construct($this->name);
@@ -44,11 +71,13 @@ class Command extends BaseCommand {
 	}
 
 	/**
+	 * Return the command name
+	 *
 	 * {@inheritdoc}
 	 *
-	 * Return the command name
+	 * @param ?string $alias The bundle alias
 	 */
-	public function getName(): string {
+	public function getName(?string $alias = null): string {
 		//With namespace
 		if ($npos = strrpos(static::class, '\\')) {
 			//Set name pos
@@ -58,17 +87,33 @@ class Command extends BaseCommand {
 			$npos = 0;
 		}
 
+		//Set bundle pos
+		$bpos = strlen(static::class) - $npos;
+
 		//With trailing command
 		if (substr(static::class, -strlen('Command'), strlen('Command')) === 'Command') {
-			//Set bundle pos
-			$bpos = strlen(static::class) - $npos - strlen('Command');
-		//Without bundle
-		} else {
-			//Set bundle pos
-			$bpos = strlen(static::class) - $npos;
+			//Fix bundle pos
+			$bpos -= strlen('Command');
+		}
+
+		//Without alias
+		if ($alias === null) {
+			//Get class
+			$class = strrchr(static::class, '\\', true);
+
+			//Without command name
+			if (substr(static::class, -strlen('\\Command')) !== '\\Command') {
+				$class = strrchr($class, '\\', true);
+			}
+
+			//With full class name
+			if (class_exists($class .= '\\'.str_replace('\\', '', $class)) && method_exists($class, 'getAlias')) {
+				//Set alias
+				$alias = call_user_func([$class, 'getAlias']);
+			}
 		}
 
 		//Return command alias
-		return RapsysPackBundle::getAlias().':'.strtolower(substr(static::class, $npos, $bpos));
+		return ($alias?$alias.':':'').strtolower(substr(static::class, $npos, $bpos));
 	}
 }