InotifyEventCodeEnum::getCodeDescription()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 2.0625

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 3
c 1
b 0
f 0
nc 2
nop 1
dl 0
loc 7
ccs 3
cts 4
cp 0.75
crap 2.0625
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Inotify;
6
7
use InvalidArgumentException;
8
use MyCLabs\Enum\Enum;
9
use UnexpectedValueException;
10
11
/**
12
 * @method static InotifyEventCodeEnum ON_ACCESS()
13
 * @method static InotifyEventCodeEnum ON_MODIFY()
14
 * @method static InotifyEventCodeEnum ON_ATTRIB();
15
 * @method static InotifyEventCodeEnum ON_CLOSE_WRITE()
16
 * @method static InotifyEventCodeEnum ON_CLOSE_NOWRITE()
17
 * @method static InotifyEventCodeEnum ON_OPEN()
18
 * @method static InotifyEventCodeEnum ON_MOVED_FROM()
19
 * @method static InotifyEventCodeEnum ON_MOVED_TO()
20
 * @method static InotifyEventCodeEnum ON_CREATE()
21
 * @method static InotifyEventCodeEnum ON_DELETE()
22
 * @method static InotifyEventCodeEnum ON_DELETE_SELF()
23
 * @method static InotifyEventCodeEnum ON_MOVE_SELF()
24
 * @method static InotifyEventCodeEnum ON_UNMOUNT()
25
 * @method static InotifyEventCodeEnum ON_Q_OVERFLOW()
26
 * @method static InotifyEventCodeEnum ON_IGNORED()
27
 * @method static InotifyEventCodeEnum ON_CLOSE()
28
 * @method static InotifyEventCodeEnum ON_MOVE()
29
 * @method static InotifyEventCodeEnum ON_ALL_EVENTS()
30
 * @method static InotifyEventCodeEnum ON_ONLYDIR()
31
 * @method static InotifyEventCodeEnum ON_DONT_FOLLOW()
32
 * @method static InotifyEventCodeEnum ON_MASK_ADD()
33
 * @method static InotifyEventCodeEnum ON_ISDIR()
34
 * @method static InotifyEventCodeEnum ON_ONESHOT()
35
 * @method static InotifyEventCodeEnum ON_CLOSE_NOWRITE_HIGH()
36
 * @method static InotifyEventCodeEnum ON_OPEN_HIGH()
37
 * @method static InotifyEventCodeEnum ON_CREATE_HIGH()
38
 * @method static InotifyEventCodeEnum ON_DELETE_HIGH()
39
 * @method static InotifyEventCodeEnum UNKNOWN()
40
 */
41
class InotifyEventCodeEnum extends Enum
42
{
43
    private const ON_ACCESS = 1;
44
    private const ON_MODIFY = 2;
45
    private const ON_ATTRIB = 4;
46
    private const ON_CLOSE_WRITE = 8;
47
    private const ON_CLOSE_NOWRITE = 16;
48
    private const ON_OPEN = 32;
49
    private const ON_MOVED_FROM = 64;
50
    private const ON_MOVED_TO = 128;
51
    private const ON_CREATE = 256;
52
    private const ON_DELETE = 512;
53
    private const ON_DELETE_SELF = 1024;
54
    private const ON_MOVE_SELF = 2048;
55
    private const ON_UNMOUNT = 8192;
56
    private const ON_Q_OVERFLOW = 16384;
57
    private const ON_IGNORED = 32768;
58
    private const ON_CLOSE = 24;
59
    private const ON_MOVE = 192;
60
    private const ON_ALL_EVENTS = 4095;
61
    private const ON_ONLYDIR = 16777216;
62
    private const ON_DONT_FOLLOW = 33554432;
63
    private const ON_MASK_ADD = 536870912;
64
    private const ON_ISDIR = 1073741824;
65
    private const ON_ONESHOT = 2147483648;
66
67
    private const ON_CLOSE_NOWRITE_HIGH = 1073741840;
68
    private const ON_OPEN_HIGH = 1073741856;
69
    private const ON_CREATE_HIGH = 1073742080;
70
    private const ON_DELETE_HIGH = 1073742336;
71
72
    private const UNKNOWN = 0;
73
74
    public static $constants = [
75
        0 => ['UNKNOWN', 'Unknown code.'],
76
        1 => ['ON_ACCESS', 'File was accessed (read)'],
77
        2 => ['ON_MODIFY', 'File was modified'],
78
        4 => ['ON_ATTRIB', 'Metadata changed (e.g. permissions, mtime, etc.)'],
79
        8 => ['ON_CLOSE_WRITE', 'File opened for writing was closed'],
80
        16 => ['ON_CLOSE_NOWRITE', 'File not opened for writing was closed'],
81
        32 => ['ON_OPEN', 'File was opened'],
82
        128 => ['ON_MOVED_TO', 'File moved into watched directory'],
83
        64 => ['ON_MOVED_FROM', 'File moved out of watched directory'],
84
        256 => ['ON_CREATE', 'File or directory created in watched directory'],
85
        512 => ['ON_DELETE', 'File or directory deleted in watched directory'],
86
        1024 => ['ON_DELETE_SELF', 'Watched file or directory was deleted'],
87
        2048 => ['ON_MOVE_SELF', 'Watch file or directory was moved'],
88
        24 => ['ON_CLOSE', 'Equals to ON_CLOSE_WRITE | ON_CLOSE_NOWRITE'],
89
        192 => ['ON_MOVE', 'Equals to ON_MOVED_FROM | ON_MOVED_TO'],
90
        4095 => ['ON_ALL_EVENTS', 'Bitmask of all the above constants'],
91
        8192 => ['ON_UNMOUNT', 'File system containing watched object was unmounted'],
92
        16384 => ['ON_Q_OVERFLOW', 'Event queue overflowed (wd is -1 for this event)'],
93
        32768 => ['ON_IGNORED', 'Watch was removed (explicitly by inotify_rm_watch() or because file was removed or filesystem unmounted'],
94
        1073741824 => ['ON_ISDIR', 'Subject of this event is a directory'],
95
        1073741840 => ['ON_CLOSE_NOWRITE', 'High-bit: File not opened for writing was closed'],
96
        1073741856 => ['ON_OPEN', 'High-bit: File was opened'],
97
        1073742080 => ['ON_CREATE', 'High-bit: File or directory created in watched directory'],
98
        1073742336 => ['ON_DELETE', 'High-bit: File or directory deleted in watched directory'],
99
        16777216 => ['ON_ONLYDIR', 'Only watch pathname if it is a directory (Since Linux 2.6.15)'],
100
        33554432 => ['ON_DONT_FOLLOW', 'Do not dereference pathname if it is a symlink (Since Linux 2.6.15)'],
101
        536870912 => ['ON_MASK_ADD', 'Add events to watch mask for this pathname if it already exists (instead of replacing mask).'],
102
        2147483648 => ['ON_ONESHOT', 'Monitor pathname for one event, then remove from watch list.'],
103
    ];
104
105 2
    public static function getCodeDescription(int $code): string
106
    {
107 2
        if (!isset(self::$constants[$code])) {
108
            throw new InvalidArgumentException('Unknown code');
109
        }
110
111 2
        return implode(' - ', self::$constants[$code]);
112
    }
113
114 2
    public static function createFromMask(int $code): self
115
    {
116
        try {
117 2
            return new self($code);
118
        } catch (UnexpectedValueException $exception) {
119
            return self::UNKNOWN();
120
        }
121
    }
122
}