PluginProbe
WindPress – Tailwind CSS integration for WordPress / 3.0.3
WindPress – Tailwind CSS integration for WordPress v3.0.3
3.2.89 3.2.88 3.2.87 3.2.86 3.2.85 3.2.84 3.2.83 3.2.82 3.2.81 trunk 3.0.0 3.0.1 3.0.10 3.0.11 3.0.12 3.0.13 3.0.14 3.0.15 3.0.16 3.0.17 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 All 143 releases
windpress / vendor / hidehalo / nanoid-php / src / Client.php

Client.php in WindPress – Tailwind CSS integration for WordPress 3.0.3, at vendor/hidehalo/nanoid-php/src/Client.php

111 lines 3.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace WindPressPackages\Hidehalo\Nanoid;
4
5 class Client
6 {
7 /**
8 * Random mode flags
9 *
10 * @const MODE_NORMAL 1
11 * @const MODEL_DYNAMIC 2
12 */
13 const MODE_NORMAL = 1;
14 const MODE_DYNAMIC = 2;
15 /**
16 * @param string $alphabet Symbols to be used in ID.
17 * @param integer $size number of symbols in ID.
18 */
19 protected $alphabet;
20 protected $size;
21 /**
22 * @var CoreInterface $core Core dynamic random
23 */
24 private $core;
25 /**
26 * @var GeneratorInterface $generator Random Btyes Generator
27 */
28 protected $generator;
29 /**
30 * Constructor of Client
31 *
32 * @codeCoverageIgnore
33 * @param integer $size
34 * @param GeneratorInterface $generator
35 */
36 public function __construct($size = 21, GeneratorInterface $generator = null)
37 {
38 $this->size = $size > 0 ? $size : 21;
39 $this->generator = $generator ?: new Generator();
40 $this->core = new Core();
41 $this->alphabet = CoreInterface::SAFE_SYMBOLS;
42 }
43 /**
44 * Generate nanoid via optional modes
45 *
46 * @param integer $size
47 * @param integer $mode Client::MODE_NORMAL|Client::MODE_DYNAMIC
48 * @return string
49 */
50 public function generateId($size = 0, $mode = self::MODE_NORMAL)
51 {
52 $size = $size > 0 ? $size : $this->size;
53 switch ($mode) {
54 case self::MODE_DYNAMIC:
55 return $this->core->random($this->generator, $size, $this->alphabet);
56 default:
57 return $this->normalRandom($size);
58 }
59 }
60 /**
61 * The original API of nanoid. Use it be careful, Please make sure
62 * you have been implements your custom GeneratorInterface as correctly.
63 * Otherwise use the build-in default random bytes generator
64 *
65 * @param GeneratorInterface $generator
66 * @param integer $size
67 * @param string $alphabet default CoreInterface::SAFE_SYMBOLS
68 * @return string
69 */
70 public function formattedId($alphabet, $size = 0, GeneratorInterface $generator = null)
71 {
72 $alphabet = $alphabet ?: CoreInterface::SAFE_SYMBOLS;
73 $size = $size > 0 ? $size : $this->size;
74 $generator = $generator ?: $this->generator;
75 return $this->core->random($generator, $size, $alphabet);
76 }
77 /**
78 * Backwards-compatible method name.
79 *
80 * @param string $alphabet
81 * @param integer $size
82 * @param GeneratorInterface $generator
83 *
84 * @return string
85 * @since 1.0.0
86 */
87 public function formatedId($alphabet, $size = 0, GeneratorInterface $generator = null)
88 {
89 $size = $size > 0 ? $size : $this->size;
90 return $this->formattedId($alphabet, $size, $generator);
91 }
92 /**
93 * Generate secure URL-friendly unique ID.
94 * By default, ID will have 21 symbols to have same collisions probability
95 * as UUID v4.
96 *
97 * @see https://github.com/ai/nanoid/blob/master/non-secure/index.js#L19
98 * @param integer $size
99 * @return string
100 */
101 private function normalRandom($size)
102 {
103 $id = '';
104 while (1 <= $size--) {
105 $rand = \mt_rand() / (\mt_getrandmax() + 1);
106 $id .= $this->alphabet[\intval($rand * 64)];
107 }
108 return $id;
109 }
110 }
111