Issues (10)

src/Service/Communicator.php (1 issue)

Severity
1
<?php
2
3
declare(strict_types=1);
4
5
namespace ReliqArts\Scavenger\Service;
6
7
use Illuminate\Console\Command;
8
9
abstract class Communicator
10
{
11
    protected const COMM_DIRECTION_IN = 'in';
12
    protected const COMM_DIRECTION_OUT = 'out';
13
    protected const COMM_DIRECTION_FLAT = 'flat';
14
    protected const COMM_DIRECTION_NONE = 'none';
15
    protected const HASH_ALGORITHM = 'sha512';
16
    protected const VERBOSITY_HIGH = 3;
17
    protected const VERBOSITY_MEDIUM = 2;
18
    protected const VERBOSITY_LOW = 1;
19
20
    private const COMM_SPACE = ' ';
21
    private const COMM_SYMBOL_IN = '>>';
22
    private const COMM_SYMBOL_OUT = '<<';
23
    private const COMM_SYMBOL_FLAT = '--';
24
    private const COMM_SYMBOL_NONE = '  ';
25
26
    /**
27
     * Calling command if running in console.
28
     */
29
    protected ?Command $callingCommand;
30
31
    /**
32
     * Hashing algorithm in use.
33
     */
34
    protected string $hashAlgorithm;
35
36
    /**
37
     * Level of detail.
38
     */
39
    protected int $verbosity;
40
41
    /**
42
     * Communicator constructor.
43
     */
44
    public function __construct(?Command $callingCommand = null)
45
    {
46
        $this->callingCommand = $callingCommand;
47
    }
48
49
    final protected function printBlankLine(): void
50
    {
51
        $this->tell("\n", 'none');
52
    }
53
54
    /**
55
     * Print to console or screen.
56
     *
57
     * @param string $direction in|out
58
     */
59
    final protected function tell(string $text, string $direction = self::COMM_DIRECTION_OUT): void
60
    {
61
        $direction = strtolower($direction);
62
        $nl = app()->runningInConsole() ? "\n" : '<br/>';
0 ignored issues
show
The method runningInConsole() does not exist on Illuminate\Container\Container. Are you sure you never get this type here, but always one of the subclasses? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

62
        $nl = app()->/** @scrutinizer ignore-call */ runningInConsole() ? "\n" : '<br/>';
Loading history...
63
64
        switch ($direction) {
65
            case self::COMM_DIRECTION_IN:
66
                $dirSymbol = self::COMM_SYMBOL_IN;
67
68
                break;
69
            case self::COMM_DIRECTION_FLAT:
70
                $dirSymbol = self::COMM_SYMBOL_FLAT;
71
72
                break;
73
            case self::COMM_DIRECTION_OUT:
74
                $dirSymbol = self::COMM_SYMBOL_OUT;
75
76
                break;
77
            default:
78
                $dirSymbol = self::COMM_SYMBOL_NONE;
79
        }
80
        $dirSymbol .= self::COMM_SPACE;
81
82
        if ($this->callingCommand !== null && app()->runningInConsole()) {
83
            if ($direction === self::COMM_DIRECTION_OUT) {
84
                $this->callingCommand->line("<info>\\<\\< {$text}</info>");
85
            } else {
86
                $this->callingCommand->line($dirSymbol . $text);
87
            }
88
        } else {
89
            echo $nl . $dirSymbol . $text;
90
        }
91
    }
92
}
93